Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 271 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 16055544 | 813 days ago | IN | 0 ETH | 0.00032109 | ||||
Mint | 15451667 | 900 days ago | IN | 0.25 ETH | 0.00145289 | ||||
Mint | 15403967 | 907 days ago | IN | 1.25 ETH | 0.00512831 | ||||
Mint | 15402939 | 907 days ago | IN | 0.25 ETH | 0.00115274 | ||||
Mint | 15369301 | 913 days ago | IN | 0.5 ETH | 0.00212748 | ||||
Mint | 15345856 | 916 days ago | IN | 0.75 ETH | 0.00522065 | ||||
Mint | 15291986 | 925 days ago | IN | 0.25 ETH | 0.000706 | ||||
Mint | 15271218 | 928 days ago | IN | 0.25 ETH | 0.00371586 | ||||
Mint | 15262561 | 930 days ago | IN | 0.5 ETH | 0.00153025 | ||||
Mint | 15258917 | 930 days ago | IN | 0.25 ETH | 0.00190365 | ||||
Mint | 15242355 | 933 days ago | IN | 0.25 ETH | 0.00137182 | ||||
Mint | 15236274 | 934 days ago | IN | 0.25 ETH | 0.00136229 | ||||
Mint | 15233119 | 934 days ago | IN | 0.25 ETH | 0.0035456 | ||||
Mint | 15232889 | 934 days ago | IN | 0.5 ETH | 0.00613672 | ||||
Mint | 15228413 | 935 days ago | IN | 0.25 ETH | 0.00338679 | ||||
Mint | 15228008 | 935 days ago | IN | 0.25 ETH | 0.00174127 | ||||
Mint | 15227177 | 935 days ago | IN | 0.25 ETH | 0.00443488 | ||||
Mint | 15225002 | 935 days ago | IN | 2.5 ETH | 0.01839506 | ||||
Mint | 15222725 | 936 days ago | IN | 0.25 ETH | 0.00114578 | ||||
Mint | 15217935 | 936 days ago | IN | 0.25 ETH | 0.0013526 | ||||
Mint | 15215915 | 937 days ago | IN | 2.5 ETH | 0.01152123 | ||||
Mint | 15215811 | 937 days ago | IN | 2.5 ETH | 0.01680552 | ||||
Mint | 15212530 | 937 days ago | IN | 2.5 ETH | 0.01189508 | ||||
Mint | 15212438 | 937 days ago | IN | 2.5 ETH | 0.01172393 | ||||
Mint | 15209606 | 938 days ago | IN | 2.5 ETH | 0.00803085 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
RaregotchiToyMinting
Compiler Version
v0.8.9+commit.e5eed63a
Optimization Enabled:
Yes with 2000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "./RaregotchiToyInterface.sol"; contract RaregotchiToyMinting is Ownable { RaregotchiToyInterface toyContract; uint16 public totalTokens = 3000; uint16 public totalSupply = 0; uint256 public mintPrice = 0.25 ether; bool private isFrozen = false; address public signerAddress; mapping(uint8 => mapping(address => uint8)) public mintedPerWalletByStage; mapping(uint16 => uint16) private tokenMatrix; modifier callerIsUser() { // solium-disable-next-line security/no-tx-origin require(tx.origin == msg.sender, "The caller is another contract"); _; } /** * @dev Allows to withdraw the Ether in the contract */ function withdraw() external onlyOwner { payable(msg.sender).transfer(address(this).balance); } /** * @dev Set the pet contract address */ function setToyContractAddress(address _address) external onlyOwner { toyContract = RaregotchiToyInterface(_address); } /** * @dev Set the total amount of tokens */ function setTotalTokens(uint16 _totalTokens) external onlyOwner { totalTokens = _totalTokens; } /** * @dev Set the mint price */ function setMintPrice(uint256 _mintPrice) external onlyOwner { mintPrice = _mintPrice; } /** * @dev Sets the address that generates the signatures for whitelisting */ function setSignerAddress(address _signerAddress) external onlyOwner { signerAddress = _signerAddress; } function devMint(address _to, uint16[] calldata _tokenIds) external onlyOwner { uint256[] memory tokenIds = new uint256[](_tokenIds.length); for (uint256 i = 0; i < _tokenIds.length; i++) { useTokenId(_tokenIds[i]); tokenIds[i] = _tokenIds[i]; } totalSupply += uint16(tokenIds.length); toyContract.batchMint(_to, tokenIds); } function marketingMint(uint16 amount) external onlyOwner { require(totalSupply < totalTokens, "Not tokens left to be minted"); uint16 _amount = amount; if (totalSupply + _amount > totalTokens) { _amount = totalTokens - totalSupply; } uint256[] memory tokenIds = new uint256[](_amount); uint16 tmpTotalMintedTokens = totalSupply; totalSupply += _amount; for (uint256 i; i < _amount; i++) { tokenIds[i] = _getTokenToBeMinted(tmpTotalMintedTokens); tmpTotalMintedTokens++; } toyContract.batchMint(msg.sender, tokenIds); } function mint( uint8 amount, uint8 stage, uint8 maxAmount, uint256 fromTimestamp, bytes calldata signature ) external payable callerIsUser { bytes32 messageHash = generateMintHash( amount, stage, maxAmount, msg.sender, fromTimestamp ); address recoveredWallet = ECDSA.recover(messageHash, signature); require( recoveredWallet == signerAddress, "Invalid signature for the caller" ); require(block.timestamp >= fromTimestamp, "Too early to mint"); require(totalSupply < totalTokens, "Not tokens left to be minted"); require(amount > 0, "At least one token should be minted"); uint8 _amount = amount; if (totalSupply + _amount > totalTokens) { _amount = uint8(totalTokens - totalSupply); } require( mintedPerWalletByStage[stage][msg.sender] + _amount <= maxAmount, "Caller cannot mint more tokens" ); uint256 totalMintPrice = mintPrice * _amount; require( msg.value >= totalMintPrice, "Not enough Ether to mint the tokens" ); if (msg.value > totalMintPrice) { payable(msg.sender).transfer(msg.value - totalMintPrice); } uint256[] memory tokenIds = new uint256[](_amount); uint16 tmpTotalMintedTokens = totalSupply; mintedPerWalletByStage[stage][msg.sender] += _amount; totalSupply += _amount; for (uint256 i; i < _amount; i++) { tokenIds[i] = _getTokenToBeMinted(tmpTotalMintedTokens); tmpTotalMintedTokens++; } toyContract.batchMint(msg.sender, tokenIds); } function getAvailableTokens() public view returns (uint16) { return totalTokens - totalSupply; } // Private and Internal functions function generateMintHash( uint8 amount, uint8 stage, uint8 maxAmount, address _address, uint256 _fromTimestamp ) internal pure returns (bytes32) { bytes32 _hash = keccak256( abi.encodePacked( _address, // 20 bytes _fromTimestamp, // 32 bytes(uint256) amount, // 1 byte (uint8) stage, // 1 byte (uint8) maxAmount // 1 bytes (uint16) ) ); bytes memory result = abi.encodePacked( "\x19Ethereum Signed Message:\n32", _hash ); return keccak256(result); } /** * @dev Returns a random available token to be minted * * Code used as reference: * https://github.com/1001-digital/erc721-extensions/blob/main/contracts/RandomlyAssigned.sol */ function _getTokenToBeMinted(uint16 _totalMintedTokens) private returns (uint16) { uint16 maxIndex = totalTokens - _totalMintedTokens; uint16 random = _getRandomNumber(maxIndex, _totalMintedTokens); uint16 tokenId = tokenMatrix[random]; if (tokenMatrix[random] == 0) { tokenId = random; } tokenMatrix[maxIndex - 1] == 0 ? tokenMatrix[random] = maxIndex - 1 : tokenMatrix[random] = tokenMatrix[maxIndex - 1]; return tokenId + 1; } function useTokenId(uint16 _id) private { uint16 maxIndex = totalTokens - totalSupply; uint16 nonRandom = _id - 1; uint16 tokenId = tokenMatrix[nonRandom]; if (tokenMatrix[nonRandom] == 0) { tokenId = nonRandom; } tokenMatrix[maxIndex - 1] == 0 ? tokenMatrix[nonRandom] = maxIndex - 1 : tokenMatrix[nonRandom] = tokenMatrix[maxIndex - 1]; } /** * @dev Generates a pseudo-random number. */ function _getRandomNumber(uint16 _upper, uint16 _totalMintedTokens) private view returns (uint16) { uint16 random = uint16( uint256( keccak256( abi.encodePacked( _totalMintedTokens, blockhash(block.number - 1), block.coinbase, block.difficulty, msg.sender ) ) ) ); return random % _upper; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT 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; } }
// SPDX-License-Identifier: MIT 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); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } else if (error == RecoverError.InvalidSignatureV) { revert("ECDSA: invalid signature 'v' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { // Check the signature length // - case 65: r,s,v signature (standard) // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else if (signature.length == 64) { bytes32 r; bytes32 vs; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) vs := mload(add(signature, 0x40)) } return tryRecover(hash, r, vs); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s; uint8 v; assembly { s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) v := add(shr(255, vs), 27) } return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. * * _Available since v4.2._ */ function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } if (v != 27 && v != 28) { return (address(0), RecoverError.InvalidSignatureV); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface RaregotchiToyInterface { function batchMint( address destinationAddress, uint256[] calldata tokenIds ) external; function isOpen(uint256 tokenId) external view returns (bool); }
{ "remappings": [], "optimizer": { "enabled": true, "runs": 2000 }, "evmVersion": "london", "libraries": {}, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint16[]","name":"_tokenIds","type":"uint16[]"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAvailableTokens","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"amount","type":"uint16"}],"name":"marketingMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"amount","type":"uint8"},{"internalType":"uint8","name":"stage","type":"uint8"},{"internalType":"uint8","name":"maxAmount","type":"uint8"},{"internalType":"uint256","name":"fromTimestamp","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"address","name":"","type":"address"}],"name":"mintedPerWalletByStage","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_signerAddress","type":"address"}],"name":"setSignerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_totalTokens","type":"uint16"}],"name":"setTotalTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setToyContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokens","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526001805463ffffffff60a01b191661017760a31b1790556703782dace9d900006002556003805460ff1916905534801561003d57600080fd5b506100473361004c565b61009c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611cac806100ab6000396000f3fe60806040526004361061010e5760003560e01c8063b22fc0a0116100a5578063c59d821111610074578063e35568cb11610059578063e35568cb1461031a578063f2fde38b1461032f578063f4a0a5281461034f57600080fd5b8063c59d8211146102e7578063d31dd6b0146102fa57600080fd5b8063b22fc0a01461023a578063b99ef8ec1461025a578063bbe8bf9f1461027a578063bd13bb43146102c757600080fd5b80636817c76c116100e15780636817c76c146101c1578063715018a6146101e55780637e1c0c09146101fa5780638da5cb5b1461021c57600080fd5b8063046dc1661461011357806318160ddd146101355780633ccfd60b1461016f5780635b7633d014610184575b600080fd5b34801561011f57600080fd5b5061013361012e3660046118e1565b61036f565b005b34801561014157600080fd5b5060015461015790600160b01b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561017b57600080fd5b5061013361040d565b34801561019057600080fd5b506003546101a99061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610166565b3480156101cd57600080fd5b506101d760025481565b604051908152602001610166565b3480156101f157600080fd5b50610133610496565b34801561020657600080fd5b5060015461015790600160a01b900461ffff1681565b34801561022857600080fd5b506000546001600160a01b03166101a9565b34801561024657600080fd5b50610133610255366004611903565b6104fc565b34801561026657600080fd5b50610133610275366004611927565b610757565b34801561028657600080fd5b506102b56102953660046119be565b600460209081526000928352604080842090915290825290205460ff1681565b60405160ff9091168152602001610166565b3480156102d357600080fd5b506101336102e23660046118e1565b6108fc565b6101336102f53660046119f1565b610990565b34801561030657600080fd5b50610133610315366004611903565b610f0f565b34801561032657600080fd5b50610157610fa5565b34801561033b57600080fd5b5061013361034a3660046118e1565b610fce565b34801561035b57600080fd5b5061013361036a366004611a9e565b6110ad565b6000546001600160a01b031633146103ce5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b600380546001600160a01b03909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6000546001600160a01b031633146104675760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103c5565b60405133904780156108fc02916000818181858888f19350505050158015610493573d6000803e3d6000fd5b50565b6000546001600160a01b031633146104f05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103c5565b6104fa600061110c565b565b6000546001600160a01b031633146105565760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103c5565b60015461ffff600160a01b82048116600160b01b90920416106105bb5760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420746f6b656e73206c65667420746f206265206d696e7465640000000060448201526064016103c5565b600154819061ffff600160a01b82048116916105e0918491600160b01b900416611acd565b61ffff16111561060e5760015461060b9061ffff600160b01b8204811691600160a01b900416611af3565b90505b60008161ffff1667ffffffffffffffff81111561062d5761062d611b16565b604051908082528060200260200182016040528015610656578160200160208202803683370190505b5060018054919250600160b01b90910461ffff1690839060166106798385611acd565b92506101000a81548161ffff021916908361ffff16021790555060005b8361ffff168110156106ec576106ab82611174565b61ffff168382815181106106c1576106c1611b2c565b6020908102919091010152816106d681611b42565b92505080806106e490611b64565b915050610696565b50600154604051634684d7e960e01b81526001600160a01b0390911690634684d7e99061071f9033908690600401611b7f565b600060405180830381600087803b15801561073957600080fd5b505af115801561074d573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031633146107b15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103c5565b60008167ffffffffffffffff8111156107cc576107cc611b16565b6040519080825280602002602001820160405280156107f5578160200160208202803683370190505b50905060005b8281101561088c5761083284848381811061081857610818611b2c565b905060200201602081019061082d9190611903565b611280565b83838281811061084457610844611b2c565b90506020020160208101906108599190611903565b61ffff1682828151811061086f5761086f611b2c565b60209081029190910101528061088481611b64565b9150506107fb565b508051600180546016906108ac908490600160b01b900461ffff16611acd565b825461ffff9182166101009390930a928302919092021990911617905550600154604051634684d7e960e01b81526001600160a01b0390911690634684d7e99061071f9087908590600401611b7f565b6000546001600160a01b031633146109565760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103c5565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b3233146109df5760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e7472616374000060448201526064016103c5565b60006109ee8787873388611385565b90506000610a328285858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061146b92505050565b6003549091506001600160a01b038083166101009092041614610a975760405162461bcd60e51b815260206004820181905260248201527f496e76616c6964207369676e617475726520666f72207468652063616c6c657260448201526064016103c5565b84421015610ae75760405162461bcd60e51b815260206004820152601160248201527f546f6f206561726c7920746f206d696e7400000000000000000000000000000060448201526064016103c5565b60015461ffff600160a01b82048116600160b01b9092041610610b4c5760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420746f6b656e73206c65667420746f206265206d696e7465640000000060448201526064016103c5565b60008860ff1611610bc55760405162461bcd60e51b815260206004820152602360248201527f4174206c65617374206f6e6520746f6b656e2073686f756c64206265206d696e60448201527f746564000000000000000000000000000000000000000000000000000000000060648201526084016103c5565b600154889061ffff600160a01b8204811691610bed9160ff851691600160b01b900416611acd565b61ffff161115610c1b57600154610c189061ffff600160b01b8204811691600160a01b900416611af3565b90505b60ff888116600090815260046020908152604080832033845290915290205481891691610c4a91849116611bd6565b60ff161115610c9b5760405162461bcd60e51b815260206004820152601e60248201527f43616c6c65722063616e6e6f74206d696e74206d6f726520746f6b656e73000060448201526064016103c5565b60008160ff16600254610cae9190611bfb565b905080341015610d265760405162461bcd60e51b815260206004820152602360248201527f4e6f7420656e6f75676820457468657220746f206d696e742074686520746f6b60448201527f656e73000000000000000000000000000000000000000000000000000000000060648201526084016103c5565b80341115610d6657336108fc610d3c8334611c1a565b6040518115909202916000818181858888f19350505050158015610d64573d6000803e3d6000fd5b505b60008260ff1667ffffffffffffffff811115610d8457610d84611b16565b604051908082528060200260200182016040528015610dad578160200160208202803683370190505b5060015460ff8c8116600090815260046020908152604080832033845290915281208054949550600160b01b90930461ffff1693879392610df091859116611bd6565b92506101000a81548160ff021916908360ff1602179055508360ff16600160168282829054906101000a900461ffff16610e2a9190611acd565b92506101000a81548161ffff021916908361ffff16021790555060005b8460ff16811015610e9c57610e5b82611174565b61ffff16838281518110610e7157610e71611b2c565b602090810291909101015281610e8681611b42565b9250508080610e9490611b64565b915050610e47565b50600154604051634684d7e960e01b81526001600160a01b0390911690634684d7e990610ecf9033908690600401611b7f565b600060405180830381600087803b158015610ee957600080fd5b505af1158015610efd573d6000803e3d6000fd5b50505050505050505050505050505050565b6000546001600160a01b03163314610f695760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103c5565b6001805461ffff909216600160a01b027fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600154600090610fc99061ffff600160b01b8204811691600160a01b900416611af3565b905090565b6000546001600160a01b031633146110285760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103c5565b6001600160a01b0381166110a45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016103c5565b6104938161110c565b6000546001600160a01b031633146111075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103c5565b600255565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001546000908190611192908490600160a01b900461ffff16611af3565b905060006111a0828561148f565b61ffff80821660009081526005602052604090205491925016806111c15750805b600560006111d0600186611af3565b61ffff9081168252602082019290925260400160002054161561123b57600560006111fc600186611af3565b61ffff908116825260208083019390935260409182016000908120548683168252600590945291909120805461ffff191692909116918217905561126b565b611246600184611af3565b61ffff8381166000908152600560205260409020805461ffff19169183169190911790555b50611277816001611acd565b95945050505050565b6001546000906112a49061ffff600160b01b8204811691600160a01b900416611af3565b905060006112b3600184611af3565b61ffff80821660009081526005602052604090205491925016806112d45750805b600560006112e3600186611af3565b61ffff9081168252602082019290925260400160002054161561134e576005600061130f600186611af3565b61ffff908116825260208083019390935260409182016000908120548683168252600590945291909120805461ffff191692909116918217905561137e565b611359600184611af3565b61ffff8381166000908152600560205260409020805461ffff19169183169190911790555b5050505050565b6040516bffffffffffffffffffffffff19606084901b166020820152603481018290527fff0000000000000000000000000000000000000000000000000000000000000060f887811b8216605484015286811b8216605584015285901b166056820152600090819060570160405160208183030381529060405280519060200120905060008160405160200161144791907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b60408051808303601f19018152919052805160209091012098975050505050505050565b600080600061147a858561152f565b915091506114878161159f565b509392505050565b6000808261149e600143611c1a565b60405160f09290921b7fffff00000000000000000000000000000000000000000000000000000000000016602083015240602282015241606090811b6bffffffffffffffffffffffff1990811660428401524460568401523390911b166076820152608a0160408051601f19818403018152919052805160209091012090506115278482611c31565b949350505050565b6000808251604114156115665760208301516040840151606085015160001a61155a87828585611790565b94509450505050611598565b825160401415611590576020830151604084015161158586838361187d565b935093505050611598565b506000905060025b9250929050565b60008160048111156115b3576115b3611c60565b14156115bc5750565b60018160048111156115d0576115d0611c60565b141561161e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016103c5565b600281600481111561163257611632611c60565b14156116805760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016103c5565b600381600481111561169457611694611c60565b14156117085760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016103c5565b600481600481111561171c5761171c611c60565b14156104935760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016103c5565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156117c75750600090506003611874565b8460ff16601b141580156117df57508460ff16601c14155b156117f05750600090506004611874565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611844573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661186d57600060019250925050611874565b9150600090505b94509492505050565b6000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831660ff84901c601b016118b787828885611790565b935093505050935093915050565b80356001600160a01b03811681146118dc57600080fd5b919050565b6000602082840312156118f357600080fd5b6118fc826118c5565b9392505050565b60006020828403121561191557600080fd5b813561ffff811681146118fc57600080fd5b60008060006040848603121561193c57600080fd5b611945846118c5565b9250602084013567ffffffffffffffff8082111561196257600080fd5b818601915086601f83011261197657600080fd5b81358181111561198557600080fd5b8760208260051b850101111561199a57600080fd5b6020830194508093505050509250925092565b803560ff811681146118dc57600080fd5b600080604083850312156119d157600080fd5b6119da836119ad565b91506119e8602084016118c5565b90509250929050565b60008060008060008060a08789031215611a0a57600080fd5b611a13876119ad565b9550611a21602088016119ad565b9450611a2f604088016119ad565b935060608701359250608087013567ffffffffffffffff80821115611a5357600080fd5b818901915089601f830112611a6757600080fd5b813581811115611a7657600080fd5b8a6020828501011115611a8857600080fd5b6020830194508093505050509295509295509295565b600060208284031215611ab057600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b600061ffff808316818516808303821115611aea57611aea611ab7565b01949350505050565b600061ffff83811690831681811015611b0e57611b0e611ab7565b039392505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600061ffff80831681811415611b5a57611b5a611ab7565b6001019392505050565b6000600019821415611b7857611b78611ab7565b5060010190565b6000604082016001600160a01b03851683526020604081850152818551808452606086019150828701935060005b81811015611bc957845183529383019391830191600101611bad565b5090979650505050505050565b600060ff821660ff84168060ff03821115611bf357611bf3611ab7565b019392505050565b6000816000190483118215151615611c1557611c15611ab7565b500290565b600082821015611c2c57611c2c611ab7565b500390565b600061ffff80841680611c5457634e487b7160e01b600052601260045260246000fd5b92169190910692915050565b634e487b7160e01b600052602160045260246000fdfea264697066735822122098aecff5cc78fdce7d16e23e0d3fd658328da5a577a6b0bf55272242aa35635c64736f6c63430008090033
Deployed Bytecode
0x60806040526004361061010e5760003560e01c8063b22fc0a0116100a5578063c59d821111610074578063e35568cb11610059578063e35568cb1461031a578063f2fde38b1461032f578063f4a0a5281461034f57600080fd5b8063c59d8211146102e7578063d31dd6b0146102fa57600080fd5b8063b22fc0a01461023a578063b99ef8ec1461025a578063bbe8bf9f1461027a578063bd13bb43146102c757600080fd5b80636817c76c116100e15780636817c76c146101c1578063715018a6146101e55780637e1c0c09146101fa5780638da5cb5b1461021c57600080fd5b8063046dc1661461011357806318160ddd146101355780633ccfd60b1461016f5780635b7633d014610184575b600080fd5b34801561011f57600080fd5b5061013361012e3660046118e1565b61036f565b005b34801561014157600080fd5b5060015461015790600160b01b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561017b57600080fd5b5061013361040d565b34801561019057600080fd5b506003546101a99061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610166565b3480156101cd57600080fd5b506101d760025481565b604051908152602001610166565b3480156101f157600080fd5b50610133610496565b34801561020657600080fd5b5060015461015790600160a01b900461ffff1681565b34801561022857600080fd5b506000546001600160a01b03166101a9565b34801561024657600080fd5b50610133610255366004611903565b6104fc565b34801561026657600080fd5b50610133610275366004611927565b610757565b34801561028657600080fd5b506102b56102953660046119be565b600460209081526000928352604080842090915290825290205460ff1681565b60405160ff9091168152602001610166565b3480156102d357600080fd5b506101336102e23660046118e1565b6108fc565b6101336102f53660046119f1565b610990565b34801561030657600080fd5b50610133610315366004611903565b610f0f565b34801561032657600080fd5b50610157610fa5565b34801561033b57600080fd5b5061013361034a3660046118e1565b610fce565b34801561035b57600080fd5b5061013361036a366004611a9e565b6110ad565b6000546001600160a01b031633146103ce5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b600380546001600160a01b03909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6000546001600160a01b031633146104675760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103c5565b60405133904780156108fc02916000818181858888f19350505050158015610493573d6000803e3d6000fd5b50565b6000546001600160a01b031633146104f05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103c5565b6104fa600061110c565b565b6000546001600160a01b031633146105565760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103c5565b60015461ffff600160a01b82048116600160b01b90920416106105bb5760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420746f6b656e73206c65667420746f206265206d696e7465640000000060448201526064016103c5565b600154819061ffff600160a01b82048116916105e0918491600160b01b900416611acd565b61ffff16111561060e5760015461060b9061ffff600160b01b8204811691600160a01b900416611af3565b90505b60008161ffff1667ffffffffffffffff81111561062d5761062d611b16565b604051908082528060200260200182016040528015610656578160200160208202803683370190505b5060018054919250600160b01b90910461ffff1690839060166106798385611acd565b92506101000a81548161ffff021916908361ffff16021790555060005b8361ffff168110156106ec576106ab82611174565b61ffff168382815181106106c1576106c1611b2c565b6020908102919091010152816106d681611b42565b92505080806106e490611b64565b915050610696565b50600154604051634684d7e960e01b81526001600160a01b0390911690634684d7e99061071f9033908690600401611b7f565b600060405180830381600087803b15801561073957600080fd5b505af115801561074d573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031633146107b15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103c5565b60008167ffffffffffffffff8111156107cc576107cc611b16565b6040519080825280602002602001820160405280156107f5578160200160208202803683370190505b50905060005b8281101561088c5761083284848381811061081857610818611b2c565b905060200201602081019061082d9190611903565b611280565b83838281811061084457610844611b2c565b90506020020160208101906108599190611903565b61ffff1682828151811061086f5761086f611b2c565b60209081029190910101528061088481611b64565b9150506107fb565b508051600180546016906108ac908490600160b01b900461ffff16611acd565b825461ffff9182166101009390930a928302919092021990911617905550600154604051634684d7e960e01b81526001600160a01b0390911690634684d7e99061071f9087908590600401611b7f565b6000546001600160a01b031633146109565760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103c5565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b3233146109df5760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e7472616374000060448201526064016103c5565b60006109ee8787873388611385565b90506000610a328285858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061146b92505050565b6003549091506001600160a01b038083166101009092041614610a975760405162461bcd60e51b815260206004820181905260248201527f496e76616c6964207369676e617475726520666f72207468652063616c6c657260448201526064016103c5565b84421015610ae75760405162461bcd60e51b815260206004820152601160248201527f546f6f206561726c7920746f206d696e7400000000000000000000000000000060448201526064016103c5565b60015461ffff600160a01b82048116600160b01b9092041610610b4c5760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420746f6b656e73206c65667420746f206265206d696e7465640000000060448201526064016103c5565b60008860ff1611610bc55760405162461bcd60e51b815260206004820152602360248201527f4174206c65617374206f6e6520746f6b656e2073686f756c64206265206d696e60448201527f746564000000000000000000000000000000000000000000000000000000000060648201526084016103c5565b600154889061ffff600160a01b8204811691610bed9160ff851691600160b01b900416611acd565b61ffff161115610c1b57600154610c189061ffff600160b01b8204811691600160a01b900416611af3565b90505b60ff888116600090815260046020908152604080832033845290915290205481891691610c4a91849116611bd6565b60ff161115610c9b5760405162461bcd60e51b815260206004820152601e60248201527f43616c6c65722063616e6e6f74206d696e74206d6f726520746f6b656e73000060448201526064016103c5565b60008160ff16600254610cae9190611bfb565b905080341015610d265760405162461bcd60e51b815260206004820152602360248201527f4e6f7420656e6f75676820457468657220746f206d696e742074686520746f6b60448201527f656e73000000000000000000000000000000000000000000000000000000000060648201526084016103c5565b80341115610d6657336108fc610d3c8334611c1a565b6040518115909202916000818181858888f19350505050158015610d64573d6000803e3d6000fd5b505b60008260ff1667ffffffffffffffff811115610d8457610d84611b16565b604051908082528060200260200182016040528015610dad578160200160208202803683370190505b5060015460ff8c8116600090815260046020908152604080832033845290915281208054949550600160b01b90930461ffff1693879392610df091859116611bd6565b92506101000a81548160ff021916908360ff1602179055508360ff16600160168282829054906101000a900461ffff16610e2a9190611acd565b92506101000a81548161ffff021916908361ffff16021790555060005b8460ff16811015610e9c57610e5b82611174565b61ffff16838281518110610e7157610e71611b2c565b602090810291909101015281610e8681611b42565b9250508080610e9490611b64565b915050610e47565b50600154604051634684d7e960e01b81526001600160a01b0390911690634684d7e990610ecf9033908690600401611b7f565b600060405180830381600087803b158015610ee957600080fd5b505af1158015610efd573d6000803e3d6000fd5b50505050505050505050505050505050565b6000546001600160a01b03163314610f695760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103c5565b6001805461ffff909216600160a01b027fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600154600090610fc99061ffff600160b01b8204811691600160a01b900416611af3565b905090565b6000546001600160a01b031633146110285760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103c5565b6001600160a01b0381166110a45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016103c5565b6104938161110c565b6000546001600160a01b031633146111075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103c5565b600255565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001546000908190611192908490600160a01b900461ffff16611af3565b905060006111a0828561148f565b61ffff80821660009081526005602052604090205491925016806111c15750805b600560006111d0600186611af3565b61ffff9081168252602082019290925260400160002054161561123b57600560006111fc600186611af3565b61ffff908116825260208083019390935260409182016000908120548683168252600590945291909120805461ffff191692909116918217905561126b565b611246600184611af3565b61ffff8381166000908152600560205260409020805461ffff19169183169190911790555b50611277816001611acd565b95945050505050565b6001546000906112a49061ffff600160b01b8204811691600160a01b900416611af3565b905060006112b3600184611af3565b61ffff80821660009081526005602052604090205491925016806112d45750805b600560006112e3600186611af3565b61ffff9081168252602082019290925260400160002054161561134e576005600061130f600186611af3565b61ffff908116825260208083019390935260409182016000908120548683168252600590945291909120805461ffff191692909116918217905561137e565b611359600184611af3565b61ffff8381166000908152600560205260409020805461ffff19169183169190911790555b5050505050565b6040516bffffffffffffffffffffffff19606084901b166020820152603481018290527fff0000000000000000000000000000000000000000000000000000000000000060f887811b8216605484015286811b8216605584015285901b166056820152600090819060570160405160208183030381529060405280519060200120905060008160405160200161144791907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b60408051808303601f19018152919052805160209091012098975050505050505050565b600080600061147a858561152f565b915091506114878161159f565b509392505050565b6000808261149e600143611c1a565b60405160f09290921b7fffff00000000000000000000000000000000000000000000000000000000000016602083015240602282015241606090811b6bffffffffffffffffffffffff1990811660428401524460568401523390911b166076820152608a0160408051601f19818403018152919052805160209091012090506115278482611c31565b949350505050565b6000808251604114156115665760208301516040840151606085015160001a61155a87828585611790565b94509450505050611598565b825160401415611590576020830151604084015161158586838361187d565b935093505050611598565b506000905060025b9250929050565b60008160048111156115b3576115b3611c60565b14156115bc5750565b60018160048111156115d0576115d0611c60565b141561161e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016103c5565b600281600481111561163257611632611c60565b14156116805760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016103c5565b600381600481111561169457611694611c60565b14156117085760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016103c5565b600481600481111561171c5761171c611c60565b14156104935760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016103c5565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156117c75750600090506003611874565b8460ff16601b141580156117df57508460ff16601c14155b156117f05750600090506004611874565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611844573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661186d57600060019250925050611874565b9150600090505b94509492505050565b6000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831660ff84901c601b016118b787828885611790565b935093505050935093915050565b80356001600160a01b03811681146118dc57600080fd5b919050565b6000602082840312156118f357600080fd5b6118fc826118c5565b9392505050565b60006020828403121561191557600080fd5b813561ffff811681146118fc57600080fd5b60008060006040848603121561193c57600080fd5b611945846118c5565b9250602084013567ffffffffffffffff8082111561196257600080fd5b818601915086601f83011261197657600080fd5b81358181111561198557600080fd5b8760208260051b850101111561199a57600080fd5b6020830194508093505050509250925092565b803560ff811681146118dc57600080fd5b600080604083850312156119d157600080fd5b6119da836119ad565b91506119e8602084016118c5565b90509250929050565b60008060008060008060a08789031215611a0a57600080fd5b611a13876119ad565b9550611a21602088016119ad565b9450611a2f604088016119ad565b935060608701359250608087013567ffffffffffffffff80821115611a5357600080fd5b818901915089601f830112611a6757600080fd5b813581811115611a7657600080fd5b8a6020828501011115611a8857600080fd5b6020830194508093505050509295509295509295565b600060208284031215611ab057600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b600061ffff808316818516808303821115611aea57611aea611ab7565b01949350505050565b600061ffff83811690831681811015611b0e57611b0e611ab7565b039392505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600061ffff80831681811415611b5a57611b5a611ab7565b6001019392505050565b6000600019821415611b7857611b78611ab7565b5060010190565b6000604082016001600160a01b03851683526020604081850152818551808452606086019150828701935060005b81811015611bc957845183529383019391830191600101611bad565b5090979650505050505050565b600060ff821660ff84168060ff03821115611bf357611bf3611ab7565b019392505050565b6000816000190483118215151615611c1557611c15611ab7565b500290565b600082821015611c2c57611c2c611ab7565b500390565b600061ffff80841680611c5457634e487b7160e01b600052601260045260246000fd5b92169190910692915050565b634e487b7160e01b600052602160045260246000fdfea264697066735822122098aecff5cc78fdce7d16e23e0d3fd658328da5a577a6b0bf55272242aa35635c64736f6c63430008090033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.