Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
NFT
Overview
Max Total Supply
10,000 BEANS
Holders
3,309
Market
Volume (24H)
0.0225 ETH
Min Price (24H)
$18.93 @ 0.007500 ETH
Max Price (24H)
$18.93 @ 0.007500 ETH
Other Info
Token Contract
Balance
2 BEANSLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BEANS_DWTD
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-17 */ // File: contracts/ERC721.sol // File: @openzeppelin/contracts/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/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`, 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 be 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 Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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 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); /** * @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; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/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/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @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); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @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 * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/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/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 `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol pragma solidity ^0.8.0; 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); } function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } function _baseURI() internal view virtual returns (string memory) { return ""; } 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 owner nor approved for all" ); _approve(to, tokenId); } function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } function transferFrom( address from, address to, uint256 tokenId ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } 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"); } function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } 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" ); } 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); } function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } 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 { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } pragma solidity ^0.8.0; abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { mapping(address => mapping(uint256 => uint256)) private _ownedTokens; mapping(uint256 => uint256) private _ownedTokensIndex; uint256[] private _allTokens; mapping(uint256 => uint256) private _allTokensIndex; function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; _allTokensIndex[lastTokenId] = tokenIndex; delete _allTokensIndex[tokenId]; _allTokens.pop(); } } pragma solidity ^0.8.0; abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _setOwner(_msgSender()); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/Beans.sol //BEANS by Dumb Ways to Die Terms and Conditions [ https://www.beansnfts.io/terms ] pragma solidity ^0.8.0; contract BEANS_DWTD is ERC721Enumerable, Ownable { using Strings for uint256; string private baseURI; string private baseExtension = ".json"; string public notRevealedUri; string public PROVENANCE = ""; uint256 public cost = 0.3 ether; uint256 public maxSupply = 10000; uint256 public maxMintAmount = 2; uint256 public nftPerAddressLimit = 2; uint256 public reserveCount = 100; bool public paused = true; bool public revealed = false; bool public onlyWhitelisted = true; bool public signatureVerifiedWhitelist = true; bool private hasReserved = false; mapping(address => bool) public whitelistedAddresses; mapping(address => uint256) public addressMintedBalance; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, string memory _initNotRevealedUri ) ERC721(_name, _symbol){ setBaseURI(_initBaseURI); setNotRevealedURI(_initNotRevealedUri); PROVENANCE = "00ca4cecf6b21be789c92d1ec9a1a02e41d2525675e234d871a9bedc866b0d64"; reserve(); } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function reserve() public onlyOwner { if(hasReserved == false) { uint supply = totalSupply(); uint i; for (i = 0; i < reserveCount; i++) { _safeMint(msg.sender, supply + i); } } hasReserved = true; } function getMessageHash( address _to, uint _amount, string memory _message, uint _nonce ) public pure returns (bytes32) { return keccak256(abi.encodePacked(_to, _amount, _message, _nonce)); } function getEthSignedMessageHash(bytes32 _messageHash) public pure returns (bytes32) { return keccak256( abi.encodePacked("\x19Ethereum Signed Message:\n32", _messageHash) ); } function verify( address _signer, address _to, uint _amount, string memory _message, uint _nonce, bytes memory signature ) public pure returns (bool) { bytes32 messageHash = getMessageHash(_to, _amount, _message, _nonce); bytes32 ethSignedMessageHash = getEthSignedMessageHash(messageHash); return recoverSigner(ethSignedMessageHash, signature) == _signer; } function recoverSigner(bytes32 _ethSignedMessageHash, bytes memory _signature) public pure returns (address) { (bytes32 r, bytes32 s, uint8 v) = splitSignature(_signature); return ecrecover(_ethSignedMessageHash, v, r, s); } function splitSignature(bytes memory sig) public pure returns ( bytes32 r, bytes32 s, uint8 v ) { require(sig.length == 65, "invalid signature length"); assembly { r := mload(add(sig, 32)) s := mload(add(sig, 64)) v := byte(0, mload(add(sig, 96))) } } function mint( uint256 _mintAmount, uint _amount, string memory _message, uint _nonce, bytes memory signature) public payable { uint256 supply = totalSupply(); require(_mintAmount > 0, "Need to mint at least 1 NFT"); require(supply + _mintAmount <= maxSupply, "Sold Out!"); if (msg.sender != owner()) { if(signatureVerifiedWhitelist) { require(verify(owner(), msg.sender, _amount, _message, _nonce, signature), "Failed to sign"); } else if(onlyWhitelisted == true) { require(isWhitelisted(msg.sender), "User is not whitelisted"); } require(!paused, "The contract is paused"); require(msg.value >= cost * _mintAmount, "Insufficient funds"); uint256 ownerMintedCount = addressMintedBalance[msg.sender]; require(ownerMintedCount + _mintAmount <= nftPerAddressLimit, "Max NFT per address exceeded"); require(_mintAmount <= maxMintAmount, "Max mint amount per session exceeded"); } addressMintedBalance[msg.sender] += _mintAmount; uint i; for (i = 0; i < _mintAmount; i++) { _safeMint(msg.sender, supply + i); } } function mintPublic(uint256 _mintAmount) public payable { require(!paused, "The contract is paused"); require(signatureVerifiedWhitelist == false, "Signature required"); uint256 supply = totalSupply(); require(_mintAmount > 0, "Need to mint at least 1 NFT"); require(supply + _mintAmount <= maxSupply, "Sold Out!"); if (msg.sender != owner()) { require(msg.value >= cost * _mintAmount, "Insufficient funds"); uint256 ownerMintedCount = addressMintedBalance[msg.sender]; require(ownerMintedCount + _mintAmount <= nftPerAddressLimit, "Max NFT per address exceeded"); require(_mintAmount <= maxMintAmount, "Max mint amount per session exceeded"); } addressMintedBalance[msg.sender] += _mintAmount; uint i; for (i = 0; i < _mintAmount; i++) { _safeMint(msg.sender, supply + i); } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if(revealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } function setRevealed(bool _state) public onlyOwner { revealed = _state; } function pause(bool _state) public onlyOwner { paused = _state; } function setSignatureVerifiedWhitelist(bool _state) public onlyOwner { signatureVerifiedWhitelist = _state; } function setNftPerAddressLimit(uint256 _limit) public onlyOwner { nftPerAddressLimit = _limit; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function setProvenanceHash(string memory provenanceHash) public onlyOwner { PROVENANCE = provenanceHash; } function setOnlyWhitelisted(bool _state) public onlyOwner { onlyWhitelisted = _state; } function whitelistAddress(address[] calldata usersToAdd) public onlyOwner { for (uint i = 0; i < usersToAdd.length; i++) whitelistedAddresses[usersToAdd[i]] = true; } function unWhitelistAdress(address[] calldata usersToAdd) public onlyOwner { for (uint i = 0; i < usersToAdd.length; i++) whitelistedAddresses[usersToAdd[i]] = false; } function isWhitelisted(address _address) public view returns(bool) { return whitelistedAddresses[_address]; } function withdraw() public payable onlyOwner { (bool hs, ) = payable(0x1e9C6144c06Bb4B21586E11bb9d0D526Dc590C9d).call{value: address(this).balance}(""); require(hs); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"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":[],"name":"PROVENANCE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_messageHash","type":"bytes32"}],"name":"getEthSignedMessageHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"string","name":"_message","type":"string"},{"internalType":"uint256","name":"_nonce","type":"uint256"}],"name":"getMessageHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","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":[{"internalType":"address","name":"_address","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"string","name":"_message","type":"string"},{"internalType":"uint256","name":"_nonce","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintPublic","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_ethSignedMessageHash","type":"bytes32"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"recoverSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserveCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"provenanceHash","type":"string"}],"name":"setProvenanceHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setSignatureVerifiedWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signatureVerifiedWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"splitSignature","outputs":[{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"}],"stateMutability":"pure","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"},{"inputs":[{"internalType":"address[]","name":"usersToAdd","type":"address[]"}],"name":"unWhitelistAdress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_signer","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"string","name":"_message","type":"string"},{"internalType":"uint256","name":"_nonce","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"verify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"usersToAdd","type":"address[]"}],"name":"whitelistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistedAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60c06040526005608081905264173539b7b760d91b60a09081526200002891600c9190620009af565b506040805160208101918290526000908190526200004991600e91620009af565b50670429d069189e0000600f556127106010556002601181905560125560646013556014805464ffffffffff191663010100011790553480156200008c57600080fd5b50604051620041ad380380620041ad833981016040819052620000af9162000b19565b835184908490620000c8906000906020850190620009af565b508051620000de906001906020840190620009af565b505050620000fb620000f56200015660201b60201c565b6200015a565b6200010682620001ac565b620001118162000214565b6040518060600160405280604081526020016200416d6040913980516200014191600e91602090910190620009af565b506200014c62000274565b5050505062000d43565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a546001600160a01b03163314620001fb5760405162461bcd60e51b815260206004820181905260248201526000805160206200414d83398151915260448201526064015b60405180910390fd5b80516200021090600b906020840190620009af565b5050565b600a546001600160a01b031633146200025f5760405162461bcd60e51b815260206004820181905260248201526000805160206200414d8339815191526044820152606401620001f2565b80516200021090600d906020840190620009af565b600a546001600160a01b03163314620002bf5760405162461bcd60e51b815260206004820181905260248201526000805160206200414d8339815191526044820152606401620001f2565b601454640100000000900460ff166200031d576000620002de60085490565b905060005b6013548110156200031a576200030533620002ff838562000c28565b62000333565b80620003118162000ccd565b915050620002e3565b50505b6014805460ff60201b1916640100000000179055565b620002108282604051806020016040528060008152506200035560201b60201c565b620003618383620003cd565b62000370600084848462000523565b620003c85760405162461bcd60e51b815260206004820152603260248201526000805160206200412d83398151915260448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401620001f2565b505050565b6001600160a01b038216620004255760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401620001f2565b6000818152600260205260409020546001600160a01b0316156200048c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401620001f2565b6200049a600083836200068c565b6001600160a01b0382166000908152600360205260408120805460019290620004c590849062000c28565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600062000544846001600160a01b03166200076860201b62001ff31760201c565b156200068057604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906200057e90339089908890889060040162000bd2565b602060405180830381600087803b1580156200059957600080fd5b505af1925050508015620005cc575060408051601f3d908101601f19168201909252620005c99181019062000ae6565b60015b62000665573d808015620005fd576040519150601f19603f3d011682016040523d82523d6000602084013e62000602565b606091505b5080516200065d5760405162461bcd60e51b815260206004820152603260248201526000805160206200412d83398151915260448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401620001f2565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905062000684565b5060015b949350505050565b620006a4838383620003c860201b62000d871760201c565b6001600160a01b0383166200070257620006fc81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b62000728565b816001600160a01b0316836001600160a01b03161462000728576200072883826200076e565b6001600160a01b0382166200074257620003c8816200081b565b826001600160a01b0316826001600160a01b031614620003c857620003c88282620008d5565b3b151590565b6000600162000788846200092660201b620015751760201c565b62000794919062000c43565b600083815260076020526040902054909150808214620007e8576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906200082f9060019062000c43565b600083815260096020526040812054600880549394509092849081106200085a576200085a62000d17565b9060005260206000200154905080600883815481106200087e576200087e62000d17565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480620008b957620008b962000d01565b6001900381819060005260206000200160009055905550505050565b6000620008ed836200092660201b620015751760201c565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b60006001600160a01b038216620009935760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401620001f2565b506001600160a01b031660009081526003602052604090205490565b828054620009bd9062000c90565b90600052602060002090601f016020900481019282620009e1576000855562000a2c565b82601f10620009fc57805160ff191683800117855562000a2c565b8280016001018555821562000a2c579182015b8281111562000a2c57825182559160200191906001019062000a0f565b5062000a3a92915062000a3e565b5090565b5b8082111562000a3a576000815560010162000a3f565b600082601f83011262000a6757600080fd5b81516001600160401b038082111562000a845762000a8462000d2d565b604051601f8301601f19908116603f0116810190828211818310171562000aaf5762000aaf62000d2d565b8160405283815286602085880101111562000ac957600080fd5b62000adc84602083016020890162000c5d565b9695505050505050565b60006020828403121562000af957600080fd5b81516001600160e01b03198116811462000b1257600080fd5b9392505050565b6000806000806080858703121562000b3057600080fd5b84516001600160401b038082111562000b4857600080fd5b62000b568883890162000a55565b9550602087015191508082111562000b6d57600080fd5b62000b7b8883890162000a55565b9450604087015191508082111562000b9257600080fd5b62000ba08883890162000a55565b9350606087015191508082111562000bb757600080fd5b5062000bc68782880162000a55565b91505092959194509250565b600060018060a01b03808716835280861660208401525083604083015260806060830152825180608084015262000c118160a085016020870162000c5d565b601f01601f19169190910160a00195945050505050565b6000821982111562000c3e5762000c3e62000ceb565b500190565b60008282101562000c585762000c5862000ceb565b500390565b60005b8381101562000c7a57818101518382015260200162000c60565b8381111562000c8a576000848401525b50505050565b600181811c9082168062000ca557607f821691505b6020821081141562000cc757634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141562000ce45762000ce462000ceb565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6133da8062000d536000396000f3fe6080604052600436106103505760003560e01c806361905807116101c6578063b31d61b0116100f7578063d5abeb0111610095578063efd0cbf91161006f578063efd0cbf9146109dd578063f2c4ce1e146109f0578063f2fde38b14610a10578063fa54080114610a3057600080fd5b8063d5abeb011461095e578063e0a8085314610974578063e985e9c51461099457600080fd5b8063ba7d2c76116100d1578063ba7d2c76146108f3578063c87b56dd14610909578063cd3293de14610929578063d0eb26b01461093e57600080fd5b8063b31d61b014610893578063b548f2de146108b3578063b88d4fde146108d357600080fd5b806395d89b4111610164578063a22cb4651161013e578063a22cb465146107f5578063a35f8a4014610815578063a7bb580314610835578063abe5026a1461087357600080fd5b806395d89b41146107a057806397aba7f9146107b55780639c70b512146107d557600080fd5b806370a08231116101a057806370a082311461072d578063715018a61461074d5780637f00c7a6146107625780638da5cb5b1461078257600080fd5b806361905807146106d85780636352211e146106f85780636373a6b11461071857600080fd5b806323b872dd116102a057806342842e0e1161023e5780634f6ccce7116102185780634f6ccce71461065f578063518302271461067f57806355f804b31461069e5780635c975abb146106be57600080fd5b806342842e0e146105f2578063438b63001461061257806344a0d68a1461063f57600080fd5b806334ab65e61161027a57806334ab65e6146105705780633af32abf146105915780633c952764146105ca5780633ccfd60b146105ea57600080fd5b806323b872dd1461051d5780632f745c591461053d57806330d583d71461055d57600080fd5b8063095ea7b31161030d57806316317c21116102e757806316317c21146104af57806318160ddd146104c557806318cae269146104da578063239c70ae1461050757600080fd5b8063095ea7b31461044b578063109695231461046b57806313faede61461048b57600080fd5b806301ffc9a71461035557806302329a291461038a57806306c933d8146103ac57806306fdde03146103dc578063081812fc146103fe578063081c8c4414610436575b600080fd5b34801561036157600080fd5b50610375610370366004612e52565b610a50565b60405190151581526020015b60405180910390f35b34801561039657600080fd5b506103aa6103a5366004612dd7565b610a7b565b005b3480156103b857600080fd5b506103756103c7366004612b26565b60156020526000908152604090205460ff1681565b3480156103e857600080fd5b506103f1610ac1565b60405161038191906130f9565b34801561040a57600080fd5b5061041e610419366004612df2565b610b53565b6040516001600160a01b039091168152602001610381565b34801561044257600080fd5b506103f1610be8565b34801561045757600080fd5b506103aa610466366004612cd9565b610c76565b34801561047757600080fd5b506103aa610486366004612e8c565b610d8c565b34801561049757600080fd5b506104a1600f5481565b604051908152602001610381565b3480156104bb57600080fd5b506104a160135481565b3480156104d157600080fd5b506008546104a1565b3480156104e657600080fd5b506104a16104f5366004612b26565b60166020526000908152604090205481565b34801561051357600080fd5b506104a160115481565b34801561052957600080fd5b506103aa610538366004612b74565b610dcd565b34801561054957600080fd5b506104a1610558366004612cd9565b610dfe565b6103aa61056b366004612ec1565b610e94565b34801561057c57600080fd5b50601454610375906301000000900460ff1681565b34801561059d57600080fd5b506103756105ac366004612b26565b6001600160a01b031660009081526015602052604090205460ff1690565b3480156105d657600080fd5b506103aa6105e5366004612dd7565b6111bd565b6103aa611203565b3480156105fe57600080fd5b506103aa61060d366004612b74565b611299565b34801561061e57600080fd5b5061063261062d366004612b26565b6112b4565b60405161038191906130b5565b34801561064b57600080fd5b506103aa61065a366004612df2565b611356565b34801561066b57600080fd5b506104a161067a366004612df2565b611385565b34801561068b57600080fd5b5060145461037590610100900460ff1681565b3480156106aa57600080fd5b506103aa6106b9366004612e8c565b611418565b3480156106ca57600080fd5b506014546103759060ff1681565b3480156106e457600080fd5b506103aa6106f3366004612d62565b611455565b34801561070457600080fd5b5061041e610713366004612df2565b6114f1565b34801561072457600080fd5b506103f1611568565b34801561073957600080fd5b506104a1610748366004612b26565b611575565b34801561075957600080fd5b506103aa6115fc565b34801561076e57600080fd5b506103aa61077d366004612df2565b611632565b34801561078e57600080fd5b50600a546001600160a01b031661041e565b3480156107ac57600080fd5b506103f1611661565b3480156107c157600080fd5b5061041e6107d0366004612e0b565b611670565b3480156107e157600080fd5b506014546103759062010000900460ff1681565b34801561080157600080fd5b506103aa610810366004612caf565b6116ef565b34801561082157600080fd5b506104a1610830366004612d03565b6117b4565b34801561084157600080fd5b50610855610850366004612e8c565b6117ee565b60408051938452602084019290925260ff1690820152606001610381565b34801561087f57600080fd5b5061037561088e366004612c18565b611862565b34801561089f57600080fd5b506103aa6108ae366004612d62565b6118ab565b3480156108bf57600080fd5b506103aa6108ce366004612dd7565b611947565b3480156108df57600080fd5b506103aa6108ee366004612bb0565b61198f565b3480156108ff57600080fd5b506104a160125481565b34801561091557600080fd5b506103f1610924366004612df2565b6119c7565b34801561093557600080fd5b506103aa611b46565b34801561094a57600080fd5b506103aa610959366004612df2565b611bd6565b34801561096a57600080fd5b506104a160105481565b34801561098057600080fd5b506103aa61098f366004612dd7565b611c05565b3480156109a057600080fd5b506103756109af366004612b41565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6103aa6109eb366004612df2565b611c49565b3480156109fc57600080fd5b506103aa610a0b366004612e8c565b611ecb565b348015610a1c57600080fd5b506103aa610a2b366004612b26565b611f08565b348015610a3c57600080fd5b506104a1610a4b366004612df2565b611fa0565b60006001600160e01b0319821663780e9d6360e01b1480610a755750610a7582611ff9565b92915050565b600a546001600160a01b03163314610aae5760405162461bcd60e51b8152600401610aa5906131a2565b60405180910390fd5b6014805460ff1916911515919091179055565b606060008054610ad0906132b6565b80601f0160208091040260200160405190810160405280929190818152602001828054610afc906132b6565b8015610b495780601f10610b1e57610100808354040283529160200191610b49565b820191906000526020600020905b815481529060010190602001808311610b2c57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610bcc5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610aa5565b506000908152600460205260409020546001600160a01b031690565b600d8054610bf5906132b6565b80601f0160208091040260200160405190810160405280929190818152602001828054610c21906132b6565b8015610c6e5780601f10610c4357610100808354040283529160200191610c6e565b820191906000526020600020905b815481529060010190602001808311610c5157829003601f168201915b505050505081565b6000610c81826114f1565b9050806001600160a01b0316836001600160a01b03161415610cef5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610aa5565b336001600160a01b0382161480610d0b5750610d0b81336109af565b610d7d5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610aa5565b610d878383612049565b505050565b600a546001600160a01b03163314610db65760405162461bcd60e51b8152600401610aa5906131a2565b8051610dc990600e9060208401906129d4565b5050565b610dd733826120b7565b610df35760405162461bcd60e51b8152600401610aa5906131d7565b610d878383836121aa565b6000610e0983611575565b8210610e6b5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610aa5565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6000610e9f60085490565b905060008611610ef15760405162461bcd60e51b815260206004820152601b60248201527f4e65656420746f206d696e74206174206c656173742031204e465400000000006044820152606401610aa5565b601054610efe8783613228565b1115610f385760405162461bcd60e51b8152602060048201526009602482015268536f6c64204f75742160b81b6044820152606401610aa5565b600a546001600160a01b0316331461115f576014546301000000900460ff1615610fbd57610f7b610f71600a546001600160a01b031690565b3387878787611862565b610fb85760405162461bcd60e51b815260206004820152600e60248201526d2330b4b632b2103a379039b4b3b760911b6044820152606401610aa5565b611032565b60145462010000900460ff16151560011415611032573360009081526015602052604090205460ff166110325760405162461bcd60e51b815260206004820152601760248201527f55736572206973206e6f742077686974656c69737465640000000000000000006044820152606401610aa5565b60145460ff161561107e5760405162461bcd60e51b8152602060048201526016602482015275151a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b6044820152606401610aa5565b85600f5461108c9190613254565b3410156110d05760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b6044820152606401610aa5565b336000908152601660205260409020546012546110ed8883613228565b111561113b5760405162461bcd60e51b815260206004820152601c60248201527f4d6178204e4654207065722061646472657373206578636565646564000000006044820152606401610aa5565b60115487111561115d5760405162461bcd60e51b8152600401610aa59061315e565b505b336000908152601660205260408120805488929061117e908490613228565b90915550600090505b868110156111b4576111a23361119d8385613228565b612355565b806111ac816132f1565b915050611187565b50505050505050565b600a546001600160a01b031633146111e75760405162461bcd60e51b8152600401610aa5906131a2565b60148054911515620100000262ff000019909216919091179055565b600a546001600160a01b0316331461122d5760405162461bcd60e51b8152600401610aa5906131a2565b604051600090731e9c6144c06bb4b21586e11bb9d0d526dc590c9d9047908381818185875af1925050503d8060008114611283576040519150601f19603f3d011682016040523d82523d6000602084013e611288565b606091505b505090508061129657600080fd5b50565b610d878383836040518060200160405280600081525061198f565b606060006112c183611575565b905060008167ffffffffffffffff8111156112de576112de613378565b604051908082528060200260200182016040528015611307578160200160208202803683370190505b50905060005b8281101561134e5761131f8582610dfe565b82828151811061133157611331613362565b602090810291909101015280611346816132f1565b91505061130d565b509392505050565b600a546001600160a01b031633146113805760405162461bcd60e51b8152600401610aa5906131a2565b600f55565b600061139060085490565b82106113f35760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610aa5565b6008828154811061140657611406613362565b90600052602060002001549050919050565b600a546001600160a01b031633146114425760405162461bcd60e51b8152600401610aa5906131a2565b8051610dc990600b9060208401906129d4565b600a546001600160a01b0316331461147f5760405162461bcd60e51b8152600401610aa5906131a2565b60005b81811015610d87576000601560008585858181106114a2576114a2613362565b90506020020160208101906114b79190612b26565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806114e9816132f1565b915050611482565b6000818152600260205260408120546001600160a01b031680610a755760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610aa5565b600e8054610bf5906132b6565b60006001600160a01b0382166115e05760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610aa5565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146116265760405162461bcd60e51b8152600401610aa5906131a2565b611630600061236f565b565b600a546001600160a01b0316331461165c5760405162461bcd60e51b8152600401610aa5906131a2565b601155565b606060018054610ad0906132b6565b60008060008061167f856117ee565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa1580156116da573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b6001600160a01b0382163314156117485760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610aa5565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000848484846040516020016117cd9493929190612f6e565b6040516020818303038152906040528051906020012090505b949350505050565b600080600083516041146118445760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e67746800000000000000006044820152606401610aa5565b50505060208101516040820151606090920151909260009190911a90565b600080611871878787876117b4565b9050600061187e82611fa0565b9050886001600160a01b03166118948286611670565b6001600160a01b0316149998505050505050505050565b600a546001600160a01b031633146118d55760405162461bcd60e51b8152600401610aa5906131a2565b60005b81811015610d87576001601560008585858181106118f8576118f8613362565b905060200201602081019061190d9190612b26565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061193f816132f1565b9150506118d8565b600a546001600160a01b031633146119715760405162461bcd60e51b8152600401610aa5906131a2565b6014805491151563010000000263ff00000019909216919091179055565b61199933836120b7565b6119b55760405162461bcd60e51b8152600401610aa5906131d7565b6119c1848484846123c1565b50505050565b6000818152600260205260409020546060906001600160a01b0316611a465760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610aa5565b601454610100900460ff16611ae757600d8054611a62906132b6565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8e906132b6565b8015611adb5780601f10611ab057610100808354040283529160200191611adb565b820191906000526020600020905b815481529060010190602001808311611abe57829003601f168201915b50505050509050919050565b6000611af16123f4565b90506000815111611b115760405180602001604052806000815250611b3f565b80611b1b84612403565b600c604051602001611b2f93929190612fb4565b6040516020818303038152906040525b9392505050565b600a546001600160a01b03163314611b705760405162461bcd60e51b8152600401610aa5906131a2565b601454640100000000900460ff16611bbf576000611b8d60085490565b905060005b601354811015611bbc57611baa3361119d8385613228565b80611bb4816132f1565b915050611b92565b50505b6014805464ff000000001916640100000000179055565b600a546001600160a01b03163314611c005760405162461bcd60e51b8152600401610aa5906131a2565b601255565b600a546001600160a01b03163314611c2f5760405162461bcd60e51b8152600401610aa5906131a2565b601480549115156101000261ff0019909216919091179055565b60145460ff1615611c955760405162461bcd60e51b8152602060048201526016602482015275151a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b6044820152606401610aa5565b6014546301000000900460ff1615611ce45760405162461bcd60e51b815260206004820152601260248201527114da59db985d1d5c99481c995c5d5a5c995960721b6044820152606401610aa5565b6000611cef60085490565b905060008211611d415760405162461bcd60e51b815260206004820152601b60248201527f4e65656420746f206d696e74206174206c656173742031204e465400000000006044820152606401610aa5565b601054611d4e8383613228565b1115611d885760405162461bcd60e51b8152602060048201526009602482015268536f6c64204f75742160b81b6044820152606401610aa5565b600a546001600160a01b03163314611e7b5781600f54611da89190613254565b341015611dec5760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b6044820152606401610aa5565b33600090815260166020526040902054601254611e098483613228565b1115611e575760405162461bcd60e51b815260206004820152601c60248201527f4d6178204e4654207065722061646472657373206578636565646564000000006044820152606401610aa5565b601154831115611e795760405162461bcd60e51b8152600401610aa59061315e565b505b3360009081526016602052604081208054849290611e9a908490613228565b90915550600090505b82811015610d8757611eb93361119d8385613228565b80611ec3816132f1565b915050611ea3565b600a546001600160a01b03163314611ef55760405162461bcd60e51b8152600401610aa5906131a2565b8051610dc990600d9060208401906129d4565b600a546001600160a01b03163314611f325760405162461bcd60e51b8152600401610aa5906131a2565b6001600160a01b038116611f975760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aa5565b6112968161236f565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b3b151590565b60006001600160e01b031982166380ac58cd60e01b148061202a57506001600160e01b03198216635b5e139f60e01b145b80610a7557506301ffc9a760e01b6001600160e01b0319831614610a75565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061207e826114f1565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166121305760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610aa5565b600061213b836114f1565b9050806001600160a01b0316846001600160a01b031614806121765750836001600160a01b031661216b84610b53565b6001600160a01b0316145b806117e657506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff166117e6565b826001600160a01b03166121bd826114f1565b6001600160a01b0316146122255760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610aa5565b6001600160a01b0382166122875760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610aa5565b612292838383612501565b61229d600082612049565b6001600160a01b03831660009081526003602052604081208054600192906122c6908490613273565b90915550506001600160a01b03821660009081526003602052604081208054600192906122f4908490613228565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610dc98282604051806020016040528060008152506125b9565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6123cc8484846121aa565b6123d8848484846125ec565b6119c15760405162461bcd60e51b8152600401610aa59061310c565b6060600b8054610ad0906132b6565b6060816124275750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612451578061243b816132f1565b915061244a9050600a83613240565b915061242b565b60008167ffffffffffffffff81111561246c5761246c613378565b6040519080825280601f01601f191660200182016040528015612496576020820181803683370190505b5090505b84156117e6576124ab600183613273565b91506124b8600a8661330c565b6124c3906030613228565b60f81b8183815181106124d8576124d8613362565b60200101906001600160f81b031916908160001a9053506124fa600a86613240565b945061249a565b6001600160a01b03831661255c5761255781600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b61257f565b816001600160a01b0316836001600160a01b03161461257f5761257f83826126f6565b6001600160a01b03821661259657610d8781612793565b826001600160a01b0316826001600160a01b031614610d8757610d878282612842565b6125c38383612886565b6125d060008484846125ec565b610d875760405162461bcd60e51b8152600401610aa59061310c565b60006001600160a01b0384163b156126ee57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612630903390899088908890600401613078565b602060405180830381600087803b15801561264a57600080fd5b505af192505050801561267a575060408051601f3d908101601f1916820190925261267791810190612e6f565b60015b6126d4573d8080156126a8576040519150601f19603f3d011682016040523d82523d6000602084013e6126ad565b606091505b5080516126cc5760405162461bcd60e51b8152600401610aa59061310c565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506117e6565b5060016117e6565b6000600161270384611575565b61270d9190613273565b600083815260076020526040902054909150808214612760576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906127a590600190613273565b600083815260096020526040812054600880549394509092849081106127cd576127cd613362565b9060005260206000200154905080600883815481106127ee576127ee613362565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806128265761282661334c565b6001900381819060005260206000200160009055905550505050565b600061284d83611575565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166128dc5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610aa5565b6000818152600260205260409020546001600160a01b0316156129415760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610aa5565b61294d60008383612501565b6001600160a01b0382166000908152600360205260408120805460019290612976908490613228565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546129e0906132b6565b90600052602060002090601f016020900481019282612a025760008555612a48565b82601f10612a1b57805160ff1916838001178555612a48565b82800160010185558215612a48579182015b82811115612a48578251825591602001919060010190612a2d565b50612a54929150612a58565b5090565b5b80821115612a545760008155600101612a59565b80356001600160a01b0381168114612a8457600080fd5b919050565b80358015158114612a8457600080fd5b600082601f830112612aaa57600080fd5b813567ffffffffffffffff80821115612ac557612ac5613378565b604051601f8301601f19908116603f01168101908282118183101715612aed57612aed613378565b81604052838152866020858801011115612b0657600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060208284031215612b3857600080fd5b611b3f82612a6d565b60008060408385031215612b5457600080fd5b612b5d83612a6d565b9150612b6b60208401612a6d565b90509250929050565b600080600060608486031215612b8957600080fd5b612b9284612a6d565b9250612ba060208501612a6d565b9150604084013590509250925092565b60008060008060808587031215612bc657600080fd5b612bcf85612a6d565b9350612bdd60208601612a6d565b925060408501359150606085013567ffffffffffffffff811115612c0057600080fd5b612c0c87828801612a99565b91505092959194509250565b60008060008060008060c08789031215612c3157600080fd5b612c3a87612a6d565b9550612c4860208801612a6d565b945060408701359350606087013567ffffffffffffffff80821115612c6c57600080fd5b612c788a838b01612a99565b94506080890135935060a0890135915080821115612c9557600080fd5b50612ca289828a01612a99565b9150509295509295509295565b60008060408385031215612cc257600080fd5b612ccb83612a6d565b9150612b6b60208401612a89565b60008060408385031215612cec57600080fd5b612cf583612a6d565b946020939093013593505050565b60008060008060808587031215612d1957600080fd5b612d2285612a6d565b935060208501359250604085013567ffffffffffffffff811115612d4557600080fd5b612d5187828801612a99565b949793965093946060013593505050565b60008060208385031215612d7557600080fd5b823567ffffffffffffffff80821115612d8d57600080fd5b818501915085601f830112612da157600080fd5b813581811115612db057600080fd5b8660208260051b8501011115612dc557600080fd5b60209290920196919550909350505050565b600060208284031215612de957600080fd5b611b3f82612a89565b600060208284031215612e0457600080fd5b5035919050565b60008060408385031215612e1e57600080fd5b82359150602083013567ffffffffffffffff811115612e3c57600080fd5b612e4885828601612a99565b9150509250929050565b600060208284031215612e6457600080fd5b8135611b3f8161338e565b600060208284031215612e8157600080fd5b8151611b3f8161338e565b600060208284031215612e9e57600080fd5b813567ffffffffffffffff811115612eb557600080fd5b6117e684828501612a99565b600080600080600060a08688031215612ed957600080fd5b8535945060208601359350604086013567ffffffffffffffff80821115612eff57600080fd5b612f0b89838a01612a99565b9450606088013593506080880135915080821115612f2857600080fd5b50612f3588828901612a99565b9150509295509295909350565b60008151808452612f5a81602086016020860161328a565b601f01601f19169290920160200192915050565b6bffffffffffffffffffffffff198560601b16815283601482015260008351612f9e81603485016020880161328a565b6034920191820192909252605401949350505050565b600084516020612fc78285838a0161328a565b855191840191612fda8184848a0161328a565b8554920191600090600181811c9080831680612ff757607f831692505b85831081141561301557634e487b7160e01b85526022600452602485fd5b808015613029576001811461303a57613067565b60ff19851688528388019550613067565b60008b81526020902060005b8581101561305f5781548a820152908401908801613046565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906130ab90830184612f42565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156130ed578351835292840192918401916001016130d1565b50909695505050505050565b602081526000611b3f6020830184612f42565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526024908201527f4d6178206d696e7420616d6f756e74207065722073657373696f6e20657863656040820152631959195960e21b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6000821982111561323b5761323b613320565b500190565b60008261324f5761324f613336565b500490565b600081600019048311821515161561326e5761326e613320565b500290565b60008282101561328557613285613320565b500390565b60005b838110156132a557818101518382015260200161328d565b838111156119c15750506000910152565b600181811c908216806132ca57607f821691505b602082108114156132eb57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561330557613305613320565b5060010190565b60008261331b5761331b613336565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461129657600080fdfea2646970667358221220df6f8c2d30e8330a4d2e600736ee185c0a6e223232c993c55d70041bee8f014164736f6c634300080700334552433732313a207472616e7366657220746f206e6f6e2045524337323152654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657230306361346365636636623231626537383963393264316563396131613032653431643235323536373565323334643837316139626564633836366230643634000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000184245414e53202d2044756d62205761797320746f20446965000000000000000000000000000000000000000000000000000000000000000000000000000000054245414e530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d535967625136516159315578795a47507068744e623348346d4b6a71316744534e6962475a4a32574a5a44392f000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d62576d6f5a76355466736d347056484a413356725952716763426b7a38516a555131735a57744e73386562460000000000000000000000
Deployed Bytecode
0x6080604052600436106103505760003560e01c806361905807116101c6578063b31d61b0116100f7578063d5abeb0111610095578063efd0cbf91161006f578063efd0cbf9146109dd578063f2c4ce1e146109f0578063f2fde38b14610a10578063fa54080114610a3057600080fd5b8063d5abeb011461095e578063e0a8085314610974578063e985e9c51461099457600080fd5b8063ba7d2c76116100d1578063ba7d2c76146108f3578063c87b56dd14610909578063cd3293de14610929578063d0eb26b01461093e57600080fd5b8063b31d61b014610893578063b548f2de146108b3578063b88d4fde146108d357600080fd5b806395d89b4111610164578063a22cb4651161013e578063a22cb465146107f5578063a35f8a4014610815578063a7bb580314610835578063abe5026a1461087357600080fd5b806395d89b41146107a057806397aba7f9146107b55780639c70b512146107d557600080fd5b806370a08231116101a057806370a082311461072d578063715018a61461074d5780637f00c7a6146107625780638da5cb5b1461078257600080fd5b806361905807146106d85780636352211e146106f85780636373a6b11461071857600080fd5b806323b872dd116102a057806342842e0e1161023e5780634f6ccce7116102185780634f6ccce71461065f578063518302271461067f57806355f804b31461069e5780635c975abb146106be57600080fd5b806342842e0e146105f2578063438b63001461061257806344a0d68a1461063f57600080fd5b806334ab65e61161027a57806334ab65e6146105705780633af32abf146105915780633c952764146105ca5780633ccfd60b146105ea57600080fd5b806323b872dd1461051d5780632f745c591461053d57806330d583d71461055d57600080fd5b8063095ea7b31161030d57806316317c21116102e757806316317c21146104af57806318160ddd146104c557806318cae269146104da578063239c70ae1461050757600080fd5b8063095ea7b31461044b578063109695231461046b57806313faede61461048b57600080fd5b806301ffc9a71461035557806302329a291461038a57806306c933d8146103ac57806306fdde03146103dc578063081812fc146103fe578063081c8c4414610436575b600080fd5b34801561036157600080fd5b50610375610370366004612e52565b610a50565b60405190151581526020015b60405180910390f35b34801561039657600080fd5b506103aa6103a5366004612dd7565b610a7b565b005b3480156103b857600080fd5b506103756103c7366004612b26565b60156020526000908152604090205460ff1681565b3480156103e857600080fd5b506103f1610ac1565b60405161038191906130f9565b34801561040a57600080fd5b5061041e610419366004612df2565b610b53565b6040516001600160a01b039091168152602001610381565b34801561044257600080fd5b506103f1610be8565b34801561045757600080fd5b506103aa610466366004612cd9565b610c76565b34801561047757600080fd5b506103aa610486366004612e8c565b610d8c565b34801561049757600080fd5b506104a1600f5481565b604051908152602001610381565b3480156104bb57600080fd5b506104a160135481565b3480156104d157600080fd5b506008546104a1565b3480156104e657600080fd5b506104a16104f5366004612b26565b60166020526000908152604090205481565b34801561051357600080fd5b506104a160115481565b34801561052957600080fd5b506103aa610538366004612b74565b610dcd565b34801561054957600080fd5b506104a1610558366004612cd9565b610dfe565b6103aa61056b366004612ec1565b610e94565b34801561057c57600080fd5b50601454610375906301000000900460ff1681565b34801561059d57600080fd5b506103756105ac366004612b26565b6001600160a01b031660009081526015602052604090205460ff1690565b3480156105d657600080fd5b506103aa6105e5366004612dd7565b6111bd565b6103aa611203565b3480156105fe57600080fd5b506103aa61060d366004612b74565b611299565b34801561061e57600080fd5b5061063261062d366004612b26565b6112b4565b60405161038191906130b5565b34801561064b57600080fd5b506103aa61065a366004612df2565b611356565b34801561066b57600080fd5b506104a161067a366004612df2565b611385565b34801561068b57600080fd5b5060145461037590610100900460ff1681565b3480156106aa57600080fd5b506103aa6106b9366004612e8c565b611418565b3480156106ca57600080fd5b506014546103759060ff1681565b3480156106e457600080fd5b506103aa6106f3366004612d62565b611455565b34801561070457600080fd5b5061041e610713366004612df2565b6114f1565b34801561072457600080fd5b506103f1611568565b34801561073957600080fd5b506104a1610748366004612b26565b611575565b34801561075957600080fd5b506103aa6115fc565b34801561076e57600080fd5b506103aa61077d366004612df2565b611632565b34801561078e57600080fd5b50600a546001600160a01b031661041e565b3480156107ac57600080fd5b506103f1611661565b3480156107c157600080fd5b5061041e6107d0366004612e0b565b611670565b3480156107e157600080fd5b506014546103759062010000900460ff1681565b34801561080157600080fd5b506103aa610810366004612caf565b6116ef565b34801561082157600080fd5b506104a1610830366004612d03565b6117b4565b34801561084157600080fd5b50610855610850366004612e8c565b6117ee565b60408051938452602084019290925260ff1690820152606001610381565b34801561087f57600080fd5b5061037561088e366004612c18565b611862565b34801561089f57600080fd5b506103aa6108ae366004612d62565b6118ab565b3480156108bf57600080fd5b506103aa6108ce366004612dd7565b611947565b3480156108df57600080fd5b506103aa6108ee366004612bb0565b61198f565b3480156108ff57600080fd5b506104a160125481565b34801561091557600080fd5b506103f1610924366004612df2565b6119c7565b34801561093557600080fd5b506103aa611b46565b34801561094a57600080fd5b506103aa610959366004612df2565b611bd6565b34801561096a57600080fd5b506104a160105481565b34801561098057600080fd5b506103aa61098f366004612dd7565b611c05565b3480156109a057600080fd5b506103756109af366004612b41565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6103aa6109eb366004612df2565b611c49565b3480156109fc57600080fd5b506103aa610a0b366004612e8c565b611ecb565b348015610a1c57600080fd5b506103aa610a2b366004612b26565b611f08565b348015610a3c57600080fd5b506104a1610a4b366004612df2565b611fa0565b60006001600160e01b0319821663780e9d6360e01b1480610a755750610a7582611ff9565b92915050565b600a546001600160a01b03163314610aae5760405162461bcd60e51b8152600401610aa5906131a2565b60405180910390fd5b6014805460ff1916911515919091179055565b606060008054610ad0906132b6565b80601f0160208091040260200160405190810160405280929190818152602001828054610afc906132b6565b8015610b495780601f10610b1e57610100808354040283529160200191610b49565b820191906000526020600020905b815481529060010190602001808311610b2c57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610bcc5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610aa5565b506000908152600460205260409020546001600160a01b031690565b600d8054610bf5906132b6565b80601f0160208091040260200160405190810160405280929190818152602001828054610c21906132b6565b8015610c6e5780601f10610c4357610100808354040283529160200191610c6e565b820191906000526020600020905b815481529060010190602001808311610c5157829003601f168201915b505050505081565b6000610c81826114f1565b9050806001600160a01b0316836001600160a01b03161415610cef5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610aa5565b336001600160a01b0382161480610d0b5750610d0b81336109af565b610d7d5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610aa5565b610d878383612049565b505050565b600a546001600160a01b03163314610db65760405162461bcd60e51b8152600401610aa5906131a2565b8051610dc990600e9060208401906129d4565b5050565b610dd733826120b7565b610df35760405162461bcd60e51b8152600401610aa5906131d7565b610d878383836121aa565b6000610e0983611575565b8210610e6b5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610aa5565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6000610e9f60085490565b905060008611610ef15760405162461bcd60e51b815260206004820152601b60248201527f4e65656420746f206d696e74206174206c656173742031204e465400000000006044820152606401610aa5565b601054610efe8783613228565b1115610f385760405162461bcd60e51b8152602060048201526009602482015268536f6c64204f75742160b81b6044820152606401610aa5565b600a546001600160a01b0316331461115f576014546301000000900460ff1615610fbd57610f7b610f71600a546001600160a01b031690565b3387878787611862565b610fb85760405162461bcd60e51b815260206004820152600e60248201526d2330b4b632b2103a379039b4b3b760911b6044820152606401610aa5565b611032565b60145462010000900460ff16151560011415611032573360009081526015602052604090205460ff166110325760405162461bcd60e51b815260206004820152601760248201527f55736572206973206e6f742077686974656c69737465640000000000000000006044820152606401610aa5565b60145460ff161561107e5760405162461bcd60e51b8152602060048201526016602482015275151a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b6044820152606401610aa5565b85600f5461108c9190613254565b3410156110d05760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b6044820152606401610aa5565b336000908152601660205260409020546012546110ed8883613228565b111561113b5760405162461bcd60e51b815260206004820152601c60248201527f4d6178204e4654207065722061646472657373206578636565646564000000006044820152606401610aa5565b60115487111561115d5760405162461bcd60e51b8152600401610aa59061315e565b505b336000908152601660205260408120805488929061117e908490613228565b90915550600090505b868110156111b4576111a23361119d8385613228565b612355565b806111ac816132f1565b915050611187565b50505050505050565b600a546001600160a01b031633146111e75760405162461bcd60e51b8152600401610aa5906131a2565b60148054911515620100000262ff000019909216919091179055565b600a546001600160a01b0316331461122d5760405162461bcd60e51b8152600401610aa5906131a2565b604051600090731e9c6144c06bb4b21586e11bb9d0d526dc590c9d9047908381818185875af1925050503d8060008114611283576040519150601f19603f3d011682016040523d82523d6000602084013e611288565b606091505b505090508061129657600080fd5b50565b610d878383836040518060200160405280600081525061198f565b606060006112c183611575565b905060008167ffffffffffffffff8111156112de576112de613378565b604051908082528060200260200182016040528015611307578160200160208202803683370190505b50905060005b8281101561134e5761131f8582610dfe565b82828151811061133157611331613362565b602090810291909101015280611346816132f1565b91505061130d565b509392505050565b600a546001600160a01b031633146113805760405162461bcd60e51b8152600401610aa5906131a2565b600f55565b600061139060085490565b82106113f35760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610aa5565b6008828154811061140657611406613362565b90600052602060002001549050919050565b600a546001600160a01b031633146114425760405162461bcd60e51b8152600401610aa5906131a2565b8051610dc990600b9060208401906129d4565b600a546001600160a01b0316331461147f5760405162461bcd60e51b8152600401610aa5906131a2565b60005b81811015610d87576000601560008585858181106114a2576114a2613362565b90506020020160208101906114b79190612b26565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806114e9816132f1565b915050611482565b6000818152600260205260408120546001600160a01b031680610a755760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610aa5565b600e8054610bf5906132b6565b60006001600160a01b0382166115e05760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610aa5565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146116265760405162461bcd60e51b8152600401610aa5906131a2565b611630600061236f565b565b600a546001600160a01b0316331461165c5760405162461bcd60e51b8152600401610aa5906131a2565b601155565b606060018054610ad0906132b6565b60008060008061167f856117ee565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa1580156116da573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b6001600160a01b0382163314156117485760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610aa5565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000848484846040516020016117cd9493929190612f6e565b6040516020818303038152906040528051906020012090505b949350505050565b600080600083516041146118445760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e67746800000000000000006044820152606401610aa5565b50505060208101516040820151606090920151909260009190911a90565b600080611871878787876117b4565b9050600061187e82611fa0565b9050886001600160a01b03166118948286611670565b6001600160a01b0316149998505050505050505050565b600a546001600160a01b031633146118d55760405162461bcd60e51b8152600401610aa5906131a2565b60005b81811015610d87576001601560008585858181106118f8576118f8613362565b905060200201602081019061190d9190612b26565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061193f816132f1565b9150506118d8565b600a546001600160a01b031633146119715760405162461bcd60e51b8152600401610aa5906131a2565b6014805491151563010000000263ff00000019909216919091179055565b61199933836120b7565b6119b55760405162461bcd60e51b8152600401610aa5906131d7565b6119c1848484846123c1565b50505050565b6000818152600260205260409020546060906001600160a01b0316611a465760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610aa5565b601454610100900460ff16611ae757600d8054611a62906132b6565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8e906132b6565b8015611adb5780601f10611ab057610100808354040283529160200191611adb565b820191906000526020600020905b815481529060010190602001808311611abe57829003601f168201915b50505050509050919050565b6000611af16123f4565b90506000815111611b115760405180602001604052806000815250611b3f565b80611b1b84612403565b600c604051602001611b2f93929190612fb4565b6040516020818303038152906040525b9392505050565b600a546001600160a01b03163314611b705760405162461bcd60e51b8152600401610aa5906131a2565b601454640100000000900460ff16611bbf576000611b8d60085490565b905060005b601354811015611bbc57611baa3361119d8385613228565b80611bb4816132f1565b915050611b92565b50505b6014805464ff000000001916640100000000179055565b600a546001600160a01b03163314611c005760405162461bcd60e51b8152600401610aa5906131a2565b601255565b600a546001600160a01b03163314611c2f5760405162461bcd60e51b8152600401610aa5906131a2565b601480549115156101000261ff0019909216919091179055565b60145460ff1615611c955760405162461bcd60e51b8152602060048201526016602482015275151a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b6044820152606401610aa5565b6014546301000000900460ff1615611ce45760405162461bcd60e51b815260206004820152601260248201527114da59db985d1d5c99481c995c5d5a5c995960721b6044820152606401610aa5565b6000611cef60085490565b905060008211611d415760405162461bcd60e51b815260206004820152601b60248201527f4e65656420746f206d696e74206174206c656173742031204e465400000000006044820152606401610aa5565b601054611d4e8383613228565b1115611d885760405162461bcd60e51b8152602060048201526009602482015268536f6c64204f75742160b81b6044820152606401610aa5565b600a546001600160a01b03163314611e7b5781600f54611da89190613254565b341015611dec5760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b6044820152606401610aa5565b33600090815260166020526040902054601254611e098483613228565b1115611e575760405162461bcd60e51b815260206004820152601c60248201527f4d6178204e4654207065722061646472657373206578636565646564000000006044820152606401610aa5565b601154831115611e795760405162461bcd60e51b8152600401610aa59061315e565b505b3360009081526016602052604081208054849290611e9a908490613228565b90915550600090505b82811015610d8757611eb93361119d8385613228565b80611ec3816132f1565b915050611ea3565b600a546001600160a01b03163314611ef55760405162461bcd60e51b8152600401610aa5906131a2565b8051610dc990600d9060208401906129d4565b600a546001600160a01b03163314611f325760405162461bcd60e51b8152600401610aa5906131a2565b6001600160a01b038116611f975760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aa5565b6112968161236f565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b3b151590565b60006001600160e01b031982166380ac58cd60e01b148061202a57506001600160e01b03198216635b5e139f60e01b145b80610a7557506301ffc9a760e01b6001600160e01b0319831614610a75565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061207e826114f1565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166121305760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610aa5565b600061213b836114f1565b9050806001600160a01b0316846001600160a01b031614806121765750836001600160a01b031661216b84610b53565b6001600160a01b0316145b806117e657506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff166117e6565b826001600160a01b03166121bd826114f1565b6001600160a01b0316146122255760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610aa5565b6001600160a01b0382166122875760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610aa5565b612292838383612501565b61229d600082612049565b6001600160a01b03831660009081526003602052604081208054600192906122c6908490613273565b90915550506001600160a01b03821660009081526003602052604081208054600192906122f4908490613228565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610dc98282604051806020016040528060008152506125b9565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6123cc8484846121aa565b6123d8848484846125ec565b6119c15760405162461bcd60e51b8152600401610aa59061310c565b6060600b8054610ad0906132b6565b6060816124275750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612451578061243b816132f1565b915061244a9050600a83613240565b915061242b565b60008167ffffffffffffffff81111561246c5761246c613378565b6040519080825280601f01601f191660200182016040528015612496576020820181803683370190505b5090505b84156117e6576124ab600183613273565b91506124b8600a8661330c565b6124c3906030613228565b60f81b8183815181106124d8576124d8613362565b60200101906001600160f81b031916908160001a9053506124fa600a86613240565b945061249a565b6001600160a01b03831661255c5761255781600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b61257f565b816001600160a01b0316836001600160a01b03161461257f5761257f83826126f6565b6001600160a01b03821661259657610d8781612793565b826001600160a01b0316826001600160a01b031614610d8757610d878282612842565b6125c38383612886565b6125d060008484846125ec565b610d875760405162461bcd60e51b8152600401610aa59061310c565b60006001600160a01b0384163b156126ee57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612630903390899088908890600401613078565b602060405180830381600087803b15801561264a57600080fd5b505af192505050801561267a575060408051601f3d908101601f1916820190925261267791810190612e6f565b60015b6126d4573d8080156126a8576040519150601f19603f3d011682016040523d82523d6000602084013e6126ad565b606091505b5080516126cc5760405162461bcd60e51b8152600401610aa59061310c565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506117e6565b5060016117e6565b6000600161270384611575565b61270d9190613273565b600083815260076020526040902054909150808214612760576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906127a590600190613273565b600083815260096020526040812054600880549394509092849081106127cd576127cd613362565b9060005260206000200154905080600883815481106127ee576127ee613362565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806128265761282661334c565b6001900381819060005260206000200160009055905550505050565b600061284d83611575565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166128dc5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610aa5565b6000818152600260205260409020546001600160a01b0316156129415760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610aa5565b61294d60008383612501565b6001600160a01b0382166000908152600360205260408120805460019290612976908490613228565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546129e0906132b6565b90600052602060002090601f016020900481019282612a025760008555612a48565b82601f10612a1b57805160ff1916838001178555612a48565b82800160010185558215612a48579182015b82811115612a48578251825591602001919060010190612a2d565b50612a54929150612a58565b5090565b5b80821115612a545760008155600101612a59565b80356001600160a01b0381168114612a8457600080fd5b919050565b80358015158114612a8457600080fd5b600082601f830112612aaa57600080fd5b813567ffffffffffffffff80821115612ac557612ac5613378565b604051601f8301601f19908116603f01168101908282118183101715612aed57612aed613378565b81604052838152866020858801011115612b0657600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060208284031215612b3857600080fd5b611b3f82612a6d565b60008060408385031215612b5457600080fd5b612b5d83612a6d565b9150612b6b60208401612a6d565b90509250929050565b600080600060608486031215612b8957600080fd5b612b9284612a6d565b9250612ba060208501612a6d565b9150604084013590509250925092565b60008060008060808587031215612bc657600080fd5b612bcf85612a6d565b9350612bdd60208601612a6d565b925060408501359150606085013567ffffffffffffffff811115612c0057600080fd5b612c0c87828801612a99565b91505092959194509250565b60008060008060008060c08789031215612c3157600080fd5b612c3a87612a6d565b9550612c4860208801612a6d565b945060408701359350606087013567ffffffffffffffff80821115612c6c57600080fd5b612c788a838b01612a99565b94506080890135935060a0890135915080821115612c9557600080fd5b50612ca289828a01612a99565b9150509295509295509295565b60008060408385031215612cc257600080fd5b612ccb83612a6d565b9150612b6b60208401612a89565b60008060408385031215612cec57600080fd5b612cf583612a6d565b946020939093013593505050565b60008060008060808587031215612d1957600080fd5b612d2285612a6d565b935060208501359250604085013567ffffffffffffffff811115612d4557600080fd5b612d5187828801612a99565b949793965093946060013593505050565b60008060208385031215612d7557600080fd5b823567ffffffffffffffff80821115612d8d57600080fd5b818501915085601f830112612da157600080fd5b813581811115612db057600080fd5b8660208260051b8501011115612dc557600080fd5b60209290920196919550909350505050565b600060208284031215612de957600080fd5b611b3f82612a89565b600060208284031215612e0457600080fd5b5035919050565b60008060408385031215612e1e57600080fd5b82359150602083013567ffffffffffffffff811115612e3c57600080fd5b612e4885828601612a99565b9150509250929050565b600060208284031215612e6457600080fd5b8135611b3f8161338e565b600060208284031215612e8157600080fd5b8151611b3f8161338e565b600060208284031215612e9e57600080fd5b813567ffffffffffffffff811115612eb557600080fd5b6117e684828501612a99565b600080600080600060a08688031215612ed957600080fd5b8535945060208601359350604086013567ffffffffffffffff80821115612eff57600080fd5b612f0b89838a01612a99565b9450606088013593506080880135915080821115612f2857600080fd5b50612f3588828901612a99565b9150509295509295909350565b60008151808452612f5a81602086016020860161328a565b601f01601f19169290920160200192915050565b6bffffffffffffffffffffffff198560601b16815283601482015260008351612f9e81603485016020880161328a565b6034920191820192909252605401949350505050565b600084516020612fc78285838a0161328a565b855191840191612fda8184848a0161328a565b8554920191600090600181811c9080831680612ff757607f831692505b85831081141561301557634e487b7160e01b85526022600452602485fd5b808015613029576001811461303a57613067565b60ff19851688528388019550613067565b60008b81526020902060005b8581101561305f5781548a820152908401908801613046565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906130ab90830184612f42565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156130ed578351835292840192918401916001016130d1565b50909695505050505050565b602081526000611b3f6020830184612f42565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526024908201527f4d6178206d696e7420616d6f756e74207065722073657373696f6e20657863656040820152631959195960e21b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6000821982111561323b5761323b613320565b500190565b60008261324f5761324f613336565b500490565b600081600019048311821515161561326e5761326e613320565b500290565b60008282101561328557613285613320565b500390565b60005b838110156132a557818101518382015260200161328d565b838111156119c15750506000910152565b600181811c908216806132ca57607f821691505b602082108114156132eb57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561330557613305613320565b5060010190565b60008261331b5761331b613336565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461129657600080fdfea2646970667358221220df6f8c2d30e8330a4d2e600736ee185c0a6e223232c993c55d70041bee8f014164736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000184245414e53202d2044756d62205761797320746f20446965000000000000000000000000000000000000000000000000000000000000000000000000000000054245414e530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d535967625136516159315578795a47507068744e623348346d4b6a71316744534e6962475a4a32574a5a44392f000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d62576d6f5a76355466736d347056484a413356725952716763426b7a38516a555131735a57744e73386562460000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): BEANS - Dumb Ways to Die
Arg [1] : _symbol (string): BEANS
Arg [2] : _initBaseURI (string): ipfs://QmSYgbQ6QaY1UxyZGPphtNb3H4mKjq1gDSNibGZJ2WJZD9/
Arg [3] : _initNotRevealedUri (string): ipfs://QmbWmoZv5Tfsm4pVHJA3VrYRqgcBkz8QjUQ1sZWtNs8ebF
-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000018
Arg [5] : 4245414e53202d2044756d62205761797320746f204469650000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [7] : 4245414e53000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [9] : 697066733a2f2f516d535967625136516159315578795a47507068744e623348
Arg [10] : 346d4b6a71316744534e6962475a4a32574a5a44392f00000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [12] : 697066733a2f2f516d62576d6f5a76355466736d347056484a41335672595271
Arg [13] : 6763426b7a38516a555131735a57744e73386562460000000000000000000000
Deployed Bytecode Sourcemap
32784:8102:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28728:224;;;;;;;;;;-1:-1:-1;28728:224:0;;;;;:::i;:::-;;:::i;:::-;;;12216:14:1;;12209:22;12191:41;;12179:2;12164:18;28728:224:0;;;;;;;;39169:77;;;;;;;;;;-1:-1:-1;39169:77:0;;;;;:::i;:::-;;:::i;:::-;;33394:52;;;;;;;;;;-1:-1:-1;33394:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22137:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;23220:221::-;;;;;;;;;;-1:-1:-1;23220:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;10877:32:1;;;10859:51;;10847:2;10832:18;23220:221:0;10713:203:1;32942:28:0;;;;;;;;;;;;;:::i;22801:411::-;;;;;;;;;;-1:-1:-1;22801:411:0;;;;;:::i;:::-;;:::i;39955:117::-;;;;;;;;;;-1:-1:-1;39955:117:0;;;;;:::i;:::-;;:::i;33009:31::-;;;;;;;;;;;;;;;;;;;12389:25:1;;;12377:2;12362:18;33009:31:0;12243:177:1;33161:33:0;;;;;;;;;;;;;;;;29224:113;;;;;;;;;;-1:-1:-1;29312:10:0;:17;29224:113;;33451:55;;;;;;;;;;-1:-1:-1;33451:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;33082:32;;;;;;;;;;;;;;;;23924:286;;;;;;;;;;-1:-1:-1;23924:286:0;;;;;:::i;:::-;;:::i;28960:256::-;;;;;;;;;;-1:-1:-1;28960:256:0;;;;;:::i;:::-;;:::i;35931:1354::-;;;;;;:::i;:::-;;:::i;33303:45::-;;;;;;;;;;-1:-1:-1;33303:45:0;;;;;;;;;;;40571:122;;;;;;;;;;-1:-1:-1;40571:122:0;;;;;:::i;:::-;-1:-1:-1;;;;;40657:30:0;40632:4;40657:30;;;:20;:30;;;;;;;;;40571:122;40078:99;;;;;;;;;;-1:-1:-1;40078:99:0;;;;;:::i;:::-;;:::i;40699:184::-;;;:::i;24218:185::-;;;;;;;;;;-1:-1:-1;24218:185:0;;;;;:::i;:::-;;:::i;38214:350::-;;;;;;;;;;-1:-1:-1;38214:350:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;39497:84::-;;;;;;;;;;-1:-1:-1;39497:84:0;;;;;:::i;:::-;;:::i;29345:233::-;;;;;;;;;;-1:-1:-1;29345:233:0;;;;;:::i;:::-;;:::i;33231:28::-;;;;;;;;;;-1:-1:-1;33231:28:0;;;;;;;;;;;39713:102;;;;;;;;;;-1:-1:-1;39713:102:0;;;;;:::i;:::-;;:::i;33201:25::-;;;;;;;;;;-1:-1:-1;33201:25:0;;;;;;;;40375:190;;;;;;;;;;-1:-1:-1;40375:190:0;;;;;:::i;:::-;;:::i;21890:239::-;;;;;;;;;;-1:-1:-1;21890:239:0;;;;;:::i;:::-;;:::i;32975:29::-;;;;;;;;;;;;;:::i;21674:208::-;;;;;;;;;;-1:-1:-1;21674:208:0;;;;;:::i;:::-;;:::i;32154:94::-;;;;;;;;;;;;;:::i;39587:120::-;;;;;;;;;;-1:-1:-1;39587:120:0;;;;;:::i;:::-;;:::i;31931:87::-;;;;;;;;;;-1:-1:-1;32004:6:0;;-1:-1:-1;;;;;32004:6:0;31931:87;;22245:104;;;;;;;;;;;;;:::i;35234:281::-;;;;;;;;;;-1:-1:-1;35234:281:0;;;;;:::i;:::-;;:::i;33264:34::-;;;;;;;;;;-1:-1:-1;33264:34:0;;;;;;;;;;;23449:295;;;;;;;;;;-1:-1:-1;23449:295:0;;;;;:::i;:::-;;:::i;34270:246::-;;;;;;;;;;-1:-1:-1;34270:246:0;;;;;:::i;:::-;;:::i;35523:402::-;;;;;;;;;;-1:-1:-1;35523:402:0;;;;;:::i;:::-;;:::i;:::-;;;;12623:25:1;;;12679:2;12664:18;;12657:34;;;;12739:4;12727:17;12707:18;;;12700:45;12611:2;12596:18;35523:402:0;12425:326:1;34775:451:0;;;;;;;;;;-1:-1:-1;34775:451:0;;;;;:::i;:::-;;:::i;40183:186::-;;;;;;;;;;-1:-1:-1;40183:186:0;;;;;:::i;:::-;;:::i;39252:121::-;;;;;;;;;;-1:-1:-1;39252:121:0;;;;;:::i;:::-;;:::i;24411:328::-;;;;;;;;;;-1:-1:-1;24411:328:0;;;;;:::i;:::-;;:::i;33119:37::-;;;;;;;;;;;;;;;;38572:497;;;;;;;;;;-1:-1:-1;38572:497:0;;;;;:::i;:::-;;:::i;33985:279::-;;;;;;;;;;;;;:::i;39381:108::-;;;;;;;;;;-1:-1:-1;39381:108:0;;;;;:::i;:::-;;:::i;33045:32::-;;;;;;;;;;;;;;;;39076:87;;;;;;;;;;-1:-1:-1;39076:87:0;;;;;:::i;:::-;;:::i;23752:164::-;;;;;;;;;;-1:-1:-1;23752:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;23873:25:0;;;23849:4;23873:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;23752:164;37291:917;;;;;;:::i;:::-;;:::i;39823:124::-;;;;;;;;;;-1:-1:-1;39823:124:0;;;;;:::i;:::-;;:::i;32256:192::-;;;;;;;;;;-1:-1:-1;32256:192:0;;;;;:::i;:::-;;:::i;34522:247::-;;;;;;;;;;-1:-1:-1;34522:247:0;;;;;:::i;:::-;;:::i;28728:224::-;28830:4;-1:-1:-1;;;;;;28854:50:0;;-1:-1:-1;;;28854:50:0;;:90;;;28908:36;28932:11;28908:23;:36::i;:::-;28847:97;28728:224;-1:-1:-1;;28728:224:0:o;39169:77::-;32004:6;;-1:-1:-1;;;;;32004:6:0;20165:10;32066:23;32058:68;;;;-1:-1:-1;;;32058:68:0;;;;;;;:::i;:::-;;;;;;;;;39225:6:::1;:15:::0;;-1:-1:-1;;39225:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39169:77::o;22137:100::-;22191:13;22224:5;22217:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22137:100;:::o;23220:221::-;23296:7;25159:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25159:16:0;23316:73;;;;-1:-1:-1;;;23316:73:0;;19751:2:1;23316:73:0;;;19733:21:1;19790:2;19770:18;;;19763:30;19829:34;19809:18;;;19802:62;-1:-1:-1;;;19880:18:1;;;19873:42;19932:19;;23316:73:0;19549:408:1;23316:73:0;-1:-1:-1;23409:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;23409:24:0;;23220:221::o;32942:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22801:411::-;22882:13;22898:23;22913:7;22898:14;:23::i;:::-;22882:39;;22946:5;-1:-1:-1;;;;;22940:11:0;:2;-1:-1:-1;;;;;22940:11:0;;;22932:57;;;;-1:-1:-1;;;22932:57:0;;22055:2:1;22932:57:0;;;22037:21:1;22094:2;22074:18;;;22067:30;22133:34;22113:18;;;22106:62;-1:-1:-1;;;22184:18:1;;;22177:31;22225:19;;22932:57:0;21853:397:1;22932:57:0;20165:10;-1:-1:-1;;;;;23024:21:0;;;;:62;;-1:-1:-1;23049:37:0;23066:5;20165:10;23752:164;:::i;23049:37::-;23002:168;;;;-1:-1:-1;;;23002:168:0;;18144:2:1;23002:168:0;;;18126:21:1;18183:2;18163:18;;;18156:30;18222:34;18202:18;;;18195:62;18293:26;18273:18;;;18266:54;18337:19;;23002:168:0;17942:420:1;23002:168:0;23183:21;23192:2;23196:7;23183:8;:21::i;:::-;22871:341;22801:411;;:::o;39955:117::-;32004:6;;-1:-1:-1;;;;;32004:6:0;20165:10;32066:23;32058:68;;;;-1:-1:-1;;;32058:68:0;;;;;;;:::i;:::-;40039:27;;::::1;::::0;:10:::1;::::0;:27:::1;::::0;::::1;::::0;::::1;:::i;:::-;;39955:117:::0;:::o;23924:286::-;24066:41;20165:10;24099:7;24066:18;:41::i;:::-;24058:103;;;;-1:-1:-1;;;24058:103:0;;;;;;;:::i;:::-;24174:28;24184:4;24190:2;24194:7;24174:9;:28::i;28960:256::-;29057:7;29093:23;29110:5;29093:16;:23::i;:::-;29085:5;:31;29077:87;;;;-1:-1:-1;;;29077:87:0;;13585:2:1;29077:87:0;;;13567:21:1;13624:2;13604:18;;;13597:30;13663:34;13643:18;;;13636:62;-1:-1:-1;;;13714:18:1;;;13707:41;13765:19;;29077:87:0;13383:407:1;29077:87:0;-1:-1:-1;;;;;;29182:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;28960:256::o;35931:1354::-;36105:14;36122:13;29312:10;:17;;29224:113;36122:13;36105:30;;36168:1;36154:11;:15;36146:55;;;;-1:-1:-1;;;36146:55:0;;23641:2:1;36146:55:0;;;23623:21:1;23680:2;23660:18;;;23653:30;23719:29;23699:18;;;23692:57;23766:18;;36146:55:0;23439:351:1;36146:55:0;36254:9;;36230:20;36239:11;36230:6;:20;:::i;:::-;:33;;36222:55;;;;-1:-1:-1;;;36222:55:0;;15174:2:1;36222:55:0;;;15156:21:1;15213:1;15193:18;;;15186:29;-1:-1:-1;;;15231:18:1;;;15224:39;15280:18;;36222:55:0;14972:332:1;36222:55:0;32004:6;;-1:-1:-1;;;;;32004:6:0;36294:10;:21;36290:805;;36345:26;;;;;;;36342:328;;;36413:65;36420:7;32004:6;;-1:-1:-1;;;;;32004:6:0;;31931:87;36420:7;36429:10;36441:7;36450:8;36460:6;36468:9;36413:6;:65::i;:::-;36405:92;;;;-1:-1:-1;;;36405:92:0;;23997:2:1;36405:92:0;;;23979:21:1;24036:2;24016:18;;;24009:30;-1:-1:-1;;;24055:18:1;;;24048:44;24109:18;;36405:92:0;23795:338:1;36405:92:0;36342:328;;;36535:15;;;;;;;:23;;36554:4;36535:23;36532:138;;;36615:10;40632:4;40657:30;;;:20;:30;;;;;;;;36593:61;;;;-1:-1:-1;;;36593:61:0;;17792:2:1;36593:61:0;;;17774:21:1;17831:2;17811:18;;;17804:30;17870:25;17850:18;;;17843:53;17913:18;;36593:61:0;17590:347:1;36593:61:0;36693:6;;;;36692:7;36684:42;;;;-1:-1:-1;;;36684:42:0;;14416:2:1;36684:42:0;;;14398:21:1;14455:2;14435:18;;;14428:30;-1:-1:-1;;;14474:18:1;;;14467:52;14536:18;;36684:42:0;14214:346:1;36684:42:0;36771:11;36764:4;;:18;;;;:::i;:::-;36751:9;:31;;36743:62;;;;-1:-1:-1;;;36743:62:0;;17445:2:1;36743:62:0;;;17427:21:1;17484:2;17464:18;;;17457:30;-1:-1:-1;;;17503:18:1;;;17496:48;17561:18;;36743:62:0;17243:342:1;36743:62:0;36870:10;36822:24;36849:32;;;:20;:32;;;;;;36938:18;;36904:30;36923:11;36849:32;36904:30;:::i;:::-;:52;;36896:93;;;;-1:-1:-1;;;36896:93:0;;21351:2:1;36896:93:0;;;21333:21:1;21390:2;21370:18;;;21363:30;21429;21409:18;;;21402:58;21477:18;;36896:93:0;21149:352:1;36896:93:0;37029:13;;37014:11;:28;;37006:77;;;;-1:-1:-1;;;37006:77:0;;;;;;;:::i;:::-;36327:768;36290:805;37128:10;37107:32;;;;:20;:32;;;;;:47;;37143:11;;37107:32;:47;;37143:11;;37107:47;:::i;:::-;;;;-1:-1:-1;37167:6:0;;-1:-1:-1;37186:94:0;37202:11;37198:1;:15;37186:94;;;37235:33;37245:10;37257;37266:1;37257:6;:10;:::i;:::-;37235:9;:33::i;:::-;37215:3;;;;:::i;:::-;;;;37186:94;;;36094:1191;;35931:1354;;;;;:::o;40078:99::-;32004:6;;-1:-1:-1;;;;;32004:6:0;20165:10;32066:23;32058:68;;;;-1:-1:-1;;;32058:68:0;;;;;;;:::i;:::-;40147:15:::1;:24:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;40147:24:0;;::::1;::::0;;;::::1;::::0;;40078:99::o;40699:184::-;32004:6;;-1:-1:-1;;;;;32004:6:0;20165:10;32066:23;32058:68;;;;-1:-1:-1;;;32058:68:0;;;;;;;:::i;:::-;40769:90:::1;::::0;40756:7:::1;::::0;40777:42:::1;::::0;40833:21:::1;::::0;40756:7;40769:90;40756:7;40769:90;40833:21;40777:42;40769:90:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40755:104;;;40874:2;40866:11;;;::::0;::::1;;40748:135;40699:184::o:0;24218:185::-;24356:39;24373:4;24379:2;24383:7;24356:39;;;;;;;;;;;;:16;:39::i;38214:350::-;38289:16;38317:23;38343:17;38353:6;38343:9;:17::i;:::-;38317:43;;38367:25;38409:15;38395:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38395:30:0;;38367:58;;38439:9;38434:103;38454:15;38450:1;:19;38434:103;;;38499:30;38519:6;38527:1;38499:19;:30::i;:::-;38485:8;38494:1;38485:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;38471:3;;;;:::i;:::-;;;;38434:103;;;-1:-1:-1;38550:8:0;38214:350;-1:-1:-1;;;38214:350:0:o;39497:84::-;32004:6;;-1:-1:-1;;;;;32004:6:0;20165:10;32066:23;32058:68;;;;-1:-1:-1;;;32058:68:0;;;;;;;:::i;:::-;39560:4:::1;:15:::0;39497:84::o;29345:233::-;29420:7;29456:30;29312:10;:17;;29224:113;29456:30;29448:5;:38;29440:95;;;;-1:-1:-1;;;29440:95:0;;22875:2:1;29440:95:0;;;22857:21:1;22914:2;22894:18;;;22887:30;22953:34;22933:18;;;22926:62;-1:-1:-1;;;23004:18:1;;;22997:42;23056:19;;29440:95:0;22673:408:1;29440:95:0;29553:10;29564:5;29553:17;;;;;;;;:::i;:::-;;;;;;;;;29546:24;;29345:233;;;:::o;39713:102::-;32004:6;;-1:-1:-1;;;;;32004:6:0;20165:10;32066:23;32058:68;;;;-1:-1:-1;;;32058:68:0;;;;;;;:::i;:::-;39788:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;40375:190::-:0;32004:6;;-1:-1:-1;;;;;32004:6:0;20165:10;32066:23;32058:68;;;;-1:-1:-1;;;32058:68:0;;;;;;;:::i;:::-;40467:6:::1;40462:97;40479:21:::0;;::::1;40462:97;;;40554:5;40516:20;:35;40537:10;;40548:1;40537:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40516:35:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;40516:35:0;:43;;-1:-1:-1;;40516:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40502:3;::::1;::::0;::::1;:::i;:::-;;;;40462:97;;21890:239:::0;21962:7;21998:16;;;:7;:16;;;;;;-1:-1:-1;;;;;21998:16:0;22033:19;22025:73;;;;-1:-1:-1;;;22025:73:0;;18980:2:1;22025:73:0;;;18962:21:1;19019:2;18999:18;;;18992:30;19058:34;19038:18;;;19031:62;-1:-1:-1;;;19109:18:1;;;19102:39;19158:19;;22025:73:0;18778:405:1;32975:29:0;;;;;;;:::i;21674:208::-;21746:7;-1:-1:-1;;;;;21774:19:0;;21766:74;;;;-1:-1:-1;;;21766:74:0;;18569:2:1;21766:74:0;;;18551:21:1;18608:2;18588:18;;;18581:30;18647:34;18627:18;;;18620:62;-1:-1:-1;;;18698:18:1;;;18691:40;18748:19;;21766:74:0;18367:406:1;21766:74:0;-1:-1:-1;;;;;;21858:16:0;;;;;:9;:16;;;;;;;21674:208::o;32154:94::-;32004:6;;-1:-1:-1;;;;;32004:6:0;20165:10;32066:23;32058:68;;;;-1:-1:-1;;;32058:68:0;;;;;;;:::i;:::-;32219:21:::1;32237:1;32219:9;:21::i;:::-;32154:94::o:0;39587:120::-;32004:6;;-1:-1:-1;;;;;32004:6:0;20165:10;32066:23;32058:68;;;;-1:-1:-1;;;32058:68:0;;;;;;;:::i;:::-;39668:13:::1;:33:::0;39587:120::o;22245:104::-;22301:13;22334:7;22327:14;;;;;:::i;35234:281::-;35361:7;35387:9;35398;35409:7;35420:26;35435:10;35420:14;:26::i;:::-;35466:41;;;;;;;;;;;;12983:25:1;;;13056:4;13044:17;;13024:18;;;13017:45;;;;13078:18;;;13071:34;;;13121:18;;;13114:34;;;35386:60:0;;-1:-1:-1;35386:60:0;;-1:-1:-1;35386:60:0;-1:-1:-1;35466:41:0;;12955:19:1;;35466:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35466:41:0;;-1:-1:-1;;35466:41:0;;;35234:281;-1:-1:-1;;;;;;;35234:281:0:o;23449:295::-;-1:-1:-1;;;;;23552:24:0;;20165:10;23552:24;;23544:62;;;;-1:-1:-1;;;23544:62:0;;16273:2:1;23544:62:0;;;16255:21:1;16312:2;16292:18;;;16285:30;16351:27;16331:18;;;16324:55;16396:18;;23544:62:0;16071:349:1;23544:62:0;20165:10;23619:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;23619:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;23619:53:0;;;;;;;;;;23688:48;;12191:41:1;;;23619:42:0;;20165:10;23688:48;;12164:18:1;23688:48:0;;;;;;;23449:295;;:::o;34270:246::-;34422:7;34476:3;34481:7;34490:8;34500:6;34459:48;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34449:59;;;;;;34442:66;;34270:246;;;;;;;:::o;35523:402::-;35627:9;35651;35675:7;35718:3;:10;35732:2;35718:16;35710:53;;;;-1:-1:-1;;;35710:53:0;;23288:2:1;35710:53:0;;;23270:21:1;23327:2;23307:18;;;23300:30;23366:26;23346:18;;;23339:54;23410:18;;35710:53:0;23086:348:1;35710:53:0;-1:-1:-1;;;35818:2:0;35809:12;;35803:19;35856:2;35847:12;;35841:19;35902:2;35893:12;;;35887:19;35803;;35884:1;35879:28;;;;;35523:402::o;34775:451::-;34978:4;34995:19;35017:46;35032:3;35037:7;35046:8;35056:6;35017:14;:46::i;:::-;34995:68;;35074:28;35105:36;35129:11;35105:23;:36::i;:::-;35074:67;;35211:7;-1:-1:-1;;;;;35161:57:0;:46;35175:20;35197:9;35161:13;:46::i;:::-;-1:-1:-1;;;;;35161:57:0;;;34775:451;-1:-1:-1;;;;;;;;;34775:451:0:o;40183:186::-;32004:6;;-1:-1:-1;;;;;32004:6:0;20165:10;32066:23;32058:68;;;;-1:-1:-1;;;32058:68:0;;;;;;;:::i;:::-;40272:6:::1;40267:96;40284:21:::0;;::::1;40267:96;;;40359:4;40321:20;:35;40342:10;;40353:1;40342:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40321:35:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;40321:35:0;:42;;-1:-1:-1;;40321:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40307:3;::::1;::::0;::::1;:::i;:::-;;;;40267:96;;39252:121:::0;32004:6;;-1:-1:-1;;;;;32004:6:0;20165:10;32066:23;32058:68;;;;-1:-1:-1;;;32058:68:0;;;;;;;:::i;:::-;39332:26:::1;:35:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;39332:35:0;;::::1;::::0;;;::::1;::::0;;39252:121::o;24411:328::-;24586:41;20165:10;24619:7;24586:18;:41::i;:::-;24578:103;;;;-1:-1:-1;;;24578:103:0;;;;;;;:::i;:::-;24692:39;24706:4;24712:2;24716:7;24725:5;24692:13;:39::i;:::-;24411:328;;;;:::o;38572:497::-;25135:4;25159:16;;;:7;:16;;;;;;38670:13;;-1:-1:-1;;;;;25159:16:0;38695:97;;;;-1:-1:-1;;;38695:97:0;;20935:2:1;38695:97:0;;;20917:21:1;20974:2;20954:18;;;20947:30;21013:34;20993:18;;;20986:62;-1:-1:-1;;;21064:18:1;;;21057:45;21119:19;;38695:97:0;20733:411:1;38695:97:0;38808:8;;;;;;;38805:62;;38845:14;38838:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38572:497;;;:::o;38805:62::-;38875:28;38906:10;:8;:10::i;:::-;38875:41;;38961:1;38936:14;38930:28;:32;:133;;;;;;;;;;;;;;;;;38998:14;39014:18;:7;:16;:18::i;:::-;39034:13;38981:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38930:133;38923:140;38572:497;-1:-1:-1;;;38572:497:0:o;33985:279::-;32004:6;;-1:-1:-1;;;;;32004:6:0;20165:10;32066:23;32058:68;;;;-1:-1:-1;;;32058:68:0;;;;;;;:::i;:::-;34035:11:::1;::::0;;;::::1;;;34032:200;;34073:11;34087:13;29312:10:::0;:17;;29224:113;34087:13:::1;34073:27;;34111:6;34130:95;34146:12;;34142:1;:16;34130:95;;;34180:33;34190:10;34202;34211:1:::0;34202:6;:10:::1;:::i;34180:33::-;34160:3:::0;::::1;::::0;::::1;:::i;:::-;;;;34130:95;;;34062:170;;34032:200;34240:11;:18:::0;;-1:-1:-1;;34240:18:0::1;::::0;::::1;::::0;;33985:279::o;39381:108::-;32004:6;;-1:-1:-1;;;;;32004:6:0;20165:10;32066:23;32058:68;;;;-1:-1:-1;;;32058:68:0;;;;;;;:::i;:::-;39456:18:::1;:27:::0;39381:108::o;39076:87::-;32004:6;;-1:-1:-1;;;;;32004:6:0;20165:10;32066:23;32058:68;;;;-1:-1:-1;;;32058:68:0;;;;;;;:::i;:::-;39140:8:::1;:17:::0;;;::::1;;;;-1:-1:-1::0;;39140:17:0;;::::1;::::0;;;::::1;::::0;;39076:87::o;37291:917::-;37366:6;;;;37365:7;37357:42;;;;-1:-1:-1;;;37357:42:0;;14416:2:1;37357:42:0;;;14398:21:1;14455:2;14435:18;;;14428:30;-1:-1:-1;;;14474:18:1;;;14467:52;14536:18;;37357:42:0;14214:346:1;37357:42:0;37414:26;;;;;;;:35;37406:66;;;;-1:-1:-1;;;37406:66:0;;21708:2:1;37406:66:0;;;21690:21:1;21747:2;21727:18;;;21720:30;-1:-1:-1;;;21766:18:1;;;21759:48;21824:18;;37406:66:0;21506:342:1;37406:66:0;37481:14;37498:13;29312:10;:17;;29224:113;37498:13;37481:30;;37540:1;37526:11;:15;37518:55;;;;-1:-1:-1;;;37518:55:0;;23641:2:1;37518:55:0;;;23623:21:1;23680:2;23660:18;;;23653:30;23719:29;23699:18;;;23692:57;23766:18;;37518:55:0;23439:351:1;37518:55:0;37618:9;;37594:20;37603:11;37594:6;:20;:::i;:::-;:33;;37586:55;;;;-1:-1:-1;;;37586:55:0;;15174:2:1;37586:55:0;;;15156:21:1;15213:1;15193:18;;;15186:29;-1:-1:-1;;;15231:18:1;;;15224:39;15280:18;;37586:55:0;14972:332:1;37586:55:0;32004:6;;-1:-1:-1;;;;;32004:6:0;37654:10;:21;37650:380;;37722:11;37715:4;;:18;;;;:::i;:::-;37702:9;:31;;37694:62;;;;-1:-1:-1;;;37694:62:0;;17445:2:1;37694:62:0;;;17427:21:1;17484:2;17464:18;;;17457:30;-1:-1:-1;;;17503:18:1;;;17496:48;17561:18;;37694:62:0;17243:342:1;37694:62:0;37817:10;37769:24;37796:32;;;:20;:32;;;;;;37881:18;;37847:30;37866:11;37796:32;37847:30;:::i;:::-;:52;;37839:93;;;;-1:-1:-1;;;37839:93:0;;21351:2:1;37839:93:0;;;21333:21:1;21390:2;21370:18;;;21363:30;21429;21409:18;;;21402:58;21477:18;;37839:93:0;21149:352:1;37839:93:0;37968:13;;37953:11;:28;;37945:77;;;;-1:-1:-1;;;37945:77:0;;;;;;;:::i;:::-;37683:347;37650:380;38059:10;38038:32;;;;:20;:32;;;;;:47;;38074:11;;38038:32;:47;;38074:11;;38038:47;:::i;:::-;;;;-1:-1:-1;38094:6:0;;-1:-1:-1;38117:86:0;38133:11;38129:1;:15;38117:86;;;38162:33;38172:10;38184;38193:1;38184:6;:10;:::i;38162:33::-;38146:3;;;;:::i;:::-;;;;38117:86;;39823:124;32004:6;;-1:-1:-1;;;;;32004:6:0;20165:10;32066:23;32058:68;;;;-1:-1:-1;;;32058:68:0;;;;;;;:::i;:::-;39909:32;;::::1;::::0;:14:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;32256:192::-:0;32004:6;;-1:-1:-1;;;;;32004:6:0;20165:10;32066:23;32058:68;;;;-1:-1:-1;;;32058:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32345:22:0;::::1;32337:73;;;::::0;-1:-1:-1;;;32337:73:0;;14767:2:1;32337:73:0::1;::::0;::::1;14749:21:1::0;14806:2;14786:18;;;14779:30;14845:34;14825:18;;;14818:62;-1:-1:-1;;;14896:18:1;;;14889:36;14942:19;;32337:73:0::1;14565:402:1::0;32337:73:0::1;32421:19;32431:8;32421:9;:19::i;34522:247::-:0;34684:66;;10360::1;34684::0;;;10348:79:1;10443:12;;;10436:28;;;34619:7:0;;10480:12:1;;34684:66:0;;;;;;;;;;;;34658:105;;;;;;34640:123;;34522:247;;;:::o;10442:387::-;10765:20;10813:8;;;10442:387::o;21361:305::-;21463:4;-1:-1:-1;;;;;;21500:40:0;;-1:-1:-1;;;21500:40:0;;:105;;-1:-1:-1;;;;;;;21557:48:0;;-1:-1:-1;;;21557:48:0;21500:105;:158;;;-1:-1:-1;;;;;;;;;;7551:40:0;;;21622:36;7442:157;27272:174;27347:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;27347:29:0;-1:-1:-1;;;;;27347:29:0;;;;;;;;:24;;27401:23;27347:24;27401:14;:23::i;:::-;-1:-1:-1;;;;;27392:46:0;;;;;;;;;;;27272:174;;:::o;25205:348::-;25298:4;25159:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25159:16:0;25315:73;;;;-1:-1:-1;;;25315:73:0;;16627:2:1;25315:73:0;;;16609:21:1;16666:2;16646:18;;;16639:30;16705:34;16685:18;;;16678:62;-1:-1:-1;;;16756:18:1;;;16749:42;16808:19;;25315:73:0;16425:408:1;25315:73:0;25399:13;25415:23;25430:7;25415:14;:23::i;:::-;25399:39;;25468:5;-1:-1:-1;;;;;25457:16:0;:7;-1:-1:-1;;;;;25457:16:0;;:51;;;;25501:7;-1:-1:-1;;;;;25477:31:0;:20;25489:7;25477:11;:20::i;:::-;-1:-1:-1;;;;;25477:31:0;;25457:51;:87;;;-1:-1:-1;;;;;;23873:25:0;;;23849:4;23873:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;25512:32;23752:164;26738:526;26897:4;-1:-1:-1;;;;;26870:31:0;:23;26885:7;26870:14;:23::i;:::-;-1:-1:-1;;;;;26870:31:0;;26862:85;;;;-1:-1:-1;;;26862:85:0;;20525:2:1;26862:85:0;;;20507:21:1;20564:2;20544:18;;;20537:30;20603:34;20583:18;;;20576:62;-1:-1:-1;;;20654:18:1;;;20647:39;20703:19;;26862:85:0;20323:405:1;26862:85:0;-1:-1:-1;;;;;26966:16:0;;26958:65;;;;-1:-1:-1;;;26958:65:0;;15868:2:1;26958:65:0;;;15850:21:1;15907:2;15887:18;;;15880:30;15946:34;15926:18;;;15919:62;-1:-1:-1;;;15997:18:1;;;15990:34;16041:19;;26958:65:0;15666:400:1;26958:65:0;27036:39;27057:4;27063:2;27067:7;27036:20;:39::i;:::-;27088:29;27105:1;27109:7;27088:8;:29::i;:::-;-1:-1:-1;;;;;27130:15:0;;;;;;:9;:15;;;;;:20;;27149:1;;27130:15;:20;;27149:1;;27130:20;:::i;:::-;;;;-1:-1:-1;;;;;;;27161:13:0;;;;;;:9;:13;;;;;:18;;27178:1;;27161:13;:18;;27178:1;;27161:18;:::i;:::-;;;;-1:-1:-1;;27190:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;27190:21:0;-1:-1:-1;;;;;27190:21:0;;;;;;;;;27229:27;;27190:16;;27229:27;;;;;;;26738:526;;;:::o;25561:110::-;25637:26;25647:2;25651:7;25637:26;;;;;;;;;;;;:9;:26::i;32456:173::-;32531:6;;;-1:-1:-1;;;;;32548:17:0;;;-1:-1:-1;;;;;;32548:17:0;;;;;;;32581:40;;32531:6;;;32548:17;32531:6;;32581:40;;32512:16;;32581:40;32501:128;32456:173;:::o;24747:315::-;24904:28;24914:4;24920:2;24924:7;24904:9;:28::i;:::-;24951:48;24974:4;24980:2;24984:7;24993:5;24951:22;:48::i;:::-;24943:111;;;;-1:-1:-1;;;24943:111:0;;;;;;;:::i;33871:106::-;33931:13;33964:7;33957:14;;;;;:::i;7917:723::-;7973:13;8194:10;8190:53;;-1:-1:-1;;8221:10:0;;;;;;;;;;;;-1:-1:-1;;;8221:10:0;;;;;7917:723::o;8190:53::-;8268:5;8253:12;8309:78;8316:9;;8309:78;;8342:8;;;;:::i;:::-;;-1:-1:-1;8365:10:0;;-1:-1:-1;8373:2:0;8365:10;;:::i;:::-;;;8309:78;;;8397:19;8429:6;8419:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8419:17:0;;8397:39;;8447:154;8454:10;;8447:154;;8481:11;8491:1;8481:11;;:::i;:::-;;-1:-1:-1;8550:10:0;8558:2;8550:5;:10;:::i;:::-;8537:24;;:2;:24;:::i;:::-;8524:39;;8507:6;8514;8507:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;8507:56:0;;;;;;;;-1:-1:-1;8578:11:0;8587:2;8578:11;;:::i;:::-;;;8447:154;;29586:589;-1:-1:-1;;;;;29792:18:0;;29788:187;;29827:40;29859:7;30516:10;:17;;30489:24;;;;:15;:24;;;;;:44;;;30544:24;;;;;;;;;;;;30412:164;29827:40;29788:187;;;29897:2;-1:-1:-1;;;;;29889:10:0;:4;-1:-1:-1;;;;;29889:10:0;;29885:90;;29916:47;29949:4;29955:7;29916:32;:47::i;:::-;-1:-1:-1;;;;;29989:16:0;;29985:183;;30022:45;30059:7;30022:36;:45::i;29985:183::-;30095:4;-1:-1:-1;;;;;30089:10:0;:2;-1:-1:-1;;;;;30089:10:0;;30085:83;;30116:40;30144:2;30148:7;30116:27;:40::i;25679:321::-;25809:18;25815:2;25819:7;25809:5;:18::i;:::-;25860:54;25891:1;25895:2;25899:7;25908:5;25860:22;:54::i;:::-;25838:154;;;;-1:-1:-1;;;25838:154:0;;;;;;;:::i;27454:799::-;27609:4;-1:-1:-1;;;;;27630:13:0;;10765:20;10813:8;27626:620;;27666:72;;-1:-1:-1;;;27666:72:0;;-1:-1:-1;;;;;27666:36:0;;;;;:72;;20165:10;;27717:4;;27723:7;;27732:5;;27666:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27666:72:0;;;;;;;;-1:-1:-1;;27666:72:0;;;;;;;;;;;;:::i;:::-;;;27662:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27908:13:0;;27904:272;;27951:60;;-1:-1:-1;;;27951:60:0;;;;;;;:::i;27904:272::-;28126:6;28120:13;28111:6;28107:2;28103:15;28096:38;27662:529;-1:-1:-1;;;;;;27789:51:0;-1:-1:-1;;;27789:51:0;;-1:-1:-1;27782:58:0;;27626:620;-1:-1:-1;28230:4:0;28223:11;;30584:649;30678:22;30728:1;30703:22;30720:4;30703:16;:22::i;:::-;:26;;;;:::i;:::-;30740:18;30761:26;;;:17;:26;;;;;;30678:51;;-1:-1:-1;30804:28:0;;;30800:328;;-1:-1:-1;;;;;30871:18:0;;30849:19;30871:18;;;:12;:18;;;;;;;;:34;;;;;;;;;30922:30;;;;;;:44;;;31039:30;;:17;:30;;;;;:43;;;30800:328;-1:-1:-1;31147:26:0;;;;:17;:26;;;;;;;;31140:33;;;-1:-1:-1;;;;;31191:18:0;;;;;:12;:18;;;;;:34;;;;;;;31184:41;30584:649::o;31241:427::-;31350:10;:17;31325:22;;31350:21;;31370:1;;31350:21;:::i;:::-;31382:18;31403:24;;;:15;:24;;;;;;31462:10;:26;;31325:46;;-1:-1:-1;31403:24:0;;31325:46;;31462:26;;;;;;:::i;:::-;;;;;;;;;31440:48;;31526:11;31501:10;31512;31501:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;31548:28;;;:15;:28;;;;;;;:41;;;31609:24;;;;;31602:31;31644:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;31312:356;;;31241:427;:::o;30183:221::-;30268:14;30285:20;30302:2;30285:16;:20::i;:::-;-1:-1:-1;;;;;30316:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;30361:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;30183:221:0:o;26008:382::-;-1:-1:-1;;;;;26088:16:0;;26080:61;;;;-1:-1:-1;;;26080:61:0;;19390:2:1;26080:61:0;;;19372:21:1;;;19409:18;;;19402:30;19468:34;19448:18;;;19441:62;19520:18;;26080:61:0;19188:356:1;26080:61:0;25135:4;25159:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25159:16:0;:30;26152:58;;;;-1:-1:-1;;;26152:58:0;;15511:2:1;26152:58:0;;;15493:21:1;15550:2;15530:18;;;15523:30;15589;15569:18;;;15562:58;15637:18;;26152:58:0;15309:352:1;26152:58:0;26223:45;26252:1;26256:2;26260:7;26223:20;:45::i;:::-;-1:-1:-1;;;;;26281:13:0;;;;;;:9;:13;;;;;:18;;26298:1;;26281:13;:18;;26298:1;;26281:18;:::i;:::-;;;;-1:-1:-1;;26310:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;26310:21:0;-1:-1:-1;;;;;26310:21:0;;;;;;;;26349:33;;26310:16;;;26349:33;;26310:16;;26349:33;26008:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:160::-;257:20;;313:13;;306:21;296:32;;286:60;;342:1;339;332:12;357:718;399:5;452:3;445:4;437:6;433:17;429:27;419:55;;470:1;467;460:12;419:55;506:6;493:20;532:18;569:2;565;562:10;559:36;;;575:18;;:::i;:::-;650:2;644:9;618:2;704:13;;-1:-1:-1;;700:22:1;;;724:2;696:31;692:40;680:53;;;748:18;;;768:22;;;745:46;742:72;;;794:18;;:::i;:::-;834:10;830:2;823:22;869:2;861:6;854:18;915:3;908:4;903:2;895:6;891:15;887:26;884:35;881:55;;;932:1;929;922:12;881:55;996:2;989:4;981:6;977:17;970:4;962:6;958:17;945:54;1043:1;1036:4;1031:2;1023:6;1019:15;1015:26;1008:37;1063:6;1054:15;;;;;;357:718;;;;:::o;1080:186::-;1139:6;1192:2;1180:9;1171:7;1167:23;1163:32;1160:52;;;1208:1;1205;1198:12;1160:52;1231:29;1250:9;1231:29;:::i;1271:260::-;1339:6;1347;1400:2;1388:9;1379:7;1375:23;1371:32;1368:52;;;1416:1;1413;1406:12;1368:52;1439:29;1458:9;1439:29;:::i;:::-;1429:39;;1487:38;1521:2;1510:9;1506:18;1487:38;:::i;:::-;1477:48;;1271:260;;;;;:::o;1536:328::-;1613:6;1621;1629;1682:2;1670:9;1661:7;1657:23;1653:32;1650:52;;;1698:1;1695;1688:12;1650:52;1721:29;1740:9;1721:29;:::i;:::-;1711:39;;1769:38;1803:2;1792:9;1788:18;1769:38;:::i;:::-;1759:48;;1854:2;1843:9;1839:18;1826:32;1816:42;;1536:328;;;;;:::o;1869:537::-;1964:6;1972;1980;1988;2041:3;2029:9;2020:7;2016:23;2012:33;2009:53;;;2058:1;2055;2048:12;2009:53;2081:29;2100:9;2081:29;:::i;:::-;2071:39;;2129:38;2163:2;2152:9;2148:18;2129:38;:::i;:::-;2119:48;;2214:2;2203:9;2199:18;2186:32;2176:42;;2269:2;2258:9;2254:18;2241:32;2296:18;2288:6;2285:30;2282:50;;;2328:1;2325;2318:12;2282:50;2351:49;2392:7;2383:6;2372:9;2368:22;2351:49;:::i;:::-;2341:59;;;1869:537;;;;;;;:::o;2411:827::-;2534:6;2542;2550;2558;2566;2574;2627:3;2615:9;2606:7;2602:23;2598:33;2595:53;;;2644:1;2641;2634:12;2595:53;2667:29;2686:9;2667:29;:::i;:::-;2657:39;;2715:38;2749:2;2738:9;2734:18;2715:38;:::i;:::-;2705:48;;2800:2;2789:9;2785:18;2772:32;2762:42;;2855:2;2844:9;2840:18;2827:32;2878:18;2919:2;2911:6;2908:14;2905:34;;;2935:1;2932;2925:12;2905:34;2958:49;2999:7;2990:6;2979:9;2975:22;2958:49;:::i;:::-;2948:59;;3054:3;3043:9;3039:19;3026:33;3016:43;;3112:3;3101:9;3097:19;3084:33;3068:49;;3142:2;3132:8;3129:16;3126:36;;;3158:1;3155;3148:12;3126:36;;3181:51;3224:7;3213:8;3202:9;3198:24;3181:51;:::i;:::-;3171:61;;;2411:827;;;;;;;;:::o;3243:254::-;3308:6;3316;3369:2;3357:9;3348:7;3344:23;3340:32;3337:52;;;3385:1;3382;3375:12;3337:52;3408:29;3427:9;3408:29;:::i;:::-;3398:39;;3456:35;3487:2;3476:9;3472:18;3456:35;:::i;3502:254::-;3570:6;3578;3631:2;3619:9;3610:7;3606:23;3602:32;3599:52;;;3647:1;3644;3637:12;3599:52;3670:29;3689:9;3670:29;:::i;:::-;3660:39;3746:2;3731:18;;;;3718:32;;-1:-1:-1;;;3502:254:1:o;3761:532::-;3857:6;3865;3873;3881;3934:3;3922:9;3913:7;3909:23;3905:33;3902:53;;;3951:1;3948;3941:12;3902:53;3974:29;3993:9;3974:29;:::i;:::-;3964:39;;4050:2;4039:9;4035:18;4022:32;4012:42;;4105:2;4094:9;4090:18;4077:32;4132:18;4124:6;4121:30;4118:50;;;4164:1;4161;4154:12;4118:50;4187:49;4228:7;4219:6;4208:9;4204:22;4187:49;:::i;:::-;3761:532;;;;-1:-1:-1;4177:59:1;;4283:2;4268:18;4255:32;;-1:-1:-1;;;3761:532:1:o;4298:615::-;4384:6;4392;4445:2;4433:9;4424:7;4420:23;4416:32;4413:52;;;4461:1;4458;4451:12;4413:52;4501:9;4488:23;4530:18;4571:2;4563:6;4560:14;4557:34;;;4587:1;4584;4577:12;4557:34;4625:6;4614:9;4610:22;4600:32;;4670:7;4663:4;4659:2;4655:13;4651:27;4641:55;;4692:1;4689;4682:12;4641:55;4732:2;4719:16;4758:2;4750:6;4747:14;4744:34;;;4774:1;4771;4764:12;4744:34;4827:7;4822:2;4812:6;4809:1;4805:14;4801:2;4797:23;4793:32;4790:45;4787:65;;;4848:1;4845;4838:12;4787:65;4879:2;4871:11;;;;;4901:6;;-1:-1:-1;4298:615:1;;-1:-1:-1;;;;4298:615:1:o;4918:180::-;4974:6;5027:2;5015:9;5006:7;5002:23;4998:32;4995:52;;;5043:1;5040;5033:12;4995:52;5066:26;5082:9;5066:26;:::i;5103:180::-;5162:6;5215:2;5203:9;5194:7;5190:23;5186:32;5183:52;;;5231:1;5228;5221:12;5183:52;-1:-1:-1;5254:23:1;;5103:180;-1:-1:-1;5103:180:1:o;5288:388::-;5365:6;5373;5426:2;5414:9;5405:7;5401:23;5397:32;5394:52;;;5442:1;5439;5432:12;5394:52;5478:9;5465:23;5455:33;;5539:2;5528:9;5524:18;5511:32;5566:18;5558:6;5555:30;5552:50;;;5598:1;5595;5588:12;5552:50;5621:49;5662:7;5653:6;5642:9;5638:22;5621:49;:::i;:::-;5611:59;;;5288:388;;;;;:::o;5681:245::-;5739:6;5792:2;5780:9;5771:7;5767:23;5763:32;5760:52;;;5808:1;5805;5798:12;5760:52;5847:9;5834:23;5866:30;5890:5;5866:30;:::i;5931:249::-;6000:6;6053:2;6041:9;6032:7;6028:23;6024:32;6021:52;;;6069:1;6066;6059:12;6021:52;6101:9;6095:16;6120:30;6144:5;6120:30;:::i;6185:320::-;6253:6;6306:2;6294:9;6285:7;6281:23;6277:32;6274:52;;;6322:1;6319;6312:12;6274:52;6362:9;6349:23;6395:18;6387:6;6384:30;6381:50;;;6427:1;6424;6417:12;6381:50;6450:49;6491:7;6482:6;6471:9;6467:22;6450:49;:::i;7021:746::-;7135:6;7143;7151;7159;7167;7220:3;7208:9;7199:7;7195:23;7191:33;7188:53;;;7237:1;7234;7227:12;7188:53;7273:9;7260:23;7250:33;;7330:2;7319:9;7315:18;7302:32;7292:42;;7385:2;7374:9;7370:18;7357:32;7408:18;7449:2;7441:6;7438:14;7435:34;;;7465:1;7462;7455:12;7435:34;7488:49;7529:7;7520:6;7509:9;7505:22;7488:49;:::i;:::-;7478:59;;7584:2;7573:9;7569:18;7556:32;7546:42;;7641:3;7630:9;7626:19;7613:33;7597:49;;7671:2;7661:8;7658:16;7655:36;;;7687:1;7684;7677:12;7655:36;;7710:51;7753:7;7742:8;7731:9;7727:24;7710:51;:::i;:::-;7700:61;;;7021:746;;;;;;;;:::o;7772:257::-;7813:3;7851:5;7845:12;7878:6;7873:3;7866:19;7894:63;7950:6;7943:4;7938:3;7934:14;7927:4;7920:5;7916:16;7894:63;:::i;:::-;8011:2;7990:15;-1:-1:-1;;7986:29:1;7977:39;;;;8018:4;7973:50;;7772:257;-1:-1:-1;;7772:257:1:o;8034:547::-;8304:26;8300:31;8291:6;8287:2;8283:15;8279:53;8274:3;8267:66;8363:6;8358:2;8353:3;8349:12;8342:28;8249:3;8399:6;8393:13;8415:62;8470:6;8465:2;8460:3;8456:12;8449:4;8441:6;8437:17;8415:62;:::i;:::-;8536:2;8496:16;;8528:11;;;8521:27;;;;8572:2;8564:11;;8034:547;-1:-1:-1;;;;8034:547:1:o;8586:1527::-;8810:3;8848:6;8842:13;8874:4;8887:51;8931:6;8926:3;8921:2;8913:6;8909:15;8887:51;:::i;:::-;9001:13;;8960:16;;;;9023:55;9001:13;8960:16;9045:15;;;9023:55;:::i;:::-;9167:13;;9100:20;;;9140:1;;9227;9249:18;;;;9302;;;;9329:93;;9407:4;9397:8;9393:19;9381:31;;9329:93;9470:2;9460:8;9457:16;9437:18;9434:40;9431:167;;;-1:-1:-1;;;9497:33:1;;9553:4;9550:1;9543:15;9583:4;9504:3;9571:17;9431:167;9614:18;9641:110;;;;9765:1;9760:328;;;;9607:481;;9641:110;-1:-1:-1;;9676:24:1;;9662:39;;9721:20;;;;-1:-1:-1;9641:110:1;;9760:328;24393:1;24386:14;;;24430:4;24417:18;;9855:1;9869:169;9883:8;9880:1;9877:15;9869:169;;;9965:14;;9950:13;;;9943:37;10008:16;;;;9900:10;;9869:169;;;9873:3;;10069:8;10062:5;10058:20;10051:27;;9607:481;-1:-1:-1;10104:3:1;;8586:1527;-1:-1:-1;;;;;;;;;;;8586:1527:1:o;10921:488::-;-1:-1:-1;;;;;11190:15:1;;;11172:34;;11242:15;;11237:2;11222:18;;11215:43;11289:2;11274:18;;11267:34;;;11337:3;11332:2;11317:18;;11310:31;;;11115:4;;11358:45;;11383:19;;11375:6;11358:45;:::i;:::-;11350:53;10921:488;-1:-1:-1;;;;;;10921:488:1:o;11414:632::-;11585:2;11637:21;;;11707:13;;11610:18;;;11729:22;;;11556:4;;11585:2;11808:15;;;;11782:2;11767:18;;;11556:4;11851:169;11865:6;11862:1;11859:13;11851:169;;;11926:13;;11914:26;;11995:15;;;;11960:12;;;;11887:1;11880:9;11851:169;;;-1:-1:-1;12037:3:1;;11414:632;-1:-1:-1;;;;;;11414:632:1:o;13159:219::-;13308:2;13297:9;13290:21;13271:4;13328:44;13368:2;13357:9;13353:18;13345:6;13328:44;:::i;13795:414::-;13997:2;13979:21;;;14036:2;14016:18;;;14009:30;14075:34;14070:2;14055:18;;14048:62;-1:-1:-1;;;14141:2:1;14126:18;;14119:48;14199:3;14184:19;;13795:414::o;16838:400::-;17040:2;17022:21;;;17079:2;17059:18;;;17052:30;17118:34;17113:2;17098:18;;17091:62;-1:-1:-1;;;17184:2:1;17169:18;;17162:34;17228:3;17213:19;;16838:400::o;19962:356::-;20164:2;20146:21;;;20183:18;;;20176:30;20242:34;20237:2;20222:18;;20215:62;20309:2;20294:18;;19962:356::o;22255:413::-;22457:2;22439:21;;;22496:2;22476:18;;;22469:30;22535:34;22530:2;22515:18;;22508:62;-1:-1:-1;;;22601:2:1;22586:18;;22579:47;22658:3;22643:19;;22255:413::o;24446:128::-;24486:3;24517:1;24513:6;24510:1;24507:13;24504:39;;;24523:18;;:::i;:::-;-1:-1:-1;24559:9:1;;24446:128::o;24579:120::-;24619:1;24645;24635:35;;24650:18;;:::i;:::-;-1:-1:-1;24684:9:1;;24579:120::o;24704:168::-;24744:7;24810:1;24806;24802:6;24798:14;24795:1;24792:21;24787:1;24780:9;24773:17;24769:45;24766:71;;;24817:18;;:::i;:::-;-1:-1:-1;24857:9:1;;24704:168::o;24877:125::-;24917:4;24945:1;24942;24939:8;24936:34;;;24950:18;;:::i;:::-;-1:-1:-1;24987:9:1;;24877:125::o;25007:258::-;25079:1;25089:113;25103:6;25100:1;25097:13;25089:113;;;25179:11;;;25173:18;25160:11;;;25153:39;25125:2;25118:10;25089:113;;;25220:6;25217:1;25214:13;25211:48;;;-1:-1:-1;;25255:1:1;25237:16;;25230:27;25007:258::o;25270:380::-;25349:1;25345:12;;;;25392;;;25413:61;;25467:4;25459:6;25455:17;25445:27;;25413:61;25520:2;25512:6;25509:14;25489:18;25486:38;25483:161;;;25566:10;25561:3;25557:20;25554:1;25547:31;25601:4;25598:1;25591:15;25629:4;25626:1;25619:15;25483:161;;25270:380;;;:::o;25655:135::-;25694:3;-1:-1:-1;;25715:17:1;;25712:43;;;25735:18;;:::i;:::-;-1:-1:-1;25782:1:1;25771:13;;25655:135::o;25795:112::-;25827:1;25853;25843:35;;25858:18;;:::i;:::-;-1:-1:-1;25892:9:1;;25795:112::o;25912:127::-;25973:10;25968:3;25964:20;25961:1;25954:31;26004:4;26001:1;25994:15;26028:4;26025:1;26018:15;26044:127;26105:10;26100:3;26096:20;26093:1;26086:31;26136:4;26133:1;26126:15;26160:4;26157:1;26150:15;26176:127;26237:10;26232:3;26228:20;26225:1;26218:31;26268:4;26265:1;26258:15;26292:4;26289:1;26282:15;26308:127;26369:10;26364:3;26360:20;26357:1;26350:31;26400:4;26397:1;26390:15;26424:4;26421:1;26414:15;26440:127;26501:10;26496:3;26492:20;26489:1;26482:31;26532:4;26529:1;26522:15;26556:4;26553:1;26546:15;26572:131;-1:-1:-1;;;;;;26646:32:1;;26636:43;;26626:71;;26693:1;26690;26683:12
Swarm Source
ipfs://df6f8c2d30e8330a4d2e600736ee185c0a6e223232c993c55d70041bee8f0141
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.