ERC-1155
Source Code
Overview
Max Total Supply
0 DMTNZCORP
Holders
537
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
Contract Name:
DegenMutoonzCorp
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/**
*Submitted for verification at Nova.Arbiscan.io on 2022-11-11
*/
// SPDX-License-Identifier: MIT
// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol
// OpenZeppelin Contracts (last updated v4.7.0) (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 Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol
// OpenZeppelin Contracts (last updated v4.7.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 functionCallWithValue(target, data, 0, "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");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, 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) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, 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) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
* the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
*
* _Available since v4.8._
*/
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata,
string memory errorMessage
) internal view returns (bytes memory) {
if (success) {
if (returndata.length == 0) {
// only check isContract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
require(isContract(target), "Address: call to non-contract");
}
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
/**
* @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason or 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 {
_revert(returndata, errorMessage);
}
}
function _revert(bytes memory returndata, string memory errorMessage) private pure {
// 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
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155.sol
// OpenZeppelin Contracts (last updated v4.7.0) (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 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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/ERC1155.sol
// OpenZeppelin Contracts (last updated v4.7.0) (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: address zero is not a valid owner");
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 token owner or 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: caller is not token owner or 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();
uint256[] memory ids = _asSingletonArray(id);
uint256[] memory amounts = _asSingletonArray(amount);
_beforeTokenTransfer(operator, from, to, ids, amounts, 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);
_afterTokenTransfer(operator, from, to, ids, amounts, data);
_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);
_afterTokenTransfer(operator, from, to, ids, amounts, data);
_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();
uint256[] memory ids = _asSingletonArray(id);
uint256[] memory amounts = _asSingletonArray(amount);
_beforeTokenTransfer(operator, address(0), to, ids, amounts, data);
_balances[id][to] += amount;
emit TransferSingle(operator, address(0), to, id, amount);
_afterTokenTransfer(operator, address(0), to, ids, amounts, data);
_doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
}
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
*
* 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 _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);
_afterTokenTransfer(operator, address(0), to, ids, amounts, data);
_doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
}
/**
* @dev Destroys `amount` tokens of token type `id` from `from`
*
* Emits a {TransferSingle} event.
*
* 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();
uint256[] memory ids = _asSingletonArray(id);
uint256[] memory amounts = _asSingletonArray(amount);
_beforeTokenTransfer(operator, from, address(0), ids, amounts, "");
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);
_afterTokenTransfer(operator, from, address(0), ids, amounts, "");
}
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
*
* Emits a {TransferBatch} event.
*
* 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);
_afterTokenTransfer(operator, from, address(0), ids, amounts, "");
}
/**
* @dev Approve `operator` to operate on all of `owner` tokens
*
* Emits an {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 `ids` and `amounts` 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 {}
/**
* @dev Hook that is called after 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 _afterTokenTransfer(
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: contracts/DegenMutoonzCorp.sol
pragma solidity ^0.8.0;
contract DegenMutoonzCorp is ERC1155, Ownable {
string public name;
string public symbol;
address public transformationContractAddress = address(0);
mapping(uint => string) public tokenURI;
error OnlyTheTransformationContractCanBurnTokensDirectly();
constructor() ERC1155("") {
name = "DegenMutoonzCorp";
symbol = "DMTNZCORP";
}
function mint(address _to, uint _id, uint _amount) external onlyOwner {
_mint(_to, _id, _amount, "");
}
function mintBatch(address _to, uint[] memory _ids, uint[] memory _amounts) external onlyOwner {
_mintBatch(_to, _ids, _amounts, "");
}
function burn(uint _id, uint _amount) external {
if (address(0) == transformationContractAddress || msg.sender != transformationContractAddress) {
revert OnlyTheTransformationContractCanBurnTokensDirectly();
}
_burn(msg.sender, _id, _amount);
}
function burnBatch(uint[] memory _ids, uint[] memory _amounts) external {
if (address(0) == transformationContractAddress || msg.sender != transformationContractAddress) {
revert OnlyTheTransformationContractCanBurnTokensDirectly();
}
_burnBatch(msg.sender, _ids, _amounts);
}
function burnForMint(address _from, uint[] memory _burnIds, uint[] memory _burnAmounts, uint[] memory _mintIds, uint[] memory _mintAmounts) external onlyOwner {
_burnBatch(_from, _burnIds, _burnAmounts);
_mintBatch(_from, _mintIds, _mintAmounts, "");
}
function setURI(uint _id, string memory _uri) external onlyOwner {
tokenURI[_id] = _uri;
emit URI(_uri, _id);
}
function uri(uint _id) public override view returns (string memory) {
return tokenURI[_id];
}
function setTransformationContractAddress(address _transformationContractAddress) public onlyOwner {
transformationContractAddress = _transformationContractAddress;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"OnlyTheTransformationContractCanBurnTokensDirectly","type":"error"},{"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":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256[]","name":"_burnIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_burnAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"_mintIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_mintAmounts","type":"uint256[]"}],"name":"burnForMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"address","name":"_transformationContractAddress","type":"address"}],"name":"setTransformationContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"string","name":"_uri","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":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transformationContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]Contract Creation Code
6080604052600680546001600160a01b03191690553480156200002157600080fd5b506040805160208101909152600081526200003c81620000bb565b506200004833620000d4565b6040805180820190915260108082526f0446567656e4d75746f6f6e7a436f72760841b6020909201918252620000819160049162000126565b50604080518082019091526009808252680444d544e5a434f52560bc1b6020909201918252620000b49160059162000126565b5062000209565b8051620000d090600290602084019062000126565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200013490620001cc565b90600052602060002090601f016020900481019282620001585760008555620001a3565b82601f106200017357805160ff1916838001178555620001a3565b82800160010185558215620001a3579182015b82811115620001a357825182559160200191906001019062000186565b50620001b1929150620001b5565b5090565b5b80821115620001b15760008155600101620001b6565b600181811c90821680620001e157607f821691505b602082108114156200020357634e487b7160e01b600052602260045260246000fd5b50919050565b61215380620002196000396000f3fe608060405234801561001057600080fd5b50600436106101415760003560e01c80638da5cb5b116100b8578063c87b56dd1161007c578063c87b56dd146102a6578063d7f46d06146102b9578063d81d0a15146102cc578063e985e9c5146102df578063f242432a1461031b578063f2fde38b1461032e57600080fd5b80638da5cb5b1461024057806395d89b4114610265578063991c2c931461026d578063a22cb46514610280578063b390c0ab1461029357600080fd5b80632eb2c2d61161010a5780632eb2c2d6146101cc5780634e1273f4146101df578063510f4104146101ff578063715018a61461021257806383ca4b6f1461021a578063862440e21461022d57600080fd5b8062fdd58e1461014657806301ffc9a71461016c57806306fdde031461018f5780630e89341c146101a4578063156e29f6146101b7575b600080fd5b61015961015436600461196b565b610341565b6040519081526020015b60405180910390f35b61017f61017a366004611ae6565b6103d7565b6040519015158152602001610163565b610197610429565b6040516101639190611d18565b6101976101b2366004611b20565b6104b7565b6101ca6101c5366004611995565b610559565b005b6101ca6101da3660046116fb565b610581565b6101f26101ed3660046119c8565b6105cd565b6040516101639190611cd7565b6101ca61020d36600461187e565b6106f7565b6101ca610725565b6101ca610228366004611a99565b610739565b6101ca61023b366004611b39565b610789565b6003546001600160a01b03165b6040516001600160a01b039091168152602001610163565b6101976107ed565b6101ca61027b3660046116ad565b6107fa565b6101ca61028e36600461192f565b610824565b6101ca6102a1366004611b8a565b61082f565b6101976102b4366004611b20565b61087b565b60065461024d906001600160a01b031681565b6101ca6102da36600461180a565b610894565b61017f6102ed3660046116c8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6101ca6103293660046117a5565b6108b7565b6101ca61033c3660046116ad565b6108fc565b60006001600160a01b0383166103b15760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061040857506001600160e01b031982166303a24d0760e21b145b8061042357506301ffc9a760e01b6001600160e01b03198316145b92915050565b6004805461043690611f9c565b80601f016020809104026020016040519081016040528092919081815260200182805461046290611f9c565b80156104af5780601f10610484576101008083540402835291602001916104af565b820191906000526020600020905b81548152906001019060200180831161049257829003601f168201915b505050505081565b60008181526007602052604090208054606091906104d490611f9c565b80601f016020809104026020016040519081016040528092919081815260200182805461050090611f9c565b801561054d5780601f106105225761010080835404028352916020019161054d565b820191906000526020600020905b81548152906001019060200180831161053057829003601f168201915b50505050509050919050565b610561610975565b61057c838383604051806020016040528060008152506109cf565b505050565b6001600160a01b03851633148061059d575061059d85336102ed565b6105b95760405162461bcd60e51b81526004016103a890611db7565b6105c68585858585610aa9565b5050505050565b606081518351146106325760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016103a8565b6000835167ffffffffffffffff81111561064e5761064e61204b565b604051908082528060200260200182016040528015610677578160200160208202803683370190505b50905060005b84518110156106ef576106c285828151811061069b5761069b612035565b60200260200101518583815181106106b5576106b5612035565b6020026020010151610341565b8282815181106106d4576106d4612035565b60209081029190910101526106e881612004565b905061067d565b509392505050565b6106ff610975565b61070a858585610c45565b6105c685838360405180602001604052806000815250610dd0565b61072d610975565b6107376000610f1b565b565b6006546001600160a01b0316158061075c57506006546001600160a01b03163314155b1561077a5760405163ae9947ab60e01b815260040160405180910390fd5b610785338383610c45565b5050565b610791610975565b600082815260076020908152604090912082516107b0928401906114fc565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b826040516107e19190611d18565b60405180910390a25050565b6005805461043690611f9c565b610802610975565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b610785338383610f6d565b6006546001600160a01b0316158061085257506006546001600160a01b03163314155b156108705760405163ae9947ab60e01b815260040160405180910390fd5b61078533838361104e565b6007602052600090815260409020805461043690611f9c565b61089c610975565b61057c83838360405180602001604052806000815250610dd0565b6001600160a01b0385163314806108d357506108d385336102ed565b6108ef5760405162461bcd60e51b81526004016103a890611db7565b6105c68585858585611152565b610904610975565b6001600160a01b0381166109695760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103a8565b61097281610f1b565b50565b6003546001600160a01b031633146107375760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103a8565b6001600160a01b0384166109f55760405162461bcd60e51b81526004016103a890611f1f565b336000610a018561127c565b90506000610a0e8561127c565b90506000868152602081815260408083206001600160a01b038b16845290915281208054879290610a40908490611f84565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610aa0836000898989896112c7565b50505050505050565b8151835114610aca5760405162461bcd60e51b81526004016103a890611ed7565b6001600160a01b038416610af05760405162461bcd60e51b81526004016103a890611e05565b3360005b8451811015610bd7576000858281518110610b1157610b11612035565b602002602001015190506000858381518110610b2f57610b2f612035565b602090810291909101810151600084815280835260408082206001600160a01b038e168352909352919091205490915081811015610b7f5760405162461bcd60e51b81526004016103a890611e8d565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610bbc908490611f84565b9250508190555050505080610bd090612004565b9050610af4565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610c27929190611cea565b60405180910390a4610c3d818787878787611432565b505050505050565b6001600160a01b038316610c6b5760405162461bcd60e51b81526004016103a890611e4a565b8051825114610c8c5760405162461bcd60e51b81526004016103a890611ed7565b604080516020810190915260009081905233905b8351811015610d62576000848281518110610cbd57610cbd612035565b602002602001015190506000848381518110610cdb57610cdb612035565b602090810291909101810151600084815280835260408082206001600160a01b038c168352909352919091205490915081811015610d2b5760405162461bcd60e51b81526004016103a890611d73565b6000928352602083815260408085206001600160a01b038b1686529091529092209103905580610d5a81612004565b915050610ca0565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051610db3929190611cea565b60405180910390a460408051602081019091526000905250505050565b6001600160a01b038416610df65760405162461bcd60e51b81526004016103a890611f1f565b8151835114610e175760405162461bcd60e51b81526004016103a890611ed7565b3360005b8451811015610eb357838181518110610e3657610e36612035565b6020026020010151600080878481518110610e5357610e53612035565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254610e9b9190611f84565b90915550819050610eab81612004565b915050610e1b565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610f04929190611cea565b60405180910390a46105c681600087878787611432565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b03161415610fe15760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016103a8565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383166110745760405162461bcd60e51b81526004016103a890611e4a565b3360006110808461127c565b9050600061108d8461127c565b60408051602080820183526000918290528882528181528282206001600160a01b038b16835290522054909150848110156110da5760405162461bcd60e51b81526004016103a890611d73565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4604080516020810190915260009052610aa0565b6001600160a01b0384166111785760405162461bcd60e51b81526004016103a890611e05565b3360006111848561127c565b905060006111918561127c565b90506000868152602081815260408083206001600160a01b038c168452909152902054858110156111d45760405162461bcd60e51b81526004016103a890611e8d565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611211908490611f84565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611271848a8a8a8a8a6112c7565b505050505050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106112b6576112b6612035565b602090810291909101015292915050565b6001600160a01b0384163b15610c3d5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061130b9089908990889088908890600401611c92565b602060405180830381600087803b15801561132557600080fd5b505af1925050508015611355575060408051601f3d908101601f1916820190925261135291810190611b03565b60015b61140257611361612061565b806308c379a0141561139b575061137661207d565b80611381575061139d565b8060405162461bcd60e51b81526004016103a89190611d18565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016103a8565b6001600160e01b0319811663f23a6e6160e01b14610aa05760405162461bcd60e51b81526004016103a890611d2b565b6001600160a01b0384163b15610c3d5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906114769089908990889088908890600401611c34565b602060405180830381600087803b15801561149057600080fd5b505af19250505080156114c0575060408051601f3d908101601f191682019092526114bd91810190611b03565b60015b6114cc57611361612061565b6001600160e01b0319811663bc197c8160e01b14610aa05760405162461bcd60e51b81526004016103a890611d2b565b82805461150890611f9c565b90600052602060002090601f01602090048101928261152a5760008555611570565b82601f1061154357805160ff1916838001178555611570565b82800160010185558215611570579182015b82811115611570578251825591602001919060010190611555565b5061157c929150611580565b5090565b5b8082111561157c5760008155600101611581565b600067ffffffffffffffff8311156115af576115af61204b565b6040516115c6601f8501601f191660200182611fd7565b8091508381528484840111156115db57600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b038116811461160a57600080fd5b919050565b600082601f83011261162057600080fd5b8135602061162d82611f60565b60405161163a8282611fd7565b8381528281019150858301600585901b8701840188101561165a57600080fd5b60005b858110156116795781358452928401929084019060010161165d565b5090979650505050505050565b600082601f83011261169757600080fd5b6116a683833560208501611595565b9392505050565b6000602082840312156116bf57600080fd5b6116a6826115f3565b600080604083850312156116db57600080fd5b6116e4836115f3565b91506116f2602084016115f3565b90509250929050565b600080600080600060a0868803121561171357600080fd5b61171c866115f3565b945061172a602087016115f3565b9350604086013567ffffffffffffffff8082111561174757600080fd5b61175389838a0161160f565b9450606088013591508082111561176957600080fd5b61177589838a0161160f565b9350608088013591508082111561178b57600080fd5b5061179888828901611686565b9150509295509295909350565b600080600080600060a086880312156117bd57600080fd5b6117c6866115f3565b94506117d4602087016115f3565b93506040860135925060608601359150608086013567ffffffffffffffff8111156117fe57600080fd5b61179888828901611686565b60008060006060848603121561181f57600080fd5b611828846115f3565b9250602084013567ffffffffffffffff8082111561184557600080fd5b6118518783880161160f565b9350604086013591508082111561186757600080fd5b506118748682870161160f565b9150509250925092565b600080600080600060a0868803121561189657600080fd5b61189f866115f3565b9450602086013567ffffffffffffffff808211156118bc57600080fd5b6118c889838a0161160f565b955060408801359150808211156118de57600080fd5b6118ea89838a0161160f565b9450606088013591508082111561190057600080fd5b61190c89838a0161160f565b9350608088013591508082111561192257600080fd5b506117988882890161160f565b6000806040838503121561194257600080fd5b61194b836115f3565b91506020830135801515811461196057600080fd5b809150509250929050565b6000806040838503121561197e57600080fd5b611987836115f3565b946020939093013593505050565b6000806000606084860312156119aa57600080fd5b6119b3846115f3565b95602085013595506040909401359392505050565b600080604083850312156119db57600080fd5b823567ffffffffffffffff808211156119f357600080fd5b818501915085601f830112611a0757600080fd5b81356020611a1482611f60565b604051611a218282611fd7565b8381528281019150858301600585901b870184018b1015611a4157600080fd5b600096505b84871015611a6b57611a57816115f3565b835260019690960195918301918301611a46565b5096505086013592505080821115611a8257600080fd5b50611a8f8582860161160f565b9150509250929050565b60008060408385031215611aac57600080fd5b823567ffffffffffffffff80821115611ac457600080fd5b611ad08683870161160f565b93506020850135915080821115611a8257600080fd5b600060208284031215611af857600080fd5b81356116a681612107565b600060208284031215611b1557600080fd5b81516116a681612107565b600060208284031215611b3257600080fd5b5035919050565b60008060408385031215611b4c57600080fd5b82359150602083013567ffffffffffffffff811115611b6a57600080fd5b8301601f81018513611b7b57600080fd5b611a8f85823560208401611595565b60008060408385031215611b9d57600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015611bdc57815187529582019590820190600101611bc0565b509495945050505050565b6000815180845260005b81811015611c0d57602081850181015186830182015201611bf1565b81811115611c1f576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0386811682528516602082015260a060408201819052600090611c6090830186611bac565b8281036060840152611c728186611bac565b90508281036080840152611c868185611be7565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090611ccc90830184611be7565b979650505050505050565b6020815260006116a66020830184611bac565b604081526000611cfd6040830185611bac565b8281036020840152611d0f8185611bac565b95945050505050565b6020815260006116a66020830184611be7565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b600067ffffffffffffffff821115611f7a57611f7a61204b565b5060051b60200190565b60008219821115611f9757611f9761201f565b500190565b600181811c90821680611fb057607f821691505b60208210811415611fd157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff81118282101715611ffd57611ffd61204b565b6040525050565b60006000198214156120185761201861201f565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561207a5760046000803e5060005160e01c5b90565b600060443d101561208b5790565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156120bb57505050505090565b82850191508151818111156120d35750505050505090565b843d87010160208285010111156120ed5750505050505090565b6120fc60208286010187611fd7565b509095945050505050565b6001600160e01b03198116811461097257600080fdfea264697066735822122023b873939b5e17de94b726b4978363ab4bbc3829bff0ba282c516db8bd4889e764736f6c63430008070033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101415760003560e01c80638da5cb5b116100b8578063c87b56dd1161007c578063c87b56dd146102a6578063d7f46d06146102b9578063d81d0a15146102cc578063e985e9c5146102df578063f242432a1461031b578063f2fde38b1461032e57600080fd5b80638da5cb5b1461024057806395d89b4114610265578063991c2c931461026d578063a22cb46514610280578063b390c0ab1461029357600080fd5b80632eb2c2d61161010a5780632eb2c2d6146101cc5780634e1273f4146101df578063510f4104146101ff578063715018a61461021257806383ca4b6f1461021a578063862440e21461022d57600080fd5b8062fdd58e1461014657806301ffc9a71461016c57806306fdde031461018f5780630e89341c146101a4578063156e29f6146101b7575b600080fd5b61015961015436600461196b565b610341565b6040519081526020015b60405180910390f35b61017f61017a366004611ae6565b6103d7565b6040519015158152602001610163565b610197610429565b6040516101639190611d18565b6101976101b2366004611b20565b6104b7565b6101ca6101c5366004611995565b610559565b005b6101ca6101da3660046116fb565b610581565b6101f26101ed3660046119c8565b6105cd565b6040516101639190611cd7565b6101ca61020d36600461187e565b6106f7565b6101ca610725565b6101ca610228366004611a99565b610739565b6101ca61023b366004611b39565b610789565b6003546001600160a01b03165b6040516001600160a01b039091168152602001610163565b6101976107ed565b6101ca61027b3660046116ad565b6107fa565b6101ca61028e36600461192f565b610824565b6101ca6102a1366004611b8a565b61082f565b6101976102b4366004611b20565b61087b565b60065461024d906001600160a01b031681565b6101ca6102da36600461180a565b610894565b61017f6102ed3660046116c8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6101ca6103293660046117a5565b6108b7565b6101ca61033c3660046116ad565b6108fc565b60006001600160a01b0383166103b15760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061040857506001600160e01b031982166303a24d0760e21b145b8061042357506301ffc9a760e01b6001600160e01b03198316145b92915050565b6004805461043690611f9c565b80601f016020809104026020016040519081016040528092919081815260200182805461046290611f9c565b80156104af5780601f10610484576101008083540402835291602001916104af565b820191906000526020600020905b81548152906001019060200180831161049257829003601f168201915b505050505081565b60008181526007602052604090208054606091906104d490611f9c565b80601f016020809104026020016040519081016040528092919081815260200182805461050090611f9c565b801561054d5780601f106105225761010080835404028352916020019161054d565b820191906000526020600020905b81548152906001019060200180831161053057829003601f168201915b50505050509050919050565b610561610975565b61057c838383604051806020016040528060008152506109cf565b505050565b6001600160a01b03851633148061059d575061059d85336102ed565b6105b95760405162461bcd60e51b81526004016103a890611db7565b6105c68585858585610aa9565b5050505050565b606081518351146106325760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016103a8565b6000835167ffffffffffffffff81111561064e5761064e61204b565b604051908082528060200260200182016040528015610677578160200160208202803683370190505b50905060005b84518110156106ef576106c285828151811061069b5761069b612035565b60200260200101518583815181106106b5576106b5612035565b6020026020010151610341565b8282815181106106d4576106d4612035565b60209081029190910101526106e881612004565b905061067d565b509392505050565b6106ff610975565b61070a858585610c45565b6105c685838360405180602001604052806000815250610dd0565b61072d610975565b6107376000610f1b565b565b6006546001600160a01b0316158061075c57506006546001600160a01b03163314155b1561077a5760405163ae9947ab60e01b815260040160405180910390fd5b610785338383610c45565b5050565b610791610975565b600082815260076020908152604090912082516107b0928401906114fc565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b826040516107e19190611d18565b60405180910390a25050565b6005805461043690611f9c565b610802610975565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b610785338383610f6d565b6006546001600160a01b0316158061085257506006546001600160a01b03163314155b156108705760405163ae9947ab60e01b815260040160405180910390fd5b61078533838361104e565b6007602052600090815260409020805461043690611f9c565b61089c610975565b61057c83838360405180602001604052806000815250610dd0565b6001600160a01b0385163314806108d357506108d385336102ed565b6108ef5760405162461bcd60e51b81526004016103a890611db7565b6105c68585858585611152565b610904610975565b6001600160a01b0381166109695760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103a8565b61097281610f1b565b50565b6003546001600160a01b031633146107375760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103a8565b6001600160a01b0384166109f55760405162461bcd60e51b81526004016103a890611f1f565b336000610a018561127c565b90506000610a0e8561127c565b90506000868152602081815260408083206001600160a01b038b16845290915281208054879290610a40908490611f84565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610aa0836000898989896112c7565b50505050505050565b8151835114610aca5760405162461bcd60e51b81526004016103a890611ed7565b6001600160a01b038416610af05760405162461bcd60e51b81526004016103a890611e05565b3360005b8451811015610bd7576000858281518110610b1157610b11612035565b602002602001015190506000858381518110610b2f57610b2f612035565b602090810291909101810151600084815280835260408082206001600160a01b038e168352909352919091205490915081811015610b7f5760405162461bcd60e51b81526004016103a890611e8d565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610bbc908490611f84565b9250508190555050505080610bd090612004565b9050610af4565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610c27929190611cea565b60405180910390a4610c3d818787878787611432565b505050505050565b6001600160a01b038316610c6b5760405162461bcd60e51b81526004016103a890611e4a565b8051825114610c8c5760405162461bcd60e51b81526004016103a890611ed7565b604080516020810190915260009081905233905b8351811015610d62576000848281518110610cbd57610cbd612035565b602002602001015190506000848381518110610cdb57610cdb612035565b602090810291909101810151600084815280835260408082206001600160a01b038c168352909352919091205490915081811015610d2b5760405162461bcd60e51b81526004016103a890611d73565b6000928352602083815260408085206001600160a01b038b1686529091529092209103905580610d5a81612004565b915050610ca0565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051610db3929190611cea565b60405180910390a460408051602081019091526000905250505050565b6001600160a01b038416610df65760405162461bcd60e51b81526004016103a890611f1f565b8151835114610e175760405162461bcd60e51b81526004016103a890611ed7565b3360005b8451811015610eb357838181518110610e3657610e36612035565b6020026020010151600080878481518110610e5357610e53612035565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254610e9b9190611f84565b90915550819050610eab81612004565b915050610e1b565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610f04929190611cea565b60405180910390a46105c681600087878787611432565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b03161415610fe15760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016103a8565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383166110745760405162461bcd60e51b81526004016103a890611e4a565b3360006110808461127c565b9050600061108d8461127c565b60408051602080820183526000918290528882528181528282206001600160a01b038b16835290522054909150848110156110da5760405162461bcd60e51b81526004016103a890611d73565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4604080516020810190915260009052610aa0565b6001600160a01b0384166111785760405162461bcd60e51b81526004016103a890611e05565b3360006111848561127c565b905060006111918561127c565b90506000868152602081815260408083206001600160a01b038c168452909152902054858110156111d45760405162461bcd60e51b81526004016103a890611e8d565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611211908490611f84565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611271848a8a8a8a8a6112c7565b505050505050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106112b6576112b6612035565b602090810291909101015292915050565b6001600160a01b0384163b15610c3d5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061130b9089908990889088908890600401611c92565b602060405180830381600087803b15801561132557600080fd5b505af1925050508015611355575060408051601f3d908101601f1916820190925261135291810190611b03565b60015b61140257611361612061565b806308c379a0141561139b575061137661207d565b80611381575061139d565b8060405162461bcd60e51b81526004016103a89190611d18565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016103a8565b6001600160e01b0319811663f23a6e6160e01b14610aa05760405162461bcd60e51b81526004016103a890611d2b565b6001600160a01b0384163b15610c3d5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906114769089908990889088908890600401611c34565b602060405180830381600087803b15801561149057600080fd5b505af19250505080156114c0575060408051601f3d908101601f191682019092526114bd91810190611b03565b60015b6114cc57611361612061565b6001600160e01b0319811663bc197c8160e01b14610aa05760405162461bcd60e51b81526004016103a890611d2b565b82805461150890611f9c565b90600052602060002090601f01602090048101928261152a5760008555611570565b82601f1061154357805160ff1916838001178555611570565b82800160010185558215611570579182015b82811115611570578251825591602001919060010190611555565b5061157c929150611580565b5090565b5b8082111561157c5760008155600101611581565b600067ffffffffffffffff8311156115af576115af61204b565b6040516115c6601f8501601f191660200182611fd7565b8091508381528484840111156115db57600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b038116811461160a57600080fd5b919050565b600082601f83011261162057600080fd5b8135602061162d82611f60565b60405161163a8282611fd7565b8381528281019150858301600585901b8701840188101561165a57600080fd5b60005b858110156116795781358452928401929084019060010161165d565b5090979650505050505050565b600082601f83011261169757600080fd5b6116a683833560208501611595565b9392505050565b6000602082840312156116bf57600080fd5b6116a6826115f3565b600080604083850312156116db57600080fd5b6116e4836115f3565b91506116f2602084016115f3565b90509250929050565b600080600080600060a0868803121561171357600080fd5b61171c866115f3565b945061172a602087016115f3565b9350604086013567ffffffffffffffff8082111561174757600080fd5b61175389838a0161160f565b9450606088013591508082111561176957600080fd5b61177589838a0161160f565b9350608088013591508082111561178b57600080fd5b5061179888828901611686565b9150509295509295909350565b600080600080600060a086880312156117bd57600080fd5b6117c6866115f3565b94506117d4602087016115f3565b93506040860135925060608601359150608086013567ffffffffffffffff8111156117fe57600080fd5b61179888828901611686565b60008060006060848603121561181f57600080fd5b611828846115f3565b9250602084013567ffffffffffffffff8082111561184557600080fd5b6118518783880161160f565b9350604086013591508082111561186757600080fd5b506118748682870161160f565b9150509250925092565b600080600080600060a0868803121561189657600080fd5b61189f866115f3565b9450602086013567ffffffffffffffff808211156118bc57600080fd5b6118c889838a0161160f565b955060408801359150808211156118de57600080fd5b6118ea89838a0161160f565b9450606088013591508082111561190057600080fd5b61190c89838a0161160f565b9350608088013591508082111561192257600080fd5b506117988882890161160f565b6000806040838503121561194257600080fd5b61194b836115f3565b91506020830135801515811461196057600080fd5b809150509250929050565b6000806040838503121561197e57600080fd5b611987836115f3565b946020939093013593505050565b6000806000606084860312156119aa57600080fd5b6119b3846115f3565b95602085013595506040909401359392505050565b600080604083850312156119db57600080fd5b823567ffffffffffffffff808211156119f357600080fd5b818501915085601f830112611a0757600080fd5b81356020611a1482611f60565b604051611a218282611fd7565b8381528281019150858301600585901b870184018b1015611a4157600080fd5b600096505b84871015611a6b57611a57816115f3565b835260019690960195918301918301611a46565b5096505086013592505080821115611a8257600080fd5b50611a8f8582860161160f565b9150509250929050565b60008060408385031215611aac57600080fd5b823567ffffffffffffffff80821115611ac457600080fd5b611ad08683870161160f565b93506020850135915080821115611a8257600080fd5b600060208284031215611af857600080fd5b81356116a681612107565b600060208284031215611b1557600080fd5b81516116a681612107565b600060208284031215611b3257600080fd5b5035919050565b60008060408385031215611b4c57600080fd5b82359150602083013567ffffffffffffffff811115611b6a57600080fd5b8301601f81018513611b7b57600080fd5b611a8f85823560208401611595565b60008060408385031215611b9d57600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015611bdc57815187529582019590820190600101611bc0565b509495945050505050565b6000815180845260005b81811015611c0d57602081850181015186830182015201611bf1565b81811115611c1f576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0386811682528516602082015260a060408201819052600090611c6090830186611bac565b8281036060840152611c728186611bac565b90508281036080840152611c868185611be7565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090611ccc90830184611be7565b979650505050505050565b6020815260006116a66020830184611bac565b604081526000611cfd6040830185611bac565b8281036020840152611d0f8185611bac565b95945050505050565b6020815260006116a66020830184611be7565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b600067ffffffffffffffff821115611f7a57611f7a61204b565b5060051b60200190565b60008219821115611f9757611f9761201f565b500190565b600181811c90821680611fb057607f821691505b60208210811415611fd157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff81118282101715611ffd57611ffd61204b565b6040525050565b60006000198214156120185761201861201f565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561207a5760046000803e5060005160e01c5b90565b600060443d101561208b5790565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156120bb57505050505090565b82850191508151818111156120d35750505050505090565b843d87010160208285010111156120ed5750505050505090565b6120fc60208286010187611fd7565b509095945050505050565b6001600160e01b03198116811461097257600080fdfea264697066735822122023b873939b5e17de94b726b4978363ab4bbc3829bff0ba282c516db8bd4889e764736f6c63430008070033
Deployed Bytecode Sourcemap
43622:1916:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28023:230;;;;;;:::i;:::-;;:::i;:::-;;;19173:25:1;;;19161:2;19146:18;28023:230:0;;;;;;;;27046:310;;;;;;:::i;:::-;;:::i;:::-;;;13095:14:1;;13088:22;13070:41;;13058:2;13043:18;27046:310:0;12930:187:1;43679:18:0;;;:::i;:::-;;;;;;;:::i;45254:101::-;;;;;;:::i;:::-;;:::i;44001:111::-;;;;;;:::i;:::-;;:::i;:::-;;29966:438;;;;;;:::i;:::-;;:::i;28419:524::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;44853:265::-;;;;;;:::i;:::-;;:::i;5929:103::-;;;:::i;44544:303::-;;;;;;:::i;:::-;;:::i;45124:124::-;;;;;;:::i;:::-;;:::i;5281:87::-;5354:6;;-1:-1:-1;;;;;5354:6:0;5281:87;;;-1:-1:-1;;;;;10754:32:1;;;10736:51;;10724:2;10709:18;5281:87:0;10590:203:1;43702:20:0;;;:::i;45361:174::-;;;;;;:::i;:::-;;:::i;29016:155::-;;;;;;:::i;:::-;;:::i;44267:271::-;;;;;;:::i;:::-;;:::i;43793:39::-;;;;;;:::i;:::-;;:::i;43729:57::-;;;;;-1:-1:-1;;;;;43729:57:0;;;44118:143;;;;;;:::i;:::-;;:::i;29243:168::-;;;;;;:::i;:::-;-1:-1:-1;;;;;29366:27:0;;;29342:4;29366:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;29243:168;29483:406;;;;;;:::i;:::-;;:::i;6187:201::-;;;;;;:::i;:::-;;:::i;28023:230::-;28109:7;-1:-1:-1;;;;;28137:21:0;;28129:76;;;;-1:-1:-1;;;28129:76:0;;14769:2:1;28129:76:0;;;14751:21:1;14808:2;14788:18;;;14781:30;14847:34;14827:18;;;14820:62;-1:-1:-1;;;14898:18:1;;;14891:40;14948:19;;28129:76:0;;;;;;;;;-1:-1:-1;28223:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;28223:22:0;;;;;;;;;;;;28023:230::o;27046:310::-;27148:4;-1:-1:-1;;;;;;27185:41:0;;-1:-1:-1;;;27185:41:0;;:110;;-1:-1:-1;;;;;;;27243:52:0;;-1:-1:-1;;;27243:52:0;27185:110;:163;;;-1:-1:-1;;;;;;;;;;18224:40:0;;;27312:36;27165:183;27046:310;-1:-1:-1;;27046:310:0:o;43679:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45254:101::-;45336:13;;;;:8;:13;;;;;45329:20;;45307:13;;45336;45329:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45254:101;;;:::o;44001:111::-;5167:13;:11;:13::i;:::-;44078:28:::1;44084:3;44089;44094:7;44078:28;;;;;;;;;;;::::0;:5:::1;:28::i;:::-;44001:111:::0;;;:::o;29966:438::-;-1:-1:-1;;;;;30199:20:0;;3859:10;30199:20;;:60;;-1:-1:-1;30223:36:0;30240:4;3859:10;29243:168;:::i;30223:36::-;30177:156;;;;-1:-1:-1;;;30177:156:0;;;;;;;:::i;:::-;30344:52;30367:4;30373:2;30377:3;30382:7;30391:4;30344:22;:52::i;:::-;29966:438;;;;;:::o;28419:524::-;28575:16;28636:3;:10;28617:8;:15;:29;28609:83;;;;-1:-1:-1;;;28609:83:0;;17587:2:1;28609:83:0;;;17569:21:1;17626:2;17606:18;;;17599:30;17665:34;17645:18;;;17638:62;-1:-1:-1;;;17716:18:1;;;17709:39;17765:19;;28609:83:0;17385:405:1;28609:83:0;28705:30;28752:8;:15;28738:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28738:30:0;;28705:63;;28786:9;28781:122;28805:8;:15;28801:1;:19;28781:122;;;28861:30;28871:8;28880:1;28871:11;;;;;;;;:::i;:::-;;;;;;;28884:3;28888:1;28884:6;;;;;;;;:::i;:::-;;;;;;;28861:9;:30::i;:::-;28842:13;28856:1;28842:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;28822:3;;;:::i;:::-;;;28781:122;;;-1:-1:-1;28922:13:0;28419:524;-1:-1:-1;;;28419:524:0:o;44853:265::-;5167:13;:11;:13::i;:::-;45019:41:::1;45030:5;45037:8;45047:12;45019:10;:41::i;:::-;45067:45;45078:5;45085:8;45095:12;45067:45;;;;;;;;;;;::::0;:10:::1;:45::i;5929:103::-:0;5167:13;:11;:13::i;:::-;5994:30:::1;6021:1;5994:18;:30::i;:::-;5929:103::o:0;44544:303::-;44641:29;;-1:-1:-1;;;;;44641:29:0;44627:43;;:90;;-1:-1:-1;44688:29:0;;-1:-1:-1;;;;;44688:29:0;44674:10;:43;;44627:90;44623:172;;;44735:52;;-1:-1:-1;;;44735:52:0;;;;;;;;;;;44623:172;44803:38;44814:10;44826:4;44832:8;44803:10;:38::i;:::-;44544:303;;:::o;45124:124::-;5167:13;:11;:13::i;:::-;45196::::1;::::0;;;:8:::1;:13;::::0;;;;;;;:20;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;45238:3;45228:14;45232:4;45228:14;;;;;;:::i;:::-;;;;;;;;45124:124:::0;;:::o;43702:20::-;;;;;;;:::i;45361:174::-;5167:13;:11;:13::i;:::-;45467:29:::1;:62:::0;;-1:-1:-1;;;;;;45467:62:0::1;-1:-1:-1::0;;;;;45467:62:0;;;::::1;::::0;;;::::1;::::0;;45361:174::o;29016:155::-;29111:52;3859:10;29144:8;29154;29111:18;:52::i;44267:271::-;44339:29;;-1:-1:-1;;;;;44339:29:0;44325:43;;:90;;-1:-1:-1;44386:29:0;;-1:-1:-1;;;;;44386:29:0;44372:10;:43;;44325:90;44321:172;;;44433:52;;-1:-1:-1;;;44433:52:0;;;;;;;;;;;44321:172;44501:31;44507:10;44519:3;44524:7;44501:5;:31::i;43793:39::-;;;;;;;;;;;;;;;;:::i;44118:143::-;5167:13;:11;:13::i;:::-;44220:35:::1;44231:3;44236:4;44242:8;44220:35;;;;;;;;;;;::::0;:10:::1;:35::i;29483:406::-:0;-1:-1:-1;;;;;29691:20:0;;3859:10;29691:20;;:60;;-1:-1:-1;29715:36:0;29732:4;3859:10;29243:168;:::i;29715:36::-;29669:156;;;;-1:-1:-1;;;29669:156:0;;;;;;;:::i;:::-;29836:45;29854:4;29860:2;29864;29868:6;29876:4;29836:17;:45::i;6187:201::-;5167:13;:11;:13::i;:::-;-1:-1:-1;;;;;6276:22:0;::::1;6268:73;;;::::0;-1:-1:-1;;;6268:73:0;;13957:2:1;6268:73:0::1;::::0;::::1;13939:21:1::0;13996:2;13976:18;;;13969:30;14035:34;14015:18;;;14008:62;-1:-1:-1;;;14086:18:1;;;14079:36;14132:19;;6268:73:0::1;13755:402:1::0;6268:73:0::1;6352:28;6371:8;6352:18;:28::i;:::-;6187:201:::0;:::o;5446:132::-;5354:6;;-1:-1:-1;;;;;5354:6:0;3859:10;5510:23;5502:68;;;;-1:-1:-1;;;5502:68:0;;16816:2:1;5502:68:0;;;16798:21:1;;;16835:18;;;16828:30;16894:34;16874:18;;;16867:62;16946:18;;5502:68:0;16614:356:1;34664:729:0;-1:-1:-1;;;;;34817:16:0;;34809:62;;;;-1:-1:-1;;;34809:62:0;;;;;;;:::i;:::-;3859:10;34884:16;34949:21;34967:2;34949:17;:21::i;:::-;34926:44;;34981:24;35008:25;35026:6;35008:17;:25::i;:::-;34981:52;;35125:9;:13;;;;;;;;;;;-1:-1:-1;;;;;35125:17:0;;;;;;;;;:27;;35146:6;;35125:9;:27;;35146:6;;35125:27;:::i;:::-;;;;-1:-1:-1;;35168:52:0;;;19383:25:1;;;19439:2;19424:18;;19417:34;;;-1:-1:-1;;;;;35168:52:0;;;;35201:1;;35168:52;;;;;;19356:18:1;35168:52:0;;;;;;;35311:74;35342:8;35360:1;35364:2;35368;35372:6;35380:4;35311:30;:74::i;:::-;34798:595;;;34664:729;;;;:::o;32200:1146::-;32427:7;:14;32413:3;:10;:28;32405:81;;;;-1:-1:-1;;;32405:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32505:16:0;;32497:66;;;;-1:-1:-1;;;32497:66:0;;;;;;;:::i;:::-;3859:10;32576:16;32693:421;32717:3;:10;32713:1;:14;32693:421;;;32749:10;32762:3;32766:1;32762:6;;;;;;;;:::i;:::-;;;;;;;32749:19;;32783:14;32800:7;32808:1;32800:10;;;;;;;;:::i;:::-;;;;;;;;;;;;32827:19;32849:13;;;;;;;;;;-1:-1:-1;;;;;32849:19:0;;;;;;;;;;;;32800:10;;-1:-1:-1;32891:21:0;;;;32883:76;;;;-1:-1:-1;;;32883:76:0;;;;;;;:::i;:::-;33003:9;:13;;;;;;;;;;;-1:-1:-1;;;;;33003:19:0;;;;;;;;;;33025:20;;;33003:42;;33075:17;;;;;;;:27;;33025:20;;33003:9;33075:27;;33025:20;;33075:27;:::i;:::-;;;;;;;;32734:380;;;32729:3;;;;:::i;:::-;;;32693:421;;;;33161:2;-1:-1:-1;;;;;33131:47:0;33155:4;-1:-1:-1;;;;;33131:47:0;33145:8;-1:-1:-1;;;;;33131:47:0;;33165:3;33170:7;33131:47;;;;;;;:::i;:::-;;;;;;;;33263:75;33299:8;33309:4;33315:2;33319:3;33324:7;33333:4;33263:35;:75::i;:::-;32394:952;32200:1146;;;;;:::o;37965:969::-;-1:-1:-1;;;;;38117:18:0;;38109:66;;;;-1:-1:-1;;;38109:66:0;;;;;;;:::i;:::-;38208:7;:14;38194:3;:10;:28;38186:81;;;;-1:-1:-1;;;38186:81:0;;;;;;;:::i;:::-;38324:66;;;;;;;;;38280:16;38324:66;;;;3859:10;;38403:373;38427:3;:10;38423:1;:14;38403:373;;;38459:10;38472:3;38476:1;38472:6;;;;;;;;:::i;:::-;;;;;;;38459:19;;38493:14;38510:7;38518:1;38510:10;;;;;;;;:::i;:::-;;;;;;;;;;;;38537:19;38559:13;;;;;;;;;;-1:-1:-1;;;;;38559:19:0;;;;;;;;;;;;38510:10;;-1:-1:-1;38601:21:0;;;;38593:70;;;;-1:-1:-1;;;38593:70:0;;;;;;;:::i;:::-;38707:9;:13;;;;;;;;;;;-1:-1:-1;;;;;38707:19:0;;;;;;;;;;38729:20;;38707:42;;38439:3;;;;:::i;:::-;;;;38403:373;;;;38831:1;-1:-1:-1;;;;;38793:55:0;38817:4;-1:-1:-1;;;;;38793:55:0;38807:8;-1:-1:-1;;;;;38793:55:0;;38835:3;38840:7;38793:55;;;;;;;:::i;:::-;;;;;;;;38861:65;;;;;;;;;38905:1;38861:65;;38098:836;37965:969;;;:::o;35796:813::-;-1:-1:-1;;;;;35974:16:0;;35966:62;;;;-1:-1:-1;;;35966:62:0;;;;;;;:::i;:::-;36061:7;:14;36047:3;:10;:28;36039:81;;;;-1:-1:-1;;;36039:81:0;;;;;;;:::i;:::-;3859:10;36133:16;36256:103;36280:3;:10;36276:1;:14;36256:103;;;36337:7;36345:1;36337:10;;;;;;;;:::i;:::-;;;;;;;36312:9;:17;36322:3;36326:1;36322:6;;;;;;;;:::i;:::-;;;;;;;36312:17;;;;;;;;;;;:21;36330:2;-1:-1:-1;;;;;36312:21:0;-1:-1:-1;;;;;36312:21:0;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;36292:3:0;;-1:-1:-1;36292:3:0;;;:::i;:::-;;;;36256:103;;;;36412:2;-1:-1:-1;;;;;36376:53:0;36408:1;-1:-1:-1;;;;;36376:53:0;36390:8;-1:-1:-1;;;;;36376:53:0;;36416:3;36421:7;36376:53;;;;;;;:::i;:::-;;;;;;;;36520:81;36556:8;36574:1;36578:2;36582:3;36587:7;36596:4;36520:35;:81::i;6548:191::-;6641:6;;;-1:-1:-1;;;;;6658:17:0;;;-1:-1:-1;;;;;;6658:17:0;;;;;;;6691:40;;6641:6;;;6658:17;6641:6;;6691:40;;6622:16;;6691:40;6611:128;6548:191;:::o;39077:331::-;39232:8;-1:-1:-1;;;;;39223:17:0;:5;-1:-1:-1;;;;;39223:17:0;;;39215:71;;;;-1:-1:-1;;;39215:71:0;;17177:2:1;39215:71:0;;;17159:21:1;17216:2;17196:18;;;17189:30;17255:34;17235:18;;;17228:62;-1:-1:-1;;;17306:18:1;;;17299:39;17355:19;;39215:71:0;16975:405:1;39215:71:0;-1:-1:-1;;;;;39297:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;39297:46:0;;;;;;;;;;39359:41;;13070::1;;;39359::0;;13043:18:1;39359:41:0;;;;;;;39077:331;;;:::o;36907:808::-;-1:-1:-1;;;;;37034:18:0;;37026:66;;;;-1:-1:-1;;;37026:66:0;;;;;;;:::i;:::-;3859:10;37105:16;37170:21;37188:2;37170:17;:21::i;:::-;37147:44;;37202:24;37229:25;37247:6;37229:17;:25::i;:::-;37267:66;;;;;;;;;-1:-1:-1;37267:66:0;;;;37368:13;;;;;;;;;-1:-1:-1;;;;;37368:19:0;;;;;;;;37202:52;;-1:-1:-1;37406:21:0;;;;37398:70;;;;-1:-1:-1;;;37398:70:0;;;;;;;:::i;:::-;37504:9;:13;;;;;;;;;;;-1:-1:-1;;;;;37504:19:0;;;;;;;;;;;;37526:20;;;37504:42;;37575:54;;19383:25:1;;;19424:18;;;19417:34;;;37504:19:0;;37575:54;;;;;;19356:18:1;37575:54:0;;;;;;;37642:65;;;;;;;;;37686:1;37642:65;;;32200:1146;30868:974;-1:-1:-1;;;;;31056:16:0;;31048:66;;;;-1:-1:-1;;;31048:66:0;;;;;;;:::i;:::-;3859:10;31127:16;31192:21;31210:2;31192:17;:21::i;:::-;31169:44;;31224:24;31251:25;31269:6;31251:17;:25::i;:::-;31224:52;;31362:19;31384:13;;;;;;;;;;;-1:-1:-1;;;;;31384:19:0;;;;;;;;;;31422:21;;;;31414:76;;;;-1:-1:-1;;;31414:76:0;;;;;;;:::i;:::-;31526:9;:13;;;;;;;;;;;-1:-1:-1;;;;;31526:19:0;;;;;;;;;;31548:20;;;31526:42;;31590:17;;;;;;;:27;;31548:20;;31526:9;31590:27;;31548:20;;31590:27;:::i;:::-;;;;-1:-1:-1;;31635:46:0;;;19383:25:1;;;19439:2;19424:18;;19417:34;;;-1:-1:-1;;;;;31635:46:0;;;;;;;;;;;;;;19356:18:1;31635:46:0;;;;;;;31766:68;31797:8;31807:4;31813:2;31817;31821:6;31829:4;31766:30;:68::i;:::-;31037:805;;;;30868:974;;;;;:::o;43343:198::-;43463:16;;;43477:1;43463:16;;;;;;;;;43409;;43438:22;;43463:16;;;;;;;;;;;;-1:-1:-1;43463:16:0;43438:41;;43501:7;43490:5;43496:1;43490:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;43528:5;43343:198;-1:-1:-1;;43343:198:0:o;41770:744::-;-1:-1:-1;;;;;41985:13:0;;8327:19;:23;41981:526;;42021:72;;-1:-1:-1;;;42021:72:0;;-1:-1:-1;;;;;42021:38:0;;;;;:72;;42060:8;;42070:4;;42076:2;;42080:6;;42088:4;;42021:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42021:72:0;;;;;;;;-1:-1:-1;;42021:72:0;;;;;;;;;;;;:::i;:::-;;;42017:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;42369:6;42362:14;;-1:-1:-1;;;42362:14:0;;;;;;;;:::i;42017:479::-;;;42418:62;;-1:-1:-1;;;42418:62:0;;18808:2:1;42418:62:0;;;18790:21:1;18847:2;18827:18;;;18820:30;18886:34;18866:18;;;18859:62;-1:-1:-1;;;18937:18:1;;;18930:50;18997:19;;42418:62:0;18606:416:1;42017:479:0;-1:-1:-1;;;;;;42143:55:0;;-1:-1:-1;;;42143:55:0;42139:154;;42223:50;;-1:-1:-1;;;42223:50:0;;;;;;;:::i;42522:813::-;-1:-1:-1;;;;;42762:13:0;;8327:19;:23;42758:570;;42798:79;;-1:-1:-1;;;42798:79:0;;-1:-1:-1;;;;;42798:43:0;;;;;:79;;42842:8;;42852:4;;42858:3;;42863:7;;42872:4;;42798:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42798:79:0;;;;;;;;-1:-1:-1;;42798:79:0;;;;;;;;;;;;:::i;:::-;;;42794:523;;;;:::i;:::-;-1:-1:-1;;;;;;42959:60:0;;-1:-1:-1;;;42959:60:0;42955:159;;43044:50;;-1:-1:-1;;;43044: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:1123::-;4514:6;4522;4530;4538;4546;4599:3;4587:9;4578:7;4574:23;4570:33;4567:53;;;4616:1;4613;4606:12;4567:53;4639:29;4658:9;4639:29;:::i;:::-;4629:39;;4719:2;4708:9;4704:18;4691:32;4742:18;4783:2;4775:6;4772:14;4769:34;;;4799:1;4796;4789:12;4769:34;4822:61;4875:7;4866:6;4855:9;4851:22;4822:61;:::i;:::-;4812:71;;4936:2;4925:9;4921:18;4908:32;4892:48;;4965:2;4955:8;4952:16;4949:36;;;4981:1;4978;4971:12;4949:36;5004:63;5059:7;5048:8;5037:9;5033:24;5004:63;:::i;:::-;4994:73;;5120:2;5109:9;5105:18;5092:32;5076:48;;5149:2;5139:8;5136:16;5133:36;;;5165:1;5162;5155:12;5133:36;5188:63;5243:7;5232:8;5221:9;5217:24;5188:63;:::i;:::-;5178:73;;5304:3;5293:9;5289:19;5276:33;5260:49;;5334:2;5324:8;5321:16;5318:36;;;5350:1;5347;5340:12;5318:36;;5373:63;5428:7;5417:8;5406:9;5402:24;5373:63;:::i;5447:347::-;5512:6;5520;5573:2;5561:9;5552:7;5548:23;5544:32;5541:52;;;5589:1;5586;5579:12;5541:52;5612:29;5631:9;5612:29;:::i;:::-;5602:39;;5691:2;5680:9;5676:18;5663:32;5738:5;5731:13;5724:21;5717:5;5714:32;5704:60;;5760:1;5757;5750:12;5704:60;5783:5;5773:15;;;5447:347;;;;;:::o;5799:254::-;5867:6;5875;5928:2;5916:9;5907:7;5903:23;5899:32;5896:52;;;5944:1;5941;5934:12;5896:52;5967:29;5986:9;5967:29;:::i;:::-;5957:39;6043:2;6028:18;;;;6015:32;;-1:-1:-1;;;5799:254:1:o;6058:322::-;6135:6;6143;6151;6204:2;6192:9;6183:7;6179:23;6175:32;6172:52;;;6220:1;6217;6210:12;6172:52;6243:29;6262:9;6243:29;:::i;:::-;6233:39;6319:2;6304:18;;6291:32;;-1:-1:-1;6370:2:1;6355:18;;;6342:32;;6058:322;-1:-1:-1;;;6058:322:1:o;6385:1219::-;6503:6;6511;6564:2;6552:9;6543:7;6539:23;6535:32;6532:52;;;6580:1;6577;6570:12;6532:52;6620:9;6607:23;6649:18;6690:2;6682:6;6679:14;6676:34;;;6706:1;6703;6696:12;6676:34;6744:6;6733:9;6729:22;6719:32;;6789:7;6782:4;6778:2;6774:13;6770:27;6760:55;;6811:1;6808;6801:12;6760:55;6847:2;6834:16;6869:4;6892:43;6932:2;6892:43;:::i;:::-;6964:2;6958:9;6976:31;7004:2;6996:6;6976:31;:::i;:::-;7042:18;;;7076:15;;;;-1:-1:-1;7111:11:1;;;7153:1;7149:10;;;7141:19;;7137:28;;7134:41;-1:-1:-1;7131:61:1;;;7188:1;7185;7178:12;7131:61;7210:1;7201:10;;7220:169;7234:2;7231:1;7228:9;7220:169;;;7291:23;7310:3;7291:23;:::i;:::-;7279:36;;7252:1;7245:9;;;;;7335:12;;;;7367;;7220:169;;;-1:-1:-1;7408:6:1;-1:-1:-1;;7452:18:1;;7439:32;;-1:-1:-1;;7483:16:1;;;7480:36;;;7512:1;7509;7502:12;7480:36;;7535:63;7590:7;7579:8;7568:9;7564:24;7535:63;:::i;:::-;7525:73;;;6385:1219;;;;;:::o;7609:595::-;7727:6;7735;7788:2;7776:9;7767:7;7763:23;7759:32;7756:52;;;7804:1;7801;7794:12;7756:52;7844:9;7831:23;7873:18;7914:2;7906:6;7903:14;7900:34;;;7930:1;7927;7920:12;7900:34;7953:61;8006:7;7997:6;7986:9;7982:22;7953:61;:::i;:::-;7943:71;;8067:2;8056:9;8052:18;8039:32;8023:48;;8096:2;8086:8;8083:16;8080:36;;;8112:1;8109;8102:12;8209:245;8267:6;8320:2;8308:9;8299:7;8295:23;8291:32;8288:52;;;8336:1;8333;8326:12;8288:52;8375:9;8362:23;8394:30;8418:5;8394:30;:::i;8459:249::-;8528:6;8581:2;8569:9;8560:7;8556:23;8552:32;8549:52;;;8597:1;8594;8587:12;8549:52;8629:9;8623:16;8648:30;8672:5;8648:30;:::i;8713:180::-;8772:6;8825:2;8813:9;8804:7;8800:23;8796:32;8793:52;;;8841:1;8838;8831:12;8793:52;-1:-1:-1;8864:23:1;;8713:180;-1:-1:-1;8713:180:1:o;8898:518::-;8976:6;8984;9037:2;9025:9;9016:7;9012:23;9008:32;9005:52;;;9053:1;9050;9043:12;9005:52;9089:9;9076:23;9066:33;;9150:2;9139:9;9135:18;9122:32;9177:18;9169:6;9166:30;9163:50;;;9209:1;9206;9199:12;9163:50;9232:22;;9285:4;9277:13;;9273:27;-1:-1:-1;9263:55:1;;9314:1;9311;9304:12;9263:55;9337:73;9402:7;9397:2;9384:16;9379:2;9375;9371:11;9337:73;:::i;9421:248::-;9489:6;9497;9550:2;9538:9;9529:7;9525:23;9521:32;9518:52;;;9566:1;9563;9556:12;9518:52;-1:-1:-1;;9589:23:1;;;9659:2;9644:18;;;9631:32;;-1:-1:-1;9421:248:1:o;9674:435::-;9727:3;9765:5;9759:12;9792:6;9787:3;9780:19;9818:4;9847:2;9842:3;9838:12;9831:19;;9884:2;9877:5;9873:14;9905:1;9915:169;9929:6;9926:1;9923:13;9915:169;;;9990:13;;9978:26;;10024:12;;;;10059:15;;;;9951:1;9944:9;9915:169;;;-1:-1:-1;10100:3:1;;9674:435;-1:-1:-1;;;;;9674:435:1:o;10114:471::-;10155:3;10193:5;10187:12;10220:6;10215:3;10208:19;10245:1;10255:162;10269:6;10266:1;10263:13;10255:162;;;10331:4;10387:13;;;10383:22;;10377:29;10359:11;;;10355:20;;10348:59;10284:12;10255:162;;;10435:6;10432:1;10429:13;10426:87;;;10501:1;10494:4;10485:6;10480:3;10476:16;10472:27;10465:38;10426:87;-1:-1:-1;10567:2:1;10546:15;-1:-1:-1;;10542:29:1;10533:39;;;;10574:4;10529:50;;10114:471;-1:-1:-1;;10114:471:1:o;10798:826::-;-1:-1:-1;;;;;11195:15:1;;;11177:34;;11247:15;;11242:2;11227:18;;11220:43;11157:3;11294:2;11279:18;;11272:31;;;11120:4;;11326:57;;11363:19;;11355:6;11326:57;:::i;:::-;11431:9;11423:6;11419:22;11414:2;11403:9;11399:18;11392:50;11465:44;11502:6;11494;11465:44;:::i;:::-;11451:58;;11558:9;11550:6;11546:22;11540:3;11529:9;11525:19;11518:51;11586:32;11611:6;11603;11586:32;:::i;:::-;11578:40;10798:826;-1:-1:-1;;;;;;;;10798:826:1:o;11629:560::-;-1:-1:-1;;;;;11926:15:1;;;11908:34;;11978:15;;11973:2;11958:18;;11951:43;12025:2;12010:18;;12003:34;;;12068:2;12053:18;;12046:34;;;11888:3;12111;12096:19;;12089:32;;;11851:4;;12138:45;;12163:19;;12155:6;12138:45;:::i;:::-;12130:53;11629:560;-1:-1:-1;;;;;;;11629:560:1:o;12194:261::-;12373:2;12362:9;12355:21;12336:4;12393:56;12445:2;12434:9;12430:18;12422:6;12393:56;:::i;12460:465::-;12717:2;12706:9;12699:21;12680:4;12743:56;12795:2;12784:9;12780:18;12772:6;12743:56;:::i;:::-;12847:9;12839:6;12835:22;12830:2;12819:9;12815:18;12808:50;12875:44;12912:6;12904;12875:44;:::i;:::-;12867:52;12460:465;-1:-1:-1;;;;;12460:465:1:o;13122:219::-;13271:2;13260:9;13253:21;13234:4;13291:44;13331:2;13320:9;13316:18;13308:6;13291:44;:::i;13346:404::-;13548:2;13530:21;;;13587:2;13567:18;;;13560:30;13626:34;13621:2;13606:18;;13599:62;-1:-1:-1;;;13692:2:1;13677:18;;13670:38;13740:3;13725:19;;13346:404::o;14162:400::-;14364:2;14346:21;;;14403:2;14383:18;;;14376:30;14442:34;14437:2;14422:18;;14415:62;-1:-1:-1;;;14508:2:1;14493:18;;14486:34;14552:3;14537:19;;14162:400::o;14978:410::-;15180:2;15162:21;;;15219:2;15199:18;;;15192:30;15258:34;15253:2;15238:18;;15231:62;-1:-1:-1;;;15324:2:1;15309:18;;15302:44;15378:3;15363:19;;14978:410::o;15393:401::-;15595:2;15577:21;;;15634:2;15614:18;;;15607:30;15673:34;15668:2;15653:18;;15646:62;-1:-1:-1;;;15739:2:1;15724:18;;15717:35;15784:3;15769:19;;15393:401::o;15799:399::-;16001:2;15983:21;;;16040:2;16020:18;;;16013:30;16079:34;16074:2;16059:18;;16052:62;-1:-1:-1;;;16145:2:1;16130:18;;16123:33;16188:3;16173:19;;15799:399::o;16203:406::-;16405:2;16387:21;;;16444:2;16424:18;;;16417:30;16483:34;16478:2;16463:18;;16456:62;-1:-1:-1;;;16549:2:1;16534:18;;16527:40;16599:3;16584:19;;16203:406::o;17795:404::-;17997:2;17979:21;;;18036:2;18016:18;;;18009:30;18075:34;18070:2;18055:18;;18048:62;-1:-1:-1;;;18141:2:1;18126:18;;18119:38;18189:3;18174:19;;17795:404::o;18204:397::-;18406:2;18388:21;;;18445:2;18425:18;;;18418:30;18484:34;18479:2;18464:18;;18457:62;-1:-1:-1;;;18550:2:1;18535:18;;18528:31;18591:3;18576:19;;18204:397::o;19462:183::-;19522:4;19555:18;19547:6;19544:30;19541:56;;;19577:18;;:::i;:::-;-1:-1:-1;19622:1:1;19618:14;19634:4;19614:25;;19462:183::o;19650:128::-;19690:3;19721:1;19717:6;19714:1;19711:13;19708:39;;;19727:18;;:::i;:::-;-1:-1:-1;19763:9:1;;19650:128::o;19783:380::-;19862:1;19858:12;;;;19905;;;19926:61;;19980:4;19972:6;19968:17;19958:27;;19926:61;20033:2;20025:6;20022:14;20002:18;19999:38;19996:161;;;20079:10;20074:3;20070:20;20067:1;20060:31;20114:4;20111:1;20104:15;20142:4;20139:1;20132:15;19996:161;;19783:380;;;:::o;20168:249::-;20278:2;20259:13;;-1:-1:-1;;20255:27:1;20243:40;;20313:18;20298:34;;20334:22;;;20295:62;20292:88;;;20360:18;;:::i;:::-;20396:2;20389:22;-1:-1:-1;;20168:249:1:o;20422:135::-;20461:3;-1:-1:-1;;20482:17:1;;20479:43;;;20502:18;;:::i;:::-;-1:-1:-1;20549:1:1;20538:13;;20422:135::o;20562:127::-;20623:10;20618:3;20614:20;20611:1;20604:31;20654:4;20651:1;20644:15;20678:4;20675:1;20668:15;20694:127;20755:10;20750:3;20746:20;20743:1;20736:31;20786:4;20783:1;20776:15;20810:4;20807:1;20800:15;20826:127;20887:10;20882:3;20878:20;20875:1;20868:31;20918:4;20915:1;20908:15;20942:4;20939:1;20932:15;20958:179;20993:3;21035:1;21017:16;21014:23;21011:120;;;21081:1;21078;21075;21060:23;-1:-1:-1;21118:1:1;21112:8;21107:3;21103:18;21011:120;20958:179;:::o;21142:671::-;21181:3;21223:4;21205:16;21202:26;21199:39;;;21142:671;:::o;21199:39::-;21265:2;21259:9;-1:-1:-1;;21330:16:1;21326:25;;21323:1;21259:9;21302:50;21381:4;21375:11;21405:16;21440:18;21511:2;21504:4;21496:6;21492:17;21489:25;21484:2;21476:6;21473:14;21470:45;21467:58;;;21518:5;;;;;21142:671;:::o;21467:58::-;21555:6;21549:4;21545:17;21534:28;;21591:3;21585:10;21618:2;21610:6;21607:14;21604:27;;;21624:5;;;;;;21142:671;:::o;21604:27::-;21708:2;21689:16;21683:4;21679:27;21675:36;21668:4;21659:6;21654:3;21650:16;21646:27;21643:69;21640:82;;;21715:5;;;;;;21142:671;:::o;21640:82::-;21731:57;21782:4;21773:6;21765;21761:19;21757:30;21751:4;21731:57;:::i;:::-;-1:-1:-1;21804:3:1;;21142:671;-1:-1:-1;;;;;21142:671:1:o;21818:131::-;-1:-1:-1;;;;;;21892:32:1;;21882:43;;21872:71;;21939:1;21936;21929:12
Swarm Source
ipfs://23b873939b5e17de94b726b4978363ab4bbc3829bff0ba282c516db8bd4889e7
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.