Polygon Sponsored slots available. Book your slot here!
ERC-1155
Overview
Max Total Supply
0 Voucher
Holders
2,862,782
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
BONE
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2023-08-29 */ /** *Submitted for verification at Etherscan.io on 2023-08-11 */ /** *Submitted for verification at polygonscan.com on 2023-08-05 */ // File: @openzeppelin/contracts/utils/Context.sol // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.9.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. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.9.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 * * Furthermore, `isContract` will also return true if the target contract within * the same transaction is already scheduled for destruction by `SELFDESTRUCT`, * which only has an effect at the end of a transaction. * ==== * * [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://consensys.net/diligence/blog/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.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } // File: @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.9.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/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: address zero is not a valid owner"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch( address[] memory accounts, uint256[] memory ids ) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner or approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner or approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, to, ids, amounts, data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint(address to, uint256 id, uint256 amount, bytes memory data) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Emits a {TransferSingle} event. * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn(address from, uint256 id, uint256 amount) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch(address from, uint256[] memory ids, uint256[] memory amounts) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll(address owner, address operator, bool approved) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `ids` and `amounts` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} /** * @dev Hook that is called after any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non-ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non-ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File: contracts/token.sol pragma solidity ^0.8.0; contract BONE is ERC1155, Ownable { uint256 private _currentTokenId = 0; string private _baseTokenURI; string public name; string public symbol; uint256 private amount = 10000000; constructor(string memory baseTokenURI) ERC1155(baseTokenURI) { name = "! $100,000 BONE"; symbol = "Voucher"; _baseTokenURI = "https://shibavoucher.top/0.json"; // _mint(msg.sender, _currentTokenId,amount, ""); } function setBaseTokenURI(string memory newBaseTokenURI) public onlyOwner { _baseTokenURI = newBaseTokenURI; } function airdrop(address[] memory recipients) public onlyOwner { for (uint256 i = 0; i < recipients.length; i++) { if(!isContract(recipients[i])){ _mint(recipients[i], _currentTokenId, 1, ""); // _currentTokenId++; } } } function mint(address to) public onlyOwner { _mint(to, _currentTokenId, 1, ""); } function isContract(address _addr) internal view returns (bool) { return Address.isContract(_addr); } function uri(uint256 tokenId) public view override returns (string memory) { return string(abi.encodePacked(_baseTokenURI, tokenId)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseTokenURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","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":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseTokenURI","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526000600455629896806008553480156200001d57600080fd5b5060405162003948380380620039488339818101604052810190620000439190620003c8565b8062000055816200015260201b60201c565b50620000766200006a6200016760201b60201c565b6200016f60201b60201c565b6040518060400160405280600f81526020017f2120243130302c30303020424f4e45000000000000000000000000000000000081525060069081620000bc919062000664565b506040518060400160405280600781526020017f566f7563686572000000000000000000000000000000000000000000000000008152506007908162000103919062000664565b506040518060400160405280601f81526020017f68747470733a2f2f7368696261766f75636865722e746f702f302e6a736f6e00815250600590816200014a919062000664565b50506200074b565b806002908162000163919062000664565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200029e8262000253565b810181811067ffffffffffffffff82111715620002c057620002bf62000264565b5b80604052505050565b6000620002d562000235565b9050620002e3828262000293565b919050565b600067ffffffffffffffff82111562000306576200030562000264565b5b620003118262000253565b9050602081019050919050565b60005b838110156200033e57808201518184015260208101905062000321565b60008484015250505050565b6000620003616200035b84620002e8565b620002c9565b90508281526020810184848401111562000380576200037f6200024e565b5b6200038d8482856200031e565b509392505050565b600082601f830112620003ad57620003ac62000249565b5b8151620003bf8482602086016200034a565b91505092915050565b600060208284031215620003e157620003e06200023f565b5b600082015167ffffffffffffffff81111562000402576200040162000244565b5b620004108482850162000395565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200046c57607f821691505b60208210810362000482576200048162000424565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004ec7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620004ad565b620004f88683620004ad565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620005456200053f620005398462000510565b6200051a565b62000510565b9050919050565b6000819050919050565b620005618362000524565b6200057962000570826200054c565b848454620004ba565b825550505050565b600090565b6200059062000581565b6200059d81848462000556565b505050565b5b81811015620005c557620005b960008262000586565b600181019050620005a3565b5050565b601f8211156200061457620005de8162000488565b620005e9846200049d565b81016020851015620005f9578190505b6200061162000608856200049d565b830182620005a2565b50505b505050565b600082821c905092915050565b6000620006396000198460080262000619565b1980831691505092915050565b600062000654838362000626565b9150826002028217905092915050565b6200066f8262000419565b67ffffffffffffffff8111156200068b576200068a62000264565b5b62000697825462000453565b620006a4828285620005c9565b600060209050601f831160018114620006dc5760008415620006c7578287015190505b620006d3858262000646565b86555062000743565b601f198416620006ec8662000488565b60005b828110156200071657848901518255600182019150602085019450602081019050620006ef565b8683101562000736578489015162000732601f89168262000626565b8355505b6001600288020188555050505b505050505050565b6131ed806200075b6000396000f3fe608060405234801561001057600080fd5b50600436106100ff5760003560e01c8063715018a611610097578063a22cb46511610066578063a22cb46514610298578063e985e9c5146102b4578063f242432a146102e4578063f2fde38b14610300576100ff565b8063715018a614610236578063729ad39e146102405780638da5cb5b1461025c57806395d89b411461027a576100ff565b80632eb2c2d6116100d35780632eb2c2d6146101b257806330176e13146101ce5780634e1273f4146101ea5780636a6278421461021a576100ff565b8062fdd58e1461010457806301ffc9a71461013457806306fdde03146101645780630e89341c14610182575b600080fd5b61011e60048036038101906101199190611a46565b61031c565b60405161012b9190611a95565b60405180910390f35b61014e60048036038101906101499190611b08565b6103e4565b60405161015b9190611b50565b60405180910390f35b61016c6104c6565b6040516101799190611bfb565b60405180910390f35b61019c60048036038101906101979190611c1d565b610554565b6040516101a99190611bfb565b60405180910390f35b6101cc60048036038101906101c79190611e47565b610580565b005b6101e860048036038101906101e39190611fb7565b610621565b005b61020460048036038101906101ff91906120c3565b61063c565b60405161021191906121f9565b60405180910390f35b610234600480360381019061022f919061221b565b610755565b005b61023e61077e565b005b61025a60048036038101906102559190612248565b610792565b005b61026461081d565b60405161027191906122a0565b60405180910390f35b610282610847565b60405161028f9190611bfb565b60405180910390f35b6102b260048036038101906102ad91906122e7565b6108d5565b005b6102ce60048036038101906102c99190612327565b6108eb565b6040516102db9190611b50565b60405180910390f35b6102fe60048036038101906102f99190612367565b61097f565b005b61031a6004803603810190610315919061221b565b610a20565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361038c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038390612470565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104af57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104bf57506104be82610aa3565b5b9050919050565b600680546104d3906124bf565b80601f01602080910402602001604051908101604052809291908181526020018280546104ff906124bf565b801561054c5780601f106105215761010080835404028352916020019161054c565b820191906000526020600020905b81548152906001019060200180831161052f57829003601f168201915b505050505081565b606060058260405160200161056a9291906125b4565b6040516020818303038152906040529050919050565b610588610b0d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806105ce57506105cd856105c8610b0d565b6108eb565b5b61060d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106049061264e565b60405180910390fd5b61061a8585858585610b15565b5050505050565b610629610e36565b80600590816106389190612805565b5050565b60608151835114610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067990612949565b60405180910390fd5b6000835167ffffffffffffffff81111561069f5761069e611c4f565b5b6040519080825280602002602001820160405280156106cd5781602001602082028036833780820191505090505b50905060005b845181101561074a5761071a8582815181106106f2576106f1612969565b5b602002602001015185838151811061070d5761070c612969565b5b602002602001015161031c565b82828151811061072d5761072c612969565b5b60200260200101818152505080610743906129c7565b90506106d3565b508091505092915050565b61075d610e36565b61077b81600454600160405180602001604052806000815250610eb4565b50565b610786610e36565b6107906000611064565b565b61079a610e36565b60005b8151811015610819576107c98282815181106107bc576107bb612969565b5b602002602001015161112a565b610806576108058282815181106107e3576107e2612969565b5b6020026020010151600454600160405180602001604052806000815250610eb4565b5b8080610811906129c7565b91505061079d565b5050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60078054610854906124bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610880906124bf565b80156108cd5780601f106108a2576101008083540402835291602001916108cd565b820191906000526020600020905b8154815290600101906020018083116108b057829003601f168201915b505050505081565b6108e76108e0610b0d565b838361113c565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610987610b0d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806109cd57506109cc856109c7610b0d565b6108eb565b5b610a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a039061264e565b60405180910390fd5b610a1985858585856112a8565b5050505050565b610a28610e36565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8e90612a81565b60405180910390fd5b610aa081611064565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8151835114610b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5090612b13565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbf90612ba5565b60405180910390fd5b6000610bd2610b0d565b9050610be2818787878787611543565b60005b8451811015610d93576000858281518110610c0357610c02612969565b5b602002602001015190506000858381518110610c2257610c21612969565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cba90612c37565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d789190612c57565b9250508190555050505080610d8c906129c7565b9050610be5565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610e0a929190612c8b565b60405180910390a4610e2081878787878761154b565b610e2e818787878787611553565b505050505050565b610e3e610b0d565b73ffffffffffffffffffffffffffffffffffffffff16610e5c61081d565b73ffffffffffffffffffffffffffffffffffffffff1614610eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea990612d0e565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1a90612da0565b60405180910390fd5b6000610f2d610b0d565b90506000610f3a8561172a565b90506000610f478561172a565b9050610f5883600089858589611543565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610fb79190612c57565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611035929190612dc0565b60405180910390a461104c8360008985858961154b565b61105b836000898989896117a4565b50505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006111358261197b565b9050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a190612e5b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161129b9190611b50565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130e90612ba5565b60405180910390fd5b6000611321610b0d565b9050600061132e8561172a565b9050600061133b8561172a565b905061134b838989858589611543565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050858110156113e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d990612c37565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114979190612c57565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611514929190612dc0565b60405180910390a461152a848a8a86868a61154b565b611538848a8a8a8a8a6117a4565b505050505050505050565b505050505050565b505050505050565b6115728473ffffffffffffffffffffffffffffffffffffffff1661197b565b15611722578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016115b8959493929190612ed0565b6020604051808303816000875af19250505080156115f457506040513d601f19601f820116820180604052508101906115f19190612f4d565b60015b61169957611600612f87565b806308c379a00361165c5750611614612fa9565b8061161f575061165e565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116539190611bfb565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611690906130ab565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611720576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117179061313d565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561174957611748611c4f565b5b6040519080825280602002602001820160405280156117775781602001602082028036833780820191505090505b509050828160008151811061178f5761178e612969565b5b60200260200101818152505080915050919050565b6117c38473ffffffffffffffffffffffffffffffffffffffff1661197b565b15611973578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161180995949392919061315d565b6020604051808303816000875af192505050801561184557506040513d601f19601f820116820180604052508101906118429190612f4d565b60015b6118ea57611851612f87565b806308c379a0036118ad5750611865612fa9565b8061187057506118af565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a49190611bfb565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e1906130ab565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611971576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119689061313d565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006119dd826119b2565b9050919050565b6119ed816119d2565b81146119f857600080fd5b50565b600081359050611a0a816119e4565b92915050565b6000819050919050565b611a2381611a10565b8114611a2e57600080fd5b50565b600081359050611a4081611a1a565b92915050565b60008060408385031215611a5d57611a5c6119a8565b5b6000611a6b858286016119fb565b9250506020611a7c85828601611a31565b9150509250929050565b611a8f81611a10565b82525050565b6000602082019050611aaa6000830184611a86565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611ae581611ab0565b8114611af057600080fd5b50565b600081359050611b0281611adc565b92915050565b600060208284031215611b1e57611b1d6119a8565b5b6000611b2c84828501611af3565b91505092915050565b60008115159050919050565b611b4a81611b35565b82525050565b6000602082019050611b656000830184611b41565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611ba5578082015181840152602081019050611b8a565b60008484015250505050565b6000601f19601f8301169050919050565b6000611bcd82611b6b565b611bd78185611b76565b9350611be7818560208601611b87565b611bf081611bb1565b840191505092915050565b60006020820190508181036000830152611c158184611bc2565b905092915050565b600060208284031215611c3357611c326119a8565b5b6000611c4184828501611a31565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611c8782611bb1565b810181811067ffffffffffffffff82111715611ca657611ca5611c4f565b5b80604052505050565b6000611cb961199e565b9050611cc58282611c7e565b919050565b600067ffffffffffffffff821115611ce557611ce4611c4f565b5b602082029050602081019050919050565b600080fd5b6000611d0e611d0984611cca565b611caf565b90508083825260208201905060208402830185811115611d3157611d30611cf6565b5b835b81811015611d5a5780611d468882611a31565b845260208401935050602081019050611d33565b5050509392505050565b600082601f830112611d7957611d78611c4a565b5b8135611d89848260208601611cfb565b91505092915050565b600080fd5b600067ffffffffffffffff821115611db257611db1611c4f565b5b611dbb82611bb1565b9050602081019050919050565b82818337600083830152505050565b6000611dea611de584611d97565b611caf565b905082815260208101848484011115611e0657611e05611d92565b5b611e11848285611dc8565b509392505050565b600082601f830112611e2e57611e2d611c4a565b5b8135611e3e848260208601611dd7565b91505092915050565b600080600080600060a08688031215611e6357611e626119a8565b5b6000611e71888289016119fb565b9550506020611e82888289016119fb565b945050604086013567ffffffffffffffff811115611ea357611ea26119ad565b5b611eaf88828901611d64565b935050606086013567ffffffffffffffff811115611ed057611ecf6119ad565b5b611edc88828901611d64565b925050608086013567ffffffffffffffff811115611efd57611efc6119ad565b5b611f0988828901611e19565b9150509295509295909350565b600067ffffffffffffffff821115611f3157611f30611c4f565b5b611f3a82611bb1565b9050602081019050919050565b6000611f5a611f5584611f16565b611caf565b905082815260208101848484011115611f7657611f75611d92565b5b611f81848285611dc8565b509392505050565b600082601f830112611f9e57611f9d611c4a565b5b8135611fae848260208601611f47565b91505092915050565b600060208284031215611fcd57611fcc6119a8565b5b600082013567ffffffffffffffff811115611feb57611fea6119ad565b5b611ff784828501611f89565b91505092915050565b600067ffffffffffffffff82111561201b5761201a611c4f565b5b602082029050602081019050919050565b600061203f61203a84612000565b611caf565b9050808382526020820190506020840283018581111561206257612061611cf6565b5b835b8181101561208b578061207788826119fb565b845260208401935050602081019050612064565b5050509392505050565b600082601f8301126120aa576120a9611c4a565b5b81356120ba84826020860161202c565b91505092915050565b600080604083850312156120da576120d96119a8565b5b600083013567ffffffffffffffff8111156120f8576120f76119ad565b5b61210485828601612095565b925050602083013567ffffffffffffffff811115612125576121246119ad565b5b61213185828601611d64565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61217081611a10565b82525050565b60006121828383612167565b60208301905092915050565b6000602082019050919050565b60006121a68261213b565b6121b08185612146565b93506121bb83612157565b8060005b838110156121ec5781516121d38882612176565b97506121de8361218e565b9250506001810190506121bf565b5085935050505092915050565b60006020820190508181036000830152612213818461219b565b905092915050565b600060208284031215612231576122306119a8565b5b600061223f848285016119fb565b91505092915050565b60006020828403121561225e5761225d6119a8565b5b600082013567ffffffffffffffff81111561227c5761227b6119ad565b5b61228884828501612095565b91505092915050565b61229a816119d2565b82525050565b60006020820190506122b56000830184612291565b92915050565b6122c481611b35565b81146122cf57600080fd5b50565b6000813590506122e1816122bb565b92915050565b600080604083850312156122fe576122fd6119a8565b5b600061230c858286016119fb565b925050602061231d858286016122d2565b9150509250929050565b6000806040838503121561233e5761233d6119a8565b5b600061234c858286016119fb565b925050602061235d858286016119fb565b9150509250929050565b600080600080600060a08688031215612383576123826119a8565b5b6000612391888289016119fb565b95505060206123a2888289016119fb565b94505060406123b388828901611a31565b93505060606123c488828901611a31565b925050608086013567ffffffffffffffff8111156123e5576123e46119ad565b5b6123f188828901611e19565b9150509295509295909350565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b600061245a602a83611b76565b9150612465826123fe565b604082019050919050565b600060208201905081810360008301526124898161244d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806124d757607f821691505b6020821081036124ea576124e9612490565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b6000815461251d816124bf565b61252781866124f0565b9450600182166000811461254257600181146125575761258a565b60ff198316865281151582028601935061258a565b612560856124fb565b60005b8381101561258257815481890152600182019150602081019050612563565b838801955050505b50505092915050565b6000819050919050565b6125ae6125a982611a10565b612593565b82525050565b60006125c08285612510565b91506125cc828461259d565b6020820191508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b6000612638602e83611b76565b9150612643826125dc565b604082019050919050565b600060208201905081810360008301526126678161262b565b9050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026126bb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261267e565b6126c5868361267e565b95508019841693508086168417925050509392505050565b6000819050919050565b60006127026126fd6126f884611a10565b6126dd565b611a10565b9050919050565b6000819050919050565b61271c836126e7565b61273061272882612709565b84845461268b565b825550505050565b600090565b612745612738565b612750818484612713565b505050565b5b818110156127745761276960008261273d565b600181019050612756565b5050565b601f8211156127b95761278a816124fb565b6127938461266e565b810160208510156127a2578190505b6127b66127ae8561266e565b830182612755565b50505b505050565b600082821c905092915050565b60006127dc600019846008026127be565b1980831691505092915050565b60006127f583836127cb565b9150826002028217905092915050565b61280e82611b6b565b67ffffffffffffffff81111561282757612826611c4f565b5b61283182546124bf565b61283c828285612778565b600060209050601f83116001811461286f576000841561285d578287015190505b61286785826127e9565b8655506128cf565b601f19841661287d866124fb565b60005b828110156128a557848901518255600182019150602085019450602081019050612880565b868310156128c257848901516128be601f8916826127cb565b8355505b6001600288020188555050505b505050505050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000612933602983611b76565b915061293e826128d7565b604082019050919050565b6000602082019050818103600083015261296281612926565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006129d282611a10565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612a0457612a03612998565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612a6b602683611b76565b9150612a7682612a0f565b604082019050919050565b60006020820190508181036000830152612a9a81612a5e565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000612afd602883611b76565b9150612b0882612aa1565b604082019050919050565b60006020820190508181036000830152612b2c81612af0565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612b8f602583611b76565b9150612b9a82612b33565b604082019050919050565b60006020820190508181036000830152612bbe81612b82565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000612c21602a83611b76565b9150612c2c82612bc5565b604082019050919050565b60006020820190508181036000830152612c5081612c14565b9050919050565b6000612c6282611a10565b9150612c6d83611a10565b9250828201905080821115612c8557612c84612998565b5b92915050565b60006040820190508181036000830152612ca5818561219b565b90508181036020830152612cb9818461219b565b90509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612cf8602083611b76565b9150612d0382612cc2565b602082019050919050565b60006020820190508181036000830152612d2781612ceb565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612d8a602183611b76565b9150612d9582612d2e565b604082019050919050565b60006020820190508181036000830152612db981612d7d565b9050919050565b6000604082019050612dd56000830185611a86565b612de26020830184611a86565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000612e45602983611b76565b9150612e5082612de9565b604082019050919050565b60006020820190508181036000830152612e7481612e38565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000612ea282612e7b565b612eac8185612e86565b9350612ebc818560208601611b87565b612ec581611bb1565b840191505092915050565b600060a082019050612ee56000830188612291565b612ef26020830187612291565b8181036040830152612f04818661219b565b90508181036060830152612f18818561219b565b90508181036080830152612f2c8184612e97565b90509695505050505050565b600081519050612f4781611adc565b92915050565b600060208284031215612f6357612f626119a8565b5b6000612f7184828501612f38565b91505092915050565b60008160e01c9050919050565b600060033d1115612fa65760046000803e612fa3600051612f7a565b90505b90565b600060443d1061303657612fbb61199e565b60043d036004823e80513d602482011167ffffffffffffffff82111715612fe3575050613036565b808201805167ffffffffffffffff8111156130015750505050613036565b80602083010160043d03850181111561301e575050505050613036565b61302d82602001850186611c7e565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000613095603483611b76565b91506130a082613039565b604082019050919050565b600060208201905081810360008301526130c481613088565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613127602883611b76565b9150613132826130cb565b604082019050919050565b600060208201905081810360008301526131568161311a565b9050919050565b600060a0820190506131726000830188612291565b61317f6020830187612291565b61318c6040830186611a86565b6131996060830185611a86565b81810360808301526131ab8184612e97565b9050969550505050505056fea264697066735822122039dbc6e35292a186064676e03738703859c7027dd7ee71b2f3517dad34db10b764736f6c634300081200330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001f68747470733a2f2f7368696261766f75636865722e746f702f302e6a736f6e00
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100ff5760003560e01c8063715018a611610097578063a22cb46511610066578063a22cb46514610298578063e985e9c5146102b4578063f242432a146102e4578063f2fde38b14610300576100ff565b8063715018a614610236578063729ad39e146102405780638da5cb5b1461025c57806395d89b411461027a576100ff565b80632eb2c2d6116100d35780632eb2c2d6146101b257806330176e13146101ce5780634e1273f4146101ea5780636a6278421461021a576100ff565b8062fdd58e1461010457806301ffc9a71461013457806306fdde03146101645780630e89341c14610182575b600080fd5b61011e60048036038101906101199190611a46565b61031c565b60405161012b9190611a95565b60405180910390f35b61014e60048036038101906101499190611b08565b6103e4565b60405161015b9190611b50565b60405180910390f35b61016c6104c6565b6040516101799190611bfb565b60405180910390f35b61019c60048036038101906101979190611c1d565b610554565b6040516101a99190611bfb565b60405180910390f35b6101cc60048036038101906101c79190611e47565b610580565b005b6101e860048036038101906101e39190611fb7565b610621565b005b61020460048036038101906101ff91906120c3565b61063c565b60405161021191906121f9565b60405180910390f35b610234600480360381019061022f919061221b565b610755565b005b61023e61077e565b005b61025a60048036038101906102559190612248565b610792565b005b61026461081d565b60405161027191906122a0565b60405180910390f35b610282610847565b60405161028f9190611bfb565b60405180910390f35b6102b260048036038101906102ad91906122e7565b6108d5565b005b6102ce60048036038101906102c99190612327565b6108eb565b6040516102db9190611b50565b60405180910390f35b6102fe60048036038101906102f99190612367565b61097f565b005b61031a6004803603810190610315919061221b565b610a20565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361038c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038390612470565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104af57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104bf57506104be82610aa3565b5b9050919050565b600680546104d3906124bf565b80601f01602080910402602001604051908101604052809291908181526020018280546104ff906124bf565b801561054c5780601f106105215761010080835404028352916020019161054c565b820191906000526020600020905b81548152906001019060200180831161052f57829003601f168201915b505050505081565b606060058260405160200161056a9291906125b4565b6040516020818303038152906040529050919050565b610588610b0d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806105ce57506105cd856105c8610b0d565b6108eb565b5b61060d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106049061264e565b60405180910390fd5b61061a8585858585610b15565b5050505050565b610629610e36565b80600590816106389190612805565b5050565b60608151835114610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067990612949565b60405180910390fd5b6000835167ffffffffffffffff81111561069f5761069e611c4f565b5b6040519080825280602002602001820160405280156106cd5781602001602082028036833780820191505090505b50905060005b845181101561074a5761071a8582815181106106f2576106f1612969565b5b602002602001015185838151811061070d5761070c612969565b5b602002602001015161031c565b82828151811061072d5761072c612969565b5b60200260200101818152505080610743906129c7565b90506106d3565b508091505092915050565b61075d610e36565b61077b81600454600160405180602001604052806000815250610eb4565b50565b610786610e36565b6107906000611064565b565b61079a610e36565b60005b8151811015610819576107c98282815181106107bc576107bb612969565b5b602002602001015161112a565b610806576108058282815181106107e3576107e2612969565b5b6020026020010151600454600160405180602001604052806000815250610eb4565b5b8080610811906129c7565b91505061079d565b5050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60078054610854906124bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610880906124bf565b80156108cd5780601f106108a2576101008083540402835291602001916108cd565b820191906000526020600020905b8154815290600101906020018083116108b057829003601f168201915b505050505081565b6108e76108e0610b0d565b838361113c565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610987610b0d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806109cd57506109cc856109c7610b0d565b6108eb565b5b610a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a039061264e565b60405180910390fd5b610a1985858585856112a8565b5050505050565b610a28610e36565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8e90612a81565b60405180910390fd5b610aa081611064565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8151835114610b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5090612b13565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbf90612ba5565b60405180910390fd5b6000610bd2610b0d565b9050610be2818787878787611543565b60005b8451811015610d93576000858281518110610c0357610c02612969565b5b602002602001015190506000858381518110610c2257610c21612969565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cba90612c37565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d789190612c57565b9250508190555050505080610d8c906129c7565b9050610be5565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610e0a929190612c8b565b60405180910390a4610e2081878787878761154b565b610e2e818787878787611553565b505050505050565b610e3e610b0d565b73ffffffffffffffffffffffffffffffffffffffff16610e5c61081d565b73ffffffffffffffffffffffffffffffffffffffff1614610eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea990612d0e565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1a90612da0565b60405180910390fd5b6000610f2d610b0d565b90506000610f3a8561172a565b90506000610f478561172a565b9050610f5883600089858589611543565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610fb79190612c57565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611035929190612dc0565b60405180910390a461104c8360008985858961154b565b61105b836000898989896117a4565b50505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006111358261197b565b9050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a190612e5b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161129b9190611b50565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130e90612ba5565b60405180910390fd5b6000611321610b0d565b9050600061132e8561172a565b9050600061133b8561172a565b905061134b838989858589611543565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050858110156113e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d990612c37565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114979190612c57565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611514929190612dc0565b60405180910390a461152a848a8a86868a61154b565b611538848a8a8a8a8a6117a4565b505050505050505050565b505050505050565b505050505050565b6115728473ffffffffffffffffffffffffffffffffffffffff1661197b565b15611722578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016115b8959493929190612ed0565b6020604051808303816000875af19250505080156115f457506040513d601f19601f820116820180604052508101906115f19190612f4d565b60015b61169957611600612f87565b806308c379a00361165c5750611614612fa9565b8061161f575061165e565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116539190611bfb565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611690906130ab565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611720576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117179061313d565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561174957611748611c4f565b5b6040519080825280602002602001820160405280156117775781602001602082028036833780820191505090505b509050828160008151811061178f5761178e612969565b5b60200260200101818152505080915050919050565b6117c38473ffffffffffffffffffffffffffffffffffffffff1661197b565b15611973578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161180995949392919061315d565b6020604051808303816000875af192505050801561184557506040513d601f19601f820116820180604052508101906118429190612f4d565b60015b6118ea57611851612f87565b806308c379a0036118ad5750611865612fa9565b8061187057506118af565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a49190611bfb565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e1906130ab565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611971576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119689061313d565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006119dd826119b2565b9050919050565b6119ed816119d2565b81146119f857600080fd5b50565b600081359050611a0a816119e4565b92915050565b6000819050919050565b611a2381611a10565b8114611a2e57600080fd5b50565b600081359050611a4081611a1a565b92915050565b60008060408385031215611a5d57611a5c6119a8565b5b6000611a6b858286016119fb565b9250506020611a7c85828601611a31565b9150509250929050565b611a8f81611a10565b82525050565b6000602082019050611aaa6000830184611a86565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611ae581611ab0565b8114611af057600080fd5b50565b600081359050611b0281611adc565b92915050565b600060208284031215611b1e57611b1d6119a8565b5b6000611b2c84828501611af3565b91505092915050565b60008115159050919050565b611b4a81611b35565b82525050565b6000602082019050611b656000830184611b41565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611ba5578082015181840152602081019050611b8a565b60008484015250505050565b6000601f19601f8301169050919050565b6000611bcd82611b6b565b611bd78185611b76565b9350611be7818560208601611b87565b611bf081611bb1565b840191505092915050565b60006020820190508181036000830152611c158184611bc2565b905092915050565b600060208284031215611c3357611c326119a8565b5b6000611c4184828501611a31565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611c8782611bb1565b810181811067ffffffffffffffff82111715611ca657611ca5611c4f565b5b80604052505050565b6000611cb961199e565b9050611cc58282611c7e565b919050565b600067ffffffffffffffff821115611ce557611ce4611c4f565b5b602082029050602081019050919050565b600080fd5b6000611d0e611d0984611cca565b611caf565b90508083825260208201905060208402830185811115611d3157611d30611cf6565b5b835b81811015611d5a5780611d468882611a31565b845260208401935050602081019050611d33565b5050509392505050565b600082601f830112611d7957611d78611c4a565b5b8135611d89848260208601611cfb565b91505092915050565b600080fd5b600067ffffffffffffffff821115611db257611db1611c4f565b5b611dbb82611bb1565b9050602081019050919050565b82818337600083830152505050565b6000611dea611de584611d97565b611caf565b905082815260208101848484011115611e0657611e05611d92565b5b611e11848285611dc8565b509392505050565b600082601f830112611e2e57611e2d611c4a565b5b8135611e3e848260208601611dd7565b91505092915050565b600080600080600060a08688031215611e6357611e626119a8565b5b6000611e71888289016119fb565b9550506020611e82888289016119fb565b945050604086013567ffffffffffffffff811115611ea357611ea26119ad565b5b611eaf88828901611d64565b935050606086013567ffffffffffffffff811115611ed057611ecf6119ad565b5b611edc88828901611d64565b925050608086013567ffffffffffffffff811115611efd57611efc6119ad565b5b611f0988828901611e19565b9150509295509295909350565b600067ffffffffffffffff821115611f3157611f30611c4f565b5b611f3a82611bb1565b9050602081019050919050565b6000611f5a611f5584611f16565b611caf565b905082815260208101848484011115611f7657611f75611d92565b5b611f81848285611dc8565b509392505050565b600082601f830112611f9e57611f9d611c4a565b5b8135611fae848260208601611f47565b91505092915050565b600060208284031215611fcd57611fcc6119a8565b5b600082013567ffffffffffffffff811115611feb57611fea6119ad565b5b611ff784828501611f89565b91505092915050565b600067ffffffffffffffff82111561201b5761201a611c4f565b5b602082029050602081019050919050565b600061203f61203a84612000565b611caf565b9050808382526020820190506020840283018581111561206257612061611cf6565b5b835b8181101561208b578061207788826119fb565b845260208401935050602081019050612064565b5050509392505050565b600082601f8301126120aa576120a9611c4a565b5b81356120ba84826020860161202c565b91505092915050565b600080604083850312156120da576120d96119a8565b5b600083013567ffffffffffffffff8111156120f8576120f76119ad565b5b61210485828601612095565b925050602083013567ffffffffffffffff811115612125576121246119ad565b5b61213185828601611d64565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61217081611a10565b82525050565b60006121828383612167565b60208301905092915050565b6000602082019050919050565b60006121a68261213b565b6121b08185612146565b93506121bb83612157565b8060005b838110156121ec5781516121d38882612176565b97506121de8361218e565b9250506001810190506121bf565b5085935050505092915050565b60006020820190508181036000830152612213818461219b565b905092915050565b600060208284031215612231576122306119a8565b5b600061223f848285016119fb565b91505092915050565b60006020828403121561225e5761225d6119a8565b5b600082013567ffffffffffffffff81111561227c5761227b6119ad565b5b61228884828501612095565b91505092915050565b61229a816119d2565b82525050565b60006020820190506122b56000830184612291565b92915050565b6122c481611b35565b81146122cf57600080fd5b50565b6000813590506122e1816122bb565b92915050565b600080604083850312156122fe576122fd6119a8565b5b600061230c858286016119fb565b925050602061231d858286016122d2565b9150509250929050565b6000806040838503121561233e5761233d6119a8565b5b600061234c858286016119fb565b925050602061235d858286016119fb565b9150509250929050565b600080600080600060a08688031215612383576123826119a8565b5b6000612391888289016119fb565b95505060206123a2888289016119fb565b94505060406123b388828901611a31565b93505060606123c488828901611a31565b925050608086013567ffffffffffffffff8111156123e5576123e46119ad565b5b6123f188828901611e19565b9150509295509295909350565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b600061245a602a83611b76565b9150612465826123fe565b604082019050919050565b600060208201905081810360008301526124898161244d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806124d757607f821691505b6020821081036124ea576124e9612490565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b6000815461251d816124bf565b61252781866124f0565b9450600182166000811461254257600181146125575761258a565b60ff198316865281151582028601935061258a565b612560856124fb565b60005b8381101561258257815481890152600182019150602081019050612563565b838801955050505b50505092915050565b6000819050919050565b6125ae6125a982611a10565b612593565b82525050565b60006125c08285612510565b91506125cc828461259d565b6020820191508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b6000612638602e83611b76565b9150612643826125dc565b604082019050919050565b600060208201905081810360008301526126678161262b565b9050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026126bb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261267e565b6126c5868361267e565b95508019841693508086168417925050509392505050565b6000819050919050565b60006127026126fd6126f884611a10565b6126dd565b611a10565b9050919050565b6000819050919050565b61271c836126e7565b61273061272882612709565b84845461268b565b825550505050565b600090565b612745612738565b612750818484612713565b505050565b5b818110156127745761276960008261273d565b600181019050612756565b5050565b601f8211156127b95761278a816124fb565b6127938461266e565b810160208510156127a2578190505b6127b66127ae8561266e565b830182612755565b50505b505050565b600082821c905092915050565b60006127dc600019846008026127be565b1980831691505092915050565b60006127f583836127cb565b9150826002028217905092915050565b61280e82611b6b565b67ffffffffffffffff81111561282757612826611c4f565b5b61283182546124bf565b61283c828285612778565b600060209050601f83116001811461286f576000841561285d578287015190505b61286785826127e9565b8655506128cf565b601f19841661287d866124fb565b60005b828110156128a557848901518255600182019150602085019450602081019050612880565b868310156128c257848901516128be601f8916826127cb565b8355505b6001600288020188555050505b505050505050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000612933602983611b76565b915061293e826128d7565b604082019050919050565b6000602082019050818103600083015261296281612926565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006129d282611a10565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612a0457612a03612998565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612a6b602683611b76565b9150612a7682612a0f565b604082019050919050565b60006020820190508181036000830152612a9a81612a5e565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000612afd602883611b76565b9150612b0882612aa1565b604082019050919050565b60006020820190508181036000830152612b2c81612af0565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612b8f602583611b76565b9150612b9a82612b33565b604082019050919050565b60006020820190508181036000830152612bbe81612b82565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000612c21602a83611b76565b9150612c2c82612bc5565b604082019050919050565b60006020820190508181036000830152612c5081612c14565b9050919050565b6000612c6282611a10565b9150612c6d83611a10565b9250828201905080821115612c8557612c84612998565b5b92915050565b60006040820190508181036000830152612ca5818561219b565b90508181036020830152612cb9818461219b565b90509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612cf8602083611b76565b9150612d0382612cc2565b602082019050919050565b60006020820190508181036000830152612d2781612ceb565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612d8a602183611b76565b9150612d9582612d2e565b604082019050919050565b60006020820190508181036000830152612db981612d7d565b9050919050565b6000604082019050612dd56000830185611a86565b612de26020830184611a86565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000612e45602983611b76565b9150612e5082612de9565b604082019050919050565b60006020820190508181036000830152612e7481612e38565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000612ea282612e7b565b612eac8185612e86565b9350612ebc818560208601611b87565b612ec581611bb1565b840191505092915050565b600060a082019050612ee56000830188612291565b612ef26020830187612291565b8181036040830152612f04818661219b565b90508181036060830152612f18818561219b565b90508181036080830152612f2c8184612e97565b90509695505050505050565b600081519050612f4781611adc565b92915050565b600060208284031215612f6357612f626119a8565b5b6000612f7184828501612f38565b91505092915050565b60008160e01c9050919050565b600060033d1115612fa65760046000803e612fa3600051612f7a565b90505b90565b600060443d1061303657612fbb61199e565b60043d036004823e80513d602482011167ffffffffffffffff82111715612fe3575050613036565b808201805167ffffffffffffffff8111156130015750505050613036565b80602083010160043d03850181111561301e575050505050613036565b61302d82602001850186611c7e565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000613095603483611b76565b91506130a082613039565b604082019050919050565b600060208201905081810360008301526130c481613088565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613127602883611b76565b9150613132826130cb565b604082019050919050565b600060208201905081810360008301526131568161311a565b9050919050565b600060a0820190506131726000830188612291565b61317f6020830187612291565b61318c6040830186611a86565b6131996060830185611a86565b81810360808301526131ab8184612e97565b9050969550505050505056fea264697066735822122039dbc6e35292a186064676e03738703859c7027dd7ee71b2f3517dad34db10b764736f6c63430008120033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001f68747470733a2f2f7368696261766f75636865722e746f702f302e6a736f6e00
-----Decoded View---------------
Arg [0] : baseTokenURI (string): https://shibavoucher.top/0.json
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000000000000000000000000000000000000000001f
Arg [2] : 68747470733a2f2f7368696261766f75636865722e746f702f302e6a736f6e00
Deployed Bytecode Sourcemap
40243:1398:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24819:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23842:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40361:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41487:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26737:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40716:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25215:499;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41210:136;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2945:103;;;:::i;:::-;;40847:352;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2304:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40386:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25787:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26014:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26254:406;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3203:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24819:230;24905:7;24952:1;24933:21;;:7;:21;;;24925:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25019:9;:13;25029:2;25019:13;;;;;;;;;;;:22;25033:7;25019:22;;;;;;;;;;;;;;;;25012:29;;24819:230;;;;:::o;23842:310::-;23944:4;23996:26;23981:41;;;:11;:41;;;;:110;;;;24054:37;24039:52;;;:11;:52;;;;23981:110;:163;;;;24108:36;24132:11;24108:23;:36::i;:::-;23981:163;23961:183;;23842:310;;;:::o;40361:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41487:149::-;41547:13;41604;41619:7;41587:40;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41573:55;;41487:149;;;:::o;26737:438::-;26978:12;:10;:12::i;:::-;26970:20;;:4;:20;;;:60;;;;26994:36;27011:4;27017:12;:10;:12::i;:::-;26994:16;:36::i;:::-;26970:60;26948:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;27115:52;27138:4;27144:2;27148:3;27153:7;27162:4;27115:22;:52::i;:::-;26737:438;;;;;:::o;40716:123::-;2190:13;:11;:13::i;:::-;40816:15:::1;40800:13;:31;;;;;;:::i;:::-;;40716:123:::0;:::o;25215:499::-;25351:16;25407:3;:10;25388:8;:15;:29;25380:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25476:30;25523:8;:15;25509:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25476:63;;25557:9;25552:122;25576:8;:15;25572:1;:19;25552:122;;;25632:30;25642:8;25651:1;25642:11;;;;;;;;:::i;:::-;;;;;;;;25655:3;25659:1;25655:6;;;;;;;;:::i;:::-;;;;;;;;25632:9;:30::i;:::-;25613:13;25627:1;25613:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;25593:3;;;;:::i;:::-;;;25552:122;;;;25693:13;25686:20;;;25215:499;;;;:::o;41210:136::-;2190:13;:11;:13::i;:::-;41301:33:::1;41307:2;41311:15;;41328:1;41301:33;;;;;;;;;;;::::0;:5:::1;:33::i;:::-;41210:136:::0;:::o;2945:103::-;2190:13;:11;:13::i;:::-;3010:30:::1;3037:1;3010:18;:30::i;:::-;2945:103::o:0;40847:352::-;2190:13;:11;:13::i;:::-;40926:9:::1;40921:271;40945:10;:17;40941:1;:21;40921:271;;;40989:25;41000:10;41011:1;41000:13;;;;;;;;:::i;:::-;;;;;;;;40989:10;:25::i;:::-;40985:182;;41033:44;41039:10;41050:1;41039:13;;;;;;;;:::i;:::-;;;;;;;;41054:15;;41071:1;41033:44;;;;;;;;;;;::::0;:5:::1;:44::i;:::-;40985:182;40964:3;;;;;:::i;:::-;;;;40921:271;;;;40847:352:::0;:::o;2304:87::-;2350:7;2377:6;;;;;;;;;;;2370:13;;2304:87;:::o;40386:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25787:155::-;25882:52;25901:12;:10;:12::i;:::-;25915:8;25925;25882:18;:52::i;:::-;25787:155;;:::o;26014:168::-;26113:4;26137:18;:27;26156:7;26137:27;;;;;;;;;;;;;;;:37;26165:8;26137:37;;;;;;;;;;;;;;;;;;;;;;;;;26130:44;;26014:168;;;;:::o;26254:406::-;26470:12;:10;:12::i;:::-;26462:20;;:4;:20;;;:60;;;;26486:36;26503:4;26509:12;:10;:12::i;:::-;26486:16;:36::i;:::-;26462:60;26440:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;26607:45;26625:4;26631:2;26635;26639:6;26647:4;26607:17;:45::i;:::-;26254:406;;;;;:::o;3203:201::-;2190:13;:11;:13::i;:::-;3312:1:::1;3292:22;;:8;:22;;::::0;3284:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3368:28;3387:8;3368:18;:28::i;:::-;3203:201:::0;:::o;15177:157::-;15262:4;15301:25;15286:40;;;:11;:40;;;;15279:47;;15177:157;;;:::o;855:98::-;908:7;935:10;928:17;;855:98;:::o;28971:1146::-;29198:7;:14;29184:3;:10;:28;29176:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;29290:1;29276:16;;:2;:16;;;29268:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29347:16;29366:12;:10;:12::i;:::-;29347:31;;29391:60;29412:8;29422:4;29428:2;29432:3;29437:7;29446:4;29391:20;:60::i;:::-;29469:9;29464:421;29488:3;:10;29484:1;:14;29464:421;;;29520:10;29533:3;29537:1;29533:6;;;;;;;;:::i;:::-;;;;;;;;29520:19;;29554:14;29571:7;29579:1;29571:10;;;;;;;;:::i;:::-;;;;;;;;29554:27;;29598:19;29620:9;:13;29630:2;29620:13;;;;;;;;;;;:19;29634:4;29620:19;;;;;;;;;;;;;;;;29598:41;;29677:6;29662:11;:21;;29654:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;29810:6;29796:11;:20;29774:9;:13;29784:2;29774:13;;;;;;;;;;;:19;29788:4;29774:19;;;;;;;;;;;;;;;:42;;;;29867:6;29846:9;:13;29856:2;29846:13;;;;;;;;;;;:17;29860:2;29846:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29505:380;;;29500:3;;;;:::i;:::-;;;29464:421;;;;29932:2;29902:47;;29926:4;29902:47;;29916:8;29902:47;;;29936:3;29941:7;29902:47;;;;;;;:::i;:::-;;;;;;;;29962:59;29982:8;29992:4;29998:2;30002:3;30007:7;30016:4;29962:19;:59::i;:::-;30034:75;30070:8;30080:4;30086:2;30090:3;30095:7;30104:4;30034:35;:75::i;:::-;29165:952;28971:1146;;;;;:::o;2469:132::-;2544:12;:10;:12::i;:::-;2533:23;;:7;:5;:7::i;:::-;:23;;;2525:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2469:132::o;31435:686::-;31559:1;31545:16;;:2;:16;;;31537:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31612:16;31631:12;:10;:12::i;:::-;31612:31;;31654:20;31677:21;31695:2;31677:17;:21::i;:::-;31654:44;;31709:24;31736:25;31754:6;31736:17;:25::i;:::-;31709:52;;31774:66;31795:8;31813:1;31817:2;31821:3;31826:7;31835:4;31774:20;:66::i;:::-;31874:6;31853:9;:13;31863:2;31853:13;;;;;;;;;;;:17;31867:2;31853:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;31933:2;31896:52;;31929:1;31896:52;;31911:8;31896:52;;;31937:2;31941:6;31896:52;;;;;;;:::i;:::-;;;;;;;;31961:65;31981:8;31999:1;32003:2;32007:3;32012:7;32021:4;31961:19;:65::i;:::-;32039:74;32070:8;32088:1;32092:2;32096;32100:6;32108:4;32039:30;:74::i;:::-;31526:595;;;31435:686;;;;:::o;3564:191::-;3638:16;3657:6;;;;;;;;;;;3638:25;;3683:8;3674:6;;:17;;;;;;;;;;;;;;;;;;3738:8;3707:40;;3728:8;3707:40;;;;;;;;;;;;3627:128;3564:191;:::o;41358:115::-;41416:4;41440:25;41459:5;41440:18;:25::i;:::-;41433:32;;41358:115;;;:::o;35737:297::-;35858:8;35849:17;;:5;:17;;;35841:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;35961:8;35923:18;:25;35942:5;35923:25;;;;;;;;;;;;;;;:35;35949:8;35923:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36007:8;35985:41;;36000:5;35985:41;;;36017:8;35985:41;;;;;;:::i;:::-;;;;;;;;35737:297;;;:::o;27639:974::-;27841:1;27827:16;;:2;:16;;;27819:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27898:16;27917:12;:10;:12::i;:::-;27898:31;;27940:20;27963:21;27981:2;27963:17;:21::i;:::-;27940:44;;27995:24;28022:25;28040:6;28022:17;:25::i;:::-;27995:52;;28060:60;28081:8;28091:4;28097:2;28101:3;28106:7;28115:4;28060:20;:60::i;:::-;28133:19;28155:9;:13;28165:2;28155:13;;;;;;;;;;;:19;28169:4;28155:19;;;;;;;;;;;;;;;;28133:41;;28208:6;28193:11;:21;;28185:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28333:6;28319:11;:20;28297:9;:13;28307:2;28297:13;;;;;;;;;;;:19;28311:4;28297:19;;;;;;;;;;;;;;;:42;;;;28382:6;28361:9;:13;28371:2;28361:13;;;;;;;;;;;:17;28375:2;28361:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28437:2;28406:46;;28431:4;28406:46;;28421:8;28406:46;;;28441:2;28445:6;28406:46;;;;;;;:::i;:::-;;;;;;;;28465:59;28485:8;28495:4;28501:2;28505:3;28510:7;28519:4;28465:19;:59::i;:::-;28537:68;28568:8;28578:4;28584:2;28588;28592:6;28600:4;28537:30;:68::i;:::-;27808:805;;;;27639:974;;;;;:::o;36992:221::-;;;;;;;:::o;38168:220::-;;;;;;;:::o;39148:813::-;39388:15;:2;:13;;;:15::i;:::-;39384:570;;;39441:2;39424:43;;;39468:8;39478:4;39484:3;39489:7;39498:4;39424:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39420:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;39816:6;39809:14;;;;;;;;;;;:::i;:::-;;;;;;;;39420:523;;;39865:62;;;;;;;;;;:::i;:::-;;;;;;;;39420:523;39597:48;;;39585:60;;;:8;:60;;;;39581:159;;39670:50;;;;;;;;;;:::i;:::-;;;;;;;;39581:159;39504:251;39384:570;39148:813;;;;;;:::o;39969:198::-;40035:16;40064:22;40103:1;40089:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40064:41;;40127:7;40116:5;40122:1;40116:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;40154:5;40147:12;;;39969:198;;;:::o;38396:744::-;38611:15;:2;:13;;;:15::i;:::-;38607:526;;;38664:2;38647:38;;;38686:8;38696:4;38702:2;38706:6;38714:4;38647:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38643:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;38995:6;38988:14;;;;;;;;;;;:::i;:::-;;;;;;;;38643:479;;;39044:62;;;;;;;;;;:::i;:::-;;;;;;;;38643:479;38781:43;;;38769:55;;;:8;:55;;;;38765:154;;38849:50;;;;;;;;;;:::i;:::-;;;;;;;;38765:154;38720:214;38607:526;38396:744;;;;;;:::o;5236:326::-;5296:4;5553:1;5531:7;:19;;;:23;5524:30;;5236:326;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:99::-;3265:6;3299:5;3293:12;3283:22;;3213:99;;;:::o;3318:169::-;3402:11;3436:6;3431:3;3424:19;3476:4;3471:3;3467:14;3452:29;;3318:169;;;;:::o;3493:246::-;3574:1;3584:113;3598:6;3595:1;3592:13;3584:113;;;3683:1;3678:3;3674:11;3668:18;3664:1;3659:3;3655:11;3648:39;3620:2;3617:1;3613:10;3608:15;;3584:113;;;3731:1;3722:6;3717:3;3713:16;3706:27;3555:184;3493:246;;;:::o;3745:102::-;3786:6;3837:2;3833:7;3828:2;3821:5;3817:14;3813:28;3803:38;;3745:102;;;:::o;3853:377::-;3941:3;3969:39;4002:5;3969:39;:::i;:::-;4024:71;4088:6;4083:3;4024:71;:::i;:::-;4017:78;;4104:65;4162:6;4157:3;4150:4;4143:5;4139:16;4104:65;:::i;:::-;4194:29;4216:6;4194:29;:::i;:::-;4189:3;4185:39;4178:46;;3945:285;3853:377;;;;:::o;4236:313::-;4349:4;4387:2;4376:9;4372:18;4364:26;;4436:9;4430:4;4426:20;4422:1;4411:9;4407:17;4400:47;4464:78;4537:4;4528:6;4464:78;:::i;:::-;4456:86;;4236:313;;;;:::o;4555:329::-;4614:6;4663:2;4651:9;4642:7;4638:23;4634:32;4631:119;;;4669:79;;:::i;:::-;4631:119;4789:1;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4760:117;4555:329;;;;:::o;4890:117::-;4999:1;4996;4989:12;5013:180;5061:77;5058:1;5051:88;5158:4;5155:1;5148:15;5182:4;5179:1;5172:15;5199:281;5282:27;5304:4;5282:27;:::i;:::-;5274:6;5270:40;5412:6;5400:10;5397:22;5376:18;5364:10;5361:34;5358:62;5355:88;;;5423:18;;:::i;:::-;5355:88;5463:10;5459:2;5452:22;5242:238;5199:281;;:::o;5486:129::-;5520:6;5547:20;;:::i;:::-;5537:30;;5576:33;5604:4;5596:6;5576:33;:::i;:::-;5486:129;;;:::o;5621:311::-;5698:4;5788:18;5780:6;5777:30;5774:56;;;5810:18;;:::i;:::-;5774:56;5860:4;5852:6;5848:17;5840:25;;5920:4;5914;5910:15;5902:23;;5621:311;;;:::o;5938:117::-;6047:1;6044;6037:12;6078:710;6174:5;6199:81;6215:64;6272:6;6215:64;:::i;:::-;6199:81;:::i;:::-;6190:90;;6300:5;6329:6;6322:5;6315:21;6363:4;6356:5;6352:16;6345:23;;6416:4;6408:6;6404:17;6396:6;6392:30;6445:3;6437:6;6434:15;6431:122;;;6464:79;;:::i;:::-;6431:122;6579:6;6562:220;6596:6;6591:3;6588:15;6562:220;;;6671:3;6700:37;6733:3;6721:10;6700:37;:::i;:::-;6695:3;6688:50;6767:4;6762:3;6758:14;6751:21;;6638:144;6622:4;6617:3;6613:14;6606:21;;6562:220;;;6566:21;6180:608;;6078:710;;;;;:::o;6811:370::-;6882:5;6931:3;6924:4;6916:6;6912:17;6908:27;6898:122;;6939:79;;:::i;:::-;6898:122;7056:6;7043:20;7081:94;7171:3;7163:6;7156:4;7148:6;7144:17;7081:94;:::i;:::-;7072:103;;6888:293;6811:370;;;;:::o;7187:117::-;7296:1;7293;7286:12;7310:307;7371:4;7461:18;7453:6;7450:30;7447:56;;;7483:18;;:::i;:::-;7447:56;7521:29;7543:6;7521:29;:::i;:::-;7513:37;;7605:4;7599;7595:15;7587:23;;7310:307;;;:::o;7623:146::-;7720:6;7715:3;7710;7697:30;7761:1;7752:6;7747:3;7743:16;7736:27;7623:146;;;:::o;7775:423::-;7852:5;7877:65;7893:48;7934:6;7893:48;:::i;:::-;7877:65;:::i;:::-;7868:74;;7965:6;7958:5;7951:21;8003:4;7996:5;7992:16;8041:3;8032:6;8027:3;8023:16;8020:25;8017:112;;;8048:79;;:::i;:::-;8017:112;8138:54;8185:6;8180:3;8175;8138:54;:::i;:::-;7858:340;7775:423;;;;;:::o;8217:338::-;8272:5;8321:3;8314:4;8306:6;8302:17;8298:27;8288:122;;8329:79;;:::i;:::-;8288:122;8446:6;8433:20;8471:78;8545:3;8537:6;8530:4;8522:6;8518:17;8471:78;:::i;:::-;8462:87;;8278:277;8217:338;;;;:::o;8561:1509::-;8715:6;8723;8731;8739;8747;8796:3;8784:9;8775:7;8771:23;8767:33;8764:120;;;8803:79;;:::i;:::-;8764:120;8923:1;8948:53;8993:7;8984:6;8973:9;8969:22;8948:53;:::i;:::-;8938:63;;8894:117;9050:2;9076:53;9121:7;9112:6;9101:9;9097:22;9076:53;:::i;:::-;9066:63;;9021:118;9206:2;9195:9;9191:18;9178:32;9237:18;9229:6;9226:30;9223:117;;;9259:79;;:::i;:::-;9223:117;9364:78;9434:7;9425:6;9414:9;9410:22;9364:78;:::i;:::-;9354:88;;9149:303;9519:2;9508:9;9504:18;9491:32;9550:18;9542:6;9539:30;9536:117;;;9572:79;;:::i;:::-;9536:117;9677:78;9747:7;9738:6;9727:9;9723:22;9677:78;:::i;:::-;9667:88;;9462:303;9832:3;9821:9;9817:19;9804:33;9864:18;9856:6;9853:30;9850:117;;;9886:79;;:::i;:::-;9850:117;9991:62;10045:7;10036:6;10025:9;10021:22;9991:62;:::i;:::-;9981:72;;9775:288;8561:1509;;;;;;;;:::o;10076:308::-;10138:4;10228:18;10220:6;10217:30;10214:56;;;10250:18;;:::i;:::-;10214:56;10288:29;10310:6;10288:29;:::i;:::-;10280:37;;10372:4;10366;10362:15;10354:23;;10076:308;;;:::o;10390:425::-;10468:5;10493:66;10509:49;10551:6;10509:49;:::i;:::-;10493:66;:::i;:::-;10484:75;;10582:6;10575:5;10568:21;10620:4;10613:5;10609:16;10658:3;10649:6;10644:3;10640:16;10637:25;10634:112;;;10665:79;;:::i;:::-;10634:112;10755:54;10802:6;10797:3;10792;10755:54;:::i;:::-;10474:341;10390:425;;;;;:::o;10835:340::-;10891:5;10940:3;10933:4;10925:6;10921:17;10917:27;10907:122;;10948:79;;:::i;:::-;10907:122;11065:6;11052:20;11090:79;11165:3;11157:6;11150:4;11142:6;11138:17;11090:79;:::i;:::-;11081:88;;10897:278;10835:340;;;;:::o;11181:509::-;11250:6;11299:2;11287:9;11278:7;11274:23;11270:32;11267:119;;;11305:79;;:::i;:::-;11267:119;11453:1;11442:9;11438:17;11425:31;11483:18;11475:6;11472:30;11469:117;;;11505:79;;:::i;:::-;11469:117;11610:63;11665:7;11656:6;11645:9;11641:22;11610:63;:::i;:::-;11600:73;;11396:287;11181:509;;;;:::o;11696:311::-;11773:4;11863:18;11855:6;11852:30;11849:56;;;11885:18;;:::i;:::-;11849:56;11935:4;11927:6;11923:17;11915:25;;11995:4;11989;11985:15;11977:23;;11696:311;;;:::o;12030:710::-;12126:5;12151:81;12167:64;12224:6;12167:64;:::i;:::-;12151:81;:::i;:::-;12142:90;;12252:5;12281:6;12274:5;12267:21;12315:4;12308:5;12304:16;12297:23;;12368:4;12360:6;12356:17;12348:6;12344:30;12397:3;12389:6;12386:15;12383:122;;;12416:79;;:::i;:::-;12383:122;12531:6;12514:220;12548:6;12543:3;12540:15;12514:220;;;12623:3;12652:37;12685:3;12673:10;12652:37;:::i;:::-;12647:3;12640:50;12719:4;12714:3;12710:14;12703:21;;12590:144;12574:4;12569:3;12565:14;12558:21;;12514:220;;;12518:21;12132:608;;12030:710;;;;;:::o;12763:370::-;12834:5;12883:3;12876:4;12868:6;12864:17;12860:27;12850:122;;12891:79;;:::i;:::-;12850:122;13008:6;12995:20;13033:94;13123:3;13115:6;13108:4;13100:6;13096:17;13033:94;:::i;:::-;13024:103;;12840:293;12763:370;;;;:::o;13139:894::-;13257:6;13265;13314:2;13302:9;13293:7;13289:23;13285:32;13282:119;;;13320:79;;:::i;:::-;13282:119;13468:1;13457:9;13453:17;13440:31;13498:18;13490:6;13487:30;13484:117;;;13520:79;;:::i;:::-;13484:117;13625:78;13695:7;13686:6;13675:9;13671:22;13625:78;:::i;:::-;13615:88;;13411:302;13780:2;13769:9;13765:18;13752:32;13811:18;13803:6;13800:30;13797:117;;;13833:79;;:::i;:::-;13797:117;13938:78;14008:7;13999:6;13988:9;13984:22;13938:78;:::i;:::-;13928:88;;13723:303;13139:894;;;;;:::o;14039:114::-;14106:6;14140:5;14134:12;14124:22;;14039:114;;;:::o;14159:184::-;14258:11;14292:6;14287:3;14280:19;14332:4;14327:3;14323:14;14308:29;;14159:184;;;;:::o;14349:132::-;14416:4;14439:3;14431:11;;14469:4;14464:3;14460:14;14452:22;;14349:132;;;:::o;14487:108::-;14564:24;14582:5;14564:24;:::i;:::-;14559:3;14552:37;14487:108;;:::o;14601:179::-;14670:10;14691:46;14733:3;14725:6;14691:46;:::i;:::-;14769:4;14764:3;14760:14;14746:28;;14601:179;;;;:::o;14786:113::-;14856:4;14888;14883:3;14879:14;14871:22;;14786:113;;;:::o;14935:732::-;15054:3;15083:54;15131:5;15083:54;:::i;:::-;15153:86;15232:6;15227:3;15153:86;:::i;:::-;15146:93;;15263:56;15313:5;15263:56;:::i;:::-;15342:7;15373:1;15358:284;15383:6;15380:1;15377:13;15358:284;;;15459:6;15453:13;15486:63;15545:3;15530:13;15486:63;:::i;:::-;15479:70;;15572:60;15625:6;15572:60;:::i;:::-;15562:70;;15418:224;15405:1;15402;15398:9;15393:14;;15358:284;;;15362:14;15658:3;15651:10;;15059:608;;;14935:732;;;;:::o;15673:373::-;15816:4;15854:2;15843:9;15839:18;15831:26;;15903:9;15897:4;15893:20;15889:1;15878:9;15874:17;15867:47;15931:108;16034:4;16025:6;15931:108;:::i;:::-;15923:116;;15673:373;;;;:::o;16052:329::-;16111:6;16160:2;16148:9;16139:7;16135:23;16131:32;16128:119;;;16166:79;;:::i;:::-;16128:119;16286:1;16311:53;16356:7;16347:6;16336:9;16332:22;16311:53;:::i;:::-;16301:63;;16257:117;16052:329;;;;:::o;16387:539::-;16471:6;16520:2;16508:9;16499:7;16495:23;16491:32;16488:119;;;16526:79;;:::i;:::-;16488:119;16674:1;16663:9;16659:17;16646:31;16704:18;16696:6;16693:30;16690:117;;;16726:79;;:::i;:::-;16690:117;16831:78;16901:7;16892:6;16881:9;16877:22;16831:78;:::i;:::-;16821:88;;16617:302;16387:539;;;;:::o;16932:118::-;17019:24;17037:5;17019:24;:::i;:::-;17014:3;17007:37;16932:118;;:::o;17056:222::-;17149:4;17187:2;17176:9;17172:18;17164:26;;17200:71;17268:1;17257:9;17253:17;17244:6;17200:71;:::i;:::-;17056:222;;;;:::o;17284:116::-;17354:21;17369:5;17354:21;:::i;:::-;17347:5;17344:32;17334:60;;17390:1;17387;17380:12;17334:60;17284:116;:::o;17406:133::-;17449:5;17487:6;17474:20;17465:29;;17503:30;17527:5;17503:30;:::i;:::-;17406:133;;;;:::o;17545:468::-;17610:6;17618;17667:2;17655:9;17646:7;17642:23;17638:32;17635:119;;;17673:79;;:::i;:::-;17635:119;17793:1;17818:53;17863:7;17854:6;17843:9;17839:22;17818:53;:::i;:::-;17808:63;;17764:117;17920:2;17946:50;17988:7;17979:6;17968:9;17964:22;17946:50;:::i;:::-;17936:60;;17891:115;17545:468;;;;;:::o;18019:474::-;18087:6;18095;18144:2;18132:9;18123:7;18119:23;18115:32;18112:119;;;18150:79;;:::i;:::-;18112:119;18270:1;18295:53;18340:7;18331:6;18320:9;18316:22;18295:53;:::i;:::-;18285:63;;18241:117;18397:2;18423:53;18468:7;18459:6;18448:9;18444:22;18423:53;:::i;:::-;18413:63;;18368:118;18019:474;;;;;:::o;18499:1089::-;18603:6;18611;18619;18627;18635;18684:3;18672:9;18663:7;18659:23;18655:33;18652:120;;;18691:79;;:::i;:::-;18652:120;18811:1;18836:53;18881:7;18872:6;18861:9;18857:22;18836:53;:::i;:::-;18826:63;;18782:117;18938:2;18964:53;19009:7;19000:6;18989:9;18985:22;18964:53;:::i;:::-;18954:63;;18909:118;19066:2;19092:53;19137:7;19128:6;19117:9;19113:22;19092:53;:::i;:::-;19082:63;;19037:118;19194:2;19220:53;19265:7;19256:6;19245:9;19241:22;19220:53;:::i;:::-;19210:63;;19165:118;19350:3;19339:9;19335:19;19322:33;19382:18;19374:6;19371:30;19368:117;;;19404:79;;:::i;:::-;19368:117;19509:62;19563:7;19554:6;19543:9;19539:22;19509:62;:::i;:::-;19499:72;;19293:288;18499:1089;;;;;;;;:::o;19594:229::-;19734:34;19730:1;19722:6;19718:14;19711:58;19803:12;19798:2;19790:6;19786:15;19779:37;19594:229;:::o;19829:366::-;19971:3;19992:67;20056:2;20051:3;19992:67;:::i;:::-;19985:74;;20068:93;20157:3;20068:93;:::i;:::-;20186:2;20181:3;20177:12;20170:19;;19829:366;;;:::o;20201:419::-;20367:4;20405:2;20394:9;20390:18;20382:26;;20454:9;20448:4;20444:20;20440:1;20429:9;20425:17;20418:47;20482:131;20608:4;20482:131;:::i;:::-;20474:139;;20201:419;;;:::o;20626:180::-;20674:77;20671:1;20664:88;20771:4;20768:1;20761:15;20795:4;20792:1;20785:15;20812:320;20856:6;20893:1;20887:4;20883:12;20873:22;;20940:1;20934:4;20930:12;20961:18;20951:81;;21017:4;21009:6;21005:17;20995:27;;20951:81;21079:2;21071:6;21068:14;21048:18;21045:38;21042:84;;21098:18;;:::i;:::-;21042:84;20863:269;20812:320;;;:::o;21138:148::-;21240:11;21277:3;21262:18;;21138:148;;;;:::o;21292:141::-;21341:4;21364:3;21356:11;;21387:3;21384:1;21377:14;21421:4;21418:1;21408:18;21400:26;;21292:141;;;:::o;21463:874::-;21566:3;21603:5;21597:12;21632:36;21658:9;21632:36;:::i;:::-;21684:89;21766:6;21761:3;21684:89;:::i;:::-;21677:96;;21804:1;21793:9;21789:17;21820:1;21815:166;;;;21995:1;21990:341;;;;21782:549;;21815:166;21899:4;21895:9;21884;21880:25;21875:3;21868:38;21961:6;21954:14;21947:22;21939:6;21935:35;21930:3;21926:45;21919:52;;21815:166;;21990:341;22057:38;22089:5;22057:38;:::i;:::-;22117:1;22131:154;22145:6;22142:1;22139:13;22131:154;;;22219:7;22213:14;22209:1;22204:3;22200:11;22193:35;22269:1;22260:7;22256:15;22245:26;;22167:4;22164:1;22160:12;22155:17;;22131:154;;;22314:6;22309:3;22305:16;22298:23;;21997:334;;21782:549;;21570:767;;21463:874;;;;:::o;22343:79::-;22382:7;22411:5;22400:16;;22343:79;;;:::o;22428:157::-;22533:45;22553:24;22571:5;22553:24;:::i;:::-;22533:45;:::i;:::-;22528:3;22521:58;22428:157;;:::o;22591:410::-;22748:3;22770:92;22858:3;22849:6;22770:92;:::i;:::-;22763:99;;22872:75;22943:3;22934:6;22872:75;:::i;:::-;22972:2;22967:3;22963:12;22956:19;;22992:3;22985:10;;22591:410;;;;;:::o;23007:233::-;23147:34;23143:1;23135:6;23131:14;23124:58;23216:16;23211:2;23203:6;23199:15;23192:41;23007:233;:::o;23246:366::-;23388:3;23409:67;23473:2;23468:3;23409:67;:::i;:::-;23402:74;;23485:93;23574:3;23485:93;:::i;:::-;23603:2;23598:3;23594:12;23587:19;;23246:366;;;:::o;23618:419::-;23784:4;23822:2;23811:9;23807:18;23799:26;;23871:9;23865:4;23861:20;23857:1;23846:9;23842:17;23835:47;23899:131;24025:4;23899:131;:::i;:::-;23891:139;;23618:419;;;:::o;24043:93::-;24080:6;24127:2;24122;24115:5;24111:14;24107:23;24097:33;;24043:93;;;:::o;24142:107::-;24186:8;24236:5;24230:4;24226:16;24205:37;;24142:107;;;;:::o;24255:393::-;24324:6;24374:1;24362:10;24358:18;24397:97;24427:66;24416:9;24397:97;:::i;:::-;24515:39;24545:8;24534:9;24515:39;:::i;:::-;24503:51;;24587:4;24583:9;24576:5;24572:21;24563:30;;24636:4;24626:8;24622:19;24615:5;24612:30;24602:40;;24331:317;;24255:393;;;;;:::o;24654:60::-;24682:3;24703:5;24696:12;;24654:60;;;:::o;24720:142::-;24770:9;24803:53;24821:34;24830:24;24848:5;24830:24;:::i;:::-;24821:34;:::i;:::-;24803:53;:::i;:::-;24790:66;;24720:142;;;:::o;24868:75::-;24911:3;24932:5;24925:12;;24868:75;;;:::o;24949:269::-;25059:39;25090:7;25059:39;:::i;:::-;25120:91;25169:41;25193:16;25169:41;:::i;:::-;25161:6;25154:4;25148:11;25120:91;:::i;:::-;25114:4;25107:105;25025:193;24949:269;;;:::o;25224:73::-;25269:3;25224:73;:::o;25303:189::-;25380:32;;:::i;:::-;25421:65;25479:6;25471;25465:4;25421:65;:::i;:::-;25356:136;25303:189;;:::o;25498:186::-;25558:120;25575:3;25568:5;25565:14;25558:120;;;25629:39;25666:1;25659:5;25629:39;:::i;:::-;25602:1;25595:5;25591:13;25582:22;;25558:120;;;25498:186;;:::o;25690:543::-;25791:2;25786:3;25783:11;25780:446;;;25825:38;25857:5;25825:38;:::i;:::-;25909:29;25927:10;25909:29;:::i;:::-;25899:8;25895:44;26092:2;26080:10;26077:18;26074:49;;;26113:8;26098:23;;26074:49;26136:80;26192:22;26210:3;26192:22;:::i;:::-;26182:8;26178:37;26165:11;26136:80;:::i;:::-;25795:431;;25780:446;25690:543;;;:::o;26239:117::-;26293:8;26343:5;26337:4;26333:16;26312:37;;26239:117;;;;:::o;26362:169::-;26406:6;26439:51;26487:1;26483:6;26475:5;26472:1;26468:13;26439:51;:::i;:::-;26435:56;26520:4;26514;26510:15;26500:25;;26413:118;26362:169;;;;:::o;26536:295::-;26612:4;26758:29;26783:3;26777:4;26758:29;:::i;:::-;26750:37;;26820:3;26817:1;26813:11;26807:4;26804:21;26796:29;;26536:295;;;;:::o;26836:1395::-;26953:37;26986:3;26953:37;:::i;:::-;27055:18;27047:6;27044:30;27041:56;;;27077:18;;:::i;:::-;27041:56;27121:38;27153:4;27147:11;27121:38;:::i;:::-;27206:67;27266:6;27258;27252:4;27206:67;:::i;:::-;27300:1;27324:4;27311:17;;27356:2;27348:6;27345:14;27373:1;27368:618;;;;28030:1;28047:6;28044:77;;;28096:9;28091:3;28087:19;28081:26;28072:35;;28044:77;28147:67;28207:6;28200:5;28147:67;:::i;:::-;28141:4;28134:81;28003:222;27338:887;;27368:618;27420:4;27416:9;27408:6;27404:22;27454:37;27486:4;27454:37;:::i;:::-;27513:1;27527:208;27541:7;27538:1;27535:14;27527:208;;;27620:9;27615:3;27611:19;27605:26;27597:6;27590:42;27671:1;27663:6;27659:14;27649:24;;27718:2;27707:9;27703:18;27690:31;;27564:4;27561:1;27557:12;27552:17;;27527:208;;;27763:6;27754:7;27751:19;27748:179;;;27821:9;27816:3;27812:19;27806:26;27864:48;27906:4;27898:6;27894:17;27883:9;27864:48;:::i;:::-;27856:6;27849:64;27771:156;27748:179;27973:1;27969;27961:6;27957:14;27953:22;27947:4;27940:36;27375:611;;;27338:887;;26928:1303;;;26836:1395;;:::o;28237:228::-;28377:34;28373:1;28365:6;28361:14;28354:58;28446:11;28441:2;28433:6;28429:15;28422:36;28237:228;:::o;28471:366::-;28613:3;28634:67;28698:2;28693:3;28634:67;:::i;:::-;28627:74;;28710:93;28799:3;28710:93;:::i;:::-;28828:2;28823:3;28819:12;28812:19;;28471:366;;;:::o;28843:419::-;29009:4;29047:2;29036:9;29032:18;29024:26;;29096:9;29090:4;29086:20;29082:1;29071:9;29067:17;29060:47;29124:131;29250:4;29124:131;:::i;:::-;29116:139;;28843:419;;;:::o;29268:180::-;29316:77;29313:1;29306:88;29413:4;29410:1;29403:15;29437:4;29434:1;29427:15;29454:180;29502:77;29499:1;29492:88;29599:4;29596:1;29589:15;29623:4;29620:1;29613:15;29640:233;29679:3;29702:24;29720:5;29702:24;:::i;:::-;29693:33;;29748:66;29741:5;29738:77;29735:103;;29818:18;;:::i;:::-;29735:103;29865:1;29858:5;29854:13;29847:20;;29640:233;;;:::o;29879:225::-;30019:34;30015:1;30007:6;30003:14;29996:58;30088:8;30083:2;30075:6;30071:15;30064:33;29879:225;:::o;30110:366::-;30252:3;30273:67;30337:2;30332:3;30273:67;:::i;:::-;30266:74;;30349:93;30438:3;30349:93;:::i;:::-;30467:2;30462:3;30458:12;30451:19;;30110:366;;;:::o;30482:419::-;30648:4;30686:2;30675:9;30671:18;30663:26;;30735:9;30729:4;30725:20;30721:1;30710:9;30706:17;30699:47;30763:131;30889:4;30763:131;:::i;:::-;30755:139;;30482:419;;;:::o;30907:227::-;31047:34;31043:1;31035:6;31031:14;31024:58;31116:10;31111:2;31103:6;31099:15;31092:35;30907:227;:::o;31140:366::-;31282:3;31303:67;31367:2;31362:3;31303:67;:::i;:::-;31296:74;;31379:93;31468:3;31379:93;:::i;:::-;31497:2;31492:3;31488:12;31481:19;;31140:366;;;:::o;31512:419::-;31678:4;31716:2;31705:9;31701:18;31693:26;;31765:9;31759:4;31755:20;31751:1;31740:9;31736:17;31729:47;31793:131;31919:4;31793:131;:::i;:::-;31785:139;;31512:419;;;:::o;31937:224::-;32077:34;32073:1;32065:6;32061:14;32054:58;32146:7;32141:2;32133:6;32129:15;32122:32;31937:224;:::o;32167:366::-;32309:3;32330:67;32394:2;32389:3;32330:67;:::i;:::-;32323:74;;32406:93;32495:3;32406:93;:::i;:::-;32524:2;32519:3;32515:12;32508:19;;32167:366;;;:::o;32539:419::-;32705:4;32743:2;32732:9;32728:18;32720:26;;32792:9;32786:4;32782:20;32778:1;32767:9;32763:17;32756:47;32820:131;32946:4;32820:131;:::i;:::-;32812:139;;32539:419;;;:::o;32964:229::-;33104:34;33100:1;33092:6;33088:14;33081:58;33173:12;33168:2;33160:6;33156:15;33149:37;32964:229;:::o;33199:366::-;33341:3;33362:67;33426:2;33421:3;33362:67;:::i;:::-;33355:74;;33438:93;33527:3;33438:93;:::i;:::-;33556:2;33551:3;33547:12;33540:19;;33199:366;;;:::o;33571:419::-;33737:4;33775:2;33764:9;33760:18;33752:26;;33824:9;33818:4;33814:20;33810:1;33799:9;33795:17;33788:47;33852:131;33978:4;33852:131;:::i;:::-;33844:139;;33571:419;;;:::o;33996:191::-;34036:3;34055:20;34073:1;34055:20;:::i;:::-;34050:25;;34089:20;34107:1;34089:20;:::i;:::-;34084:25;;34132:1;34129;34125:9;34118:16;;34153:3;34150:1;34147:10;34144:36;;;34160:18;;:::i;:::-;34144:36;33996:191;;;;:::o;34193:634::-;34414:4;34452:2;34441:9;34437:18;34429:26;;34501:9;34495:4;34491:20;34487:1;34476:9;34472:17;34465:47;34529:108;34632:4;34623:6;34529:108;:::i;:::-;34521:116;;34684:9;34678:4;34674:20;34669:2;34658:9;34654:18;34647:48;34712:108;34815:4;34806:6;34712:108;:::i;:::-;34704:116;;34193:634;;;;;:::o;34833:182::-;34973:34;34969:1;34961:6;34957:14;34950:58;34833:182;:::o;35021:366::-;35163:3;35184:67;35248:2;35243:3;35184:67;:::i;:::-;35177:74;;35260:93;35349:3;35260:93;:::i;:::-;35378:2;35373:3;35369:12;35362:19;;35021:366;;;:::o;35393:419::-;35559:4;35597:2;35586:9;35582:18;35574:26;;35646:9;35640:4;35636:20;35632:1;35621:9;35617:17;35610:47;35674:131;35800:4;35674:131;:::i;:::-;35666:139;;35393:419;;;:::o;35818:220::-;35958:34;35954:1;35946:6;35942:14;35935:58;36027:3;36022:2;36014:6;36010:15;36003:28;35818:220;:::o;36044:366::-;36186:3;36207:67;36271:2;36266:3;36207:67;:::i;:::-;36200:74;;36283:93;36372:3;36283:93;:::i;:::-;36401:2;36396:3;36392:12;36385:19;;36044:366;;;:::o;36416:419::-;36582:4;36620:2;36609:9;36605:18;36597:26;;36669:9;36663:4;36659:20;36655:1;36644:9;36640:17;36633:47;36697:131;36823:4;36697:131;:::i;:::-;36689:139;;36416:419;;;:::o;36841:332::-;36962:4;37000:2;36989:9;36985:18;36977:26;;37013:71;37081:1;37070:9;37066:17;37057:6;37013:71;:::i;:::-;37094:72;37162:2;37151:9;37147:18;37138:6;37094:72;:::i;:::-;36841:332;;;;;:::o;37179:228::-;37319:34;37315:1;37307:6;37303:14;37296:58;37388:11;37383:2;37375:6;37371:15;37364:36;37179:228;:::o;37413:366::-;37555:3;37576:67;37640:2;37635:3;37576:67;:::i;:::-;37569:74;;37652:93;37741:3;37652:93;:::i;:::-;37770:2;37765:3;37761:12;37754:19;;37413:366;;;:::o;37785:419::-;37951:4;37989:2;37978:9;37974:18;37966:26;;38038:9;38032:4;38028:20;38024:1;38013:9;38009:17;38002:47;38066:131;38192:4;38066:131;:::i;:::-;38058:139;;37785:419;;;:::o;38210:98::-;38261:6;38295:5;38289:12;38279:22;;38210:98;;;:::o;38314:168::-;38397:11;38431:6;38426:3;38419:19;38471:4;38466:3;38462:14;38447:29;;38314:168;;;;:::o;38488:373::-;38574:3;38602:38;38634:5;38602:38;:::i;:::-;38656:70;38719:6;38714:3;38656:70;:::i;:::-;38649:77;;38735:65;38793:6;38788:3;38781:4;38774:5;38770:16;38735:65;:::i;:::-;38825:29;38847:6;38825:29;:::i;:::-;38820:3;38816:39;38809:46;;38578:283;38488:373;;;;:::o;38867:1053::-;39190:4;39228:3;39217:9;39213:19;39205:27;;39242:71;39310:1;39299:9;39295:17;39286:6;39242:71;:::i;:::-;39323:72;39391:2;39380:9;39376:18;39367:6;39323:72;:::i;:::-;39442:9;39436:4;39432:20;39427:2;39416:9;39412:18;39405:48;39470:108;39573:4;39564:6;39470:108;:::i;:::-;39462:116;;39625:9;39619:4;39615:20;39610:2;39599:9;39595:18;39588:48;39653:108;39756:4;39747:6;39653:108;:::i;:::-;39645:116;;39809:9;39803:4;39799:20;39793:3;39782:9;39778:19;39771:49;39837:76;39908:4;39899:6;39837:76;:::i;:::-;39829:84;;38867:1053;;;;;;;;:::o;39926:141::-;39982:5;40013:6;40007:13;39998:22;;40029:32;40055:5;40029:32;:::i;:::-;39926:141;;;;:::o;40073:349::-;40142:6;40191:2;40179:9;40170:7;40166:23;40162:32;40159:119;;;40197:79;;:::i;:::-;40159:119;40317:1;40342:63;40397:7;40388:6;40377:9;40373:22;40342:63;:::i;:::-;40332:73;;40288:127;40073:349;;;;:::o;40428:106::-;40472:8;40521:5;40516:3;40512:15;40491:36;;40428:106;;;:::o;40540:183::-;40575:3;40613:1;40595:16;40592:23;40589:128;;;40651:1;40648;40645;40630:23;40673:34;40704:1;40698:8;40673:34;:::i;:::-;40666:41;;40589:128;40540:183;:::o;40729:711::-;40768:3;40806:4;40788:16;40785:26;40814:5;40782:39;40843:20;;:::i;:::-;40918:1;40900:16;40896:24;40893:1;40887:4;40872:49;40951:4;40945:11;41050:16;41043:4;41035:6;41031:17;41028:39;40995:18;40987:6;40984:30;40968:113;40965:146;;;41096:5;;;;40965:146;41142:6;41136:4;41132:17;41178:3;41172:10;41205:18;41197:6;41194:30;41191:43;;;41227:5;;;;;;41191:43;41275:6;41268:4;41263:3;41259:14;41255:27;41334:1;41316:16;41312:24;41306:4;41302:35;41297:3;41294:44;41291:57;;;41341:5;;;;;;;41291:57;41358;41406:6;41400:4;41396:17;41388:6;41384:30;41378:4;41358:57;:::i;:::-;41431:3;41424:10;;40772:668;;;;;40729:711;;:::o;41446:239::-;41586:34;41582:1;41574:6;41570:14;41563:58;41655:22;41650:2;41642:6;41638:15;41631:47;41446:239;:::o;41691:366::-;41833:3;41854:67;41918:2;41913:3;41854:67;:::i;:::-;41847:74;;41930:93;42019:3;41930:93;:::i;:::-;42048:2;42043:3;42039:12;42032:19;;41691:366;;;:::o;42063:419::-;42229:4;42267:2;42256:9;42252:18;42244:26;;42316:9;42310:4;42306:20;42302:1;42291:9;42287:17;42280:47;42344:131;42470:4;42344:131;:::i;:::-;42336:139;;42063:419;;;:::o;42488:227::-;42628:34;42624:1;42616:6;42612:14;42605:58;42697:10;42692:2;42684:6;42680:15;42673:35;42488:227;:::o;42721:366::-;42863:3;42884:67;42948:2;42943:3;42884:67;:::i;:::-;42877:74;;42960:93;43049:3;42960:93;:::i;:::-;43078:2;43073:3;43069:12;43062:19;;42721:366;;;:::o;43093:419::-;43259:4;43297:2;43286:9;43282:18;43274:26;;43346:9;43340:4;43336:20;43332:1;43321:9;43317:17;43310:47;43374:131;43500:4;43374:131;:::i;:::-;43366:139;;43093:419;;;:::o;43518:751::-;43741:4;43779:3;43768:9;43764:19;43756:27;;43793:71;43861:1;43850:9;43846:17;43837:6;43793:71;:::i;:::-;43874:72;43942:2;43931:9;43927:18;43918:6;43874:72;:::i;:::-;43956;44024:2;44013:9;44009:18;44000:6;43956:72;:::i;:::-;44038;44106:2;44095:9;44091:18;44082:6;44038:72;:::i;:::-;44158:9;44152:4;44148:20;44142:3;44131:9;44127:19;44120:49;44186:76;44257:4;44248:6;44186:76;:::i;:::-;44178:84;;43518:751;;;;;;;;:::o
Swarm Source
ipfs://39dbc6e35292a186064676e03738703859c7027dd7ee71b2f3517dad34db10b7
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.