Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
0 ABP
Holders
1
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 ABPLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ARABPUNKS
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-10-12 */ // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // 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/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: address zero is not a valid owner"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: invalid token ID"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { _requireMinted(tokenId); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not token owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _safeTransfer(from, to, tokenId, data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @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, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { /// @solidity memory-safe-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/extensions/ERC721Burnable.sol) pragma solidity ^0.8.0; /** * @title ERC721 Burnable Token * @dev ERC721 Token that can be burned (destroyed). */ abstract contract ERC721Burnable is Context, ERC721 { /** * @dev Burns `tokenId`. See {ERC721-_burn}. * * Requirements: * * - The caller must own `tokenId` or be an approved operator. */ function burn(uint256 tokenId) public virtual { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _burn(tokenId); } } // File: arabpunks.sol pragma solidity ^0.8.4; contract ARABPUNKS is ERC721, Ownable, ERC721Burnable { using Counters for Counters.Counter; string private URI; Counters.Counter private _tokenIdCounter; constructor() ERC721("ARABPUNKS", "ABP") {} mapping(uint => string) _tokenURIs; function _baseURI() internal view override returns (string memory) { return URI; } function tokenURI(uint256 _tokenId) public view override returns(string memory) { require(_exists(_tokenId), "ERC721Metadata: URI query for nonexistent token"); return bytes(_tokenURIs[_tokenId]).length > 0 ? string(abi.encodePacked(_tokenURIs[_tokenId])) : ""; } function _setTokenURI(uint _tokenId, string memory _tokenURI) internal { _tokenURIs[_tokenId] = _tokenURI; } function safeMint(string memory _tokenURI) public onlyOwner{ uint _tokenId = _tokenIdCounter.current(); _tokenIdCounter.increment(); _mint(msg.sender, _tokenId); _setTokenURI(_tokenId, _tokenURI); } function airdropMint(address[] memory _addresses, string[] memory _tokenURI, uint[] memory _tokenIds) external onlyOwner { require(_addresses.length == _tokenURI.length); require(_addresses.length == _tokenIds.length); uint arrayLength = _addresses.length; for(uint i = 0; i < arrayLength; ++i){ _mint(_addresses[i], _tokenIds[i]); _setTokenURI(_tokenIds[i], _tokenURI[i]); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"string[]","name":"_tokenURI","type":"string[]"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"airdropMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"safeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","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":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040518060400160405280600981526020017f4152414250554e4b5300000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4142500000000000000000000000000000000000000000000000000000000000815250816000908051906020019062000096929190620001a6565b508060019080519060200190620000af929190620001a6565b505050620000d2620000c6620000d860201b60201c565b620000e060201b60201c565b620002bb565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001b49062000256565b90600052602060002090601f016020900481019282620001d8576000855562000224565b82601f10620001f357805160ff191683800117855562000224565b8280016001018555821562000224579182015b828111156200022357825182559160200191906001019062000206565b5b50905062000233919062000237565b5090565b5b808211156200025257600081600090555060010162000238565b5090565b600060028204905060018216806200026f57607f821691505b602082108114156200028657620002856200028c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b612eec80620002cb6000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806370a08231116100ad578063a7de345211610071578063a7de3452146102f2578063b88d4fde1461030e578063c87b56dd1461032a578063e985e9c51461035a578063f2fde38b1461038a57610121565b806370a0823114610260578063715018a6146102905780638da5cb5b1461029a57806395d89b41146102b8578063a22cb465146102d657610121565b806323b872dd116100f457806323b872dd146101c057806342842e0e146101dc57806342966c68146101f85780636352211e14610214578063695850fb1461024457610121565b806301ffc9a71461012657806306fdde0314610156578063081812fc14610174578063095ea7b3146101a4575b600080fd5b610140600480360381019061013b9190612023565b6103a6565b60405161014d9190612479565b60405180910390f35b61015e610488565b60405161016b9190612494565b60405180910390f35b61018e600480360381019061018991906120c6565b61051a565b60405161019b9190612412565b60405180910390f35b6101be60048036038101906101b99190611f3c565b610560565b005b6101da60048036038101906101d59190611e26565b610678565b005b6101f660048036038101906101f19190611e26565b6106d8565b005b610212600480360381019061020d91906120c6565b6106f8565b005b61022e600480360381019061022991906120c6565b610754565b60405161023b9190612412565b60405180910390f35b61025e6004803603810190610259919061207d565b610806565b005b61027a60048036038101906102759190611db9565b61083e565b6040516102879190612676565b60405180910390f35b6102986108f6565b005b6102a261090a565b6040516102af9190612412565b60405180910390f35b6102c0610934565b6040516102cd9190612494565b60405180910390f35b6102f060048036038101906102eb9190611efc565b6109c6565b005b61030c60048036038101906103079190611f7c565b6109dc565b005b61032860048036038101906103239190611e79565b610aa5565b005b610344600480360381019061033f91906120c6565b610b07565b6040516103519190612494565b60405180910390f35b610374600480360381019061036f9190611de6565b610bc7565b6040516103819190612479565b60405180910390f35b6103a4600480360381019061039f9190611db9565b610c5b565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061047157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610481575061048082610cdf565b5b9050919050565b60606000805461049790612934565b80601f01602080910402602001604051908101604052809291908181526020018280546104c390612934565b80156105105780601f106104e557610100808354040283529160200191610510565b820191906000526020600020905b8154815290600101906020018083116104f357829003601f168201915b5050505050905090565b600061052582610d49565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061056b82610754565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156105dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d390612636565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166105fb610d94565b73ffffffffffffffffffffffffffffffffffffffff16148061062a575061062981610624610d94565b610bc7565b5b610669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066090612596565b60405180910390fd5b6106738383610d9c565b505050565b610689610683610d94565b82610e55565b6106c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bf90612656565b60405180910390fd5b6106d3838383610eea565b505050565b6106f383838360405180602001604052806000815250610aa5565b505050565b610709610703610d94565b82610e55565b610748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073f90612656565b60405180910390fd5b61075181611151565b50565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156107fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f490612616565b60405180910390fd5b80915050919050565b61080e61126e565b600061081a60086112ec565b905061082660086112fa565b6108303382611310565b61083a81836114ea565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156108af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a690612576565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6108fe61126e565b6109086000611516565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461094390612934565b80601f016020809104026020016040519081016040528092919081815260200182805461096f90612934565b80156109bc5780601f10610991576101008083540402835291602001916109bc565b820191906000526020600020905b81548152906001019060200180831161099f57829003601f168201915b5050505050905090565b6109d86109d1610d94565b83836115dc565b5050565b6109e461126e565b81518351146109f257600080fd5b8051835114610a0057600080fd5b60008351905060005b81811015610a9e57610a4f858281518110610a2757610a26612a3e565b5b6020026020010151848381518110610a4257610a41612a3e565b5b6020026020010151611310565b610a8d838281518110610a6557610a64612a3e565b5b6020026020010151858381518110610a8057610a7f612a3e565b5b60200260200101516114ea565b80610a9790612997565b9050610a09565b5050505050565b610ab6610ab0610d94565b83610e55565b610af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aec90612656565b60405180910390fd5b610b0184848484611749565b50505050565b6060610b12826117a5565b610b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b48906125f6565b60405180910390fd5b6000600960008481526020019081526020016000208054610b7190612934565b905011610b8d5760405180602001604052806000815250610bc0565b60096000838152602001908152602001600020604051602001610bb091906123fb565b6040516020818303038152906040525b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610c6361126e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cca906124d6565b60405180910390fd5b610cdc81611516565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610d52816117a5565b610d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8890612616565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610e0f83610754565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610e6183610754565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610ea35750610ea28185610bc7565b5b80610ee157508373ffffffffffffffffffffffffffffffffffffffff16610ec98461051a565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610f0a82610754565b73ffffffffffffffffffffffffffffffffffffffff1614610f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f57906124f6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc790612536565b60405180910390fd5b610fdb838383611811565b610fe6600082610d9c565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611036919061284a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461108d91906127f4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461114c838383611816565b505050565b600061115c82610754565b905061116a81600084611811565b611175600083610d9c565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111c5919061284a565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461126a81600084611816565b5050565b611276610d94565b73ffffffffffffffffffffffffffffffffffffffff1661129461090a565b73ffffffffffffffffffffffffffffffffffffffff16146112ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e1906125d6565b60405180910390fd5b565b600081600001549050919050565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611380576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611377906125b6565b60405180910390fd5b611389816117a5565b156113c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c090612516565b60405180910390fd5b6113d560008383611811565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461142591906127f4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46114e660008383611816565b5050565b806009600084815260200190815260200160002090805190602001906115119291906119d5565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561164b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164290612556565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161173c9190612479565b60405180910390a3505050565b611754848484610eea565b6117608484848461181b565b61179f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611796906124b6565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b600061183c8473ffffffffffffffffffffffffffffffffffffffff166119b2565b156119a5578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611865610d94565b8786866040518563ffffffff1660e01b8152600401611887949392919061242d565b602060405180830381600087803b1580156118a157600080fd5b505af19250505080156118d257506040513d601f19601f820116820180604052508101906118cf9190612050565b60015b611955573d8060008114611902576040519150601f19603f3d011682016040523d82523d6000602084013e611907565b606091505b5060008151141561194d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611944906124b6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506119aa565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546119e190612934565b90600052602060002090601f016020900481019282611a035760008555611a4a565b82601f10611a1c57805160ff1916838001178555611a4a565b82800160010185558215611a4a579182015b82811115611a49578251825591602001919060010190611a2e565b5b509050611a579190611a5b565b5090565b5b80821115611a74576000816000905550600101611a5c565b5090565b6000611a8b611a86846126b6565b612691565b90508083825260208201905082856020860282011115611aae57611aad612aa1565b5b60005b85811015611ade5781611ac48882611c6a565b845260208401935060208301925050600181019050611ab1565b5050509392505050565b6000611afb611af6846126e2565b612691565b90508083825260208201905082856020860282011115611b1e57611b1d612aa1565b5b60005b85811015611b6c57813567ffffffffffffffff811115611b4457611b43612a9c565b5b808601611b518982611d76565b85526020850194506020840193505050600181019050611b21565b5050509392505050565b6000611b89611b848461270e565b612691565b90508083825260208201905082856020860282011115611bac57611bab612aa1565b5b60005b85811015611bdc5781611bc28882611da4565b845260208401935060208301925050600181019050611baf565b5050509392505050565b6000611bf9611bf48461273a565b612691565b905082815260208101848484011115611c1557611c14612aa6565b5b611c208482856128f2565b509392505050565b6000611c3b611c368461276b565b612691565b905082815260208101848484011115611c5757611c56612aa6565b5b611c628482856128f2565b509392505050565b600081359050611c7981612e5a565b92915050565b600082601f830112611c9457611c93612a9c565b5b8135611ca4848260208601611a78565b91505092915050565b600082601f830112611cc257611cc1612a9c565b5b8135611cd2848260208601611ae8565b91505092915050565b600082601f830112611cf057611cef612a9c565b5b8135611d00848260208601611b76565b91505092915050565b600081359050611d1881612e71565b92915050565b600081359050611d2d81612e88565b92915050565b600081519050611d4281612e88565b92915050565b600082601f830112611d5d57611d5c612a9c565b5b8135611d6d848260208601611be6565b91505092915050565b600082601f830112611d8b57611d8a612a9c565b5b8135611d9b848260208601611c28565b91505092915050565b600081359050611db381612e9f565b92915050565b600060208284031215611dcf57611dce612ab0565b5b6000611ddd84828501611c6a565b91505092915050565b60008060408385031215611dfd57611dfc612ab0565b5b6000611e0b85828601611c6a565b9250506020611e1c85828601611c6a565b9150509250929050565b600080600060608486031215611e3f57611e3e612ab0565b5b6000611e4d86828701611c6a565b9350506020611e5e86828701611c6a565b9250506040611e6f86828701611da4565b9150509250925092565b60008060008060808587031215611e9357611e92612ab0565b5b6000611ea187828801611c6a565b9450506020611eb287828801611c6a565b9350506040611ec387828801611da4565b925050606085013567ffffffffffffffff811115611ee457611ee3612aab565b5b611ef087828801611d48565b91505092959194509250565b60008060408385031215611f1357611f12612ab0565b5b6000611f2185828601611c6a565b9250506020611f3285828601611d09565b9150509250929050565b60008060408385031215611f5357611f52612ab0565b5b6000611f6185828601611c6a565b9250506020611f7285828601611da4565b9150509250929050565b600080600060608486031215611f9557611f94612ab0565b5b600084013567ffffffffffffffff811115611fb357611fb2612aab565b5b611fbf86828701611c7f565b935050602084013567ffffffffffffffff811115611fe057611fdf612aab565b5b611fec86828701611cad565b925050604084013567ffffffffffffffff81111561200d5761200c612aab565b5b61201986828701611cdb565b9150509250925092565b60006020828403121561203957612038612ab0565b5b600061204784828501611d1e565b91505092915050565b60006020828403121561206657612065612ab0565b5b600061207484828501611d33565b91505092915050565b60006020828403121561209357612092612ab0565b5b600082013567ffffffffffffffff8111156120b1576120b0612aab565b5b6120bd84828501611d76565b91505092915050565b6000602082840312156120dc576120db612ab0565b5b60006120ea84828501611da4565b91505092915050565b6120fc8161287e565b82525050565b61210b81612890565b82525050565b600061211c826127b1565b61212681856127c7565b9350612136818560208601612901565b61213f81612ab5565b840191505092915050565b6000612155826127bc565b61215f81856127d8565b935061216f818560208601612901565b61217881612ab5565b840191505092915050565b6000815461219081612934565b61219a81866127e9565b945060018216600081146121b557600181146121c6576121f9565b60ff198316865281860193506121f9565b6121cf8561279c565b60005b838110156121f1578154818901526001820191506020810190506121d2565b838801955050505b50505092915050565b600061220f6032836127d8565b915061221a82612ac6565b604082019050919050565b60006122326026836127d8565b915061223d82612b15565b604082019050919050565b60006122556025836127d8565b915061226082612b64565b604082019050919050565b6000612278601c836127d8565b915061228382612bb3565b602082019050919050565b600061229b6024836127d8565b91506122a682612bdc565b604082019050919050565b60006122be6019836127d8565b91506122c982612c2b565b602082019050919050565b60006122e16029836127d8565b91506122ec82612c54565b604082019050919050565b6000612304603e836127d8565b915061230f82612ca3565b604082019050919050565b60006123276020836127d8565b915061233282612cf2565b602082019050919050565b600061234a6020836127d8565b915061235582612d1b565b602082019050919050565b600061236d602f836127d8565b915061237882612d44565b604082019050919050565b60006123906018836127d8565b915061239b82612d93565b602082019050919050565b60006123b36021836127d8565b91506123be82612dbc565b604082019050919050565b60006123d6602e836127d8565b91506123e182612e0b565b604082019050919050565b6123f5816128e8565b82525050565b60006124078284612183565b915081905092915050565b600060208201905061242760008301846120f3565b92915050565b600060808201905061244260008301876120f3565b61244f60208301866120f3565b61245c60408301856123ec565b818103606083015261246e8184612111565b905095945050505050565b600060208201905061248e6000830184612102565b92915050565b600060208201905081810360008301526124ae818461214a565b905092915050565b600060208201905081810360008301526124cf81612202565b9050919050565b600060208201905081810360008301526124ef81612225565b9050919050565b6000602082019050818103600083015261250f81612248565b9050919050565b6000602082019050818103600083015261252f8161226b565b9050919050565b6000602082019050818103600083015261254f8161228e565b9050919050565b6000602082019050818103600083015261256f816122b1565b9050919050565b6000602082019050818103600083015261258f816122d4565b9050919050565b600060208201905081810360008301526125af816122f7565b9050919050565b600060208201905081810360008301526125cf8161231a565b9050919050565b600060208201905081810360008301526125ef8161233d565b9050919050565b6000602082019050818103600083015261260f81612360565b9050919050565b6000602082019050818103600083015261262f81612383565b9050919050565b6000602082019050818103600083015261264f816123a6565b9050919050565b6000602082019050818103600083015261266f816123c9565b9050919050565b600060208201905061268b60008301846123ec565b92915050565b600061269b6126ac565b90506126a78282612966565b919050565b6000604051905090565b600067ffffffffffffffff8211156126d1576126d0612a6d565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156126fd576126fc612a6d565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561272957612728612a6d565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561275557612754612a6d565b5b61275e82612ab5565b9050602081019050919050565b600067ffffffffffffffff82111561278657612785612a6d565b5b61278f82612ab5565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006127ff826128e8565b915061280a836128e8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561283f5761283e6129e0565b5b828201905092915050565b6000612855826128e8565b9150612860836128e8565b925082821015612873576128726129e0565b5b828203905092915050565b6000612889826128c8565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561291f578082015181840152602081019050612904565b8381111561292e576000848401525b50505050565b6000600282049050600182168061294c57607f821691505b602082108114156129605761295f612a0f565b5b50919050565b61296f82612ab5565b810181811067ffffffffffffffff8211171561298e5761298d612a6d565b5b80604052505050565b60006129a2826128e8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156129d5576129d46129e0565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b612e638161287e565b8114612e6e57600080fd5b50565b612e7a81612890565b8114612e8557600080fd5b50565b612e918161289c565b8114612e9c57600080fd5b50565b612ea8816128e8565b8114612eb357600080fd5b5056fea2646970667358221220e26c4e3857faaf179d4d8dc9c1940fe013cc87752359855f59387b940b9b855764736f6c63430008070033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101215760003560e01c806370a08231116100ad578063a7de345211610071578063a7de3452146102f2578063b88d4fde1461030e578063c87b56dd1461032a578063e985e9c51461035a578063f2fde38b1461038a57610121565b806370a0823114610260578063715018a6146102905780638da5cb5b1461029a57806395d89b41146102b8578063a22cb465146102d657610121565b806323b872dd116100f457806323b872dd146101c057806342842e0e146101dc57806342966c68146101f85780636352211e14610214578063695850fb1461024457610121565b806301ffc9a71461012657806306fdde0314610156578063081812fc14610174578063095ea7b3146101a4575b600080fd5b610140600480360381019061013b9190612023565b6103a6565b60405161014d9190612479565b60405180910390f35b61015e610488565b60405161016b9190612494565b60405180910390f35b61018e600480360381019061018991906120c6565b61051a565b60405161019b9190612412565b60405180910390f35b6101be60048036038101906101b99190611f3c565b610560565b005b6101da60048036038101906101d59190611e26565b610678565b005b6101f660048036038101906101f19190611e26565b6106d8565b005b610212600480360381019061020d91906120c6565b6106f8565b005b61022e600480360381019061022991906120c6565b610754565b60405161023b9190612412565b60405180910390f35b61025e6004803603810190610259919061207d565b610806565b005b61027a60048036038101906102759190611db9565b61083e565b6040516102879190612676565b60405180910390f35b6102986108f6565b005b6102a261090a565b6040516102af9190612412565b60405180910390f35b6102c0610934565b6040516102cd9190612494565b60405180910390f35b6102f060048036038101906102eb9190611efc565b6109c6565b005b61030c60048036038101906103079190611f7c565b6109dc565b005b61032860048036038101906103239190611e79565b610aa5565b005b610344600480360381019061033f91906120c6565b610b07565b6040516103519190612494565b60405180910390f35b610374600480360381019061036f9190611de6565b610bc7565b6040516103819190612479565b60405180910390f35b6103a4600480360381019061039f9190611db9565b610c5b565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061047157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610481575061048082610cdf565b5b9050919050565b60606000805461049790612934565b80601f01602080910402602001604051908101604052809291908181526020018280546104c390612934565b80156105105780601f106104e557610100808354040283529160200191610510565b820191906000526020600020905b8154815290600101906020018083116104f357829003601f168201915b5050505050905090565b600061052582610d49565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061056b82610754565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156105dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d390612636565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166105fb610d94565b73ffffffffffffffffffffffffffffffffffffffff16148061062a575061062981610624610d94565b610bc7565b5b610669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066090612596565b60405180910390fd5b6106738383610d9c565b505050565b610689610683610d94565b82610e55565b6106c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bf90612656565b60405180910390fd5b6106d3838383610eea565b505050565b6106f383838360405180602001604052806000815250610aa5565b505050565b610709610703610d94565b82610e55565b610748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073f90612656565b60405180910390fd5b61075181611151565b50565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156107fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f490612616565b60405180910390fd5b80915050919050565b61080e61126e565b600061081a60086112ec565b905061082660086112fa565b6108303382611310565b61083a81836114ea565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156108af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a690612576565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6108fe61126e565b6109086000611516565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461094390612934565b80601f016020809104026020016040519081016040528092919081815260200182805461096f90612934565b80156109bc5780601f10610991576101008083540402835291602001916109bc565b820191906000526020600020905b81548152906001019060200180831161099f57829003601f168201915b5050505050905090565b6109d86109d1610d94565b83836115dc565b5050565b6109e461126e565b81518351146109f257600080fd5b8051835114610a0057600080fd5b60008351905060005b81811015610a9e57610a4f858281518110610a2757610a26612a3e565b5b6020026020010151848381518110610a4257610a41612a3e565b5b6020026020010151611310565b610a8d838281518110610a6557610a64612a3e565b5b6020026020010151858381518110610a8057610a7f612a3e565b5b60200260200101516114ea565b80610a9790612997565b9050610a09565b5050505050565b610ab6610ab0610d94565b83610e55565b610af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aec90612656565b60405180910390fd5b610b0184848484611749565b50505050565b6060610b12826117a5565b610b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b48906125f6565b60405180910390fd5b6000600960008481526020019081526020016000208054610b7190612934565b905011610b8d5760405180602001604052806000815250610bc0565b60096000838152602001908152602001600020604051602001610bb091906123fb565b6040516020818303038152906040525b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610c6361126e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cca906124d6565b60405180910390fd5b610cdc81611516565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610d52816117a5565b610d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8890612616565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610e0f83610754565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610e6183610754565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610ea35750610ea28185610bc7565b5b80610ee157508373ffffffffffffffffffffffffffffffffffffffff16610ec98461051a565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610f0a82610754565b73ffffffffffffffffffffffffffffffffffffffff1614610f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f57906124f6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc790612536565b60405180910390fd5b610fdb838383611811565b610fe6600082610d9c565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611036919061284a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461108d91906127f4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461114c838383611816565b505050565b600061115c82610754565b905061116a81600084611811565b611175600083610d9c565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111c5919061284a565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461126a81600084611816565b5050565b611276610d94565b73ffffffffffffffffffffffffffffffffffffffff1661129461090a565b73ffffffffffffffffffffffffffffffffffffffff16146112ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e1906125d6565b60405180910390fd5b565b600081600001549050919050565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611380576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611377906125b6565b60405180910390fd5b611389816117a5565b156113c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c090612516565b60405180910390fd5b6113d560008383611811565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461142591906127f4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46114e660008383611816565b5050565b806009600084815260200190815260200160002090805190602001906115119291906119d5565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561164b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164290612556565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161173c9190612479565b60405180910390a3505050565b611754848484610eea565b6117608484848461181b565b61179f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611796906124b6565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b600061183c8473ffffffffffffffffffffffffffffffffffffffff166119b2565b156119a5578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611865610d94565b8786866040518563ffffffff1660e01b8152600401611887949392919061242d565b602060405180830381600087803b1580156118a157600080fd5b505af19250505080156118d257506040513d601f19601f820116820180604052508101906118cf9190612050565b60015b611955573d8060008114611902576040519150601f19603f3d011682016040523d82523d6000602084013e611907565b606091505b5060008151141561194d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611944906124b6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506119aa565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546119e190612934565b90600052602060002090601f016020900481019282611a035760008555611a4a565b82601f10611a1c57805160ff1916838001178555611a4a565b82800160010185558215611a4a579182015b82811115611a49578251825591602001919060010190611a2e565b5b509050611a579190611a5b565b5090565b5b80821115611a74576000816000905550600101611a5c565b5090565b6000611a8b611a86846126b6565b612691565b90508083825260208201905082856020860282011115611aae57611aad612aa1565b5b60005b85811015611ade5781611ac48882611c6a565b845260208401935060208301925050600181019050611ab1565b5050509392505050565b6000611afb611af6846126e2565b612691565b90508083825260208201905082856020860282011115611b1e57611b1d612aa1565b5b60005b85811015611b6c57813567ffffffffffffffff811115611b4457611b43612a9c565b5b808601611b518982611d76565b85526020850194506020840193505050600181019050611b21565b5050509392505050565b6000611b89611b848461270e565b612691565b90508083825260208201905082856020860282011115611bac57611bab612aa1565b5b60005b85811015611bdc5781611bc28882611da4565b845260208401935060208301925050600181019050611baf565b5050509392505050565b6000611bf9611bf48461273a565b612691565b905082815260208101848484011115611c1557611c14612aa6565b5b611c208482856128f2565b509392505050565b6000611c3b611c368461276b565b612691565b905082815260208101848484011115611c5757611c56612aa6565b5b611c628482856128f2565b509392505050565b600081359050611c7981612e5a565b92915050565b600082601f830112611c9457611c93612a9c565b5b8135611ca4848260208601611a78565b91505092915050565b600082601f830112611cc257611cc1612a9c565b5b8135611cd2848260208601611ae8565b91505092915050565b600082601f830112611cf057611cef612a9c565b5b8135611d00848260208601611b76565b91505092915050565b600081359050611d1881612e71565b92915050565b600081359050611d2d81612e88565b92915050565b600081519050611d4281612e88565b92915050565b600082601f830112611d5d57611d5c612a9c565b5b8135611d6d848260208601611be6565b91505092915050565b600082601f830112611d8b57611d8a612a9c565b5b8135611d9b848260208601611c28565b91505092915050565b600081359050611db381612e9f565b92915050565b600060208284031215611dcf57611dce612ab0565b5b6000611ddd84828501611c6a565b91505092915050565b60008060408385031215611dfd57611dfc612ab0565b5b6000611e0b85828601611c6a565b9250506020611e1c85828601611c6a565b9150509250929050565b600080600060608486031215611e3f57611e3e612ab0565b5b6000611e4d86828701611c6a565b9350506020611e5e86828701611c6a565b9250506040611e6f86828701611da4565b9150509250925092565b60008060008060808587031215611e9357611e92612ab0565b5b6000611ea187828801611c6a565b9450506020611eb287828801611c6a565b9350506040611ec387828801611da4565b925050606085013567ffffffffffffffff811115611ee457611ee3612aab565b5b611ef087828801611d48565b91505092959194509250565b60008060408385031215611f1357611f12612ab0565b5b6000611f2185828601611c6a565b9250506020611f3285828601611d09565b9150509250929050565b60008060408385031215611f5357611f52612ab0565b5b6000611f6185828601611c6a565b9250506020611f7285828601611da4565b9150509250929050565b600080600060608486031215611f9557611f94612ab0565b5b600084013567ffffffffffffffff811115611fb357611fb2612aab565b5b611fbf86828701611c7f565b935050602084013567ffffffffffffffff811115611fe057611fdf612aab565b5b611fec86828701611cad565b925050604084013567ffffffffffffffff81111561200d5761200c612aab565b5b61201986828701611cdb565b9150509250925092565b60006020828403121561203957612038612ab0565b5b600061204784828501611d1e565b91505092915050565b60006020828403121561206657612065612ab0565b5b600061207484828501611d33565b91505092915050565b60006020828403121561209357612092612ab0565b5b600082013567ffffffffffffffff8111156120b1576120b0612aab565b5b6120bd84828501611d76565b91505092915050565b6000602082840312156120dc576120db612ab0565b5b60006120ea84828501611da4565b91505092915050565b6120fc8161287e565b82525050565b61210b81612890565b82525050565b600061211c826127b1565b61212681856127c7565b9350612136818560208601612901565b61213f81612ab5565b840191505092915050565b6000612155826127bc565b61215f81856127d8565b935061216f818560208601612901565b61217881612ab5565b840191505092915050565b6000815461219081612934565b61219a81866127e9565b945060018216600081146121b557600181146121c6576121f9565b60ff198316865281860193506121f9565b6121cf8561279c565b60005b838110156121f1578154818901526001820191506020810190506121d2565b838801955050505b50505092915050565b600061220f6032836127d8565b915061221a82612ac6565b604082019050919050565b60006122326026836127d8565b915061223d82612b15565b604082019050919050565b60006122556025836127d8565b915061226082612b64565b604082019050919050565b6000612278601c836127d8565b915061228382612bb3565b602082019050919050565b600061229b6024836127d8565b91506122a682612bdc565b604082019050919050565b60006122be6019836127d8565b91506122c982612c2b565b602082019050919050565b60006122e16029836127d8565b91506122ec82612c54565b604082019050919050565b6000612304603e836127d8565b915061230f82612ca3565b604082019050919050565b60006123276020836127d8565b915061233282612cf2565b602082019050919050565b600061234a6020836127d8565b915061235582612d1b565b602082019050919050565b600061236d602f836127d8565b915061237882612d44565b604082019050919050565b60006123906018836127d8565b915061239b82612d93565b602082019050919050565b60006123b36021836127d8565b91506123be82612dbc565b604082019050919050565b60006123d6602e836127d8565b91506123e182612e0b565b604082019050919050565b6123f5816128e8565b82525050565b60006124078284612183565b915081905092915050565b600060208201905061242760008301846120f3565b92915050565b600060808201905061244260008301876120f3565b61244f60208301866120f3565b61245c60408301856123ec565b818103606083015261246e8184612111565b905095945050505050565b600060208201905061248e6000830184612102565b92915050565b600060208201905081810360008301526124ae818461214a565b905092915050565b600060208201905081810360008301526124cf81612202565b9050919050565b600060208201905081810360008301526124ef81612225565b9050919050565b6000602082019050818103600083015261250f81612248565b9050919050565b6000602082019050818103600083015261252f8161226b565b9050919050565b6000602082019050818103600083015261254f8161228e565b9050919050565b6000602082019050818103600083015261256f816122b1565b9050919050565b6000602082019050818103600083015261258f816122d4565b9050919050565b600060208201905081810360008301526125af816122f7565b9050919050565b600060208201905081810360008301526125cf8161231a565b9050919050565b600060208201905081810360008301526125ef8161233d565b9050919050565b6000602082019050818103600083015261260f81612360565b9050919050565b6000602082019050818103600083015261262f81612383565b9050919050565b6000602082019050818103600083015261264f816123a6565b9050919050565b6000602082019050818103600083015261266f816123c9565b9050919050565b600060208201905061268b60008301846123ec565b92915050565b600061269b6126ac565b90506126a78282612966565b919050565b6000604051905090565b600067ffffffffffffffff8211156126d1576126d0612a6d565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156126fd576126fc612a6d565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561272957612728612a6d565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561275557612754612a6d565b5b61275e82612ab5565b9050602081019050919050565b600067ffffffffffffffff82111561278657612785612a6d565b5b61278f82612ab5565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006127ff826128e8565b915061280a836128e8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561283f5761283e6129e0565b5b828201905092915050565b6000612855826128e8565b9150612860836128e8565b925082821015612873576128726129e0565b5b828203905092915050565b6000612889826128c8565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561291f578082015181840152602081019050612904565b8381111561292e576000848401525b50505050565b6000600282049050600182168061294c57607f821691505b602082108114156129605761295f612a0f565b5b50919050565b61296f82612ab5565b810181811067ffffffffffffffff8211171561298e5761298d612a6d565b5b80604052505050565b60006129a2826128e8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156129d5576129d46129e0565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b612e638161287e565b8114612e6e57600080fd5b50565b612e7a81612890565b8114612e8557600080fd5b50565b612e918161289c565b8114612e9c57600080fd5b50565b612ea8816128e8565b8114612eb357600080fd5b5056fea2646970667358221220e26c4e3857faaf179d4d8dc9c1940fe013cc87752359855f59387b940b9b855764736f6c63430008070033
Deployed Bytecode Sourcemap
40235:1522:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26202:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27129:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28642:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28159:417;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29342:336;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29749:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39922:243;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26840:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41051:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26571:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6738:103;;;:::i;:::-;;6090:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27298:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28885:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41299:453;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30005:323;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40615:299;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29111:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6996:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26202:305;26304:4;26356:25;26341:40;;;:11;:40;;;;:105;;;;26413:33;26398:48;;;:11;:48;;;;26341:105;:158;;;;26463:36;26487:11;26463:23;:36::i;:::-;26341:158;26321:178;;26202:305;;;:::o;27129:100::-;27183:13;27216:5;27209:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27129:100;:::o;28642:171::-;28718:7;28738:23;28753:7;28738:14;:23::i;:::-;28781:15;:24;28797:7;28781:24;;;;;;;;;;;;;;;;;;;;;28774:31;;28642:171;;;:::o;28159:417::-;28240:13;28256:23;28271:7;28256:14;:23::i;:::-;28240:39;;28304:5;28298:11;;:2;:11;;;;28290:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28398:5;28382:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28407:37;28424:5;28431:12;:10;:12::i;:::-;28407:16;:37::i;:::-;28382:62;28360:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;28547:21;28556:2;28560:7;28547:8;:21::i;:::-;28229:347;28159:417;;:::o;29342:336::-;29537:41;29556:12;:10;:12::i;:::-;29570:7;29537:18;:41::i;:::-;29529:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;29642:28;29652:4;29658:2;29662:7;29642:9;:28::i;:::-;29342:336;;;:::o;29749:185::-;29887:39;29904:4;29910:2;29914:7;29887:39;;;;;;;;;;;;:16;:39::i;:::-;29749:185;;;:::o;39922:243::-;40040:41;40059:12;:10;:12::i;:::-;40073:7;40040:18;:41::i;:::-;40032:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;40143:14;40149:7;40143:5;:14::i;:::-;39922:243;:::o;26840:222::-;26912:7;26932:13;26948:7;:16;26956:7;26948:16;;;;;;;;;;;;;;;;;;;;;26932:32;;27000:1;26983:19;;:5;:19;;;;26975:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;27049:5;27042:12;;;26840:222;;;:::o;41051:239::-;5976:13;:11;:13::i;:::-;41121::::1;41137:25;:15;:23;:25::i;:::-;41121:41;;41173:27;:15;:25;:27::i;:::-;41211;41217:10;41229:8;41211:5;:27::i;:::-;41249:33;41262:8;41272:9;41249:12;:33::i;:::-;41110:180;41051:239:::0;:::o;26571:207::-;26643:7;26688:1;26671:19;;:5;:19;;;;26663:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26754:9;:16;26764:5;26754:16;;;;;;;;;;;;;;;;26747:23;;26571:207;;;:::o;6738:103::-;5976:13;:11;:13::i;:::-;6803:30:::1;6830:1;6803:18;:30::i;:::-;6738:103::o:0;6090:87::-;6136:7;6163:6;;;;;;;;;;;6156:13;;6090:87;:::o;27298:104::-;27354:13;27387:7;27380:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27298:104;:::o;28885:155::-;28980:52;28999:12;:10;:12::i;:::-;29013:8;29023;28980:18;:52::i;:::-;28885:155;;:::o;41299:453::-;5976:13;:11;:13::i;:::-;41460:9:::1;:16;41439:10;:17;:37;41431:46;;;::::0;::::1;;41517:9;:16;41496:10;:17;:37;41488:46;;;::::0;::::1;;41545:16;41564:10;:17;41545:36;;41596:6;41592:153;41612:11;41608:1;:15;41592:153;;;41644:34;41650:10;41661:1;41650:13;;;;;;;;:::i;:::-;;;;;;;;41665:9;41675:1;41665:12;;;;;;;;:::i;:::-;;;;;;;;41644:5;:34::i;:::-;41693:40;41706:9;41716:1;41706:12;;;;;;;;:::i;:::-;;;;;;;;41720:9;41730:1;41720:12;;;;;;;;:::i;:::-;;;;;;;;41693;:40::i;:::-;41625:3;;;;:::i;:::-;;;41592:153;;;;41420:332;41299:453:::0;;;:::o;30005:323::-;30179:41;30198:12;:10;:12::i;:::-;30212:7;30179:18;:41::i;:::-;30171:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;30282:38;30296:4;30302:2;30306:7;30315:4;30282:13;:38::i;:::-;30005:323;;;;:::o;40615:299::-;40680:13;40714:17;40722:8;40714:7;:17::i;:::-;40706:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;40838:1;40807:10;:20;40818:8;40807:20;;;;;;;;;;;40801:34;;;;;:::i;:::-;;;:38;:105;;;;;;;;;;;;;;;;;40879:10;:20;40890:8;40879:20;;;;;;;;;;;40862:38;;;;;;;;:::i;:::-;;;;;;;;;;;;;40801:105;40794:112;;40615:299;;;:::o;29111:164::-;29208:4;29232:18;:25;29251:5;29232:25;;;;;;;;;;;;;;;:35;29258:8;29232:35;;;;;;;;;;;;;;;;;;;;;;;;;29225:42;;29111:164;;;;:::o;6996:201::-;5976:13;:11;:13::i;:::-;7105:1:::1;7085:22;;:8;:22;;;;7077:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7161:28;7180:8;7161:18;:28::i;:::-;6996:201:::0;:::o;18944:157::-;19029:4;19068:25;19053:40;;;:11;:40;;;;19046:47;;18944:157;;;:::o;36617:135::-;36699:16;36707:7;36699;:16::i;:::-;36691:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;36617:135;:::o;4641:98::-;4694:7;4721:10;4714:17;;4641:98;:::o;35896:174::-;35998:2;35971:15;:24;35987:7;35971:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36054:7;36050:2;36016:46;;36025:23;36040:7;36025:14;:23::i;:::-;36016:46;;;;;;;;;;;;35896:174;;:::o;32129:264::-;32222:4;32239:13;32255:23;32270:7;32255:14;:23::i;:::-;32239:39;;32308:5;32297:16;;:7;:16;;;:52;;;;32317:32;32334:5;32341:7;32317:16;:32::i;:::-;32297:52;:87;;;;32377:7;32353:31;;:20;32365:7;32353:11;:20::i;:::-;:31;;;32297:87;32289:96;;;32129:264;;;;:::o;35152:625::-;35311:4;35284:31;;:23;35299:7;35284:14;:23::i;:::-;:31;;;35276:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35390:1;35376:16;;:2;:16;;;;35368:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35446:39;35467:4;35473:2;35477:7;35446:20;:39::i;:::-;35550:29;35567:1;35571:7;35550:8;:29::i;:::-;35611:1;35592:9;:15;35602:4;35592:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35640:1;35623:9;:13;35633:2;35623:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35671:2;35652:7;:16;35660:7;35652:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35710:7;35706:2;35691:27;;35700:4;35691:27;;;;;;;;;;;;35731:38;35751:4;35757:2;35761:7;35731:19;:38::i;:::-;35152:625;;;:::o;34395:420::-;34455:13;34471:23;34486:7;34471:14;:23::i;:::-;34455:39;;34507:48;34528:5;34543:1;34547:7;34507:20;:48::i;:::-;34596:29;34613:1;34617:7;34596:8;:29::i;:::-;34658:1;34638:9;:16;34648:5;34638:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;34677:7;:16;34685:7;34677:16;;;;;;;;;;;;34670:23;;;;;;;;;;;34739:7;34735:1;34711:36;;34720:5;34711:36;;;;;;;;;;;;34760:47;34780:5;34795:1;34799:7;34760:19;:47::i;:::-;34444:371;34395:420;:::o;6255:132::-;6330:12;:10;:12::i;:::-;6319:23;;:7;:5;:7::i;:::-;:23;;;6311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6255:132::o;872:114::-;937:7;964;:14;;;957:21;;872:114;;;:::o;994:127::-;1101:1;1083:7;:14;;;:19;;;;;;;;;;;994:127;:::o;33727:439::-;33821:1;33807:16;;:2;:16;;;;33799:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33880:16;33888:7;33880;:16::i;:::-;33879:17;33871:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33942:45;33971:1;33975:2;33979:7;33942:20;:45::i;:::-;34017:1;34000:9;:13;34010:2;34000:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34048:2;34029:7;:16;34037:7;34029:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34093:7;34089:2;34068:33;;34085:1;34068:33;;;;;;;;;;;;34114:44;34142:1;34146:2;34150:7;34114:19;:44::i;:::-;33727:439;;:::o;40922:122::-;41027:9;41004:10;:20;41015:8;41004:20;;;;;;;;;;;:32;;;;;;;;;;;;:::i;:::-;;40922:122;;:::o;7357:191::-;7431:16;7450:6;;;;;;;;;;;7431:25;;7476:8;7467:6;;:17;;;;;;;;;;;;;;;;;;7531:8;7500:40;;7521:8;7500:40;;;;;;;;;;;;7420:128;7357:191;:::o;36213:315::-;36368:8;36359:17;;:5;:17;;;;36351:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36455:8;36417:18;:25;36436:5;36417:25;;;;;;;;;;;;;;;:35;36443:8;36417:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36501:8;36479:41;;36494:5;36479:41;;;36511:8;36479:41;;;;;;:::i;:::-;;;;;;;;36213:315;;;:::o;31209:313::-;31365:28;31375:4;31381:2;31385:7;31365:9;:28::i;:::-;31412:47;31435:4;31441:2;31445:7;31454:4;31412:22;:47::i;:::-;31404:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;31209:313;;;;:::o;31835:127::-;31900:4;31952:1;31924:30;;:7;:16;31932:7;31924:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31917:37;;31835:127;;;:::o;38741:126::-;;;;:::o;39252:125::-;;;;:::o;37316:853::-;37470:4;37491:15;:2;:13;;;:15::i;:::-;37487:675;;;37543:2;37527:36;;;37564:12;:10;:12::i;:::-;37578:4;37584:7;37593:4;37527:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37523:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37785:1;37768:6;:13;:18;37764:328;;;37811:60;;;;;;;;;;:::i;:::-;;;;;;;;37764:328;38042:6;38036:13;38027:6;38023:2;38019:15;38012:38;37523:584;37659:41;;;37649:51;;;:6;:51;;;;37642:58;;;;;37487:675;38146:4;38139:11;;37316:853;;;;;;;:::o;8788:326::-;8848:4;9105:1;9083:7;:19;;;:23;9076:30;;8788:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;768:957::-;874:5;899:91;915:74;982:6;915:74;:::i;:::-;899:91;:::i;:::-;890:100;;1010:5;1039:6;1032:5;1025:21;1073:4;1066:5;1062:16;1055:23;;1099:6;1149:3;1141:4;1133:6;1129:17;1124:3;1120:27;1117:36;1114:143;;;1168:79;;:::i;:::-;1114:143;1281:1;1266:453;1291:6;1288:1;1285:13;1266:453;;;1373:3;1360:17;1409:18;1396:11;1393:35;1390:122;;;1431:79;;:::i;:::-;1390:122;1555:11;1547:6;1543:24;1593:47;1636:3;1624:10;1593:47;:::i;:::-;1588:3;1581:60;1670:4;1665:3;1661:14;1654:21;;1704:4;1699:3;1695:14;1688:21;;1326:393;;1313:1;1310;1306:9;1301:14;;1266:453;;;1270:14;880:845;;768:957;;;;;:::o;1748:722::-;1844:5;1869:81;1885:64;1942:6;1885:64;:::i;:::-;1869:81;:::i;:::-;1860:90;;1970:5;1999:6;1992:5;1985:21;2033:4;2026:5;2022:16;2015:23;;2059:6;2109:3;2101:4;2093:6;2089:17;2084:3;2080:27;2077:36;2074:143;;;2128:79;;:::i;:::-;2074:143;2241:1;2226:238;2251:6;2248:1;2245:13;2226:238;;;2319:3;2348:37;2381:3;2369:10;2348:37;:::i;:::-;2343:3;2336:50;2415:4;2410:3;2406:14;2399:21;;2449:4;2444:3;2440:14;2433:21;;2286:178;2273:1;2270;2266:9;2261:14;;2226:238;;;2230:14;1850:620;;1748:722;;;;;:::o;2476:410::-;2553:5;2578:65;2594:48;2635:6;2594:48;:::i;:::-;2578:65;:::i;:::-;2569:74;;2666:6;2659:5;2652:21;2704:4;2697:5;2693:16;2742:3;2733:6;2728:3;2724:16;2721:25;2718:112;;;2749:79;;:::i;:::-;2718:112;2839:41;2873:6;2868:3;2863;2839:41;:::i;:::-;2559:327;2476:410;;;;;:::o;2892:412::-;2970:5;2995:66;3011:49;3053:6;3011:49;:::i;:::-;2995:66;:::i;:::-;2986:75;;3084:6;3077:5;3070:21;3122:4;3115:5;3111:16;3160:3;3151:6;3146:3;3142:16;3139:25;3136:112;;;3167:79;;:::i;:::-;3136:112;3257:41;3291:6;3286:3;3281;3257:41;:::i;:::-;2976:328;2892:412;;;;;:::o;3310:139::-;3356:5;3394:6;3381:20;3372:29;;3410:33;3437:5;3410:33;:::i;:::-;3310:139;;;;:::o;3472:370::-;3543:5;3592:3;3585:4;3577:6;3573:17;3569:27;3559:122;;3600:79;;:::i;:::-;3559:122;3717:6;3704:20;3742:94;3832:3;3824:6;3817:4;3809:6;3805:17;3742:94;:::i;:::-;3733:103;;3549:293;3472:370;;;;:::o;3864:390::-;3945:5;3994:3;3987:4;3979:6;3975:17;3971:27;3961:122;;4002:79;;:::i;:::-;3961:122;4119:6;4106:20;4144:104;4244:3;4236:6;4229:4;4221:6;4217:17;4144:104;:::i;:::-;4135:113;;3951:303;3864:390;;;;:::o;4277:370::-;4348:5;4397:3;4390:4;4382:6;4378:17;4374:27;4364:122;;4405:79;;:::i;:::-;4364:122;4522:6;4509:20;4547:94;4637:3;4629:6;4622:4;4614:6;4610:17;4547:94;:::i;:::-;4538:103;;4354:293;4277:370;;;;:::o;4653:133::-;4696:5;4734:6;4721:20;4712:29;;4750:30;4774:5;4750:30;:::i;:::-;4653:133;;;;:::o;4792:137::-;4837:5;4875:6;4862:20;4853:29;;4891:32;4917:5;4891:32;:::i;:::-;4792:137;;;;:::o;4935:141::-;4991:5;5022:6;5016:13;5007:22;;5038:32;5064:5;5038:32;:::i;:::-;4935:141;;;;:::o;5095:338::-;5150:5;5199:3;5192:4;5184:6;5180:17;5176:27;5166:122;;5207:79;;:::i;:::-;5166:122;5324:6;5311:20;5349:78;5423:3;5415:6;5408:4;5400:6;5396:17;5349:78;:::i;:::-;5340:87;;5156:277;5095:338;;;;:::o;5453:340::-;5509:5;5558:3;5551:4;5543:6;5539:17;5535:27;5525:122;;5566:79;;:::i;:::-;5525:122;5683:6;5670:20;5708:79;5783:3;5775:6;5768:4;5760:6;5756:17;5708:79;:::i;:::-;5699:88;;5515:278;5453:340;;;;:::o;5799:139::-;5845:5;5883:6;5870:20;5861:29;;5899:33;5926:5;5899:33;:::i;:::-;5799:139;;;;:::o;5944:329::-;6003:6;6052:2;6040:9;6031:7;6027:23;6023:32;6020:119;;;6058:79;;:::i;:::-;6020:119;6178:1;6203:53;6248:7;6239:6;6228:9;6224:22;6203:53;:::i;:::-;6193:63;;6149:117;5944:329;;;;:::o;6279:474::-;6347:6;6355;6404:2;6392:9;6383:7;6379:23;6375:32;6372:119;;;6410:79;;:::i;:::-;6372:119;6530:1;6555:53;6600:7;6591:6;6580:9;6576:22;6555:53;:::i;:::-;6545:63;;6501:117;6657:2;6683:53;6728:7;6719:6;6708:9;6704:22;6683:53;:::i;:::-;6673:63;;6628:118;6279:474;;;;;:::o;6759:619::-;6836:6;6844;6852;6901:2;6889:9;6880:7;6876:23;6872:32;6869:119;;;6907:79;;:::i;:::-;6869:119;7027:1;7052:53;7097:7;7088:6;7077:9;7073:22;7052:53;:::i;:::-;7042:63;;6998:117;7154:2;7180:53;7225:7;7216:6;7205:9;7201:22;7180:53;:::i;:::-;7170:63;;7125:118;7282:2;7308:53;7353:7;7344:6;7333:9;7329:22;7308:53;:::i;:::-;7298:63;;7253:118;6759:619;;;;;:::o;7384:943::-;7479:6;7487;7495;7503;7552:3;7540:9;7531:7;7527:23;7523:33;7520:120;;;7559:79;;:::i;:::-;7520:120;7679:1;7704:53;7749:7;7740:6;7729:9;7725:22;7704:53;:::i;:::-;7694:63;;7650:117;7806:2;7832:53;7877:7;7868:6;7857:9;7853:22;7832:53;:::i;:::-;7822:63;;7777:118;7934:2;7960:53;8005:7;7996:6;7985:9;7981:22;7960:53;:::i;:::-;7950:63;;7905:118;8090:2;8079:9;8075:18;8062:32;8121:18;8113:6;8110:30;8107:117;;;8143:79;;:::i;:::-;8107:117;8248:62;8302:7;8293:6;8282:9;8278:22;8248:62;:::i;:::-;8238:72;;8033:287;7384:943;;;;;;;:::o;8333:468::-;8398:6;8406;8455:2;8443:9;8434:7;8430:23;8426:32;8423:119;;;8461:79;;:::i;:::-;8423:119;8581:1;8606:53;8651:7;8642:6;8631:9;8627:22;8606:53;:::i;:::-;8596:63;;8552:117;8708:2;8734:50;8776:7;8767:6;8756:9;8752:22;8734:50;:::i;:::-;8724:60;;8679:115;8333:468;;;;;:::o;8807:474::-;8875:6;8883;8932:2;8920:9;8911:7;8907:23;8903:32;8900:119;;;8938:79;;:::i;:::-;8900:119;9058:1;9083:53;9128:7;9119:6;9108:9;9104:22;9083:53;:::i;:::-;9073:63;;9029:117;9185:2;9211:53;9256:7;9247:6;9236:9;9232:22;9211:53;:::i;:::-;9201:63;;9156:118;8807:474;;;;;:::o;9287:1269::-;9449:6;9457;9465;9514:2;9502:9;9493:7;9489:23;9485:32;9482:119;;;9520:79;;:::i;:::-;9482:119;9668:1;9657:9;9653:17;9640:31;9698:18;9690:6;9687:30;9684:117;;;9720:79;;:::i;:::-;9684:117;9825:78;9895:7;9886:6;9875:9;9871:22;9825:78;:::i;:::-;9815:88;;9611:302;9980:2;9969:9;9965:18;9952:32;10011:18;10003:6;10000:30;9997:117;;;10033:79;;:::i;:::-;9997:117;10138:88;10218:7;10209:6;10198:9;10194:22;10138:88;:::i;:::-;10128:98;;9923:313;10303:2;10292:9;10288:18;10275:32;10334:18;10326:6;10323:30;10320:117;;;10356:79;;:::i;:::-;10320:117;10461:78;10531:7;10522:6;10511:9;10507:22;10461:78;:::i;:::-;10451:88;;10246:303;9287:1269;;;;;:::o;10562:327::-;10620:6;10669:2;10657:9;10648:7;10644:23;10640:32;10637:119;;;10675:79;;:::i;:::-;10637:119;10795:1;10820:52;10864:7;10855:6;10844:9;10840:22;10820:52;:::i;:::-;10810:62;;10766:116;10562:327;;;;:::o;10895:349::-;10964:6;11013:2;11001:9;10992:7;10988:23;10984:32;10981:119;;;11019:79;;:::i;:::-;10981:119;11139:1;11164:63;11219:7;11210:6;11199:9;11195:22;11164:63;:::i;:::-;11154:73;;11110:127;10895:349;;;;:::o;11250:509::-;11319:6;11368:2;11356:9;11347:7;11343:23;11339:32;11336:119;;;11374:79;;:::i;:::-;11336:119;11522:1;11511:9;11507:17;11494:31;11552:18;11544:6;11541:30;11538:117;;;11574:79;;:::i;:::-;11538:117;11679:63;11734:7;11725:6;11714:9;11710:22;11679:63;:::i;:::-;11669:73;;11465:287;11250:509;;;;:::o;11765:329::-;11824:6;11873:2;11861:9;11852:7;11848:23;11844:32;11841:119;;;11879:79;;:::i;:::-;11841:119;11999:1;12024:53;12069:7;12060:6;12049:9;12045:22;12024:53;:::i;:::-;12014:63;;11970:117;11765:329;;;;:::o;12100:118::-;12187:24;12205:5;12187:24;:::i;:::-;12182:3;12175:37;12100:118;;:::o;12224:109::-;12305:21;12320:5;12305:21;:::i;:::-;12300:3;12293:34;12224:109;;:::o;12339:360::-;12425:3;12453:38;12485:5;12453:38;:::i;:::-;12507:70;12570:6;12565:3;12507:70;:::i;:::-;12500:77;;12586:52;12631:6;12626:3;12619:4;12612:5;12608:16;12586:52;:::i;:::-;12663:29;12685:6;12663:29;:::i;:::-;12658:3;12654:39;12647:46;;12429:270;12339:360;;;;:::o;12705:364::-;12793:3;12821:39;12854:5;12821:39;:::i;:::-;12876:71;12940:6;12935:3;12876:71;:::i;:::-;12869:78;;12956:52;13001:6;12996:3;12989:4;12982:5;12978:16;12956:52;:::i;:::-;13033:29;13055:6;13033:29;:::i;:::-;13028:3;13024:39;13017:46;;12797:272;12705:364;;;;:::o;13099:845::-;13202:3;13239:5;13233:12;13268:36;13294:9;13268:36;:::i;:::-;13320:89;13402:6;13397:3;13320:89;:::i;:::-;13313:96;;13440:1;13429:9;13425:17;13456:1;13451:137;;;;13602:1;13597:341;;;;13418:520;;13451:137;13535:4;13531:9;13520;13516:25;13511:3;13504:38;13571:6;13566:3;13562:16;13555:23;;13451:137;;13597:341;13664:38;13696:5;13664:38;:::i;:::-;13724:1;13738:154;13752:6;13749:1;13746:13;13738:154;;;13826:7;13820:14;13816:1;13811:3;13807:11;13800:35;13876:1;13867:7;13863:15;13852:26;;13774:4;13771:1;13767:12;13762:17;;13738:154;;;13921:6;13916:3;13912:16;13905:23;;13604:334;;13418:520;;13206:738;;13099:845;;;;:::o;13950:366::-;14092:3;14113:67;14177:2;14172:3;14113:67;:::i;:::-;14106:74;;14189:93;14278:3;14189:93;:::i;:::-;14307:2;14302:3;14298:12;14291:19;;13950:366;;;:::o;14322:::-;14464:3;14485:67;14549:2;14544:3;14485:67;:::i;:::-;14478:74;;14561:93;14650:3;14561:93;:::i;:::-;14679:2;14674:3;14670:12;14663:19;;14322:366;;;:::o;14694:::-;14836:3;14857:67;14921:2;14916:3;14857:67;:::i;:::-;14850:74;;14933:93;15022:3;14933:93;:::i;:::-;15051:2;15046:3;15042:12;15035:19;;14694:366;;;:::o;15066:::-;15208:3;15229:67;15293:2;15288:3;15229:67;:::i;:::-;15222:74;;15305:93;15394:3;15305:93;:::i;:::-;15423:2;15418:3;15414:12;15407:19;;15066:366;;;:::o;15438:::-;15580:3;15601:67;15665:2;15660:3;15601:67;:::i;:::-;15594:74;;15677:93;15766:3;15677:93;:::i;:::-;15795:2;15790:3;15786:12;15779:19;;15438:366;;;:::o;15810:::-;15952:3;15973:67;16037:2;16032:3;15973:67;:::i;:::-;15966:74;;16049:93;16138:3;16049:93;:::i;:::-;16167:2;16162:3;16158:12;16151:19;;15810:366;;;:::o;16182:::-;16324:3;16345:67;16409:2;16404:3;16345:67;:::i;:::-;16338:74;;16421:93;16510:3;16421:93;:::i;:::-;16539:2;16534:3;16530:12;16523:19;;16182:366;;;:::o;16554:::-;16696:3;16717:67;16781:2;16776:3;16717:67;:::i;:::-;16710:74;;16793:93;16882:3;16793:93;:::i;:::-;16911:2;16906:3;16902:12;16895:19;;16554:366;;;:::o;16926:::-;17068:3;17089:67;17153:2;17148:3;17089:67;:::i;:::-;17082:74;;17165:93;17254:3;17165:93;:::i;:::-;17283:2;17278:3;17274:12;17267:19;;16926:366;;;:::o;17298:::-;17440:3;17461:67;17525:2;17520:3;17461:67;:::i;:::-;17454:74;;17537:93;17626:3;17537:93;:::i;:::-;17655:2;17650:3;17646:12;17639:19;;17298:366;;;:::o;17670:::-;17812:3;17833:67;17897:2;17892:3;17833:67;:::i;:::-;17826:74;;17909:93;17998:3;17909:93;:::i;:::-;18027:2;18022:3;18018:12;18011:19;;17670:366;;;:::o;18042:::-;18184:3;18205:67;18269:2;18264:3;18205:67;:::i;:::-;18198:74;;18281:93;18370:3;18281:93;:::i;:::-;18399:2;18394:3;18390:12;18383:19;;18042:366;;;:::o;18414:::-;18556:3;18577:67;18641:2;18636:3;18577:67;:::i;:::-;18570:74;;18653:93;18742:3;18653:93;:::i;:::-;18771:2;18766:3;18762:12;18755:19;;18414:366;;;:::o;18786:::-;18928:3;18949:67;19013:2;19008:3;18949:67;:::i;:::-;18942:74;;19025:93;19114:3;19025:93;:::i;:::-;19143:2;19138:3;19134:12;19127:19;;18786:366;;;:::o;19158:118::-;19245:24;19263:5;19245:24;:::i;:::-;19240:3;19233:37;19158:118;;:::o;19282:269::-;19411:3;19433:92;19521:3;19512:6;19433:92;:::i;:::-;19426:99;;19542:3;19535:10;;19282:269;;;;:::o;19557:222::-;19650:4;19688:2;19677:9;19673:18;19665:26;;19701:71;19769:1;19758:9;19754:17;19745:6;19701:71;:::i;:::-;19557:222;;;;:::o;19785:640::-;19980:4;20018:3;20007:9;20003:19;19995:27;;20032:71;20100:1;20089:9;20085:17;20076:6;20032:71;:::i;:::-;20113:72;20181:2;20170:9;20166:18;20157:6;20113:72;:::i;:::-;20195;20263:2;20252:9;20248:18;20239:6;20195:72;:::i;:::-;20314:9;20308:4;20304:20;20299:2;20288:9;20284:18;20277:48;20342:76;20413:4;20404:6;20342:76;:::i;:::-;20334:84;;19785:640;;;;;;;:::o;20431:210::-;20518:4;20556:2;20545:9;20541:18;20533:26;;20569:65;20631:1;20620:9;20616:17;20607:6;20569:65;:::i;:::-;20431:210;;;;:::o;20647:313::-;20760:4;20798:2;20787:9;20783:18;20775:26;;20847:9;20841:4;20837:20;20833:1;20822:9;20818:17;20811:47;20875:78;20948:4;20939:6;20875:78;:::i;:::-;20867:86;;20647:313;;;;:::o;20966:419::-;21132:4;21170:2;21159:9;21155:18;21147:26;;21219:9;21213:4;21209:20;21205:1;21194:9;21190:17;21183:47;21247:131;21373:4;21247:131;:::i;:::-;21239:139;;20966:419;;;:::o;21391:::-;21557:4;21595:2;21584:9;21580:18;21572:26;;21644:9;21638:4;21634:20;21630:1;21619:9;21615:17;21608:47;21672:131;21798:4;21672:131;:::i;:::-;21664:139;;21391:419;;;:::o;21816:::-;21982:4;22020:2;22009:9;22005:18;21997:26;;22069:9;22063:4;22059:20;22055:1;22044:9;22040:17;22033:47;22097:131;22223:4;22097:131;:::i;:::-;22089:139;;21816:419;;;:::o;22241:::-;22407:4;22445:2;22434:9;22430:18;22422:26;;22494:9;22488:4;22484:20;22480:1;22469:9;22465:17;22458:47;22522:131;22648:4;22522:131;:::i;:::-;22514:139;;22241:419;;;:::o;22666:::-;22832:4;22870:2;22859:9;22855:18;22847:26;;22919:9;22913:4;22909:20;22905:1;22894:9;22890:17;22883:47;22947:131;23073:4;22947:131;:::i;:::-;22939:139;;22666:419;;;:::o;23091:::-;23257:4;23295:2;23284:9;23280:18;23272:26;;23344:9;23338:4;23334:20;23330:1;23319:9;23315:17;23308:47;23372:131;23498:4;23372:131;:::i;:::-;23364:139;;23091:419;;;:::o;23516:::-;23682:4;23720:2;23709:9;23705:18;23697:26;;23769:9;23763:4;23759:20;23755:1;23744:9;23740:17;23733:47;23797:131;23923:4;23797:131;:::i;:::-;23789:139;;23516:419;;;:::o;23941:::-;24107:4;24145:2;24134:9;24130:18;24122:26;;24194:9;24188:4;24184:20;24180:1;24169:9;24165:17;24158:47;24222:131;24348:4;24222:131;:::i;:::-;24214:139;;23941:419;;;:::o;24366:::-;24532:4;24570:2;24559:9;24555:18;24547:26;;24619:9;24613:4;24609:20;24605:1;24594:9;24590:17;24583:47;24647:131;24773:4;24647:131;:::i;:::-;24639:139;;24366:419;;;:::o;24791:::-;24957:4;24995:2;24984:9;24980:18;24972:26;;25044:9;25038:4;25034:20;25030:1;25019:9;25015:17;25008:47;25072:131;25198:4;25072:131;:::i;:::-;25064:139;;24791:419;;;:::o;25216:::-;25382:4;25420:2;25409:9;25405:18;25397:26;;25469:9;25463:4;25459:20;25455:1;25444:9;25440:17;25433:47;25497:131;25623:4;25497:131;:::i;:::-;25489:139;;25216:419;;;:::o;25641:::-;25807:4;25845:2;25834:9;25830:18;25822:26;;25894:9;25888:4;25884:20;25880:1;25869:9;25865:17;25858:47;25922:131;26048:4;25922:131;:::i;:::-;25914:139;;25641:419;;;:::o;26066:::-;26232:4;26270:2;26259:9;26255:18;26247:26;;26319:9;26313:4;26309:20;26305:1;26294:9;26290:17;26283:47;26347:131;26473:4;26347:131;:::i;:::-;26339:139;;26066:419;;;:::o;26491:::-;26657:4;26695:2;26684:9;26680:18;26672:26;;26744:9;26738:4;26734:20;26730:1;26719:9;26715:17;26708:47;26772:131;26898:4;26772:131;:::i;:::-;26764:139;;26491:419;;;:::o;26916:222::-;27009:4;27047:2;27036:9;27032:18;27024:26;;27060:71;27128:1;27117:9;27113:17;27104:6;27060:71;:::i;:::-;26916:222;;;;:::o;27144:129::-;27178:6;27205:20;;:::i;:::-;27195:30;;27234:33;27262:4;27254:6;27234:33;:::i;:::-;27144:129;;;:::o;27279:75::-;27312:6;27345:2;27339:9;27329:19;;27279:75;:::o;27360:311::-;27437:4;27527:18;27519:6;27516:30;27513:56;;;27549:18;;:::i;:::-;27513:56;27599:4;27591:6;27587:17;27579:25;;27659:4;27653;27649:15;27641:23;;27360:311;;;:::o;27677:321::-;27764:4;27854:18;27846:6;27843:30;27840:56;;;27876:18;;:::i;:::-;27840:56;27926:4;27918:6;27914:17;27906:25;;27986:4;27980;27976:15;27968:23;;27677:321;;;:::o;28004:311::-;28081:4;28171:18;28163:6;28160:30;28157:56;;;28193:18;;:::i;:::-;28157:56;28243:4;28235:6;28231:17;28223:25;;28303:4;28297;28293:15;28285:23;;28004:311;;;:::o;28321:307::-;28382:4;28472:18;28464:6;28461:30;28458:56;;;28494:18;;:::i;:::-;28458:56;28532:29;28554:6;28532:29;:::i;:::-;28524:37;;28616:4;28610;28606:15;28598:23;;28321:307;;;:::o;28634:308::-;28696:4;28786:18;28778:6;28775:30;28772:56;;;28808:18;;:::i;:::-;28772:56;28846:29;28868:6;28846:29;:::i;:::-;28838:37;;28930:4;28924;28920:15;28912:23;;28634:308;;;:::o;28948:141::-;28997:4;29020:3;29012:11;;29043:3;29040:1;29033:14;29077:4;29074:1;29064:18;29056:26;;28948:141;;;:::o;29095:98::-;29146:6;29180:5;29174:12;29164:22;;29095:98;;;:::o;29199:99::-;29251:6;29285:5;29279:12;29269:22;;29199:99;;;:::o;29304:168::-;29387:11;29421:6;29416:3;29409:19;29461:4;29456:3;29452:14;29437:29;;29304:168;;;;:::o;29478:169::-;29562:11;29596:6;29591:3;29584:19;29636:4;29631:3;29627:14;29612:29;;29478:169;;;;:::o;29653:148::-;29755:11;29792:3;29777:18;;29653:148;;;;:::o;29807:305::-;29847:3;29866:20;29884:1;29866:20;:::i;:::-;29861:25;;29900:20;29918:1;29900:20;:::i;:::-;29895:25;;30054:1;29986:66;29982:74;29979:1;29976:81;29973:107;;;30060:18;;:::i;:::-;29973:107;30104:1;30101;30097:9;30090:16;;29807:305;;;;:::o;30118:191::-;30158:4;30178:20;30196:1;30178:20;:::i;:::-;30173:25;;30212:20;30230:1;30212:20;:::i;:::-;30207:25;;30251:1;30248;30245:8;30242:34;;;30256:18;;:::i;:::-;30242:34;30301:1;30298;30294:9;30286:17;;30118:191;;;;:::o;30315:96::-;30352:7;30381:24;30399:5;30381:24;:::i;:::-;30370:35;;30315:96;;;:::o;30417:90::-;30451:7;30494:5;30487:13;30480:21;30469:32;;30417:90;;;:::o;30513:149::-;30549:7;30589:66;30582:5;30578:78;30567:89;;30513:149;;;:::o;30668:126::-;30705:7;30745:42;30738:5;30734:54;30723:65;;30668:126;;;:::o;30800:77::-;30837:7;30866:5;30855:16;;30800:77;;;:::o;30883:154::-;30967:6;30962:3;30957;30944:30;31029:1;31020:6;31015:3;31011:16;31004:27;30883:154;;;:::o;31043:307::-;31111:1;31121:113;31135:6;31132:1;31129:13;31121:113;;;31220:1;31215:3;31211:11;31205:18;31201:1;31196:3;31192:11;31185:39;31157:2;31154:1;31150:10;31145:15;;31121:113;;;31252:6;31249:1;31246:13;31243:101;;;31332:1;31323:6;31318:3;31314:16;31307:27;31243:101;31092:258;31043:307;;;:::o;31356:320::-;31400:6;31437:1;31431:4;31427:12;31417:22;;31484:1;31478:4;31474:12;31505:18;31495:81;;31561:4;31553:6;31549:17;31539:27;;31495:81;31623:2;31615:6;31612:14;31592:18;31589:38;31586:84;;;31642:18;;:::i;:::-;31586:84;31407:269;31356:320;;;:::o;31682:281::-;31765:27;31787:4;31765:27;:::i;:::-;31757:6;31753:40;31895:6;31883:10;31880:22;31859:18;31847:10;31844:34;31841:62;31838:88;;;31906:18;;:::i;:::-;31838:88;31946:10;31942:2;31935:22;31725:238;31682:281;;:::o;31969:233::-;32008:3;32031:24;32049:5;32031:24;:::i;:::-;32022:33;;32077:66;32070:5;32067:77;32064:103;;;32147:18;;:::i;:::-;32064:103;32194:1;32187:5;32183:13;32176:20;;31969:233;;;:::o;32208:180::-;32256:77;32253:1;32246:88;32353:4;32350:1;32343:15;32377:4;32374:1;32367:15;32394:180;32442:77;32439:1;32432:88;32539:4;32536:1;32529:15;32563:4;32560:1;32553:15;32580:180;32628:77;32625:1;32618:88;32725:4;32722:1;32715:15;32749:4;32746:1;32739:15;32766:180;32814:77;32811:1;32804:88;32911:4;32908:1;32901:15;32935:4;32932:1;32925:15;32952:117;33061:1;33058;33051:12;33075:117;33184:1;33181;33174:12;33198:117;33307:1;33304;33297:12;33321:117;33430:1;33427;33420:12;33444:117;33553:1;33550;33543:12;33567:102;33608:6;33659:2;33655:7;33650:2;33643:5;33639:14;33635:28;33625:38;;33567:102;;;:::o;33675:237::-;33815:34;33811:1;33803:6;33799:14;33792:58;33884:20;33879:2;33871:6;33867:15;33860:45;33675:237;:::o;33918:225::-;34058:34;34054:1;34046:6;34042:14;34035:58;34127:8;34122:2;34114:6;34110:15;34103:33;33918:225;:::o;34149:224::-;34289:34;34285:1;34277:6;34273:14;34266:58;34358:7;34353:2;34345:6;34341:15;34334:32;34149:224;:::o;34379:178::-;34519:30;34515:1;34507:6;34503:14;34496:54;34379:178;:::o;34563:223::-;34703:34;34699:1;34691:6;34687:14;34680:58;34772:6;34767:2;34759:6;34755:15;34748:31;34563:223;:::o;34792:175::-;34932:27;34928:1;34920:6;34916:14;34909:51;34792:175;:::o;34973:228::-;35113:34;35109:1;35101:6;35097:14;35090:58;35182:11;35177:2;35169:6;35165:15;35158:36;34973:228;:::o;35207:249::-;35347:34;35343:1;35335:6;35331:14;35324:58;35416:32;35411:2;35403:6;35399:15;35392:57;35207:249;:::o;35462:182::-;35602:34;35598:1;35590:6;35586:14;35579:58;35462:182;:::o;35650:::-;35790:34;35786:1;35778:6;35774:14;35767:58;35650:182;:::o;35838:234::-;35978:34;35974:1;35966:6;35962:14;35955:58;36047:17;36042:2;36034:6;36030:15;36023:42;35838:234;:::o;36078:174::-;36218:26;36214:1;36206:6;36202:14;36195:50;36078:174;:::o;36258:220::-;36398:34;36394:1;36386:6;36382:14;36375:58;36467:3;36462:2;36454:6;36450:15;36443:28;36258:220;:::o;36484:233::-;36624:34;36620:1;36612:6;36608:14;36601:58;36693:16;36688:2;36680:6;36676:15;36669:41;36484:233;:::o;36723:122::-;36796:24;36814:5;36796:24;:::i;:::-;36789:5;36786:35;36776:63;;36835:1;36832;36825:12;36776:63;36723:122;:::o;36851:116::-;36921:21;36936:5;36921:21;:::i;:::-;36914:5;36911:32;36901:60;;36957:1;36954;36947:12;36901:60;36851:116;:::o;36973:120::-;37045:23;37062:5;37045:23;:::i;:::-;37038:5;37035:34;37025:62;;37083:1;37080;37073:12;37025:62;36973:120;:::o;37099:122::-;37172:24;37190:5;37172:24;:::i;:::-;37165:5;37162:35;37152:63;;37211:1;37208;37201:12;37152:63;37099:122;:::o
Swarm Source
ipfs://e26c4e3857faaf179d4d8dc9c1940fe013cc87752359855f59387b940b9b8557
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.