Feature Tip: Add private address tag to any address under My Name Tag !
ERC-1155
Overview
Max Total Supply
101,957
Holders
38
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Music
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-20 */ /** *Submitted for verification at Etherscan.io on 2022-08-19 */ /** *Submitted for verification at Etherscan.io on 2022-08-18 */ /** *Submitted for verification at Etherscan.io on 2022-08-05 */ // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/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 functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts (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: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/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 public _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 nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); 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: @openzeppelin/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: music.sol pragma solidity ^0.8.0; contract Music is ERC1155,Ownable{ using Strings for uint256; uint256 max_num; uint256 _total; uint256 _ask_total; uint256 public _brokerage; uint256 public _royalty; mapping(uint256 => Musics) public _token2create; mapping(uint256 => Ask) public _id2ask; mapping(string => uint256) public user_sell; mapping(address => uint256) public user_balance; struct Ask { uint256 id; uint256 token_id; uint256 num; uint256 price; uint256 end_time; bool is_set; address seller; } struct Musics { address creater; string name; string author; } event createAsks( uint256 indexed id, uint256 indexed token_id, uint256 num, uint256 price, address seller, uint256 end_time ); event upAsks( uint256 indexed id, uint256 price ); event upAsksTime( uint256 indexed id, uint256 end_time ); event orderAsks( uint256 indexed id, uint256 indexed token_id, uint256 price, uint256 num, address buyer ); event canceleAsks( uint256 indexed id, address indexed seller ); constructor() ERC1155("https://muverse.info/game/") { _brokerage = 2; _royalty = 8; max_num = 100; _ask_total = 0; } function mint( uint256 amount, string memory _name, string memory _author ) external { require( amount <= max_num, " num must < max_num" ); _token2create[_total] = Musics({ creater:msg.sender, name:_name, author:_author }); _mint(msg.sender, _total, amount, ''); _total++; } function setURI(string memory newuri) public onlyOwner { _setURI(newuri); } function createUserOf(uint256 id) public view returns (address) { return _token2create[id].creater; } function userWithdraw() external { require(user_balance[msg.sender] > 0 ,"your balance must > 0"); require( address(this).balance >= user_balance[msg.sender] , "Balance must be positive"); (bool success, ) = msg.sender.call{value: user_balance[msg.sender]}(""); require(success == true); user_balance[msg.sender] = 0; } function setMaxNum(uint256 _num) public onlyOwner { max_num = _num; } function setBrokerage(uint256 _num) public onlyOwner { require(_num <100,"_num must < 100"); require( (_num + _royalty) < 100 , ""); _brokerage = _num; } function setRoyalty(uint256 _num) public onlyOwner { require(_num <100,"_num must < 100"); require(_num+_brokerage <100,""); _royalty = _num; } function withdraw(uint256 _balance) external onlyOwner { require(_balance <= address(this).balance,"_balance must < owners"); address payable _owner = payable(owner()); _owner.transfer(_balance); } function createAsk( uint256 token_id, uint256 price, uint256 num, uint256 end_time ) external { require( num > 0, " num must > 0" ); require( balanceOf(msg.sender,token_id) >= (num+user_sell[string(abi.encodePacked(msg.sender, token_id.toString()))]), "token_id num is engouh" ); require(price > 1000, "price too low"); if(end_time > 0){ require(end_time > block.timestamp, "end_time is must > now"); }else{ end_time = 0; } _id2ask[_ask_total] = Ask({ id: _ask_total, token_id: token_id, num: num, price: price, end_time: end_time, seller: msg.sender, is_set : true }); user_sell[string(abi.encodePacked(msg.sender, token_id.toString()))] = user_sell[string(abi.encodePacked(msg.sender, token_id.toString()))] +num; emit createAsks({ id : _ask_total, token_id: token_id, num: num, price: price, seller: msg.sender, end_time:end_time }); _ask_total ++; } function cancelAsk(uint256 sell_id) external { require(_id2ask[sell_id].seller == msg.sender, "is not you"); require(_id2ask[sell_id].is_set == true, "is used"); user_sell[string(abi.encodePacked(msg.sender, _id2ask[sell_id].token_id.toString()))] = user_sell[string(abi.encodePacked(msg.sender, _id2ask[sell_id].token_id.toString()))] - _id2ask[sell_id].num; delete _id2ask[sell_id]; emit canceleAsks({id: sell_id, seller: msg.sender}); } function upAsk(uint256 sell_id,uint256 price) external { require(_id2ask[sell_id].seller == msg.sender, "is not you"); require(_id2ask[sell_id].is_set == true, "is used"); require( balanceOf(msg.sender,_id2ask[sell_id].token_id) >= _id2ask[sell_id].num, "token_id num is engouh" ); require(price > 1000, "price too low"); _id2ask[sell_id].price = price; emit upAsks({id: sell_id,price :price}); } function upAskTime(uint256 sell_id,uint256 end_time) external { require(_id2ask[sell_id].seller == msg.sender, "is not you"); require(_id2ask[sell_id].is_set == true, "is used"); require( balanceOf(msg.sender,_id2ask[sell_id].token_id) >= _id2ask[sell_id].num, "token_id num is not engouh" ); if(end_time > 0){ require(end_time > block.timestamp, "end_time is must > now"); }else{ end_time = 0; } _id2ask[sell_id].end_time = end_time; emit upAsksTime({id: sell_id,end_time :end_time}); } function orderAsk(uint256 sell_id,uint256 buy_num) external payable { require(_id2ask[sell_id].is_set, "is selled"); require( buy_num <= _id2ask[sell_id].num, "token_id num is not engouh" ); require( balanceOf(_id2ask[sell_id].seller,_id2ask[sell_id].token_id) >= buy_num, "token_id num is not engouh" ); uint256 sell_price = _id2ask[sell_id].price * buy_num; require( msg.value >= sell_price, "price not enghou"); if(_id2ask[sell_id].end_time > 0){ require(_id2ask[sell_id].end_time >= block.timestamp, "order is over "); } _id2ask[sell_id].num = _id2ask[sell_id].num - buy_num; if(_id2ask[sell_id].num < 1){ _id2ask[sell_id].is_set = false; } _safeTransferFrom(_id2ask[sell_id].seller,msg.sender,_id2ask[sell_id].token_id,buy_num,''); user_sell[string(abi.encodePacked(_id2ask[sell_id].seller,_id2ask[sell_id].token_id.toString()))] = user_sell[string(abi.encodePacked(_id2ask[sell_id].seller,_id2ask[sell_id].token_id.toString()))] - buy_num; uint256 owner_price = sell_price*(100 - _brokerage - _royalty)/100; uint256 create_price = sell_price*_royalty/100; address seller = payable(_id2ask[sell_id].seller); (bool sel_is, ) = seller.call{value: owner_price}(""); require(sel_is, "failed"); /* address creater = payable( _token2create[_id2ask[sell_id].token_id].creater); (bool cre_is, ) = creater.call{value: create_price}(""); require(cre_is, "failed"); */ user_balance[_token2create[_id2ask[sell_id].token_id].creater] = user_balance[_token2create[_id2ask[sell_id].token_id].creater]+create_price; emit orderAsks({id: sell_id,token_id :_id2ask[sell_id].token_id,price:sell_price,num:buy_num,buyer:msg.sender}); } function getUserNft(address _adr) public view returns (uint256[] memory, uint256[] memory) { uint256 j = 0; uint256 l = 0; uint256 is_num = 0; for(uint256 i=0;i<_total;i++){ if(balanceOf(_adr,i)>0){ j++; } } if(j > 0){ uint256[] memory tokenIds = new uint256[](j); uint256[] memory nums = new uint256[](j); for(uint256 t=0;t<_total;t++){ is_num = balanceOf(_adr,t); if(is_num>0){ tokenIds[l] = t; nums[l] = is_num; l++; } if(l == j){ break; } } return (tokenIds,nums); }else{ return (new uint256[](0),new uint256[](0)); } } function getOrderList() public view returns (uint256[] memory, uint256[] memory,uint256[] memory,uint256[] memory,uint256[] memory,address[] memory) { uint256 j = 0; uint256 l = 0; for(uint256 i=0;i<=_ask_total;i++){ if(_id2ask[i].is_set){ j++; } } if(j > 0){ uint256[] memory order_id = new uint256[](j); uint256[] memory token_id = new uint256[](j); uint256[] memory nums = new uint256[](j); uint256[] memory price = new uint256[](j); uint256[] memory times = new uint256[](j); address[] memory sellers = new address[](j); for(uint256 t=0;t<_total;t++){ if(_id2ask[t].is_set){ order_id[l] = t; token_id[l] = _id2ask[t].token_id; nums[l] = _id2ask[t].num; price[l] =_id2ask[t].price; times[l] = _id2ask[t].end_time; sellers[l] = _id2ask[t].seller; } if(l == j){ break; } } return (order_id,token_id,nums,price,times,sellers); }else{ return (new uint256[](0),new uint256[](0),new uint256[](0),new uint256[](0),new uint256[](0),new address[](0)); } } function gift(uint256 my_token_id,uint256 num,address friend) public{ require( num > 0, " num must > 0" ); require( balanceOf(msg.sender,my_token_id) >= num, "token_id num is not engouh" ); _safeTransferFrom(msg.sender,friend,my_token_id,num,''); } function uri(uint256 tokenId) public view virtual override returns (string memory) { return string( abi.encodePacked(_uri, tokenId.toString()) ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"address","name":"seller","type":"address"}],"name":"canceleAsks","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"token_id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"num","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"end_time","type":"uint256"}],"name":"createAsks","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"token_id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"num","type":"uint256"},{"indexed":false,"internalType":"address","name":"buyer","type":"address"}],"name":"orderAsks","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"upAsks","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"end_time","type":"uint256"}],"name":"upAsksTime","type":"event"},{"inputs":[],"name":"_brokerage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_id2ask","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"token_id","type":"uint256"},{"internalType":"uint256","name":"num","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"end_time","type":"uint256"},{"internalType":"bool","name":"is_set","type":"bool"},{"internalType":"address","name":"seller","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_royalty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_token2create","outputs":[{"internalType":"address","name":"creater","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"author","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"sell_id","type":"uint256"}],"name":"cancelAsk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"token_id","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"num","type":"uint256"},{"internalType":"uint256","name":"end_time","type":"uint256"}],"name":"createAsk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"createUserOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOrderList","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_adr","type":"address"}],"name":"getUserNft","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"my_token_id","type":"uint256"},{"internalType":"uint256","name":"num","type":"uint256"},{"internalType":"address","name":"friend","type":"address"}],"name":"gift","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":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_author","type":"string"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sell_id","type":"uint256"},{"internalType":"uint256","name":"buy_num","type":"uint256"}],"name":"orderAsk","outputs":[],"stateMutability":"payable","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":"uint256","name":"_num","type":"uint256"}],"name":"setBrokerage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_num","type":"uint256"}],"name":"setMaxNum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_num","type":"uint256"}],"name":"setRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sell_id","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"upAsk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sell_id","type":"uint256"},{"internalType":"uint256","name":"end_time","type":"uint256"}],"name":"upAskTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"userWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"user_balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"user_sell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_balance","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060408051808201909152601a81527f68747470733a2f2f6d7576657273652e696e666f2f67616d652f0000000000006020820152620000518162000076565b506200005d336200008f565b60026007556008805560646004556000600655620001c4565b80516200008b906002906020840190620000e1565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620000ef9062000187565b90600052602060002090601f0160209004810192826200011357600085556200015e565b82601f106200012e57805160ff19168380011785556200015e565b828001600101855582156200015e579182015b828111156200015e57825182559160200191906001019062000141565b506200016c92915062000170565b5090565b5b808211156200016c576000815560010162000171565b600181811c908216806200019c57607f821691505b60208210811415620001be57634e487b7160e01b600052602260045260246000fd5b50919050565b61398680620001d46000396000f3fe6080604052600436106101f85760003560e01c806362624ae91161010d578063c260804c116100a0578063d0fe19bf1161006f578063d0fe19bf14610669578063e985e9c51461069f578063f242432a146106e8578063f2fde38b14610708578063ffeb1c631461072857600080fd5b8063c260804c14610600578063c3de3b1214610620578063cb4c32d814610633578063cc1284231461064957600080fd5b80638da5cb5b116100dc5780638da5cb5b1461056c5780639c8a9d301461059e578063a22cb465146105cb578063a646f9ad146105eb57600080fd5b806362624ae91461044e578063715018a614610486578063837c18eb1461049b5780638a580378146104c957600080fd5b8063163dd8bb116101905780632eb2c2d61161015f5780632eb2c2d6146103ab5780633b66b00a146103cb5780634209a2e1146103e15780634e1273f4146104015780635198cf861461042e57600080fd5b8063163dd8bb14610324578063187958331461034b5780632825df7b1461036b5780632e1a7d4d1461038b57600080fd5b80630dccc9ad116101cc5780630dccc9ad146102a25780630e89341c146102c4578063131e5046146102e45780631628e0f51461030457600080fd5b8062fdd58e146101fd57806301ffc9a71461023057806302e5329e1461026057806302fe530514610282575b600080fd5b34801561020957600080fd5b5061021d610218366004612f7d565b610757565b6040519081526020015b60405180910390f35b34801561023c57600080fd5b5061025061024b366004613077565b6107ed565b6040519015158152602001610227565b34801561026c57600080fd5b5061028061027b3660046130e5565b61083f565b005b34801561028e57600080fd5b5061028061029d3660046130b1565b61084c565b3480156102ae57600080fd5b506102b7610860565b604051610227919061353d565b3480156102d057600080fd5b506102b76102df3660046130e5565b6108ee565b3480156102f057600080fd5b506102806102ff3660046130e5565b610922565b34801561031057600080fd5b5061028061031f3660046130e5565b6109a8565b34801561033057600080fd5b50610339610b4d565b6040516102279695949392919061348c565b34801561035757600080fd5b506102806103663660046131c1565b610f45565b34801561037757600080fd5b506102806103863660046130fe565b611268565b34801561039757600080fd5b506102806103a63660046130e5565b611365565b3480156103b757600080fd5b506102806103c6366004612e34565b611408565b3480156103d757600080fd5b5061021d60085481565b3480156103ed57600080fd5b506102806103fc3660046130e5565b611454565b34801561040d57600080fd5b5061042161041c366004612fa7565b6114da565b6040516102279190613454565b34801561043a57600080fd5b5061028061044936600461316a565b611603565b34801561045a57600080fd5b5061021d6104693660046130b1565b8051602081830181018051600b8252928201919093012091525481565b34801561049257600080fd5b50610280611777565b3480156104a757600080fd5b506104bb6104b6366004612ddf565b61178b565b604051610227929190613467565b3480156104d557600080fd5b5061052c6104e43660046130e5565b600a60205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909160ff81169061010090046001600160a01b031687565b6040805197885260208801969096529486019390935260608501919091526080840152151560a08301526001600160a01b031660c082015260e001610227565b34801561057857600080fd5b506003546001600160a01b03165b6040516001600160a01b039091168152602001610227565b3480156105aa57600080fd5b5061021d6105b9366004612ddf565b600c6020526000908152604090205481565b3480156105d757600080fd5b506102806105e6366004612f41565b61191d565b3480156105f757600080fd5b5061028061192c565b34801561060c57600080fd5b5061028061061b36600461318c565b611a59565b61028061062e36600461316a565b611ade565b34801561063f57600080fd5b5061021d60075481565b34801561065557600080fd5b5061028061066436600461316a565b611fb3565b34801561067557600080fd5b506105866106843660046130e5565b6000908152600960205260409020546001600160a01b031690565b3480156106ab57600080fd5b506102506106ba366004612e01565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b3480156106f457600080fd5b50610280610703366004612edd565b612108565b34801561071457600080fd5b50610280610723366004612ddf565b61214d565b34801561073457600080fd5b506107486107433660046130e5565b6121c3565b60405161022793929190613414565b60006001600160a01b0383166107c75760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061081e57506001600160e01b031982166303a24d0760e21b145b8061083957506301ffc9a760e01b6001600160e01b03198316145b92915050565b610847612300565b600455565b610854612300565b61085d8161235a565b50565b6002805461086d906137a7565b80601f0160208091040260200160405190810160405280929190818152602001828054610899906137a7565b80156108e65780601f106108bb576101008083540402835291602001916108e6565b820191906000526020600020905b8154815290600101906020018083116108c957829003601f168201915b505050505081565b606060026108fb8361236d565b60405160200161090c9291906132ca565b6040516020818303038152906040529050919050565b61092a612300565b6064811061096c5760405162461bcd60e51b815260206004820152600f60248201526e05f6e756d206d757374203c2031303608c1b60448201526064016107be565b60646008548261097c9190613715565b106109a35760405162461bcd60e51b815260206004820152600060248201526044016107be565b600755565b6000818152600a602052604090206005015461010090046001600160a01b031633146109e65760405162461bcd60e51b81526004016107be906136ce565b6000818152600a602052604090206005015460ff161515600114610a1c5760405162461bcd60e51b81526004016107be906136ad565b6000818152600a602052604090206002810154600190910154600b903390610a439061236d565b604051602001610a54929190613276565b60408051601f1981840301815290829052610a6e916132ae565b908152602001604051809103902054610a879190613760565b6000828152600a6020526040902060010154600b903390610aa79061236d565b604051602001610ab8929190613276565b60408051601f1981840301815290829052610ad2916132ae565b9081526040805160209281900383018120939093556000848152600a90925281208181556001810182905560028101829055600381018290556004810182905560050180546001600160a81b0319169055339183917f1218f3cb1d0d9f0fa16edd3d92a08e141c46d98b93fced41a8a97479a5a6663c91a350565b60608060608060608060008060005b6006548111610b9f576000818152600a602052604090206005015460ff1615610b8d5782610b898161380e565b9350505b80610b978161380e565b915050610b5c565b508115610ef8576000826001600160401b03811115610bc057610bc061387f565b604051908082528060200260200182016040528015610be9578160200160208202803683370190505b5090506000836001600160401b03811115610c0657610c0661387f565b604051908082528060200260200182016040528015610c2f578160200160208202803683370190505b5090506000846001600160401b03811115610c4c57610c4c61387f565b604051908082528060200260200182016040528015610c75578160200160208202803683370190505b5090506000856001600160401b03811115610c9257610c9261387f565b604051908082528060200260200182016040528015610cbb578160200160208202803683370190505b5090506000866001600160401b03811115610cd857610cd861387f565b604051908082528060200260200182016040528015610d01578160200160208202803683370190505b5090506000876001600160401b03811115610d1e57610d1e61387f565b604051908082528060200260200182016040528015610d47578160200160208202803683370190505b50905060005b600554811015610ee0576000818152600a602052604090206005015460ff1615610ec15780878981518110610d8457610d84613869565b602002602001018181525050600a600082815260200190815260200160002060010154868981518110610db957610db9613869565b602002602001018181525050600a600082815260200190815260200160002060020154858981518110610dee57610dee613869565b602002602001018181525050600a600082815260200190815260200160002060030154848981518110610e2357610e23613869565b602002602001018181525050600a600082815260200190815260200160002060040154838981518110610e5857610e58613869565b602002602001018181525050600a600082815260200190815260200160002060050160019054906101000a90046001600160a01b0316828981518110610ea057610ea0613869565b60200260200101906001600160a01b031690816001600160a01b0316815250505b88881415610ece57610ee0565b80610ed88161380e565b915050610d4d565b50949c50929a50909850965094509250610f3d915050565b505060408051600080825260208201818152828401828152606084018381526080850184815260a0860194855260c08601909652939a50909850965090945090925090505b909192939495565b60008211610f855760405162461bcd60e51b815260206004820152600d60248201526c0206e756d206d757374203e203609c1b60448201526064016107be565b600b33610f918661236d565b604051602001610fa2929190613276565b60408051601f1981840301815290829052610fbc916132ae565b90815260200160405180910390205482610fd69190613715565b610fe03386610757565b10156110275760405162461bcd60e51b81526020600482015260166024820152750e8ded6cadcbed2c840dceada40d2e640cadccedeead60531b60448201526064016107be565b6103e883116110685760405162461bcd60e51b815260206004820152600d60248201526c707269636520746f6f206c6f7760981b60448201526064016107be565b80156110bb574281116110b65760405162461bcd60e51b8152602060048201526016602482015275656e645f74696d65206973206d757374203e206e6f7760501b60448201526064016107be565b6110bf565b5060005b6040805160e08101825260065480825260208083018881528385018781526060850189815260808601888152600160a088018181523360c08a018181526000998a52600a90985299909720975188559351938701939093559051600286015551600385015551600484015590516005909201805491516001600160a81b0319909216921515610100600160a81b031916929092176101006001600160a01b03909216919091021790558290600b906111768761236d565b604051602001611187929190613276565b60408051601f19818403018152908290526111a1916132ae565b9081526020016040518091039020546111ba9190613715565b600b336111c68761236d565b6040516020016111d7929190613276565b60408051601f19818403018152908290526111f1916132ae565b90815260408051602092819003830181209390935560065485845291830186905233908301526060820183905285917ff7b1e6c167a9bc203409829ddbbc2f2b9919d565436a63e79c08e817a9816f209060800160405180910390a36006805490600061125d8361380e565b919050555050505050565b6004548311156112b05760405162461bcd60e51b8152602060048201526013602482015272206e756d206d757374203c206d61785f6e756d60681b60448201526064016107be565b60408051606081018252338152602080820185815282840185905260055460009081526009835293909320825181546001600160a01b0319166001600160a01b039091161781559251805192939261130e9260018501920190612c40565b506040820151805161132a916002840191602090910190612c40565b5090505061134b336005548560405180602001604052806000815250612472565b6005805490600061135b8361380e565b9190505550505050565b61136d612300565b478111156113b65760405162461bcd60e51b81526020600482015260166024820152755f62616c616e6365206d757374203c206f776e65727360501b60448201526064016107be565b60006113ca6003546001600160a01b031690565b6040519091506001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611403573d6000803e3d6000fd5b505050565b6001600160a01b038516331480611424575061142485336106ba565b6114405760405162461bcd60e51b81526004016107be90613550565b61144d8585858585612586565b5050505050565b61145c612300565b6064811061149e5760405162461bcd60e51b815260206004820152600f60248201526e05f6e756d206d757374203c2031303608c1b60448201526064016107be565b6064600754826114ae9190613715565b106114d55760405162461bcd60e51b815260206004820152600060248201526044016107be565b600855565b6060815183511461153f5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016107be565b600083516001600160401b0381111561155a5761155a61387f565b604051908082528060200260200182016040528015611583578160200160208202803683370190505b50905060005b84518110156115fb576115ce8582815181106115a7576115a7613869565b60200260200101518583815181106115c1576115c1613869565b6020026020010151610757565b8282815181106115e0576115e0613869565b60209081029190910101526115f48161380e565b9050611589565b509392505050565b6000828152600a602052604090206005015461010090046001600160a01b031633146116415760405162461bcd60e51b81526004016107be906136ce565b6000828152600a602052604090206005015460ff1615156001146116775760405162461bcd60e51b81526004016107be906136ad565b6000828152600a60205260409020600281015460019091015461169b903390610757565b10156116e25760405162461bcd60e51b81526020600482015260166024820152750e8ded6cadcbed2c840dceada40d2e640cadccedeead60531b60448201526064016107be565b6103e881116117235760405162461bcd60e51b815260206004820152600d60248201526c707269636520746f6f206c6f7760981b60448201526064016107be565b6000828152600a6020526040908190206003018290555182907f56d448a31039ed8b2c91a20a29c04350e1dd7918b0e0f1da02fb9c8c20f3123d9061176b9084815260200190565b60405180910390a25050565b61177f612300565b6117896000612763565b565b6060806000806000805b6005548110156117d15760006117ab8883610757565b11156117bf57836117bb8161380e565b9450505b806117c98161380e565b915050611795565b5082156118fb576000836001600160401b038111156117f2576117f261387f565b60405190808252806020026020018201604052801561181b578160200160208202803683370190505b5090506000846001600160401b038111156118385761183861387f565b604051908082528060200260200182016040528015611861578160200160208202803683370190505b50905060005b6005548110156118ed5761187b8982610757565b935083156118ce578083868151811061189657611896613869565b602002602001018181525050838286815181106118b5576118b5613869565b6020908102919091010152846118ca8161380e565b9550505b858514156118db576118ed565b806118e58161380e565b915050611867565b509097909650945050505050565b5050604080516000808252602082019081528183019092529590945092505050565b6119283383836127b5565b5050565b336000908152600c60205260409020546119805760405162461bcd60e51b81526020600482015260156024820152740796f75722062616c616e6365206d757374203e203605c1b60448201526064016107be565b336000908152600c60205260409020544710156119df5760405162461bcd60e51b815260206004820152601860248201527f42616c616e6365206d75737420626520706f736974697665000000000000000060448201526064016107be565b336000818152600c60205260408082205490519192918381818185875af1925050503d8060008114611a2d576040519150601f19603f3d011682016040523d82523d6000602084013e611a32565b606091505b5090915050600181151514611a4657600080fd5b50336000908152600c6020526040812055565b60008211611a995760405162461bcd60e51b815260206004820152600d60248201526c0206e756d206d757374203e203609c1b60448201526064016107be565b81611aa43385610757565b1015611ac25760405162461bcd60e51b81526004016107be9061362c565b6114033382858560405180602001604052806000815250612896565b6000828152600a602052604090206005015460ff16611b2b5760405162461bcd60e51b81526020600482015260096024820152681a5cc81cd95b1b195960ba1b60448201526064016107be565b6000828152600a6020526040902060020154811115611b5c5760405162461bcd60e51b81526004016107be9061362c565b6000828152600a6020526040902060058101546001909101548291611b90916101009091046001600160a01b031690610757565b1015611bae5760405162461bcd60e51b81526004016107be9061362c565b6000828152600a6020526040812060030154611bcb908390613741565b905080341015611c105760405162461bcd60e51b815260206004820152601060248201526f7072696365206e6f7420656e67686f7560801b60448201526064016107be565b6000838152600a602052604090206004015415611c79576000838152600a6020526040902060040154421115611c795760405162461bcd60e51b815260206004820152600e60248201526d037b93232b91034b99037bb32b9160951b60448201526064016107be565b6000838152600a6020526040902060020154611c96908390613760565b6000848152600a6020526040902060020181905560011115611ccc576000838152600a60205260409020600501805460ff191690555b6000838152600a6020908152604080832060058101546001909101548251938401909252928252611d109261010090046001600160a01b0316913391908690612896565b6000838152600a6020526040902060058101546001909101548391600b916101009091046001600160a01b031690611d479061236d565b604051602001611d58929190613276565b60408051601f1981840301815290829052611d72916132ae565b908152602001604051809103902054611d8b9190613760565b6000848152600a602052604090206005810154600190910154600b9161010090046001600160a01b031690611dbf9061236d565b604051602001611dd0929190613276565b60408051601f1981840301815290829052611dea916132ae565b90815260405190819003602001902055600854600754600091606491611e109083613760565b611e1a9190613760565b611e249084613741565b611e2e919061372d565b90506000606460085484611e429190613741565b611e4c919061372d565b6000868152600a602052604080822060050154905192935061010090046001600160a01b031691829085908381818185875af1925050503d8060008114611eaf576040519150601f19603f3d011682016040523d82523d6000602084013e611eb4565b606091505b5050905080611eee5760405162461bcd60e51b815260206004820152600660248201526519985a5b195960d21b60448201526064016107be565b6000878152600a6020908152604080832060010154835260098252808320546001600160a01b03168352600c909152902054611f2b908490613715565b6000888152600a602081815260408084206001018054855260098352818520546001600160a01b03168552600c835281852095909555928b90529081529154815188815292830189905233838301529051909189917f03ead356efd518f25112a94d2a0d02c45de70c0b95afdaa699c4d8af718949e49181900360600190a350505050505050565b6000828152600a602052604090206005015461010090046001600160a01b03163314611ff15760405162461bcd60e51b81526004016107be906136ce565b6000828152600a602052604090206005015460ff1615156001146120275760405162461bcd60e51b81526004016107be906136ad565b6000828152600a60205260409020600281015460019091015461204b903390610757565b10156120695760405162461bcd60e51b81526004016107be9061362c565b80156120bc574281116120b75760405162461bcd60e51b8152602060048201526016602482015275656e645f74696d65206973206d757374203e206e6f7760501b60448201526064016107be565b6120c0565b5060005b6000828152600a6020526040908190206004018290555182907f3b2834667af080bc1c4dd58d902bb87b7f5b272f4a4c020a54308fed50a3dadb9061176b9084815260200190565b6001600160a01b038516331480612124575061212485336106ba565b6121405760405162461bcd60e51b81526004016107be90613550565b61144d8585858585612896565b612155612300565b6001600160a01b0381166121ba5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107be565b61085d81612763565b600960205260009081526040902080546001820180546001600160a01b0390921692916121ef906137a7565b80601f016020809104026020016040519081016040528092919081815260200182805461221b906137a7565b80156122685780601f1061223d57610100808354040283529160200191612268565b820191906000526020600020905b81548152906001019060200180831161224b57829003601f168201915b50505050509080600201805461227d906137a7565b80601f01602080910402602001604051908101604052809291908181526020018280546122a9906137a7565b80156122f65780601f106122cb576101008083540402835291602001916122f6565b820191906000526020600020905b8154815290600101906020018083116122d957829003601f168201915b5050505050905083565b6003546001600160a01b031633146117895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107be565b8051611928906002906020840190612c40565b6060816123915750506040805180820190915260018152600360fc1b602082015290565b8160005b81156123bb57806123a58161380e565b91506123b49050600a8361372d565b9150612395565b6000816001600160401b038111156123d5576123d561387f565b6040519080825280601f01601f1916602001820160405280156123ff576020820181803683370190505b5090505b841561246a57612414600183613760565b9150612421600a86613829565b61242c906030613715565b60f81b81838151811061244157612441613869565b60200101906001600160f81b031916908160001a905350612463600a8661372d565b9450612403565b949350505050565b6001600160a01b0384166124d25760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016107be565b3360006124de856129c0565b905060006124eb856129c0565b90506000868152602081815260408083206001600160a01b038b1684529091528120805487929061251d908490613715565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461257d83600089898989612a0b565b50505050505050565b81518351146125e85760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016107be565b6001600160a01b03841661260e5760405162461bcd60e51b81526004016107be906135e7565b3360005b84518110156126f557600085828151811061262f5761262f613869565b60200260200101519050600085838151811061264d5761264d613869565b602090810291909101810151600084815280835260408082206001600160a01b038e16835290935291909120549091508181101561269d5760405162461bcd60e51b81526004016107be90613663565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906126da908490613715565b92505081905550505050806126ee9061380e565b9050612612565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612745929190613467565b60405180910390a461275b818787878787612b76565b505050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156128295760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016107be565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166128bc5760405162461bcd60e51b81526004016107be906135e7565b3360006128c8856129c0565b905060006128d5856129c0565b90506000868152602081815260408083206001600160a01b038c168452909152902054858110156129185760405162461bcd60e51b81526004016107be90613663565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290612955908490613715565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46129b5848a8a8a8a8a612a0b565b505050505050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106129fa576129fa613869565b602090810291909101015292915050565b6001600160a01b0384163b1561275b5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190612a4f90899089908890889088906004016133cf565b602060405180830381600087803b158015612a6957600080fd5b505af1925050508015612a99575060408051601f3d908101601f19168201909252612a9691810190613094565b60015b612b4657612aa5613895565b806308c379a01415612adf5750612aba6138b1565b80612ac55750612ae1565b8060405162461bcd60e51b81526004016107be919061353d565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016107be565b6001600160e01b0319811663f23a6e6160e01b1461257d5760405162461bcd60e51b81526004016107be9061359f565b6001600160a01b0384163b1561275b5760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190612bba9089908990889088908890600401613371565b602060405180830381600087803b158015612bd457600080fd5b505af1925050508015612c04575060408051601f3d908101601f19168201909252612c0191810190613094565b60015b612c1057612aa5613895565b6001600160e01b0319811663bc197c8160e01b1461257d5760405162461bcd60e51b81526004016107be9061359f565b828054612c4c906137a7565b90600052602060002090601f016020900481019282612c6e5760008555612cb4565b82601f10612c8757805160ff1916838001178555612cb4565b82800160010185558215612cb4579182015b82811115612cb4578251825591602001919060010190612c99565b50612cc0929150612cc4565b5090565b5b80821115612cc05760008155600101612cc5565b80356001600160a01b0381168114612cf057600080fd5b919050565b600082601f830112612d0657600080fd5b81356020612d13826136f2565b604051612d2082826137e2565b8381528281019150858301600585901b87018401881015612d4057600080fd5b60005b85811015612d5f57813584529284019290840190600101612d43565b5090979650505050505050565b600082601f830112612d7d57600080fd5b81356001600160401b03811115612d9657612d9661387f565b604051612dad601f8301601f1916602001826137e2565b818152846020838601011115612dc257600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215612df157600080fd5b612dfa82612cd9565b9392505050565b60008060408385031215612e1457600080fd5b612e1d83612cd9565b9150612e2b60208401612cd9565b90509250929050565b600080600080600060a08688031215612e4c57600080fd5b612e5586612cd9565b9450612e6360208701612cd9565b935060408601356001600160401b0380821115612e7f57600080fd5b612e8b89838a01612cf5565b94506060880135915080821115612ea157600080fd5b612ead89838a01612cf5565b93506080880135915080821115612ec357600080fd5b50612ed088828901612d6c565b9150509295509295909350565b600080600080600060a08688031215612ef557600080fd5b612efe86612cd9565b9450612f0c60208701612cd9565b9350604086013592506060860135915060808601356001600160401b03811115612f3557600080fd5b612ed088828901612d6c565b60008060408385031215612f5457600080fd5b612f5d83612cd9565b915060208301358015158114612f7257600080fd5b809150509250929050565b60008060408385031215612f9057600080fd5b612f9983612cd9565b946020939093013593505050565b60008060408385031215612fba57600080fd5b82356001600160401b0380821115612fd157600080fd5b818501915085601f830112612fe557600080fd5b81356020612ff2826136f2565b604051612fff82826137e2565b8381528281019150858301600585901b870184018b101561301f57600080fd5b600096505b848710156130495761303581612cd9565b835260019690960195918301918301613024565b509650508601359250508082111561306057600080fd5b5061306d85828601612cf5565b9150509250929050565b60006020828403121561308957600080fd5b8135612dfa8161393a565b6000602082840312156130a657600080fd5b8151612dfa8161393a565b6000602082840312156130c357600080fd5b81356001600160401b038111156130d957600080fd5b61246a84828501612d6c565b6000602082840312156130f757600080fd5b5035919050565b60008060006060848603121561311357600080fd5b8335925060208401356001600160401b038082111561313157600080fd5b61313d87838801612d6c565b9350604086013591508082111561315357600080fd5b5061316086828701612d6c565b9150509250925092565b6000806040838503121561317d57600080fd5b50508035926020909101359150565b6000806000606084860312156131a157600080fd5b83359250602084013591506131b860408501612cd9565b90509250925092565b600080600080608085870312156131d757600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b8381101561322357815187529582019590820190600101613207565b509495945050505050565b60008151808452613246816020860160208601613777565b601f01601f19169290920160200192915050565b6000815161326c818560208601613777565b9290920192915050565b6bffffffffffffffffffffffff198360601b168152600082516132a0816014850160208701613777565b919091016014019392505050565b600082516132c0818460208701613777565b9190910192915050565b600080845481600182811c9150808316806132e657607f831692505b602080841082141561330657634e487b7160e01b86526022600452602486fd5b81801561331a576001811461332b57613358565b60ff19861689528489019650613358565b60008b81526020902060005b868110156133505781548b820152908501908301613337565b505084890196505b505050505050613368818561325a565b95945050505050565b6001600160a01b0386811682528516602082015260a06040820181905260009061339d908301866131f3565b82810360608401526133af81866131f3565b905082810360808401526133c3818561322e565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906134099083018461322e565b979650505050505050565b6001600160a01b03841681526060602082018190526000906134389083018561322e565b828103604084015261344a818561322e565b9695505050505050565b602081526000612dfa60208301846131f3565b60408152600061347a60408301856131f3565b828103602084015261336881856131f3565b60c08152600061349f60c08301896131f3565b6020838203818501526134b2828a6131f3565b915083820360408501526134c682896131f3565b915083820360608501526134da82886131f3565b915083820360808501526134ee82876131f3565b84810360a0860152855180825282870193509082019060005b8181101561352c5784516001600160a01b031683529383019391830191600101613507565b50909b9a5050505050505050505050565b602081526000612dfa602083018461322e565b6020808252602f908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526e195c881b9bdc88185c1c1c9bdd9959608a1b606082015260800190565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252601a908201527f746f6b656e5f6964206e756d206973206e6f7420656e676f7568000000000000604082015260600190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252600790820152661a5cc81d5cd95960ca1b604082015260600190565b6020808252600a90820152696973206e6f7420796f7560b01b604082015260600190565b60006001600160401b0382111561370b5761370b61387f565b5060051b60200190565b600082198211156137285761372861383d565b500190565b60008261373c5761373c613853565b500490565b600081600019048311821515161561375b5761375b61383d565b500290565b6000828210156137725761377261383d565b500390565b60005b8381101561379257818101518382015260200161377a565b838111156137a1576000848401525b50505050565b600181811c908216806137bb57607f821691505b602082108114156137dc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f191681016001600160401b03811182821017156138075761380761387f565b6040525050565b60006000198214156138225761382261383d565b5060010190565b60008261383857613838613853565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156138ae5760046000803e5060005160e01c5b90565b600060443d10156138bf5790565b6040516003193d81016004833e81513d6001600160401b0381602484011181841117156138ee57505050505090565b82850191508151818111156139065750505050505090565b843d87010160208285010111156139205750505050505090565b61392f602082860101876137e2565b509095945050505050565b6001600160e01b03198116811461085d57600080fdfea2646970667358221220b7bcb5ce4d80524ccaaf88a50dd45b6442ae8865d1540df6394395ceab6fbf3964736f6c63430008070033
Deployed Bytecode
0x6080604052600436106101f85760003560e01c806362624ae91161010d578063c260804c116100a0578063d0fe19bf1161006f578063d0fe19bf14610669578063e985e9c51461069f578063f242432a146106e8578063f2fde38b14610708578063ffeb1c631461072857600080fd5b8063c260804c14610600578063c3de3b1214610620578063cb4c32d814610633578063cc1284231461064957600080fd5b80638da5cb5b116100dc5780638da5cb5b1461056c5780639c8a9d301461059e578063a22cb465146105cb578063a646f9ad146105eb57600080fd5b806362624ae91461044e578063715018a614610486578063837c18eb1461049b5780638a580378146104c957600080fd5b8063163dd8bb116101905780632eb2c2d61161015f5780632eb2c2d6146103ab5780633b66b00a146103cb5780634209a2e1146103e15780634e1273f4146104015780635198cf861461042e57600080fd5b8063163dd8bb14610324578063187958331461034b5780632825df7b1461036b5780632e1a7d4d1461038b57600080fd5b80630dccc9ad116101cc5780630dccc9ad146102a25780630e89341c146102c4578063131e5046146102e45780631628e0f51461030457600080fd5b8062fdd58e146101fd57806301ffc9a71461023057806302e5329e1461026057806302fe530514610282575b600080fd5b34801561020957600080fd5b5061021d610218366004612f7d565b610757565b6040519081526020015b60405180910390f35b34801561023c57600080fd5b5061025061024b366004613077565b6107ed565b6040519015158152602001610227565b34801561026c57600080fd5b5061028061027b3660046130e5565b61083f565b005b34801561028e57600080fd5b5061028061029d3660046130b1565b61084c565b3480156102ae57600080fd5b506102b7610860565b604051610227919061353d565b3480156102d057600080fd5b506102b76102df3660046130e5565b6108ee565b3480156102f057600080fd5b506102806102ff3660046130e5565b610922565b34801561031057600080fd5b5061028061031f3660046130e5565b6109a8565b34801561033057600080fd5b50610339610b4d565b6040516102279695949392919061348c565b34801561035757600080fd5b506102806103663660046131c1565b610f45565b34801561037757600080fd5b506102806103863660046130fe565b611268565b34801561039757600080fd5b506102806103a63660046130e5565b611365565b3480156103b757600080fd5b506102806103c6366004612e34565b611408565b3480156103d757600080fd5b5061021d60085481565b3480156103ed57600080fd5b506102806103fc3660046130e5565b611454565b34801561040d57600080fd5b5061042161041c366004612fa7565b6114da565b6040516102279190613454565b34801561043a57600080fd5b5061028061044936600461316a565b611603565b34801561045a57600080fd5b5061021d6104693660046130b1565b8051602081830181018051600b8252928201919093012091525481565b34801561049257600080fd5b50610280611777565b3480156104a757600080fd5b506104bb6104b6366004612ddf565b61178b565b604051610227929190613467565b3480156104d557600080fd5b5061052c6104e43660046130e5565b600a60205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909160ff81169061010090046001600160a01b031687565b6040805197885260208801969096529486019390935260608501919091526080840152151560a08301526001600160a01b031660c082015260e001610227565b34801561057857600080fd5b506003546001600160a01b03165b6040516001600160a01b039091168152602001610227565b3480156105aa57600080fd5b5061021d6105b9366004612ddf565b600c6020526000908152604090205481565b3480156105d757600080fd5b506102806105e6366004612f41565b61191d565b3480156105f757600080fd5b5061028061192c565b34801561060c57600080fd5b5061028061061b36600461318c565b611a59565b61028061062e36600461316a565b611ade565b34801561063f57600080fd5b5061021d60075481565b34801561065557600080fd5b5061028061066436600461316a565b611fb3565b34801561067557600080fd5b506105866106843660046130e5565b6000908152600960205260409020546001600160a01b031690565b3480156106ab57600080fd5b506102506106ba366004612e01565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b3480156106f457600080fd5b50610280610703366004612edd565b612108565b34801561071457600080fd5b50610280610723366004612ddf565b61214d565b34801561073457600080fd5b506107486107433660046130e5565b6121c3565b60405161022793929190613414565b60006001600160a01b0383166107c75760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061081e57506001600160e01b031982166303a24d0760e21b145b8061083957506301ffc9a760e01b6001600160e01b03198316145b92915050565b610847612300565b600455565b610854612300565b61085d8161235a565b50565b6002805461086d906137a7565b80601f0160208091040260200160405190810160405280929190818152602001828054610899906137a7565b80156108e65780601f106108bb576101008083540402835291602001916108e6565b820191906000526020600020905b8154815290600101906020018083116108c957829003601f168201915b505050505081565b606060026108fb8361236d565b60405160200161090c9291906132ca565b6040516020818303038152906040529050919050565b61092a612300565b6064811061096c5760405162461bcd60e51b815260206004820152600f60248201526e05f6e756d206d757374203c2031303608c1b60448201526064016107be565b60646008548261097c9190613715565b106109a35760405162461bcd60e51b815260206004820152600060248201526044016107be565b600755565b6000818152600a602052604090206005015461010090046001600160a01b031633146109e65760405162461bcd60e51b81526004016107be906136ce565b6000818152600a602052604090206005015460ff161515600114610a1c5760405162461bcd60e51b81526004016107be906136ad565b6000818152600a602052604090206002810154600190910154600b903390610a439061236d565b604051602001610a54929190613276565b60408051601f1981840301815290829052610a6e916132ae565b908152602001604051809103902054610a879190613760565b6000828152600a6020526040902060010154600b903390610aa79061236d565b604051602001610ab8929190613276565b60408051601f1981840301815290829052610ad2916132ae565b9081526040805160209281900383018120939093556000848152600a90925281208181556001810182905560028101829055600381018290556004810182905560050180546001600160a81b0319169055339183917f1218f3cb1d0d9f0fa16edd3d92a08e141c46d98b93fced41a8a97479a5a6663c91a350565b60608060608060608060008060005b6006548111610b9f576000818152600a602052604090206005015460ff1615610b8d5782610b898161380e565b9350505b80610b978161380e565b915050610b5c565b508115610ef8576000826001600160401b03811115610bc057610bc061387f565b604051908082528060200260200182016040528015610be9578160200160208202803683370190505b5090506000836001600160401b03811115610c0657610c0661387f565b604051908082528060200260200182016040528015610c2f578160200160208202803683370190505b5090506000846001600160401b03811115610c4c57610c4c61387f565b604051908082528060200260200182016040528015610c75578160200160208202803683370190505b5090506000856001600160401b03811115610c9257610c9261387f565b604051908082528060200260200182016040528015610cbb578160200160208202803683370190505b5090506000866001600160401b03811115610cd857610cd861387f565b604051908082528060200260200182016040528015610d01578160200160208202803683370190505b5090506000876001600160401b03811115610d1e57610d1e61387f565b604051908082528060200260200182016040528015610d47578160200160208202803683370190505b50905060005b600554811015610ee0576000818152600a602052604090206005015460ff1615610ec15780878981518110610d8457610d84613869565b602002602001018181525050600a600082815260200190815260200160002060010154868981518110610db957610db9613869565b602002602001018181525050600a600082815260200190815260200160002060020154858981518110610dee57610dee613869565b602002602001018181525050600a600082815260200190815260200160002060030154848981518110610e2357610e23613869565b602002602001018181525050600a600082815260200190815260200160002060040154838981518110610e5857610e58613869565b602002602001018181525050600a600082815260200190815260200160002060050160019054906101000a90046001600160a01b0316828981518110610ea057610ea0613869565b60200260200101906001600160a01b031690816001600160a01b0316815250505b88881415610ece57610ee0565b80610ed88161380e565b915050610d4d565b50949c50929a50909850965094509250610f3d915050565b505060408051600080825260208201818152828401828152606084018381526080850184815260a0860194855260c08601909652939a50909850965090945090925090505b909192939495565b60008211610f855760405162461bcd60e51b815260206004820152600d60248201526c0206e756d206d757374203e203609c1b60448201526064016107be565b600b33610f918661236d565b604051602001610fa2929190613276565b60408051601f1981840301815290829052610fbc916132ae565b90815260200160405180910390205482610fd69190613715565b610fe03386610757565b10156110275760405162461bcd60e51b81526020600482015260166024820152750e8ded6cadcbed2c840dceada40d2e640cadccedeead60531b60448201526064016107be565b6103e883116110685760405162461bcd60e51b815260206004820152600d60248201526c707269636520746f6f206c6f7760981b60448201526064016107be565b80156110bb574281116110b65760405162461bcd60e51b8152602060048201526016602482015275656e645f74696d65206973206d757374203e206e6f7760501b60448201526064016107be565b6110bf565b5060005b6040805160e08101825260065480825260208083018881528385018781526060850189815260808601888152600160a088018181523360c08a018181526000998a52600a90985299909720975188559351938701939093559051600286015551600385015551600484015590516005909201805491516001600160a81b0319909216921515610100600160a81b031916929092176101006001600160a01b03909216919091021790558290600b906111768761236d565b604051602001611187929190613276565b60408051601f19818403018152908290526111a1916132ae565b9081526020016040518091039020546111ba9190613715565b600b336111c68761236d565b6040516020016111d7929190613276565b60408051601f19818403018152908290526111f1916132ae565b90815260408051602092819003830181209390935560065485845291830186905233908301526060820183905285917ff7b1e6c167a9bc203409829ddbbc2f2b9919d565436a63e79c08e817a9816f209060800160405180910390a36006805490600061125d8361380e565b919050555050505050565b6004548311156112b05760405162461bcd60e51b8152602060048201526013602482015272206e756d206d757374203c206d61785f6e756d60681b60448201526064016107be565b60408051606081018252338152602080820185815282840185905260055460009081526009835293909320825181546001600160a01b0319166001600160a01b039091161781559251805192939261130e9260018501920190612c40565b506040820151805161132a916002840191602090910190612c40565b5090505061134b336005548560405180602001604052806000815250612472565b6005805490600061135b8361380e565b9190505550505050565b61136d612300565b478111156113b65760405162461bcd60e51b81526020600482015260166024820152755f62616c616e6365206d757374203c206f776e65727360501b60448201526064016107be565b60006113ca6003546001600160a01b031690565b6040519091506001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611403573d6000803e3d6000fd5b505050565b6001600160a01b038516331480611424575061142485336106ba565b6114405760405162461bcd60e51b81526004016107be90613550565b61144d8585858585612586565b5050505050565b61145c612300565b6064811061149e5760405162461bcd60e51b815260206004820152600f60248201526e05f6e756d206d757374203c2031303608c1b60448201526064016107be565b6064600754826114ae9190613715565b106114d55760405162461bcd60e51b815260206004820152600060248201526044016107be565b600855565b6060815183511461153f5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016107be565b600083516001600160401b0381111561155a5761155a61387f565b604051908082528060200260200182016040528015611583578160200160208202803683370190505b50905060005b84518110156115fb576115ce8582815181106115a7576115a7613869565b60200260200101518583815181106115c1576115c1613869565b6020026020010151610757565b8282815181106115e0576115e0613869565b60209081029190910101526115f48161380e565b9050611589565b509392505050565b6000828152600a602052604090206005015461010090046001600160a01b031633146116415760405162461bcd60e51b81526004016107be906136ce565b6000828152600a602052604090206005015460ff1615156001146116775760405162461bcd60e51b81526004016107be906136ad565b6000828152600a60205260409020600281015460019091015461169b903390610757565b10156116e25760405162461bcd60e51b81526020600482015260166024820152750e8ded6cadcbed2c840dceada40d2e640cadccedeead60531b60448201526064016107be565b6103e881116117235760405162461bcd60e51b815260206004820152600d60248201526c707269636520746f6f206c6f7760981b60448201526064016107be565b6000828152600a6020526040908190206003018290555182907f56d448a31039ed8b2c91a20a29c04350e1dd7918b0e0f1da02fb9c8c20f3123d9061176b9084815260200190565b60405180910390a25050565b61177f612300565b6117896000612763565b565b6060806000806000805b6005548110156117d15760006117ab8883610757565b11156117bf57836117bb8161380e565b9450505b806117c98161380e565b915050611795565b5082156118fb576000836001600160401b038111156117f2576117f261387f565b60405190808252806020026020018201604052801561181b578160200160208202803683370190505b5090506000846001600160401b038111156118385761183861387f565b604051908082528060200260200182016040528015611861578160200160208202803683370190505b50905060005b6005548110156118ed5761187b8982610757565b935083156118ce578083868151811061189657611896613869565b602002602001018181525050838286815181106118b5576118b5613869565b6020908102919091010152846118ca8161380e565b9550505b858514156118db576118ed565b806118e58161380e565b915050611867565b509097909650945050505050565b5050604080516000808252602082019081528183019092529590945092505050565b6119283383836127b5565b5050565b336000908152600c60205260409020546119805760405162461bcd60e51b81526020600482015260156024820152740796f75722062616c616e6365206d757374203e203605c1b60448201526064016107be565b336000908152600c60205260409020544710156119df5760405162461bcd60e51b815260206004820152601860248201527f42616c616e6365206d75737420626520706f736974697665000000000000000060448201526064016107be565b336000818152600c60205260408082205490519192918381818185875af1925050503d8060008114611a2d576040519150601f19603f3d011682016040523d82523d6000602084013e611a32565b606091505b5090915050600181151514611a4657600080fd5b50336000908152600c6020526040812055565b60008211611a995760405162461bcd60e51b815260206004820152600d60248201526c0206e756d206d757374203e203609c1b60448201526064016107be565b81611aa43385610757565b1015611ac25760405162461bcd60e51b81526004016107be9061362c565b6114033382858560405180602001604052806000815250612896565b6000828152600a602052604090206005015460ff16611b2b5760405162461bcd60e51b81526020600482015260096024820152681a5cc81cd95b1b195960ba1b60448201526064016107be565b6000828152600a6020526040902060020154811115611b5c5760405162461bcd60e51b81526004016107be9061362c565b6000828152600a6020526040902060058101546001909101548291611b90916101009091046001600160a01b031690610757565b1015611bae5760405162461bcd60e51b81526004016107be9061362c565b6000828152600a6020526040812060030154611bcb908390613741565b905080341015611c105760405162461bcd60e51b815260206004820152601060248201526f7072696365206e6f7420656e67686f7560801b60448201526064016107be565b6000838152600a602052604090206004015415611c79576000838152600a6020526040902060040154421115611c795760405162461bcd60e51b815260206004820152600e60248201526d037b93232b91034b99037bb32b9160951b60448201526064016107be565b6000838152600a6020526040902060020154611c96908390613760565b6000848152600a6020526040902060020181905560011115611ccc576000838152600a60205260409020600501805460ff191690555b6000838152600a6020908152604080832060058101546001909101548251938401909252928252611d109261010090046001600160a01b0316913391908690612896565b6000838152600a6020526040902060058101546001909101548391600b916101009091046001600160a01b031690611d479061236d565b604051602001611d58929190613276565b60408051601f1981840301815290829052611d72916132ae565b908152602001604051809103902054611d8b9190613760565b6000848152600a602052604090206005810154600190910154600b9161010090046001600160a01b031690611dbf9061236d565b604051602001611dd0929190613276565b60408051601f1981840301815290829052611dea916132ae565b90815260405190819003602001902055600854600754600091606491611e109083613760565b611e1a9190613760565b611e249084613741565b611e2e919061372d565b90506000606460085484611e429190613741565b611e4c919061372d565b6000868152600a602052604080822060050154905192935061010090046001600160a01b031691829085908381818185875af1925050503d8060008114611eaf576040519150601f19603f3d011682016040523d82523d6000602084013e611eb4565b606091505b5050905080611eee5760405162461bcd60e51b815260206004820152600660248201526519985a5b195960d21b60448201526064016107be565b6000878152600a6020908152604080832060010154835260098252808320546001600160a01b03168352600c909152902054611f2b908490613715565b6000888152600a602081815260408084206001018054855260098352818520546001600160a01b03168552600c835281852095909555928b90529081529154815188815292830189905233838301529051909189917f03ead356efd518f25112a94d2a0d02c45de70c0b95afdaa699c4d8af718949e49181900360600190a350505050505050565b6000828152600a602052604090206005015461010090046001600160a01b03163314611ff15760405162461bcd60e51b81526004016107be906136ce565b6000828152600a602052604090206005015460ff1615156001146120275760405162461bcd60e51b81526004016107be906136ad565b6000828152600a60205260409020600281015460019091015461204b903390610757565b10156120695760405162461bcd60e51b81526004016107be9061362c565b80156120bc574281116120b75760405162461bcd60e51b8152602060048201526016602482015275656e645f74696d65206973206d757374203e206e6f7760501b60448201526064016107be565b6120c0565b5060005b6000828152600a6020526040908190206004018290555182907f3b2834667af080bc1c4dd58d902bb87b7f5b272f4a4c020a54308fed50a3dadb9061176b9084815260200190565b6001600160a01b038516331480612124575061212485336106ba565b6121405760405162461bcd60e51b81526004016107be90613550565b61144d8585858585612896565b612155612300565b6001600160a01b0381166121ba5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107be565b61085d81612763565b600960205260009081526040902080546001820180546001600160a01b0390921692916121ef906137a7565b80601f016020809104026020016040519081016040528092919081815260200182805461221b906137a7565b80156122685780601f1061223d57610100808354040283529160200191612268565b820191906000526020600020905b81548152906001019060200180831161224b57829003601f168201915b50505050509080600201805461227d906137a7565b80601f01602080910402602001604051908101604052809291908181526020018280546122a9906137a7565b80156122f65780601f106122cb576101008083540402835291602001916122f6565b820191906000526020600020905b8154815290600101906020018083116122d957829003601f168201915b5050505050905083565b6003546001600160a01b031633146117895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107be565b8051611928906002906020840190612c40565b6060816123915750506040805180820190915260018152600360fc1b602082015290565b8160005b81156123bb57806123a58161380e565b91506123b49050600a8361372d565b9150612395565b6000816001600160401b038111156123d5576123d561387f565b6040519080825280601f01601f1916602001820160405280156123ff576020820181803683370190505b5090505b841561246a57612414600183613760565b9150612421600a86613829565b61242c906030613715565b60f81b81838151811061244157612441613869565b60200101906001600160f81b031916908160001a905350612463600a8661372d565b9450612403565b949350505050565b6001600160a01b0384166124d25760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016107be565b3360006124de856129c0565b905060006124eb856129c0565b90506000868152602081815260408083206001600160a01b038b1684529091528120805487929061251d908490613715565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461257d83600089898989612a0b565b50505050505050565b81518351146125e85760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016107be565b6001600160a01b03841661260e5760405162461bcd60e51b81526004016107be906135e7565b3360005b84518110156126f557600085828151811061262f5761262f613869565b60200260200101519050600085838151811061264d5761264d613869565b602090810291909101810151600084815280835260408082206001600160a01b038e16835290935291909120549091508181101561269d5760405162461bcd60e51b81526004016107be90613663565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906126da908490613715565b92505081905550505050806126ee9061380e565b9050612612565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612745929190613467565b60405180910390a461275b818787878787612b76565b505050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156128295760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016107be565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166128bc5760405162461bcd60e51b81526004016107be906135e7565b3360006128c8856129c0565b905060006128d5856129c0565b90506000868152602081815260408083206001600160a01b038c168452909152902054858110156129185760405162461bcd60e51b81526004016107be90613663565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290612955908490613715565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46129b5848a8a8a8a8a612a0b565b505050505050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106129fa576129fa613869565b602090810291909101015292915050565b6001600160a01b0384163b1561275b5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190612a4f90899089908890889088906004016133cf565b602060405180830381600087803b158015612a6957600080fd5b505af1925050508015612a99575060408051601f3d908101601f19168201909252612a9691810190613094565b60015b612b4657612aa5613895565b806308c379a01415612adf5750612aba6138b1565b80612ac55750612ae1565b8060405162461bcd60e51b81526004016107be919061353d565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016107be565b6001600160e01b0319811663f23a6e6160e01b1461257d5760405162461bcd60e51b81526004016107be9061359f565b6001600160a01b0384163b1561275b5760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190612bba9089908990889088908890600401613371565b602060405180830381600087803b158015612bd457600080fd5b505af1925050508015612c04575060408051601f3d908101601f19168201909252612c0191810190613094565b60015b612c1057612aa5613895565b6001600160e01b0319811663bc197c8160e01b1461257d5760405162461bcd60e51b81526004016107be9061359f565b828054612c4c906137a7565b90600052602060002090601f016020900481019282612c6e5760008555612cb4565b82601f10612c8757805160ff1916838001178555612cb4565b82800160010185558215612cb4579182015b82811115612cb4578251825591602001919060010190612c99565b50612cc0929150612cc4565b5090565b5b80821115612cc05760008155600101612cc5565b80356001600160a01b0381168114612cf057600080fd5b919050565b600082601f830112612d0657600080fd5b81356020612d13826136f2565b604051612d2082826137e2565b8381528281019150858301600585901b87018401881015612d4057600080fd5b60005b85811015612d5f57813584529284019290840190600101612d43565b5090979650505050505050565b600082601f830112612d7d57600080fd5b81356001600160401b03811115612d9657612d9661387f565b604051612dad601f8301601f1916602001826137e2565b818152846020838601011115612dc257600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215612df157600080fd5b612dfa82612cd9565b9392505050565b60008060408385031215612e1457600080fd5b612e1d83612cd9565b9150612e2b60208401612cd9565b90509250929050565b600080600080600060a08688031215612e4c57600080fd5b612e5586612cd9565b9450612e6360208701612cd9565b935060408601356001600160401b0380821115612e7f57600080fd5b612e8b89838a01612cf5565b94506060880135915080821115612ea157600080fd5b612ead89838a01612cf5565b93506080880135915080821115612ec357600080fd5b50612ed088828901612d6c565b9150509295509295909350565b600080600080600060a08688031215612ef557600080fd5b612efe86612cd9565b9450612f0c60208701612cd9565b9350604086013592506060860135915060808601356001600160401b03811115612f3557600080fd5b612ed088828901612d6c565b60008060408385031215612f5457600080fd5b612f5d83612cd9565b915060208301358015158114612f7257600080fd5b809150509250929050565b60008060408385031215612f9057600080fd5b612f9983612cd9565b946020939093013593505050565b60008060408385031215612fba57600080fd5b82356001600160401b0380821115612fd157600080fd5b818501915085601f830112612fe557600080fd5b81356020612ff2826136f2565b604051612fff82826137e2565b8381528281019150858301600585901b870184018b101561301f57600080fd5b600096505b848710156130495761303581612cd9565b835260019690960195918301918301613024565b509650508601359250508082111561306057600080fd5b5061306d85828601612cf5565b9150509250929050565b60006020828403121561308957600080fd5b8135612dfa8161393a565b6000602082840312156130a657600080fd5b8151612dfa8161393a565b6000602082840312156130c357600080fd5b81356001600160401b038111156130d957600080fd5b61246a84828501612d6c565b6000602082840312156130f757600080fd5b5035919050565b60008060006060848603121561311357600080fd5b8335925060208401356001600160401b038082111561313157600080fd5b61313d87838801612d6c565b9350604086013591508082111561315357600080fd5b5061316086828701612d6c565b9150509250925092565b6000806040838503121561317d57600080fd5b50508035926020909101359150565b6000806000606084860312156131a157600080fd5b83359250602084013591506131b860408501612cd9565b90509250925092565b600080600080608085870312156131d757600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b8381101561322357815187529582019590820190600101613207565b509495945050505050565b60008151808452613246816020860160208601613777565b601f01601f19169290920160200192915050565b6000815161326c818560208601613777565b9290920192915050565b6bffffffffffffffffffffffff198360601b168152600082516132a0816014850160208701613777565b919091016014019392505050565b600082516132c0818460208701613777565b9190910192915050565b600080845481600182811c9150808316806132e657607f831692505b602080841082141561330657634e487b7160e01b86526022600452602486fd5b81801561331a576001811461332b57613358565b60ff19861689528489019650613358565b60008b81526020902060005b868110156133505781548b820152908501908301613337565b505084890196505b505050505050613368818561325a565b95945050505050565b6001600160a01b0386811682528516602082015260a06040820181905260009061339d908301866131f3565b82810360608401526133af81866131f3565b905082810360808401526133c3818561322e565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906134099083018461322e565b979650505050505050565b6001600160a01b03841681526060602082018190526000906134389083018561322e565b828103604084015261344a818561322e565b9695505050505050565b602081526000612dfa60208301846131f3565b60408152600061347a60408301856131f3565b828103602084015261336881856131f3565b60c08152600061349f60c08301896131f3565b6020838203818501526134b2828a6131f3565b915083820360408501526134c682896131f3565b915083820360608501526134da82886131f3565b915083820360808501526134ee82876131f3565b84810360a0860152855180825282870193509082019060005b8181101561352c5784516001600160a01b031683529383019391830191600101613507565b50909b9a5050505050505050505050565b602081526000612dfa602083018461322e565b6020808252602f908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526e195c881b9bdc88185c1c1c9bdd9959608a1b606082015260800190565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252601a908201527f746f6b656e5f6964206e756d206973206e6f7420656e676f7568000000000000604082015260600190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252600790820152661a5cc81d5cd95960ca1b604082015260600190565b6020808252600a90820152696973206e6f7420796f7560b01b604082015260600190565b60006001600160401b0382111561370b5761370b61387f565b5060051b60200190565b600082198211156137285761372861383d565b500190565b60008261373c5761373c613853565b500490565b600081600019048311821515161561375b5761375b61383d565b500290565b6000828210156137725761377261383d565b500390565b60005b8381101561379257818101518382015260200161377a565b838111156137a1576000848401525b50505050565b600181811c908216806137bb57607f821691505b602082108114156137dc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f191681016001600160401b03811182821017156138075761380761387f565b6040525050565b60006000198214156138225761382261383d565b5060010190565b60008261383857613838613853565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156138ae5760046000803e5060005160e01c5b90565b600060443d10156138bf5790565b6040516003193d81016004833e81513d6001600160401b0381602484011181841117156138ee57505050505090565b82850191508151818111156139065750505050505090565b843d87010160208285010111156139205750505050505090565b61392f602082860101876137e2565b509095945050505050565b6001600160e01b03198116811461085d57600080fdfea2646970667358221220b7bcb5ce4d80524ccaaf88a50dd45b6442ae8865d1540df6394395ceab6fbf3964736f6c63430008070033
Deployed Bytecode Sourcemap
41915:11339:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23633:230;;;;;;;;;;-1:-1:-1;23633:230:0;;;;;:::i;:::-;;:::i;:::-;;;26627:25:1;;;26615:2;26600:18;23633:230:0;;;;;;;;22656:310;;;;;;;;;;-1:-1:-1;22656:310:0;;;;;:::i;:::-;;:::i;:::-;;;15548:14:1;;15541:22;15523:41;;15511:2;15496:18;22656:310:0;15383:187:1;44512:83:0;;;;;;;;;;-1:-1:-1;44512:83:0;;;;;:::i;:::-;;:::i;:::-;;43897:89;;;;;;;;;;-1:-1:-1;43897:89:0;;;;;:::i;:::-;;:::i;22447:18::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;53055:192::-;;;;;;;;;;-1:-1:-1;53055:192:0;;;;;:::i;:::-;;:::i;44608:185::-;;;;;;;;;;-1:-1:-1;44608:185:0;;;;;:::i;:::-;;:::i;46608:508::-;;;;;;;;;;-1:-1:-1;46608:508:0;;;;;:::i;:::-;;:::i;51251:1416::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;45245:1348::-;;;;;;;;;;-1:-1:-1;45245:1348:0;;;;;:::i;:::-;;:::i;43444:445::-;;;;;;;;;;-1:-1:-1;43444:445:0;;;;;:::i;:::-;;:::i;44994:229::-;;;;;;;;;;-1:-1:-1;44994:229:0;;;;;:::i;:::-;;:::i;25577:439::-;;;;;;;;;;-1:-1:-1;25577:439:0;;;;;:::i;:::-;;:::i;42087:23::-;;;;;;;;;;;;;;;;44806:175;;;;;;;;;;-1:-1:-1;44806:175:0;;;;;:::i;:::-;;:::i;24029:524::-;;;;;;;;;;-1:-1:-1;24029:524:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;47132:512::-;;;;;;;;;;-1:-1:-1;47132:512:0;;;;;:::i;:::-;;:::i;42221:44::-;;;;;;;;;;-1:-1:-1;42221:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;41043:103;;;;;;;;;;;;;:::i;50331:907::-;;;;;;;;;;-1:-1:-1;50331:907:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;42174:38::-;;;;;;;;;;-1:-1:-1;42174:38:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42174:38:0;;;;;;;27997:25:1;;;28053:2;28038:18;;28031:34;;;;28081:18;;;28074:34;;;;28139:2;28124:18;;28117:34;;;;28182:3;28167:19;;28160:35;28239:14;28232:22;28226:3;28211:19;;28204:51;-1:-1:-1;;;;;28292:32:1;28286:3;28271:19;;28264:61;27984:3;27969:19;42174:38:0;27688:643:1;40395:87:0;;;;;;;;;;-1:-1:-1;40468:6:0;;-1:-1:-1;;;;;40468:6:0;40395:87;;;-1:-1:-1;;;;;11069:32:1;;;11051:51;;11039:2;11024:18;40395:87:0;10905:203:1;42269:47:0;;;;;;;;;;-1:-1:-1;42269:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;24626:155;;;;;;;;;;-1:-1:-1;24626:155:0;;;;;:::i;:::-;;:::i;44129:367::-;;;;;;;;;;;;;:::i;52681:364::-;;;;;;;;;;-1:-1:-1;52681:364:0;;;;;:::i;:::-;;:::i;48329:1990::-;;;;;;:::i;:::-;;:::i;42055:25::-;;;;;;;;;;;;;;;;47660:654;;;;;;;;;;-1:-1:-1;47660:654:0;;;;;:::i;:::-;;:::i;43999:116::-;;;;;;;;;;-1:-1:-1;43999:116:0;;;;;:::i;:::-;44055:7;44082:17;;;:13;:17;;;;;:25;-1:-1:-1;;;;;44082:25:0;;43999:116;24853:168;;;;;;;;;;-1:-1:-1;24853:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;24976:27:0;;;24952:4;24976:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;24853:168;25093:407;;;;;;;;;;-1:-1:-1;25093:407:0;;;;;:::i;:::-;;:::i;41301:201::-;;;;;;;;;;-1:-1:-1;41301:201:0;;;;;:::i;:::-;;:::i;42120:47::-;;;;;;;;;;-1:-1:-1;42120:47:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;23633:230::-;23719:7;-1:-1:-1;;;;;23747:21:0;;23739:76;;;;-1:-1:-1;;;23739:76:0;;19730:2:1;23739:76:0;;;19712:21:1;19769:2;19749:18;;;19742:30;19808:34;19788:18;;;19781:62;-1:-1:-1;;;19859:18:1;;;19852:40;19909:19;;23739:76:0;;;;;;;;;-1:-1:-1;23833:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;23833:22:0;;;;;;;;;;;;23633:230::o;22656:310::-;22758:4;-1:-1:-1;;;;;;22795:41:0;;-1:-1:-1;;;22795:41:0;;:110;;-1:-1:-1;;;;;;;22853:52:0;;-1:-1:-1;;;22853:52:0;22795:110;:163;;;-1:-1:-1;;;;;;;;;;13154:40:0;;;22922:36;22775:183;22656:310;-1:-1:-1;;22656:310:0:o;44512:83::-;40281:13;:11;:13::i;:::-;44573:7:::1;:14:::0;44512:83::o;43897:89::-;40281:13;:11;:13::i;:::-;43963:15:::1;43971:6;43963:7;:15::i;:::-;43897:89:::0;:::o;22447:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;53055:192::-;53123:13;53203:4;53209:18;:7;:16;:18::i;:::-;53186:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;53149:90;;53055:192;;;:::o;44608:185::-;40281:13;:11;:13::i;:::-;44686:3:::1;44680:4;:9;44672:36;;;::::0;-1:-1:-1;;;44672:36:0;;18691:2:1;44672:36:0::1;::::0;::::1;18673:21:1::0;18730:2;18710:18;;;18703:30;-1:-1:-1;;;18749:18:1;;;18742:45;18804:18;;44672:36:0::1;18489:339:1::0;44672:36:0::1;44748:3;44736:8;;44729:4;:15;;;;:::i;:::-;44728:23;44719:38;;;::::0;-1:-1:-1;;;44719:38:0;;23404:2:1;44719:38:0::1;::::0;::::1;23386:21:1::0;-1:-1:-1;23423:18:1;;;23416:29;23462:18;;44719:38:0::1;23202:284:1::0;44719:38:0::1;44768:10;:17:::0;44608:185::o;46608:508::-;46686:16;;;;:7;:16;;;;;:23;;;;;;-1:-1:-1;;;;;46686:23:0;46713:10;46686:37;46678:60;;;;-1:-1:-1;;;46678:60:0;;;;;;;:::i;:::-;46757:16;;;;:7;:16;;;;;:23;;;;;:31;;:23;:31;46749:51;;;;-1:-1:-1;;;46749:51:0;;;;;;;:::i;:::-;46990:16;;;;:7;:16;;;;;:20;;;;46948:25;;;;;46902:9;;46936:10;;46948:36;;:34;:36::i;:::-;46919:66;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;46919:66:0;;;;;;;;;;46902:85;;;:::i;:::-;;;;;;;;;;;;;;:108;;;;:::i;:::-;46857:16;;;;:7;:16;;;;;:25;;;46811:9;;46845:10;;46857:36;;:34;:36::i;:::-;46828:66;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;46828:66:0;;;;;;;;;;46811:85;;;:::i;:::-;;;;;;;;;;;;;;;;:199;;;;47028:16;;;;:7;:16;;;;;47021:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;47021:23:0;;;47096:10;;47028:16;;47062:46;;;46608:508;:::o;51251:1416::-;51296:16;51314;51331;51348;51365;51382;51411:9;51435;51463;51459:122;51478:10;;51475:1;:13;51459:122;;51511:10;;;;:7;:10;;;;;:17;;;;;51508:62;;;51548:3;;;;:::i;:::-;;;;51508:62;51489:3;;;;:::i;:::-;;;;51459:122;;;-1:-1:-1;51594:5:0;;51591:1069;;51615:25;51658:1;-1:-1:-1;;;;;51644:16:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51644:16:0;;51615:45;;51675:25;51718:1;-1:-1:-1;;;;;51704:16:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51704:16:0;;51675:45;;51735:21;51774:1;-1:-1:-1;;;;;51760:16:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51760:16:0;;51735:41;;51791:22;51831:1;-1:-1:-1;;;;;51817:16:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51817:16:0;;51791:42;;51848:22;51888:1;-1:-1:-1;;;;;51874:16:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51874:16:0;;51848:42;;51905:24;51947:1;-1:-1:-1;;;;;51933:16:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51933:16:0;;51905:44;;51970:9;51966:476;51984:6;;51982:1;:8;51966:476;;;52017:10;;;;:7;:10;;;;;:17;;;;;52014:337;;;52072:1;52058:8;52067:1;52058:11;;;;;;;;:::i;:::-;;;;;;:15;;;;;52110:7;:10;52118:1;52110:10;;;;;;;;;;;:19;;;52096:8;52105:1;52096:11;;;;;;;;:::i;:::-;;;;;;:33;;;;;52162:7;:10;52170:1;52162:10;;;;;;;;;;;:14;;;52152:4;52157:1;52152:7;;;;;;;;:::i;:::-;;;;;;:24;;;;;52209:7;:10;52217:1;52209:10;;;;;;;;;;;:16;;;52199:5;52205:1;52199:8;;;;;;;;:::i;:::-;;;;;;:26;;;;;52259:7;:10;52267:1;52259:10;;;;;;;;;;;:19;;;52248:5;52254:1;52248:8;;;;;;;;:::i;:::-;;;;;;:30;;;;;52314:7;:10;52322:1;52314:10;;;;;;;;;;;:17;;;;;;;;;;-1:-1:-1;;;;;52314:17:0;52301:7;52309:1;52301:10;;;;;;;;:::i;:::-;;;;;;:30;-1:-1:-1;;;;;52301:30:0;;;-1:-1:-1;;;;;52301:30:0;;;;;52014:337;52377:1;52372;:6;52369:58;;;52402:5;;52369:58;51991:3;;;;:::i;:::-;;;;51966:476;;;-1:-1:-1;52464:8:0;;-1:-1:-1;52473:8:0;;-1:-1:-1;52482:4:0;;-1:-1:-1;52487:5:0;-1:-1:-1;52493:5:0;-1:-1:-1;52499:7:0;-1:-1:-1;52456:51:0;;-1:-1:-1;;52456:51:0;51591:1069;-1:-1:-1;;52546:16:0;;;52560:1;52546:16;;;;;;52563;;;;;;52580;;;;;;52597;;;;;;52614;;;;;;52631;;;;;;;;;52546;;-1:-1:-1;52546:16:0;;-1:-1:-1;52563:16:0;-1:-1:-1;52580:16:0;;-1:-1:-1;52597:16:0;;-1:-1:-1;52614:16:0;-1:-1:-1;51251:1416:0;;;;;;;:::o;45245:1348::-;45429:1;45423:3;:7;45397:82;;;;-1:-1:-1;;;45397:82:0;;19388:2:1;45397:82:0;;;19370:21:1;19427:2;19407:18;;;19400:30;-1:-1:-1;;;19446:18:1;;;19439:43;19499:18;;45397:82:0;19186:337:1;45397:82:0;45553:9;45587:10;45599:19;:8;:17;:19::i;:::-;45570:49;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;45570:49:0;;;;;;;;;;45553:68;;;:::i;:::-;;;;;;;;;;;;;;45549:3;:72;;;;:::i;:::-;45514:30;45524:10;45535:8;45514:9;:30::i;:::-;:108;;45492:180;;;;-1:-1:-1;;;45492:180:0;;21596:2:1;45492:180:0;;;21578:21:1;21635:2;21615:18;;;21608:30;-1:-1:-1;;;21654:18:1;;;21647:52;21716:18;;45492:180:0;21394:346:1;45492:180:0;45701:4;45693:5;:12;45685:38;;;;-1:-1:-1;;;45685:38:0;;18349:2:1;45685:38:0;;;18331:21:1;18388:2;18368:18;;;18361:30;-1:-1:-1;;;18407:18:1;;;18400:43;18460:18;;45685:38:0;18147:337:1;45685:38:0;45737:12;;45734:147;;45784:15;45773:8;:26;45765:61;;;;-1:-1:-1;;;45765:61:0;;20141:2:1;45765:61:0;;;20123:21:1;20180:2;20160:18;;;20153:30;-1:-1:-1;;;20199:18:1;;;20192:52;20261:18;;45765:61:0;19939:346:1;45765:61:0;45734:147;;;-1:-1:-1;45868:1:0;45734:147;45917:265;;;;;;;;45944:10;;45917:265;;;;;;;;;;;;;;;;;;;;;;;;;;;;46162:4;45917:265;;;;;;46124:10;45917:265;;;;;;-1:-1:-1;45895:19:0;;;:7;:19;;;;;;;:287;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;45895:287:0;;;;;;-1:-1:-1;;;;;;45895:287:0;;;;;;-1:-1:-1;;;;;45895:287:0;;;;;;;;;;45917:265;;46276:9;;46322:19;45917:265;46322:17;:19::i;:::-;46293:49;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;46293:49:0;;;;;;;;;;46276:68;;;:::i;:::-;;;;;;;;;;;;;;:73;;;;:::i;:::-;46203:9;46237:10;46249:19;:8;:17;:19::i;:::-;46220:49;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;46220:49:0;;;;;;;;;;46203:68;;;:::i;:::-;;;;;;;;;;;;;;;;:146;;;;46400:10;;27497:25:1;;;27538:18;;;27531:34;;;46516:10:0;27581:18:1;;;27574:60;27665:2;27650:18;;27643:34;;;46435:8:0;;46369:192;;27484:3:1;27469:19;46369:192:0;;;;;;;46572:10;:13;;;:10;:13;;;:::i;:::-;;;;;;45245:1348;;;;:::o;43444:445::-;43608:7;;43598:6;:17;;43572:94;;;;-1:-1:-1;;;43572:94:0;;26335:2:1;43572:94:0;;;26317:21:1;26374:2;26354:18;;;26347:30;-1:-1:-1;;;26393:18:1;;;26386:49;26452:18;;43572:94:0;26133:343:1;43572:94:0;43708:106;;;;;;;;43738:10;43708:106;;;;;;;;;;;;;;;43697:6;;-1:-1:-1;43683:21:0;;;:13;:21;;;;;;:131;;;;-1:-1:-1;;;;;;43683:131:0;-1:-1:-1;;;;;43683:131:0;;;;;;;;;;43708:106;;43683:21;:131;;-1:-1:-1;43683:131:0;;;;;;:::i;:::-;-1:-1:-1;43683:131:0;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;43825:37;43831:10;43843:6;;43851;43825:37;;;;;;;;;;;;:5;:37::i;:::-;43873:6;:8;;;:6;:8;;;:::i;:::-;;;;;;43444:445;;;:::o;44994:229::-;40281:13;:11;:13::i;:::-;45080:21:::1;45068:8;:33;;45060:67;;;::::0;-1:-1:-1;;;45060:67:0;;21947:2:1;45060:67:0::1;::::0;::::1;21929:21:1::0;21986:2;21966:18;;;21959:30;-1:-1:-1;;;22005:18:1;;;21998:52;22067:18;;45060:67:0::1;21745:346:1::0;45060:67:0::1;45138:22;45171:7;40468:6:::0;;-1:-1:-1;;;;;40468:6:0;;40395:87;45171:7:::1;45190:25;::::0;45138:41;;-1:-1:-1;;;;;;45190:15:0;::::1;::::0;:25;::::1;;;::::0;45206:8;;45190:25:::1;::::0;;;45206:8;45190:15;:25;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;45049:174;44994:229:::0;:::o;25577:439::-;-1:-1:-1;;;;;25810:20:0;;21431:10;25810:20;;:60;;-1:-1:-1;25834:36:0;25851:4;21431:10;24853:168;:::i;25834:36::-;25788:157;;;;-1:-1:-1;;;25788:157:0;;;;;;;:::i;:::-;25956:52;25979:4;25985:2;25989:3;25994:7;26003:4;25956:22;:52::i;:::-;25577:439;;;;;:::o;44806:175::-;40281:13;:11;:13::i;:::-;44882:3:::1;44876:4;:9;44868:36;;;::::0;-1:-1:-1;;;44868:36:0;;18691:2:1;44868:36:0::1;::::0;::::1;18673:21:1::0;18730:2;18710:18;;;18703:30;-1:-1:-1;;;18749:18:1;;;18742:45;18804:18;;44868:36:0::1;18489:339:1::0;44868:36:0::1;44940:3;44928:10;;44923:4;:15;;;;:::i;:::-;:20;44915:32;;;::::0;-1:-1:-1;;;44915:32:0;;23404:2:1;44915:32:0::1;::::0;::::1;23386:21:1::0;-1:-1:-1;23423:18:1;;;23416:29;23462:18;;44915:32:0::1;23202:284:1::0;44915:32:0::1;44958:8;:15:::0;44806:175::o;24029:524::-;24185:16;24246:3;:10;24227:8;:15;:29;24219:83;;;;-1:-1:-1;;;24219:83:0;;24775:2:1;24219:83:0;;;24757:21:1;24814:2;24794:18;;;24787:30;24853:34;24833:18;;;24826:62;-1:-1:-1;;;24904:18:1;;;24897:39;24953:19;;24219:83:0;24573:405:1;24219:83:0;24315:30;24362:8;:15;-1:-1:-1;;;;;24348:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24348:30:0;;24315:63;;24396:9;24391:122;24415:8;:15;24411:1;:19;24391:122;;;24471:30;24481:8;24490:1;24481:11;;;;;;;;:::i;:::-;;;;;;;24494:3;24498:1;24494:6;;;;;;;;:::i;:::-;;;;;;;24471:9;:30::i;:::-;24452:13;24466:1;24452:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;24432:3;;;:::i;:::-;;;24391:122;;;-1:-1:-1;24532:13:0;24029:524;-1:-1:-1;;;24029:524:0:o;47132:512::-;47220:16;;;;:7;:16;;;;;:23;;;;;;-1:-1:-1;;;;;47220:23:0;47247:10;47220:37;47212:60;;;;-1:-1:-1;;;47212:60:0;;;;;;;:::i;:::-;47291:16;;;;:7;:16;;;;;:23;;;;;:31;;:23;:31;47283:51;;;;-1:-1:-1;;;47283:51:0;;;;;;;:::i;:::-;47420:16;;;;:7;:16;;;;;:20;;;;47390:25;;;;;47369:47;;47379:10;;47369:9;:47::i;:::-;:71;;47347:143;;;;-1:-1:-1;;;47347:143:0;;21596:2:1;47347:143:0;;;21578:21:1;21635:2;21615:18;;;21608:30;-1:-1:-1;;;21654:18:1;;;21647:52;21716:18;;47347:143:0;21394:346:1;47347:143:0;47519:4;47511:5;:12;47503:38;;;;-1:-1:-1;;;47503:38:0;;18349:2:1;47503:38:0;;;18331:21:1;18388:2;18368:18;;;18361:30;-1:-1:-1;;;18407:18:1;;;18400:43;18460:18;;47503:38:0;18147:337:1;47503:38:0;47554:16;;;;:7;:16;;;;;;;:22;;:30;;;47602:34;47562:7;;47602:34;;;;47579:5;26627:25:1;;26615:2;26600:18;;26481:177;47602:34:0;;;;;;;;47132:512;;:::o;41043:103::-;40281:13;:11;:13::i;:::-;41108:30:::1;41135:1;41108:18;:30::i;:::-;41043:103::o:0;50331:907::-;50387:16;50405;50434:9;50458;50484:14;50517:9;50513:119;50531:6;;50529:1;:8;50513:119;;;50578:1;50560:17;50570:4;50575:1;50560:9;:17::i;:::-;:19;50557:64;;;50599:3;;;;:::i;:::-;;;;50557:64;50538:3;;;;:::i;:::-;;;;50513:119;;;-1:-1:-1;50645:5:0;;50642:585;;50666:25;50709:1;-1:-1:-1;;;;;50695:16:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50695:16:0;;50666:45;;50726:21;50765:1;-1:-1:-1;;;;;50751:16:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50751:16:0;;50726:41;;50788:9;50784:320;50802:6;;50800:1;:8;50784:320;;;50841:17;50851:4;50856:1;50841:9;:17::i;:::-;50832:26;-1:-1:-1;50880:8:0;;50877:136;;50927:1;50912:8;50921:1;50912:11;;;;;;;;:::i;:::-;;;;;;:16;;;;;50961:6;50951:4;50956:1;50951:7;;;;;;;;:::i;:::-;;;;;;;;;;:16;50990:3;;;;:::i;:::-;;;;50877:136;51039:1;51034;:6;51031:58;;;51064:5;;51031:58;50809:3;;;;:::i;:::-;;;;50784:320;;;-1:-1:-1;51128:8:0;;51137:4;;-1:-1:-1;50331:907:0;-1:-1:-1;;;;;50331:907:0:o;50642:585::-;-1:-1:-1;;51181:16:0;;;51195:1;51181:16;;;;;;51198;;;;;;;;;51181;;;-1:-1:-1;50331:907:0;-1:-1:-1;;;50331:907:0:o;24626:155::-;24721:52;21431:10;24754:8;24764;24721:18;:52::i;:::-;24626:155;;:::o;44129:367::-;44198:10;44212:1;44185:24;;;:12;:24;;;;;;44177:62;;;;-1:-1:-1;;;44177:62:0;;17247:2:1;44177:62:0;;;17229:21:1;17286:2;17266:18;;;17259:30;-1:-1:-1;;;17305:18:1;;;17298:51;17366:18;;44177:62:0;17045:345:1;44177:62:0;44297:10;44284:24;;;;:12;:24;;;;;;44259:21;:49;;44250:88;;;;-1:-1:-1;;;44250:88:0;;19035:2:1;44250:88:0;;;19017:21:1;19074:2;19054:18;;;19047:30;19113:26;19093:18;;;19086:54;19157:18;;44250:88:0;18833:348:1;44250:88:0;44368:10;44350:12;44391:24;;;:12;:24;;;;;;;44368:52;;44350:12;;44368:10;44350:12;44368:52;44350:12;44368:52;44391:24;44368:10;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44349:71:0;;-1:-1:-1;;44450:4:0;44439:15;;;;44431:24;;;;;;-1:-1:-1;44473:10:0;44487:1;44460:24;;;:12;:24;;;;;:28;44129:367::o;52681:364::-;52792:1;52786:3;:7;52760:82;;;;-1:-1:-1;;;52760:82:0;;19388:2:1;52760:82:0;;;19370:21:1;19427:2;19407:18;;;19400:30;-1:-1:-1;;;19446:18:1;;;19439:43;19499:18;;52760:82:0;19186:337:1;52760:82:0;52912:3;52875:33;52885:10;52896:11;52875:9;:33::i;:::-;:40;;52853:116;;;;-1:-1:-1;;;52853:116:0;;;;;;;:::i;:::-;52982:55;53000:10;53011:6;53018:11;53030:3;52982:55;;;;;;;;;;;;:17;:55::i;48329:1990::-;48445:16;;;;:7;:16;;;;;:23;;;;;48437:45;;;;-1:-1:-1;;;48437:45:0;;23693:2:1;48437:45:0;;;23675:21:1;23732:1;23712:18;;;23705:29;-1:-1:-1;;;23750:18:1;;;23743:39;23799:18;;48437:45:0;23491:332:1;48437:45:0;48526:16;;;;:7;:16;;;;;:20;;;48515:31;;;48493:107;;;;-1:-1:-1;;;48493:107:0;;;;;;;:::i;:::-;48643:16;;;;:7;:16;;;;;:23;;;;;48667:25;;;;48697:7;;48633:60;;48643:23;;;;-1:-1:-1;;;;;48643:23:0;;48633:9;:60::i;:::-;:71;;48611:147;;;;-1:-1:-1;;;48611:147:0;;;;;;;:::i;:::-;48769:18;48790:16;;;:7;:16;;;;;:22;;;:32;;48815:7;;48790:32;:::i;:::-;48769:53;;48862:10;48849:9;:23;;48840:53;;;;-1:-1:-1;;;48840:53:0;;17597:2:1;48840:53:0;;;17579:21:1;17636:2;17616:18;;;17609:30;-1:-1:-1;;;17655:18:1;;;17648:46;17711:18;;48840:53:0;17395:340:1;48840:53:0;48938:1;48909:16;;;:7;:16;;;;;:25;;;:30;48906:132;;48963:16;;;;:7;:16;;;;;:25;;;48992:15;-1:-1:-1;48963:44:0;48955:71;;;;-1:-1:-1;;;48955:71:0;;20492:2:1;48955:71:0;;;20474:21:1;20531:2;20511:18;;;20504:30;-1:-1:-1;;;20550:18:1;;;20543:44;20604:18;;48955:71:0;20290:338:1;48955:71:0;49073:16;;;;:7;:16;;;;;:20;;;:30;;49096:7;;49073:30;:::i;:::-;49050:16;;;;:7;:16;;;;;:20;;:53;;;49140:1;-1:-1:-1;49114:86:0;;;49183:5;49157:16;;;:7;:16;;;;;:23;;:31;;-1:-1:-1;;49157:31:0;;;49114:86;49230:16;;;;:7;:16;;;;;;;;:23;;;;;49265:25;;;;49212:90;;;;;;;;;;;;;49230:23;;;-1:-1:-1;;;;;49230:23:0;;49254:10;;49265:25;49291:7;;49212:17;:90::i;:::-;49448:16;;;;:7;:16;;;;;:23;;;;;49472:25;;;;49515:7;;49414:9;;49448:23;;;;-1:-1:-1;;;;;49448:23:0;;49472:36;;:34;:36::i;:::-;49431:78;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;49431:78:0;;;;;;;;;;49414:97;;;:::i;:::-;;;;;;;;;;;;;;:108;;;;:::i;:::-;49347:16;;;;:7;:16;;;;;:23;;;;;49371:25;;;;49313:9;;49347:23;;;-1:-1:-1;;;;;49347:23:0;;49371:36;;:34;:36::i;:::-;49330:78;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;49330:78:0;;;;;;;;;;49313:97;;;:::i;:::-;;;;;;;;;;;;;;:209;49588:8;;49575:10;;49535:19;;49598:3;;49569:16;;49598:3;49569:16;:::i;:::-;:27;;;;:::i;:::-;49557:40;;:10;:40;:::i;:::-;:44;;;;:::i;:::-;49535:66;;49612:20;49655:3;49646:8;;49635:10;:19;;;;:::i;:::-;:23;;;;:::i;:::-;49673:14;49698:16;;;:7;:16;;;;;;:23;;;49755:35;;49612:46;;-1:-1:-1;49698:23:0;;;-1:-1:-1;;;;;49698:23:0;;;;49774:11;;49673:14;49755:35;49673:14;49755:35;49774:11;49698:23;49755:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49737:53;;;49809:6;49801:25;;;;-1:-1:-1;;;49801:25:0;;22709:2:1;49801:25:0;;;22691:21:1;22748:1;22728:18;;;22721:29;-1:-1:-1;;;22766:18:1;;;22759:36;22812:18;;49801:25:0;22507:329:1;49801:25:0;50089:62;50116:16;;;:7;:16;;;;;;;;:25;;;50102:40;;:13;:40;;;;;:48;-1:-1:-1;;;;;50102:48:0;50089:62;;:12;:62;;;;;;:75;;50152:12;;50089:75;:::i;:::-;50024:62;50051:16;;;:7;:16;;;;;;;;:25;;;;50037:40;;:13;:40;;;;;:48;-1:-1:-1;;;;;50037:48:0;50024:62;;:12;:62;;;;;:140;;;;50224:16;;;;;;;:25;;50191:106;;27118:25:1;;;27159:18;;;27152:34;;;50285:10:0;27202:18:1;;;27195:60;50191:106:0;;50224:25;;50051:16;;50191:106;;;;;27106:2:1;50191:106:0;;;48426:1893;;;;;48329:1990;;:::o;47660:654::-;47755:16;;;;:7;:16;;;;;:23;;;;;;-1:-1:-1;;;;;47755:23:0;47782:10;47755:37;47747:60;;;;-1:-1:-1;;;47747:60:0;;;;;;;:::i;:::-;47826:16;;;;:7;:16;;;;;:23;;;;;:31;;:23;:31;47818:51;;;;-1:-1:-1;;;47818:51:0;;;;;;;:::i;:::-;47955:16;;;;:7;:16;;;;;:20;;;;47925:25;;;;;47904:47;;47914:10;;47904:9;:47::i;:::-;:71;;47882:147;;;;-1:-1:-1;;;47882:147:0;;;;;;;:::i;:::-;48043:12;;48040:147;;48090:15;48079:8;:26;48071:61;;;;-1:-1:-1;;;48071:61:0;;20141:2:1;48071:61:0;;;20123:21:1;20180:2;20160:18;;;20153:30;-1:-1:-1;;;20199:18:1;;;20192:52;20261:18;;48071:61:0;19939:346:1;48071:61:0;48040:147;;;-1:-1:-1;48174:1:0;48040:147;48208:16;;;;:7;:16;;;;;;;:25;;:36;;;48262:44;48216:7;;48262:44;;;;48236:8;26627:25:1;;26615:2;26600:18;;26481:177;25093:407:0;-1:-1:-1;;;;;25301:20:0;;21431:10;25301:20;;:60;;-1:-1:-1;25325:36:0;25342:4;21431:10;24853:168;:::i;25325:36::-;25279:157;;;;-1:-1:-1;;;25279:157:0;;;;;;;:::i;:::-;25447:45;25465:4;25471:2;25475;25479:6;25487:4;25447:17;:45::i;41301:201::-;40281:13;:11;:13::i;:::-;-1:-1:-1;;;;;41390:22:0;::::1;41382:73;;;::::0;-1:-1:-1;;;41382:73:0;;17942:2:1;41382:73:0::1;::::0;::::1;17924:21:1::0;17981:2;17961:18;;;17954:30;18020:34;18000:18;;;17993:62;-1:-1:-1;;;18071:18:1;;;18064:36;18117:19;;41382:73:0::1;17740:402:1::0;41382:73:0::1;41466:28;41485:8;41466:18;:28::i;42120:47::-:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42120:47:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40560:132::-;40468:6;;-1:-1:-1;;;;;40468:6:0;21431:10;40624:23;40616:68;;;;-1:-1:-1;;;40616:68:0;;23043:2:1;40616:68:0;;;23025:21:1;;;23062:18;;;23055:30;23121:34;23101:18;;;23094:62;23173:18;;40616:68:0;22841:356:1;29802:88:0;29869:13;;;;:4;;:13;;;;;:::i;643:723::-;699:13;920:10;916:53;;-1:-1:-1;;947:10:0;;;;;;;;;;;;-1:-1:-1;;;947:10:0;;;;;643:723::o;916:53::-;994:5;979:12;1035:78;1042:9;;1035:78;;1068:8;;;;:::i;:::-;;-1:-1:-1;1091:10:0;;-1:-1:-1;1099:2:0;1091:10;;:::i;:::-;;;1035:78;;;1123:19;1155:6;-1:-1:-1;;;;;1145:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1145:17:0;;1123:39;;1173:154;1180:10;;1173:154;;1207:11;1217:1;1207:11;;:::i;:::-;;-1:-1:-1;1276:10:0;1284:2;1276:5;:10;:::i;:::-;1263:24;;:2;:24;:::i;:::-;1250:39;;1233:6;1240;1233:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;1233:56:0;;;;;;;;-1:-1:-1;1304:11:0;1313:2;1304:11;;:::i;:::-;;;1173:154;;;1351:6;643:723;-1:-1:-1;;;;643:723:0:o;30276:729::-;-1:-1:-1;;;;;30429:16:0;;30421:62;;;;-1:-1:-1;;;30421:62:0;;25933:2:1;30421:62:0;;;25915:21:1;25972:2;25952:18;;;25945:30;26011:34;25991:18;;;25984:62;-1:-1:-1;;;26062:18:1;;;26055:31;26103:19;;30421:62:0;25731:397:1;30421:62:0;21431:10;30496:16;30561:21;30579:2;30561:17;:21::i;:::-;30538:44;;30593:24;30620:25;30638:6;30620:17;:25::i;:::-;30593:52;;30737:9;:13;;;;;;;;;;;-1:-1:-1;;;;;30737:17:0;;;;;;;;;:27;;30758:6;;30737:9;:27;;30758:6;;30737:27;:::i;:::-;;;;-1:-1:-1;;30780:52:0;;;26837:25:1;;;26893:2;26878:18;;26871:34;;;-1:-1:-1;;;;;30780:52:0;;;;30813:1;;30780:52;;;;;;26810:18:1;30780:52:0;;;;;;;30923:74;30954:8;30972:1;30976:2;30980;30984:6;30992:4;30923:30;:74::i;:::-;30410:595;;;30276:729;;;;:::o;27812:1146::-;28039:7;:14;28025:3;:10;:28;28017:81;;;;-1:-1:-1;;;28017:81:0;;25524:2:1;28017:81:0;;;25506:21:1;25563:2;25543:18;;;25536:30;25602:34;25582:18;;;25575:62;-1:-1:-1;;;25653:18:1;;;25646:38;25701:19;;28017:81:0;25322:404:1;28017:81:0;-1:-1:-1;;;;;28117:16:0;;28109:66;;;;-1:-1:-1;;;28109:66:0;;;;;;;:::i;:::-;21431:10;28188:16;28305:421;28329:3;:10;28325:1;:14;28305:421;;;28361:10;28374:3;28378:1;28374:6;;;;;;;;:::i;:::-;;;;;;;28361:19;;28395:14;28412:7;28420:1;28412:10;;;;;;;;:::i;:::-;;;;;;;;;;;;28439:19;28461:13;;;;;;;;;;-1:-1:-1;;;;;28461:19:0;;;;;;;;;;;;28412:10;;-1:-1:-1;28503:21:0;;;;28495:76;;;;-1:-1:-1;;;28495:76:0;;;;;;;:::i;:::-;28615:9;:13;;;;;;;;;;;-1:-1:-1;;;;;28615:19:0;;;;;;;;;;28637:20;;;28615:42;;28687:17;;;;;;;:27;;28637:20;;28615:9;28687:27;;28637:20;;28687:27;:::i;:::-;;;;;;;;28346:380;;;28341:3;;;;:::i;:::-;;;28305:421;;;;28773:2;-1:-1:-1;;;;;28743:47:0;28767:4;-1:-1:-1;;;;;28743:47:0;28757:8;-1:-1:-1;;;;;28743:47:0;;28777:3;28782:7;28743:47;;;;;;;:::i;:::-;;;;;;;;28875:75;28911:8;28921:4;28927:2;28931:3;28936:7;28945:4;28875:35;:75::i;:::-;28006:952;27812:1146;;;;;:::o;41662:191::-;41755:6;;;-1:-1:-1;;;;;41772:17:0;;;-1:-1:-1;;;;;;41772:17:0;;;;;;;41805:40;;41755:6;;;41772:17;41755:6;;41805:40;;41736:16;;41805:40;41725:128;41662:191;:::o;34689:331::-;34844:8;-1:-1:-1;;;;;34835:17:0;:5;-1:-1:-1;;;;;34835:17:0;;;34827:71;;;;-1:-1:-1;;;34827:71:0;;24030:2:1;34827:71:0;;;24012:21:1;24069:2;24049:18;;;24042:30;24108:34;24088:18;;;24081:62;-1:-1:-1;;;24159:18:1;;;24152:39;24208:19;;34827:71:0;23828:405:1;34827:71:0;-1:-1:-1;;;;;34909:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;34909:46:0;;;;;;;;;;34971:41;;15523::1;;;34971::0;;15496:18:1;34971:41:0;;;;;;;34689:331;;;:::o;26480:974::-;-1:-1:-1;;;;;26668:16:0;;26660:66;;;;-1:-1:-1;;;26660:66:0;;;;;;;:::i;:::-;21431:10;26739:16;26804:21;26822:2;26804:17;:21::i;:::-;26781:44;;26836:24;26863:25;26881:6;26863:17;:25::i;:::-;26836:52;;26974:19;26996:13;;;;;;;;;;;-1:-1:-1;;;;;26996:19:0;;;;;;;;;;27034:21;;;;27026:76;;;;-1:-1:-1;;;27026:76:0;;;;;;;:::i;:::-;27138:9;:13;;;;;;;;;;;-1:-1:-1;;;;;27138:19:0;;;;;;;;;;27160:20;;;27138:42;;27202:17;;;;;;;:27;;27160:20;;27138:9;27202:27;;27160:20;;27202:27;:::i;:::-;;;;-1:-1:-1;;27247:46:0;;;26837:25:1;;;26893:2;26878:18;;26871:34;;;-1:-1:-1;;;;;27247:46:0;;;;;;;;;;;;;;26810:18:1;27247:46:0;;;;;;;27378:68;27409:8;27419:4;27425:2;27429;27433:6;27441:4;27378:30;:68::i;:::-;26649:805;;;;26480:974;;;;;:::o;38955:198::-;39075:16;;;39089:1;39075:16;;;;;;;;;39021;;39050:22;;39075:16;;;;;;;;;;;;-1:-1:-1;39075:16:0;39050:41;;39113:7;39102:5;39108:1;39102:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;39140:5;38955:198;-1:-1:-1;;38955:198:0:o;37382:744::-;-1:-1:-1;;;;;37597:13:0;;4238:19;:23;37593:526;;37633:72;;-1:-1:-1;;;37633:72:0;;-1:-1:-1;;;;;37633:38:0;;;;;:72;;37672:8;;37682:4;;37688:2;;37692:6;;37700:4;;37633:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37633:72:0;;;;;;;;-1:-1:-1;;37633:72:0;;;;;;;;;;;;:::i;:::-;;;37629:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;37981:6;37974:14;;-1:-1:-1;;;37974:14:0;;;;;;;;:::i;37629:479::-;;;38030:62;;-1:-1:-1;;;38030:62:0;;16001:2:1;38030:62:0;;;15983:21:1;16040:2;16020:18;;;16013:30;16079:34;16059:18;;;16052:62;-1:-1:-1;;;16130:18:1;;;16123:50;16190:19;;38030:62:0;15799:416:1;37629:479:0;-1:-1:-1;;;;;;37755:55:0;;-1:-1:-1;;;37755:55:0;37751:154;;37835:50;;-1:-1:-1;;;37835:50:0;;;;;;;:::i;38134:813::-;-1:-1:-1;;;;;38374:13:0;;4238:19;:23;38370:570;;38410:79;;-1:-1:-1;;;38410:79:0;;-1:-1:-1;;;;;38410:43:0;;;;;:79;;38454:8;;38464:4;;38470:3;;38475:7;;38484:4;;38410:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38410:79:0;;;;;;;;-1:-1:-1;;38410:79:0;;;;;;;;;;;;:::i;:::-;;;38406:523;;;;:::i;:::-;-1:-1:-1;;;;;;38571:60:0;;-1:-1:-1;;;38571:60:0;38567:159;;38656:50;;-1:-1:-1;;;38656:50:0;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:735::-;246:5;299:3;292:4;284:6;280:17;276:27;266:55;;317:1;314;307:12;266:55;353:6;340:20;379:4;402:43;442:2;402:43;:::i;:::-;474:2;468:9;486:31;514:2;506:6;486:31;:::i;:::-;552:18;;;586:15;;;;-1:-1:-1;621:15:1;;;671:1;667:10;;;655:23;;651:32;;648:41;-1:-1:-1;645:61:1;;;702:1;699;692:12;645:61;724:1;734:163;748:2;745:1;742:9;734:163;;;805:17;;793:30;;843:12;;;;875;;;;766:1;759:9;734:163;;;-1:-1:-1;915:6:1;;192:735;-1:-1:-1;;;;;;;192:735:1:o;932:555::-;974:5;1027:3;1020:4;1012:6;1008:17;1004:27;994:55;;1045:1;1042;1035:12;994:55;1081:6;1068:20;-1:-1:-1;;;;;1103:2:1;1100:26;1097:52;;;1129:18;;:::i;:::-;1178:2;1172:9;1190:67;1245:2;1226:13;;-1:-1:-1;;1222:27:1;1251:4;1218:38;1172:9;1190:67;:::i;:::-;1281:2;1273:6;1266:18;1327:3;1320:4;1315:2;1307:6;1303:15;1299:26;1296:35;1293:55;;;1344:1;1341;1334:12;1293:55;1408:2;1401:4;1393:6;1389:17;1382:4;1374:6;1370:17;1357:54;1455:1;1431:15;;;1448:4;1427:26;1420:37;;;;1435:6;932:555;-1:-1:-1;;;932:555:1:o;1492:186::-;1551:6;1604:2;1592:9;1583:7;1579:23;1575:32;1572:52;;;1620:1;1617;1610:12;1572:52;1643:29;1662:9;1643:29;:::i;:::-;1633:39;1492:186;-1:-1:-1;;;1492:186:1:o;1683:260::-;1751:6;1759;1812:2;1800:9;1791:7;1787:23;1783:32;1780:52;;;1828:1;1825;1818:12;1780:52;1851:29;1870:9;1851:29;:::i;:::-;1841:39;;1899:38;1933:2;1922:9;1918:18;1899:38;:::i;:::-;1889:48;;1683:260;;;;;:::o;1948:943::-;2102:6;2110;2118;2126;2134;2187:3;2175:9;2166:7;2162:23;2158:33;2155:53;;;2204:1;2201;2194:12;2155:53;2227:29;2246:9;2227:29;:::i;:::-;2217:39;;2275:38;2309:2;2298:9;2294:18;2275:38;:::i;:::-;2265:48;;2364:2;2353:9;2349:18;2336:32;-1:-1:-1;;;;;2428:2:1;2420:6;2417:14;2414:34;;;2444:1;2441;2434:12;2414:34;2467:61;2520:7;2511:6;2500:9;2496:22;2467:61;:::i;:::-;2457:71;;2581:2;2570:9;2566:18;2553:32;2537:48;;2610:2;2600:8;2597:16;2594:36;;;2626:1;2623;2616:12;2594:36;2649:63;2704:7;2693:8;2682:9;2678:24;2649:63;:::i;:::-;2639:73;;2765:3;2754:9;2750:19;2737:33;2721:49;;2795:2;2785:8;2782:16;2779:36;;;2811:1;2808;2801:12;2779:36;;2834:51;2877:7;2866:8;2855:9;2851:24;2834:51;:::i;:::-;2824:61;;;1948:943;;;;;;;;:::o;2896:606::-;3000:6;3008;3016;3024;3032;3085:3;3073:9;3064:7;3060:23;3056:33;3053:53;;;3102:1;3099;3092:12;3053:53;3125:29;3144:9;3125:29;:::i;:::-;3115:39;;3173:38;3207:2;3196:9;3192:18;3173:38;:::i;:::-;3163:48;;3258:2;3247:9;3243:18;3230:32;3220:42;;3309:2;3298:9;3294:18;3281:32;3271:42;;3364:3;3353:9;3349:19;3336:33;-1:-1:-1;;;;;3384:6:1;3381:30;3378:50;;;3424:1;3421;3414:12;3378:50;3447:49;3488:7;3479:6;3468:9;3464:22;3447:49;:::i;3507:347::-;3572:6;3580;3633:2;3621:9;3612:7;3608:23;3604:32;3601:52;;;3649:1;3646;3639:12;3601:52;3672:29;3691:9;3672:29;:::i;:::-;3662:39;;3751:2;3740:9;3736:18;3723:32;3798:5;3791:13;3784:21;3777:5;3774:32;3764:60;;3820:1;3817;3810:12;3764:60;3843:5;3833:15;;;3507:347;;;;;:::o;3859:254::-;3927:6;3935;3988:2;3976:9;3967:7;3963:23;3959:32;3956:52;;;4004:1;4001;3994:12;3956:52;4027:29;4046:9;4027:29;:::i;:::-;4017:39;4103:2;4088:18;;;;4075:32;;-1:-1:-1;;;3859:254:1:o;4118:1219::-;4236:6;4244;4297:2;4285:9;4276:7;4272:23;4268:32;4265:52;;;4313:1;4310;4303:12;4265:52;4353:9;4340:23;-1:-1:-1;;;;;4423:2:1;4415:6;4412:14;4409:34;;;4439:1;4436;4429:12;4409:34;4477:6;4466:9;4462:22;4452:32;;4522:7;4515:4;4511:2;4507:13;4503:27;4493:55;;4544:1;4541;4534:12;4493:55;4580:2;4567:16;4602:4;4625:43;4665:2;4625:43;:::i;:::-;4697:2;4691:9;4709:31;4737:2;4729:6;4709:31;:::i;:::-;4775:18;;;4809:15;;;;-1:-1:-1;4844:11:1;;;4886:1;4882:10;;;4874:19;;4870:28;;4867:41;-1:-1:-1;4864:61:1;;;4921:1;4918;4911:12;4864:61;4943:1;4934:10;;4953:169;4967:2;4964:1;4961:9;4953:169;;;5024:23;5043:3;5024:23;:::i;:::-;5012:36;;4985:1;4978:9;;;;;5068:12;;;;5100;;4953:169;;;-1:-1:-1;5141:6:1;-1:-1:-1;;5185:18:1;;5172:32;;-1:-1:-1;;5216:16:1;;;5213:36;;;5245:1;5242;5235:12;5213:36;;5268:63;5323:7;5312:8;5301:9;5297:24;5268:63;:::i;:::-;5258:73;;;4118:1219;;;;;:::o;5342:245::-;5400:6;5453:2;5441:9;5432:7;5428:23;5424:32;5421:52;;;5469:1;5466;5459:12;5421:52;5508:9;5495:23;5527:30;5551:5;5527:30;:::i;5592:249::-;5661:6;5714:2;5702:9;5693:7;5689:23;5685:32;5682:52;;;5730:1;5727;5720:12;5682:52;5762:9;5756:16;5781:30;5805:5;5781:30;:::i;5846:321::-;5915:6;5968:2;5956:9;5947:7;5943:23;5939:32;5936:52;;;5984:1;5981;5974:12;5936:52;6024:9;6011:23;-1:-1:-1;;;;;6049:6:1;6046:30;6043:50;;;6089:1;6086;6079:12;6043:50;6112:49;6153:7;6144:6;6133:9;6129:22;6112:49;:::i;6172:180::-;6231:6;6284:2;6272:9;6263:7;6259:23;6255:32;6252:52;;;6300:1;6297;6290:12;6252:52;-1:-1:-1;6323:23:1;;6172:180;-1:-1:-1;6172:180:1:o;6357:609::-;6454:6;6462;6470;6523:2;6511:9;6502:7;6498:23;6494:32;6491:52;;;6539:1;6536;6529:12;6491:52;6575:9;6562:23;6552:33;;6636:2;6625:9;6621:18;6608:32;-1:-1:-1;;;;;6700:2:1;6692:6;6689:14;6686:34;;;6716:1;6713;6706:12;6686:34;6739:49;6780:7;6771:6;6760:9;6756:22;6739:49;:::i;:::-;6729:59;;6841:2;6830:9;6826:18;6813:32;6797:48;;6870:2;6860:8;6857:16;6854:36;;;6886:1;6883;6876:12;6854:36;;6909:51;6952:7;6941:8;6930:9;6926:24;6909:51;:::i;:::-;6899:61;;;6357:609;;;;;:::o;6971:248::-;7039:6;7047;7100:2;7088:9;7079:7;7075:23;7071:32;7068:52;;;7116:1;7113;7106:12;7068:52;-1:-1:-1;;7139:23:1;;;7209:2;7194:18;;;7181:32;;-1:-1:-1;6971:248:1:o;7224:322::-;7301:6;7309;7317;7370:2;7358:9;7349:7;7345:23;7341:32;7338:52;;;7386:1;7383;7376:12;7338:52;7422:9;7409:23;7399:33;;7479:2;7468:9;7464:18;7451:32;7441:42;;7502:38;7536:2;7525:9;7521:18;7502:38;:::i;:::-;7492:48;;7224:322;;;;;:::o;7551:385::-;7637:6;7645;7653;7661;7714:3;7702:9;7693:7;7689:23;7685:33;7682:53;;;7731:1;7728;7721:12;7682:53;-1:-1:-1;;7754:23:1;;;7824:2;7809:18;;7796:32;;-1:-1:-1;7875:2:1;7860:18;;7847:32;;7926:2;7911:18;7898:32;;-1:-1:-1;7551:385:1;-1:-1:-1;7551:385:1:o;7941:435::-;7994:3;8032:5;8026:12;8059:6;8054:3;8047:19;8085:4;8114:2;8109:3;8105:12;8098:19;;8151:2;8144:5;8140:14;8172:1;8182:169;8196:6;8193:1;8190:13;8182:169;;;8257:13;;8245:26;;8291:12;;;;8326:15;;;;8218:1;8211:9;8182:169;;;-1:-1:-1;8367:3:1;;7941:435;-1:-1:-1;;;;;7941:435:1:o;8381:257::-;8422:3;8460:5;8454:12;8487:6;8482:3;8475:19;8503:63;8559:6;8552:4;8547:3;8543:14;8536:4;8529:5;8525:16;8503:63;:::i;:::-;8620:2;8599:15;-1:-1:-1;;8595:29:1;8586:39;;;;8627:4;8582:50;;8381:257;-1:-1:-1;;8381:257:1:o;8643:185::-;8685:3;8723:5;8717:12;8738:52;8783:6;8778:3;8771:4;8764:5;8760:16;8738:52;:::i;:::-;8806:16;;;;;8643:185;-1:-1:-1;;8643:185:1:o;8833:397::-;9047:26;9043:31;9034:6;9030:2;9026:15;9022:53;9017:3;9010:66;8992:3;9105:6;9099:13;9121:62;9176:6;9171:2;9166:3;9162:12;9155:4;9147:6;9143:17;9121:62;:::i;:::-;9203:16;;;;9221:2;9199:25;;8833:397;-1:-1:-1;;;8833:397:1:o;9235:276::-;9366:3;9404:6;9398:13;9420:53;9466:6;9461:3;9454:4;9446:6;9442:17;9420:53;:::i;:::-;9489:16;;;;;9235:276;-1:-1:-1;;9235:276:1:o;9516:1174::-;9692:3;9721:1;9754:6;9748:13;9784:3;9806:1;9834:9;9830:2;9826:18;9816:28;;9894:2;9883:9;9879:18;9916;9906:61;;9960:4;9952:6;9948:17;9938:27;;9906:61;9986:2;10034;10026:6;10023:14;10003:18;10000:38;9997:165;;;-1:-1:-1;;;10061:33:1;;10117:4;10114:1;10107:15;10147:4;10068:3;10135:17;9997:165;10178:18;10205:104;;;;10323:1;10318:320;;;;10171:467;;10205:104;-1:-1:-1;;10238:24:1;;10226:37;;10283:16;;;;-1:-1:-1;10205:104:1;;10318:320;28597:1;28590:14;;;28634:4;28621:18;;10413:1;10427:165;10441:6;10438:1;10435:13;10427:165;;;10519:14;;10506:11;;;10499:35;10562:16;;;;10456:10;;10427:165;;;10431:3;;10621:6;10616:3;10612:16;10605:23;;10171:467;;;;;;;10654:30;10680:3;10672:6;10654:30;:::i;:::-;10647:37;9516:1174;-1:-1:-1;;;;;9516:1174:1:o;11113:826::-;-1:-1:-1;;;;;11510:15:1;;;11492:34;;11562:15;;11557:2;11542:18;;11535:43;11472:3;11609:2;11594:18;;11587:31;;;11435:4;;11641:57;;11678:19;;11670:6;11641:57;:::i;:::-;11746:9;11738:6;11734:22;11729:2;11718:9;11714:18;11707:50;11780:44;11817:6;11809;11780:44;:::i;:::-;11766:58;;11873:9;11865:6;11861:22;11855:3;11844:9;11840:19;11833:51;11901:32;11926:6;11918;11901:32;:::i;:::-;11893:40;11113:826;-1:-1:-1;;;;;;;;11113:826:1:o;11944:560::-;-1:-1:-1;;;;;12241:15:1;;;12223:34;;12293:15;;12288:2;12273:18;;12266:43;12340:2;12325:18;;12318:34;;;12383:2;12368:18;;12361:34;;;12203:3;12426;12411:19;;12404:32;;;12166:4;;12453:45;;12478:19;;12470:6;12453:45;:::i;:::-;12445:53;11944:560;-1:-1:-1;;;;;;;11944:560:1:o;12509:478::-;-1:-1:-1;;;;;12734:32:1;;12716:51;;12803:2;12798;12783:18;;12776:30;;;-1:-1:-1;;12829:44:1;;12854:18;;12846:6;12829:44;:::i;:::-;12921:9;12913:6;12909:22;12904:2;12893:9;12889:18;12882:50;12949:32;12974:6;12966;12949:32;:::i;:::-;12941:40;12509:478;-1:-1:-1;;;;;;12509:478:1:o;12992:261::-;13171:2;13160:9;13153:21;13134:4;13191:56;13243:2;13232:9;13228:18;13220:6;13191:56;:::i;13258:465::-;13515:2;13504:9;13497:21;13478:4;13541:56;13593:2;13582:9;13578:18;13570:6;13541:56;:::i;:::-;13645:9;13637:6;13633:22;13628:2;13617:9;13613:18;13606:50;13673:44;13710:6;13702;13673:44;:::i;13728:1650::-;14297:3;14286:9;14279:22;14260:4;14324:57;14376:3;14365:9;14361:19;14353:6;14324:57;:::i;:::-;14400:2;14450:9;14442:6;14438:22;14433:2;14422:9;14418:18;14411:50;14484:44;14521:6;14513;14484:44;:::i;:::-;14470:58;;14576:9;14568:6;14564:22;14559:2;14548:9;14544:18;14537:50;14610:44;14647:6;14639;14610:44;:::i;:::-;14596:58;;14702:9;14694:6;14690:22;14685:2;14674:9;14670:18;14663:50;14736:44;14773:6;14765;14736:44;:::i;:::-;14722:58;;14829:9;14821:6;14817:22;14811:3;14800:9;14796:19;14789:51;14863:44;14900:6;14892;14863:44;:::i;:::-;14944:22;;;14938:3;14923:19;;14916:51;15016:13;;15038:22;;;15114:15;;;;-1:-1:-1;15076:15:1;;;;15147:1;15157:195;15171:6;15168:1;15165:13;15157:195;;;15236:13;;-1:-1:-1;;;;;15232:39:1;15220:52;;15327:15;;;;15292:12;;;;15268:1;15186:9;15157:195;;;-1:-1:-1;15369:3:1;;13728:1650;-1:-1:-1;;;;;;;;;;;13728:1650:1:o;15575:219::-;15724:2;15713:9;15706:21;15687:4;15744:44;15784:2;15773:9;15769:18;15761:6;15744:44;:::i;16220:411::-;16422:2;16404:21;;;16461:2;16441:18;;;16434:30;16500:34;16495:2;16480:18;;16473:62;-1:-1:-1;;;16566:2:1;16551:18;;16544:45;16621:3;16606:19;;16220:411::o;16636:404::-;16838:2;16820:21;;;16877:2;16857:18;;;16850:30;16916:34;16911:2;16896:18;;16889:62;-1:-1:-1;;;16982:2:1;16967:18;;16960:38;17030:3;17015:19;;16636:404::o;20633:401::-;20835:2;20817:21;;;20874:2;20854:18;;;20847:30;20913:34;20908:2;20893:18;;20886:62;-1:-1:-1;;;20979:2:1;20964:18;;20957:35;21024:3;21009:19;;20633:401::o;21039:350::-;21241:2;21223:21;;;21280:2;21260:18;;;21253:30;21319:28;21314:2;21299:18;;21292:56;21380:2;21365:18;;21039:350::o;22096:406::-;22298:2;22280:21;;;22337:2;22317:18;;;22310:30;22376:34;22371:2;22356:18;;22349:62;-1:-1:-1;;;22442:2:1;22427:18;;22420:40;22492:3;22477:19;;22096:406::o;24238:330::-;24440:2;24422:21;;;24479:1;24459:18;;;24452:29;-1:-1:-1;;;24512:2:1;24497:18;;24490:37;24559:2;24544:18;;24238:330::o;24983:334::-;25185:2;25167:21;;;25224:2;25204:18;;;25197:30;-1:-1:-1;;;25258:2:1;25243:18;;25236:40;25308:2;25293:18;;24983:334::o;28336:183::-;28396:4;-1:-1:-1;;;;;28421:6:1;28418:30;28415:56;;;28451:18;;:::i;:::-;-1:-1:-1;28496:1:1;28492:14;28508:4;28488:25;;28336:183::o;28650:128::-;28690:3;28721:1;28717:6;28714:1;28711:13;28708:39;;;28727:18;;:::i;:::-;-1:-1:-1;28763:9:1;;28650:128::o;28783:120::-;28823:1;28849;28839:35;;28854:18;;:::i;:::-;-1:-1:-1;28888:9:1;;28783:120::o;28908:168::-;28948:7;29014:1;29010;29006:6;29002:14;28999:1;28996:21;28991:1;28984:9;28977:17;28973:45;28970:71;;;29021:18;;:::i;:::-;-1:-1:-1;29061:9:1;;28908:168::o;29081:125::-;29121:4;29149:1;29146;29143:8;29140:34;;;29154:18;;:::i;:::-;-1:-1:-1;29191:9:1;;29081:125::o;29211:258::-;29283:1;29293:113;29307:6;29304:1;29301:13;29293:113;;;29383:11;;;29377:18;29364:11;;;29357:39;29329:2;29322:10;29293:113;;;29424:6;29421:1;29418:13;29415:48;;;29459:1;29450:6;29445:3;29441:16;29434:27;29415:48;;29211:258;;;:::o;29474:380::-;29553:1;29549:12;;;;29596;;;29617:61;;29671:4;29663:6;29659:17;29649:27;;29617:61;29724:2;29716:6;29713:14;29693:18;29690:38;29687:161;;;29770:10;29765:3;29761:20;29758:1;29751:31;29805:4;29802:1;29795:15;29833:4;29830:1;29823:15;29687:161;;29474:380;;;:::o;29859:249::-;29969:2;29950:13;;-1:-1:-1;;29946:27:1;29934:40;;-1:-1:-1;;;;;29989:34:1;;30025:22;;;29986:62;29983:88;;;30051:18;;:::i;:::-;30087:2;30080:22;-1:-1:-1;;29859:249:1:o;30113:135::-;30152:3;-1:-1:-1;;30173:17:1;;30170:43;;;30193:18;;:::i;:::-;-1:-1:-1;30240:1:1;30229:13;;30113:135::o;30253:112::-;30285:1;30311;30301:35;;30316:18;;:::i;:::-;-1:-1:-1;30350:9:1;;30253:112::o;30370:127::-;30431:10;30426:3;30422:20;30419:1;30412:31;30462:4;30459:1;30452:15;30486:4;30483:1;30476:15;30502:127;30563:10;30558:3;30554:20;30551:1;30544:31;30594:4;30591:1;30584:15;30618:4;30615:1;30608:15;30634:127;30695:10;30690:3;30686:20;30683:1;30676:31;30726:4;30723:1;30716:15;30750:4;30747:1;30740:15;30766:127;30827:10;30822:3;30818:20;30815:1;30808:31;30858:4;30855:1;30848:15;30882:4;30879:1;30872:15;30898:179;30933:3;30975:1;30957:16;30954:23;30951:120;;;31021:1;31018;31015;31000:23;-1:-1:-1;31058:1:1;31052:8;31047:3;31043:18;30951:120;30898:179;:::o;31082:671::-;31121:3;31163:4;31145:16;31142:26;31139:39;;;31082:671;:::o;31139:39::-;31205:2;31199:9;-1:-1:-1;;31270:16:1;31266:25;;31263:1;31199:9;31242:50;31321:4;31315:11;31345:16;-1:-1:-1;;;;;31451:2:1;31444:4;31436:6;31432:17;31429:25;31424:2;31416:6;31413:14;31410:45;31407:58;;;31458:5;;;;;31082:671;:::o;31407:58::-;31495:6;31489:4;31485:17;31474:28;;31531:3;31525:10;31558:2;31550:6;31547:14;31544:27;;;31564:5;;;;;;31082:671;:::o;31544:27::-;31648:2;31629:16;31623:4;31619:27;31615:36;31608:4;31599:6;31594:3;31590:16;31586:27;31583:69;31580:82;;;31655:5;;;;;;31082:671;:::o;31580:82::-;31671:57;31722:4;31713:6;31705;31701:19;31697:30;31691:4;31671:57;:::i;:::-;-1:-1:-1;31744:3:1;;31082:671;-1:-1:-1;;;;;31082:671:1:o;31758:131::-;-1:-1:-1;;;;;;31832:32:1;;31822:43;;31812:71;;31879:1;31876;31869:12
Swarm Source
ipfs://b7bcb5ce4d80524ccaaf88a50dd45b6442ae8865d1540df6394395ceab6fbf39
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.