// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
/**
* ZOOMER STOCKHOLDER CLUB
* ----------------------------------------------------------------------------
* Makes "mint proceeds locked in the treasury, permanently" verifiable rather
* than a promise, mirroring how BOOMER's Stockholder contract works.
*
* 1. Mint is priced in $ZOOMER. Every payment goes straight into the
* treasury below. The NFT contract never holds mint proceeds.
* 2. The treasury has NO withdraw function, NO owner, NO arbitrary call and
* NO approval path for ZOOMER. Once ZOOMER is in, it can never leave.
* It simply exists as a permanent ZOOMER holder.
* 3. Because it holds ZOOMER, the Indices distributor pays it stock tokens
* like any other holder. Anyone can then call allocate() to split that
* balance equally across every minted certificate.
* 4. Rewards accrue per token id. Unclaimed rewards follow the NFT when it
* sells. The current owner claims.
*
* Reward accounting uses the standard accumulator + debt pattern, so tokens
* minted in a later wave cannot claim allocations that happened before they
* existed.
*
* DEPLOY ORDER
* 1. deploy ZoomerClubTreasury(ZOOMER_ADDRESS)
* 2. deploy ZoomerStockholderClub(ZOOMER, treasury, priceWei, baseURI)
* 3. treasury.setClub(club) <- one time, then permanently frozen
* 4. after the final wave: club.renounceOwnership()
*
* NOT AUDITED. Test on a fork with small amounts before real money.
*/
interface IERC721Receiver {
function onERC721Received(address operator, address from, uint256 id, bytes calldata data)
external returns (bytes4);
}
interface IERC20 {
function transfer(address to, uint256 amount) external returns (bool);
function transferFrom(address from, address to, uint256 amount) external returns (bool);
function balanceOf(address account) external view returns (uint256);
}
/* -------------------------------------------------------------------------- */
/* TREASURY */
/* -------------------------------------------------------------------------- */
contract ZoomerClubTreasury {
IERC20 public immutable ZOOMER;
address public club;
bool public clubFrozen;
// deployer may only wire the club once, then loses that power forever
address private _deployer;
/* ------------------------- ESCAPE HATCH -------------------------------
* The guardian can move the locked ZOOMER to a new treasury, but only
* after announcing it on-chain and waiting MIGRATION_DELAY. That is the
* recovery path if a bug is ever found - without it, a mistake would
* strand the principal forever.
*
* It cannot be used as a silent rug: proposeMigration emits a public
* event and starts a 30-day clock that anyone can watch. Holders always
* get a month of warning and can exit first.
*
* Once the system is proven, call renounceGuardian() to delete the hatch
* permanently and make the lock absolute.
* --------------------------------------------------------------------- */
uint256 public constant MIGRATION_DELAY = 30 days;
address public guardian;
address public migrationTarget;
uint256 public migrationReadyAt;
event ClubSet(address club);
event StockPushed(address indexed token, uint256 amount);
event MigrationProposed(address indexed target, uint256 readyAt);
event MigrationCancelled(address indexed target);
event MigrationExecuted(address indexed target, uint256 amount);
event GuardianRenounced();
modifier onlyGuardian() {
require(msg.sender == guardian, "not guardian");
_;
}
constructor(address zoomer) {
ZOOMER = IERC20(zoomer);
_deployer = msg.sender;
guardian = msg.sender;
}
/// Announce an intent to move the locked ZOOMER. Starts the 30-day clock.
function proposeMigration(address newTreasury) external onlyGuardian {
require(newTreasury != address(0), "zero");
migrationTarget = newTreasury;
migrationReadyAt = block.timestamp + MIGRATION_DELAY;
emit MigrationProposed(newTreasury, migrationReadyAt);
}
function cancelMigration() external onlyGuardian {
emit MigrationCancelled(migrationTarget);
migrationTarget = address(0);
migrationReadyAt = 0;
}
/// Execute only after the announced delay has fully elapsed.
function executeMigration() external onlyGuardian {
require(migrationReadyAt != 0, "none proposed");
require(block.timestamp >= migrationReadyAt, "timelocked");
uint256 bal = ZOOMER.balanceOf(address(this));
require(bal > 0, "empty");
address target = migrationTarget;
migrationTarget = address(0);
migrationReadyAt = 0;
require(ZOOMER.transfer(target, bal), "transfer failed");
emit MigrationExecuted(target, bal);
}
/// Delete the escape hatch forever. Do this once the system is proven.
function renounceGuardian() external onlyGuardian {
guardian = address(0);
migrationTarget = address(0);
migrationReadyAt = 0;
emit GuardianRenounced();
}
function setClub(address c) external {
require(msg.sender == _deployer && !clubFrozen, "frozen");
require(c != address(0), "zero");
club = c;
clubFrozen = true;
_deployer = address(0); // no owner from this point on
emit ClubSet(c);
}
/**
* Push a stock token's balance to the club for distribution.
* Permissionless: anyone can pay the gas, the destination is hard-coded.
* ZOOMER itself can never be pushed - that is what makes the lock real.
*/
function pushStock(address token) external returns (uint256 amount) {
require(clubFrozen, "club unset");
require(token != address(ZOOMER), "ZOOMER is locked");
amount = IERC20(token).balanceOf(address(this));
require(amount > 0, "nothing to push");
require(IERC20(token).transfer(club, amount), "transfer failed");
emit StockPushed(token, amount);
}
// deliberately absent: withdraw, rescue, approve, delegatecall, selfdestruct
}
/* -------------------------------------------------------------------------- */
/* STOCKHOLDER NFT */
/* -------------------------------------------------------------------------- */
contract ZoomerStockholderClub {
// ------------------------------------------------------------- ERC-721
string public name = "Zoomer Stockholder Club";
string public symbol = "ZSC";
string public baseURI;
uint256 public totalSupply; // how many actually exist
uint256 public nextId; // highest id issued; may jump past unsold ids
uint256 public constant MAX_SUPPLY = 1000;
/* ----------------------------- TIERS ----------------------------------
* Token ids are assigned sequentially, so the tier is a pure function of
* the id. One tier per wave - a wave-2 minter can never receive a
* Paperhand.
*
* #1 - #500 PAPERHAND weight 1.0x 100k ZOOMER
* #501 - #750 SWEATY weight 2.0x 250k
* #751 - #900 DIAMOND weight 3.0x 500k
* #901 - #1000 CHAD weight 5.0x 1M
*
* Cost per weight point runs 1,000 / 1,250 / 1,667 / 2,000 - a smooth
* ramp, so each wave is slightly worse yield and meaningfully scarcer.
* No tier is dominated by another, and each tier holds roughly a quarter
* of the club: 25.6% / 25.6% / 23.1% / 25.6%.
*
* Rewards are split by WEIGHT, not per-NFT. Without this a CHAD would
* cost 10x a Paperhand and earn exactly the same.
* --------------------------------------------------------------------- */
uint256 public constant PAPERHAND_END = 500;
uint256 public constant SWEATY_END = 750;
uint256 public constant DIAMOND_END = 900;
/// weight in hundredths: 100 = 1.0x
function weightOf(uint256 id) public pure returns (uint256) {
if (id == 0 || id > MAX_SUPPLY) return 0;
if (id <= PAPERHAND_END) return 100;
if (id <= SWEATY_END) return 200;
if (id <= DIAMOND_END) return 300;
return 500;
}
function tierOf(uint256 id) external pure returns (string memory) {
if (id == 0 || id > MAX_SUPPLY) return "";
if (id <= PAPERHAND_END) return "PAPERHAND";
if (id <= SWEATY_END) return "SWEATY";
if (id <= DIAMOND_END) return "DIAMOND";
return "CHAD";
}
/// sum of weightOf() across every minted certificate
uint256 public totalWeight;
mapping(uint256 => address) public ownerOf;
mapping(address => uint256) public balanceOf;
mapping(uint256 => address) public getApproved;
mapping(address => mapping(address => bool)) public isApprovedForAll;
event Transfer(address indexed from, address indexed to, uint256 indexed id);
event Approval(address indexed owner, address indexed spender, uint256 indexed id);
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
// ------------------------------------------------------------- club
IERC20 public immutable ZOOMER;
ZoomerClubTreasury public immutable treasury;
address public owner;
uint256 public price; // ZOOMER per mint, in wei
uint256 public waveCap; // highest id mintable right now
bool public mintOpen;
/// Hard ceiling on certificates per transaction.
uint256 public maxPerTx = 10;
/**
* Ceiling on ZOOMER spent per transaction. This is the real limiter, and
* it is enforced from the price so it can never be forgotten when a wave
* opens:
*
* PAPERHAND 100k x 10 = 1M
* SWEATY 250k x 4 = 1M
* DIAMOND 500k x 2 = 1M
* CHAD 1M x 1 = 1M
*
* Every wave costs the same maximum per transaction, so a buyer sweeping a
* tier has to do it in visible, deliberate steps rather than one click.
*/
uint256 public maxSpendPerTx = 1_000_000 ether;
uint256 private constant ACC = 1e18;
// reward accounting
//
// rewardTokens is looped by mint() and _settle(), so it MUST stay small.
// Without an allowlist anyone could donate a junk ERC-20 to the treasury,
// allocate() it, and grow this array forever until minting and transferring
// cost more gas than a block allows - bricking the collection permanently.
uint256 public constant MAX_REWARD_TOKENS = 8;
address[] public rewardTokens;
mapping(address => bool) public isRewardToken;
mapping(address => bool) public allowedReward;
mapping(address => uint256) public accPerWeight; // scaled by ACC, per weight point
mapping(address => mapping(uint256 => uint256)) public debt; // token => id => debt
mapping(address => mapping(uint256 => uint256)) public owed; // token => id => pending
mapping(address => uint256) public lastAllocate; // hourly cap
event Minted(address indexed to, uint256 indexed id);
event WaveOpened(uint256 cap, uint256 price, uint256 weight);
event MintClosed();
event RewardTokenSet(address indexed token, bool allowed);
event Rescued(address indexed token, address indexed to, uint256 amount);
event RoyaltySet(address indexed receiver, uint96 bps);
event OwnershipRenounced();
event BaseURISet(string uri);
event TierSkipped(uint256 newStartId, uint256 retired);
event MaxPerTxSet(uint256 n);
event MaxSpendPerTxSet(uint256 amount);
event Allocated(address indexed token, uint256 amount, uint256 perNft);
event Claimed(address indexed to, address indexed token, uint256 amount);
modifier onlyOwner() {
require(msg.sender == owner, "not owner");
_;
}
constructor(address zoomer, address treasury_, uint256 price_, string memory uri) {
ZOOMER = IERC20(zoomer);
treasury = ZoomerClubTreasury(treasury_);
price = price_;
baseURI = uri;
owner = msg.sender;
}
/* ------------------------------- minting ------------------------------ */
function mint(uint256 qty) external {
require(mintOpen, "closed");
require(qty > 0 && qty <= maxPerTx, "qty over per-tx cap");
require(price * qty <= maxSpendPerTx, "over ZOOMER spend cap per tx");
require(nextId + qty <= waveCap, "wave sold out");
require(nextId + qty <= MAX_SUPPLY, "sold out");
// proceeds go straight to the treasury; this contract never holds them
require(ZOOMER.transferFrom(msg.sender, address(treasury), price * qty),
"ZOOMER transfer failed");
for (uint256 i = 0; i < qty; i++) {
uint256 id = ++nextId;
totalSupply++;
ownerOf[id] = msg.sender;
balanceOf[msg.sender]++;
totalWeight += weightOf(id);
// start this id at the current accumulator so it cannot claim
// allocations that happened before it existed
for (uint256 t = 0; t < rewardTokens.length; t++) {
debt[rewardTokens[t]][id] = accPerWeight[rewardTokens[t]];
}
emit Transfer(address(0), msg.sender, id);
emit Minted(msg.sender, id);
}
}
/* ------------------------------ rewards ------------------------------- */
/**
* Pull whatever the treasury holds of `token` and split it equally across
* every certificate minted so far. Permissionless. At most once per hour
* per token, matching the cadence BOOMER uses.
*/
function allocate(address token) external {
require(totalWeight > 0, "no supply");
require(token != address(ZOOMER), "not a reward token");
require(allowedReward[token], "token not allowed");
require(block.timestamp >= lastAllocate[token] + 1 hours, "too soon");
uint256 before = IERC20(token).balanceOf(address(this));
treasury.pushStock(token);
uint256 amount = IERC20(token).balanceOf(address(this)) - before;
require(amount > 0, "nothing to allocate");
if (!isRewardToken[token]) {
require(rewardTokens.length < MAX_REWARD_TOKENS, "reward list full");
isRewardToken[token] = true;
rewardTokens.push(token);
}
accPerWeight[token] += (amount * ACC) / totalWeight;
lastAllocate[token] = block.timestamp;
emit Allocated(token, amount, amount / totalWeight);
}
function pending(address token, uint256 id) public view returns (uint256) {
if (ownerOf[id] == address(0)) return 0;
return owed[token][id]
+ (weightOf(id) * (accPerWeight[token] - debt[token][id])) / ACC;
}
/**
* Claim every listed reward token across every listed id.
* Always pays the CURRENT owner - a third party may pay the gas but cannot
* redirect the payment.
*/
function claim(uint256[] calldata ids, address[] calldata tokens) external {
for (uint256 t = 0; t < tokens.length; t++) {
address token = tokens[t];
uint256 total;
address recipient;
for (uint256 i = 0; i < ids.length; i++) {
uint256 id = ids[i];
address o = ownerOf[id];
require(o != address(0), "bad id");
if (recipient == address(0)) recipient = o;
require(o == recipient, "mixed owners");
total += pending(token, id);
owed[token][id] = 0;
debt[token][id] = accPerWeight[token];
}
if (total > 0) {
require(IERC20(token).transfer(recipient, total), "reward transfer failed");
emit Claimed(recipient, token, total);
}
}
}
/* ------------------------------ transfers ----------------------------- */
function _settle(uint256 id) private {
// freeze what this id has earned so far; it travels with the NFT
for (uint256 t = 0; t < rewardTokens.length; t++) {
address tk = rewardTokens[t];
owed[tk][id] += (weightOf(id) * (accPerWeight[tk] - debt[tk][id])) / ACC;
debt[tk][id] = accPerWeight[tk];
}
}
function transferFrom(address from, address to, uint256 id) public {
require(ownerOf[id] == from, "wrong from");
require(to != address(0), "zero to");
require(msg.sender == from || getApproved[id] == msg.sender
|| isApprovedForAll[from][msg.sender], "not authorised");
_settle(id);
balanceOf[from]--;
balanceOf[to]++;
ownerOf[id] = to;
delete getApproved[id];
emit Transfer(from, to, id);
}
function safeTransferFrom(address from, address to, uint256 id) external {
safeTransferFrom(from, to, id, "");
}
/// Checks that a contract recipient can actually handle ERC-721s. Without
/// this, sending a certificate to a contract that does not implement the
/// receiver hook destroys it permanently.
function safeTransferFrom(address from, address to, uint256 id, bytes memory data) public {
transferFrom(from, to, id);
if (to.code.length != 0) {
require(
IERC721Receiver(to).onERC721Received(msg.sender, from, id, data)
== IERC721Receiver.onERC721Received.selector,
"unsafe recipient"
);
}
}
function approve(address spender, uint256 id) external {
address o = ownerOf[id];
require(msg.sender == o || isApprovedForAll[o][msg.sender], "not authorised");
getApproved[id] = spender;
emit Approval(o, spender, id);
}
function setApprovalForAll(address operator, bool approved) external {
isApprovedForAll[msg.sender][operator] = approved;
emit ApprovalForAll(msg.sender, operator, approved);
}
function tokenURI(uint256 id) external view returns (string memory) {
require(ownerOf[id] != address(0), "bad id");
return string(abi.encodePacked(baseURI, _str(id), ".json"));
}
function supportsInterface(bytes4 i) external pure returns (bool) {
return i == 0x01ffc9a7 // ERC-165
|| i == 0x80ac58cd // ERC-721
|| i == 0x5b5e139f // ERC-721Metadata
|| i == 0x2a55205a; // ERC-2981 royalties
}
/* ------------------------------ royalties ----------------------------- */
address public royaltyReceiver;
uint96 public royaltyBps; // 500 = 5%
/// ERC-2981. Marketplaces read this to pay you on every secondary sale.
function royaltyInfo(uint256, uint256 salePrice)
external view returns (address, uint256)
{
return (royaltyReceiver, (salePrice * royaltyBps) / 10000);
}
function setRoyalty(address receiver, uint96 bps) external onlyOwner {
require(bps <= 1000, "max 10%");
require(receiver != address(0) || bps == 0, "receiver is zero");
royaltyReceiver = receiver;
royaltyBps = bps;
emit RoyaltySet(receiver, bps);
}
/* -------------------------------- admin ------------------------------- */
function openWave(uint256 cap, uint256 newPrice) external onlyOwner {
require(cap > nextId && cap <= MAX_SUPPLY, "cap");
// Every id in this wave must be the same tier. Otherwise a cap of 600
// at the Paperhand price would sell 100 SWEATYs for 100k instead of
// 250k - a quarter of the intended proceeds, unrecoverable.
require(weightOf(nextId + 1) == weightOf(cap), "wave crosses a tier");
// otherwise even qty=1 would exceed the spend cap and the wave would
// be permanently unmintable
require(newPrice <= maxSpendPerTx, "price exceeds the per-tx spend cap");
waveCap = cap;
price = newPrice;
mintOpen = true;
emit WaveOpened(cap, newPrice, weightOf(cap));
}
/// Register a basket stock as claimable. Do this for the five stock tokens
/// BEFORE renouncing ownership - afterwards the set is frozen forever.
function setRewardToken(address token, bool ok) external onlyOwner {
require(token != address(ZOOMER), "ZOOMER is locked");
require(token != address(0), "zero");
allowedReward[token] = ok;
emit RewardTokenSet(token, ok);
}
/// Recover a token that is stuck here and is NOT a holder reward - e.g. an
/// airdrop, or a basket stock that was pushed before being registered.
/// Registered reward tokens are refused, so holder balances can never be
/// swept by the owner.
function rescueToken(address token, address to) external onlyOwner {
// Check BOTH flags. isRewardToken only flips on the first allocate(),
// so checking it alone would let the owner sweep a registered basket
// stock that had been pushed but not yet allocated.
require(!isRewardToken[token] && !allowedReward[token],
"reward token - belongs to holders");
require(to != address(0), "zero");
uint256 bal = IERC20(token).balanceOf(address(this));
require(bal > 0, "empty");
require(IERC20(token).transfer(to, bal), "transfer failed");
emit Rescued(token, to, bal);
}
/**
* Retire the unsold remainder of the current tier and jump the id counter
* to the start of a later tier.
*
* Without this, a wave that stalls half-sold would block every later wave
* forever: openWave() requires a single-tier range, so with 300 of 500
* Paperhands sold you could never open SWEATY. The skipped ids are burned
* from supply - they can never be minted, so nobody is diluted.
*
* Valid targets are tier starts only: 501 SWEATY, 751 DIAMOND, 901 CHAD.
*/
function skipToTier(uint256 newStart) external onlyOwner {
require(newStart == PAPERHAND_END + 1
|| newStart == SWEATY_END + 1
|| newStart == DIAMOND_END + 1, "not a tier start");
require(newStart > nextId + 1, "already there or behind");
uint256 retired = newStart - 1 - nextId;
nextId = newStart - 1;
mintOpen = false;
emit TierSkipped(newStart, retired);
emit MintClosed();
}
function setMaxPerTx(uint256 n) external onlyOwner {
require(n > 0 && n <= 50, "1-50");
maxPerTx = n;
emit MaxPerTxSet(n);
}
function setMaxSpendPerTx(uint256 amount) external onlyOwner {
require(amount >= price, "below current price");
maxSpendPerTx = amount;
emit MaxSpendPerTxSet(amount);
}
function closeMint() external onlyOwner { mintOpen = false; emit MintClosed(); }
function setBaseURI(string calldata u) external onlyOwner { baseURI = u; emit BaseURISet(u); }
/// After the final wave, call this to make the collection ownerless forever.
function renounceOwnership() external onlyOwner { owner = address(0); emit OwnershipRenounced(); }
function rewardTokenCount() external view returns (uint256) {
return rewardTokens.length;
}
/// Every reward token in one call, so the site can build the claim list.
function allRewardTokens() external view returns (address[] memory) {
return rewardTokens;
}
/* ------------------------- views for the website ---------------------- */
/// Every certificate a wallet owns. View only - never called on-chain.
function tokensOfOwner(address who) external view returns (uint256[] memory ids) {
uint256 n = balanceOf[who];
ids = new uint256[](n);
if (n == 0) return ids;
uint256 k;
for (uint256 id = 1; id <= nextId; id++) {
if (ownerOf[id] == who) {
ids[k++] = id;
if (k == n) break;
}
}
}
/// Total claimable of `token` across a list of ids - one RPC call for the
/// whole "you can claim X" banner.
function pendingBatch(address token, uint256[] calldata ids)
external view returns (uint256 total)
{
for (uint256 i = 0; i < ids.length; i++) total += pending(token, ids[i]);
}
/// The real per-transaction limit right now: the tightest of the count
/// cap, the ZOOMER spend cap, and what is left in the wave.
function maxMintableNow() public view returns (uint256) {
if (!mintOpen || price == 0) return 0;
uint256 byCount = maxPerTx;
uint256 bySpend = maxSpendPerTx / price;
uint256 left = waveCap > nextId ? waveCap - nextId : 0;
uint256 m = byCount < bySpend ? byCount : bySpend;
return m < left ? m : left;
}
/// Everything the club page needs, in a single call.
function stats() external view returns (
uint256 minted, uint256 weightTotal, uint256 currentPrice,
uint256 cap, bool open, uint256 rewardTokens_, uint256 mintableNow
) {
return (totalSupply, totalWeight, price, waveCap, mintOpen,
rewardTokens.length, maxMintableNow());
}
function _str(uint256 v) private pure returns (string memory) {
if (v == 0) return "0";
uint256 j = v;
uint256 len;
while (j != 0) { len++; j /= 10; }
bytes memory b = new bytes(len);
while (v != 0) { b[--len] = bytes1(uint8(48 + v % 10)); v /= 10; }
return string(b);
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "zoomer",
"type": "address",
"internalType": "address"
},
{
"name": "treasury_",
"type": "address",
"internalType": "address"
},
{
"name": "price_",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "uri",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "nonpayable"
},
{
"name": "Allocated",
"type": "event",
"inputs": [
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "perNft",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Approval",
"type": "event",
"inputs": [
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "spender",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "id",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "ApprovalForAll",
"type": "event",
"inputs": [
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "operator",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "approved",
"type": "bool",
"indexed": false,
"internalType": "bool"
}
],
"anonymous": false
},
{
"name": "BaseURISet",
"type": "event",
"inputs": [
{
"name": "uri",
"type": "string",
"indexed": false,
"internalType": "string"
}
],
"anonymous": false
},
{
"name": "Claimed",
"type": "event",
"inputs": [
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "MaxPerTxSet",
"type": "event",
"inputs": [
{
"name": "n",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "MaxSpendPerTxSet",
"type": "event",
"inputs": [
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "MintClosed",
"type": "event",
"inputs": [],
"anonymous": false
},
{
"name": "Minted",
"type": "event",
"inputs": [
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "id",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "OwnershipRenounced",
"type": "event",
"inputs": [],
"anonymous": false
},
{
"name": "Rescued",
"type": "event",
"inputs": [
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "RewardTokenSet",
"type": "event",
"inputs": [
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "allowed",
"type": "bool",
"indexed": false,
"internalType": "bool"
}
],
"anonymous": false
},
{
"name": "RoyaltySet",
"type": "event",
"inputs": [
{
"name": "receiver",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "bps",
"type": "uint96",
"indexed": false,
"internalType": "uint96"
}
],
"anonymous": false
},
{
"name": "TierSkipped",
"type": "event",
"inputs": [
{
"name": "newStartId",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "retired",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Transfer",
"type": "event",
"inputs": [
{
"name": "from",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "id",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "WaveOpened",
"type": "event",
"inputs": [
{
"name": "cap",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "price",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "weight",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "DIAMOND_END",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "MAX_REWARD_TOKENS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "MAX_SUPPLY",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "PAPERHAND_END",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "SWEATY_END",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "ZOOMER",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IERC20"
}
],
"stateMutability": "view"
},
{
"name": "accPerWeight",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "allRewardTokens",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address[]",
"internalType": "address[]"
}
],
"stateMutability": "view"
},
{
"name": "allocate",
"type": "function",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "allowedReward",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "approve",
"type": "function",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
},
{
"name": "id",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "balanceOf",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "baseURI",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "claim",
"type": "function",
"inputs": [
{
"name": "ids",
"type": "uint256[]",
"internalType": "uint256[]"
},
{
"name": "tokens",
"type": "address[]",
"internalType": "address[]"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "closeMint",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "debt",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
},
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "getApproved",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "isApprovedForAll",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
},
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "isRewardToken",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "lastAllocate",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "maxMintableNow",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "maxPerTx",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "maxSpendPerTx",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "mint",
"type": "function",
"inputs": [
{
"name": "qty",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "mintOpen",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "name",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "nextId",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "openWave",
"type": "function",
"inputs": [
{
"name": "cap",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "newPrice",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "owed",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
},
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "owner",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "ownerOf",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "pending",
"type": "function",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "id",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "pendingBatch",
"type": "function",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "ids",
"type": "uint256[]",
"internalType": "uint256[]"
}
],
"outputs": [
{
"name": "total",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "price",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "renounceOwnership",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "rescueToken",
"type": "function",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "rewardTokenCount",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "rewardTokens",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "royaltyBps",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint96",
"internalType": "uint96"
}
],
"stateMutability": "view"
},
{
"name": "royaltyInfo",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "salePrice",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
},
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "royaltyReceiver",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "safeTransferFrom",
"type": "function",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "id",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "safeTransferFrom",
"type": "function",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "id",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "data",
"type": "bytes",
"internalType": "bytes"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setApprovalForAll",
"type": "function",
"inputs": [
{
"name": "operator",
"type": "address",
"internalType": "address"
},
{
"name": "approved",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setBaseURI",
"type": "function",
"inputs": [
{
"name": "u",
"type": "string",
"internalType": "string"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setMaxPerTx",
"type": "function",
"inputs": [
{
"name": "n",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setMaxSpendPerTx",
"type": "function",
"inputs": [
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setRewardToken",
"type": "function",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "ok",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setRoyalty",
"type": "function",
"inputs": [
{
"name": "receiver",
"type": "address",
"internalType": "address"
},
{
"name": "bps",
"type": "uint96",
"internalType": "uint96"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "skipToTier",
"type": "function",
"inputs": [
{
"name": "newStart",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "stats",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "minted",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "weightTotal",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "currentPrice",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "cap",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "open",
"type": "bool",
"internalType": "bool"
},
{
"name": "rewardTokens_",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "mintableNow",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "supportsInterface",
"type": "function",
"inputs": [
{
"name": "i",
"type": "bytes4",
"internalType": "bytes4"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "pure"
},
{
"name": "symbol",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "tierOf",
"type": "function",
"inputs": [
{
"name": "id",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "pure"
},
{
"name": "tokenURI",
"type": "function",
"inputs": [
{
"name": "id",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "tokensOfOwner",
"type": "function",
"inputs": [
{
"name": "who",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "ids",
"type": "uint256[]",
"internalType": "uint256[]"
}
],
"stateMutability": "view"
},
{
"name": "totalSupply",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "totalWeight",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "transferFrom",
"type": "function",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "id",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "treasury",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract ZoomerClubTreasury"
}
],
"stateMutability": "view"
},
{
"name": "waveCap",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "weightOf",
"type": "function",
"inputs": [
{
"name": "id",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "pure"
}
]0x610100604052601760c09081527f5a6f6f6d65722053746f636b686f6c64657220436c756200000000000000000060e05260009061003d9082610184565b506040805180820190915260038152625a534360e81b60208201526001906100659082610184565b50600a600e5569d3c21bcecceda1000000600f5534801561008557600080fd5b5060405161389f38038061389f8339810160408190526100a49161025e565b6001600160a01b03808516608052831660a052600b82905560026100c88282610184565b5050600a80546001600160a01b0319163317905550610356915050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061010f57607f821691505b60208210810361012f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561017f57806000526020600020601f840160051c8101602085101561015c5750805b601f840160051c820191505b8181101561017c5760008155600101610168565b50505b505050565b81516001600160401b0381111561019d5761019d6100e5565b6101b1816101ab84546100fb565b84610135565b6020601f8211600181146101e557600083156101cd5750848201515b600019600385901b1c1916600184901b17845561017c565b600084815260208120601f198516915b8281101561021557878501518255602094850194600190920191016101f5565b50848210156102335786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b80516001600160a01b038116811461025957600080fd5b919050565b6000806000806080858703121561027457600080fd5b61027d85610242565b935061028b60208601610242565b6040860151606087015191945092506001600160401b038111156102ae57600080fd5b8501601f810187136102bf57600080fd5b80516001600160401b038111156102d8576102d86100e5565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610306576103066100e5565b60405281815282820160200189101561031e57600080fd5b60005b8281101561033d57602081850181015183830182015201610321565b5060006020838301015280935050505092959194509250565b60805160a05161350161039e600039600081816105fa01528181611cbe015261276e01526000818161056901528181611c8e0152818161246901526125b201526135016000f3fe608060405234801561001057600080fd5b50600436106103ba5760003560e01c80637bb7bed1116101f4578063b5fd73f81161011a578063c97899c6116100ad578063f968adbe1161007c578063f968adbe146108fe578063fb66fb4d14610907578063fb99c0641461091a578063ffd7d9831461092357600080fd5b8063c97899c614610853578063d2283a081461087e578063d80528ae14610891578063e985e9c5146108d057600080fd5b8063c55f4ccc116100e9578063c55f4ccc146107f2578063c63adb2b146107fb578063c6f6f2161461082d578063c87b56dd1461084057600080fd5b8063b5fd73f8146107ab578063b88d4fde146107ce578063ba886fc7146107e1578063c35e774e146107ea57600080fd5b806396c82e5711610192578063a22cb46511610161578063a22cb46514610767578063a6e563461461077a578063a9089ac51461079a578063abb06b95146107a357600080fd5b806396c82e571461072f5780639fbc871314610738578063a035b1fe1461074b578063a0712d681461075457600080fd5b80638959eab7116101ce5780638959eab7146106ee5780638da5cb5b146107015780638f2fc60b1461071457806395d89b411461072757600080fd5b80637bb7bed1146106a85780638019d72e146106bb5780638462151c146106ce57600080fd5b806340eeca0e116102e457806361b8ce8c116102775780636c0360eb116102465780636c0360eb1461064d57806370a0823114610655578063715018a614610675578063787eef2e1461067d57600080fd5b806361b8ce8c146105ec57806361d027b3146105f55780636352211e1461061c57806364f101f01461064557600080fd5b806350bfd7b5116102b357806350bfd7b51461059e57806353f96df2146105be57806355f804b3146105d15780635d0cde97146105e457600080fd5b806340eeca0e1461052e57806342842e0e1461055157806342fecb06146105645780634707d0001461058b57600080fd5b806318160ddd1161035c5780632b14c8421161032b5780632b14c842146104f45780632b31c342146105075780632b3c49061461051c57806332cb6b0c1461052557600080fd5b806318160ddd1461049957806323b872dd146104a257806324bbd049146104b55780632a55205a146104c257600080fd5b80630767d178116103985780630767d1781461041d578063081812fc14610430578063095ea7b31461047157806315167c031461048657600080fd5b806301ffc9a7146103bf57806306575e89146103e757806306fdde0314610408575b600080fd5b6103d26103cd366004612c37565b610936565b60405190151581526020015b60405180910390f35b6103fa6103f5366004612cb5565b6109a3565b6040519081526020016103de565b6104106109ed565b6040516103de9190612d58565b6103fa61042b366004612d6b565b610a7b565b61045961043e366004612d6b565b6008602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016103de565b61048461047f366004612d84565b610ad5565b005b6103fa610494366004612d84565b610bbc565b6103fa60035481565b6104846104b0366004612dae565b610c74565b600d546103d29060ff1681565b6104d56104d0366004612deb565b610e6c565b604080516001600160a01b0390931683526020830191909152016103de565b610484610502366004612e0d565b610eb3565b61050f61114b565b6040516103de9190612e7e565b6103fa600c5481565b6103fa6103e881565b6103d261053c366004612eca565b60126020526000908152604090205460ff1681565b61048461055f366004612dae565b6111ad565b6104597f000000000000000000000000000000000000000000000000000000000000000081565b610484610599366004612ee5565b6111cd565b6103fa6105ac366004612eca565b60136020526000908152604090205481565b6104106105cc366004612d6b565b611476565b6104846105df366004612f18565b611544565b6103fa600881565b6103fa60045481565b6104597f000000000000000000000000000000000000000000000000000000000000000081565b61045961062a366004612d6b565b6006602052600090815260409020546001600160a01b031681565b6104846115b9565b610410611618565b6103fa610663366004612eca565b60076020526000908152604090205481565b610484611625565b6103fa61068b366004612d84565b601560209081526000928352604080842090915290825290205481565b6104596106b6366004612d6b565b61168a565b6104846106c9366004612deb565b6116b4565b6106e16106dc366004612eca565b61183c565b6040516103de9190612f8c565b6104846106fc366004612d6b565b611925565b600a54610459906001600160a01b031681565b610484610722366004612fc4565b6119d3565b610410611af8565b6103fa60055481565b601754610459906001600160a01b031681565b6103fa600b5481565b610484610762366004612d6b565b611b05565b610484610775366004613015565b611f5a565b6103fa610788366004612eca565b60166020526000908152604090205481565b6103fa6102ee81565b6010546103fa565b6103d26107b9366004612eca565b60116020526000908152604090205460ff1681565b6104846107dc366004613057565b611fc6565b6103fa600f5481565b6103fa6120a8565b6103fa6101f481565b60175461081590600160a01b90046001600160601b031681565b6040516001600160601b0390911681526020016103de565b61048461083b366004612d6b565b612130565b61041061084e366004612d6b565b6121d5565b6103fa610861366004612d84565b601460209081526000928352604080842090915290825290205481565b61048461088c366004612d6b565b612257565b6108996123f2565b6040805197885260208801969096529486019390935260608501919091521515608084015260a083015260c082015260e0016103de565b6103d26108de366004612ee5565b600960209081526000928352604080842090915290825290205460ff1681565b6103fa600e5481565b610484610915366004613015565b61243d565b6103fa61038481565b610484610931366004612eca565b612572565b60006301ffc9a760e01b6001600160e01b03198316148061096757506380ac58cd60e01b6001600160e01b03198316145b806109825750635b5e139f60e01b6001600160e01b03198316145b8061099d575063152a902d60e11b6001600160e01b03198316145b92915050565b6000805b828110156109e5576109d1858585848181106109c5576109c561313b565b90506020020135610bbc565b6109db9083613167565b91506001016109a7565b509392505050565b600080546109fa9061317a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a269061317a565b8015610a735780601f10610a4857610100808354040283529160200191610a73565b820191906000526020600020905b815481529060010190602001808311610a5657829003601f168201915b505050505081565b6000811580610a8b57506103e882115b15610a9857506000919050565b6101f48211610aa957506064919050565b6102ee8211610aba575060c8919050565b6103848211610acc575061012c919050565b506101f4919050565b6000818152600660205260409020546001600160a01b031633811480610b1e57506001600160a01b038116600090815260096020908152604080832033845290915290205460ff165b610b605760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5cd95960921b60448201526064015b60405180910390fd5b60008281526008602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000818152600660205260408120546001600160a01b0316610be05750600061099d565b6001600160a01b03831660008181526014602090815260408083208684528252808320549383526013909152902054670de0b6b3a764000091610c22916131b4565b610c2b84610a7b565b610c3591906131c7565b610c3f91906131f4565b6001600160a01b0384166000908152601560209081526040808320868452909152902054610c6d9190613167565b9392505050565b6000818152600660205260409020546001600160a01b03848116911614610cca5760405162461bcd60e51b815260206004820152600a60248201526977726f6e672066726f6d60b01b6044820152606401610b57565b6001600160a01b038216610d0a5760405162461bcd60e51b81526020600482015260076024820152667a65726f20746f60c81b6044820152606401610b57565b336001600160a01b0384161480610d3757506000818152600860205260409020546001600160a01b031633145b80610d6557506001600160a01b038316600090815260096020908152604080832033845290915290205460ff165b610da25760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5cd95960921b6044820152606401610b57565b610dab81612a1d565b6001600160a01b0383166000908152600760205260408120805491610dcf83613208565b90915550506001600160a01b0382166000908152600760205260408120805491610df88361321f565b9091555050600081815260066020908152604080832080546001600160a01b038088166001600160a01b031992831681179093556008909452828520805490911690559051849391928716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60175460009081906001600160a01b0381169061271090610e9d90600160a01b90046001600160601b0316866131c7565b610ea791906131f4565b915091505b9250929050565b60005b81811015611144576000838383818110610ed257610ed261313b565b9050602002016020810190610ee79190612eca565b905060008060005b8781101561102c576000898983818110610f0b57610f0b61313b565b6020908102929092013560008181526006909352604090922054919250506001600160a01b031680610f685760405162461bcd60e51b8152602060048201526006602482015265189859081a5960d21b6044820152606401610b57565b6001600160a01b038416610f7a578093505b836001600160a01b0316816001600160a01b031614610fca5760405162461bcd60e51b815260206004820152600c60248201526b6d69786564206f776e65727360a01b6044820152606401610b57565b610fd48683610bbc565b610fde9086613167565b6001600160a01b038716600081815260156020908152604080832087845282528083208390559282526013815282822054601482528383209683529590522092909255509250600101610eef565b5081156111395760405163a9059cbb60e01b81526001600160a01b0382811660048301526024820184905284169063a9059cbb906044016020604051808303816000875af1158015611082573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a69190613238565b6110eb5760405162461bcd60e51b81526020600482015260166024820152751c995dd85c99081d1c985b9cd9995c8819985a5b195960521b6044820152606401610b57565b826001600160a01b0316816001600160a01b03167ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd39926838460405161113091815260200190565b60405180910390a35b505050600101610eb6565b5050505050565b606060108054806020026020016040519081016040528092919081815260200182805480156111a357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611185575b5050505050905090565b6111c883838360405180602001604052806000815250611fc6565b505050565b600a546001600160a01b031633146111f75760405162461bcd60e51b8152600401610b5790613255565b6001600160a01b03821660009081526011602052604090205460ff1615801561123957506001600160a01b03821660009081526012602052604090205460ff16155b61128f5760405162461bcd60e51b815260206004820152602160248201527f72657761726420746f6b656e202d2062656c6f6e677320746f20686f6c6465726044820152607360f81b6064820152608401610b57565b6001600160a01b0381166112ce5760405162461bcd60e51b8152600401610b57906020808252600490820152637a65726f60e01b604082015260600190565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015611315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113399190613278565b9050600081116113735760405162461bcd60e51b8152602060048201526005602482015264656d70747960d81b6044820152606401610b57565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190613238565b6114245760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b6044820152606401610b57565b816001600160a01b0316836001600160a01b03167f3af790fafda720819b2fc6e15090606e81154e0ac9a92d38ecad006d99d20ecc8360405161146991815260200190565b60405180910390a3505050565b606081158061148657506103e882115b1561149f57505060408051602081019091526000815290565b6101f482116114cd57505060408051808201909152600981526814105411549210539160ba1b602082015290565b6102ee82116114f857505060408051808201909152600681526553574541545960d01b602082015290565b61038482116115245750506040805180820190915260078152661112505353d39160ca1b602082015290565b505060408051808201909152600481526310d2105160e21b602082015290565b600a546001600160a01b0316331461156e5760405162461bcd60e51b8152600401610b5790613255565b600261157b8284836132d8565b507ff9c7803e94e0d3c02900d8a90893a6d5e90dd04d32a4cfe825520f82bf9f32f682826040516115ad929190613398565b60405180910390a15050565b600a546001600160a01b031633146115e35760405162461bcd60e51b8152600401610b5790613255565b600d805460ff191690556040517f589ed34b6de61e6df418b1c0e5caa881461804657f37544ca23bf0b86d09f1e390600090a1565b600280546109fa9061317a565b600a546001600160a01b0316331461164f5760405162461bcd60e51b8152600401610b5790613255565b600a80546001600160a01b03191690556040517fd1f66c3d2bc1993a86be5e3d33709d98f0442381befcedd29f578b9b2506b1ce90600090a1565b6010818154811061169a57600080fd5b6000918252602090912001546001600160a01b0316905081565b600a546001600160a01b031633146116de5760405162461bcd60e51b8152600401610b5790613255565b600454821180156116f157506103e88211155b6117235760405162461bcd60e51b815260206004820152600360248201526206361760ec1b6044820152606401610b57565b61172c82610a7b565b61173e600454600161042b9190613167565b146117815760405162461bcd60e51b81526020600482015260136024820152723bb0bb329031b937b9b9b2b99030903a34b2b960691b6044820152606401610b57565b600f548111156117de5760405162461bcd60e51b815260206004820152602260248201527f7072696365206578636565647320746865207065722d7478207370656e642063604482015261061760f41b6064820152608401610b57565b600c829055600b819055600d805460ff191660011790557fc8df15dac9df8c5d7b68feb8e8fddfa1d6b1d4d99f52ed5adac4d0279b828a66828261182182610a7b565b604080519384526020840192909252908201526060016115ad565b6001600160a01b0381166000908152600760205260409020546060908067ffffffffffffffff81111561187157611871613041565b60405190808252806020026020018201604052801561189a578160200160208202803683370190505b509150806000036118ab5750919050565b600060015b600454811161191d576000818152600660205260409020546001600160a01b0380871691160361190b578084836118e68161321f565b9450815181106118f8576118f861313b565b602090810291909101015281831461191d575b806119158161321f565b9150506118b0565b505050919050565b600a546001600160a01b0316331461194f5760405162461bcd60e51b8152600401610b5790613255565b600b548110156119975760405162461bcd60e51b815260206004820152601360248201527262656c6f772063757272656e7420707269636560681b6044820152606401610b57565b600f8190556040518181527fd10894f22ac89fecf2b7b541c0f5f952088696d98c02ff6c7a1bc6f8687eda10906020015b60405180910390a150565b600a546001600160a01b031633146119fd5760405162461bcd60e51b8152600401610b5790613255565b6103e8816001600160601b03161115611a425760405162461bcd60e51b81526020600482015260076024820152666d61782031302560c81b6044820152606401610b57565b6001600160a01b038216151580611a6057506001600160601b038116155b611a9f5760405162461bcd60e51b815260206004820152601060248201526f7265636569766572206973207a65726f60801b6044820152606401610b57565b6001600160a01b038216600160a01b6001600160601b03831690810282176017556040519081527f23813f5ad446622633cb58c75ceef768a2111751b0f30477a63e06fcaedcff60906020015b60405180910390a25050565b600180546109fa9061317a565b600d5460ff16611b405760405162461bcd60e51b815260206004820152600660248201526518db1bdcd95960d21b6044820152606401610b57565b600081118015611b525750600e548111155b611b945760405162461bcd60e51b81526020600482015260136024820152720717479206f766572207065722d74782063617606c1b6044820152606401610b57565b600f5481600b54611ba591906131c7565b1115611bf35760405162461bcd60e51b815260206004820152601c60248201527f6f766572205a4f4f4d4552207370656e642063617020706572207478000000006044820152606401610b57565b600c5481600454611c049190613167565b1115611c425760405162461bcd60e51b815260206004820152600d60248201526c1dd85d99481cdbdb19081bdd5d609a1b6044820152606401610b57565b6103e881600454611c539190613167565b1115611c8c5760405162461bcd60e51b81526020600482015260086024820152671cdbdb19081bdd5d60c21b6044820152606401610b57565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd337f000000000000000000000000000000000000000000000000000000000000000084600b54611ceb91906131c7565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303816000875af1158015611d3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d639190613238565b611da85760405162461bcd60e51b81526020600482015260166024820152751693d3d35154881d1c985b9cd9995c8819985a5b195960521b6044820152606401610b57565b60005b81811015611f56576000600460008154611dc49061321f565b9182905550600380549192506000611ddb8361321f565b9091555050600081815260066020908152604080832080546001600160a01b03191633908117909155835260079091528120805491611e198361321f565b9190505550611e2781610a7b565b60056000828254611e389190613167565b90915550600090505b601054811015611ef0576013600060108381548110611e6257611e6261313b565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020546014600060108481548110611eb857611eb861313b565b60009182526020808320909101546001600160a01b031683528281019390935260409182018120868252909252902055600101611e41565b50604051819033906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4604051819033907f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe90600090a350600101611dab565b5050565b3360008181526009602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611fd1848484610c74565b6001600160a01b0383163b156120a257604051630a85bd0160e11b808252906001600160a01b0385169063150b7a02906120159033908990889088906004016133c7565b6020604051808303816000875af1158015612034573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120589190613404565b6001600160e01b031916146120a25760405162461bcd60e51b815260206004820152601060248201526f1d5b9cd85999481c9958da5c1a595b9d60821b6044820152606401610b57565b50505050565b600d5460009060ff1615806120bd5750600b54155b156120c85750600090565b600e54600b54600f546000916120dd916131f4565b90506000600454600c54116120f3576000612103565b600454600c5461210391906131b4565b905060008284106121145782612116565b835b90508181106121255781612127565b805b94505050505090565b600a546001600160a01b0316331461215a5760405162461bcd60e51b8152600401610b5790613255565b60008111801561216b575060328111155b6121a05760405162461bcd60e51b8152600401610b57906020808252600490820152630312d35360e41b604082015260600190565b600e8190556040518181527f4d98629979575ca912f325e0faf32349d4cedcbb70e2adbddfd33df7123d30f3906020016119c8565b6000818152600660205260409020546060906001600160a01b03166122255760405162461bcd60e51b8152602060048201526006602482015265189859081a5960d21b6044820152606401610b57565b600261223083612b17565b604051602001612241929190613421565b6040516020818303038152906040529050919050565b600a546001600160a01b031633146122815760405162461bcd60e51b8152600401610b5790613255565b61228e6101f46001613167565b8114806122a657506122a36102ee6001613167565b81145b806122bc57506122b96103846001613167565b81145b6122fb5760405162461bcd60e51b815260206004820152601060248201526f1b9bdd0818481d1a595c881cdd185c9d60821b6044820152606401610b57565b600454612309906001613167565b81116123575760405162461bcd60e51b815260206004820152601760248201527f616c7265616479207468657265206f7220626568696e640000000000000000006044820152606401610b57565b6004546000906123686001846131b4565b61237291906131b4565b905061237f6001836131b4565b600455600d805460ff1916905560408051838152602081018390527f8acd5eb49e751f404fe9db78209de024d66320c196bde15d487b0c69df300a8f910160405180910390a16040517f589ed34b6de61e6df418b1c0e5caa881461804657f37544ca23bf0b86d09f1e390600090a15050565b6000806000806000806000600354600554600b54600c54600d60009054906101000a900460ff166010805490506124276120a8565b959d949c50929a50909850965094509092509050565b600a546001600160a01b031633146124675760405162461bcd60e51b8152600401610b5790613255565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036124db5760405162461bcd60e51b815260206004820152601060248201526f1693d3d35154881a5cc81b1bd8dad95960821b6044820152606401610b57565b6001600160a01b03821661251a5760405162461bcd60e51b8152600401610b57906020808252600490820152637a65726f60e01b604082015260600190565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fc3c9a236de60cbc8c1b10b6d54acff3f7503f6289221ec1795750a5f567a7d3f9101611aec565b6000600554116125b05760405162461bcd60e51b81526020600482015260096024820152686e6f20737570706c7960b81b6044820152606401610b57565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316036126265760405162461bcd60e51b81526020600482015260126024820152713737ba1030903932bbb0b932103a37b5b2b760711b6044820152606401610b57565b6001600160a01b03811660009081526012602052604090205460ff166126825760405162461bcd60e51b81526020600482015260116024820152701d1bdad95b881b9bdd08185b1b1bddd959607a1b6044820152606401610b57565b6001600160a01b0381166000908152601660205260409020546126a790610e10613167565b4210156126e15760405162461bcd60e51b81526020600482015260086024820152673a37b79039b7b7b760c11b6044820152606401610b57565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015612728573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274c9190613278565b604051635f93f79160e11b81526001600160a01b0384811660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf27ef22906024016020604051808303816000875af11580156127b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127dd9190613278565b506040516370a0823160e01b815230600482015260009082906001600160a01b038516906370a0823190602401602060405180830381865afa158015612827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061284b9190613278565b61285591906131b4565b90506000811161289d5760405162461bcd60e51b81526020600482015260136024820152726e6f7468696e6720746f20616c6c6f6361746560681b6044820152606401610b57565b6001600160a01b03831660009081526011602052604090205460ff16612968576010546008116129025760405162461bcd60e51b815260206004820152601060248201526f1c995dd85c99081b1a5cdd08199d5b1b60821b6044820152606401610b57565b6001600160a01b0383166000818152601160205260408120805460ff191660019081179091556010805491820181559091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b03191690911790555b60055461297d670de0b6b3a7640000836131c7565b61298791906131f4565b6001600160a01b038416600090815260136020526040812080549091906129af908490613167565b90915550506001600160a01b03831660008181526016602052604090204290556005547f9af9811abc6f1b9cf2234f8ed76daa9a577d4ffbbe0af66ec4b748cde6f4c39f908390612a0090826131f4565b6040805192835260208301919091520160405180910390a2505050565b60005b601054811015611f5657600060108281548110612a3f57612a3f61313b565b60009182526020808320909101546001600160a01b0316808352601482526040808420878552835280842054828552601390935290922054919250670de0b6b3a764000091612a8e91906131b4565b612a9785610a7b565b612aa191906131c7565b612aab91906131f4565b6001600160a01b038216600090815260156020908152604080832087845290915281208054909190612ade908490613167565b90915550506001600160a01b03166000908152601360209081526040808320546014835281842086855290925290912055600101612a20565b606081600003612b3e5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612b685780612b528161321f565b9150612b619050600a836131f4565b9150612b42565b60008167ffffffffffffffff811115612b8357612b83613041565b6040519080825280601f01601f191660200182016040528015612bad576020820181803683370190505b5090505b8415612c1657612bc2600a866134b7565b612bcd906030613167565b60f81b81612bda84613208565b93508381518110612bed57612bed61313b565b60200101906001600160f81b031916908160001a905350612c0f600a866131f4565b9450612bb1565b949350505050565b6001600160e01b031981168114612c3457600080fd5b50565b600060208284031215612c4957600080fd5b8135610c6d81612c1e565b80356001600160a01b0381168114612c6b57600080fd5b919050565b60008083601f840112612c8257600080fd5b50813567ffffffffffffffff811115612c9a57600080fd5b6020830191508360208260051b8501011115610eac57600080fd5b600080600060408486031215612cca57600080fd5b612cd384612c54565b9250602084013567ffffffffffffffff811115612cef57600080fd5b612cfb86828701612c70565b9497909650939450505050565b60005b83811015612d23578181015183820152602001612d0b565b50506000910152565b60008151808452612d44816020860160208601612d08565b601f01601f19169290920160200192915050565b602081526000610c6d6020830184612d2c565b600060208284031215612d7d57600080fd5b5035919050565b60008060408385031215612d9757600080fd5b612da083612c54565b946020939093013593505050565b600080600060608486031215612dc357600080fd5b612dcc84612c54565b9250612dda60208501612c54565b929592945050506040919091013590565b60008060408385031215612dfe57600080fd5b50508035926020909101359150565b60008060008060408587031215612e2357600080fd5b843567ffffffffffffffff811115612e3a57600080fd5b612e4687828801612c70565b909550935050602085013567ffffffffffffffff811115612e6657600080fd5b612e7287828801612c70565b95989497509550505050565b602080825282518282018190526000918401906040840190835b81811015612ebf5783516001600160a01b0316835260209384019390920191600101612e98565b509095945050505050565b600060208284031215612edc57600080fd5b610c6d82612c54565b60008060408385031215612ef857600080fd5b612f0183612c54565b9150612f0f60208401612c54565b90509250929050565b60008060208385031215612f2b57600080fd5b823567ffffffffffffffff811115612f4257600080fd5b8301601f81018513612f5357600080fd5b803567ffffffffffffffff811115612f6a57600080fd5b856020828401011115612f7c57600080fd5b6020919091019590945092505050565b602080825282518282018190526000918401906040840190835b81811015612ebf578351835260209384019390920191600101612fa6565b60008060408385031215612fd757600080fd5b612fe083612c54565b915060208301356001600160601b0381168114612ffc57600080fd5b809150509250929050565b8015158114612c3457600080fd5b6000806040838503121561302857600080fd5b61303183612c54565b91506020830135612ffc81613007565b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561306d57600080fd5b61307685612c54565b935061308460208601612c54565b925060408501359150606085013567ffffffffffffffff8111156130a757600080fd5b8501601f810187136130b857600080fd5b803567ffffffffffffffff8111156130d2576130d2613041565b604051601f8201601f19908116603f0116810167ffffffffffffffff8111828210171561310157613101613041565b60405281815282820160200189101561311957600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561099d5761099d613151565b600181811c9082168061318e57607f821691505b6020821081036131ae57634e487b7160e01b600052602260045260246000fd5b50919050565b8181038181111561099d5761099d613151565b808202811582820484141761099d5761099d613151565b634e487b7160e01b600052601260045260246000fd5b600082613203576132036131de565b500490565b60008161321757613217613151565b506000190190565b60006001820161323157613231613151565b5060010190565b60006020828403121561324a57600080fd5b8151610c6d81613007565b6020808252600990820152683737ba1037bbb732b960b91b604082015260600190565b60006020828403121561328a57600080fd5b5051919050565b601f8211156111c857806000526020600020601f840160051c810160208510156132b85750805b601f840160051c820191505b8181101561114457600081556001016132c4565b67ffffffffffffffff8311156132f0576132f0613041565b613304836132fe835461317a565b83613291565b6000601f84116001811461333857600085156133205750838201355b600019600387901b1c1916600186901b178355611144565b600083815260209020601f19861690835b828110156133695786850135825560209485019460019092019101613349565b50868210156133865760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906133fa90830184612d2c565b9695505050505050565b60006020828403121561341657600080fd5b8151610c6d81612c1e565b600080845461342f8161317a565b600182168015613446576001811461345b5761348b565b60ff198316865281151582028601935061348b565b87600052602060002060005b8381101561348357815488820152600190910190602001613467565b505081860193505b505050835161349e818360208801612d08565b64173539b7b760d91b9101908152600501949350505050565b6000826134c6576134c66131de565b50069056fea26469706673582212209e9bc85fd74ddd16a1dbbdd1856e2d636772ddb6032136013014c970d517516c64736f6c634300081a00330000000000000000000000007ea85bd98ce15a8eb3de41933bdffdb8859aadb4000000000000000000000000c16b7135a908eec52d485aa35f7932ca1965e07d00000000000000000000000000000000000000000000152d02c7e14af680000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000013697066733a2f2f504c414345484f4c4445522f00000000000000000000000000
0x608060405234801561001057600080fd5b50600436106103ba5760003560e01c80637bb7bed1116101f4578063b5fd73f81161011a578063c97899c6116100ad578063f968adbe1161007c578063f968adbe146108fe578063fb66fb4d14610907578063fb99c0641461091a578063ffd7d9831461092357600080fd5b8063c97899c614610853578063d2283a081461087e578063d80528ae14610891578063e985e9c5146108d057600080fd5b8063c55f4ccc116100e9578063c55f4ccc146107f2578063c63adb2b146107fb578063c6f6f2161461082d578063c87b56dd1461084057600080fd5b8063b5fd73f8146107ab578063b88d4fde146107ce578063ba886fc7146107e1578063c35e774e146107ea57600080fd5b806396c82e5711610192578063a22cb46511610161578063a22cb46514610767578063a6e563461461077a578063a9089ac51461079a578063abb06b95146107a357600080fd5b806396c82e571461072f5780639fbc871314610738578063a035b1fe1461074b578063a0712d681461075457600080fd5b80638959eab7116101ce5780638959eab7146106ee5780638da5cb5b146107015780638f2fc60b1461071457806395d89b411461072757600080fd5b80637bb7bed1146106a85780638019d72e146106bb5780638462151c146106ce57600080fd5b806340eeca0e116102e457806361b8ce8c116102775780636c0360eb116102465780636c0360eb1461064d57806370a0823114610655578063715018a614610675578063787eef2e1461067d57600080fd5b806361b8ce8c146105ec57806361d027b3146105f55780636352211e1461061c57806364f101f01461064557600080fd5b806350bfd7b5116102b357806350bfd7b51461059e57806353f96df2146105be57806355f804b3146105d15780635d0cde97146105e457600080fd5b806340eeca0e1461052e57806342842e0e1461055157806342fecb06146105645780634707d0001461058b57600080fd5b806318160ddd1161035c5780632b14c8421161032b5780632b14c842146104f45780632b31c342146105075780632b3c49061461051c57806332cb6b0c1461052557600080fd5b806318160ddd1461049957806323b872dd146104a257806324bbd049146104b55780632a55205a146104c257600080fd5b80630767d178116103985780630767d1781461041d578063081812fc14610430578063095ea7b31461047157806315167c031461048657600080fd5b806301ffc9a7146103bf57806306575e89146103e757806306fdde0314610408575b600080fd5b6103d26103cd366004612c37565b610936565b60405190151581526020015b60405180910390f35b6103fa6103f5366004612cb5565b6109a3565b6040519081526020016103de565b6104106109ed565b6040516103de9190612d58565b6103fa61042b366004612d6b565b610a7b565b61045961043e366004612d6b565b6008602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016103de565b61048461047f366004612d84565b610ad5565b005b6103fa610494366004612d84565b610bbc565b6103fa60035481565b6104846104b0366004612dae565b610c74565b600d546103d29060ff1681565b6104d56104d0366004612deb565b610e6c565b604080516001600160a01b0390931683526020830191909152016103de565b610484610502366004612e0d565b610eb3565b61050f61114b565b6040516103de9190612e7e565b6103fa600c5481565b6103fa6103e881565b6103d261053c366004612eca565b60126020526000908152604090205460ff1681565b61048461055f366004612dae565b6111ad565b6104597f0000000000000000000000007ea85bd98ce15a8eb3de41933bdffdb8859aadb481565b610484610599366004612ee5565b6111cd565b6103fa6105ac366004612eca565b60136020526000908152604090205481565b6104106105cc366004612d6b565b611476565b6104846105df366004612f18565b611544565b6103fa600881565b6103fa60045481565b6104597f000000000000000000000000c16b7135a908eec52d485aa35f7932ca1965e07d81565b61045961062a366004612d6b565b6006602052600090815260409020546001600160a01b031681565b6104846115b9565b610410611618565b6103fa610663366004612eca565b60076020526000908152604090205481565b610484611625565b6103fa61068b366004612d84565b601560209081526000928352604080842090915290825290205481565b6104596106b6366004612d6b565b61168a565b6104846106c9366004612deb565b6116b4565b6106e16106dc366004612eca565b61183c565b6040516103de9190612f8c565b6104846106fc366004612d6b565b611925565b600a54610459906001600160a01b031681565b610484610722366004612fc4565b6119d3565b610410611af8565b6103fa60055481565b601754610459906001600160a01b031681565b6103fa600b5481565b610484610762366004612d6b565b611b05565b610484610775366004613015565b611f5a565b6103fa610788366004612eca565b60166020526000908152604090205481565b6103fa6102ee81565b6010546103fa565b6103d26107b9366004612eca565b60116020526000908152604090205460ff1681565b6104846107dc366004613057565b611fc6565b6103fa600f5481565b6103fa6120a8565b6103fa6101f481565b60175461081590600160a01b90046001600160601b031681565b6040516001600160601b0390911681526020016103de565b61048461083b366004612d6b565b612130565b61041061084e366004612d6b565b6121d5565b6103fa610861366004612d84565b601460209081526000928352604080842090915290825290205481565b61048461088c366004612d6b565b612257565b6108996123f2565b6040805197885260208801969096529486019390935260608501919091521515608084015260a083015260c082015260e0016103de565b6103d26108de366004612ee5565b600960209081526000928352604080842090915290825290205460ff1681565b6103fa600e5481565b610484610915366004613015565b61243d565b6103fa61038481565b610484610931366004612eca565b612572565b60006301ffc9a760e01b6001600160e01b03198316148061096757506380ac58cd60e01b6001600160e01b03198316145b806109825750635b5e139f60e01b6001600160e01b03198316145b8061099d575063152a902d60e11b6001600160e01b03198316145b92915050565b6000805b828110156109e5576109d1858585848181106109c5576109c561313b565b90506020020135610bbc565b6109db9083613167565b91506001016109a7565b509392505050565b600080546109fa9061317a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a269061317a565b8015610a735780601f10610a4857610100808354040283529160200191610a73565b820191906000526020600020905b815481529060010190602001808311610a5657829003601f168201915b505050505081565b6000811580610a8b57506103e882115b15610a9857506000919050565b6101f48211610aa957506064919050565b6102ee8211610aba575060c8919050565b6103848211610acc575061012c919050565b506101f4919050565b6000818152600660205260409020546001600160a01b031633811480610b1e57506001600160a01b038116600090815260096020908152604080832033845290915290205460ff165b610b605760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5cd95960921b60448201526064015b60405180910390fd5b60008281526008602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000818152600660205260408120546001600160a01b0316610be05750600061099d565b6001600160a01b03831660008181526014602090815260408083208684528252808320549383526013909152902054670de0b6b3a764000091610c22916131b4565b610c2b84610a7b565b610c3591906131c7565b610c3f91906131f4565b6001600160a01b0384166000908152601560209081526040808320868452909152902054610c6d9190613167565b9392505050565b6000818152600660205260409020546001600160a01b03848116911614610cca5760405162461bcd60e51b815260206004820152600a60248201526977726f6e672066726f6d60b01b6044820152606401610b57565b6001600160a01b038216610d0a5760405162461bcd60e51b81526020600482015260076024820152667a65726f20746f60c81b6044820152606401610b57565b336001600160a01b0384161480610d3757506000818152600860205260409020546001600160a01b031633145b80610d6557506001600160a01b038316600090815260096020908152604080832033845290915290205460ff165b610da25760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5cd95960921b6044820152606401610b57565b610dab81612a1d565b6001600160a01b0383166000908152600760205260408120805491610dcf83613208565b90915550506001600160a01b0382166000908152600760205260408120805491610df88361321f565b9091555050600081815260066020908152604080832080546001600160a01b038088166001600160a01b031992831681179093556008909452828520805490911690559051849391928716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60175460009081906001600160a01b0381169061271090610e9d90600160a01b90046001600160601b0316866131c7565b610ea791906131f4565b915091505b9250929050565b60005b81811015611144576000838383818110610ed257610ed261313b565b9050602002016020810190610ee79190612eca565b905060008060005b8781101561102c576000898983818110610f0b57610f0b61313b565b6020908102929092013560008181526006909352604090922054919250506001600160a01b031680610f685760405162461bcd60e51b8152602060048201526006602482015265189859081a5960d21b6044820152606401610b57565b6001600160a01b038416610f7a578093505b836001600160a01b0316816001600160a01b031614610fca5760405162461bcd60e51b815260206004820152600c60248201526b6d69786564206f776e65727360a01b6044820152606401610b57565b610fd48683610bbc565b610fde9086613167565b6001600160a01b038716600081815260156020908152604080832087845282528083208390559282526013815282822054601482528383209683529590522092909255509250600101610eef565b5081156111395760405163a9059cbb60e01b81526001600160a01b0382811660048301526024820184905284169063a9059cbb906044016020604051808303816000875af1158015611082573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a69190613238565b6110eb5760405162461bcd60e51b81526020600482015260166024820152751c995dd85c99081d1c985b9cd9995c8819985a5b195960521b6044820152606401610b57565b826001600160a01b0316816001600160a01b03167ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd39926838460405161113091815260200190565b60405180910390a35b505050600101610eb6565b5050505050565b606060108054806020026020016040519081016040528092919081815260200182805480156111a357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611185575b5050505050905090565b6111c883838360405180602001604052806000815250611fc6565b505050565b600a546001600160a01b031633146111f75760405162461bcd60e51b8152600401610b5790613255565b6001600160a01b03821660009081526011602052604090205460ff1615801561123957506001600160a01b03821660009081526012602052604090205460ff16155b61128f5760405162461bcd60e51b815260206004820152602160248201527f72657761726420746f6b656e202d2062656c6f6e677320746f20686f6c6465726044820152607360f81b6064820152608401610b57565b6001600160a01b0381166112ce5760405162461bcd60e51b8152600401610b57906020808252600490820152637a65726f60e01b604082015260600190565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015611315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113399190613278565b9050600081116113735760405162461bcd60e51b8152602060048201526005602482015264656d70747960d81b6044820152606401610b57565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190613238565b6114245760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b6044820152606401610b57565b816001600160a01b0316836001600160a01b03167f3af790fafda720819b2fc6e15090606e81154e0ac9a92d38ecad006d99d20ecc8360405161146991815260200190565b60405180910390a3505050565b606081158061148657506103e882115b1561149f57505060408051602081019091526000815290565b6101f482116114cd57505060408051808201909152600981526814105411549210539160ba1b602082015290565b6102ee82116114f857505060408051808201909152600681526553574541545960d01b602082015290565b61038482116115245750506040805180820190915260078152661112505353d39160ca1b602082015290565b505060408051808201909152600481526310d2105160e21b602082015290565b600a546001600160a01b0316331461156e5760405162461bcd60e51b8152600401610b5790613255565b600261157b8284836132d8565b507ff9c7803e94e0d3c02900d8a90893a6d5e90dd04d32a4cfe825520f82bf9f32f682826040516115ad929190613398565b60405180910390a15050565b600a546001600160a01b031633146115e35760405162461bcd60e51b8152600401610b5790613255565b600d805460ff191690556040517f589ed34b6de61e6df418b1c0e5caa881461804657f37544ca23bf0b86d09f1e390600090a1565b600280546109fa9061317a565b600a546001600160a01b0316331461164f5760405162461bcd60e51b8152600401610b5790613255565b600a80546001600160a01b03191690556040517fd1f66c3d2bc1993a86be5e3d33709d98f0442381befcedd29f578b9b2506b1ce90600090a1565b6010818154811061169a57600080fd5b6000918252602090912001546001600160a01b0316905081565b600a546001600160a01b031633146116de5760405162461bcd60e51b8152600401610b5790613255565b600454821180156116f157506103e88211155b6117235760405162461bcd60e51b815260206004820152600360248201526206361760ec1b6044820152606401610b57565b61172c82610a7b565b61173e600454600161042b9190613167565b146117815760405162461bcd60e51b81526020600482015260136024820152723bb0bb329031b937b9b9b2b99030903a34b2b960691b6044820152606401610b57565b600f548111156117de5760405162461bcd60e51b815260206004820152602260248201527f7072696365206578636565647320746865207065722d7478207370656e642063604482015261061760f41b6064820152608401610b57565b600c829055600b819055600d805460ff191660011790557fc8df15dac9df8c5d7b68feb8e8fddfa1d6b1d4d99f52ed5adac4d0279b828a66828261182182610a7b565b604080519384526020840192909252908201526060016115ad565b6001600160a01b0381166000908152600760205260409020546060908067ffffffffffffffff81111561187157611871613041565b60405190808252806020026020018201604052801561189a578160200160208202803683370190505b509150806000036118ab5750919050565b600060015b600454811161191d576000818152600660205260409020546001600160a01b0380871691160361190b578084836118e68161321f565b9450815181106118f8576118f861313b565b602090810291909101015281831461191d575b806119158161321f565b9150506118b0565b505050919050565b600a546001600160a01b0316331461194f5760405162461bcd60e51b8152600401610b5790613255565b600b548110156119975760405162461bcd60e51b815260206004820152601360248201527262656c6f772063757272656e7420707269636560681b6044820152606401610b57565b600f8190556040518181527fd10894f22ac89fecf2b7b541c0f5f952088696d98c02ff6c7a1bc6f8687eda10906020015b60405180910390a150565b600a546001600160a01b031633146119fd5760405162461bcd60e51b8152600401610b5790613255565b6103e8816001600160601b03161115611a425760405162461bcd60e51b81526020600482015260076024820152666d61782031302560c81b6044820152606401610b57565b6001600160a01b038216151580611a6057506001600160601b038116155b611a9f5760405162461bcd60e51b815260206004820152601060248201526f7265636569766572206973207a65726f60801b6044820152606401610b57565b6001600160a01b038216600160a01b6001600160601b03831690810282176017556040519081527f23813f5ad446622633cb58c75ceef768a2111751b0f30477a63e06fcaedcff60906020015b60405180910390a25050565b600180546109fa9061317a565b600d5460ff16611b405760405162461bcd60e51b815260206004820152600660248201526518db1bdcd95960d21b6044820152606401610b57565b600081118015611b525750600e548111155b611b945760405162461bcd60e51b81526020600482015260136024820152720717479206f766572207065722d74782063617606c1b6044820152606401610b57565b600f5481600b54611ba591906131c7565b1115611bf35760405162461bcd60e51b815260206004820152601c60248201527f6f766572205a4f4f4d4552207370656e642063617020706572207478000000006044820152606401610b57565b600c5481600454611c049190613167565b1115611c425760405162461bcd60e51b815260206004820152600d60248201526c1dd85d99481cdbdb19081bdd5d609a1b6044820152606401610b57565b6103e881600454611c539190613167565b1115611c8c5760405162461bcd60e51b81526020600482015260086024820152671cdbdb19081bdd5d60c21b6044820152606401610b57565b7f0000000000000000000000007ea85bd98ce15a8eb3de41933bdffdb8859aadb46001600160a01b03166323b872dd337f000000000000000000000000c16b7135a908eec52d485aa35f7932ca1965e07d84600b54611ceb91906131c7565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303816000875af1158015611d3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d639190613238565b611da85760405162461bcd60e51b81526020600482015260166024820152751693d3d35154881d1c985b9cd9995c8819985a5b195960521b6044820152606401610b57565b60005b81811015611f56576000600460008154611dc49061321f565b9182905550600380549192506000611ddb8361321f565b9091555050600081815260066020908152604080832080546001600160a01b03191633908117909155835260079091528120805491611e198361321f565b9190505550611e2781610a7b565b60056000828254611e389190613167565b90915550600090505b601054811015611ef0576013600060108381548110611e6257611e6261313b565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020546014600060108481548110611eb857611eb861313b565b60009182526020808320909101546001600160a01b031683528281019390935260409182018120868252909252902055600101611e41565b50604051819033906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4604051819033907f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe90600090a350600101611dab565b5050565b3360008181526009602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611fd1848484610c74565b6001600160a01b0383163b156120a257604051630a85bd0160e11b808252906001600160a01b0385169063150b7a02906120159033908990889088906004016133c7565b6020604051808303816000875af1158015612034573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120589190613404565b6001600160e01b031916146120a25760405162461bcd60e51b815260206004820152601060248201526f1d5b9cd85999481c9958da5c1a595b9d60821b6044820152606401610b57565b50505050565b600d5460009060ff1615806120bd5750600b54155b156120c85750600090565b600e54600b54600f546000916120dd916131f4565b90506000600454600c54116120f3576000612103565b600454600c5461210391906131b4565b905060008284106121145782612116565b835b90508181106121255781612127565b805b94505050505090565b600a546001600160a01b0316331461215a5760405162461bcd60e51b8152600401610b5790613255565b60008111801561216b575060328111155b6121a05760405162461bcd60e51b8152600401610b57906020808252600490820152630312d35360e41b604082015260600190565b600e8190556040518181527f4d98629979575ca912f325e0faf32349d4cedcbb70e2adbddfd33df7123d30f3906020016119c8565b6000818152600660205260409020546060906001600160a01b03166122255760405162461bcd60e51b8152602060048201526006602482015265189859081a5960d21b6044820152606401610b57565b600261223083612b17565b604051602001612241929190613421565b6040516020818303038152906040529050919050565b600a546001600160a01b031633146122815760405162461bcd60e51b8152600401610b5790613255565b61228e6101f46001613167565b8114806122a657506122a36102ee6001613167565b81145b806122bc57506122b96103846001613167565b81145b6122fb5760405162461bcd60e51b815260206004820152601060248201526f1b9bdd0818481d1a595c881cdd185c9d60821b6044820152606401610b57565b600454612309906001613167565b81116123575760405162461bcd60e51b815260206004820152601760248201527f616c7265616479207468657265206f7220626568696e640000000000000000006044820152606401610b57565b6004546000906123686001846131b4565b61237291906131b4565b905061237f6001836131b4565b600455600d805460ff1916905560408051838152602081018390527f8acd5eb49e751f404fe9db78209de024d66320c196bde15d487b0c69df300a8f910160405180910390a16040517f589ed34b6de61e6df418b1c0e5caa881461804657f37544ca23bf0b86d09f1e390600090a15050565b6000806000806000806000600354600554600b54600c54600d60009054906101000a900460ff166010805490506124276120a8565b959d949c50929a50909850965094509092509050565b600a546001600160a01b031633146124675760405162461bcd60e51b8152600401610b5790613255565b7f0000000000000000000000007ea85bd98ce15a8eb3de41933bdffdb8859aadb46001600160a01b0316826001600160a01b0316036124db5760405162461bcd60e51b815260206004820152601060248201526f1693d3d35154881a5cc81b1bd8dad95960821b6044820152606401610b57565b6001600160a01b03821661251a5760405162461bcd60e51b8152600401610b57906020808252600490820152637a65726f60e01b604082015260600190565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fc3c9a236de60cbc8c1b10b6d54acff3f7503f6289221ec1795750a5f567a7d3f9101611aec565b6000600554116125b05760405162461bcd60e51b81526020600482015260096024820152686e6f20737570706c7960b81b6044820152606401610b57565b7f0000000000000000000000007ea85bd98ce15a8eb3de41933bdffdb8859aadb46001600160a01b0316816001600160a01b0316036126265760405162461bcd60e51b81526020600482015260126024820152713737ba1030903932bbb0b932103a37b5b2b760711b6044820152606401610b57565b6001600160a01b03811660009081526012602052604090205460ff166126825760405162461bcd60e51b81526020600482015260116024820152701d1bdad95b881b9bdd08185b1b1bddd959607a1b6044820152606401610b57565b6001600160a01b0381166000908152601660205260409020546126a790610e10613167565b4210156126e15760405162461bcd60e51b81526020600482015260086024820152673a37b79039b7b7b760c11b6044820152606401610b57565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015612728573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274c9190613278565b604051635f93f79160e11b81526001600160a01b0384811660048301529192507f000000000000000000000000c16b7135a908eec52d485aa35f7932ca1965e07d9091169063bf27ef22906024016020604051808303816000875af11580156127b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127dd9190613278565b506040516370a0823160e01b815230600482015260009082906001600160a01b038516906370a0823190602401602060405180830381865afa158015612827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061284b9190613278565b61285591906131b4565b90506000811161289d5760405162461bcd60e51b81526020600482015260136024820152726e6f7468696e6720746f20616c6c6f6361746560681b6044820152606401610b57565b6001600160a01b03831660009081526011602052604090205460ff16612968576010546008116129025760405162461bcd60e51b815260206004820152601060248201526f1c995dd85c99081b1a5cdd08199d5b1b60821b6044820152606401610b57565b6001600160a01b0383166000818152601160205260408120805460ff191660019081179091556010805491820181559091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b03191690911790555b60055461297d670de0b6b3a7640000836131c7565b61298791906131f4565b6001600160a01b038416600090815260136020526040812080549091906129af908490613167565b90915550506001600160a01b03831660008181526016602052604090204290556005547f9af9811abc6f1b9cf2234f8ed76daa9a577d4ffbbe0af66ec4b748cde6f4c39f908390612a0090826131f4565b6040805192835260208301919091520160405180910390a2505050565b60005b601054811015611f5657600060108281548110612a3f57612a3f61313b565b60009182526020808320909101546001600160a01b0316808352601482526040808420878552835280842054828552601390935290922054919250670de0b6b3a764000091612a8e91906131b4565b612a9785610a7b565b612aa191906131c7565b612aab91906131f4565b6001600160a01b038216600090815260156020908152604080832087845290915281208054909190612ade908490613167565b90915550506001600160a01b03166000908152601360209081526040808320546014835281842086855290925290912055600101612a20565b606081600003612b3e5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612b685780612b528161321f565b9150612b619050600a836131f4565b9150612b42565b60008167ffffffffffffffff811115612b8357612b83613041565b6040519080825280601f01601f191660200182016040528015612bad576020820181803683370190505b5090505b8415612c1657612bc2600a866134b7565b612bcd906030613167565b60f81b81612bda84613208565b93508381518110612bed57612bed61313b565b60200101906001600160f81b031916908160001a905350612c0f600a866131f4565b9450612bb1565b949350505050565b6001600160e01b031981168114612c3457600080fd5b50565b600060208284031215612c4957600080fd5b8135610c6d81612c1e565b80356001600160a01b0381168114612c6b57600080fd5b919050565b60008083601f840112612c8257600080fd5b50813567ffffffffffffffff811115612c9a57600080fd5b6020830191508360208260051b8501011115610eac57600080fd5b600080600060408486031215612cca57600080fd5b612cd384612c54565b9250602084013567ffffffffffffffff811115612cef57600080fd5b612cfb86828701612c70565b9497909650939450505050565b60005b83811015612d23578181015183820152602001612d0b565b50506000910152565b60008151808452612d44816020860160208601612d08565b601f01601f19169290920160200192915050565b602081526000610c6d6020830184612d2c565b600060208284031215612d7d57600080fd5b5035919050565b60008060408385031215612d9757600080fd5b612da083612c54565b946020939093013593505050565b600080600060608486031215612dc357600080fd5b612dcc84612c54565b9250612dda60208501612c54565b929592945050506040919091013590565b60008060408385031215612dfe57600080fd5b50508035926020909101359150565b60008060008060408587031215612e2357600080fd5b843567ffffffffffffffff811115612e3a57600080fd5b612e4687828801612c70565b909550935050602085013567ffffffffffffffff811115612e6657600080fd5b612e7287828801612c70565b95989497509550505050565b602080825282518282018190526000918401906040840190835b81811015612ebf5783516001600160a01b0316835260209384019390920191600101612e98565b509095945050505050565b600060208284031215612edc57600080fd5b610c6d82612c54565b60008060408385031215612ef857600080fd5b612f0183612c54565b9150612f0f60208401612c54565b90509250929050565b60008060208385031215612f2b57600080fd5b823567ffffffffffffffff811115612f4257600080fd5b8301601f81018513612f5357600080fd5b803567ffffffffffffffff811115612f6a57600080fd5b856020828401011115612f7c57600080fd5b6020919091019590945092505050565b602080825282518282018190526000918401906040840190835b81811015612ebf578351835260209384019390920191600101612fa6565b60008060408385031215612fd757600080fd5b612fe083612c54565b915060208301356001600160601b0381168114612ffc57600080fd5b809150509250929050565b8015158114612c3457600080fd5b6000806040838503121561302857600080fd5b61303183612c54565b91506020830135612ffc81613007565b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561306d57600080fd5b61307685612c54565b935061308460208601612c54565b925060408501359150606085013567ffffffffffffffff8111156130a757600080fd5b8501601f810187136130b857600080fd5b803567ffffffffffffffff8111156130d2576130d2613041565b604051601f8201601f19908116603f0116810167ffffffffffffffff8111828210171561310157613101613041565b60405281815282820160200189101561311957600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561099d5761099d613151565b600181811c9082168061318e57607f821691505b6020821081036131ae57634e487b7160e01b600052602260045260246000fd5b50919050565b8181038181111561099d5761099d613151565b808202811582820484141761099d5761099d613151565b634e487b7160e01b600052601260045260246000fd5b600082613203576132036131de565b500490565b60008161321757613217613151565b506000190190565b60006001820161323157613231613151565b5060010190565b60006020828403121561324a57600080fd5b8151610c6d81613007565b6020808252600990820152683737ba1037bbb732b960b91b604082015260600190565b60006020828403121561328a57600080fd5b5051919050565b601f8211156111c857806000526020600020601f840160051c810160208510156132b85750805b601f840160051c820191505b8181101561114457600081556001016132c4565b67ffffffffffffffff8311156132f0576132f0613041565b613304836132fe835461317a565b83613291565b6000601f84116001811461333857600085156133205750838201355b600019600387901b1c1916600186901b178355611144565b600083815260209020601f19861690835b828110156133695786850135825560209485019460019092019101613349565b50868210156133865760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906133fa90830184612d2c565b9695505050505050565b60006020828403121561341657600080fd5b8151610c6d81612c1e565b600080845461342f8161317a565b600182168015613446576001811461345b5761348b565b60ff198316865281151582028601935061348b565b87600052602060002060005b8381101561348357815488820152600190910190602001613467565b505081860193505b505050835161349e818360208801612d08565b64173539b7b760d91b9101908152600501949350505050565b6000826134c6576134c66131de565b50069056fea26469706673582212209e9bc85fd74ddd16a1dbbdd1856e2d636772ddb6032136013014c970d517516c64736f6c634300081a0033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
GameStop • Robinhood Token (GME) | GME | 0.025778 | $18.73 | $0.48 |
Tesla • Robinhood Token (TSLA) | TSLA | 0.001398 | $340.91 | $0.48 |
Invesco QQQ • Robinhood Token (QQQ) | QQQ | 0.000650 | $731.5 | $0.48 |
Apple • Robinhood Token (AAPL) | AAPL | 0.001556 | $305.28 | $0.48 |
Strategy Inc. • Robinhood Token (MSTR) | MSTR | 0.004865 | $93.53 | $0.46 |
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| no internal transactions found for this address yet (traced blocks + on-demand) | ||||||||
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0xe0f9a4…f04ab7 | 57 secs agoTue, 18 Aug 2026 02:11:22 UTC | 0x30385c…adfe | [0] 0x000000000000…1a9ba035 [1] 0x000000000000…00000148 |
| 0xe0f9a4…f04ab7 | 57 secs agoTue, 18 Aug 2026 02:11:22 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…1a9ba035 [2] 0x000000000000…00000148 |
| 0xe0f9a4…f04ab7 | 57 secs agoTue, 18 Aug 2026 02:11:22 UTC | 0x30385c…adfe | [0] 0x000000000000…1a9ba035 [1] 0x000000000000…00000147 |
| 0xe0f9a4…f04ab7 | 57 secs agoTue, 18 Aug 2026 02:11:22 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…1a9ba035 [2] 0x000000000000…00000147 |
| 0xe0f9a4…f04ab7 | 57 secs agoTue, 18 Aug 2026 02:11:22 UTC | 0x30385c…adfe | [0] 0x000000000000…1a9ba035 [1] 0x000000000000…00000146 |
| 0xe0f9a4…f04ab7 | 57 secs agoTue, 18 Aug 2026 02:11:22 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…1a9ba035 [2] 0x000000000000…00000146 |
| 0xe0f9a4…f04ab7 | 57 secs agoTue, 18 Aug 2026 02:11:22 UTC | 0x30385c…adfe | [0] 0x000000000000…1a9ba035 [1] 0x000000000000…00000145 |
| 0xe0f9a4…f04ab7 | 57 secs agoTue, 18 Aug 2026 02:11:22 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…1a9ba035 [2] 0x000000000000…00000145 |
| 0xe0f9a4…f04ab7 | 57 secs agoTue, 18 Aug 2026 02:11:22 UTC | 0x30385c…adfe | [0] 0x000000000000…1a9ba035 [1] 0x000000000000…00000144 |
| 0xe0f9a4…f04ab7 | 57 secs agoTue, 18 Aug 2026 02:11:22 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…1a9ba035 [2] 0x000000000000…00000144 |
| 0xe0f9a4…f04ab7 | 57 secs agoTue, 18 Aug 2026 02:11:22 UTC | 0x30385c…adfe | [0] 0x000000000000…1a9ba035 [1] 0x000000000000…00000143 |
| 0xe0f9a4…f04ab7 | 57 secs agoTue, 18 Aug 2026 02:11:22 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…1a9ba035 [2] 0x000000000000…00000143 |
| 0xe0f9a4…f04ab7 | 57 secs agoTue, 18 Aug 2026 02:11:22 UTC | 0x30385c…adfe | [0] 0x000000000000…1a9ba035 [1] 0x000000000000…00000142 |
| 0xe0f9a4…f04ab7 | 57 secs agoTue, 18 Aug 2026 02:11:22 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…1a9ba035 [2] 0x000000000000…00000142 |
| 0xe0f9a4…f04ab7 | 57 secs agoTue, 18 Aug 2026 02:11:22 UTC | 0x30385c…adfe | [0] 0x000000000000…1a9ba035 [1] 0x000000000000…00000141 |
| 0xe0f9a4…f04ab7 | 57 secs agoTue, 18 Aug 2026 02:11:22 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…1a9ba035 [2] 0x000000000000…00000141 |
| 0xe0f9a4…f04ab7 | 57 secs agoTue, 18 Aug 2026 02:11:22 UTC | 0x30385c…adfe | [0] 0x000000000000…1a9ba035 [1] 0x000000000000…00000140 |
| 0xe0f9a4…f04ab7 | 57 secs agoTue, 18 Aug 2026 02:11:22 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…1a9ba035 [2] 0x000000000000…00000140 |
| 0xe0f9a4…f04ab7 | 57 secs agoTue, 18 Aug 2026 02:11:22 UTC | 0x30385c…adfe | [0] 0x000000000000…1a9ba035 [1] 0x000000000000…0000013f |
| 0xe0f9a4…f04ab7 | 57 secs agoTue, 18 Aug 2026 02:11:22 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…1a9ba035 [2] 0x000000000000…0000013f |
| 0x33866f…f2e743 | 41 mins agoTue, 18 Aug 2026 01:31:07 UTC | 0xf7a400…2683 | [0] 0x000000000000…e834bc39 [1] 0x000000000000…911c153e data: 0x000000000000000000…e8a2b2be |
| 0x33866f…f2e743 | 41 mins agoTue, 18 Aug 2026 01:31:07 UTC | 0xf7a400…2683 | [0] 0x000000000000…e834bc39 [1] 0x000000000000…9d42da09 data: 0x000000000000000000…740a3da6 |
| 0x33866f…f2e743 | 41 mins agoTue, 18 Aug 2026 01:31:07 UTC | 0xf7a400…2683 | [0] 0x000000000000…e834bc39 [1] 0x000000000000…1c003b2d data: 0x000000000000000000…fc06b653 |
| 0x33866f…f2e743 | 41 mins agoTue, 18 Aug 2026 01:31:07 UTC | 0xf7a400…2683 | [0] 0x000000000000…e834bc39 [1] 0x000000000000…8f8a93f9 data: 0x000000000000000000…61361750 |
| 0x33866f…f2e743 | 41 mins agoTue, 18 Aug 2026 01:31:07 UTC | 0xf7a400…2683 | [0] 0x000000000000…e834bc39 [1] 0x000000000000…5888de68 data: 0x000000000000000000…660689d3 |
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xe0f9a4…f04ab7 | mint | 39,329,250 | 57 secs agoTue, 18 Aug 2026 02:11:22 UTC | 0x5134…a035 | IN | Zoomer Stockholder Club | $0.000 ETH | 0.00003089 | |
| 0x33866f…f2e743 | claim | 39,305,179 | 41 mins agoTue, 18 Aug 2026 01:31:07 UTC | 0x7dfe…bc39 | IN | Zoomer Stockholder Club | $0.000 ETH | 0.00001524 | |
| 0xd26d2d…436e04 | mint | 39,287,457 | 1 hr agoTue, 18 Aug 2026 01:01:29 UTC | 0x7dfe…bc39 | IN | Zoomer Stockholder Club | $0.000 ETH | 0.00001638 | |
| 0x92546b…d5ecbe | mint | 39,287,028 | 1 hr agoTue, 18 Aug 2026 01:00:48 UTC | 0x7dfe…bc39 | IN | Zoomer Stockholder Club | $0.000 ETH | 0.00000468 | |
| 0xbe7872…4bc9c2 | claim | 39,194,438 | 3 hrs agoMon, 17 Aug 2026 22:26:11 UTC | 0x007d…0246 | IN | Zoomer Stockholder Club | $0.000 ETH | 0.00002612 | |
| 0x107dfd…04aca9 | allocate | 39,139,180 | 5 hrs agoMon, 17 Aug 2026 20:53:48 UTC | 0x30e6…ef5e | IN | Zoomer Stockholder Club | $0.000 ETH | 0.00000185 | |
| 0xe307df…dc7782 | allocate | 39,138,738 | 5 hrs agoMon, 17 Aug 2026 20:53:04 UTC | 0x30e6…ef5e | IN | Zoomer Stockholder Club | $0.000 ETH | 0.00000184 | |
| 0x97c20f…b89e00 | allocate | 39,138,690 | 5 hrs agoMon, 17 Aug 2026 20:52:59 UTC | 0x30e6…ef5e | IN | Zoomer Stockholder Club | $0.000 ETH | 0.00000184 | |
| 0x7fc2f9…be546e | allocate | 39,138,642 | 5 hrs agoMon, 17 Aug 2026 20:52:54 UTC | 0x30e6…ef5e | IN | Zoomer Stockholder Club | $0.000 ETH | 0.00000180 | |
| 0xe777ec…c8b1ea | allocate | 39,138,582 | 5 hrs agoMon, 17 Aug 2026 20:52:48 UTC | 0x30e6…ef5e | IN | Zoomer Stockholder Club | $0.000 ETH | 0.00000185 | |
| 0x87fea1…dc97d5 | claim | 39,132,146 | 5 hrs agoMon, 17 Aug 2026 20:42:04 UTC | 0x74e0…460d | IN | Zoomer Stockholder Club | $0.000 ETH | 0.00004951 | |
| 0x7dff7a…6cd339 | Set Approval For All | 39,130,213 | 5 hrs agoMon, 17 Aug 2026 20:38:50 UTC | 0x74e0…460d | IN | Zoomer Stockholder Club | $0.000 ETH | 0.00000094 | |
| 0xf1a2e5…db75ab | mint | 39,128,477 | 5 hrs agoMon, 17 Aug 2026 20:35:56 UTC | 0x74e0…460d | IN | Zoomer Stockholder Club | $0.000 ETH | 0.00003062 | |
| 0xb2b8ca…24f036 | mint | 39,126,987 | 5 hrs agoMon, 17 Aug 2026 20:33:26 UTC | 0x74e0…460d | IN | Zoomer Stockholder Club | $0.000 ETH | 0.00001624 | |
| 0x0d6dab…7a893f | mint | 39,092,593 | 6 hrs agoMon, 17 Aug 2026 19:35:53 UTC | 0xebe2…83da | IN | Zoomer Stockholder Club | $0.000 ETH | 0.00000492 | |
| 0x58ff4d…8392b7 | setRoyalty | 39,080,908 | 6 hrs agoMon, 17 Aug 2026 19:16:22 UTC | 0xd634…befa | IN | Zoomer Stockholder Club | $0.000 ETH | 0.00000097 | |
| 0x882e3d…61110c | mint | 39,077,294 | 7 hrs agoMon, 17 Aug 2026 19:10:19 UTC | 0x007d…0246 | IN | Zoomer Stockholder Club | $0.000 ETH | 0.00000781 | |
| 0x8ddae3…07293c | claim | 39,076,141 | 7 hrs agoMon, 17 Aug 2026 19:08:24 UTC | 0x65b7…4f93 | IN | Zoomer Stockholder Club | $0.000 ETH | 0.00003155 | |
| 0xe75bc2…97f4af | claim | 39,075,926 | 7 hrs agoMon, 17 Aug 2026 19:08:03 UTC | 0x5c09…9530 | IN | Zoomer Stockholder Club | $0.000 ETH | 0.00003101 | |
| 0xba00d8…55fa8f | claim | 39,075,603 | 7 hrs agoMon, 17 Aug 2026 19:07:30 UTC | 0x8152…c0dc | IN | Zoomer Stockholder Club | $0.000 ETH | 0.00003126 | |
| 0x4a6007…a7f11c | claim | 39,075,250 | 7 hrs agoMon, 17 Aug 2026 19:06:55 UTC | 0xd634…befa | IN | Zoomer Stockholder Club | $0.000 ETH | 0.00004444 | |
| 0xd7eff5…40205b | claim | 39,074,224 | 7 hrs agoMon, 17 Aug 2026 19:05:11 UTC | 0x008b…670f | IN | Zoomer Stockholder Club | $0.000 ETH | 0.00005451 | |
| 0xbba7fd…410ec5 | mint | 39,072,236 | 7 hrs agoMon, 17 Aug 2026 19:01:53 UTC | 0xc4c9…fd29 | IN | Zoomer Stockholder Club | $0.000 ETH | 0.00003086 | |
| 0x78f731…5f4247 | mint | 39,070,864 | 7 hrs agoMon, 17 Aug 2026 18:59:35 UTC | 0xc4c9…fd29 | IN | Zoomer Stockholder Club | $0.000 ETH | 0.00003085 | |
| 0x206904…dff981 | mint | 39,067,116 | 7 hrs agoMon, 17 Aug 2026 18:53:19 UTC | 0xd69d…06fb | IN | Zoomer Stockholder Club | $0.000 ETH | 0.00003078 |
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x33866f0e…f2e743 | Transfer | 39,305,179 | 41 mins agoTue, 18 Aug 2026 01:31:07 UTC | 0xc8b8…be80 | OUT | 0x7dfe…bc39 | $0.010.000793 GME | GameStop • Robinhood Token (GME) | |
| 0x33866f0e…f2e743 | Transfer | 39,305,179 | 41 mins agoTue, 18 Aug 2026 01:31:07 UTC | 0xc8b8…be80 | OUT | 0x7dfe…bc39 | $0.010.000147 MSTR | Strategy Inc. • Robinhood Token (MSTR) | |
| 0x33866f0e…f2e743 | Transfer | 39,305,179 | 41 mins agoTue, 18 Aug 2026 01:31:07 UTC | 0xc8b8…be80 | OUT | 0x7dfe…bc39 | $0.010.000042 TSLA | Tesla • Robinhood Token (TSLA) | |
| 0x33866f0e…f2e743 | Transfer | 39,305,179 | 41 mins agoTue, 18 Aug 2026 01:31:07 UTC | 0xc8b8…be80 | OUT | 0x7dfe…bc39 | $0.010.000047 AAPL | Apple • Robinhood Token (AAPL) | |
| 0x33866f0e…f2e743 | Transfer | 39,305,179 | 41 mins agoTue, 18 Aug 2026 01:31:07 UTC | 0xc8b8…be80 | OUT | 0x7dfe…bc39 | $0.010.000019 QQQ | Invesco QQQ • Robinhood Token (QQQ) | |
| 0xbe7872d9…4bc9c2 | Transfer | 39,194,438 | 3 hrs agoMon, 17 Aug 2026 22:26:11 UTC | 0xc8b8…be80 | OUT | 0x007d…0246 | $0.030.001380 GME | GameStop • Robinhood Token (GME) | |
| 0xbe7872d9…4bc9c2 | Transfer | 39,194,438 | 3 hrs agoMon, 17 Aug 2026 22:26:11 UTC | 0xc8b8…be80 | OUT | 0x007d…0246 | $0.020.000261 MSTR | Strategy Inc. • Robinhood Token (MSTR) | |
| 0xbe7872d9…4bc9c2 | Transfer | 39,194,438 | 3 hrs agoMon, 17 Aug 2026 22:26:11 UTC | 0xc8b8…be80 | OUT | 0x007d…0246 | $0.030.000074 TSLA | Tesla • Robinhood Token (TSLA) | |
| 0xbe7872d9…4bc9c2 | Transfer | 39,194,438 | 3 hrs agoMon, 17 Aug 2026 22:26:11 UTC | 0xc8b8…be80 | OUT | 0x007d…0246 | $0.030.000083 AAPL | Apple • Robinhood Token (AAPL) | |
| 0xbe7872d9…4bc9c2 | Transfer | 39,194,438 | 3 hrs agoMon, 17 Aug 2026 22:26:11 UTC | 0xc8b8…be80 | OUT | 0x007d…0246 | $0.020.000034 QQQ | Invesco QQQ • Robinhood Token (QQQ) | |
| 0x107dfd9d…04aca9 | Transfer | 39,139,180 | 5 hrs agoMon, 17 Aug 2026 20:53:48 UTC | 0xc16b…e07d | IN | 0xc8b8…be80 | $0.190.010089 GME | GameStop • Robinhood Token (GME) | |
| 0xe307df1a…dc7782 | Transfer | 39,138,738 | 5 hrs agoMon, 17 Aug 2026 20:53:04 UTC | 0xc16b…e07d | IN | 0xc8b8…be80 | $0.180.001887 MSTR | Strategy Inc. • Robinhood Token (MSTR) | |
| 0x97c20fdd…b89e00 | Transfer | 39,138,690 | 5 hrs agoMon, 17 Aug 2026 20:52:59 UTC | 0xc16b…e07d | IN | 0xc8b8…be80 | $0.190.000547 TSLA | Tesla • Robinhood Token (TSLA) | |
| 0x7fc2f910…be546e | Transfer | 39,138,642 | 5 hrs agoMon, 17 Aug 2026 20:52:54 UTC | 0xc16b…e07d | IN | 0xc8b8…be80 | $0.190.000608 AAPL | Apple • Robinhood Token (AAPL) | |
| 0xe777eca8…c8b1ea | Transfer | 39,138,582 | 5 hrs agoMon, 17 Aug 2026 20:52:48 UTC | 0xc16b…e07d | IN | 0xc8b8…be80 | $0.190.000254 QQQ | Invesco QQQ • Robinhood Token (QQQ) | |
| 0x87fea145…dc97d5 | Transfer | 39,132,146 | 5 hrs agoMon, 17 Aug 2026 20:42:04 UTC | 0xc8b8…be80 | OUT | 0x74e0…460d | $0.090.004620 GME | GameStop • Robinhood Token (GME) | |
| 0x87fea145…dc97d5 | Transfer | 39,132,146 | 5 hrs agoMon, 17 Aug 2026 20:42:04 UTC | 0xc8b8…be80 | OUT | 0x74e0…460d | $0.080.000879 MSTR | Strategy Inc. • Robinhood Token (MSTR) | |
| 0x87fea145…dc97d5 | Transfer | 39,132,146 | 5 hrs agoMon, 17 Aug 2026 20:42:04 UTC | 0xc8b8…be80 | OUT | 0x74e0…460d | $0.090.000250 TSLA | Tesla • Robinhood Token (TSLA) | |
| 0x87fea145…dc97d5 | Transfer | 39,132,146 | 5 hrs agoMon, 17 Aug 2026 20:42:04 UTC | 0xc8b8…be80 | OUT | 0x74e0…460d | $0.090.000279 AAPL | Apple • Robinhood Token (AAPL) | |
| 0x87fea145…dc97d5 | Transfer | 39,132,146 | 5 hrs agoMon, 17 Aug 2026 20:42:04 UTC | 0xc8b8…be80 | OUT | 0x74e0…460d | $0.080.000116 QQQ | Invesco QQQ • Robinhood Token (QQQ) | |
| 0x8ddae32f…07293c | Transfer | 39,076,141 | 7 hrs agoMon, 17 Aug 2026 19:08:24 UTC | 0xc8b8…be80 | OUT | 0x65b7…4f93 | $0.030.001353 GME | GameStop • Robinhood Token (GME) | |
| 0x8ddae32f…07293c | Transfer | 39,076,141 | 7 hrs agoMon, 17 Aug 2026 19:08:24 UTC | 0xc8b8…be80 | OUT | 0x65b7…4f93 | $0.020.000257 MSTR | Strategy Inc. • Robinhood Token (MSTR) | |
| 0x8ddae32f…07293c | Transfer | 39,076,141 | 7 hrs agoMon, 17 Aug 2026 19:08:24 UTC | 0xc8b8…be80 | OUT | 0x65b7…4f93 | $0.020.000073 TSLA | Tesla • Robinhood Token (TSLA) | |
| 0x8ddae32f…07293c | Transfer | 39,076,141 | 7 hrs agoMon, 17 Aug 2026 19:08:24 UTC | 0xc8b8…be80 | OUT | 0x65b7…4f93 | $0.020.000081 AAPL | Apple • Robinhood Token (AAPL) | |
| 0x8ddae32f…07293c | Transfer | 39,076,141 | 7 hrs agoMon, 17 Aug 2026 19:08:24 UTC | 0xc8b8…be80 | OUT | 0x65b7…4f93 | $0.020.000034 QQQ | Invesco QQQ • Robinhood Token (QQQ) |