ETH Price: $3,161.35 (+2.05%)
Gas: 19.2 Gwei

Token

Bendys (BENDYS)
 

Overview

Max Total Supply

230 BENDYS

Holders

128

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
versian.eth
Balance
1 BENDYS
0xa5f6d896e8b4d29ac6e5d8c4b26f8d2073ac90ae
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:
Bendys

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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


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

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/Ownable.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: ERC721/ERC721TokenReceiver.sol



pragma solidity ^0.8.0;

/// @notice A generic interface for a contract which properly accepts ERC721 tokens.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol)
interface ERC721TokenReceiver {
	function onERC721Received(
		address operator,
		address from,
		uint256 id,
		bytes calldata data
	) external returns (bytes4);
}
// File: ERC721/ERC721.sol



pragma solidity ^0.8.0;


abstract contract ERC721 {
	/* -------------------------------------------------------------------------- */
	/*                                   EVENTS                                   */
	/* -------------------------------------------------------------------------- */

	/// @dev Emitted when `id` token is transferred from `from` to `to`.
	event Transfer(address indexed from, address indexed to, uint256 indexed id);

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

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

	/* -------------------------------------------------------------------------- */
	/*                              METADATA STORAGE                              */
	/* -------------------------------------------------------------------------- */

	/// @dev The collection name.
	string private _name;

	/// @dev The collection symbol.
	string private _symbol;

	/* -------------------------------------------------------------------------- */
	/*                               ERC721 STORAGE                               */
	/* -------------------------------------------------------------------------- */

	/// @dev ID => spender
	mapping(uint256 => address) internal _tokenApprovals;

	/// @dev owner => operator => approved
	mapping(address => mapping(address => bool)) internal _operatorApprovals;

	/* -------------------------------------------------------------------------- */
	/*                                 CONSTRUCTOR                                */
	/* -------------------------------------------------------------------------- */

	/// @param name_ The collection name.
	/// @param symbol_ The collection symbol.
	constructor(string memory name_, string memory symbol_) {
		_name = name_;
		_symbol = symbol_;
	}

	/* -------------------------------------------------------------------------- */
	/*                                ERC165 LOGIC                                */
	/* -------------------------------------------------------------------------- */

	/// @notice Returns true if this contract implements an interface from its ID.
	/// @dev See the corresponding
	/// [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified)
	/// to learn more about how these IDs are created.
	/// @return The implementation status.
	function supportsInterface(bytes4 interfaceId) public pure virtual returns (bool) {
		return
			interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165
			interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721
			interfaceId == 0x5b5e139f || // ERC165 Interface ID for ERC721Metadata
			interfaceId == 0x780e9d63; // ERC165 Interface ID for ERC721Enumerable
	}

	/* -------------------------------------------------------------------------- */
	/*                               METADATA LOGIC                               */
	/* -------------------------------------------------------------------------- */

	/// @notice Returns the collection name.
	/// @return The collection name.
	function name() public view virtual returns (string memory) {
		return _name;
	}

	/// @notice Returns the collection symbol.
	/// @return The collection symbol.
	function symbol() public view virtual returns (string memory) {
		return _symbol;
	}

	/// @notice Returns the Uniform Resource Identifier (URI) for `id` token.
	/// @param id The token ID.
	/// @return The URI.
	function tokenURI(uint256 id) public view virtual returns (string memory);

	/* -------------------------------------------------------------------------- */
	/*                              ENUMERABLE LOGIC                              */
	/* -------------------------------------------------------------------------- */

	/// @notice Returns the total amount of tokens stored by the contract.
	/// @return The token supply.
	function totalSupply() public view virtual returns (uint256);

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

	/// @notice Returns a token ID at a given `index` of all the tokens stored by the contract.
	/// @dev Use along with {totalSupply} to enumerate all tokens.
	/// @param index The index to query.
	/// @return The token ID.
	function tokenByIndex(uint256 index) public view virtual returns (uint256);

	/* -------------------------------------------------------------------------- */
	/*                                ERC721 LOGIC                                */
	/* -------------------------------------------------------------------------- */

	/// @notice Returns the account approved for a token ID.
	/// @dev Requirements:
	/// - `id` must exist.
	/// @param id Token ID to query.
	/// @return The account approved for `id` token.
	function getApproved(uint256 id) public virtual returns (address) {
		require(_exists(id), "NONEXISTENT_TOKEN");
		return _tokenApprovals[id];
	}

	/// @notice Returns if the `operator` is allowed to manage all of the assets of `owner`.
	/// @param owner The address of the owner.
	/// @param operator The address of the operator.
	/// @return True if `operator` was approved by `owner`.
	function isApprovedForAll(address owner, address operator) public view virtual returns (bool) {
		return _operatorApprovals[owner][operator];
	}

	/// @notice Gives permission to `to` to transfer `id` token to another account.
	/// @dev 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.
	/// - `id` must exist.
	/// Emits an {Approval} event.
	/// @param spender The address of the spender to approve to.
	/// @param id The token ID to approve.
	function approve(address spender, uint256 id) public virtual {
		address owner = ownerOf(id);

		require(isApprovedForAll(owner, msg.sender) || msg.sender == owner, "NOT_AUTHORIZED");

		_tokenApprovals[id] = spender;

		emit Approval(owner, spender, id);
	}

	/// @notice Approve or remove `operator` as an operator for the caller.
	/// @dev Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
	/// Emits an {ApprovalForAll} event.
	/// @param operator The address of the operator to approve.
	/// @param approved The status to set.
	function setApprovalForAll(address operator, bool approved) public virtual {
		_operatorApprovals[msg.sender][operator] = approved;

		emit ApprovalForAll(msg.sender, operator, approved);
	}

	/// @notice Transfers `id` token from `from` to `to`.
	/// WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
	/// @dev Requirements:
	/// - `to` cannot be the zero address.
	/// - `id` 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.
	/// @param from The address to transfer from.
	/// @param to The address to transfer to.
	/// @param id The token ID to transfer.
	function transferFrom(
		address from,
		address to,
		uint256 id
	) public virtual {
		_transfer(from, to, id);
	}

	/// @notice Safely transfers `id` token from `from` to `to`.
	/// @dev Requirements:
	/// - `to` cannot be the zero address.
	/// - `id` 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 {ERC721TokenReceiver-onERC721Received}, which is called upon a safe transfer.
	/// Emits a {Transfer} event.
	/// @param from The address to transfer from.
	/// @param to The address to transfer to.
	/// @param id The token ID to transfer.
	function safeTransferFrom(
		address from,
		address to,
		uint256 id
	) public virtual {
		_transfer(from, to, id);

		require(to.code.length == 0 || ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, "") == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT");
	}

	/// @notice Safely transfers `id` token from `from` to `to`.
	/// @dev Requirements:
	/// - `to` cannot be the zero address.
	/// - `id` 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 {ERC721TokenReceiver-onERC721Received}, which is called upon a safe transfer.
	/// Emits a {Transfer} event.
	/// Additionally passes `data` in the callback.
	/// @param from The address to transfer from.
	/// @param to The address to transfer to.
	/// @param id The token ID to transfer.
	/// @param data The calldata to pass in the {ERC721TokenReceiver-onERC721Received} callback.
	function safeTransferFrom(
		address from,
		address to,
		uint256 id,
		bytes memory data
	) public virtual {
		_transfer(from, to, id);

		require(to.code.length == 0 || ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, data) == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT");
	}

	/// @notice Returns the number of tokens in an account.
	/// @param owner The address to query.
	/// @return The balance.
	function balanceOf(address owner) public view virtual returns (uint256);

	/// @notice Returns the owner of a token ID.
	/// @dev Requirements:
	/// - `id` must exist.
	/// @param id The token ID.
	function ownerOf(uint256 id) public view virtual returns (address);

	/* -------------------------------------------------------------------------- */
	/*                               INTERNAL LOGIC                               */
	/* -------------------------------------------------------------------------- */

	/// @dev Returns whether a token ID exists.
	/// Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
	/// Tokens start existing when they are minted.
	/// @param id Token ID to query.
	function _exists(uint256 id) internal view virtual returns (bool);

	/// @dev Transfers `id` from `from` to `to`.
	/// Requirements:
	/// - `to` cannot be the zero address.
	/// - `id` token must be owned by `from`.
	/// Emits a {Transfer} event.
	/// @param from The address to transfer from.
	/// @param to The address to transfer to.
	/// @param id The token ID to transfer.
	function _transfer(
		address from,
		address to,
		uint256 id
	) internal virtual;

	/// @dev Mints `amount` tokens to `to`.
	/// Requirements:
	/// - there must be `amount` tokens remaining unminted in the total collection.
	/// - `to` cannot be the zero address.
	/// Emits `amount` {Transfer} events.
	/// @param to The address to mint to.
	/// @param amount The amount of tokens to mint.
	function _mint(address to, uint256 amount) internal virtual;

	/// @dev Safely mints `amount` of tokens and transfers them to `to`.
	/// If `to` is a contract it must implement {ERC721TokenReceiver.onERC721Received}
	/// that returns {ERC721TokenReceiver.onERC721Received.selector}.
	/// @param to The address to mint to.
	/// @param amount The amount of tokens to mint.
	function _safeMint(address to, uint256 amount) internal virtual {
		_mint(to, amount);

		require(to.code.length == 0 || ERC721TokenReceiver(to).onERC721Received(address(0), to, totalSupply() - amount + 1, "") == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT");
	}

	/// @dev Safely mints `amount` of tokens and transfers them to `to`.
	/// Requirements:
	/// - `id` must not exist.
	/// - If `to` refers to a smart contract, it must implement {ERC721TokenReceiver.onERC721Received}, which is called upon a safe transfer.
	/// Additionally passes `data` in the callback.
	/// @param to The address to mint to.
	/// @param amount The amount of tokens to mint.
	/// @param data The calldata to pass in the {ERC721TokenReceiver.onERC721Received} callback.
	function _safeMint(
		address to,
		uint256 amount,
		bytes memory data
	) internal virtual {
		_mint(to, amount);

		require(to.code.length == 0 || ERC721TokenReceiver(to).onERC721Received(address(0), to, totalSupply() - amount + 1, data) == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT");
	}

	/* -------------------------------------------------------------------------- */
	/*                                    UTILS                                   */
	/* -------------------------------------------------------------------------- */

	/// @notice Converts a `uint256` to its ASCII `string` decimal representation.
	/// @dev https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol
	function toString(uint256 value) internal pure virtual 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);
	}
}
// File: ERC721/extensions/ERC721Tradable.sol



pragma solidity ^0.8.0;


/// @notice An interface for the OpenSea Proxy Registry.
interface IProxyRegistry {
	function proxies(address) external view returns (address);
}

abstract contract ERC721Tradable is ERC721 {
	/* -------------------------------------------------------------------------- */
	/*                              IMMUTABLE STORAGE                             */
	/* -------------------------------------------------------------------------- */

	/// @notice The OpenSea Proxy Registry address.
	address public immutable openSeaProxyRegistry;

	/// @notice The LooksRare Transfer Manager (ERC721) address.
	address public immutable looksRareTransferManager;

	/* -------------------------------------------------------------------------- */
	/*                               MUTABLE STORAGE                              */
	/* -------------------------------------------------------------------------- */

	/// @notice Returns true if the stored marketplace addresses are whitelisted in {isApprovedForAll}.
	/// @dev Enabled by default. Can be turned off with {setMarketplaceApprovalForAll}.
	bool public marketPlaceApprovalForAll = true;

	/* -------------------------------------------------------------------------- */
	/*                                 CONSTRUCTOR                                */
	/* -------------------------------------------------------------------------- */

	/// OpenSea proxy registry addresses:
	/// - ETHEREUM MAINNET: 0xa5409ec958C83C3f309868babACA7c86DCB077c1
	/// - ETHEREUM RINKEBY: 0xF57B2c51dED3A29e6891aba85459d600256Cf317
	/// LooksRare Transfer Manager addresses (https://docs.looksrare.org/developers/deployed-contract-addresses):
	/// - ETHEREUM MAINNET: 0xf42aa99F011A1fA7CDA90E5E98b277E306BcA83e
	/// - ETHEREUM RINKEBY: 0x3f65A762F15D01809cDC6B43d8849fF24949c86a
	/// @param _openSeaProxyRegistry The OpenSea proxy registry address.
	constructor(address _openSeaProxyRegistry, address _looksRareTransferManager) {
		require(_openSeaProxyRegistry != address(0) && _looksRareTransferManager != address(0), "INVALID_ADDRESS");
		openSeaProxyRegistry = _openSeaProxyRegistry;
		looksRareTransferManager = _looksRareTransferManager;
	}

	/* -------------------------------------------------------------------------- */
	/*                            ERC721ATradable LOGIC                           */
	/* -------------------------------------------------------------------------- */

	/// @notice Enables or disables the marketplace whitelist in {isApprovedForAll}.
	/// @dev Must be implemented in inheriting contracts.
	/// Recommended to use in combination with an access control contract (e.g. OpenZeppelin's Ownable).
	function setMarketplaceApprovalForAll(bool approved) public virtual;

	/// @return True if `operator` is a whitelisted marketplace contract or if it was approved by `owner` with {ERC721A.setApprovalForAll}.
	/// @inheritdoc ERC721
	function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
		if (marketPlaceApprovalForAll && (operator == IProxyRegistry(openSeaProxyRegistry).proxies(owner) || operator == looksRareTransferManager)) return true;
		return super.isApprovedForAll(owner, operator);
	}
}
// File: ERC721/ERC721M.sol



pragma solidity ^0.8.0;


abstract contract ERC721M is ERC721 {
	/* -------------------------------------------------------------------------- */
	/*                               ERC721M STORAGE                              */
	/* -------------------------------------------------------------------------- */

	/// @dev The index is the token ID counter and points to its owner.
	address[] internal _owners;

	/* -------------------------------------------------------------------------- */
	/*                                 CONSTRUCTOR                                */
	/* -------------------------------------------------------------------------- */

	constructor(string memory name_, string memory symbol_) ERC721(name_, symbol_) {
		// Initializes the index to 1.
		_owners.push();
	}

	/* -------------------------------------------------------------------------- */
	/*                              ENUMERABLE LOGIC                              */
	/* -------------------------------------------------------------------------- */

	/// @inheritdoc ERC721
	function totalSupply() public view override returns (uint256) {
		// Overflow is impossible as _owners.length is initialized to 1.
		unchecked {
			return _owners.length - 1;
		}
	}

	/// @dev O(totalSupply), it is discouraged to call this function from other contracts
	/// as it can become very expensive, especially with higher total collection sizes.
	/// @inheritdoc ERC721
	function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
		require(index < balanceOf(owner), "INVALID_INDEX");

		// Both of the counters cannot overflow because the loop breaks before that.
		unchecked {
			uint256 count;
			uint256 _currentIndex = _owners.length; // == totalSupply() + 1 == _owners.length - 1 + 1
			for (uint256 i; i < _currentIndex; i++) {
				if (owner == ownerOf(i)) {
					if (count == index) return i;
					else count++;
				}
			}
		}

		revert("NOT_FOUND");
	}

	/// @inheritdoc ERC721
	function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
		require(_exists(index), "INVALID_INDEX");
		return index;
	}

	/* -------------------------------------------------------------------------- */
	/*                                ERC721 LOGIC                                */
	/* -------------------------------------------------------------------------- */

	/// @dev O(totalSupply), it is discouraged to call this function from other contracts
	/// as it can become very expensive, especially with higher total collection sizes.
	/// @inheritdoc ERC721
	function balanceOf(address owner) public view virtual override returns (uint256 balance) {
		require(owner != address(0), "INVALID_OWNER");

		unchecked {
			// Start at 1 since token 0 does not exist
			uint256 _currentIndex = _owners.length; // == totalSupply() + 1 == _owners.length - 1 + 1
			for (uint256 i = 1; i < _currentIndex; i++) {
				if (owner == ownerOf(i)) {
					balance++;
				}
			}
		}
	}

	/// @dev O(MAX_TX), gradually moves to O(1) as more tokens get transferred and
	/// the owners are explicitly set.
	/// @inheritdoc ERC721
	function ownerOf(uint256 id) public view virtual override returns (address owner) {
		require(_exists(id), "NONEXISTENT_TOKEN");

		for (uint256 i = id; ; i++) {
			owner = _owners[i];
			if (owner != address(0)) {
				return owner;
			}
		}
	}

	/* -------------------------------------------------------------------------- */
	/*                               INTERNAL LOGIC                               */
	/* -------------------------------------------------------------------------- */

	/// @inheritdoc ERC721
	function _mint(address to, uint256 amount) internal virtual override {
		require(to != address(0), "INVALID_RECIPIENT");
		require(amount != 0, "INVALID_AMOUNT");

		unchecked {
			uint256 _currentIndex = _owners.length; // == totalSupply() + 1 == _owners.length - 1 + 1

			for (uint256 i; i < amount - 1; i++) {
				// storing address(0) while also incrementing the index
				_owners.push();
				emit Transfer(address(0), to, _currentIndex + i);
			}

			// storing the actual owner
			_owners.push(to);
			emit Transfer(address(0), to, _currentIndex + (amount - 1));
		}
	}

	/// @inheritdoc ERC721
	function _exists(uint256 id) internal view virtual override returns (bool) {
		return id != 0 && id < _owners.length;
	}

	/// @inheritdoc ERC721
	function _transfer(
		address from,
		address to,
		uint256 id
	) internal virtual override {
		require(ownerOf(id) == from, "WRONG_FROM");
		require(to != address(0), "INVALID_RECIPIENT");
		require(msg.sender == from || getApproved(id) == msg.sender || isApprovedForAll(from, msg.sender), "NOT_AUTHORIZED");

		delete _tokenApprovals[id];

		_owners[id] = to;

		unchecked {
			uint256 prevId = id - 1;
			if (_owners[prevId] == address(0)) {
				_owners[prevId] = from;
			}
		}

		emit Transfer(from, to, id);
	}
}
// File: Bendys.sol



pragma solidity ^0.8.0;





contract Bendys is ERC721M, ERC721Tradable, Ownable {
	uint256 public constant PRICE = 0.02 ether;

	uint256 public constant MAX_SUPPLY = 2222;
	uint256 public constant MAX_RESERVE = 22;
	uint256 public constant MAX_PUBLIC = 2200; // MAX_SUPPLY - MAX_RESERVE
	uint256 public constant MAX_FREE = 150;

	uint256 public constant MAX_TX = 20;

	uint256 public reservesMinted;

	string public baseURI;

	bool public isSaleActive;

	mapping (address => bool) public hasClaimed;

	/* -------------------------------------------------------------------------- */
	/*                                 CONSTRUCTOR                                */
	/* -------------------------------------------------------------------------- */

	constructor(
		address _openSeaProxyRegistry,
		address _looksRareTransferManager,
		string memory _baseURI
	) payable ERC721M("Bendys", "BENDYS") ERC721Tradable(_openSeaProxyRegistry, _looksRareTransferManager) {
		baseURI = _baseURI;
	}

	/* -------------------------------------------------------------------------- */
	/*                                    USER                                    */
	/* -------------------------------------------------------------------------- */

	/// @notice Mints an amount of tokens and transfers them to the caller during the public sale.
	/// @param amount The amount of tokens to mint.
	function publicMint(uint256 amount) external payable {
		require(isSaleActive, "Sale is not active");
		require(msg.sender == tx.origin, "No contracts allowed");

		uint256 _totalSupply = totalSupply();
		if (_totalSupply < MAX_FREE) {
			require(!hasClaimed[msg.sender], "Already claimed");
			hasClaimed[msg.sender] = true;
			
			_mint(msg.sender, 1);
			
			return;
		}
			
		require(msg.value == PRICE * amount, "Wrong ether amount");
		require(amount <= MAX_TX, "Amount exceeds tx limit");
		require(_totalSupply + amount <= MAX_PUBLIC, "Max public supply reached");

		_mint(msg.sender, amount);
	}

	/* -------------------------------------------------------------------------- */
	/*                                    OWNER                                   */
	/* -------------------------------------------------------------------------- */

	/// @notice Enables or disables minting through {publicMint}.
	/// @dev Requirements:
	/// - Caller must be the owner.
	function setIsSaleActive(bool _isSaleActive) external onlyOwner {
		isSaleActive = _isSaleActive;
	}

	/// @notice Mints tokens to multiple addresses.
	/// @dev Requirements:
	/// - Caller must be the owner.
	/// @param recipients The addresses to mint the tokens to.
	/// @param amounts The amounts of tokens to mint.
	function reserveMint(address[] calldata recipients, uint256[] calldata amounts) external onlyOwner {
		unchecked {
			uint256 sum;
			uint256 length = recipients.length;
			for (uint256 i; i < length; i++) {
				address to = recipients[i];
				require(to != address(0), "Invalid recipient");
				uint256 amount = amounts[i];

				_mint(to, amount);
				sum += amount;
			}

			uint256 totalReserves = reservesMinted + sum;

			require(totalSupply() <= MAX_SUPPLY, "Max supply reached");
			require(totalReserves <= MAX_RESERVE, "Amount exceeds reserve limit");

			reservesMinted = totalReserves;
		}
	}

	/// @notice Sets the base Uniform Resource Identifier (URI) for token metadata.
	/// @dev Requirements:
	/// - Caller must be the owner.
	/// @param _baseURI The base URI.
	function setBaseURI(string calldata _baseURI) external onlyOwner {
		baseURI = _baseURI;
	}

	/// @notice Withdraws all contract balance to the caller.
	/// @dev Requirements:
	/// - Caller must be the owner.
	function withdrawETH() external onlyOwner {
		_transferETH(msg.sender, address(this).balance);
	}

	/// @dev Requirements:
	/// - Caller must be the owner.
	/// @inheritdoc ERC721Tradable
	function setMarketplaceApprovalForAll(bool approved) public override onlyOwner {
		marketPlaceApprovalForAll = approved;
	}

	/* -------------------------------------------------------------------------- */
	/*                             SOLIDITY OVERRIDES                             */
	/* -------------------------------------------------------------------------- */

	/// @inheritdoc ERC721
	function tokenURI(uint256 id) public view override returns (string memory) {
		require(_exists(id), "NONEXISTENT_TOKEN");
		string memory _baseURI = baseURI;
		return bytes(_baseURI).length == 0 ? "" : string(abi.encodePacked(_baseURI, toString(id)));
	}

	/// @inheritdoc ERC721Tradable
	function isApprovedForAll(address owner, address operator) public view override(ERC721, ERC721Tradable) returns (bool) {
		return ERC721Tradable.isApprovedForAll(owner, operator);
	}

	/* -------------------------------------------------------------------------- */
	/*                                    UTILS                                   */
	/* -------------------------------------------------------------------------- */

	function _transferETH(address to, uint256 value) internal {
		// solhint-disable-next-line avoid-low-level-calls
		(bool success, ) = to.call{ value: value }("");
		require(success, "ETH transfer failed");
	}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_openSeaProxyRegistry","type":"address"},{"internalType":"address","name":"_looksRareTransferManager","type":"address"},{"internalType":"string","name":"_baseURI","type":"string"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_FREE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PUBLIC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_RESERVE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hasClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"looksRareTransferManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketPlaceApprovalForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openSeaProxyRegistry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"reserveMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservesMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isSaleActive","type":"bool"}],"name":"setIsSaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"approved","type":"bool"}],"name":"setMarketplaceApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c060408190526005805460ff1916600117905562002a0638819003908190833981016040819052620000329162000286565b82826040518060400160405280600681526020016542656e64797360d01b8152506040518060400160405280600681526020016542454e44595360d01b815250818181600090805190602001906200008c929190620001ad565b508051620000a2906001906020840190620001ad565b50506004805460010181556000525050506001600160a01b03821615801590620000d457506001600160a01b03811615155b620001175760405162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4144445245535360881b604482015260640160405180910390fd5b6001600160a01b039182166080521660a052620001343362000153565b805162000149906007906020840190620001ad565b50505050620003c7565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001bb906200038a565b90600052602060002090601f016020900481019282620001df57600085556200022a565b82601f10620001fa57805160ff19168380011785556200022a565b828001600101855582156200022a579182015b828111156200022a5782518255916020019190600101906200020d565b50620002389291506200023c565b5090565b5b808211156200023857600081556001016200023d565b80516001600160a01b03811681146200026b57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806000606084860312156200029c57600080fd5b620002a78462000253565b92506020620002b881860162000253565b60408601519093506001600160401b0380821115620002d657600080fd5b818701915087601f830112620002eb57600080fd5b81518181111562000300576200030062000270565b604051601f8201601f19908116603f011681019083821181831017156200032b576200032b62000270565b816040528281528a868487010111156200034457600080fd5b600093505b8284101562000368578484018601518185018701529285019262000349565b828411156200037a5760008684830101525b8096505050505050509250925092565b600181811c908216806200039f57607f821691505b60208210811415620003c157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161260b620003fb6000396000818161044d0152611f0f0152600081816104190152611e88015261260b6000f3fe6080604052600436106102855760003560e01c806370a0823111610153578063b88d4fde116100cb578063e985e9c51161007f578063eff31e9e11610064578063eff31e9e146106e6578063f2fde38b146106fb578063f3b2db3f1461071b57600080fd5b8063e985e9c5146106b1578063ed6661c2146106d157600080fd5b8063cc41d795116100b0578063cc41d79514610666578063d2d65ff51461067c578063e086e5ec1461069c57600080fd5b8063b88d4fde14610626578063c87b56dd1461064657600080fd5b80638da5cb5b11610122578063963565e111610107578063963565e1146105d05780639753eac0146105f0578063a22cb4651461060657600080fd5b80638da5cb5b1461059857806395d89b41146105bb57600080fd5b806370a0823114610518578063715018a61461053857806373b2e80e1461054d5780638d859f3e1461057d57600080fd5b806342842e0e11610201578063564566a8116101b55780635b7445a51161019a5780635b7445a5146104c95780636352211e146104e35780636c0360eb1461050357600080fd5b8063564566a81461048f5780635ac103fe146104a957600080fd5b80635025b548116101e65780635025b548146104075780635312650e1461043b57806355f804b31461046f57600080fd5b806342842e0e146103c75780634f6ccce7146103e757600080fd5b806318160ddd116102585780632db115441161023d5780632db115441461037e5780632f745c591461039157806332cb6b0c146103b157600080fd5b806318160ddd1461033b57806323b872dd1461035e57600080fd5b806301ffc9a71461028a57806306fdde03146102bf578063081812fc146102e1578063095ea7b314610319575b600080fd5b34801561029657600080fd5b506102aa6102a5366004612024565b610730565b60405190151581526020015b60405180910390f35b3480156102cb57600080fd5b506102d4610801565b6040516102b69190612099565b3480156102ed57600080fd5b506103016102fc3660046120ac565b610893565b6040516001600160a01b0390911681526020016102b6565b34801561032557600080fd5b506103396103343660046120da565b6108ff565b005b34801561034757600080fd5b50600454600019015b6040519081526020016102b6565b34801561036a57600080fd5b50610339610379366004612106565b6109de565b61033961038c3660046120ac565b6109ee565b34801561039d57600080fd5b506103506103ac3660046120da565b610c49565b3480156103bd57600080fd5b506103506108ae81565b3480156103d357600080fd5b506103396103e2366004612106565b610d31565b3480156103f357600080fd5b506103506104023660046120ac565b610e31565b34801561041357600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b34801561044757600080fd5b506103017f000000000000000000000000000000000000000000000000000000000000000081565b34801561047b57600080fd5b5061033961048a366004612147565b610e7c565b34801561049b57600080fd5b506008546102aa9060ff1681565b3480156104b557600080fd5b506103396104c43660046121ce565b610ee8565b3480156104d557600080fd5b506005546102aa9060ff1681565b3480156104ef57600080fd5b506103016104fe3660046120ac565b610f5b565b34801561050f57600080fd5b506102d4610ff0565b34801561052457600080fd5b506103506105333660046121e9565b61107e565b34801561054457600080fd5b5061033961111c565b34801561055957600080fd5b506102aa6105683660046121e9565b60096020526000908152604090205460ff1681565b34801561058957600080fd5b5061035066470de4df82000081565b3480156105a457600080fd5b5060055461010090046001600160a01b0316610301565b3480156105c757600080fd5b506102d4611188565b3480156105dc57600080fd5b506103396105eb366004612252565b611197565b3480156105fc57600080fd5b5061035061089881565b34801561061257600080fd5b506103396106213660046122be565b61137a565b34801561063257600080fd5b50610339610641366004612309565b6113e6565b34801561065257600080fd5b506102d46106613660046120ac565b6114d8565b34801561067257600080fd5b5061035060065481565b34801561068857600080fd5b506103396106973660046121ce565b611602565b3480156106a857600080fd5b50610339611675565b3480156106bd57600080fd5b506102aa6106cc3660046123e9565b6116df565b3480156106dd57600080fd5b50610350609681565b3480156106f257600080fd5b50610350601681565b34801561070757600080fd5b506103396107163660046121e9565b6116eb565b34801561072757600080fd5b50610350601481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316148061079357507f80ac58cd000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b806107c757507f5b5e139f000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b806107fb57507f780e9d63000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b60606000805461081090612422565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90612422565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b5050505050905090565b600061089e826117d3565b6108e35760405162461bcd60e51b81526020600482015260116024820152702727a722ac24a9aa22a72a2faa27a5a2a760791b60448201526064015b60405180910390fd5b506000908152600260205260409020546001600160a01b031690565b600061090a82610f5b565b905061091681336116df565b806109295750336001600160a01b038216145b6109755760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016108da565b600082815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6109e98383836117e7565b505050565b60085460ff16610a405760405162461bcd60e51b815260206004820152601260248201527f53616c65206973206e6f7420616374697665000000000000000000000000000060448201526064016108da565b333214610a8f5760405162461bcd60e51b815260206004820152601460248201527f4e6f20636f6e74726163747320616c6c6f77656400000000000000000000000060448201526064016108da565b6000610a9e6004546000190190565b90506096811015610b34573360009081526009602052604090205460ff1615610b095760405162461bcd60e51b815260206004820152600f60248201527f416c726561647920636c61696d6564000000000000000000000000000000000060448201526064016108da565b336000818152600960205260409020805460ff19166001908117909155610b309190611a60565b5050565b610b458266470de4df820000612473565b3414610b935760405162461bcd60e51b815260206004820152601260248201527f57726f6e6720657468657220616d6f756e74000000000000000000000000000060448201526064016108da565b6014821115610be45760405162461bcd60e51b815260206004820152601760248201527f416d6f756e742065786365656473207478206c696d697400000000000000000060448201526064016108da565b610898610bf18383612492565b1115610c3f5760405162461bcd60e51b815260206004820152601960248201527f4d6178207075626c696320737570706c7920726561636865640000000000000060448201526064016108da565b610b303383611a60565b6000610c548361107e565b8210610c925760405162461bcd60e51b815260206004820152600d60248201526c0929cac82989288be929c888ab609b1b60448201526064016108da565b600454600090815b81811015610ce557610cab81610f5b565b6001600160a01b0316866001600160a01b03161415610cdd5784831415610cd65792506107fb915050565b6001909201915b600101610c9a565b505060405162461bcd60e51b815260206004820152600960248201527f4e4f545f464f554e440000000000000000000000000000000000000000000000604482015260640190506108da565b610d3c8383836117e7565b6001600160a01b0382163b1580610de55750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af1158015610db5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd991906124aa565b6001600160e01b031916145b6109e95760405162461bcd60e51b815260206004820152601060248201527f554e534146455f524543495049454e540000000000000000000000000000000060448201526064016108da565b6000610e3c826117d3565b610e785760405162461bcd60e51b815260206004820152600d60248201526c0929cac82989288be929c888ab609b1b60448201526064016108da565b5090565b6005546001600160a01b03610100909104163314610edc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108da565b6109e960078383611f7e565b6005546001600160a01b03610100909104163314610f485760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108da565b6005805460ff1916911515919091179055565b6000610f66826117d3565b610fa65760405162461bcd60e51b81526020600482015260116024820152702727a722ac24a9aa22a72a2faa27a5a2a760791b60448201526064016108da565b815b60048181548110610fbb57610fbb6124c7565b6000918252602090912001546001600160a01b031691508115610fde5750919050565b80610fe8816124dd565b915050610fa8565b60078054610ffd90612422565b80601f016020809104026020016040519081016040528092919081815260200182805461102990612422565b80156110765780601f1061104b57610100808354040283529160200191611076565b820191906000526020600020905b81548152906001019060200180831161105957829003601f168201915b505050505081565b60006001600160a01b0382166110d65760405162461bcd60e51b815260206004820152600d60248201527f494e56414c49445f4f574e45520000000000000000000000000000000000000060448201526064016108da565b60045460015b81811015611115576110ed81610f5b565b6001600160a01b0316846001600160a01b0316141561110d576001909201915b6001016110dc565b5050919050565b6005546001600160a01b0361010090910416331461117c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108da565b6111866000611bf2565b565b60606001805461081090612422565b6005546001600160a01b036101009091041633146111f75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108da565b600083815b818110156112ba576000878783818110611218576112186124c7565b905060200201602081019061122d91906121e9565b90506001600160a01b0381166112855760405162461bcd60e51b815260206004820152601160248201527f496e76616c696420726563697069656e7400000000000000000000000000000060448201526064016108da565b6000868684818110611299576112996124c7565b9050602002013590506112ac8282611a60565b9390930192506001016111fc565b5060065482016108ae6112d06004546000190190565b111561131e5760405162461bcd60e51b815260206004820152601260248201527f4d617820737570706c792072656163686564000000000000000000000000000060448201526064016108da565b601681111561136f5760405162461bcd60e51b815260206004820152601c60248201527f416d6f756e7420657863656564732072657365727665206c696d69740000000060448201526064016108da565b600655505050505050565b3360008181526003602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6113f18484846117e7565b6001600160a01b0383163b15806114865750604051630a85bd0160e11b808252906001600160a01b0385169063150b7a02906114379033908990889088906004016124f8565b6020604051808303816000875af1158015611456573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147a91906124aa565b6001600160e01b031916145b6114d25760405162461bcd60e51b815260206004820152601060248201527f554e534146455f524543495049454e540000000000000000000000000000000060448201526064016108da565b50505050565b60606114e3826117d3565b6115235760405162461bcd60e51b81526020600482015260116024820152702727a722ac24a9aa22a72a2faa27a5a2a760791b60448201526064016108da565b60006007805461153290612422565b80601f016020809104026020016040519081016040528092919081815260200182805461155e90612422565b80156115ab5780601f10611580576101008083540402835291602001916115ab565b820191906000526020600020905b81548152906001019060200180831161158e57829003601f168201915b5050505050905080516000146115ea57806115c584611c63565b6040516020016115d6929190612534565b6040516020818303038152906040526115fb565b604051806020016040528060008152505b9392505050565b6005546001600160a01b036101009091041633146116625760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108da565b6008805460ff1916911515919091179055565b6005546001600160a01b036101009091041633146116d55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108da565b6111863347611d9d565b60006115fb8383611e40565b6005546001600160a01b0361010090910416331461174b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108da565b6001600160a01b0381166117c75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108da565b6117d081611bf2565b50565b600081158015906107fb5750506004541190565b826001600160a01b03166117fa82610f5b565b6001600160a01b0316146118505760405162461bcd60e51b815260206004820152600a60248201527f57524f4e475f46524f4d0000000000000000000000000000000000000000000060448201526064016108da565b6001600160a01b0382166118a65760405162461bcd60e51b815260206004820152601160248201527f494e56414c49445f524543495049454e5400000000000000000000000000000060448201526064016108da565b336001600160a01b03841614806118cd5750336118c282610893565b6001600160a01b0316145b806118dd57506118dd83336116df565b6119295760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016108da565b6000818152600260205260409020805473ffffffffffffffffffffffffffffffffffffffff191690556004805483919083908110611969576119696124c7565b60009182526020822001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039390931692909217909155600480546000198401929190839081106119bb576119bb6124c7565b6000918252602090912001546001600160a01b03161415611a195783600482815481106119ea576119ea6124c7565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b5080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6001600160a01b038216611ab65760405162461bcd60e51b815260206004820152601160248201527f494e56414c49445f524543495049454e5400000000000000000000000000000060448201526064016108da565b80611b035760405162461bcd60e51b815260206004820152600e60248201527f494e56414c49445f414d4f554e5400000000000000000000000000000000000060448201526064016108da565b60045460005b60018303811015611b61576004805460010181556000908152604051838301916001600160a01b038716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4600101611b09565b506004805460018101825560009182527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0386169081179091556040516000198585010192907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4505050565b600580546001600160a01b038381166101008181027fffffffffffffffffffffff0000000000000000000000000000000000000000ff85161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606081611ca357505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611ccd5780611cb7816124dd565b9150611cc69050600a83612579565b9150611ca7565b60008167ffffffffffffffff811115611ce857611ce86122f3565b6040519080825280601f01601f191660200182016040528015611d12576020820181803683370190505b5090505b8415611d9557611d2760018361258d565b9150611d34600a866125a4565b611d3f906030612492565b60f81b818381518110611d5457611d546124c7565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611d8e600a86612579565b9450611d16565b949350505050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611dea576040519150601f19603f3d011682016040523d82523d6000602084013e611def565b606091505b50509050806109e95760405162461bcd60e51b815260206004820152601360248201527f455448207472616e73666572206661696c65640000000000000000000000000060448201526064016108da565b60055460009060ff168015611f4357506040517fc45527910000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c455279190602401602060405180830381865afa158015611ecf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef391906125b8565b6001600160a01b0316826001600160a01b03161480611f4357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b15611f50575060016107fb565b6001600160a01b0380841660009081526003602090815260408083209386168352929052205460ff166115fb565b828054611f8a90612422565b90600052602060002090601f016020900481019282611fac5760008555611ff2565b82601f10611fc55782800160ff19823516178555611ff2565b82800160010185558215611ff2579182015b82811115611ff2578235825591602001919060010190611fd7565b50610e789291505b80821115610e785760008155600101611ffa565b6001600160e01b0319811681146117d057600080fd5b60006020828403121561203657600080fd5b81356115fb8161200e565b60005b8381101561205c578181015183820152602001612044565b838111156114d25750506000910152565b60008151808452612085816020860160208601612041565b601f01601f19169290920160200192915050565b6020815260006115fb602083018461206d565b6000602082840312156120be57600080fd5b5035919050565b6001600160a01b03811681146117d057600080fd5b600080604083850312156120ed57600080fd5b82356120f8816120c5565b946020939093013593505050565b60008060006060848603121561211b57600080fd5b8335612126816120c5565b92506020840135612136816120c5565b929592945050506040919091013590565b6000806020838503121561215a57600080fd5b823567ffffffffffffffff8082111561217257600080fd5b818501915085601f83011261218657600080fd5b81358181111561219557600080fd5b8660208285010111156121a757600080fd5b60209290920196919550909350505050565b803580151581146121c957600080fd5b919050565b6000602082840312156121e057600080fd5b6115fb826121b9565b6000602082840312156121fb57600080fd5b81356115fb816120c5565b60008083601f84011261221857600080fd5b50813567ffffffffffffffff81111561223057600080fd5b6020830191508360208260051b850101111561224b57600080fd5b9250929050565b6000806000806040858703121561226857600080fd5b843567ffffffffffffffff8082111561228057600080fd5b61228c88838901612206565b909650945060208701359150808211156122a557600080fd5b506122b287828801612206565b95989497509550505050565b600080604083850312156122d157600080fd5b82356122dc816120c5565b91506122ea602084016121b9565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561231f57600080fd5b843561232a816120c5565b9350602085013561233a816120c5565b925060408501359150606085013567ffffffffffffffff8082111561235e57600080fd5b818701915087601f83011261237257600080fd5b813581811115612384576123846122f3565b604051601f8201601f19908116603f011681019083821181831017156123ac576123ac6122f3565b816040528281528a60208487010111156123c557600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600080604083850312156123fc57600080fd5b8235612407816120c5565b91506020830135612417816120c5565b809150509250929050565b600181811c9082168061243657607f821691505b6020821081141561245757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561248d5761248d61245d565b500290565b600082198211156124a5576124a561245d565b500190565b6000602082840312156124bc57600080fd5b81516115fb8161200e565b634e487b7160e01b600052603260045260246000fd5b60006000198214156124f1576124f161245d565b5060010190565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261252a608083018461206d565b9695505050505050565b60008351612546818460208801612041565b83519083019061255a818360208801612041565b01949350505050565b634e487b7160e01b600052601260045260246000fd5b60008261258857612588612563565b500490565b60008282101561259f5761259f61245d565b500390565b6000826125b3576125b3612563565b500690565b6000602082840312156125ca57600080fd5b81516115fb816120c556fea2646970667358221220bcc9d19db706e10e4c971dbc80d95d4b2226e0437a46b8b4dd7b99e1ed154cca64736f6c634300080b0033000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1000000000000000000000000f42aa99f011a1fa7cda90e5e98b277e306bca83e0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000005568747470733a2f2f62656e6479736e66742e6d7970696e6174612e636c6f75642f697066732f516d504b394d5243506e465941346269634d34643957437350637a4b6e79363751526e4774765a586d6e507073392f0000000000000000000000

Deployed Bytecode

0x6080604052600436106102855760003560e01c806370a0823111610153578063b88d4fde116100cb578063e985e9c51161007f578063eff31e9e11610064578063eff31e9e146106e6578063f2fde38b146106fb578063f3b2db3f1461071b57600080fd5b8063e985e9c5146106b1578063ed6661c2146106d157600080fd5b8063cc41d795116100b0578063cc41d79514610666578063d2d65ff51461067c578063e086e5ec1461069c57600080fd5b8063b88d4fde14610626578063c87b56dd1461064657600080fd5b80638da5cb5b11610122578063963565e111610107578063963565e1146105d05780639753eac0146105f0578063a22cb4651461060657600080fd5b80638da5cb5b1461059857806395d89b41146105bb57600080fd5b806370a0823114610518578063715018a61461053857806373b2e80e1461054d5780638d859f3e1461057d57600080fd5b806342842e0e11610201578063564566a8116101b55780635b7445a51161019a5780635b7445a5146104c95780636352211e146104e35780636c0360eb1461050357600080fd5b8063564566a81461048f5780635ac103fe146104a957600080fd5b80635025b548116101e65780635025b548146104075780635312650e1461043b57806355f804b31461046f57600080fd5b806342842e0e146103c75780634f6ccce7146103e757600080fd5b806318160ddd116102585780632db115441161023d5780632db115441461037e5780632f745c591461039157806332cb6b0c146103b157600080fd5b806318160ddd1461033b57806323b872dd1461035e57600080fd5b806301ffc9a71461028a57806306fdde03146102bf578063081812fc146102e1578063095ea7b314610319575b600080fd5b34801561029657600080fd5b506102aa6102a5366004612024565b610730565b60405190151581526020015b60405180910390f35b3480156102cb57600080fd5b506102d4610801565b6040516102b69190612099565b3480156102ed57600080fd5b506103016102fc3660046120ac565b610893565b6040516001600160a01b0390911681526020016102b6565b34801561032557600080fd5b506103396103343660046120da565b6108ff565b005b34801561034757600080fd5b50600454600019015b6040519081526020016102b6565b34801561036a57600080fd5b50610339610379366004612106565b6109de565b61033961038c3660046120ac565b6109ee565b34801561039d57600080fd5b506103506103ac3660046120da565b610c49565b3480156103bd57600080fd5b506103506108ae81565b3480156103d357600080fd5b506103396103e2366004612106565b610d31565b3480156103f357600080fd5b506103506104023660046120ac565b610e31565b34801561041357600080fd5b506103017f000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c181565b34801561044757600080fd5b506103017f000000000000000000000000f42aa99f011a1fa7cda90e5e98b277e306bca83e81565b34801561047b57600080fd5b5061033961048a366004612147565b610e7c565b34801561049b57600080fd5b506008546102aa9060ff1681565b3480156104b557600080fd5b506103396104c43660046121ce565b610ee8565b3480156104d557600080fd5b506005546102aa9060ff1681565b3480156104ef57600080fd5b506103016104fe3660046120ac565b610f5b565b34801561050f57600080fd5b506102d4610ff0565b34801561052457600080fd5b506103506105333660046121e9565b61107e565b34801561054457600080fd5b5061033961111c565b34801561055957600080fd5b506102aa6105683660046121e9565b60096020526000908152604090205460ff1681565b34801561058957600080fd5b5061035066470de4df82000081565b3480156105a457600080fd5b5060055461010090046001600160a01b0316610301565b3480156105c757600080fd5b506102d4611188565b3480156105dc57600080fd5b506103396105eb366004612252565b611197565b3480156105fc57600080fd5b5061035061089881565b34801561061257600080fd5b506103396106213660046122be565b61137a565b34801561063257600080fd5b50610339610641366004612309565b6113e6565b34801561065257600080fd5b506102d46106613660046120ac565b6114d8565b34801561067257600080fd5b5061035060065481565b34801561068857600080fd5b506103396106973660046121ce565b611602565b3480156106a857600080fd5b50610339611675565b3480156106bd57600080fd5b506102aa6106cc3660046123e9565b6116df565b3480156106dd57600080fd5b50610350609681565b3480156106f257600080fd5b50610350601681565b34801561070757600080fd5b506103396107163660046121e9565b6116eb565b34801561072757600080fd5b50610350601481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316148061079357507f80ac58cd000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b806107c757507f5b5e139f000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b806107fb57507f780e9d63000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b60606000805461081090612422565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90612422565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b5050505050905090565b600061089e826117d3565b6108e35760405162461bcd60e51b81526020600482015260116024820152702727a722ac24a9aa22a72a2faa27a5a2a760791b60448201526064015b60405180910390fd5b506000908152600260205260409020546001600160a01b031690565b600061090a82610f5b565b905061091681336116df565b806109295750336001600160a01b038216145b6109755760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016108da565b600082815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6109e98383836117e7565b505050565b60085460ff16610a405760405162461bcd60e51b815260206004820152601260248201527f53616c65206973206e6f7420616374697665000000000000000000000000000060448201526064016108da565b333214610a8f5760405162461bcd60e51b815260206004820152601460248201527f4e6f20636f6e74726163747320616c6c6f77656400000000000000000000000060448201526064016108da565b6000610a9e6004546000190190565b90506096811015610b34573360009081526009602052604090205460ff1615610b095760405162461bcd60e51b815260206004820152600f60248201527f416c726561647920636c61696d6564000000000000000000000000000000000060448201526064016108da565b336000818152600960205260409020805460ff19166001908117909155610b309190611a60565b5050565b610b458266470de4df820000612473565b3414610b935760405162461bcd60e51b815260206004820152601260248201527f57726f6e6720657468657220616d6f756e74000000000000000000000000000060448201526064016108da565b6014821115610be45760405162461bcd60e51b815260206004820152601760248201527f416d6f756e742065786365656473207478206c696d697400000000000000000060448201526064016108da565b610898610bf18383612492565b1115610c3f5760405162461bcd60e51b815260206004820152601960248201527f4d6178207075626c696320737570706c7920726561636865640000000000000060448201526064016108da565b610b303383611a60565b6000610c548361107e565b8210610c925760405162461bcd60e51b815260206004820152600d60248201526c0929cac82989288be929c888ab609b1b60448201526064016108da565b600454600090815b81811015610ce557610cab81610f5b565b6001600160a01b0316866001600160a01b03161415610cdd5784831415610cd65792506107fb915050565b6001909201915b600101610c9a565b505060405162461bcd60e51b815260206004820152600960248201527f4e4f545f464f554e440000000000000000000000000000000000000000000000604482015260640190506108da565b610d3c8383836117e7565b6001600160a01b0382163b1580610de55750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af1158015610db5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd991906124aa565b6001600160e01b031916145b6109e95760405162461bcd60e51b815260206004820152601060248201527f554e534146455f524543495049454e540000000000000000000000000000000060448201526064016108da565b6000610e3c826117d3565b610e785760405162461bcd60e51b815260206004820152600d60248201526c0929cac82989288be929c888ab609b1b60448201526064016108da565b5090565b6005546001600160a01b03610100909104163314610edc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108da565b6109e960078383611f7e565b6005546001600160a01b03610100909104163314610f485760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108da565b6005805460ff1916911515919091179055565b6000610f66826117d3565b610fa65760405162461bcd60e51b81526020600482015260116024820152702727a722ac24a9aa22a72a2faa27a5a2a760791b60448201526064016108da565b815b60048181548110610fbb57610fbb6124c7565b6000918252602090912001546001600160a01b031691508115610fde5750919050565b80610fe8816124dd565b915050610fa8565b60078054610ffd90612422565b80601f016020809104026020016040519081016040528092919081815260200182805461102990612422565b80156110765780601f1061104b57610100808354040283529160200191611076565b820191906000526020600020905b81548152906001019060200180831161105957829003601f168201915b505050505081565b60006001600160a01b0382166110d65760405162461bcd60e51b815260206004820152600d60248201527f494e56414c49445f4f574e45520000000000000000000000000000000000000060448201526064016108da565b60045460015b81811015611115576110ed81610f5b565b6001600160a01b0316846001600160a01b0316141561110d576001909201915b6001016110dc565b5050919050565b6005546001600160a01b0361010090910416331461117c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108da565b6111866000611bf2565b565b60606001805461081090612422565b6005546001600160a01b036101009091041633146111f75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108da565b600083815b818110156112ba576000878783818110611218576112186124c7565b905060200201602081019061122d91906121e9565b90506001600160a01b0381166112855760405162461bcd60e51b815260206004820152601160248201527f496e76616c696420726563697069656e7400000000000000000000000000000060448201526064016108da565b6000868684818110611299576112996124c7565b9050602002013590506112ac8282611a60565b9390930192506001016111fc565b5060065482016108ae6112d06004546000190190565b111561131e5760405162461bcd60e51b815260206004820152601260248201527f4d617820737570706c792072656163686564000000000000000000000000000060448201526064016108da565b601681111561136f5760405162461bcd60e51b815260206004820152601c60248201527f416d6f756e7420657863656564732072657365727665206c696d69740000000060448201526064016108da565b600655505050505050565b3360008181526003602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6113f18484846117e7565b6001600160a01b0383163b15806114865750604051630a85bd0160e11b808252906001600160a01b0385169063150b7a02906114379033908990889088906004016124f8565b6020604051808303816000875af1158015611456573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147a91906124aa565b6001600160e01b031916145b6114d25760405162461bcd60e51b815260206004820152601060248201527f554e534146455f524543495049454e540000000000000000000000000000000060448201526064016108da565b50505050565b60606114e3826117d3565b6115235760405162461bcd60e51b81526020600482015260116024820152702727a722ac24a9aa22a72a2faa27a5a2a760791b60448201526064016108da565b60006007805461153290612422565b80601f016020809104026020016040519081016040528092919081815260200182805461155e90612422565b80156115ab5780601f10611580576101008083540402835291602001916115ab565b820191906000526020600020905b81548152906001019060200180831161158e57829003601f168201915b5050505050905080516000146115ea57806115c584611c63565b6040516020016115d6929190612534565b6040516020818303038152906040526115fb565b604051806020016040528060008152505b9392505050565b6005546001600160a01b036101009091041633146116625760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108da565b6008805460ff1916911515919091179055565b6005546001600160a01b036101009091041633146116d55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108da565b6111863347611d9d565b60006115fb8383611e40565b6005546001600160a01b0361010090910416331461174b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108da565b6001600160a01b0381166117c75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108da565b6117d081611bf2565b50565b600081158015906107fb5750506004541190565b826001600160a01b03166117fa82610f5b565b6001600160a01b0316146118505760405162461bcd60e51b815260206004820152600a60248201527f57524f4e475f46524f4d0000000000000000000000000000000000000000000060448201526064016108da565b6001600160a01b0382166118a65760405162461bcd60e51b815260206004820152601160248201527f494e56414c49445f524543495049454e5400000000000000000000000000000060448201526064016108da565b336001600160a01b03841614806118cd5750336118c282610893565b6001600160a01b0316145b806118dd57506118dd83336116df565b6119295760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016108da565b6000818152600260205260409020805473ffffffffffffffffffffffffffffffffffffffff191690556004805483919083908110611969576119696124c7565b60009182526020822001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039390931692909217909155600480546000198401929190839081106119bb576119bb6124c7565b6000918252602090912001546001600160a01b03161415611a195783600482815481106119ea576119ea6124c7565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b5080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6001600160a01b038216611ab65760405162461bcd60e51b815260206004820152601160248201527f494e56414c49445f524543495049454e5400000000000000000000000000000060448201526064016108da565b80611b035760405162461bcd60e51b815260206004820152600e60248201527f494e56414c49445f414d4f554e5400000000000000000000000000000000000060448201526064016108da565b60045460005b60018303811015611b61576004805460010181556000908152604051838301916001600160a01b038716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4600101611b09565b506004805460018101825560009182527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0386169081179091556040516000198585010192907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4505050565b600580546001600160a01b038381166101008181027fffffffffffffffffffffff0000000000000000000000000000000000000000ff85161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606081611ca357505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611ccd5780611cb7816124dd565b9150611cc69050600a83612579565b9150611ca7565b60008167ffffffffffffffff811115611ce857611ce86122f3565b6040519080825280601f01601f191660200182016040528015611d12576020820181803683370190505b5090505b8415611d9557611d2760018361258d565b9150611d34600a866125a4565b611d3f906030612492565b60f81b818381518110611d5457611d546124c7565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611d8e600a86612579565b9450611d16565b949350505050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611dea576040519150601f19603f3d011682016040523d82523d6000602084013e611def565b606091505b50509050806109e95760405162461bcd60e51b815260206004820152601360248201527f455448207472616e73666572206661696c65640000000000000000000000000060448201526064016108da565b60055460009060ff168015611f4357506040517fc45527910000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301527f000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1169063c455279190602401602060405180830381865afa158015611ecf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef391906125b8565b6001600160a01b0316826001600160a01b03161480611f4357507f000000000000000000000000f42aa99f011a1fa7cda90e5e98b277e306bca83e6001600160a01b0316826001600160a01b0316145b15611f50575060016107fb565b6001600160a01b0380841660009081526003602090815260408083209386168352929052205460ff166115fb565b828054611f8a90612422565b90600052602060002090601f016020900481019282611fac5760008555611ff2565b82601f10611fc55782800160ff19823516178555611ff2565b82800160010185558215611ff2579182015b82811115611ff2578235825591602001919060010190611fd7565b50610e789291505b80821115610e785760008155600101611ffa565b6001600160e01b0319811681146117d057600080fd5b60006020828403121561203657600080fd5b81356115fb8161200e565b60005b8381101561205c578181015183820152602001612044565b838111156114d25750506000910152565b60008151808452612085816020860160208601612041565b601f01601f19169290920160200192915050565b6020815260006115fb602083018461206d565b6000602082840312156120be57600080fd5b5035919050565b6001600160a01b03811681146117d057600080fd5b600080604083850312156120ed57600080fd5b82356120f8816120c5565b946020939093013593505050565b60008060006060848603121561211b57600080fd5b8335612126816120c5565b92506020840135612136816120c5565b929592945050506040919091013590565b6000806020838503121561215a57600080fd5b823567ffffffffffffffff8082111561217257600080fd5b818501915085601f83011261218657600080fd5b81358181111561219557600080fd5b8660208285010111156121a757600080fd5b60209290920196919550909350505050565b803580151581146121c957600080fd5b919050565b6000602082840312156121e057600080fd5b6115fb826121b9565b6000602082840312156121fb57600080fd5b81356115fb816120c5565b60008083601f84011261221857600080fd5b50813567ffffffffffffffff81111561223057600080fd5b6020830191508360208260051b850101111561224b57600080fd5b9250929050565b6000806000806040858703121561226857600080fd5b843567ffffffffffffffff8082111561228057600080fd5b61228c88838901612206565b909650945060208701359150808211156122a557600080fd5b506122b287828801612206565b95989497509550505050565b600080604083850312156122d157600080fd5b82356122dc816120c5565b91506122ea602084016121b9565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561231f57600080fd5b843561232a816120c5565b9350602085013561233a816120c5565b925060408501359150606085013567ffffffffffffffff8082111561235e57600080fd5b818701915087601f83011261237257600080fd5b813581811115612384576123846122f3565b604051601f8201601f19908116603f011681019083821181831017156123ac576123ac6122f3565b816040528281528a60208487010111156123c557600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600080604083850312156123fc57600080fd5b8235612407816120c5565b91506020830135612417816120c5565b809150509250929050565b600181811c9082168061243657607f821691505b6020821081141561245757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561248d5761248d61245d565b500290565b600082198211156124a5576124a561245d565b500190565b6000602082840312156124bc57600080fd5b81516115fb8161200e565b634e487b7160e01b600052603260045260246000fd5b60006000198214156124f1576124f161245d565b5060010190565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261252a608083018461206d565b9695505050505050565b60008351612546818460208801612041565b83519083019061255a818360208801612041565b01949350505050565b634e487b7160e01b600052601260045260246000fd5b60008261258857612588612563565b500490565b60008282101561259f5761259f61245d565b500390565b6000826125b3576125b3612563565b500690565b6000602082840312156125ca57600080fd5b81516115fb816120c556fea2646970667358221220bcc9d19db706e10e4c971dbc80d95d4b2226e0437a46b8b4dd7b99e1ed154cca64736f6c634300080b0033

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

000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1000000000000000000000000f42aa99f011a1fa7cda90e5e98b277e306bca83e0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000005568747470733a2f2f62656e6479736e66742e6d7970696e6174612e636c6f75642f697066732f516d504b394d5243506e465941346269634d34643957437350637a4b6e79363751526e4774765a586d6e507073392f0000000000000000000000

-----Decoded View---------------
Arg [0] : _openSeaProxyRegistry (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1
Arg [1] : _looksRareTransferManager (address): 0xf42aa99F011A1fA7CDA90E5E98b277E306BcA83e
Arg [2] : _baseURI (string): https://bendysnft.mypinata.cloud/ipfs/QmPK9MRCPnFYA4bicM4d9WCsPczKny67QRnGtvZXmnPps9/

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Arg [1] : 000000000000000000000000f42aa99f011a1fa7cda90e5e98b277e306bca83e
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000055
Arg [4] : 68747470733a2f2f62656e6479736e66742e6d7970696e6174612e636c6f7564
Arg [5] : 2f697066732f516d504b394d5243506e465941346269634d3464395743735063
Arg [6] : 7a4b6e79363751526e4774765a586d6e507073392f0000000000000000000000


Deployed Bytecode Sourcemap

26512:5297:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6520:381;;;;;;;;;;-1:-1:-1;6520:381:0;;;;;:::i;:::-;;:::i;:::-;;;611:14:1;;604:22;586:41;;574:2;559:18;6520:381:0;;;;;;;;7235:82;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9251:148::-;;;;;;;;;;-1:-1:-1;9251:148:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1738:55:1;;;1720:74;;1708:2;1693:18;9251:148:0;1574:226:1;10308:266:0;;;;;;;;;;-1:-1:-1;10308:266:0;;;;;:::i;:::-;;:::i;:::-;;22452:186;;;;;;;;;;-1:-1:-1;22610:7:0;:14;-1:-1:-1;;22610:18:0;22452:186;;;2430:25:1;;;2418:2;2403:18;22452:186:0;2284:177:1;11642:121:0;;;;;;;;;;-1:-1:-1;11642:121:0;;;;;:::i;:::-;;:::i;27902:624::-;;;;;;:::i;:::-;;:::i;22842:554::-;;;;;;;;;;-1:-1:-1;22842:554:0;;;;;:::i;:::-;;:::i;26616:41::-;;;;;;;;;;;;26653:4;26616:41;;12377:299;;;;;;;;;;-1:-1:-1;12377:299:0;;;;;:::i;:::-;;:::i;23426:151::-;;;;;;;;;;-1:-1:-1;23426:151:0;;;;;:::i;:::-;;:::i;18564:45::-;;;;;;;;;;;;;;;18678:49;;;;;;;;;;;;;;;30039:93;;;;;;;;;;-1:-1:-1;30039:93:0;;;;;:::i;:::-;;:::i;26925:24::-;;;;;;;;;;-1:-1:-1;26925:24:0;;;;;;;;30452:125;;;;;;;;;;-1:-1:-1;30452:125:0;;;;;:::i;:::-;;:::i;19172:44::-;;;;;;;;;;-1:-1:-1;19172:44:0;;;;;;;;24599:253;;;;;;;;;;-1:-1:-1;24599:253:0;;;;;:::i;:::-;;:::i;26898:21::-;;;;;;;;;;;;;:::i;24032:419::-;;;;;;;;;;-1:-1:-1;24032:419:0;;;;;:::i;:::-;;:::i;2606:103::-;;;;;;;;;;;;;:::i;26955:43::-;;;;;;;;;;-1:-1:-1;26955:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26568:42;;;;;;;;;;;;26600:10;26568:42;;1955:87;;;;;;;;;;-1:-1:-1;2028:6:0;;;;;-1:-1:-1;;;;;2028:6:0;1955:87;;7404:86;;;;;;;;;;;;;:::i;29234:623::-;;;;;;;;;;-1:-1:-1;29234:623:0;;;;;:::i;:::-;;:::i;26705:41::-;;;;;;;;;;;;26742:4;26705:41;;10897:194;;;;;;;;;;-1:-1:-1;10897:194:0;;;;;:::i;:::-;;:::i;13435:323::-;;;;;;;;;;-1:-1:-1;13435:323:0;;;;;:::i;:::-;;:::i;30858:258::-;;;;;;;;;;-1:-1:-1;30858:258:0;;;;;:::i;:::-;;:::i;26863:29::-;;;;;;;;;;;;;;;;28905:102;;;;;;;;;;-1:-1:-1;28905:102:0;;;;;:::i;:::-;;:::i;30256:99::-;;;;;;;;;;;;;:::i;31154:184::-;;;;;;;;;;-1:-1:-1;31154:184:0;;;;;:::i;:::-;;:::i;26778:38::-;;;;;;;;;;;;26813:3;26778:38;;26661:40;;;;;;;;;;;;26699:2;26661:40;;2864:201;;;;;;;;;;-1:-1:-1;2864:201:0;;;;;:::i;:::-;;:::i;26822:35::-;;;;;;;;;;;;26855:2;26822:35;;6520:381;6596:4;6618:25;-1:-1:-1;;;;;;6618:25:0;;;;:92;;-1:-1:-1;6685:25:0;-1:-1:-1;;;;;;6685:25:0;;;6618:92;:159;;;-1:-1:-1;6752:25:0;-1:-1:-1;;;;;;6752:25:0;;;6618:159;:234;;;-1:-1:-1;6827:25:0;-1:-1:-1;;;;;;6827:25:0;;;6618:234;6607:245;6520:381;-1:-1:-1;;6520:381:0:o;7235:82::-;7280:13;7307:5;7300:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7235:82;:::o;9251:148::-;9308:7;9330:11;9338:2;9330:7;:11::i;:::-;9322:41;;;;-1:-1:-1;;;9322:41:0;;8093:2:1;9322:41:0;;;8075:21:1;8132:2;8112:18;;;8105:30;-1:-1:-1;;;8151:18:1;;;8144:47;8208:18;;9322:41:0;;;;;;;;;-1:-1:-1;9375:19:0;;;;:15;:19;;;;;;-1:-1:-1;;;;;9375:19:0;;9251:148::o;10308:266::-;10374:13;10390:11;10398:2;10390:7;:11::i;:::-;10374:27;;10416:35;10433:5;10440:10;10416:16;:35::i;:::-;:58;;;-1:-1:-1;10455:10:0;-1:-1:-1;;;;;10455:19:0;;;10416:58;10408:85;;;;-1:-1:-1;;;10408:85:0;;8439:2:1;10408:85:0;;;8421:21:1;8478:2;8458:18;;;8451:30;8517:16;8497:18;;;8490:44;8551:18;;10408:85:0;8237:338:1;10408:85:0;10500:19;;;;:15;:19;;;;;;:29;;-1:-1:-1;;10500:29:0;-1:-1:-1;;;;;10500:29:0;;;;;;;;;10541:28;;10500:19;;10541:28;;;;;;;10369:205;10308:266;;:::o;11642:121::-;11735:23;11745:4;11751:2;11755;11735:9;:23::i;:::-;11642:121;;;:::o;27902:624::-;27968:12;;;;27960:43;;;;-1:-1:-1;;;27960:43:0;;8782:2:1;27960:43:0;;;8764:21:1;8821:2;8801:18;;;8794:30;8860:20;8840:18;;;8833:48;8898:18;;27960:43:0;8580:342:1;27960:43:0;28016:10;28030:9;28016:23;28008:56;;;;-1:-1:-1;;;28008:56:0;;9129:2:1;28008:56:0;;;9111:21:1;9168:2;9148:18;;;9141:30;9207:22;9187:18;;;9180:50;9247:18;;28008:56:0;8927:344:1;28008:56:0;28071:20;28094:13;22610:7;:14;-1:-1:-1;;22610:18:0;;22452:186;28094:13;28071:36;;26813:3;28116:12;:23;28112:175;;;28167:10;28156:22;;;;:10;:22;;;;;;;;28155:23;28147:51;;;;-1:-1:-1;;;28147:51:0;;9478:2:1;28147:51:0;;;9460:21:1;9517:2;9497:18;;;9490:30;9556:17;9536:18;;;9529:45;9591:18;;28147:51:0;9276:339:1;28147:51:0;28215:10;28204:22;;;;:10;:22;;;;;:29;;-1:-1:-1;;28204:29:0;28229:4;28204:29;;;;;;28244:20;;28215:10;28244:5;:20::i;:::-;28275:7;27902:624;:::o;28112:175::-;28317:14;28325:6;26600:10;28317:14;:::i;:::-;28304:9;:27;28296:58;;;;-1:-1:-1;;;28296:58:0;;10184:2:1;28296:58:0;;;10166:21:1;10223:2;10203:18;;;10196:30;10262:20;10242:18;;;10235:48;10300:18;;28296:58:0;9982:342:1;28296:58:0;26855:2;28367:6;:16;;28359:52;;;;-1:-1:-1;;;28359:52:0;;10531:2:1;28359:52:0;;;10513:21:1;10570:2;10550:18;;;10543:30;10609:25;10589:18;;;10582:53;10652:18;;28359:52:0;10329:347:1;28359:52:0;26742:4;28424:21;28439:6;28424:12;:21;:::i;:::-;:35;;28416:73;;;;-1:-1:-1;;;28416:73:0;;11016:2:1;28416:73:0;;;10998:21:1;11055:2;11035:18;;;11028:30;11094:27;11074:18;;;11067:55;11139:18;;28416:73:0;10814:349:1;28416:73:0;28496:25;28502:10;28514:6;28496:5;:25::i;22842:554::-;22939:7;22969:16;22979:5;22969:9;:16::i;:::-;22961:5;:24;22953:50;;;;-1:-1:-1;;;22953:50:0;;11370:2:1;22953:50:0;;;11352:21:1;11409:2;11389:18;;;11382:30;-1:-1:-1;;;11428:18:1;;;11421:43;11481:18;;22953:50:0;11168:337:1;22953:50:0;23149:7;:14;23106:13;;;23219:142;23239:13;23235:1;:17;23219:142;;;23279:10;23287:1;23279:7;:10::i;:::-;-1:-1:-1;;;;;23270:19:0;:5;-1:-1:-1;;;;;23270:19:0;;23266:89;;;23312:5;23303;:14;23299:48;;;23326:1;-1:-1:-1;23319:8:0;;-1:-1:-1;;23319:8:0;23299:48;23340:7;;;;;23299:48;23254:3;;23219:142;;;-1:-1:-1;;23372:19:0;;-1:-1:-1;;;23372:19:0;;11712:2:1;23372:19:0;;;11694:21:1;11751:1;11731:18;;;11724:29;11789:11;11769:18;;;11762:39;11818:18;;;-1:-1:-1;23372:19:0;11510:332:1;12377:299:0;12474:23;12484:4;12490:2;12494;12474:9;:23::i;:::-;-1:-1:-1;;;;;12512:14:0;;;:19;;:138;;-1:-1:-1;12535:66:0;;-1:-1:-1;;;12535:66:0;;;12576:10;12535:66;;;12175:34:1;-1:-1:-1;;;;;12245:15:1;;;12225:18;;;12218:43;12277:18;;;12270:34;;;12340:3;12320:18;;;12313:31;-1:-1:-1;12360:19:1;;;12353:30;12605:45:0;;12535:40;;;;12605:45;;12400:19:1;;12535:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;12535:115:0;;12512:138;12504:167;;;;-1:-1:-1;;;12504:167:0;;12886:2:1;12504:167:0;;;12868:21:1;12925:2;12905:18;;;12898:30;12964:18;12944;;;12937:46;13000:18;;12504:167:0;12684:340:1;23426:151:0;23501:7;23523:14;23531:5;23523:7;:14::i;:::-;23515:40;;;;-1:-1:-1;;;23515:40:0;;11370:2:1;23515:40:0;;;11352:21:1;11409:2;11389:18;;;11382:30;-1:-1:-1;;;11428:18:1;;;11421:43;11481:18;;23515:40:0;11168:337:1;23515:40:0;-1:-1:-1;23567:5:0;23426:151::o;30039:93::-;2028:6;;-1:-1:-1;;;;;2028:6:0;;;;;759:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;13231:2:1;2167:68:0;;;13213:21:1;;;13250:18;;;13243:30;13309:34;13289:18;;;13282:62;13361:18;;2167:68:0;13029:356:1;2167:68:0;30109:18:::1;:7;30119:8:::0;;30109:18:::1;:::i;30452:125::-:0;2028:6;;-1:-1:-1;;;;;2028:6:0;;;;;759:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;13231:2:1;2167:68:0;;;13213:21:1;;;13250:18;;;13243:30;13309:34;13289:18;;;13282:62;13361:18;;2167:68:0;13029:356:1;2167:68:0;30536:25:::1;:36:::0;;-1:-1:-1;;30536:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30452:125::o;24599:253::-;24666:13;24694:11;24702:2;24694:7;:11::i;:::-;24686:41;;;;-1:-1:-1;;;24686:41:0;;8093:2:1;24686:41:0;;;8075:21:1;8132:2;8112:18;;;8105:30;-1:-1:-1;;;8151:18:1;;;8144:47;8208:18;;24686:41:0;7891:341:1;24686:41:0;24751:2;24734:114;24776:7;24784:1;24776:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;24776:10:0;;-1:-1:-1;24796:19:0;;24792:51;;24824:12;24599:253;;;:::o;24792:51::-;24757:3;;;;:::i;:::-;;;;24734:114;;26898:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24032:419::-;24104:15;-1:-1:-1;;;;;24134:19:0;;24126:45;;;;-1:-1:-1;;;24126:45:0;;13921:2:1;24126:45:0;;;13903:21:1;13960:2;13940:18;;;13933:30;13999:15;13979:18;;;13972:43;14032:18;;24126:45:0;13719:337:1;24126:45:0;24265:7;:14;24352:1;24335:107;24359:13;24355:1;:17;24335:107;;;24399:10;24407:1;24399:7;:10::i;:::-;-1:-1:-1;;;;;24390:19:0;:5;-1:-1:-1;;;;;24390:19:0;;24386:50;;;24419:9;;;;;24386:50;24374:3;;24335:107;;;;24178:269;24032:419;;;:::o;2606:103::-;2028:6;;-1:-1:-1;;;;;2028:6:0;;;;;759:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;13231:2:1;2167:68:0;;;13213:21:1;;;13250:18;;;13243:30;13309:34;13289:18;;;13282:62;13361:18;;2167:68:0;13029:356:1;2167:68:0;2671:30:::1;2698:1;2671:18;:30::i;:::-;2606:103::o:0;7404:86::-;7451:13;7478:7;7471:14;;;;;:::i;29234:623::-;2028:6;;-1:-1:-1;;;;;2028:6:0;;;;;759:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;13231:2:1;2167:68:0;;;13213:21:1;;;13250:18;;;13243:30;13309:34;13289:18;;;13282:62;13361:18;;2167:68:0;13029:356:1;2167:68:0;29354:11:::1;29388:10:::0;29354:11;29411:206:::1;29431:6;29427:1;:10;29411:206;;;29451:10;29464;;29475:1;29464:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;29451:26:::0;-1:-1:-1;;;;;;29492:16:0;::::1;29484:46;;;::::0;-1:-1:-1;;;29484:46:0;;14263:2:1;29484:46:0::1;::::0;::::1;14245:21:1::0;14302:2;14282:18;;;14275:30;14341:19;14321:18;;;14314:47;14378:18;;29484:46:0::1;14061:341:1::0;29484:46:0::1;29537:14;29554:7;;29562:1;29554:10;;;;;;;:::i;:::-;;;;;;;29537:27;;29573:17;29579:2;29583:6;29573:5;:17::i;:::-;29597:13:::0;;;::::1;::::0;-1:-1:-1;29439:3:0::1;;29411:206;;;-1:-1:-1::0;29648:14:0::1;::::0;:20;::::1;26653:4;29684:13;22610:7:::0;:14;-1:-1:-1;;22610:18:0;;22452:186;29684:13:::1;:27;;29676:58;;;::::0;-1:-1:-1;;;29676:58:0;;14609:2:1;29676:58:0::1;::::0;::::1;14591:21:1::0;14648:2;14628:18;;;14621:30;14687:20;14667:18;;;14660:48;14725:18;;29676:58:0::1;14407:342:1::0;29676:58:0::1;26699:2;29748:13;:28;;29740:69;;;::::0;-1:-1:-1;;;29740:69:0;;14956:2:1;29740:69:0::1;::::0;::::1;14938:21:1::0;14995:2;14975:18;;;14968:30;15034;15014:18;;;15007:58;15082:18;;29740:69:0::1;14754:352:1::0;29740:69:0::1;29817:14;:30:::0;-1:-1:-1;;;;;;29234:623:0:o;10897:194::-;10996:10;10977:30;;;;:18;:30;;;;;;;;-1:-1:-1;;;;;10977:40:0;;;;;;;;;;;;:51;;-1:-1:-1;;10977:51:0;;;;;;;;;;11040:46;;586:41:1;;;10977:40:0;;10996:10;11040:46;;559:18:1;11040:46:0;;;;;;;10897:194;;:::o;13435:323::-;13554:23;13564:4;13570:2;13574;13554:9;:23::i;:::-;-1:-1:-1;;;;;13592:14:0;;;:19;;:140;;-1:-1:-1;13615:68:0;;-1:-1:-1;;;13615:68:0;;;13687:45;-1:-1:-1;;;;;13615:40:0;;;13687:45;;13615:68;;13656:10;;13668:4;;13674:2;;13678:4;;13615:68;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;13615:117:0;;13592:140;13584:169;;;;-1:-1:-1;;;13584:169:0;;12886:2:1;13584:169:0;;;12868:21:1;12925:2;12905:18;;;12898:30;12964:18;12944;;;12937:46;13000:18;;13584:169:0;12684:340:1;13584:169:0;13435:323;;;;:::o;30858:258::-;30918:13;30946:11;30954:2;30946:7;:11::i;:::-;30938:41;;;;-1:-1:-1;;;30938:41:0;;8093:2:1;30938:41:0;;;8075:21:1;8132:2;8112:18;;;8105:30;-1:-1:-1;;;8151:18:1;;;8144:47;8208:18;;30938:41:0;7891:341:1;30938:41:0;30984:22;31009:7;30984:32;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31034:8;31028:22;31054:1;31028:27;:83;;31087:8;31097:12;31106:2;31097:8;:12::i;:::-;31070:40;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31028:83;;;;;;;;;;;;;;;;31021:90;30858:258;-1:-1:-1;;;30858:258:0:o;28905:102::-;2028:6;;-1:-1:-1;;;;;2028:6:0;;;;;759:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;13231:2:1;2167:68:0;;;13213:21:1;;;13250:18;;;13243:30;13309:34;13289:18;;;13282:62;13361:18;;2167:68:0;13029:356:1;2167:68:0;28974:12:::1;:28:::0;;-1:-1:-1;;28974:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28905:102::o;30256:99::-;2028:6;;-1:-1:-1;;;;;2028:6:0;;;;;759:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;13231:2:1;2167:68:0;;;13213:21:1;;;13250:18;;;13243:30;13309:34;13289:18;;;13282:62;13361:18;;2167:68:0;13029:356:1;2167:68:0;30303:47:::1;30316:10;30328:21;30303:12;:47::i;31154:184::-:0;31267:4;31285:48;31317:5;31324:8;31285:31;:48::i;2864:201::-;2028:6;;-1:-1:-1;;;;;2028:6:0;;;;;759:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;13231:2:1;2167:68:0;;;13213:21:1;;;13250:18;;;13243:30;13309:34;13289:18;;;13282:62;13361:18;;2167:68:0;13029:356:1;2167:68:0;-1:-1:-1;;;;;2953:22:0;::::1;2945:73;;;::::0;-1:-1:-1;;;2945:73:0;;16305:2:1;2945:73:0::1;::::0;::::1;16287:21:1::0;16344:2;16324:18;;;16317:30;16383:34;16363:18;;;16356:62;16454:8;16434:18;;;16427:36;16480:19;;2945:73:0::1;16103:402:1::0;2945:73:0::1;3029:28;3048:8;3029:18;:28::i;:::-;2864:201:::0;:::o;25756:122::-;25825:4;25843:7;;;;;:30;;-1:-1:-1;;25859:7:0;:14;-1:-1:-1;25854:19:0;25756:122::o;25908:537::-;26032:4;-1:-1:-1;;;;;26017:19:0;:11;26025:2;26017:7;:11::i;:::-;-1:-1:-1;;;;;26017:19:0;;26009:42;;;;-1:-1:-1;;;26009:42:0;;16712:2:1;26009:42:0;;;16694:21:1;16751:2;16731:18;;;16724:30;16790:12;16770:18;;;16763:40;16820:18;;26009:42:0;16510:334:1;26009:42:0;-1:-1:-1;;;;;26064:16:0;;26056:46;;;;-1:-1:-1;;;26056:46:0;;17051:2:1;26056:46:0;;;17033:21:1;17090:2;17070:18;;;17063:30;17129:19;17109:18;;;17102:47;17166:18;;26056:46:0;16849:341:1;26056:46:0;26115:10;-1:-1:-1;;;;;26115:18:0;;;;:51;;-1:-1:-1;26156:10:0;26137:15;26149:2;26137:11;:15::i;:::-;-1:-1:-1;;;;;26137:29:0;;26115:51;:89;;;;26170:34;26187:4;26193:10;26170:16;:34::i;:::-;26107:116;;;;-1:-1:-1;;;26107:116:0;;8439:2:1;26107:116:0;;;8421:21:1;8478:2;8458:18;;;8451:30;8517:16;8497:18;;;8490:44;8551:18;;26107:116:0;8237:338:1;26107:116:0;26237:19;;;;:15;:19;;;;;26230:26;;-1:-1:-1;;26230:26:0;;;26263:7;:11;;26277:2;;26263:7;26253:2;;26263:11;;;;;;:::i;:::-;;;;;;;;;:16;;-1:-1:-1;;26263:16:0;-1:-1:-1;;;;;26263:16:0;;;;;;;;;;;26335:7;:15;;-1:-1:-1;;26319:6:0;;;26263:11;26335:7;26319:6;;26335:15;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;26335:15:0;:29;26331:71;;;26391:4;26373:7;26381:6;26373:15;;;;;;;;:::i;:::-;;;;;;;;;:22;;;;;-1:-1:-1;;;;;26373:22:0;;;;;-1:-1:-1;;;;;26373:22:0;;;;;;26331:71;26286:121;26437:2;26433;-1:-1:-1;;;;;26418:22:0;26427:4;-1:-1:-1;;;;;26418:22:0;;;;;;;;;;;25908:537;;;:::o;25133:593::-;-1:-1:-1;;;;;25215:16:0;;25207:46;;;;-1:-1:-1;;;25207:46:0;;17051:2:1;25207:46:0;;;17033:21:1;17090:2;17070:18;;;17063:30;17129:19;17109:18;;;17102:47;17166:18;;25207:46:0;16849:341:1;25207:46:0;25266:11;25258:38;;;;-1:-1:-1;;;25258:38:0;;17397:2:1;25258:38:0;;;17379:21:1;17436:2;17416:18;;;17409:30;17475:16;17455:18;;;17448:44;17509:18;;25258:38:0;17195:338:1;25258:38:0;25343:7;:14;25319:21;25415:181;25444:1;25435:6;:10;25431:1;:14;25415:181;;;25520:7;:14;;;;;;-1:-1:-1;25520:14:0;;;25546:43;;25571:17;;;;-1:-1:-1;;;;;25546:43:0;;;;;-1:-1:-1;;25546:43:0;25447:3;;25415:181;;;-1:-1:-1;25635:7:0;:16;;;;;;;-1:-1:-1;25635:16:0;;;;;;;-1:-1:-1;;25635:16:0;-1:-1:-1;;;;;25635:16:0;;;;;;;;25662:54;;-1:-1:-1;;25687:28:0;;;;;-1:-1:-1;25662:54:0;;-1:-1:-1;;25662:54:0;25303:419;25133:593;;:::o;3225:191::-;3318:6;;;-1:-1:-1;;;;;3335:17:0;;;3318:6;3335:17;;;;;;;;;;3368:40;;3318:6;;;;;;;;3368:40;;3299:16;;3368:40;3288:128;3225:191;:::o;17375:602::-;17439:13;17642:10;17638:38;;-1:-1:-1;;17660:10:0;;;;;;;;;;;;;;;;;;17375:602::o;17638:38::-;17695:5;17680:12;17724:54;17731:9;;17724:54;;17748:8;;;;:::i;:::-;;-1:-1:-1;17762:10:0;;-1:-1:-1;17770:2:0;17762:10;;:::i;:::-;;;17724:54;;;17782:19;17814:6;17804:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17804:17:0;;17782:39;;17826:121;17833:10;;17826:121;;17851:11;17861:1;17851:11;;:::i;:::-;;-1:-1:-1;17911:10:0;17919:2;17911:5;:10;:::i;:::-;17898:24;;:2;:24;:::i;:::-;17885:39;;17868:6;17875;17868:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;17930:11:0;17939:2;17930:11;;:::i;:::-;;;17826:121;;;17965:6;17375:602;-1:-1:-1;;;;17375:602:0:o;31594:212::-;31712:12;31730:2;-1:-1:-1;;;;;31730:7:0;31746:5;31730:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31711:46;;;31770:7;31762:39;;;;-1:-1:-1;;;31762:39:0;;18511:2:1;31762:39:0;;;18493:21:1;18550:2;18530:18;;;18523:30;18589:21;18569:18;;;18562:49;18628:18;;31762:39:0;18309:343:1;21006:315:0;21118:25;;21103:4;;21118:25;;:134;;;;-1:-1:-1;21160:51:0;;;;;-1:-1:-1;;;;;1738:55:1;;;21160:51:0;;;1720:74:1;21175:20:0;21160:44;;;;1693:18:1;;21160:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21148:63:0;:8;-1:-1:-1;;;;;21148:63:0;;:103;;;;21227:24;-1:-1:-1;;;;;21215:36:0;:8;-1:-1:-1;;;;;21215:36:0;;21148:103;21114:151;;;-1:-1:-1;21261:4:0;21254:11;;21114:151;-1:-1:-1;;;;;9755:25:0;;;9737:4;9755:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;21277:39;9649:146::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:177:1;-1:-1:-1;;;;;;92:5:1;88:78;81:5;78:89;68:117;;181:1;178;171:12;196:245;254:6;307:2;295:9;286:7;282:23;278:32;275:52;;;323:1;320;313:12;275:52;362:9;349:23;381:30;405:5;381:30;:::i;638:258::-;710:1;720:113;734:6;731:1;728:13;720:113;;;810:11;;;804:18;791:11;;;784:39;756:2;749:10;720:113;;;851:6;848:1;845:13;842:48;;;-1:-1:-1;;886:1:1;868:16;;861:27;638:258::o;901:::-;943:3;981:5;975:12;1008:6;1003:3;996:19;1024:63;1080:6;1073:4;1068:3;1064:14;1057:4;1050:5;1046:16;1024:63;:::i;:::-;1141:2;1120:15;-1:-1:-1;;1116:29:1;1107:39;;;;1148:4;1103:50;;901:258;-1:-1:-1;;901:258:1:o;1164:220::-;1313:2;1302:9;1295:21;1276:4;1333:45;1374:2;1363:9;1359:18;1351:6;1333:45;:::i;1389:180::-;1448:6;1501:2;1489:9;1480:7;1476:23;1472:32;1469:52;;;1517:1;1514;1507:12;1469:52;-1:-1:-1;1540:23:1;;1389:180;-1:-1:-1;1389:180:1:o;1805:154::-;-1:-1:-1;;;;;1884:5:1;1880:54;1873:5;1870:65;1860:93;;1949:1;1946;1939:12;1964:315;2032:6;2040;2093:2;2081:9;2072:7;2068:23;2064:32;2061:52;;;2109:1;2106;2099:12;2061:52;2148:9;2135:23;2167:31;2192:5;2167:31;:::i;:::-;2217:5;2269:2;2254:18;;;;2241:32;;-1:-1:-1;;;1964:315:1:o;2466:456::-;2543:6;2551;2559;2612:2;2600:9;2591:7;2587:23;2583:32;2580:52;;;2628:1;2625;2618:12;2580:52;2667:9;2654:23;2686:31;2711:5;2686:31;:::i;:::-;2736:5;-1:-1:-1;2793:2:1;2778:18;;2765:32;2806:33;2765:32;2806:33;:::i;:::-;2466:456;;2858:7;;-1:-1:-1;;;2912:2:1;2897:18;;;;2884:32;;2466:456::o;2927:592::-;2998:6;3006;3059:2;3047:9;3038:7;3034:23;3030:32;3027:52;;;3075:1;3072;3065:12;3027:52;3115:9;3102:23;3144:18;3185:2;3177:6;3174:14;3171:34;;;3201:1;3198;3191:12;3171:34;3239:6;3228:9;3224:22;3214:32;;3284:7;3277:4;3273:2;3269:13;3265:27;3255:55;;3306:1;3303;3296:12;3255:55;3346:2;3333:16;3372:2;3364:6;3361:14;3358:34;;;3388:1;3385;3378:12;3358:34;3433:7;3428:2;3419:6;3415:2;3411:15;3407:24;3404:37;3401:57;;;3454:1;3451;3444:12;3401:57;3485:2;3477:11;;;;;3507:6;;-1:-1:-1;2927:592:1;;-1:-1:-1;;;;2927:592:1:o;3524:160::-;3589:20;;3645:13;;3638:21;3628:32;;3618:60;;3674:1;3671;3664:12;3618:60;3524:160;;;:::o;3689:180::-;3745:6;3798:2;3786:9;3777:7;3773:23;3769:32;3766:52;;;3814:1;3811;3804:12;3766:52;3837:26;3853:9;3837:26;:::i;3874:247::-;3933:6;3986:2;3974:9;3965:7;3961:23;3957:32;3954:52;;;4002:1;3999;3992:12;3954:52;4041:9;4028:23;4060:31;4085:5;4060:31;:::i;4126:367::-;4189:8;4199:6;4253:3;4246:4;4238:6;4234:17;4230:27;4220:55;;4271:1;4268;4261:12;4220:55;-1:-1:-1;4294:20:1;;4337:18;4326:30;;4323:50;;;4369:1;4366;4359:12;4323:50;4406:4;4398:6;4394:17;4382:29;;4466:3;4459:4;4449:6;4446:1;4442:14;4434:6;4430:27;4426:38;4423:47;4420:67;;;4483:1;4480;4473:12;4420:67;4126:367;;;;;:::o;4498:773::-;4620:6;4628;4636;4644;4697:2;4685:9;4676:7;4672:23;4668:32;4665:52;;;4713:1;4710;4703:12;4665:52;4753:9;4740:23;4782:18;4823:2;4815:6;4812:14;4809:34;;;4839:1;4836;4829:12;4809:34;4878:70;4940:7;4931:6;4920:9;4916:22;4878:70;:::i;:::-;4967:8;;-1:-1:-1;4852:96:1;-1:-1:-1;5055:2:1;5040:18;;5027:32;;-1:-1:-1;5071:16:1;;;5068:36;;;5100:1;5097;5090:12;5068:36;;5139:72;5203:7;5192:8;5181:9;5177:24;5139:72;:::i;:::-;4498:773;;;;-1:-1:-1;5230:8:1;-1:-1:-1;;;;4498:773:1:o;5276:315::-;5341:6;5349;5402:2;5390:9;5381:7;5377:23;5373:32;5370:52;;;5418:1;5415;5408:12;5370:52;5457:9;5444:23;5476:31;5501:5;5476:31;:::i;:::-;5526:5;-1:-1:-1;5550:35:1;5581:2;5566:18;;5550:35;:::i;:::-;5540:45;;5276:315;;;;;:::o;5596:184::-;-1:-1:-1;;;5645:1:1;5638:88;5745:4;5742:1;5735:15;5769:4;5766:1;5759:15;5785:1266;5880:6;5888;5896;5904;5957:3;5945:9;5936:7;5932:23;5928:33;5925:53;;;5974:1;5971;5964:12;5925:53;6013:9;6000:23;6032:31;6057:5;6032:31;:::i;:::-;6082:5;-1:-1:-1;6139:2:1;6124:18;;6111:32;6152:33;6111:32;6152:33;:::i;:::-;6204:7;-1:-1:-1;6258:2:1;6243:18;;6230:32;;-1:-1:-1;6313:2:1;6298:18;;6285:32;6336:18;6366:14;;;6363:34;;;6393:1;6390;6383:12;6363:34;6431:6;6420:9;6416:22;6406:32;;6476:7;6469:4;6465:2;6461:13;6457:27;6447:55;;6498:1;6495;6488:12;6447:55;6534:2;6521:16;6556:2;6552;6549:10;6546:36;;;6562:18;;:::i;:::-;6637:2;6631:9;6605:2;6691:13;;-1:-1:-1;;6687:22:1;;;6711:2;6683:31;6679:40;6667:53;;;6735:18;;;6755:22;;;6732:46;6729:72;;;6781:18;;:::i;:::-;6821:10;6817:2;6810:22;6856:2;6848:6;6841:18;6896:7;6891:2;6886;6882;6878:11;6874:20;6871:33;6868:53;;;6917:1;6914;6907:12;6868:53;6973:2;6968;6964;6960:11;6955:2;6947:6;6943:15;6930:46;7018:1;7013:2;7008;7000:6;6996:15;6992:24;6985:35;7039:6;7029:16;;;;;;;5785:1266;;;;;;;:::o;7056:388::-;7124:6;7132;7185:2;7173:9;7164:7;7160:23;7156:32;7153:52;;;7201:1;7198;7191:12;7153:52;7240:9;7227:23;7259:31;7284:5;7259:31;:::i;:::-;7309:5;-1:-1:-1;7366:2:1;7351:18;;7338:32;7379:33;7338:32;7379:33;:::i;:::-;7431:7;7421:17;;;7056:388;;;;;:::o;7449:437::-;7528:1;7524:12;;;;7571;;;7592:61;;7646:4;7638:6;7634:17;7624:27;;7592:61;7699:2;7691:6;7688:14;7668:18;7665:38;7662:218;;;-1:-1:-1;;;7733:1:1;7726:88;7837:4;7834:1;7827:15;7865:4;7862:1;7855:15;7662:218;;7449:437;;;:::o;9620:184::-;-1:-1:-1;;;9669:1:1;9662:88;9769:4;9766:1;9759:15;9793:4;9790:1;9783:15;9809:168;9849:7;9915:1;9911;9907:6;9903:14;9900:1;9897:21;9892:1;9885:9;9878:17;9874:45;9871:71;;;9922:18;;:::i;:::-;-1:-1:-1;9962:9:1;;9809:168::o;10681:128::-;10721:3;10752:1;10748:6;10745:1;10742:13;10739:39;;;10758:18;;:::i;:::-;-1:-1:-1;10794:9:1;;10681:128::o;12430:249::-;12499:6;12552:2;12540:9;12531:7;12527:23;12523:32;12520:52;;;12568:1;12565;12558:12;12520:52;12600:9;12594:16;12619:30;12643:5;12619:30;:::i;13390:184::-;-1:-1:-1;;;13439:1:1;13432:88;13539:4;13536:1;13529:15;13563:4;13560:1;13553:15;13579:135;13618:3;-1:-1:-1;;13639:17:1;;13636:43;;;13659:18;;:::i;:::-;-1:-1:-1;13706:1:1;13695:13;;13579:135::o;15111:512::-;15305:4;-1:-1:-1;;;;;15415:2:1;15407:6;15403:15;15392:9;15385:34;15467:2;15459:6;15455:15;15450:2;15439:9;15435:18;15428:43;;15507:6;15502:2;15491:9;15487:18;15480:34;15550:3;15545:2;15534:9;15530:18;15523:31;15571:46;15612:3;15601:9;15597:19;15589:6;15571:46;:::i;:::-;15563:54;15111:512;-1:-1:-1;;;;;;15111:512:1:o;15628:470::-;15807:3;15845:6;15839:13;15861:53;15907:6;15902:3;15895:4;15887:6;15883:17;15861:53;:::i;:::-;15977:13;;15936:16;;;;15999:57;15977:13;15936:16;16033:4;16021:17;;15999:57;:::i;:::-;16072:20;;15628:470;-1:-1:-1;;;;15628:470:1:o;17538:184::-;-1:-1:-1;;;17587:1:1;17580:88;17687:4;17684:1;17677:15;17711:4;17708:1;17701:15;17727:120;17767:1;17793;17783:35;;17798:18;;:::i;:::-;-1:-1:-1;17832:9:1;;17727:120::o;17852:125::-;17892:4;17920:1;17917;17914:8;17911:34;;;17925:18;;:::i;:::-;-1:-1:-1;17962:9:1;;17852:125::o;17982:112::-;18014:1;18040;18030:35;;18045:18;;:::i;:::-;-1:-1:-1;18079:9:1;;17982:112::o;18657:251::-;18727:6;18780:2;18768:9;18759:7;18755:23;18751:32;18748:52;;;18796:1;18793;18786:12;18748:52;18828:9;18822:16;18847:31;18872:5;18847:31;:::i

Swarm Source

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