Feature Tip: Add private address tag to any address under My Name Tag !
ERC-1155
Overview
Max Total Supply
69
Holders
18
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MferInternsLeagueMembership
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-27 */ // SPDX-License-Identifier: MIT /* _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ ( m | f | e | r ) ( i | n | t | e | r | n | s ) ( l | e | a | g | u | e ) \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ * Code of Conduct * A Mfer Interns League member must: 1. Show respect for themselves, their mentors, their fellow Mfer Interns, and civilians. 2. Seek to abide by best practices when performing the duties of a Mfer Intern. 3. Strive to be the best they can be, every day! */ // 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: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Supply.sol) pragma solidity ^0.8.0; /** * @dev Extension of ERC1155 that adds tracking of total supply per id. * * Useful for scenarios where Fungible and Non-fungible tokens have to be * clearly identified. Note: While a totalSupply of 1 might mean the * corresponding is an NFT, there is no guarantees that no other token with the * same id are not going to be minted. */ abstract contract ERC1155Supply is ERC1155 { mapping(uint256 => uint256) private _totalSupply; /** * @dev Total amount of tokens in with a given id. */ function totalSupply(uint256 id) public view virtual returns (uint256) { return _totalSupply[id]; } /** * @dev Indicates whether any token exist with a given id, or not. */ function exists(uint256 id) public view virtual returns (bool) { return ERC1155Supply.totalSupply(id) > 0; } /** * @dev See {ERC1155-_beforeTokenTransfer}. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual override { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); if (from == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] += amounts[i]; } } if (to == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] -= amounts[i]; } } } } // File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Burnable.sol) pragma solidity ^0.8.0; /** * @dev Extension of {ERC1155} that allows token holders to destroy both their * own tokens and those that they have been approved to use. * * _Available since v3.1._ */ abstract contract ERC1155Burnable is ERC1155 { function burn( address account, uint256 id, uint256 value ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not owner nor approved" ); _burn(account, id, value); } function burnBatch( address account, uint256[] memory ids, uint256[] memory values ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not owner nor approved" ); _burnBatch(account, ids, values); } } // File: contracts/MferInternsLeagueMembership.sol pragma solidity ^0.8.0; contract MferInternsLeagueMembership is ERC1155, Ownable, ERC1155Burnable, ERC1155Supply { constructor() ERC1155("ipfs://QmamFEp7yK4LXUrmucfcK9GGCAXfqpCZ6QhYArvUvnkFvW/data.json") { _mint(msg.sender, 0, 69, ""); } function setURI(string memory newuri) public onlyOwner { _setURI(newuri); } // The following functions are overrides required by Solidity. function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal override(ERC1155, ERC1155Supply) { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040518060600160405280603f81526020016200263f603f913962000037816200006e565b50620000433362000087565b62000068336000604560405180602001604052806000815250620000d960201b60201c565b620008cf565b805162000083906002906020840190620005a7565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0384166200013f5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084015b60405180910390fd5b336200016581600087620001538862000200565b6200015e8862000200565b876200024e565b6000848152602081815260408083206001600160a01b038916845290915281208054859290620001979084906200072c565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4620001f98160008787878762000271565b5050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106200023d576200023d6200080d565b602090810291909101015292915050565b620002698686868686866200045760201b620007d61760201c565b505050505050565b62000290846001600160a01b03166200059860201b620008ec1760201c565b15620002695760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190620002cc9089908990889088908890600401620006d0565b602060405180830381600087803b158015620002e757600080fd5b505af19250505080156200031a575060408051601f3d908101601f1916820190925262000317918101906200064d565b60015b620003db576200032962000823565b806308c379a014156200036a57506200034162000840565b806200034e57506200036c565b8060405162461bcd60e51b815260040162000136919062000717565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e746572000000000000000000000000606482015260840162000136565b6001600160e01b0319811663f23a6e6160e01b146200044e5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b606482015260840162000136565b50505050505050565b620004728686868686866200026960201b620008e41760201c565b6001600160a01b038516620005065760005b83518110156200050457828181518110620004a357620004a36200080d565b602002602001015160046000868481518110620004c457620004c46200080d565b602002602001015181526020019081526020016000206000828254620004eb91906200072c565b90915550620004fc905081620007d9565b905062000484565b505b6001600160a01b038416620002695760005b83518110156200044e578281815181106200053757620005376200080d565b6020026020010151600460008684815181106200055857620005586200080d565b6020026020010151815260200190815260200160002060008282546200057f919062000747565b9091555062000590905081620007d9565b905062000518565b6001600160a01b03163b151590565b828054620005b59062000761565b90600052602060002090601f016020900481019282620005d9576000855562000624565b82601f10620005f457805160ff191683800117855562000624565b8280016001018555821562000624579182015b828111156200062457825182559160200191906001019062000607565b506200063292915062000636565b5090565b5b8082111562000632576000815560010162000637565b6000602082840312156200066057600080fd5b81516001600160e01b0319811681146200067957600080fd5b9392505050565b6000815180845260005b81811015620006a8576020818501810151868301820152016200068a565b81811115620006bb576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906200070c9083018462000680565b979650505050505050565b60208152600062000679602083018462000680565b60008219821115620007425762000742620007f7565b500190565b6000828210156200075c576200075c620007f7565b500390565b600181811c908216806200077657607f821691505b602082108114156200079857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f191681016001600160401b0381118282101715620007d257634e487b7160e01b600052604160045260246000fd5b6040525050565b6000600019821415620007f057620007f0620007f7565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060033d11156200083d5760046000803e5060005160e01c5b90565b600060443d10156200084f5790565b6040516003193d81016004833e81513d6001600160401b0380831160248401831017156200087f57505050505090565b8285019150815181811115620008985750505050505090565b843d8701016020828501011115620008b35750505050505090565b620008c4602082860101876200079e565b509095945050505050565b611d6080620008df6000396000f3fe608060405234801561001057600080fd5b50600436106100ff5760003560e01c8063715018a611610097578063e985e9c511610066578063e985e9c514610240578063f242432a1461027c578063f2fde38b1461028f578063f5298aca146102a257600080fd5b8063715018a6146101ea5780638da5cb5b146101f2578063a22cb4651461020d578063bd85b0391461022057600080fd5b80632eb2c2d6116100d35780632eb2c2d6146101825780634e1273f4146101955780634f558e79146101b55780636b20c454146101d757600080fd5b8062fdd58e1461010457806301ffc9a71461012a57806302fe53051461014d5780630e89341c14610162575b600080fd5b6101176101123660046115e1565b6102b5565b6040519081526020015b60405180910390f35b61013d61013836600461170f565b61034c565b6040519015158152602001610121565b61016061015b366004611749565b61039e565b005b61017561017036600461179a565b6103d4565b604051610121919061191f565b610160610190366004611422565b610468565b6101a86101a336600461163e565b6104ff565b60405161012191906118de565b61013d6101c336600461179a565b600090815260046020526040902054151590565b6101606101e5366004611531565b610629565b610160610671565b6003546040516001600160a01b039091168152602001610121565b61016061021b3660046115a5565b6106a7565b61011761022e36600461179a565b60009081526004602052604090205490565b61013d61024e3660046113ef565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b61016061028a3660046114cc565b6106b6565b61016061029d3660046113d4565b6106fb565b6101606102b036600461160b565b610793565b60006001600160a01b0383166103265760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061037d57506001600160e01b031982166303a24d0760e21b145b8061039857506301ffc9a760e01b6001600160e01b03198316145b92915050565b6003546001600160a01b031633146103c85760405162461bcd60e51b815260040161031d90611ad9565b6103d1816108fb565b50565b6060600280546103e390611ba9565b80601f016020809104026020016040519081016040528092919081815260200182805461040f90611ba9565b801561045c5780601f106104315761010080835404028352916020019161045c565b820191906000526020600020905b81548152906001019060200180831161043f57829003601f168201915b50505050509050919050565b6001600160a01b0385163314806104845750610484853361024e565b6104eb5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161031d565b6104f8858585858561090e565b5050505050565b606081518351146105645760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161031d565b6000835167ffffffffffffffff81111561058057610580611c58565b6040519080825280602002602001820160405280156105a9578160200160208202803683370190505b50905060005b8451811015610621576105f48582815181106105cd576105cd611c42565b60200260200101518583815181106105e7576105e7611c42565b60200260200101516102b5565b82828151811061060657610606611c42565b602090810291909101015261061a81611c11565b90506105af565b509392505050565b6001600160a01b0383163314806106455750610645833361024e565b6106615760405162461bcd60e51b815260040161031d906119be565b61066c838383610ab0565b505050565b6003546001600160a01b0316331461069b5760405162461bcd60e51b815260040161031d90611ad9565b6106a56000610c3e565b565b6106b2338383610c90565b5050565b6001600160a01b0385163314806106d257506106d2853361024e565b6106ee5760405162461bcd60e51b815260040161031d906119be565b6104f88585858585610d71565b6003546001600160a01b031633146107255760405162461bcd60e51b815260040161031d90611ad9565b6001600160a01b03811661078a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161031d565b6103d181610c3e565b6001600160a01b0383163314806107af57506107af833361024e565b6107cb5760405162461bcd60e51b815260040161031d906119be565b61066c838383610e94565b6001600160a01b03851661085d5760005b835181101561085b5782818151811061080257610802611c42565b60200260200101516004600086848151811061082057610820611c42565b6020026020010151815260200190815260200160002060008282546108459190611b7a565b90915550610854905081611c11565b90506107e7565b505b6001600160a01b0384166108e45760005b83518110156108e25782818151811061088957610889611c42565b6020026020010151600460008684815181106108a7576108a7611c42565b6020026020010151815260200190815260200160002060008282546108cc9190611b92565b909155506108db905081611c11565b905061086e565b505b505050505050565b6001600160a01b03163b151590565b80516106b2906002906020840190611223565b815183511461092f5760405162461bcd60e51b815260040161031d90611b0e565b6001600160a01b0384166109555760405162461bcd60e51b815260040161031d90611a07565b33610964818787878787610f95565b60005b8451811015610a4a57600085828151811061098457610984611c42565b6020026020010151905060008583815181106109a2576109a2611c42565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156109f25760405162461bcd60e51b815260040161031d90611a8f565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610a2f908490611b7a565b9250508190555050505080610a4390611c11565b9050610967565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610a9a9291906118f1565b60405180910390a46108e4818787878787610fa3565b6001600160a01b038316610ad65760405162461bcd60e51b815260040161031d90611a4c565b8051825114610af75760405162461bcd60e51b815260040161031d90611b0e565b6000339050610b1a81856000868660405180602001604052806000815250610f95565b60005b8351811015610bdf576000848281518110610b3a57610b3a611c42565b602002602001015190506000848381518110610b5857610b58611c42565b602090810291909101810151600084815280835260408082206001600160a01b038c168352909352919091205490915081811015610ba85760405162461bcd60e51b815260040161031d9061197a565b6000928352602083815260408085206001600160a01b038b1686529091529092209103905580610bd781611c11565b915050610b1d565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051610c309291906118f1565b60405180910390a450505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b03161415610d045760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161031d565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b038416610d975760405162461bcd60e51b815260040161031d90611a07565b33610db6818787610da78861110e565b610db08861110e565b87610f95565b6000848152602081815260408083206001600160a01b038a16845290915290205483811015610df75760405162461bcd60e51b815260040161031d90611a8f565b6000858152602081815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290610e34908490611b7a565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46108e2828888888888611159565b6001600160a01b038316610eba5760405162461bcd60e51b815260040161031d90611a4c565b33610ee981856000610ecb8761110e565b610ed48761110e565b60405180602001604052806000815250610f95565b6000838152602081815260408083206001600160a01b038816845290915290205482811015610f2a5760405162461bcd60e51b815260040161031d9061197a565b6000848152602081815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b6108e48686868686866107d6565b6001600160a01b0384163b156108e45760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190610fe7908990899088908890889060040161183b565b602060405180830381600087803b15801561100157600080fd5b505af1925050508015611031575060408051601f3d908101601f1916820190925261102e9181019061172c565b60015b6110de5761103d611c6e565b806308c379a014156110775750611052611c8a565b8061105d5750611079565b8060405162461bcd60e51b815260040161031d919061191f565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161031d565b6001600160e01b0319811663bc197c8160e01b146108e25760405162461bcd60e51b815260040161031d90611932565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061114857611148611c42565b602090810291909101015292915050565b6001600160a01b0384163b156108e45760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061119d9089908990889088908890600401611899565b602060405180830381600087803b1580156111b757600080fd5b505af19250505080156111e7575060408051601f3d908101601f191682019092526111e49181019061172c565b60015b6111f35761103d611c6e565b6001600160e01b0319811663f23a6e6160e01b146108e25760405162461bcd60e51b815260040161031d90611932565b82805461122f90611ba9565b90600052602060002090601f0160209004810192826112515760008555611297565b82601f1061126a57805160ff1916838001178555611297565b82800160010185558215611297579182015b8281111561129757825182559160200191906001019061127c565b506112a39291506112a7565b5090565b5b808211156112a357600081556001016112a8565b600067ffffffffffffffff8311156112d6576112d6611c58565b6040516112ed601f8501601f191660200182611be4565b80915083815284848401111561130257600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b038116811461133157600080fd5b919050565b600082601f83011261134757600080fd5b8135602061135482611b56565b6040516113618282611be4565b8381528281019150858301600585901b8701840188101561138157600080fd5b60005b858110156113a057813584529284019290840190600101611384565b5090979650505050505050565b600082601f8301126113be57600080fd5b6113cd838335602085016112bc565b9392505050565b6000602082840312156113e657600080fd5b6113cd8261131a565b6000806040838503121561140257600080fd5b61140b8361131a565b91506114196020840161131a565b90509250929050565b600080600080600060a0868803121561143a57600080fd5b6114438661131a565b94506114516020870161131a565b9350604086013567ffffffffffffffff8082111561146e57600080fd5b61147a89838a01611336565b9450606088013591508082111561149057600080fd5b61149c89838a01611336565b935060808801359150808211156114b257600080fd5b506114bf888289016113ad565b9150509295509295909350565b600080600080600060a086880312156114e457600080fd5b6114ed8661131a565b94506114fb6020870161131a565b93506040860135925060608601359150608086013567ffffffffffffffff81111561152557600080fd5b6114bf888289016113ad565b60008060006060848603121561154657600080fd5b61154f8461131a565b9250602084013567ffffffffffffffff8082111561156c57600080fd5b61157887838801611336565b9350604086013591508082111561158e57600080fd5b5061159b86828701611336565b9150509250925092565b600080604083850312156115b857600080fd5b6115c18361131a565b9150602083013580151581146115d657600080fd5b809150509250929050565b600080604083850312156115f457600080fd5b6115fd8361131a565b946020939093013593505050565b60008060006060848603121561162057600080fd5b6116298461131a565b95602085013595506040909401359392505050565b6000806040838503121561165157600080fd5b823567ffffffffffffffff8082111561166957600080fd5b818501915085601f83011261167d57600080fd5b8135602061168a82611b56565b6040516116978282611be4565b8381528281019150858301600585901b870184018b10156116b757600080fd5b600096505b848710156116e1576116cd8161131a565b8352600196909601959183019183016116bc565b50965050860135925050808211156116f857600080fd5b5061170585828601611336565b9150509250929050565b60006020828403121561172157600080fd5b81356113cd81611d14565b60006020828403121561173e57600080fd5b81516113cd81611d14565b60006020828403121561175b57600080fd5b813567ffffffffffffffff81111561177257600080fd5b8201601f8101841361178357600080fd5b611792848235602084016112bc565b949350505050565b6000602082840312156117ac57600080fd5b5035919050565b600081518084526020808501945080840160005b838110156117e3578151875295820195908201906001016117c7565b509495945050505050565b6000815180845260005b81811015611814576020818501810151868301820152016117f8565b81811115611826576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0386811682528516602082015260a060408201819052600090611867908301866117b3565b828103606084015261187981866117b3565b9050828103608084015261188d81856117ee565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906118d3908301846117ee565b979650505050505050565b6020815260006113cd60208301846117b3565b60408152600061190460408301856117b3565b828103602084015261191681856117b3565b95945050505050565b6020815260006113cd60208301846117ee565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b60208082526029908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260408201526808185c1c1c9bdd995960ba1b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b600067ffffffffffffffff821115611b7057611b70611c58565b5060051b60200190565b60008219821115611b8d57611b8d611c2c565b500190565b600082821015611ba457611ba4611c2c565b500390565b600181811c90821680611bbd57607f821691505b60208210811415611bde57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff81118282101715611c0a57611c0a611c58565b6040525050565b6000600019821415611c2557611c25611c2c565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d1115611c875760046000803e5060005160e01c5b90565b600060443d1015611c985790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715611cc857505050505090565b8285019150815181811115611ce05750505050505090565b843d8701016020828501011115611cfa5750505050505090565b611d0960208286010187611be4565b509095945050505050565b6001600160e01b0319811681146103d157600080fdfea264697066735822122002450a17e99aef8d4ad58c61c7f29132f30d78c4008201e5a22be467a814e57664736f6c63430008070033697066733a2f2f516d616d46457037794b344c5855726d756366634b394747434158667170435a3651685941727655766e6b4676572f646174612e6a736f6e
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100ff5760003560e01c8063715018a611610097578063e985e9c511610066578063e985e9c514610240578063f242432a1461027c578063f2fde38b1461028f578063f5298aca146102a257600080fd5b8063715018a6146101ea5780638da5cb5b146101f2578063a22cb4651461020d578063bd85b0391461022057600080fd5b80632eb2c2d6116100d35780632eb2c2d6146101825780634e1273f4146101955780634f558e79146101b55780636b20c454146101d757600080fd5b8062fdd58e1461010457806301ffc9a71461012a57806302fe53051461014d5780630e89341c14610162575b600080fd5b6101176101123660046115e1565b6102b5565b6040519081526020015b60405180910390f35b61013d61013836600461170f565b61034c565b6040519015158152602001610121565b61016061015b366004611749565b61039e565b005b61017561017036600461179a565b6103d4565b604051610121919061191f565b610160610190366004611422565b610468565b6101a86101a336600461163e565b6104ff565b60405161012191906118de565b61013d6101c336600461179a565b600090815260046020526040902054151590565b6101606101e5366004611531565b610629565b610160610671565b6003546040516001600160a01b039091168152602001610121565b61016061021b3660046115a5565b6106a7565b61011761022e36600461179a565b60009081526004602052604090205490565b61013d61024e3660046113ef565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b61016061028a3660046114cc565b6106b6565b61016061029d3660046113d4565b6106fb565b6101606102b036600461160b565b610793565b60006001600160a01b0383166103265760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061037d57506001600160e01b031982166303a24d0760e21b145b8061039857506301ffc9a760e01b6001600160e01b03198316145b92915050565b6003546001600160a01b031633146103c85760405162461bcd60e51b815260040161031d90611ad9565b6103d1816108fb565b50565b6060600280546103e390611ba9565b80601f016020809104026020016040519081016040528092919081815260200182805461040f90611ba9565b801561045c5780601f106104315761010080835404028352916020019161045c565b820191906000526020600020905b81548152906001019060200180831161043f57829003601f168201915b50505050509050919050565b6001600160a01b0385163314806104845750610484853361024e565b6104eb5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161031d565b6104f8858585858561090e565b5050505050565b606081518351146105645760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161031d565b6000835167ffffffffffffffff81111561058057610580611c58565b6040519080825280602002602001820160405280156105a9578160200160208202803683370190505b50905060005b8451811015610621576105f48582815181106105cd576105cd611c42565b60200260200101518583815181106105e7576105e7611c42565b60200260200101516102b5565b82828151811061060657610606611c42565b602090810291909101015261061a81611c11565b90506105af565b509392505050565b6001600160a01b0383163314806106455750610645833361024e565b6106615760405162461bcd60e51b815260040161031d906119be565b61066c838383610ab0565b505050565b6003546001600160a01b0316331461069b5760405162461bcd60e51b815260040161031d90611ad9565b6106a56000610c3e565b565b6106b2338383610c90565b5050565b6001600160a01b0385163314806106d257506106d2853361024e565b6106ee5760405162461bcd60e51b815260040161031d906119be565b6104f88585858585610d71565b6003546001600160a01b031633146107255760405162461bcd60e51b815260040161031d90611ad9565b6001600160a01b03811661078a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161031d565b6103d181610c3e565b6001600160a01b0383163314806107af57506107af833361024e565b6107cb5760405162461bcd60e51b815260040161031d906119be565b61066c838383610e94565b6001600160a01b03851661085d5760005b835181101561085b5782818151811061080257610802611c42565b60200260200101516004600086848151811061082057610820611c42565b6020026020010151815260200190815260200160002060008282546108459190611b7a565b90915550610854905081611c11565b90506107e7565b505b6001600160a01b0384166108e45760005b83518110156108e25782818151811061088957610889611c42565b6020026020010151600460008684815181106108a7576108a7611c42565b6020026020010151815260200190815260200160002060008282546108cc9190611b92565b909155506108db905081611c11565b905061086e565b505b505050505050565b6001600160a01b03163b151590565b80516106b2906002906020840190611223565b815183511461092f5760405162461bcd60e51b815260040161031d90611b0e565b6001600160a01b0384166109555760405162461bcd60e51b815260040161031d90611a07565b33610964818787878787610f95565b60005b8451811015610a4a57600085828151811061098457610984611c42565b6020026020010151905060008583815181106109a2576109a2611c42565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156109f25760405162461bcd60e51b815260040161031d90611a8f565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610a2f908490611b7a565b9250508190555050505080610a4390611c11565b9050610967565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610a9a9291906118f1565b60405180910390a46108e4818787878787610fa3565b6001600160a01b038316610ad65760405162461bcd60e51b815260040161031d90611a4c565b8051825114610af75760405162461bcd60e51b815260040161031d90611b0e565b6000339050610b1a81856000868660405180602001604052806000815250610f95565b60005b8351811015610bdf576000848281518110610b3a57610b3a611c42565b602002602001015190506000848381518110610b5857610b58611c42565b602090810291909101810151600084815280835260408082206001600160a01b038c168352909352919091205490915081811015610ba85760405162461bcd60e51b815260040161031d9061197a565b6000928352602083815260408085206001600160a01b038b1686529091529092209103905580610bd781611c11565b915050610b1d565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051610c309291906118f1565b60405180910390a450505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b03161415610d045760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161031d565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b038416610d975760405162461bcd60e51b815260040161031d90611a07565b33610db6818787610da78861110e565b610db08861110e565b87610f95565b6000848152602081815260408083206001600160a01b038a16845290915290205483811015610df75760405162461bcd60e51b815260040161031d90611a8f565b6000858152602081815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290610e34908490611b7a565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46108e2828888888888611159565b6001600160a01b038316610eba5760405162461bcd60e51b815260040161031d90611a4c565b33610ee981856000610ecb8761110e565b610ed48761110e565b60405180602001604052806000815250610f95565b6000838152602081815260408083206001600160a01b038816845290915290205482811015610f2a5760405162461bcd60e51b815260040161031d9061197a565b6000848152602081815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b6108e48686868686866107d6565b6001600160a01b0384163b156108e45760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190610fe7908990899088908890889060040161183b565b602060405180830381600087803b15801561100157600080fd5b505af1925050508015611031575060408051601f3d908101601f1916820190925261102e9181019061172c565b60015b6110de5761103d611c6e565b806308c379a014156110775750611052611c8a565b8061105d5750611079565b8060405162461bcd60e51b815260040161031d919061191f565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161031d565b6001600160e01b0319811663bc197c8160e01b146108e25760405162461bcd60e51b815260040161031d90611932565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061114857611148611c42565b602090810291909101015292915050565b6001600160a01b0384163b156108e45760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061119d9089908990889088908890600401611899565b602060405180830381600087803b1580156111b757600080fd5b505af19250505080156111e7575060408051601f3d908101601f191682019092526111e49181019061172c565b60015b6111f35761103d611c6e565b6001600160e01b0319811663f23a6e6160e01b146108e25760405162461bcd60e51b815260040161031d90611932565b82805461122f90611ba9565b90600052602060002090601f0160209004810192826112515760008555611297565b82601f1061126a57805160ff1916838001178555611297565b82800160010185558215611297579182015b8281111561129757825182559160200191906001019061127c565b506112a39291506112a7565b5090565b5b808211156112a357600081556001016112a8565b600067ffffffffffffffff8311156112d6576112d6611c58565b6040516112ed601f8501601f191660200182611be4565b80915083815284848401111561130257600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b038116811461133157600080fd5b919050565b600082601f83011261134757600080fd5b8135602061135482611b56565b6040516113618282611be4565b8381528281019150858301600585901b8701840188101561138157600080fd5b60005b858110156113a057813584529284019290840190600101611384565b5090979650505050505050565b600082601f8301126113be57600080fd5b6113cd838335602085016112bc565b9392505050565b6000602082840312156113e657600080fd5b6113cd8261131a565b6000806040838503121561140257600080fd5b61140b8361131a565b91506114196020840161131a565b90509250929050565b600080600080600060a0868803121561143a57600080fd5b6114438661131a565b94506114516020870161131a565b9350604086013567ffffffffffffffff8082111561146e57600080fd5b61147a89838a01611336565b9450606088013591508082111561149057600080fd5b61149c89838a01611336565b935060808801359150808211156114b257600080fd5b506114bf888289016113ad565b9150509295509295909350565b600080600080600060a086880312156114e457600080fd5b6114ed8661131a565b94506114fb6020870161131a565b93506040860135925060608601359150608086013567ffffffffffffffff81111561152557600080fd5b6114bf888289016113ad565b60008060006060848603121561154657600080fd5b61154f8461131a565b9250602084013567ffffffffffffffff8082111561156c57600080fd5b61157887838801611336565b9350604086013591508082111561158e57600080fd5b5061159b86828701611336565b9150509250925092565b600080604083850312156115b857600080fd5b6115c18361131a565b9150602083013580151581146115d657600080fd5b809150509250929050565b600080604083850312156115f457600080fd5b6115fd8361131a565b946020939093013593505050565b60008060006060848603121561162057600080fd5b6116298461131a565b95602085013595506040909401359392505050565b6000806040838503121561165157600080fd5b823567ffffffffffffffff8082111561166957600080fd5b818501915085601f83011261167d57600080fd5b8135602061168a82611b56565b6040516116978282611be4565b8381528281019150858301600585901b870184018b10156116b757600080fd5b600096505b848710156116e1576116cd8161131a565b8352600196909601959183019183016116bc565b50965050860135925050808211156116f857600080fd5b5061170585828601611336565b9150509250929050565b60006020828403121561172157600080fd5b81356113cd81611d14565b60006020828403121561173e57600080fd5b81516113cd81611d14565b60006020828403121561175b57600080fd5b813567ffffffffffffffff81111561177257600080fd5b8201601f8101841361178357600080fd5b611792848235602084016112bc565b949350505050565b6000602082840312156117ac57600080fd5b5035919050565b600081518084526020808501945080840160005b838110156117e3578151875295820195908201906001016117c7565b509495945050505050565b6000815180845260005b81811015611814576020818501810151868301820152016117f8565b81811115611826576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0386811682528516602082015260a060408201819052600090611867908301866117b3565b828103606084015261187981866117b3565b9050828103608084015261188d81856117ee565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906118d3908301846117ee565b979650505050505050565b6020815260006113cd60208301846117b3565b60408152600061190460408301856117b3565b828103602084015261191681856117b3565b95945050505050565b6020815260006113cd60208301846117ee565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b60208082526029908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260408201526808185c1c1c9bdd995960ba1b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b600067ffffffffffffffff821115611b7057611b70611c58565b5060051b60200190565b60008219821115611b8d57611b8d611c2c565b500190565b600082821015611ba457611ba4611c2c565b500390565b600181811c90821680611bbd57607f821691505b60208210811415611bde57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff81118282101715611c0a57611c0a611c58565b6040525050565b6000600019821415611c2557611c25611c2c565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d1115611c875760046000803e5060005160e01c5b90565b600060443d1015611c985790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715611cc857505050505090565b8285019150815181811115611ce05750505050505090565b843d8701016020828501011115611cfa5750505050505090565b611d0960208286010187611be4565b509095945050505050565b6001600160e01b0319811681146103d157600080fdfea264697066735822122002450a17e99aef8d4ad58c61c7f29132f30d78c4008201e5a22be467a814e57664736f6c63430008070033
Deployed Bytecode Sourcemap
40528:715:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24029:231;;;;;;:::i;:::-;;:::i;:::-;;;17137:25:1;;;17125:2;17110:18;24029:231:0;;;;;;;;23052:310;;;;;;:::i;:::-;;:::i;:::-;;;11046:14:1;;11039:22;11021:41;;11009:2;10994:18;23052:310:0;10881:187:1;40782:89:0;;;;;;:::i;:::-;;:::i;:::-;;23773:105;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;25968:442::-;;;;;;:::i;:::-;;:::i;24426:524::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;38468:122::-;;;;;;:::i;:::-;38525:4;38346:16;;;:12;:16;;;;;;-1:-1:-1;;;38468:122:0;40087:353;;;;;;:::i;:::-;;:::i;3258:103::-;;;:::i;2607:87::-;2680:6;;2607:87;;-1:-1:-1;;;;;2680:6:0;;;8687:51:1;;8675:2;8660:18;2607:87:0;8541:203:1;25023:155:0;;;;;;:::i;:::-;;:::i;38257:113::-;;;;;;:::i;:::-;38319:7;38346:16;;;:12;:16;;;;;;;38257:113;25250:168;;;;;;:::i;:::-;-1:-1:-1;;;;;25373:27:0;;;25349:4;25373:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;25250:168;25490:401;;;;;;:::i;:::-;;:::i;3516:201::-;;;;;;:::i;:::-;;:::i;39758:321::-;;;;;;:::i;:::-;;:::i;24029:231::-;24115:7;-1:-1:-1;;;;;24143:21:0;;24135:77;;;;-1:-1:-1;;;24135:77:0;;12329:2:1;24135:77:0;;;12311:21:1;12368:2;12348:18;;;12341:30;12407:34;12387:18;;;12380:62;-1:-1:-1;;;12458:18:1;;;12451:41;12509:19;;24135:77:0;;;;;;;;;-1:-1:-1;24230:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;24230:22:0;;;;;;;;;;;;24029:231::o;23052:310::-;23154:4;-1:-1:-1;;;;;;23191:41:0;;-1:-1:-1;;;23191:41:0;;:110;;-1:-1:-1;;;;;;;23249:52:0;;-1:-1:-1;;;23249:52:0;23191:110;:163;;;-1:-1:-1;;;;;;;;;;14469:40:0;;;23318:36;23171:183;23052:310;-1:-1:-1;;23052:310:0:o;40782:89::-;2680:6;;-1:-1:-1;;;;;2680:6:0;1411:10;2827:23;2819:68;;;;-1:-1:-1;;;2819:68:0;;;;;;;:::i;:::-;40848:15:::1;40856:6;40848:7;:15::i;:::-;40782:89:::0;:::o;23773:105::-;23833:13;23866:4;23859:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23773:105;;;:::o;25968:442::-;-1:-1:-1;;;;;26201:20:0;;1411:10;26201:20;;:60;;-1:-1:-1;26225:36:0;26242:4;1411:10;25250:168;:::i;26225:36::-;26179:160;;;;-1:-1:-1;;;26179:160:0;;14369:2:1;26179:160:0;;;14351:21:1;14408:2;14388:18;;;14381:30;14447:34;14427:18;;;14420:62;-1:-1:-1;;;14498:18:1;;;14491:48;14556:19;;26179:160:0;14167:414:1;26179:160:0;26350:52;26373:4;26379:2;26383:3;26388:7;26397:4;26350:22;:52::i;:::-;25968:442;;;;;:::o;24426:524::-;24582:16;24643:3;:10;24624:8;:15;:29;24616:83;;;;-1:-1:-1;;;24616:83:0;;16374:2:1;24616:83:0;;;16356:21:1;16413:2;16393:18;;;16386:30;16452:34;16432:18;;;16425:62;-1:-1:-1;;;16503:18:1;;;16496:39;16552:19;;24616:83:0;16172:405:1;24616:83:0;24712:30;24759:8;:15;24745:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24745:30:0;;24712:63;;24793:9;24788:122;24812:8;:15;24808:1;:19;24788:122;;;24868:30;24878:8;24887:1;24878:11;;;;;;;;:::i;:::-;;;;;;;24891:3;24895:1;24891:6;;;;;;;;:::i;:::-;;;;;;;24868:9;:30::i;:::-;24849:13;24863:1;24849:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;24829:3;;;:::i;:::-;;;24788:122;;;-1:-1:-1;24929:13:0;24426:524;-1:-1:-1;;;24426:524:0:o;40087:353::-;-1:-1:-1;;;;;40252:23:0;;1411:10;40252:23;;:66;;-1:-1:-1;40279:39:0;40296:7;1411:10;25250:168;:::i;40279:39::-;40230:157;;;;-1:-1:-1;;;40230:157:0;;;;;;;:::i;:::-;40400:32;40411:7;40420:3;40425:6;40400:10;:32::i;:::-;40087:353;;;:::o;3258:103::-;2680:6;;-1:-1:-1;;;;;2680:6:0;1411:10;2827:23;2819:68;;;;-1:-1:-1;;;2819:68:0;;;;;;;:::i;:::-;3323:30:::1;3350:1;3323:18;:30::i;:::-;3258:103::o:0;25023:155::-;25118:52;1411:10;25151:8;25161;25118:18;:52::i;:::-;25023:155;;:::o;25490:401::-;-1:-1:-1;;;;;25698:20:0;;1411:10;25698:20;;:60;;-1:-1:-1;25722:36:0;25739:4;1411:10;25250:168;:::i;25722:36::-;25676:151;;;;-1:-1:-1;;;25676:151:0;;;;;;;:::i;:::-;25838:45;25856:4;25862:2;25866;25870:6;25878:4;25838:17;:45::i;3516:201::-;2680:6;;-1:-1:-1;;;;;2680:6:0;1411:10;2827:23;2819:68;;;;-1:-1:-1;;;2819:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3605:22:0;::::1;3597:73;;;::::0;-1:-1:-1;;;3597:73:0;;12741:2:1;3597:73:0::1;::::0;::::1;12723:21:1::0;12780:2;12760:18;;;12753:30;12819:34;12799:18;;;12792:62;-1:-1:-1;;;12870:18:1;;;12863:36;12916:19;;3597:73:0::1;12539:402:1::0;3597:73:0::1;3681:28;3700:8;3681:18;:28::i;39758:321::-:0;-1:-1:-1;;;;;39898:23:0;;1411:10;39898:23;;:66;;-1:-1:-1;39925:39:0;39942:7;1411:10;25250:168;:::i;39925:39::-;39876:157;;;;-1:-1:-1;;;39876:157:0;;;;;;;:::i;:::-;40046:25;40052:7;40061:2;40065:5;40046;:25::i;38665:655::-;-1:-1:-1;;;;;38987:18:0;;38983:160;;39027:9;39022:110;39046:3;:10;39042:1;:14;39022:110;;;39106:7;39114:1;39106:10;;;;;;;;:::i;:::-;;;;;;;39082:12;:20;39095:3;39099:1;39095:6;;;;;;;;:::i;:::-;;;;;;;39082:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;39058:3:0;;-1:-1:-1;39058:3:0;;:::i;:::-;;;39022:110;;;;38983:160;-1:-1:-1;;;;;39159:16:0;;39155:158;;39197:9;39192:110;39216:3;:10;39212:1;:14;39192:110;;;39276:7;39284:1;39276:10;;;;;;;;:::i;:::-;;;;;;;39252:12;:20;39265:3;39269:1;39265:6;;;;;;;;:::i;:::-;;;;;;;39252:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;39228:3:0;;-1:-1:-1;39228:3:0;;:::i;:::-;;;39192:110;;;;39155:158;38665:655;;;;;;:::o;5308:326::-;-1:-1:-1;;;;;5603:19:0;;:23;;;5308:326::o;29970:88::-;30037:13;;;;:4;;:13;;;;;:::i;28052:1074::-;28279:7;:14;28265:3;:10;:28;28257:81;;;;-1:-1:-1;;;28257:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28357:16:0;;28349:66;;;;-1:-1:-1;;;28349:66:0;;;;;;;:::i;:::-;1411:10;28472:60;1411:10;28503:4;28509:2;28513:3;28518:7;28527:4;28472:20;:60::i;:::-;28550:9;28545:421;28569:3;:10;28565:1;:14;28545:421;;;28601:10;28614:3;28618:1;28614:6;;;;;;;;:::i;:::-;;;;;;;28601:19;;28635:14;28652:7;28660:1;28652:10;;;;;;;;:::i;:::-;;;;;;;;;;;;28679:19;28701:13;;;;;;;;;;-1:-1:-1;;;;;28701:19:0;;;;;;;;;;;;28652:10;;-1:-1:-1;28743:21:0;;;;28735:76;;;;-1:-1:-1;;;28735:76:0;;;;;;;:::i;:::-;28855:9;:13;;;;;;;;;;;-1:-1:-1;;;;;28855:19:0;;;;;;;;;;28877:20;;;28855:42;;28927:17;;;;;;;:27;;28877:20;;28855:9;28927:27;;28877:20;;28927:27;:::i;:::-;;;;;;;;28586:380;;;28581:3;;;;:::i;:::-;;;28545:421;;;;29013:2;-1:-1:-1;;;;;28983:47:0;29007:4;-1:-1:-1;;;;;28983:47:0;28997:8;-1:-1:-1;;;;;28983:47:0;;29017:3;29022:7;28983:47;;;;;;;:::i;:::-;;;;;;;;29043:75;29079:8;29089:4;29095:2;29099:3;29104:7;29113:4;29043:35;:75::i;33205:891::-;-1:-1:-1;;;;;33357:18:0;;33349:66;;;;-1:-1:-1;;;33349:66:0;;;;;;;:::i;:::-;33448:7;:14;33434:3;:10;:28;33426:81;;;;-1:-1:-1;;;33426:81:0;;;;;;;:::i;:::-;33520:16;1411:10;33520:31;;33564:66;33585:8;33595:4;33609:1;33613:3;33618:7;33564:66;;;;;;;;;;;;:20;:66::i;:::-;33648:9;33643:373;33667:3;:10;33663:1;:14;33643:373;;;33699:10;33712:3;33716:1;33712:6;;;;;;;;:::i;:::-;;;;;;;33699:19;;33733:14;33750:7;33758:1;33750:10;;;;;;;;:::i;:::-;;;;;;;;;;;;33777:19;33799:13;;;;;;;;;;-1:-1:-1;;;;;33799:19:0;;;;;;;;;;;;33750:10;;-1:-1:-1;33841:21:0;;;;33833:70;;;;-1:-1:-1;;;33833:70:0;;;;;;;:::i;:::-;33947:9;:13;;;;;;;;;;;-1:-1:-1;;;;;33947:19:0;;;;;;;;;;33969:20;;33947:42;;33679:3;;;;:::i;:::-;;;;33643:373;;;;34071:1;-1:-1:-1;;;;;34033:55:0;34057:4;-1:-1:-1;;;;;34033:55:0;34047:8;-1:-1:-1;;;;;34033:55:0;;34075:3;34080:7;34033:55;;;;;;;:::i;:::-;;;;;;;;33338:758;33205:891;;;:::o;3877:191::-;3970:6;;;-1:-1:-1;;;;;3987:17:0;;;-1:-1:-1;;;;;;3987:17:0;;;;;;;4020:40;;3970:6;;;3987:17;3970:6;;4020:40;;3951:16;;4020:40;3940:128;3877:191;:::o;34238:331::-;34393:8;-1:-1:-1;;;;;34384:17:0;:5;-1:-1:-1;;;;;34384:17:0;;;34376:71;;;;-1:-1:-1;;;34376:71:0;;15964:2:1;34376:71:0;;;15946:21:1;16003:2;15983:18;;;15976:30;16042:34;16022:18;;;16015:62;-1:-1:-1;;;16093:18:1;;;16086:39;16142:19;;34376:71:0;15762:405:1;34376:71:0;-1:-1:-1;;;;;34458:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;34458:46:0;;;;;;;;;;34520:41;;11021::1;;;34520::0;;10994:18:1;34520:41:0;;;;;;;34238:331;;;:::o;26874:820::-;-1:-1:-1;;;;;27062:16:0;;27054:66;;;;-1:-1:-1;;;27054:66:0;;;;;;;:::i;:::-;1411:10;27177:96;1411:10;27208:4;27214:2;27218:21;27236:2;27218:17;:21::i;:::-;27241:25;27259:6;27241:17;:25::i;:::-;27268:4;27177:20;:96::i;:::-;27286:19;27308:13;;;;;;;;;;;-1:-1:-1;;;;;27308:19:0;;;;;;;;;;27346:21;;;;27338:76;;;;-1:-1:-1;;;27338:76:0;;;;;;;:::i;:::-;27450:9;:13;;;;;;;;;;;-1:-1:-1;;;;;27450:19:0;;;;;;;;;;27472:20;;;27450:42;;27514:17;;;;;;;:27;;27472:20;;27450:9;27514:27;;27472:20;;27514:27;:::i;:::-;;;;-1:-1:-1;;27559:46:0;;;17347:25:1;;;17403:2;17388:18;;17381:34;;;-1:-1:-1;;;;;27559:46:0;;;;;;;;;;;;;;17320:18:1;27559:46:0;;;;;;;27618:68;27649:8;27659:4;27665:2;27669;27673:6;27681:4;27618:30;:68::i;32354:648::-;-1:-1:-1;;;;;32481:18:0;;32473:66;;;;-1:-1:-1;;;32473:66:0;;;;;;;:::i;:::-;1411:10;32596:102;1411:10;32627:4;32552:16;32645:21;32663:2;32645:17;:21::i;:::-;32668:25;32686:6;32668:17;:25::i;:::-;32596:102;;;;;;;;;;;;:20;:102::i;:::-;32711:19;32733:13;;;;;;;;;;;-1:-1:-1;;;;;32733:19:0;;;;;;;;;;32771:21;;;;32763:70;;;;-1:-1:-1;;;32763:70:0;;;;;;;:::i;:::-;32869:9;:13;;;;;;;;;;;-1:-1:-1;;;;;32869:19:0;;;;;;;;;;;;32891:20;;;32869:42;;32940:54;;17347:25:1;;;17388:18;;;17381:34;;;32869:19:0;;32940:54;;;;;;17320:18:1;32940:54:0;;;;;;;32462:540;;32354:648;;;:::o;40949:291::-;41166:66;41193:8;41203:4;41209:2;41213:3;41218:7;41227:4;41166:26;:66::i;36506:813::-;-1:-1:-1;;;;;36746:13:0;;5603:19;:23;36742:570;;36782:79;;-1:-1:-1;;;36782:79:0;;-1:-1:-1;;;;;36782:43:0;;;;;:79;;36826:8;;36836:4;;36842:3;;36847:7;;36856:4;;36782:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36782:79:0;;;;;;;;-1:-1:-1;;36782:79:0;;;;;;;;;;;;:::i;:::-;;;36778:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;37174:6;37167:14;;-1:-1:-1;;;37167:14:0;;;;;;;;:::i;36778:523::-;;;37223:62;;-1:-1:-1;;;37223:62:0;;11499:2:1;37223:62:0;;;11481:21:1;11538:2;11518:18;;;11511:30;11577:34;11557:18;;;11550:62;-1:-1:-1;;;11628:18:1;;;11621:50;11688:19;;37223:62:0;11297:416:1;36778:523:0;-1:-1:-1;;;;;;36943:60:0;;-1:-1:-1;;;36943:60:0;36939:159;;37028:50;;-1:-1:-1;;;37028:50:0;;;;;;;:::i;37327:198::-;37447:16;;;37461:1;37447:16;;;;;;;;;37393;;37422:22;;37447:16;;;;;;;;;;;;-1:-1:-1;37447:16:0;37422:41;;37485:7;37474:5;37480:1;37474:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;37512:5;37327:198;-1:-1:-1;;37327:198:0:o;35754:744::-;-1:-1:-1;;;;;35969:13:0;;5603:19;:23;35965:526;;36005:72;;-1:-1:-1;;;36005:72:0;;-1:-1:-1;;;;;36005:38:0;;;;;:72;;36044:8;;36054:4;;36060:2;;36064:6;;36072:4;;36005:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36005:72:0;;;;;;;;-1:-1:-1;;36005:72:0;;;;;;;;;;;;:::i;:::-;;;36001:479;;;;:::i;:::-;-1:-1:-1;;;;;;36127:55:0;;-1:-1:-1;;;36127:55:0;36123:154;;36207:50;;-1:-1:-1;;;36207:50:0;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:468:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;183:2;177:9;195:69;252:2;231:15;;-1:-1:-1;;227:29:1;258:4;223:40;177:9;195:69;:::i;:::-;282:6;273:15;;312:6;304;297:22;352:3;343:6;338:3;334:16;331:25;328:45;;;369:1;366;359:12;328:45;419:6;414:3;407:4;399:6;395:17;382:44;474:1;467:4;458:6;450;446:19;442:30;435:41;;14:468;;;;;:::o;487:173::-;555:20;;-1:-1:-1;;;;;604:31:1;;594:42;;584:70;;650:1;647;640:12;584:70;487:173;;;:::o;665:735::-;719:5;772:3;765:4;757:6;753:17;749:27;739:55;;790:1;787;780:12;739:55;826:6;813:20;852:4;875:43;915:2;875:43;:::i;:::-;947:2;941:9;959:31;987:2;979:6;959:31;:::i;:::-;1025:18;;;1059:15;;;;-1:-1:-1;1094:15:1;;;1144:1;1140:10;;;1128:23;;1124:32;;1121:41;-1:-1:-1;1118:61:1;;;1175:1;1172;1165:12;1118:61;1197:1;1207:163;1221:2;1218:1;1215:9;1207:163;;;1278:17;;1266:30;;1316:12;;;;1348;;;;1239:1;1232:9;1207:163;;;-1:-1:-1;1388:6:1;;665:735;-1:-1:-1;;;;;;;665:735:1:o;1405:220::-;1447:5;1500:3;1493:4;1485:6;1481:17;1477:27;1467:55;;1518:1;1515;1508:12;1467:55;1540:79;1615:3;1606:6;1593:20;1586:4;1578:6;1574:17;1540:79;:::i;:::-;1531:88;1405:220;-1:-1:-1;;;1405:220:1:o;1630:186::-;1689:6;1742:2;1730:9;1721:7;1717:23;1713:32;1710:52;;;1758:1;1755;1748:12;1710:52;1781:29;1800:9;1781:29;:::i;1821:260::-;1889:6;1897;1950:2;1938:9;1929:7;1925:23;1921:32;1918:52;;;1966:1;1963;1956:12;1918:52;1989:29;2008:9;1989:29;:::i;:::-;1979:39;;2037:38;2071:2;2060:9;2056:18;2037:38;:::i;:::-;2027:48;;1821:260;;;;;:::o;2086:943::-;2240:6;2248;2256;2264;2272;2325:3;2313:9;2304:7;2300:23;2296:33;2293:53;;;2342:1;2339;2332:12;2293:53;2365:29;2384:9;2365:29;:::i;:::-;2355:39;;2413:38;2447:2;2436:9;2432:18;2413:38;:::i;:::-;2403:48;;2502:2;2491:9;2487:18;2474:32;2525:18;2566:2;2558:6;2555:14;2552:34;;;2582:1;2579;2572:12;2552:34;2605:61;2658:7;2649:6;2638:9;2634:22;2605:61;:::i;:::-;2595:71;;2719:2;2708:9;2704:18;2691:32;2675:48;;2748:2;2738:8;2735:16;2732:36;;;2764:1;2761;2754:12;2732:36;2787:63;2842:7;2831:8;2820:9;2816:24;2787:63;:::i;:::-;2777:73;;2903:3;2892:9;2888:19;2875:33;2859:49;;2933:2;2923:8;2920:16;2917:36;;;2949:1;2946;2939:12;2917:36;;2972:51;3015:7;3004:8;2993:9;2989:24;2972:51;:::i;:::-;2962:61;;;2086:943;;;;;;;;:::o;3034:606::-;3138:6;3146;3154;3162;3170;3223:3;3211:9;3202:7;3198:23;3194:33;3191:53;;;3240:1;3237;3230:12;3191:53;3263:29;3282:9;3263:29;:::i;:::-;3253:39;;3311:38;3345:2;3334:9;3330:18;3311:38;:::i;:::-;3301:48;;3396:2;3385:9;3381:18;3368:32;3358:42;;3447:2;3436:9;3432:18;3419:32;3409:42;;3502:3;3491:9;3487:19;3474:33;3530:18;3522:6;3519:30;3516:50;;;3562:1;3559;3552:12;3516:50;3585:49;3626:7;3617:6;3606:9;3602:22;3585:49;:::i;3645:669::-;3772:6;3780;3788;3841:2;3829:9;3820:7;3816:23;3812:32;3809:52;;;3857:1;3854;3847:12;3809:52;3880:29;3899:9;3880:29;:::i;:::-;3870:39;;3960:2;3949:9;3945:18;3932:32;3983:18;4024:2;4016:6;4013:14;4010:34;;;4040:1;4037;4030:12;4010:34;4063:61;4116:7;4107:6;4096:9;4092:22;4063:61;:::i;:::-;4053:71;;4177:2;4166:9;4162:18;4149:32;4133:48;;4206:2;4196:8;4193:16;4190:36;;;4222:1;4219;4212:12;4190:36;;4245:63;4300:7;4289:8;4278:9;4274:24;4245:63;:::i;:::-;4235:73;;;3645:669;;;;;:::o;4319:347::-;4384:6;4392;4445:2;4433:9;4424:7;4420:23;4416:32;4413:52;;;4461:1;4458;4451:12;4413:52;4484:29;4503:9;4484:29;:::i;:::-;4474:39;;4563:2;4552:9;4548:18;4535:32;4610:5;4603:13;4596:21;4589:5;4586:32;4576:60;;4632:1;4629;4622:12;4576:60;4655:5;4645:15;;;4319:347;;;;;:::o;4671:254::-;4739:6;4747;4800:2;4788:9;4779:7;4775:23;4771:32;4768:52;;;4816:1;4813;4806:12;4768:52;4839:29;4858:9;4839:29;:::i;:::-;4829:39;4915:2;4900:18;;;;4887:32;;-1:-1:-1;;;4671:254:1:o;4930:322::-;5007:6;5015;5023;5076:2;5064:9;5055:7;5051:23;5047:32;5044:52;;;5092:1;5089;5082:12;5044:52;5115:29;5134:9;5115:29;:::i;:::-;5105:39;5191:2;5176:18;;5163:32;;-1:-1:-1;5242:2:1;5227:18;;;5214:32;;4930:322;-1:-1:-1;;;4930:322:1:o;5257:1219::-;5375:6;5383;5436:2;5424:9;5415:7;5411:23;5407:32;5404:52;;;5452:1;5449;5442:12;5404:52;5492:9;5479:23;5521:18;5562:2;5554:6;5551:14;5548:34;;;5578:1;5575;5568:12;5548:34;5616:6;5605:9;5601:22;5591:32;;5661:7;5654:4;5650:2;5646:13;5642:27;5632:55;;5683:1;5680;5673:12;5632:55;5719:2;5706:16;5741:4;5764:43;5804:2;5764:43;:::i;:::-;5836:2;5830:9;5848:31;5876:2;5868:6;5848:31;:::i;:::-;5914:18;;;5948:15;;;;-1:-1:-1;5983:11:1;;;6025:1;6021:10;;;6013:19;;6009:28;;6006:41;-1:-1:-1;6003:61:1;;;6060:1;6057;6050:12;6003:61;6082:1;6073:10;;6092:169;6106:2;6103:1;6100:9;6092:169;;;6163:23;6182:3;6163:23;:::i;:::-;6151:36;;6124:1;6117:9;;;;;6207:12;;;;6239;;6092:169;;;-1:-1:-1;6280:6:1;-1:-1:-1;;6324:18:1;;6311:32;;-1:-1:-1;;6355:16:1;;;6352:36;;;6384:1;6381;6374:12;6352:36;;6407:63;6462:7;6451:8;6440:9;6436:24;6407:63;:::i;:::-;6397:73;;;5257:1219;;;;;:::o;6481:245::-;6539:6;6592:2;6580:9;6571:7;6567:23;6563:32;6560:52;;;6608:1;6605;6598:12;6560:52;6647:9;6634:23;6666:30;6690:5;6666:30;:::i;6731:249::-;6800:6;6853:2;6841:9;6832:7;6828:23;6824:32;6821:52;;;6869:1;6866;6859:12;6821:52;6901:9;6895:16;6920:30;6944:5;6920:30;:::i;6985:450::-;7054:6;7107:2;7095:9;7086:7;7082:23;7078:32;7075:52;;;7123:1;7120;7113:12;7075:52;7163:9;7150:23;7196:18;7188:6;7185:30;7182:50;;;7228:1;7225;7218:12;7182:50;7251:22;;7304:4;7296:13;;7292:27;-1:-1:-1;7282:55:1;;7333:1;7330;7323:12;7282:55;7356:73;7421:7;7416:2;7403:16;7398:2;7394;7390:11;7356:73;:::i;:::-;7346:83;6985:450;-1:-1:-1;;;;6985:450:1:o;7440:180::-;7499:6;7552:2;7540:9;7531:7;7527:23;7523:32;7520:52;;;7568:1;7565;7558:12;7520:52;-1:-1:-1;7591:23:1;;7440:180;-1:-1:-1;7440:180:1:o;7625:435::-;7678:3;7716:5;7710:12;7743:6;7738:3;7731:19;7769:4;7798:2;7793:3;7789:12;7782:19;;7835:2;7828:5;7824:14;7856:1;7866:169;7880:6;7877:1;7874:13;7866:169;;;7941:13;;7929:26;;7975:12;;;;8010:15;;;;7902:1;7895:9;7866:169;;;-1:-1:-1;8051:3:1;;7625:435;-1:-1:-1;;;;;7625:435:1:o;8065:471::-;8106:3;8144:5;8138:12;8171:6;8166:3;8159:19;8196:1;8206:162;8220:6;8217:1;8214:13;8206:162;;;8282:4;8338:13;;;8334:22;;8328:29;8310:11;;;8306:20;;8299:59;8235:12;8206:162;;;8386:6;8383:1;8380:13;8377:87;;;8452:1;8445:4;8436:6;8431:3;8427:16;8423:27;8416:38;8377:87;-1:-1:-1;8518:2:1;8497:15;-1:-1:-1;;8493:29:1;8484:39;;;;8525:4;8480:50;;8065:471;-1:-1:-1;;8065:471:1:o;8749:826::-;-1:-1:-1;;;;;9146:15:1;;;9128:34;;9198:15;;9193:2;9178:18;;9171:43;9108:3;9245:2;9230:18;;9223:31;;;9071:4;;9277:57;;9314:19;;9306:6;9277:57;:::i;:::-;9382:9;9374:6;9370:22;9365:2;9354:9;9350:18;9343:50;9416:44;9453:6;9445;9416:44;:::i;:::-;9402:58;;9509:9;9501:6;9497:22;9491:3;9480:9;9476:19;9469:51;9537:32;9562:6;9554;9537:32;:::i;:::-;9529:40;8749:826;-1:-1:-1;;;;;;;;8749:826:1:o;9580:560::-;-1:-1:-1;;;;;9877:15:1;;;9859:34;;9929:15;;9924:2;9909:18;;9902:43;9976:2;9961:18;;9954:34;;;10019:2;10004:18;;9997:34;;;9839:3;10062;10047:19;;10040:32;;;9802:4;;10089:45;;10114:19;;10106:6;10089:45;:::i;:::-;10081:53;9580:560;-1:-1:-1;;;;;;;9580:560:1:o;10145:261::-;10324:2;10313:9;10306:21;10287:4;10344:56;10396:2;10385:9;10381:18;10373:6;10344:56;:::i;10411:465::-;10668:2;10657:9;10650:21;10631:4;10694:56;10746:2;10735:9;10731:18;10723:6;10694:56;:::i;:::-;10798:9;10790:6;10786:22;10781:2;10770:9;10766:18;10759:50;10826:44;10863:6;10855;10826:44;:::i;:::-;10818:52;10411:465;-1:-1:-1;;;;;10411:465:1:o;11073:219::-;11222:2;11211:9;11204:21;11185:4;11242:44;11282:2;11271:9;11267:18;11259:6;11242:44;:::i;11718:404::-;11920:2;11902:21;;;11959:2;11939:18;;;11932:30;11998:34;11993:2;11978:18;;11971:62;-1:-1:-1;;;12064:2:1;12049:18;;12042:38;12112:3;12097:19;;11718:404::o;12946:400::-;13148:2;13130:21;;;13187:2;13167:18;;;13160:30;13226:34;13221:2;13206:18;;13199:62;-1:-1:-1;;;13292:2:1;13277:18;;13270:34;13336:3;13321:19;;12946:400::o;13351:405::-;13553:2;13535:21;;;13592:2;13572:18;;;13565:30;13631:34;13626:2;13611:18;;13604:62;-1:-1:-1;;;13697:2:1;13682:18;;13675:39;13746:3;13731:19;;13351:405::o;13761:401::-;13963:2;13945:21;;;14002:2;13982:18;;;13975:30;14041:34;14036:2;14021:18;;14014:62;-1:-1:-1;;;14107:2:1;14092:18;;14085:35;14152:3;14137:19;;13761:401::o;14586:399::-;14788:2;14770:21;;;14827:2;14807:18;;;14800:30;14866:34;14861:2;14846:18;;14839:62;-1:-1:-1;;;14932:2:1;14917:18;;14910:33;14975:3;14960:19;;14586:399::o;14990:406::-;15192:2;15174:21;;;15231:2;15211:18;;;15204:30;15270:34;15265:2;15250:18;;15243:62;-1:-1:-1;;;15336:2:1;15321:18;;15314:40;15386:3;15371:19;;14990:406::o;15401:356::-;15603:2;15585:21;;;15622:18;;;15615:30;15681:34;15676:2;15661:18;;15654:62;15748:2;15733:18;;15401:356::o;16582:404::-;16784:2;16766:21;;;16823:2;16803:18;;;16796:30;16862:34;16857:2;16842:18;;16835:62;-1:-1:-1;;;16928:2:1;16913:18;;16906:38;16976:3;16961:19;;16582:404::o;17426:183::-;17486:4;17519:18;17511:6;17508:30;17505:56;;;17541:18;;:::i;:::-;-1:-1:-1;17586:1:1;17582:14;17598:4;17578:25;;17426:183::o;17614:128::-;17654:3;17685:1;17681:6;17678:1;17675:13;17672:39;;;17691:18;;:::i;:::-;-1:-1:-1;17727:9:1;;17614:128::o;17747:125::-;17787:4;17815:1;17812;17809:8;17806:34;;;17820:18;;:::i;:::-;-1:-1:-1;17857:9:1;;17747:125::o;17877:380::-;17956:1;17952:12;;;;17999;;;18020:61;;18074:4;18066:6;18062:17;18052:27;;18020:61;18127:2;18119:6;18116:14;18096:18;18093:38;18090:161;;;18173:10;18168:3;18164:20;18161:1;18154:31;18208:4;18205:1;18198:15;18236:4;18233:1;18226:15;18090:161;;17877:380;;;:::o;18262:249::-;18372:2;18353:13;;-1:-1:-1;;18349:27:1;18337:40;;18407:18;18392:34;;18428:22;;;18389:62;18386:88;;;18454:18;;:::i;:::-;18490:2;18483:22;-1:-1:-1;;18262:249:1:o;18516:135::-;18555:3;-1:-1:-1;;18576:17:1;;18573:43;;;18596:18;;:::i;:::-;-1:-1:-1;18643:1:1;18632:13;;18516:135::o;18656:127::-;18717:10;18712:3;18708:20;18705:1;18698:31;18748:4;18745:1;18738:15;18772:4;18769:1;18762:15;18788:127;18849:10;18844:3;18840:20;18837:1;18830:31;18880:4;18877:1;18870:15;18904:4;18901:1;18894:15;18920:127;18981:10;18976:3;18972:20;18969:1;18962:31;19012:4;19009:1;19002:15;19036:4;19033:1;19026:15;19052:179;19087:3;19129:1;19111:16;19108:23;19105:120;;;19175:1;19172;19169;19154:23;-1:-1:-1;19212:1:1;19206:8;19201:3;19197:18;19105:120;19052:179;:::o;19236:671::-;19275:3;19317:4;19299:16;19296:26;19293:39;;;19236:671;:::o;19293:39::-;19359:2;19353:9;-1:-1:-1;;19424:16:1;19420:25;;19417:1;19353:9;19396:50;19475:4;19469:11;19499:16;19534:18;19605:2;19598:4;19590:6;19586:17;19583:25;19578:2;19570:6;19567:14;19564:45;19561:58;;;19612:5;;;;;19236:671;:::o;19561:58::-;19649:6;19643:4;19639:17;19628:28;;19685:3;19679:10;19712:2;19704:6;19701:14;19698:27;;;19718:5;;;;;;19236:671;:::o;19698:27::-;19802:2;19783:16;19777:4;19773:27;19769:36;19762:4;19753:6;19748:3;19744:16;19740:27;19737:69;19734:82;;;19809:5;;;;;;19236:671;:::o;19734:82::-;19825:57;19876:4;19867:6;19859;19855:19;19851:30;19845:4;19825:57;:::i;:::-;-1:-1:-1;19898:3:1;;19236:671;-1:-1:-1;;;;;19236:671:1:o;19912:131::-;-1:-1:-1;;;;;;19986:32:1;;19976:43;;19966:71;;20033:1;20030;20023:12
Swarm Source
ipfs://02450a17e99aef8d4ad58c61c7f29132f30d78c4008201e5a22be467a814e576
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.