pragma solidity ^0.8.20;
/*
__ _ _ ____ __ _ _____ ____ ____ ____ ____ __ ___
| |/ ]| | | || |/ ] | || || \ / || \ / ] / _]
| ' / | | | | | ' / | __| | | | _ || o || _ | / / / [_
| \ | |___ | | | \ | |_ | | | | || || | |/ / | _]
| \| | | | | \ __ | _] | | | | || _ || | / \_ | [_
| . || | | | | . || || | | | | | || | || | \ || |
|__|\_||_____||____||__|\_||__||__| |____||__|__||__|__||__|__|\____||_____|
V4 Edition
https://klik.finance
https://x.com/klik_evm
*/
pragma solidity >=0.8.9;
import {SwapParams} from "v4-core/src/types/PoolOperation.sol";
import {IPoolManager} from "v4-core/src/interfaces/IPoolManager.sol";
import {PoolKey} from "v4-core/src/types/PoolKey.sol";
import {PoolId, PoolIdLibrary} from "v4-core/src/types/PoolId.sol";
import {Currency, CurrencyLibrary} from "v4-core/src/types/Currency.sol";
import {IHooks} from "v4-core/src/interfaces/IHooks.sol";
import {Hooks} from "v4-core/src/libraries/Hooks.sol";
import {BalanceDelta} from "v4-core/src/types/BalanceDelta.sol";
import {TickMath} from "v4-core/src/libraries/TickMath.sol";
import {IPositionManager} from "v4-periphery/src/interfaces/IPositionManager.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {ReentrancyGuard} from "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
import {Actions} from "v4-periphery/src/libraries/Actions.sol";
import {LiquidityAmounts} from "v4-core/test/utils/LiquidityAmounts.sol";
import {StateLibrary} from "v4-core/src/libraries/StateLibrary.sol";
interface IStateView {
function getSlot0(PoolId poolId) external view returns (uint160 sqrtPriceX96, int24 tick, uint24 protocolFee, uint24 lpFee);
}
import {IAllowanceTransfer} from "permit2/src/interfaces/IAllowanceTransfer.sol";
import {LPFeeLibrary} from "@uniswap/v4-core/src/libraries/LPFeeLibrary.sol";
import {IUniversalRouter} from "@uniswap/universal-router/contracts/interfaces/IUniversalRouter.sol";
import {IV4Router} from "@uniswap/v4-periphery/src/interfaces/IV4Router.sol";
import {IPermit2} from "permit2/src/interfaces/IPermit2.sol";
import {Commands} from "@uniswap/universal-router/contracts/libraries/Commands.sol";
import "v4-core/test/utils/LiquidityAmounts.sol";
interface IToken {
function creator() external view returns (address);
function withdrawFees() external returns (uint256);
}
interface IWETH {
function withdraw(uint256 amount) external;
}
contract Factory is ReentrancyGuard {
event ERC20TokenCreated(address tokenAddress);
struct TokenInfo {
address tokenAddress;
string name;
string symbol;
address deployer;
uint256 time;
string metadata;
uint256 marketCapInETH;
uint256 totalFeesGenerated;
}
mapping(uint256 => TokenInfo) public deployedTokens;
mapping(address => TokenInfo) public tokenInfoByAddress;
uint256 public tokenCount = 0;
address public platformController;
address public klikHook; // Universal hook for all tokens (can be updated)
uint256 private itemsPerPage = 250; // Configurable items per page for pagination
// Mapping to store token addresses by creator/deployer
mapping(address => address[]) public creatorTokens;
// Mapping to track total fees generated per token
mapping(address => uint256) public tokenFeesGenerated;
// Mapping to store the hook address used at deploy time per token
mapping(address => address) public tokenHook;
// Uniswap v4 deployment addresses — Robinhood Chain (chain ID 4663)
IAllowanceTransfer constant PERMIT2 = IAllowanceTransfer(address(0x000000000022D473030F116dDEE9F6B43aC78BA3));
address public constant POSITION_MANAGER = 0x58daec3116aae6D93017bAAea7749052E8a04fA7;
IPositionManager positionManager = IPositionManager(POSITION_MANAGER);
address public constant POOL_MANAGER = 0x8366a39CC670B4001A1121B8F6A443A643e40951;
IPoolManager poolManager = IPoolManager(POOL_MANAGER);
address public constant STATE_VIEW = 0xF3334192D15450CdD385c8B70e03f9A6bD9E673b;
IStateView stateView = IStateView(STATE_VIEW);
uint256 constant Q96 = 2 ** 96;
address public constant WETH = 0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73; // Canonical WETH on Robinhood Chain
address public constant UNIVERSAL_ROUTER = 0x8876789976dEcBfCbBbe364623C63652db8C0904;
IUniversalRouter router = IUniversalRouter(UNIVERSAL_ROUTER);
uint24 private constant FEE_TIER = 0;
bool public deployCoinEnabled = true;
// Liquidity configuration struct
struct LiquidityConfig {
uint160 sqrtPriceX96; // sqrtPriceX96 for the pool (address(0) is always currency0)
int24 tickLower; // Lower tick for the position
int24 tickUpper; // Upper tick for the position
uint256 amount0Desired; // Desired amount of currency0 (ETH)
uint256 amount1Desired; // Desired amount of currency1 (Token)
uint256 virtualAmount; // Virtual ETH amount for market cap calculation
uint256 penaltyMultiplier; // Penalty multiplier (50 = 50%, 100 = 100%, 200 = 200%)
}
// Multiple liquidity configurations
mapping(uint256 => LiquidityConfig) public liquidityConfigs;
uint256 public liquidityConfigCount = 0;
uint256 public launchPeriod = 300; // blocks; set to 0 to disable max-wallet restrictions
event TokenPurchased(address buyer, address tokenOut, uint256 ethSpent, uint256 tokensReceived);
event KlikHookUpdated(address oldHook, address newHook);
constructor(address _klikHook) {
platformController = msg.sender;
klikHook = _klikHook;
// Pre-seeded liquidity configurations (IDs 0-4). All single-sided:
// full 1B token supply, no ETH. virtualAmount = starting market cap
// in ETH; sqrtPriceX96 prices the full supply at exactly that amount.
// penaltyMultiplier 0 = no deploy-buy tax (100 = standard penalty).
// ID 0: 0.69 ETH virtual liquidity (default)
liquidityConfigs[0] = LiquidityConfig({
sqrtPriceX96: 3014831488601586337191090825970934,
tickLower: -887200,
tickUpper: 210800,
amount0Desired: 0,
amount1Desired: 1000000000000000000000000000,
virtualAmount: 690000000000000000,
penaltyMultiplier: 0
});
// ID 1: 1 ETH virtual liquidity
liquidityConfigs[1] = LiquidityConfig({
sqrtPriceX96: 2505411999795360582221170761428213,
tickLower: -887200,
tickUpper: 207200,
amount0Desired: 0,
amount1Desired: 1000000000000000000000000000,
virtualAmount: 1000000000000000000,
penaltyMultiplier: 0
});
// ID 2: 2 ETH virtual liquidity
liquidityConfigs[2] = LiquidityConfig({
sqrtPriceX96: 1771577727172025373304338615273325,
tickLower: -887200,
tickUpper: 200200,
amount0Desired: 0,
amount1Desired: 1000000000000000000000000000,
virtualAmount: 2000000000000000000,
penaltyMultiplier: 0
});
// ID 3: 5 ETH virtual liquidity
liquidityConfigs[3] = LiquidityConfig({
sqrtPriceX96: 1120408587790087695236213992013890,
tickLower: -887200,
tickUpper: 191000,
amount0Desired: 0,
amount1Desired: 1000000000000000000000000000,
virtualAmount: 5000000000000000000,
penaltyMultiplier: 0
});
// ID 4: 10 ETH virtual liquidity
liquidityConfigs[4] = LiquidityConfig({
sqrtPriceX96: 792280926924313289846529216293289,
tickLower: -887200,
tickUpper: 184200,
amount0Desired: 0,
amount1Desired: 1000000000000000000000000000,
virtualAmount: 10000000000000000000,
penaltyMultiplier: 0
});
liquidityConfigCount = 5;
}
function setKlikHook(address _newHook) external {
require(msg.sender == platformController, "Caller is not controller");
address oldHook = klikHook;
klikHook = _newHook;
emit KlikHookUpdated(oldHook, _newHook);
}
function setLaunchPeriod(uint256 _blocks) external {
require(msg.sender == platformController, "Caller is not controller");
launchPeriod = _blocks;
}
receive() external payable {}
function deployCoin(string memory _name, string memory _symbol, string memory _metadata, bytes32 salt, uint256 configId) public payable returns (uint256 tokensReceived) {
require(deployCoinEnabled, "Token deployment is currently disabled");
require(configId < liquidityConfigCount, "Invalid liquidity config ID");
Token t = new Token{salt: salt}(
_name,
_symbol,
msg.sender,
address(this),
launchPeriod
);
address coin_address = address(t);
emit ERC20TokenCreated(coin_address);
provideLiquidityV4(coin_address, configId);
tokensReceived = 0; // Initialize return value
if (msg.value > 0) {
LiquidityConfig memory config = liquidityConfigs[configId];
uint256 basePenalty = getPenalty(msg.value); // in basis points (e.g., 2500 = 25%)
uint256 taxBps = (basePenalty * config.penaltyMultiplier) / 100; // Apply config multiplier
uint256 tax;
uint256 amountAfterTax;
// Assembly optimized math operations
unchecked {
assembly {
tax := div(mul(callvalue(), taxBps), 10000)
amountAfterTax := sub(callvalue(), tax)
}
}
uint256 tokensBefore = IERC20(coin_address).balanceOf(address(this));
_buyToken(coin_address, amountAfterTax);
uint256 tokensAfter = IERC20(coin_address).balanceOf(address(this));
tokensReceived = tokensAfter - tokensBefore;
// Transfer tokens to buyer
IERC20(coin_address).transfer(msg.sender, tokensReceived);
emit TokenPurchased(msg.sender, coin_address, amountAfterTax, tokensReceived);
}
// Cache tokenCount to avoid multiple SLOAD operations
uint256 currentTokenCount = tokenCount;
TokenInfo memory newTokenInfo = TokenInfo({
tokenAddress: coin_address,
name: _name,
symbol: _symbol,
deployer: msg.sender,
time: block.timestamp,
metadata: _metadata,
marketCapInETH: 0,
totalFeesGenerated: 0
});
deployedTokens[currentTokenCount] = newTokenInfo;
tokenInfoByAddress[coin_address] = newTokenInfo;
tokenHook[coin_address] = klikHook;
// Add token to creator's array
creatorTokens[msg.sender].push(coin_address);
// Assembly optimized increment (unchecked)
assembly {
sstore(tokenCount.slot, add(currentTokenCount, 1))
}
return tokensReceived;
}
// Returns the exact init_code that deployCoin will use, so frontends can
// compute the CREATE2 address for a given salt before submitting the tx.
// launchPeriod is read from current state — callers must re-read this if
// the controller changes launchPeriod between salt-mining and deploy, or
// the predicted address will diverge from the actual one.
function getTokenBytecode(
string memory _name,
string memory _symbol,
address creator
) public view returns (bytes memory bytecode) {
bytecode = abi.encodePacked(
type(Token).creationCode,
abi.encode(_name, _symbol, creator, address(this), launchPeriod)
);
}
function getPenalty(uint256 ethAmount) public pure returns (uint256) {
if (ethAmount < 0.05 ether) return 0;
if (ethAmount >= 0.30 ether) return 5000; // max 50%
uint256 slope = 18000;
uint256 delta = ethAmount - 0.05 ether;
uint256 penalty = 500 + (delta * slope) / 1 ether;
return penalty;
}
function toggleDeployCoin() external {
require(msg.sender == platformController, "Caller is not controller");
deployCoinEnabled = !deployCoinEnabled;
}
// Create new liquidity configuration
function createLiquidityConfig(
uint160 _sqrtPriceX96,
int24 _tickLower,
int24 _tickUpper,
uint256 _amount0Desired,
uint256 _amount1Desired,
uint256 _virtualAmount,
uint256 _penaltyMultiplier
) external returns (uint256 configId) {
require(msg.sender == platformController, "Only platform controller can create liquidity config");
require(_penaltyMultiplier <= 500, "Penalty multiplier must be at most 500%");
configId = liquidityConfigCount;
liquidityConfigs[configId] = LiquidityConfig({
sqrtPriceX96: _sqrtPriceX96,
tickLower: _tickLower,
tickUpper: _tickUpper,
amount0Desired: _amount0Desired,
amount1Desired: _amount1Desired,
virtualAmount: _virtualAmount,
penaltyMultiplier: _penaltyMultiplier
});
liquidityConfigCount++;
return configId;
}
// Update existing liquidity configuration
function updateLiquidityConfig(
uint256 _configId,
uint160 _sqrtPriceX96,
int24 _tickLower,
int24 _tickUpper,
uint256 _amount0Desired,
uint256 _amount1Desired,
uint256 _virtualAmount,
uint256 _penaltyMultiplier
) external {
require(msg.sender == platformController, "Only platform controller can update liquidity config");
require(_configId < liquidityConfigCount, "Invalid config ID");
require(_penaltyMultiplier <= 500, "Penalty multiplier must be at most 500%");
liquidityConfigs[_configId] = LiquidityConfig({
sqrtPriceX96: _sqrtPriceX96,
tickLower: _tickLower,
tickUpper: _tickUpper,
amount0Desired: _amount0Desired,
amount1Desired: _amount1Desired,
virtualAmount: _virtualAmount,
penaltyMultiplier: _penaltyMultiplier
});
}
// Delete liquidity configuration (sets to zero values)
function deleteLiquidityConfig(uint256 _configId) external {
require(msg.sender == platformController, "Only platform controller can delete liquidity config");
require(_configId < liquidityConfigCount, "Invalid config ID");
require(_configId != 0, "Cannot delete default config");
delete liquidityConfigs[_configId];
}
// Get liquidity configuration
function getLiquidityConfig(uint256 _configId) external view returns (LiquidityConfig memory) {
require(_configId < liquidityConfigCount, "Invalid config ID");
return liquidityConfigs[_configId];
}
// Change the number of items per page for pagination
function setItemsPerPage(uint256 _itemsPerPage) external {
require(msg.sender == platformController, "Only platform controller can change items per page");
require(_itemsPerPage > 0 && _itemsPerPage <= 1000, "Items per page must be between 1 and 1000");
itemsPerPage = _itemsPerPage;
}
// Get all tokens for a creator in one call
function getAllTokensByCreator(address _creator) public view returns (address[] memory) {
return creatorTokens[_creator];
}
function getDeploysByPage(uint256 page, uint256 order) public view returns (TokenInfo[] memory) {
require(tokenCount > 0, "No tokens deployed");
uint256 totalPages = (tokenCount + itemsPerPage - 1) / itemsPerPage;
require(page < totalPages, "Page out of range");
uint256 start;
uint256 end;
uint256 j = 0;
if (order == 0) {
// Newest first
start = tokenCount > (page + 1) * itemsPerPage ? tokenCount - (page + 1) * itemsPerPage : 0;
end = tokenCount - page * itemsPerPage;
if (end > tokenCount) end = tokenCount;
} else {
// Oldest first
start = page * itemsPerPage;
end = start + itemsPerPage;
if (end > tokenCount) end = tokenCount;
}
TokenInfo[] memory tokens = new TokenInfo[](end - start);
for (uint256 i = start; i < end; i++) {
uint256 index = order == 0 ? end - 1 - (i - start) : i;
TokenInfo memory info = deployedTokens[index];
// Calculate market cap using the correct formula
uint256 marketCap = getMarketCap(info.tokenAddress);
tokens[j++] = TokenInfo({
tokenAddress: info.tokenAddress,
name: info.name,
symbol: info.symbol,
deployer: info.deployer,
time: info.time,
metadata: info.metadata,
marketCapInETH: marketCap,
totalFeesGenerated: tokenFeesGenerated[info.tokenAddress]
});
}
return tokens;
}
function withdrawFeesWETH() external {
require(msg.sender == platformController, "Caller is not controller");
uint256 wethBalance = IERC20(WETH).balanceOf(address(this));
require(wethBalance > 0, "No WETH to withdraw");
IWETH(WETH).withdraw(wethBalance);
(bool success, ) = msg.sender.call{value: wethBalance}("");
require(success, "ETH transfer failed");
}
function withdrawFeesETH() external {
require(msg.sender == platformController, "Caller is not controller");
uint256 ethBalance = address(this).balance;
require(ethBalance > 0, "No ETH to withdraw");
(bool success, ) = msg.sender.call{value: ethBalance}("");
require(success, "ETH transfer failed");
}
function provideLiquidityV4(address tokenA, uint256 configId) internal {
LiquidityConfig memory config = liquidityConfigs[configId];
// Since address(0) is always < any token address, it's always currency0
// No need for complex comparison logic
IERC20 token = IERC20(tokenA);
token.approve(address(PERMIT2), type(uint256).max);
PERMIT2.approve(tokenA, address(POSITION_MANAGER), type(uint160).max, type(uint48).max);
PERMIT2.approve(tokenA, address(POOL_MANAGER), type(uint160).max, type(uint48).max);
PoolKey memory pool = PoolKey({
currency0: Currency.wrap(address(0)), // ETH is always currency0
currency1: Currency.wrap(address(tokenA)), // Token is always currency1
fee: 0,
tickSpacing: 200,
hooks: IHooks(klikHook) // Use universal hook
});
poolManager.initialize(pool, config.sqrtPriceX96);
uint128 liquidity = _calculateLiquidity(
config.sqrtPriceX96,
config.tickLower,
config.tickUpper,
config.amount0Desired,
config.amount1Desired
);
bytes memory actions = abi.encodePacked(uint8(Actions.MINT_POSITION), uint8(Actions.SETTLE_PAIR));
bytes memory hookData = new bytes(0);
bytes[] memory params = new bytes[](2);
params[0] = abi.encode(
pool,
config.tickLower,
config.tickUpper,
liquidity,
config.amount0Desired,
config.amount1Desired,
address(0x000000000000000000000000000000000000dEaD), // LP burned — no removal functions exist in this factory anyway; burning makes the lock verifiable on-chain
hookData
);
params[1] = abi.encode(pool.currency0, pool.currency1);
try positionManager.modifyLiquidities(
abi.encode(actions, params),
block.timestamp + 120
) {
// Successfully added liquidity
} catch (bytes memory reason) {
assembly {
revert(add(reason, 0x20), mload(reason))
}
}
}
function _calculateLiquidity(
uint160 sqrtPriceX96,
int24 tickLower,
int24 tickUpper,
uint256 amount0Desired,
uint256 amount1Desired
) private pure returns (uint128) {
return LiquidityAmounts.getLiquidityForAmounts(
sqrtPriceX96,
TickMath.getSqrtPriceAtTick(tickLower),
TickMath.getSqrtPriceAtTick(tickUpper),
amount0Desired,
amount1Desired
);
}
// Mirror of IV4Router.ExactInputSingleParams, declared locally so its
// poolKey field uses THIS file's PoolKey type. Referencing IV4Router's
// struct directly fails to compile: its PoolKey comes from a different
// import path (@uniswap/v4-core) than the factory's (v4-core), and Solidity
// treats the two as distinct types. The ABI layout is identical, which is
// all the Universal Router's CalldataDecoder reads.
struct ExactInputSingleParams {
PoolKey poolKey;
bool zeroForOne;
uint128 amountIn;
uint128 amountOutMinimum;
bytes hookData;
}
function _buyToken(address tokenAddress, uint256 ethAmount) internal {
// Create PoolKey for ETH -> Token swap
PoolKey memory pool = PoolKey({
currency0: Currency.wrap(address(0)), // ETH
currency1: Currency.wrap(tokenAddress), // New token
fee: 0,
tickSpacing: 200,
hooks: IHooks(klikHook) // Use universal hook
});
// Encode the Universal Router command
bytes memory commands = abi.encodePacked(uint8(Commands.V4_SWAP));
bytes[] memory inputs = new bytes[](1);
// Encode V4Router actions
bytes memory actions = abi.encodePacked(
uint8(Actions.SWAP_EXACT_IN_SINGLE),
uint8(Actions.SETTLE_ALL),
uint8(Actions.TAKE_ALL)
);
// Prepare parameters for each action.
// params[0] MUST be the ExactInputSingleParams struct (not its fields
// spread out) — the struct encoding carries a leading offset word that
// the Universal Router's CalldataDecoder requires. Spreading the fields
// omits that word and reverts SliceOutOfBounds() on current UR builds.
bytes[] memory params = new bytes[](3);
params[0] = abi.encode(
ExactInputSingleParams({
poolKey: pool,
zeroForOne: true, // ETH (currency0) -> Token (currency1)
amountIn: uint128(ethAmount),
amountOutMinimum: uint128(0), // 0 = no minimum requirement
hookData: bytes("")
})
);
params[1] = abi.encode(pool.currency0, ethAmount); // SETTLE_ALL params
params[2] = abi.encode(pool.currency1, uint128(0)); // TAKE_ALL params
// Combine actions and params into inputs
inputs[0] = abi.encode(actions, params);
// Execute the swap
uint256 deadline = block.timestamp + 120;
router.execute{value: ethAmount}(commands, inputs, deadline);
// Tokens remain in contract - caller handles transfer and event emission
}
function collectFees(address tokenAddress) external nonReentrant returns (uint256 ethCollected) {
address creator = IToken(tokenAddress).creator();
require(msg.sender == creator || msg.sender == platformController, "Not authorized");
uint256 balanceBefore = address(this).balance;
IToken(tokenAddress).withdrawFees();
uint256 balanceAfter = address(this).balance;
ethCollected = balanceAfter - balanceBefore;
if (ethCollected > 0) {
tokenFeesGenerated[tokenAddress] += ethCollected;
// Platform share is taken atomically by the hook at swap time.
// Everything in the token contract is the creator's portion.
(bool success, ) = payable(creator).call{value: ethCollected}("");
require(success, "ETH transfer to creator failed");
}
return ethCollected;
}
function changeTokenFeeReceiver(address tokenAddress, address newCreator) external {
address currentCreator = IToken(tokenAddress).creator();
require(msg.sender == platformController || msg.sender == currentCreator, "Not authorized");
require(newCreator != address(0), "New creator cannot be zero address");
Token(payable(tokenAddress)).changeCreator(newCreator);
}
function getTokenPrice(address tokenAddress) public view returns (bytes32 poolIdBytes, uint160 sqrtPrice, uint256 calculatedPrice, uint256 marketCapETH) {
// Create PoolKey for ETH/Token pool
address hook = tokenHook[tokenAddress] != address(0) ? tokenHook[tokenAddress] : klikHook;
PoolKey memory poolKey = PoolKey({
currency0: Currency.wrap(address(0)), // ETH
currency1: Currency.wrap(tokenAddress), // Token
fee: 0,
tickSpacing: 200,
hooks: IHooks(hook)
});
// V4 approach: Get actual pool state using StateView
PoolId poolId = PoolId.wrap(keccak256(abi.encode(poolKey)));
poolIdBytes = PoolId.unwrap(poolId);
try stateView.getSlot0(poolId) returns (uint160 sqrtPriceX96, int24, uint24, uint24) {
sqrtPrice = sqrtPriceX96;
if (sqrtPriceX96 > 0) {
uint256 sqrtPriceX96_uint = uint256(sqrtPriceX96);
uint256 q96 = 2**96;
uint256 scaledDivisor = (q96 * 1e18) / sqrtPriceX96_uint;
calculatedPrice = (scaledDivisor * q96) / sqrtPriceX96_uint; // finalPrice
// Market Cap = price * totalSupply
uint256 totalSupply = IERC20(tokenAddress).totalSupply();
marketCapETH = calculatedPrice * totalSupply/1e18;
return (poolIdBytes, sqrtPrice, calculatedPrice, marketCapETH);
}
} catch {
// Pool doesn't exist - return 0
return (poolIdBytes, 0, 0, 0);
}
return (poolIdBytes, 0, 0, 0);
}
function getMarketCap(address tokenAddress) public view returns (uint256 marketCapETH) {
(, , , marketCapETH) = getTokenPrice(tokenAddress);
return marketCapETH;
}
// Get total fees generated by a specific token
function getTokenFeesGenerated(address tokenAddress) public view returns (uint256) {
return tokenFeesGenerated[tokenAddress];
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract Token is ERC20, ERC20Burnable {
address public platform;
address public creator;
address private _owner;
uint256 private launchBlock;
uint256 private maxTxAmount;
uint256 private immutable LAUNCH_PERIOD;
uint256 private constant MAX_WALLET_PERCENTAGE = 2; // 2% of total supply
address immutable pool = 0x8366a39CC670B4001A1121B8F6A443A643e40951; // Robinhood Chain PoolManager
// Track transfers per tx.origin per block to detect multi-swaps
mapping(address => uint256) private tokensFromPoolPerOrigin;
event FeesReceived(uint256 amount);
constructor(
string memory _name,
string memory _symbol,
address _creator,
address _platform,
uint256 _launchPeriod
) ERC20(_name, _symbol) {
platform = _platform;
creator = _creator;
_owner = address(0);
launchBlock = block.number;
LAUNCH_PERIOD = _launchPeriod;
uint256 totalTokens = 1000000000 * 10 ** decimals();
maxTxAmount = (totalTokens * MAX_WALLET_PERCENTAGE) / 100;
_mint(_platform, totalTokens);
}
function _update(address from, address to, uint256 value) internal override {
if (block.number > launchBlock && block.number <= launchBlock + LAUNCH_PERIOD) {
// Get pool address for exemption
if (from == pool && to != platform && to != creator) {
tokensFromPoolPerOrigin[tx.origin] += value;
require(
tokensFromPoolPerOrigin[tx.origin] <= maxTxAmount*110/100,
"Keeping 2% pool Limits In Kontrol"
);
}
if (to != creator && to != platform && to != pool && from != address(0)) {
require(
balanceOf(to) + value <= maxTxAmount,
"Max wallet limit exceeded during launch period"
);
}
}
// Block all buys at launch block except exempted transfers
if (block.number == launchBlock &&
from != address(0) &&
to != platform &&
from != platform &&
!(from == platform && to == creator)) { // Only platform can send to creator
revert("No buys allowed during launch block!");
}
super._update(from, to, value);
}
function isLaunchPeriodActive() public view returns (bool) {
return block.number <= launchBlock + LAUNCH_PERIOD;
}
// Returns address(0) so on-chain tools (Etherscan, token scanners) report ownership
// as renounced. _owner is hardcoded to zero in the constructor and is never reassignable.
function owner() public view returns (address) {
return _owner;
}
// Receive ETH from hook fees
receive() external payable {
emit FeesReceived(msg.value);
}
// Allow only Factory to withdraw accumulated fees
function withdrawFees() external returns (uint256 balance) {
require(msg.sender == platform, "Only factory can withdraw");
balance = address(this).balance;
require(balance > 0, "No fees to withdraw");
(bool success, ) = payable(platform).call{value: balance}("");
require(success, "Fee withdrawal failed");
}
function changeCreator(address newCreator) external {
require(msg.sender == platform, "Only platform can change creator"); // Updating Fee Receiver
creator = newCreator;
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "_klikHook",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"name": "ReentrancyGuardReentrantCall",
"type": "error",
"inputs": []
},
{
"name": "ERC20TokenCreated",
"type": "event",
"inputs": [
{
"name": "tokenAddress",
"type": "address",
"indexed": false,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "KlikHookUpdated",
"type": "event",
"inputs": [
{
"name": "oldHook",
"type": "address",
"indexed": false,
"internalType": "address"
},
{
"name": "newHook",
"type": "address",
"indexed": false,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "TokenPurchased",
"type": "event",
"inputs": [
{
"name": "buyer",
"type": "address",
"indexed": false,
"internalType": "address"
},
{
"name": "tokenOut",
"type": "address",
"indexed": false,
"internalType": "address"
},
{
"name": "ethSpent",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "tokensReceived",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "POOL_MANAGER",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "POSITION_MANAGER",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "STATE_VIEW",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "UNIVERSAL_ROUTER",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "WETH",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "changeTokenFeeReceiver",
"type": "function",
"inputs": [
{
"name": "tokenAddress",
"type": "address",
"internalType": "address"
},
{
"name": "newCreator",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "collectFees",
"type": "function",
"inputs": [
{
"name": "tokenAddress",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "ethCollected",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "createLiquidityConfig",
"type": "function",
"inputs": [
{
"name": "_sqrtPriceX96",
"type": "uint160",
"internalType": "uint160"
},
{
"name": "_tickLower",
"type": "int24",
"internalType": "int24"
},
{
"name": "_tickUpper",
"type": "int24",
"internalType": "int24"
},
{
"name": "_amount0Desired",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "_amount1Desired",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "_virtualAmount",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "_penaltyMultiplier",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "configId",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "creatorTokens",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
},
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "deleteLiquidityConfig",
"type": "function",
"inputs": [
{
"name": "_configId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "deployCoin",
"type": "function",
"inputs": [
{
"name": "_name",
"type": "string",
"internalType": "string"
},
{
"name": "_symbol",
"type": "string",
"internalType": "string"
},
{
"name": "_metadata",
"type": "string",
"internalType": "string"
},
{
"name": "salt",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "configId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "tokensReceived",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "payable"
},
{
"name": "deployCoinEnabled",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "deployedTokens",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "tokenAddress",
"type": "address",
"internalType": "address"
},
{
"name": "name",
"type": "string",
"internalType": "string"
},
{
"name": "symbol",
"type": "string",
"internalType": "string"
},
{
"name": "deployer",
"type": "address",
"internalType": "address"
},
{
"name": "time",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "metadata",
"type": "string",
"internalType": "string"
},
{
"name": "marketCapInETH",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "totalFeesGenerated",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "getAllTokensByCreator",
"type": "function",
"inputs": [
{
"name": "_creator",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "address[]",
"internalType": "address[]"
}
],
"stateMutability": "view"
},
{
"name": "getDeploysByPage",
"type": "function",
"inputs": [
{
"name": "page",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "order",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "tuple[]",
"components": [
{
"name": "tokenAddress",
"type": "address",
"internalType": "address"
},
{
"name": "name",
"type": "string",
"internalType": "string"
},
{
"name": "symbol",
"type": "string",
"internalType": "string"
},
{
"name": "deployer",
"type": "address",
"internalType": "address"
},
{
"name": "time",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "metadata",
"type": "string",
"internalType": "string"
},
{
"name": "marketCapInETH",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "totalFeesGenerated",
"type": "uint256",
"internalType": "uint256"
}
],
"internalType": "struct Factory.TokenInfo[]"
}
],
"stateMutability": "view"
},
{
"name": "getLiquidityConfig",
"type": "function",
"inputs": [
{
"name": "_configId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "tuple",
"components": [
{
"name": "sqrtPriceX96",
"type": "uint160",
"internalType": "uint160"
},
{
"name": "tickLower",
"type": "int24",
"internalType": "int24"
},
{
"name": "tickUpper",
"type": "int24",
"internalType": "int24"
},
{
"name": "amount0Desired",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "amount1Desired",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "virtualAmount",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "penaltyMultiplier",
"type": "uint256",
"internalType": "uint256"
}
],
"internalType": "struct Factory.LiquidityConfig"
}
],
"stateMutability": "view"
},
{
"name": "getMarketCap",
"type": "function",
"inputs": [
{
"name": "tokenAddress",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "marketCapETH",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "getPenalty",
"type": "function",
"inputs": [
{
"name": "ethAmount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "pure"
},
{
"name": "getTokenBytecode",
"type": "function",
"inputs": [
{
"name": "_name",
"type": "string",
"internalType": "string"
},
{
"name": "_symbol",
"type": "string",
"internalType": "string"
},
{
"name": "creator",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "bytecode",
"type": "bytes",
"internalType": "bytes"
}
],
"stateMutability": "view"
},
{
"name": "getTokenFeesGenerated",
"type": "function",
"inputs": [
{
"name": "tokenAddress",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "getTokenPrice",
"type": "function",
"inputs": [
{
"name": "tokenAddress",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "poolIdBytes",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "sqrtPrice",
"type": "uint160",
"internalType": "uint160"
},
{
"name": "calculatedPrice",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "marketCapETH",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "klikHook",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "launchPeriod",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "liquidityConfigCount",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "liquidityConfigs",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "sqrtPriceX96",
"type": "uint160",
"internalType": "uint160"
},
{
"name": "tickLower",
"type": "int24",
"internalType": "int24"
},
{
"name": "tickUpper",
"type": "int24",
"internalType": "int24"
},
{
"name": "amount0Desired",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "amount1Desired",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "virtualAmount",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "penaltyMultiplier",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "platformController",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "setItemsPerPage",
"type": "function",
"inputs": [
{
"name": "_itemsPerPage",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setKlikHook",
"type": "function",
"inputs": [
{
"name": "_newHook",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setLaunchPeriod",
"type": "function",
"inputs": [
{
"name": "_blocks",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "toggleDeployCoin",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "tokenCount",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "tokenFeesGenerated",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "tokenHook",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "tokenInfoByAddress",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "tokenAddress",
"type": "address",
"internalType": "address"
},
{
"name": "name",
"type": "string",
"internalType": "string"
},
{
"name": "symbol",
"type": "string",
"internalType": "string"
},
{
"name": "deployer",
"type": "address",
"internalType": "address"
},
{
"name": "time",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "metadata",
"type": "string",
"internalType": "string"
},
{
"name": "marketCapInETH",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "totalFeesGenerated",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "updateLiquidityConfig",
"type": "function",
"inputs": [
{
"name": "_configId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "_sqrtPriceX96",
"type": "uint160",
"internalType": "uint160"
},
{
"name": "_tickLower",
"type": "int24",
"internalType": "int24"
},
{
"name": "_tickUpper",
"type": "int24",
"internalType": "int24"
},
{
"name": "_amount0Desired",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "_amount1Desired",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "_virtualAmount",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "_penaltyMultiplier",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "withdrawFeesETH",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "withdrawFeesWETH",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "receive",
"stateMutability": "payable"
}
]0x60806040525f600281905560fa600555600980546001600160a01b03199081167358daec3116aae6d93017baaea7749052e8a04fa717909155600a80548216738366a39cc670b4001a1121b8f6a443a643e40951179055600b805490911673f3334192d15450cdd385c8b70e03f9a6bd9e673b179055600c805474018876789976decbfcbbbe364623c63652db8c09046001600160a81b0319909116179055600e5561012c600f553480156100b2575f5ffd5b50604051615e74380380615e748339810160408190526100d1916106f3565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005f01819055503360035f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508060045f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506040518060e001604052806d94a485ed7c515c391ce506a3c4f66001600160a01b03168152602001620d899f1960020b81526020016203377060020b81526020015f81526020016b033b2e3c9fd0803ce800000081526020016709935f581f05000081526020015f815250600d5f5f81526020019081526020015f205f820151815f015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151815f0160146101000a81548162ffffff021916908360020b62ffffff1602179055506040820151815f0160176101000a81548162ffffff021916908360020b62ffffff160217905550606082015181600101556080820151816002015560a0820151816003015560c082015181600401559050506040518060e001604052806d7b86bec8b03d1b4fa773ae726cf56001600160a01b03168152602001620d899f1960020b81526020016203296060020b81526020015f81526020016b033b2e3c9fd0803ce80000008152602001670de0b6b3a764000081526020015f815250600d5f600181526020019081526020015f205f820151815f015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151815f0160146101000a81548162ffffff021916908360020b62ffffff1602179055506040820151815f0160176101000a81548162ffffff021916908360020b62ffffff160217905550606082015181600101556080820151816002015560a0820151816003015560c082015181600401559050506040518060e001604052806d5758745d8c261bc3ba723b8a876d6001600160a01b03168152602001620d899f1960020b815260200162030e0860020b81526020015f81526020016b033b2e3c9fd0803ce80000008152602001671bc16d674ec8000081526020015f815250600d5f600281526020019081526020015f205f820151815f015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151815f0160146101000a81548162ffffff021916908360020b62ffffff1602179055506040820151815f0160176101000a81548162ffffff021916908360020b62ffffff160217905550606082015181600101556080820151816002015560a0820151816003015560c082015181600401559050506040518060e001604052806d373d8b65f537746f781c01b740426001600160a01b03168152602001620d899f1960020b81526020016202ea1860020b81526020015f81526020016b033b2e3c9fd0803ce80000008152602001674563918244f4000081526020015f815250600d5f600381526020019081526020015f205f820151815f015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151815f0160146101000a81548162ffffff021916908360020b62ffffff1602179055506040820151815f0160176101000a81548162ffffff021916908360020b62ffffff160217905550606082015181600101556080820151816002015560a0820151816003015560c082015181600401559050506040518060e001604052806d270ffdbe72847b89e899461529a96001600160a01b03168152602001620d899f1960020b81526020016202cf8860020b81526020015f81526020016b033b2e3c9fd0803ce80000008152602001678ac7230489e8000081526020015f815250600d5f600481526020019081526020015f205f820151815f015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151815f0160146101000a81548162ffffff021916908360020b62ffffff1602179055506040820151815f0160176101000a81548162ffffff021916908360020b62ffffff160217905550606082015181600101556080820151816002015560a0820151816003015560c082015181600401559050506005600e8190555050610720565b5f60208284031215610703575f5ffd5b81516001600160a01b0381168114610719575f5ffd5b9392505050565b6157478061072d5f395ff3fe608060405260043610610215575f3560e01c806396e596821161011e578063b9ea0aea116100a8578063d146d31d1161006d578063d146d31d146107a4578063db3fa4cc146107c3578063e8dd7fc3146107e2578063ec81aadb14610809578063f7b64c8314610828575f5ffd5b8063b9ea0aea146105fe578063bb7a397214610680578063bde58ab414610695578063c69d61b6146106b4578063d02641a01461075d575f5ffd5b8063a6a9cb13116100ee578063a6a9cb1314610546578063aa4cfccd14610565578063aced8d811461058c578063ad5c4648146105b8578063b97ec75c146105df575f5ffd5b806396e59682146104df5780639f181b5e146104fe5780639f9baaaa14610513578063a480ca7914610527575f5ffd5b80635bdb9d6a1161019f57806375f38c0b1161016f57806375f38c0b146104225780637ca49de0146104415780637ff4cffb146104755780638d99aeb014610494578063964a0495146104c0575f5ffd5b80635bdb9d6a1461037857806362308e85146103ac57806363c63d2d146103d357806367587046146103f2575f5ffd5b80634101659e116101e55780634101659e146102d15780634fdc5b72146102e4578063521078b5146103035780635442a67f1461032f5780635a3afecf14610362575f5ffd5b80631bea83fe146102205780632486b046146102645780632ef780d4146102875780633bcc75f6146102b2575f5ffd5b3661021c57005b5f5ffd5b34801561022b575f5ffd5b506102477358daec3116aae6d93017baaea7749052e8a04fa781565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561026f575f5ffd5b50610279600e5481565b60405190815260200161025b565b348015610292575f5ffd5b506102796102a1366004613375565b60076020525f908152604090205481565b3480156102bd575f5ffd5b50600354610247906001600160a01b031681565b6102796102df36600461342f565b61083c565b3480156102ef575f5ffd5b50600454610247906001600160a01b031681565b34801561030e575f5ffd5b5061032261031d366004613375565b610e07565b60405161025b91906134ce565b34801561033a575f5ffd5b5061034e610349366004613375565b610e7a565b60405161025b989796959493929190613547565b34801561036d575f5ffd5b50610376611065565b005b348015610383575f5ffd5b50610279610392366004613375565b6001600160a01b03165f9081526007602052604090205490565b3480156103b7575f5ffd5b50610247738366a39cc670b4001a1121b8f6a443a643e4095181565b3480156103de575f5ffd5b506103766103ed366004613375565b611243565b3480156103fd575f5ffd5b50600c5461041290600160a01b900460ff1681565b604051901515815260200161025b565b34801561042d575f5ffd5b5061027961043c3660046135cd565b6112ce565b34801561044c575f5ffd5b5061024761045b366004613375565b60086020525f90815260409020546001600160a01b031681565b348015610480575f5ffd5b5061037661048f366004613636565b611443565b34801561049f575f5ffd5b506104b36104ae36600461364d565b61152c565b60405161025b91906136c5565b3480156104cb575f5ffd5b506103766104da3660046136d7565b6115a0565b3480156104ea575f5ffd5b506102796104f9366004613636565b61171e565b348015610509575f5ffd5b5061027960025481565b34801561051e575f5ffd5b5061037661178e565b348015610532575f5ffd5b50610279610541366004613375565b61180f565b348015610551575f5ffd5b50610376610560366004613636565b611a4f565b348015610570575f5ffd5b5061024773f3334192d15450cdd385c8b70e03f9a6bd9e673b81565b348015610597575f5ffd5b506105ab6105a636600461370e565b611b6c565b60405161025b919061372e565b3480156105c3575f5ffd5b50610247730bd7d308f8e1639fab988df18a8011f41eacad7381565b3480156105ea575f5ffd5b506103766105f9366004613636565b6120ae565b348015610609575f5ffd5b5061061d610618366004613636565b6120dd565b60405161025b91905f60e08201905060018060a01b038351168252602083015160020b6020830152604083015160020b6040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015292915050565b34801561068b575f5ffd5b50610279600f5481565b3480156106a0575f5ffd5b506103766106af366004613820565b6121ba565b3480156106bf575f5ffd5b506107186106ce366004613636565b600d6020525f908152604090208054600182015460028084015460038501546004909501546001600160a01b03851695600160a01b8604840b95600160b81b900490930b93929087565b604080516001600160a01b039098168852600296870b60208901529490950b938601939093526060850191909152608084015260a083015260c082015260e00161025b565b348015610768575f5ffd5b5061077c610777366004613375565b61232a565b604080519485526001600160a01b03909316602085015291830152606082015260800161025b565b3480156107af575f5ffd5b506102796107be366004613375565b612579565b3480156107ce575f5ffd5b506102476107dd366004613892565b612583565b3480156107ed575f5ffd5b50610247738876789976decbfcbbbe364623c63652db8c090481565b348015610814575f5ffd5b5061034e610823366004613636565b6125b7565b348015610833575f5ffd5b506103766125e2565b600c545f90600160a01b900460ff166108ab5760405162461bcd60e51b815260206004820152602660248201527f546f6b656e206465706c6f796d656e742069732063757272656e746c792064696044820152651cd8589b195960d21b60648201526084015b60405180910390fd5b600e5482106108fc5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c697175696469747920636f6e666967204944000000000060448201526064016108a2565b5f8387873330600f5460405161091190613351565b61091f9594939291906138bc565b8190604051809103905ff590508015801561093c573d5f5f3e3d5ffd5b506040516001600160a01b038216815290915081907f60122e78030aba0a2e4a67adb3e52b411343cc51778f919095d3fe394090c1b29060200160405180910390a1610988818561262d565b5f92503415610bf1575f848152600d60209081526040808320815160e08101835281546001600160a01b0381168252600160a01b8104600290810b95830195909552600160b81b9004840b9281019290925260018101546060830152918201546080820152600382015460a082015260049091015460c082015290610a0c3461171e565b90505f60648360c0015183610a219190613919565b610a2b9190613930565b6040516370a0823160e01b815230600482015290915061271034808402919091049190829003905f906001600160a01b038816906370a0823190602401602060405180830381865afa158015610a83573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa7919061394f565b9050610ab38783612adc565b6040516370a0823160e01b81523060048201525f906001600160a01b038916906370a0823190602401602060405180830381865afa158015610af7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b1b919061394f565b9050610b278282613966565b60405163a9059cbb60e01b815233600482015260248101829052909a506001600160a01b0389169063a9059cbb906044016020604051808303815f875af1158015610b74573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b989190613979565b50604080513381526001600160a01b038a166020820152908101849052606081018b90527f8daf503382665d950e449b86172be5222275c90f4ddf69c29fdaa8237a562a6d9060800160405180910390a1505050505050505b60025460408051610100810182526001600160a01b03848116825260208083018d81528385018d905233606085015242608085015260a084018c90525f60c0850181905260e0850181905286815291829052939020825181546001600160a01b03191692169190911781559151909182916001820190610c719082613a27565b5060408201516002820190610c869082613a27565b5060608201516003820180546001600160a01b0319166001600160a01b039092169190911790556080820151600482015560a08201516005820190610ccb9082613a27565b5060c0820151600682015560e0909101516007909101556001600160a01b038381165f908152600160208181526040909220845181546001600160a01b031916941693909317835590830151839291820190610d279082613a27565b5060408201516002820190610d3c9082613a27565b5060608201516003820180546001600160a01b0319166001600160a01b039092169190911790556080820151600482015560a08201516005820190610d819082613a27565b5060c082015160068281019190915560e0909201516007909101556004546001600160a01b039485165f8181526008602090815260408083208054999095166001600160a01b0319998a16179094553382529384529182208054600181810183559184529390922090920180549095169091179093555001600255505b95945050505050565b6001600160a01b0381165f90815260066020908152604091829020805483518184028101840190945280845260609392830182828015610e6e57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610e50575b50505050509050919050565b600160208190525f9182526040909120805491810180546001600160a01b0390931692610ea690613998565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed290613998565b8015610f1d5780601f10610ef457610100808354040283529160200191610f1d565b820191905f5260205f20905b815481529060010190602001808311610f0057829003601f168201915b505050505090806002018054610f3290613998565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5e90613998565b8015610fa95780601f10610f8057610100808354040283529160200191610fa9565b820191905f5260205f20905b815481529060010190602001808311610f8c57829003601f168201915b505050506003830154600484015460058501805494956001600160a01b039093169491935090610fd890613998565b80601f016020809104026020016040519081016040528092919081815260200182805461100490613998565b801561104f5780601f106110265761010080835404028352916020019161104f565b820191905f5260205f20905b81548152906001019060200180831161103257829003601f168201915b5050505050908060060154908060070154905088565b6003546001600160a01b0316331461108f5760405162461bcd60e51b81526004016108a290613ae6565b6040516370a0823160e01b81523060048201525f90730bd7d308f8e1639fab988df18a8011f41eacad73906370a0823190602401602060405180830381865afa1580156110de573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611102919061394f565b90505f81116111495760405162461bcd60e51b81526020600482015260136024820152724e6f205745544820746f20776974686472617760681b60448201526064016108a2565b604051632e1a7d4d60e01b815260048101829052730bd7d308f8e1639fab988df18a8011f41eacad7390632e1a7d4d906024015f604051808303815f87803b158015611193575f5ffd5b505af11580156111a5573d5f5f3e3d5ffd5b505050505f336001600160a01b0316826040515b5f6040518083038185875af1925050503d805f81146111f3576040519150601f19603f3d011682016040523d82523d5f602084013e6111f8565b606091505b505090508061123f5760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b60448201526064016108a2565b5050565b6003546001600160a01b0316331461126d5760405162461bcd60e51b81526004016108a290613ae6565b600480546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb5a0bbe76e5292b485f32f38ea22c592308b1443a887d4c46e34973e0732ff6b910160405180910390a15050565b6003545f906001600160a01b031633146113475760405162461bcd60e51b815260206004820152603460248201527f4f6e6c7920706c6174666f726d20636f6e74726f6c6c65722063616e20637265604482015273617465206c697175696469747920636f6e66696760601b60648201526084016108a2565b6101f48211156113695760405162461bcd60e51b81526004016108a290613b1d565b50600e80546040805160e0810182526001600160a01b038b8116825260028b810b60208085019182528c830b858701908152606086018d8152608087018d815260a088018d815260c089018d81525f8c8152600d909652998520985189549651945198166001600160b81b031990961695909517600160a01b62ffffff948516021762ffffff60b81b1916600160b81b9390971692909202959095178655935160018601559251918401919091555160038301559151600490910155825491929061143383613b64565b9190505550979650505050505050565b6003546001600160a01b031633146114b85760405162461bcd60e51b815260206004820152603260248201527f4f6e6c7920706c6174666f726d20636f6e74726f6c6c65722063616e206368616044820152716e6765206974656d7320706572207061676560701b60648201526084016108a2565b5f811180156114c957506103e88111155b6115275760405162461bcd60e51b815260206004820152602960248201527f4974656d73207065722070616765206d757374206265206265747765656e2031604482015268020616e6420313030360bc1b60648201526084016108a2565b600555565b60606040518060200161153e90613351565b601f1982820381018352601f909101166040819052600f5461156a9187918791879130916020016138bc565b60408051601f19818403018152908290526115889291602001613b93565b60405160208183030381529060405290509392505050565b5f826001600160a01b03166302d05d3f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115dd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116019190613ba7565b6003549091506001600160a01b03163314806116255750336001600160a01b038216145b6116625760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b60448201526064016108a2565b6001600160a01b0382166116c35760405162461bcd60e51b815260206004820152602260248201527f4e65772063726561746f722063616e6e6f74206265207a65726f206164647265604482015261737360f01b60648201526084016108a2565b6040516374580e2f60e01b81526001600160a01b0383811660048301528416906374580e2f906024015f604051808303815f87803b158015611703575f5ffd5b505af1158015611715573d5f5f3e3d5ffd5b50505050505050565b5f66b1a2bc2ec5000082101561173557505f919050565b670429d069189e0000821061174d5750611388919050565b6146505f61176266b1a2bc2ec5000085613966565b90505f670de0b6b3a76400006117788484613919565b6117829190613930565b610dfe906101f4613bc2565b6003546001600160a01b031633146117b85760405162461bcd60e51b81526004016108a290613ae6565b47806117fb5760405162461bcd60e51b81526020600482015260126024820152714e6f2045544820746f20776974686472617760701b60448201526064016108a2565b5f336001600160a01b0316826040516111b9565b5f611818612da1565b5f826001600160a01b03166302d05d3f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611855573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118799190613ba7565b9050336001600160a01b038216148061189c57506003546001600160a01b031633145b6118d95760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b60448201526064016108a2565b5f479050836001600160a01b031663476343ee6040518163ffffffff1660e01b81526004016020604051808303815f875af115801561191a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061193e919061394f565b504761194a8282613966565b93508315611a1e576001600160a01b0385165f9081526007602052604081208054869290611979908490613bc2565b90915550506040515f906001600160a01b0385169086908381818185875af1925050503d805f81146119c6576040519150601f19603f3d011682016040523d82523d5f602084013e6119cb565b606091505b5050905080611a1c5760405162461bcd60e51b815260206004820152601e60248201527f455448207472616e7366657220746f2063726561746f72206661696c6564000060448201526064016108a2565b505b505050611a4a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b919050565b6003546001600160a01b03163314611ac65760405162461bcd60e51b815260206004820152603460248201527f4f6e6c7920706c6174666f726d20636f6e74726f6c6c65722063616e2064656c604482015273657465206c697175696469747920636f6e66696760601b60648201526084016108a2565b600e548110611ae75760405162461bcd60e51b81526004016108a290613bd5565b805f03611b365760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742064656c6574652064656661756c7420636f6e6669670000000060448201526064016108a2565b5f908152600d6020526040812080546001600160d01b031916815560018101829055600281018290556003810182905560040155565b60605f60025411611bb45760405162461bcd60e51b8152602060048201526012602482015271139bc81d1bdad95b9cc819195c1b1bde595960721b60448201526064016108a2565b5f6005546001600554600254611bca9190613bc2565b611bd49190613966565b611bde9190613930565b9050808410611c235760405162461bcd60e51b815260206004820152601160248201527050616765206f7574206f662072616e676560781b60448201526064016108a2565b5f8080858103611cac57600554611c3b886001613bc2565b611c459190613919565b60025411611c53575f611c78565b600554611c61886001613bc2565b611c6b9190613919565b600254611c789190613966565b925060055487611c889190613919565b600254611c959190613966565b9150600254821115611ca75760025491505b611cdb565b600554611cb99088613919565b925060055483611cc99190613bc2565b9150600254821115611cdb5760025491505b5f611ce68484613966565b67ffffffffffffffff811115611cfe57611cfe613390565b604051908082528060200260200182016040528015611d8457816020015b611d716040518061010001604052805f6001600160a01b0316815260200160608152602001606081526020015f6001600160a01b031681526020015f8152602001606081526020015f81526020015f81525090565b815260200190600190039081611d1c5790505b509050835b838110156120a0575f8815611d9e5781611dbd565b611da88683613966565b611db3600187613966565b611dbd9190613966565b5f818152602081815260408083208151610100810190925280546001600160a01b03168252600181018054959650939491939092840191611dfd90613998565b80601f0160208091040260200160405190810160405280929190818152602001828054611e2990613998565b8015611e745780601f10611e4b57610100808354040283529160200191611e74565b820191905f5260205f20905b815481529060010190602001808311611e5757829003601f168201915b50505050508152602001600282018054611e8d90613998565b80601f0160208091040260200160405190810160405280929190818152602001828054611eb990613998565b8015611f045780601f10611edb57610100808354040283529160200191611f04565b820191905f5260205f20905b815481529060010190602001808311611ee757829003601f168201915b505050918352505060038201546001600160a01b0316602082015260048201546040820152600582018054606090920191611f3e90613998565b80601f0160208091040260200160405190810160405280929190818152602001828054611f6a90613998565b8015611fb55780601f10611f8c57610100808354040283529160200191611fb5565b820191905f5260205f20905b815481529060010190602001808311611f9857829003601f168201915b505050505081526020016006820154815260200160078201548152505090505f611fe1825f0151612579565b9050604051806101000160405280835f01516001600160a01b03168152602001836020015181526020018360400151815260200183606001516001600160a01b03168152602001836080015181526020018360a00151815260200182815260200160075f855f01516001600160a01b03166001600160a01b031681526020019081526020015f205481525085878061207890613b64565b98508151811061208a5761208a613c00565b6020908102919091010152505050600101611d89565b509450505050505b92915050565b6003546001600160a01b031633146120d85760405162461bcd60e51b81526004016108a290613ae6565b600f55565b6121256040518060e001604052805f6001600160a01b031681526020015f60020b81526020015f60020b81526020015f81526020015f81526020015f81526020015f81525090565b600e5482106121465760405162461bcd60e51b81526004016108a290613bd5565b505f908152600d6020908152604091829020825160e08101845281546001600160a01b0381168252600160a01b8104600290810b94830194909452600160b81b9004830b9381019390935260018101546060840152908101546080830152600381015460a08301526004015460c082015290565b6003546001600160a01b031633146122315760405162461bcd60e51b815260206004820152603460248201527f4f6e6c7920706c6174666f726d20636f6e74726f6c6c65722063616e20757064604482015273617465206c697175696469747920636f6e66696760601b60648201526084016108a2565b600e5488106122525760405162461bcd60e51b81526004016108a290613bd5565b6101f48111156122745760405162461bcd60e51b81526004016108a290613b1d565b6040805160e0810182526001600160a01b039889168152600297880b602080830191825297890b828401908152606083019788526080830196875260a0830195865260c083019485525f9b8c52600d90985291909920985189549151965198166001600160b81b031990911617600160a01b62ffffff968716021762ffffff60b81b1916600160b81b95909716949094029590951786559051600186015551918401919091559051600383015551600490910155565b6001600160a01b038181165f908152600860205260408120549091829182918291829116612363576004546001600160a01b031661237e565b6001600160a01b038087165f90815260086020526040902054165b90505f6040518060a001604052805f6001600160a01b03168152602001886001600160a01b031681526020015f62ffffff16815260200160c860020b8152602001836001600160a01b031681525090505f816040516020016123e09190613c57565b60408051808303601f19018152908290528051602090910120600b54633205590760e21b8352600483018290529098508892506001600160a01b03169063c815641c90602401608060405180830381865afa92505050801561245f575060408051601f3d908101601f1916820190925261245c91810190613c77565b60015b61247557505f9450849350839250612572915050565b8399505f846001600160a01b03161115612561576001600160a01b038416600160601b5f826124ac83670de0b6b3a7640000613919565b6124b69190613930565b9050826124c38383613919565b6124cd9190613930565b9b505f8f6001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561250c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612530919061394f565b9050670de0b6b3a7640000612545828f613919565b61254f9190613930565b9b505050505050505050505050612572565b50505050505f945084935083925050505b9193509193565b5f610dfe8261232a565b6006602052815f5260405f20818154811061259c575f80fd5b5f918252602090912001546001600160a01b03169150829050565b5f60208190529081526040902080546001820180546001600160a01b039092169291610ea690613998565b6003546001600160a01b0316331461260c5760405162461bcd60e51b81526004016108a290613ae6565b600c805460ff60a01b198116600160a01b9182900460ff1615909102179055565b5f818152600d6020908152604091829020825160e08101845281546001600160a01b038082168352600160a01b8204600290810b95840195909552600160b81b909104840b8286015260018301546060830152928201546080820152600382015460a082015260049182015460c0820152925163095ea7b360e01b81526e22d473030f116ddee9f6b43ac78ba3918101919091525f196024820152849182169063095ea7b3906044016020604051808303815f875af11580156126f2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127169190613979565b506040516387517c4560e01b81526001600160a01b0380861660048301527358daec3116aae6d93017baaea7749052e8a04fa76024830152604482015265ffffffffffff60648201526e22d473030f116ddee9f6b43ac78ba3906387517c45906084015f604051808303815f87803b158015612790575f5ffd5b505af11580156127a2573d5f5f3e3d5ffd5b50506040516387517c4560e01b81526001600160a01b038088166004830152738366a39cc670b4001a1121b8f6a443a643e409516024830152604482015265ffffffffffff60648201526e22d473030f116ddee9f6b43ac78ba392506387517c4591506084015f604051808303815f87803b15801561281f575f5ffd5b505af1158015612831573d5f5f3e3d5ffd5b50506040805160a0810182525f8082526001600160a01b0389811660208401528284019190915260c860608301526004805482166080840152600a548851945163313b65df60e11b81529396509091169350636276cbbe9261289592869201613ccd565b6020604051808303815f875af11580156128b1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128d59190613cf3565b505f6128f7845f01518560200151866040015187606001518860800151612dcf565b60408051600160f91b6020820152600d60f81b602182015281516002818303810182525f602284018181526042850183815260a2860190965295965091949391926062015b606081526020019060019003908161293c5790505090508487602001518860400151868a606001518b6080015161dead88604051602001612984989796959493929190613d0e565b604051602081830303815290604052815f815181106129a5576129a5613c00565b6020026020010181905250845f015185602001516040516020016129df9291906001600160a01b0392831681529116602082015260400190565b60405160208183030381529060405281600181518110612a0157612a01613c00565b6020908102919091018101919091526009546040516001600160a01b039091169163dd46508f91612a36918791869101613dd6565b60408051601f19818403018152919052612a51426078613bc2565b6040518363ffffffff1660e01b8152600401612a6e929190613dfa565b5f604051808303815f87803b158015612a85575f5ffd5b505af1925050508015612a96575060015b612ad1573d808015612ac3576040519150601f19603f3d011682016040523d82523d5f602084013e612ac8565b606091505b50805160208201fd5b505050505050505050565b6040805160a0810182525f8082526001600160a01b0385811660208085019190915283850183905260c8606085015260045490911660808401528351600160fc1b91810191909152835160018183038101825260218301818152606184019096529394909390916041015b6060815260200190600190039081612b4757505060408051600360f91b6020820152600360fa1b6021820152600f60f81b602282015281516003818303810182526023830181815260a38401909452939450925f92916043015b6060815260200190600190039081612ba15750506040805160a08101825287815260016020808301919091526001600160801b038a16828401525f606083018190528351808301855290815260808301529151929350612c0392909101613e1b565b604051602081830303815290604052815f81518110612c2457612c24613c00565b6020026020010181905250845f015186604051602001612c599291906001600160a01b03929092168252602082015260400190565b60405160208183030381529060405281600181518110612c7b57612c7b613c00565b602002602001018190525084602001515f604051602001612cba9291906001600160a01b039290921682526001600160801b0316602082015260400190565b60405160208183030381529060405281600281518110612cdc57612cdc613c00565b60200260200101819052508181604051602001612cfa929190613dd6565b604051602081830303815290604052835f81518110612d1b57612d1b613c00565b60209081029190910101525f612d32426078613bc2565b600c54604051630d64d59360e21b81529192506001600160a01b031690633593564c908990612d6990899089908790600401613e7b565b5f604051808303818588803b158015612d80575f5ffd5b505af1158015612d92573d5f5f3e3d5ffd5b50505050505050505050505050565b612da9612df7565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f612ded86612ddd87612e3b565b612de687612e3b565b86866130f3565b9695505050505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0054600203612e3957604051633ee5aeb560e01b815260040160405180910390fd5b565b60020b5f60ff82901d80830118620d89e8811115612e6457612e646345c3193d60e11b846131a8565b7001fffcb933bd6fad37aa2d162d1a5940016001821602600160801b186002821615612ea0576ffff97272373d413259a46990580e213a0260801c5b6004821615612ebf576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615612ede576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615612efd576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615612f1c576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615612f3b576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615612f5a576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612f7a576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612f9a576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612fba576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612fda576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612ffa576fd097f3bdfd2022b8845ad8f792aa58250260801c5b61200082161561301a576fa9f746462d870fdf8a65dc1f90e061e50260801c5b61400082161561303a576f70d869a156d2a1b890bb3df62baf32f70260801c5b61800082161561305a576f31be135f97d08fd981231505542fcfa60260801c5b6201000082161561307b576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b6202000082161561309b576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156130ba576d2216e584f5fa1ea926041bedfe980260801c5b620800008216156130d7576b048a170391f7dc42444e8fa20260801c5b5f8413156130e3575f19045b63ffffffff0160201c9392505050565b5f836001600160a01b0316856001600160a01b03161115613112579293925b846001600160a01b0316866001600160a01b03161161313d576131368585856131b7565b9050610dfe565b836001600160a01b0316866001600160a01b0316101561319d575f6131638786866131b7565b90505f61317187898661322a565b9050806001600160801b0316826001600160801b0316106131925780613194565b815b92505050610dfe565b612ded85858461322a565b815f528060020b60045260245ffd5b5f826001600160a01b0316846001600160a01b031611156131d6579192915b5f6131f8856001600160a01b0316856001600160a01b0316600160601b613267565b905061321f61321a848361320c8989613eb0565b6001600160a01b0316613267565b613303565b9150505b9392505050565b5f826001600160a01b0316846001600160a01b03161115613249579192915b61325f61321a83600160601b61320c8888613eb0565b949350505050565b5f838302815f1985870982811083820303915050808411613286575f5ffd5b805f0361329857508290049050613223565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b806001600160801b0381168114611a4a5760405162461bcd60e51b81526020600482015260126024820152716c6971756964697479206f766572666c6f7760701b60448201526064016108a2565b61184280613ed083390190565b6001600160a01b0381168114613372575f5ffd5b50565b5f60208284031215613385575f5ffd5b81356132238161335e565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126133b3575f5ffd5b813567ffffffffffffffff8111156133cd576133cd613390565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156133fc576133fc613390565b604052818152838201602001851015613413575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f5f5f60a08688031215613443575f5ffd5b853567ffffffffffffffff811115613459575f5ffd5b613465888289016133a4565b955050602086013567ffffffffffffffff811115613481575f5ffd5b61348d888289016133a4565b945050604086013567ffffffffffffffff8111156134a9575f5ffd5b6134b5888289016133a4565b9598949750949560608101359550608001359392505050565b602080825282518282018190525f918401906040840190835b8181101561350e5783516001600160a01b03168352602093840193909201916001016134e7565b509095945050505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b0389168152610100602082018190525f9061356b9083018a613519565b828103604084015261357d818a613519565b6001600160a01b03891660608501526080840188905283810360a085015290506135a78187613519565b60c0840195909552505060e001529695505050505050565b8060020b8114613372575f5ffd5b5f5f5f5f5f5f5f60e0888a0312156135e3575f5ffd5b87356135ee8161335e565b965060208801356135fe816135bf565b9550604088013561360e816135bf565b969995985095966060810135965060808101359560a0820135955060c0909101359350915050565b5f60208284031215613646575f5ffd5b5035919050565b5f5f5f6060848603121561365f575f5ffd5b833567ffffffffffffffff811115613675575f5ffd5b613681868287016133a4565b935050602084013567ffffffffffffffff81111561369d575f5ffd5b6136a9868287016133a4565b92505060408401356136ba8161335e565b809150509250925092565b602081525f6132236020830184613519565b5f5f604083850312156136e8575f5ffd5b82356136f38161335e565b915060208301356137038161335e565b809150509250929050565b5f5f6040838503121561371f575f5ffd5b50508035926020909101359150565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561381457868503603f19018452815180516001600160a01b031686526020810151610100602088015261378f610100880182613519565b9050604082015187820360408901526137a88282613519565b91505060608201516137c560608901826001600160a01b03169052565b506080820151608088015260a082015187820360a08901526137e78282613519565b60c084810151908a015260e093840151939098019290925250506020938401939190910190600101613754565b50929695505050505050565b5f5f5f5f5f5f5f5f610100898b031215613838575f5ffd5b88359750602089013561384a8161335e565b9650604089013561385a816135bf565b9550606089013561386a816135bf565b979a969950949760808101359660a0820135965060c0820135955060e0909101359350915050565b5f5f604083850312156138a3575f5ffd5b82356138ae8161335e565b946020939093013593505050565b60a081525f6138ce60a0830188613519565b82810360208401526138e08188613519565b6001600160a01b03968716604085015294909516606083015250608001529392505050565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176120a8576120a8613905565b5f8261394a57634e487b7160e01b5f52601260045260245ffd5b500490565b5f6020828403121561395f575f5ffd5b5051919050565b818103818111156120a8576120a8613905565b5f60208284031215613989575f5ffd5b81518015158114613223575f5ffd5b600181811c908216806139ac57607f821691505b6020821081036139ca57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115613a225782821115613a2257805f5260205f20601f840160051c60208510156139fb57505f5b90810190601f840160051c035f5b81811015613a1e575f83820155600101613a09565b5050505b505050565b815167ffffffffffffffff811115613a4157613a41613390565b613a5581613a4f8454613998565b846139d0565b6020601f821160018114613a87575f8315613a705750848201515b5f19600385901b1c1916600184901b178455613adf565b5f84815260208120601f198516915b82811015613ab65787850151825560209485019460019092019101613a96565b5084821015613ad357868401515f19600387901b60f8161c191681555b505060018360011b0184555b5050505050565b60208082526018908201527f43616c6c6572206973206e6f7420636f6e74726f6c6c65720000000000000000604082015260600190565b60208082526027908201527f50656e616c7479206d756c7469706c696572206d757374206265206174206d6f6040820152667374203530302560c81b606082015260800190565b5f60018201613b7557613b75613905565b5060010190565b5f81518060208401855e5f93019283525090919050565b5f61325f613ba18386613b7c565b84613b7c565b5f60208284031215613bb7575f5ffd5b81516132238161335e565b808201808211156120a8576120a8613905565b602080825260119082015270125b9d985b1a590818dbdb999a59c81251607a1b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b60a081016120a88284613c14565b805162ffffff81168114611a4a575f5ffd5b5f5f5f5f60808587031215613c8a575f5ffd5b8451613c958161335e565b6020860151909450613ca6816135bf565b9250613cb460408601613c65565b9150613cc260608601613c65565b905092959194509250565b60c08101613cdb8285613c14565b6001600160a01b039290921660a09190910152919050565b5f60208284031215613d03575f5ffd5b8151613223816135bf565b613d18818a613c14565b8760020b60a08201528660020b60c08201526001600160801b03861660e0820152846101008201528361012082015260018060a01b0383166101408201526101806101608201525f613d6e610180830184613519565b9a9950505050505050505050565b5f82825180855260208501945060208160051b830101602085015f5b83811015613dca57601f19858403018852613db4838351613519565b6020988901989093509190910190600101613d98565b50909695505050505050565b604081525f613de86040830185613519565b828103602084015261321f8185613d7c565b604081525f613e0c6040830185613519565b90508260208301529392505050565b60208152613e2d602082018351613c14565b6020820151151560c08201526001600160801b0360408301511660e08201526001600160801b036060830151166101008201525f60808301516101208084015261325f610140840182613519565b606081525f613e8d6060830186613519565b8281036020840152613e9f8186613d7c565b915050826040830152949350505050565b6001600160a01b0382811682821603908111156120a8576120a861390556fe60c0604052738366a39cc670b4001a1121b8f6a443a643e4095160a052348015610027575f5ffd5b506040516118423803806118428339810160408190526100469161060d565b848460036100548382610729565b5060046100618282610729565b5050600580546001600160a01b038086166001600160a01b0319928316179092556006805492871692821692909217909155600780549091169055504360085560808190525f6100af601290565b6100ba90600a6108e0565b6100c890633b9aca006108f5565b905060646100d76002836108f5565b6100e1919061090c565b6009556100ee83826100f9565b50505050505061093e565b6001600160a01b0382166101275760405163ec442f0560e01b81525f60048201526024015b60405180910390fd5b6101325f8383610136565b5050565b600854431180156101565750608051600854610152919061092b565b4311155b156103465760a0516001600160a01b0316836001600160a01b031614801561018c57506005546001600160a01b03838116911614155b80156101a657506006546001600160a01b03838116911614155b1561025057325f908152600a6020526040812080548392906101c990849061092b565b90915550506009546064906101df90606e6108f5565b6101e9919061090c565b325f908152600a602052604090205411156102505760405162461bcd60e51b815260206004820152602160248201527f4b656570696e6720322520706f6f6c204c696d69747320496e204b6f6e74726f6044820152601b60fa1b606482015260840161011e565b6006546001600160a01b0383811691161480159061027c57506005546001600160a01b03838116911614155b801561029c575060a0516001600160a01b0316826001600160a01b031614155b80156102b057506001600160a01b03831615155b1561034657600954816102d7846001600160a01b03165f9081526020819052604090205490565b6102e1919061092b565b11156103465760405162461bcd60e51b815260206004820152602e60248201527f4d61782077616c6c6574206c696d697420657863656564656420647572696e6760448201526d081b185d5b98da081c195c9a5bd960921b606482015260840161011e565b6008544314801561035f57506001600160a01b03831615155b801561037957506005546001600160a01b03838116911614155b801561039357506005546001600160a01b03848116911614155b80156103c657506005546001600160a01b0384811691161480156103c457506006546001600160a01b038381169116145b155b1561041f5760405162461bcd60e51b8152602060048201526024808201527f4e6f206275797320616c6c6f77656420647572696e67206c61756e636820626c6044820152636f636b2160e01b606482015260840161011e565b61042a83838361042f565b505050565b6001600160a01b038316610459578060025f82825461044e919061092b565b909155506104c99050565b6001600160a01b0383165f90815260208190526040902054818110156104ab5760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640161011e565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166104e557600280548290039055610503565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161054891815260200190565b60405180910390a3505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112610578575f5ffd5b81516001600160401b0381111561059157610591610555565b604051601f8201601f19908116603f011681016001600160401b03811182821017156105bf576105bf610555565b6040528181528382016020018510156105d6575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b80516001600160a01b0381168114610608575f5ffd5b919050565b5f5f5f5f5f60a08688031215610621575f5ffd5b85516001600160401b03811115610636575f5ffd5b61064288828901610569565b602088015190965090506001600160401b0381111561065f575f5ffd5b61066b88828901610569565b94505061067a604087016105f2565b9250610688606087016105f2565b9150608086015190509295509295909350565b600181811c908216806106af57607f821691505b6020821081036106cd57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561042a578282111561042a57805f5260205f20601f840160051c60208510156106fe57505f5b90810190601f840160051c035f5b81811015610721575f8382015560010161070c565b505050505050565b81516001600160401b0381111561074257610742610555565b61075681610750845461069b565b846106d3565b6020601f821160018114610788575f83156107715750848201515b5f19600385901b1c1916600184901b1784556107e0565b5f84815260208120601f198516915b828110156107b75787850151825560209485019460019092019101610797565b50848210156107d457868401515f19600387901b60f8161c191681555b505060018360011b0184555b5050505050565b634e487b7160e01b5f52601160045260245ffd5b6001815b60018411156108365780850481111561081a5761081a6107e7565b600184161561082857908102905b60019390931c9280026107ff565b935093915050565b5f8261084c575060016108da565b8161085857505f6108da565b816001811461086e576002811461087857610894565b60019150506108da565b60ff841115610889576108896107e7565b50506001821b6108da565b5060208310610133831016604e8410600b84101617156108b7575081810a6108da565b6108c35f1984846107fb565b805f19048211156108d6576108d66107e7565b0290505b92915050565b5f6108ee60ff84168361083e565b9392505050565b80820281158282048414176108da576108da6107e7565b5f8261092657634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156108da576108da6107e7565b60805160a051610ed561096d5f395f81816108c60152610a0c01525f818161045c015261088f0152610ed55ff3fe6080604052600436106100fd575f3560e01c8063476343ee1161009257806379cc67901161006257806379cc6790146102da5780638da5cb5b146102f957806395d89b4114610316578063a9059cbb1461032a578063dd62ed3e14610349575f5ffd5b8063476343ee146102545780634bde38c81461026857806370a082311461028757806374580e2f146102bb575f5ffd5b806323b872dd116100cd57806323b872dd146101e55780632f4237c014610204578063313ce5671461021857806342966c6814610233575f5ffd5b806302d05d3f1461013b57806306fdde0314610177578063095ea7b31461019857806318160ddd146101c7575f5ffd5b36610137576040513481527f91b044947b8ab661360de0aedacf8d16ad45adfb1f3bafb2ac8c4633e297b9719060200160405180910390a1005b5f5ffd5b348015610146575f5ffd5b5060065461015a906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610182575f5ffd5b5061018b61038d565b60405161016e9190610cf0565b3480156101a3575f5ffd5b506101b76101b2366004610d40565b61041d565b604051901515815260200161016e565b3480156101d2575f5ffd5b506002545b60405190815260200161016e565b3480156101f0575f5ffd5b506101b76101ff366004610d68565b610436565b34801561020f575f5ffd5b506101b7610459565b348015610223575f5ffd5b506040516012815260200161016e565b34801561023e575f5ffd5b5061025261024d366004610da2565b610490565b005b34801561025f575f5ffd5b506101d761049d565b348015610273575f5ffd5b5060055461015a906001600160a01b031681565b348015610292575f5ffd5b506101d76102a1366004610db9565b6001600160a01b03165f9081526020819052604090205490565b3480156102c6575f5ffd5b506102526102d5366004610db9565b6105df565b3480156102e5575f5ffd5b506102526102f4366004610d40565b61065b565b348015610304575f5ffd5b506007546001600160a01b031661015a565b348015610321575f5ffd5b5061018b610674565b348015610335575f5ffd5b506101b7610344366004610d40565b610683565b348015610354575f5ffd5b506101d7610363366004610dd9565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b60606003805461039c90610e0a565b80601f01602080910402602001604051908101604052809291908181526020018280546103c890610e0a565b80156104135780601f106103ea57610100808354040283529160200191610413565b820191905f5260205f20905b8154815290600101906020018083116103f657829003601f168201915b5050505050905090565b5f3361042a818585610690565b60019150505b92915050565b5f336104438582856106a2565b61044e85858561071e565b506001949350505050565b5f7f00000000000000000000000000000000000000000000000000000000000000006008546104889190610e56565b431115905090565b61049a338261077b565b50565b6005545f906001600160a01b031633146104fe5760405162461bcd60e51b815260206004820152601960248201527f4f6e6c7920666163746f72792063616e2077697468647261770000000000000060448201526064015b60405180910390fd5b5047806105435760405162461bcd60e51b81526020600482015260136024820152724e6f206665657320746f20776974686472617760681b60448201526064016104f5565b6005546040515f916001600160a01b03169083908381818185875af1925050503d805f811461058d576040519150601f19603f3d011682016040523d82523d5f602084013e610592565b606091505b50509050806105db5760405162461bcd60e51b8152602060048201526015602482015274119959481dda5d1a191c985dd85b0819985a5b1959605a1b60448201526064016104f5565b5090565b6005546001600160a01b031633146106395760405162461bcd60e51b815260206004820181905260248201527f4f6e6c7920706c6174666f726d2063616e206368616e67652063726561746f7260448201526064016104f5565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6106668233836106a2565b610670828261077b565b5050565b60606004805461039c90610e0a565b5f3361042a81858561071e565b61069d83838360016107af565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f19811015610718578181101561070a57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016104f5565b61071884848484035f6107af565b50505050565b6001600160a01b03831661074757604051634b637e8f60e11b81525f60048201526024016104f5565b6001600160a01b0382166107705760405163ec442f0560e01b81525f60048201526024016104f5565b61069d838383610881565b6001600160a01b0382166107a457604051634b637e8f60e11b81525f60048201526024016104f5565b610670825f83610881565b6001600160a01b0384166107d85760405163e602df0560e01b81525f60048201526024016104f5565b6001600160a01b03831661080157604051634a1406b160e11b81525f60048201526024016104f5565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561071857826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161087391815260200190565b60405180910390a350505050565b600854431180156108bf57507f00000000000000000000000000000000000000000000000000000000000000006008546108bb9190610e56565b4311155b15610aeb577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614801561091357506005546001600160a01b03838116911614155b801561092d57506006546001600160a01b03838116911614155b156109d757325f908152600a602052604081208054839290610950908490610e56565b909155505060095460649061096690606e610e69565b6109709190610e80565b325f908152600a602052604090205411156109d75760405162461bcd60e51b815260206004820152602160248201527f4b656570696e6720322520706f6f6c204c696d69747320496e204b6f6e74726f6044820152601b60fa1b60648201526084016104f5565b6006546001600160a01b03838116911614801590610a0357506005546001600160a01b03838116911614155b8015610a4157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015610a5557506001600160a01b03831615155b15610aeb5760095481610a7c846001600160a01b03165f9081526020819052604090205490565b610a869190610e56565b1115610aeb5760405162461bcd60e51b815260206004820152602e60248201527f4d61782077616c6c6574206c696d697420657863656564656420647572696e6760448201526d081b185d5b98da081c195c9a5bd960921b60648201526084016104f5565b60085443148015610b0457506001600160a01b03831615155b8015610b1e57506005546001600160a01b03838116911614155b8015610b3857506005546001600160a01b03848116911614155b8015610b6b57506005546001600160a01b038481169116148015610b6957506006546001600160a01b038381169116145b155b15610bc45760405162461bcd60e51b8152602060048201526024808201527f4e6f206275797320616c6c6f77656420647572696e67206c61756e636820626c6044820152636f636b2160e01b60648201526084016104f5565b61069d8383836001600160a01b038316610bf4578060025f828254610be99190610e56565b90915550610c649050565b6001600160a01b0383165f9081526020819052604090205481811015610c465760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016104f5565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216610c8057600280548290039055610c9e565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610ce391815260200190565b60405180910390a3505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610d3b575f5ffd5b919050565b5f5f60408385031215610d51575f5ffd5b610d5a83610d25565b946020939093013593505050565b5f5f5f60608486031215610d7a575f5ffd5b610d8384610d25565b9250610d9160208501610d25565b929592945050506040919091013590565b5f60208284031215610db2575f5ffd5b5035919050565b5f60208284031215610dc9575f5ffd5b610dd282610d25565b9392505050565b5f5f60408385031215610dea575f5ffd5b610df383610d25565b9150610e0160208401610d25565b90509250929050565b600181811c90821680610e1e57607f821691505b602082108103610e3c57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561043057610430610e42565b808202811582820484141761043057610430610e42565b5f82610e9a57634e487b7160e01b5f52601260045260245ffd5b50049056fea264697066735822122045d0aafaefd7ed1a67a45d7015a7e4d6035c4b772a215311c8846bad5c7c821f64736f6c63430008230033a26469706673582212204a13cfc92a0747d42d540e19474988f8ba3411e7964a327eb19de697498c203064736f6c634300082300330000000000000000000000009c7f05f00bdb3a3766a71b414cfa67fda72a60cc
0x608060405260043610610215575f3560e01c806396e596821161011e578063b9ea0aea116100a8578063d146d31d1161006d578063d146d31d146107a4578063db3fa4cc146107c3578063e8dd7fc3146107e2578063ec81aadb14610809578063f7b64c8314610828575f5ffd5b8063b9ea0aea146105fe578063bb7a397214610680578063bde58ab414610695578063c69d61b6146106b4578063d02641a01461075d575f5ffd5b8063a6a9cb13116100ee578063a6a9cb1314610546578063aa4cfccd14610565578063aced8d811461058c578063ad5c4648146105b8578063b97ec75c146105df575f5ffd5b806396e59682146104df5780639f181b5e146104fe5780639f9baaaa14610513578063a480ca7914610527575f5ffd5b80635bdb9d6a1161019f57806375f38c0b1161016f57806375f38c0b146104225780637ca49de0146104415780637ff4cffb146104755780638d99aeb014610494578063964a0495146104c0575f5ffd5b80635bdb9d6a1461037857806362308e85146103ac57806363c63d2d146103d357806367587046146103f2575f5ffd5b80634101659e116101e55780634101659e146102d15780634fdc5b72146102e4578063521078b5146103035780635442a67f1461032f5780635a3afecf14610362575f5ffd5b80631bea83fe146102205780632486b046146102645780632ef780d4146102875780633bcc75f6146102b2575f5ffd5b3661021c57005b5f5ffd5b34801561022b575f5ffd5b506102477358daec3116aae6d93017baaea7749052e8a04fa781565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561026f575f5ffd5b50610279600e5481565b60405190815260200161025b565b348015610292575f5ffd5b506102796102a1366004613375565b60076020525f908152604090205481565b3480156102bd575f5ffd5b50600354610247906001600160a01b031681565b6102796102df36600461342f565b61083c565b3480156102ef575f5ffd5b50600454610247906001600160a01b031681565b34801561030e575f5ffd5b5061032261031d366004613375565b610e07565b60405161025b91906134ce565b34801561033a575f5ffd5b5061034e610349366004613375565b610e7a565b60405161025b989796959493929190613547565b34801561036d575f5ffd5b50610376611065565b005b348015610383575f5ffd5b50610279610392366004613375565b6001600160a01b03165f9081526007602052604090205490565b3480156103b7575f5ffd5b50610247738366a39cc670b4001a1121b8f6a443a643e4095181565b3480156103de575f5ffd5b506103766103ed366004613375565b611243565b3480156103fd575f5ffd5b50600c5461041290600160a01b900460ff1681565b604051901515815260200161025b565b34801561042d575f5ffd5b5061027961043c3660046135cd565b6112ce565b34801561044c575f5ffd5b5061024761045b366004613375565b60086020525f90815260409020546001600160a01b031681565b348015610480575f5ffd5b5061037661048f366004613636565b611443565b34801561049f575f5ffd5b506104b36104ae36600461364d565b61152c565b60405161025b91906136c5565b3480156104cb575f5ffd5b506103766104da3660046136d7565b6115a0565b3480156104ea575f5ffd5b506102796104f9366004613636565b61171e565b348015610509575f5ffd5b5061027960025481565b34801561051e575f5ffd5b5061037661178e565b348015610532575f5ffd5b50610279610541366004613375565b61180f565b348015610551575f5ffd5b50610376610560366004613636565b611a4f565b348015610570575f5ffd5b5061024773f3334192d15450cdd385c8b70e03f9a6bd9e673b81565b348015610597575f5ffd5b506105ab6105a636600461370e565b611b6c565b60405161025b919061372e565b3480156105c3575f5ffd5b50610247730bd7d308f8e1639fab988df18a8011f41eacad7381565b3480156105ea575f5ffd5b506103766105f9366004613636565b6120ae565b348015610609575f5ffd5b5061061d610618366004613636565b6120dd565b60405161025b91905f60e08201905060018060a01b038351168252602083015160020b6020830152604083015160020b6040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015292915050565b34801561068b575f5ffd5b50610279600f5481565b3480156106a0575f5ffd5b506103766106af366004613820565b6121ba565b3480156106bf575f5ffd5b506107186106ce366004613636565b600d6020525f908152604090208054600182015460028084015460038501546004909501546001600160a01b03851695600160a01b8604840b95600160b81b900490930b93929087565b604080516001600160a01b039098168852600296870b60208901529490950b938601939093526060850191909152608084015260a083015260c082015260e00161025b565b348015610768575f5ffd5b5061077c610777366004613375565b61232a565b604080519485526001600160a01b03909316602085015291830152606082015260800161025b565b3480156107af575f5ffd5b506102796107be366004613375565b612579565b3480156107ce575f5ffd5b506102476107dd366004613892565b612583565b3480156107ed575f5ffd5b50610247738876789976decbfcbbbe364623c63652db8c090481565b348015610814575f5ffd5b5061034e610823366004613636565b6125b7565b348015610833575f5ffd5b506103766125e2565b600c545f90600160a01b900460ff166108ab5760405162461bcd60e51b815260206004820152602660248201527f546f6b656e206465706c6f796d656e742069732063757272656e746c792064696044820152651cd8589b195960d21b60648201526084015b60405180910390fd5b600e5482106108fc5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c697175696469747920636f6e666967204944000000000060448201526064016108a2565b5f8387873330600f5460405161091190613351565b61091f9594939291906138bc565b8190604051809103905ff590508015801561093c573d5f5f3e3d5ffd5b506040516001600160a01b038216815290915081907f60122e78030aba0a2e4a67adb3e52b411343cc51778f919095d3fe394090c1b29060200160405180910390a1610988818561262d565b5f92503415610bf1575f848152600d60209081526040808320815160e08101835281546001600160a01b0381168252600160a01b8104600290810b95830195909552600160b81b9004840b9281019290925260018101546060830152918201546080820152600382015460a082015260049091015460c082015290610a0c3461171e565b90505f60648360c0015183610a219190613919565b610a2b9190613930565b6040516370a0823160e01b815230600482015290915061271034808402919091049190829003905f906001600160a01b038816906370a0823190602401602060405180830381865afa158015610a83573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa7919061394f565b9050610ab38783612adc565b6040516370a0823160e01b81523060048201525f906001600160a01b038916906370a0823190602401602060405180830381865afa158015610af7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b1b919061394f565b9050610b278282613966565b60405163a9059cbb60e01b815233600482015260248101829052909a506001600160a01b0389169063a9059cbb906044016020604051808303815f875af1158015610b74573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b989190613979565b50604080513381526001600160a01b038a166020820152908101849052606081018b90527f8daf503382665d950e449b86172be5222275c90f4ddf69c29fdaa8237a562a6d9060800160405180910390a1505050505050505b60025460408051610100810182526001600160a01b03848116825260208083018d81528385018d905233606085015242608085015260a084018c90525f60c0850181905260e0850181905286815291829052939020825181546001600160a01b03191692169190911781559151909182916001820190610c719082613a27565b5060408201516002820190610c869082613a27565b5060608201516003820180546001600160a01b0319166001600160a01b039092169190911790556080820151600482015560a08201516005820190610ccb9082613a27565b5060c0820151600682015560e0909101516007909101556001600160a01b038381165f908152600160208181526040909220845181546001600160a01b031916941693909317835590830151839291820190610d279082613a27565b5060408201516002820190610d3c9082613a27565b5060608201516003820180546001600160a01b0319166001600160a01b039092169190911790556080820151600482015560a08201516005820190610d819082613a27565b5060c082015160068281019190915560e0909201516007909101556004546001600160a01b039485165f8181526008602090815260408083208054999095166001600160a01b0319998a16179094553382529384529182208054600181810183559184529390922090920180549095169091179093555001600255505b95945050505050565b6001600160a01b0381165f90815260066020908152604091829020805483518184028101840190945280845260609392830182828015610e6e57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610e50575b50505050509050919050565b600160208190525f9182526040909120805491810180546001600160a01b0390931692610ea690613998565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed290613998565b8015610f1d5780601f10610ef457610100808354040283529160200191610f1d565b820191905f5260205f20905b815481529060010190602001808311610f0057829003601f168201915b505050505090806002018054610f3290613998565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5e90613998565b8015610fa95780601f10610f8057610100808354040283529160200191610fa9565b820191905f5260205f20905b815481529060010190602001808311610f8c57829003601f168201915b505050506003830154600484015460058501805494956001600160a01b039093169491935090610fd890613998565b80601f016020809104026020016040519081016040528092919081815260200182805461100490613998565b801561104f5780601f106110265761010080835404028352916020019161104f565b820191905f5260205f20905b81548152906001019060200180831161103257829003601f168201915b5050505050908060060154908060070154905088565b6003546001600160a01b0316331461108f5760405162461bcd60e51b81526004016108a290613ae6565b6040516370a0823160e01b81523060048201525f90730bd7d308f8e1639fab988df18a8011f41eacad73906370a0823190602401602060405180830381865afa1580156110de573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611102919061394f565b90505f81116111495760405162461bcd60e51b81526020600482015260136024820152724e6f205745544820746f20776974686472617760681b60448201526064016108a2565b604051632e1a7d4d60e01b815260048101829052730bd7d308f8e1639fab988df18a8011f41eacad7390632e1a7d4d906024015f604051808303815f87803b158015611193575f5ffd5b505af11580156111a5573d5f5f3e3d5ffd5b505050505f336001600160a01b0316826040515b5f6040518083038185875af1925050503d805f81146111f3576040519150601f19603f3d011682016040523d82523d5f602084013e6111f8565b606091505b505090508061123f5760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b60448201526064016108a2565b5050565b6003546001600160a01b0316331461126d5760405162461bcd60e51b81526004016108a290613ae6565b600480546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb5a0bbe76e5292b485f32f38ea22c592308b1443a887d4c46e34973e0732ff6b910160405180910390a15050565b6003545f906001600160a01b031633146113475760405162461bcd60e51b815260206004820152603460248201527f4f6e6c7920706c6174666f726d20636f6e74726f6c6c65722063616e20637265604482015273617465206c697175696469747920636f6e66696760601b60648201526084016108a2565b6101f48211156113695760405162461bcd60e51b81526004016108a290613b1d565b50600e80546040805160e0810182526001600160a01b038b8116825260028b810b60208085019182528c830b858701908152606086018d8152608087018d815260a088018d815260c089018d81525f8c8152600d909652998520985189549651945198166001600160b81b031990961695909517600160a01b62ffffff948516021762ffffff60b81b1916600160b81b9390971692909202959095178655935160018601559251918401919091555160038301559151600490910155825491929061143383613b64565b9190505550979650505050505050565b6003546001600160a01b031633146114b85760405162461bcd60e51b815260206004820152603260248201527f4f6e6c7920706c6174666f726d20636f6e74726f6c6c65722063616e206368616044820152716e6765206974656d7320706572207061676560701b60648201526084016108a2565b5f811180156114c957506103e88111155b6115275760405162461bcd60e51b815260206004820152602960248201527f4974656d73207065722070616765206d757374206265206265747765656e2031604482015268020616e6420313030360bc1b60648201526084016108a2565b600555565b60606040518060200161153e90613351565b601f1982820381018352601f909101166040819052600f5461156a9187918791879130916020016138bc565b60408051601f19818403018152908290526115889291602001613b93565b60405160208183030381529060405290509392505050565b5f826001600160a01b03166302d05d3f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115dd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116019190613ba7565b6003549091506001600160a01b03163314806116255750336001600160a01b038216145b6116625760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b60448201526064016108a2565b6001600160a01b0382166116c35760405162461bcd60e51b815260206004820152602260248201527f4e65772063726561746f722063616e6e6f74206265207a65726f206164647265604482015261737360f01b60648201526084016108a2565b6040516374580e2f60e01b81526001600160a01b0383811660048301528416906374580e2f906024015f604051808303815f87803b158015611703575f5ffd5b505af1158015611715573d5f5f3e3d5ffd5b50505050505050565b5f66b1a2bc2ec5000082101561173557505f919050565b670429d069189e0000821061174d5750611388919050565b6146505f61176266b1a2bc2ec5000085613966565b90505f670de0b6b3a76400006117788484613919565b6117829190613930565b610dfe906101f4613bc2565b6003546001600160a01b031633146117b85760405162461bcd60e51b81526004016108a290613ae6565b47806117fb5760405162461bcd60e51b81526020600482015260126024820152714e6f2045544820746f20776974686472617760701b60448201526064016108a2565b5f336001600160a01b0316826040516111b9565b5f611818612da1565b5f826001600160a01b03166302d05d3f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611855573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118799190613ba7565b9050336001600160a01b038216148061189c57506003546001600160a01b031633145b6118d95760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b60448201526064016108a2565b5f479050836001600160a01b031663476343ee6040518163ffffffff1660e01b81526004016020604051808303815f875af115801561191a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061193e919061394f565b504761194a8282613966565b93508315611a1e576001600160a01b0385165f9081526007602052604081208054869290611979908490613bc2565b90915550506040515f906001600160a01b0385169086908381818185875af1925050503d805f81146119c6576040519150601f19603f3d011682016040523d82523d5f602084013e6119cb565b606091505b5050905080611a1c5760405162461bcd60e51b815260206004820152601e60248201527f455448207472616e7366657220746f2063726561746f72206661696c6564000060448201526064016108a2565b505b505050611a4a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b919050565b6003546001600160a01b03163314611ac65760405162461bcd60e51b815260206004820152603460248201527f4f6e6c7920706c6174666f726d20636f6e74726f6c6c65722063616e2064656c604482015273657465206c697175696469747920636f6e66696760601b60648201526084016108a2565b600e548110611ae75760405162461bcd60e51b81526004016108a290613bd5565b805f03611b365760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742064656c6574652064656661756c7420636f6e6669670000000060448201526064016108a2565b5f908152600d6020526040812080546001600160d01b031916815560018101829055600281018290556003810182905560040155565b60605f60025411611bb45760405162461bcd60e51b8152602060048201526012602482015271139bc81d1bdad95b9cc819195c1b1bde595960721b60448201526064016108a2565b5f6005546001600554600254611bca9190613bc2565b611bd49190613966565b611bde9190613930565b9050808410611c235760405162461bcd60e51b815260206004820152601160248201527050616765206f7574206f662072616e676560781b60448201526064016108a2565b5f8080858103611cac57600554611c3b886001613bc2565b611c459190613919565b60025411611c53575f611c78565b600554611c61886001613bc2565b611c6b9190613919565b600254611c789190613966565b925060055487611c889190613919565b600254611c959190613966565b9150600254821115611ca75760025491505b611cdb565b600554611cb99088613919565b925060055483611cc99190613bc2565b9150600254821115611cdb5760025491505b5f611ce68484613966565b67ffffffffffffffff811115611cfe57611cfe613390565b604051908082528060200260200182016040528015611d8457816020015b611d716040518061010001604052805f6001600160a01b0316815260200160608152602001606081526020015f6001600160a01b031681526020015f8152602001606081526020015f81526020015f81525090565b815260200190600190039081611d1c5790505b509050835b838110156120a0575f8815611d9e5781611dbd565b611da88683613966565b611db3600187613966565b611dbd9190613966565b5f818152602081815260408083208151610100810190925280546001600160a01b03168252600181018054959650939491939092840191611dfd90613998565b80601f0160208091040260200160405190810160405280929190818152602001828054611e2990613998565b8015611e745780601f10611e4b57610100808354040283529160200191611e74565b820191905f5260205f20905b815481529060010190602001808311611e5757829003601f168201915b50505050508152602001600282018054611e8d90613998565b80601f0160208091040260200160405190810160405280929190818152602001828054611eb990613998565b8015611f045780601f10611edb57610100808354040283529160200191611f04565b820191905f5260205f20905b815481529060010190602001808311611ee757829003601f168201915b505050918352505060038201546001600160a01b0316602082015260048201546040820152600582018054606090920191611f3e90613998565b80601f0160208091040260200160405190810160405280929190818152602001828054611f6a90613998565b8015611fb55780601f10611f8c57610100808354040283529160200191611fb5565b820191905f5260205f20905b815481529060010190602001808311611f9857829003601f168201915b505050505081526020016006820154815260200160078201548152505090505f611fe1825f0151612579565b9050604051806101000160405280835f01516001600160a01b03168152602001836020015181526020018360400151815260200183606001516001600160a01b03168152602001836080015181526020018360a00151815260200182815260200160075f855f01516001600160a01b03166001600160a01b031681526020019081526020015f205481525085878061207890613b64565b98508151811061208a5761208a613c00565b6020908102919091010152505050600101611d89565b509450505050505b92915050565b6003546001600160a01b031633146120d85760405162461bcd60e51b81526004016108a290613ae6565b600f55565b6121256040518060e001604052805f6001600160a01b031681526020015f60020b81526020015f60020b81526020015f81526020015f81526020015f81526020015f81525090565b600e5482106121465760405162461bcd60e51b81526004016108a290613bd5565b505f908152600d6020908152604091829020825160e08101845281546001600160a01b0381168252600160a01b8104600290810b94830194909452600160b81b9004830b9381019390935260018101546060840152908101546080830152600381015460a08301526004015460c082015290565b6003546001600160a01b031633146122315760405162461bcd60e51b815260206004820152603460248201527f4f6e6c7920706c6174666f726d20636f6e74726f6c6c65722063616e20757064604482015273617465206c697175696469747920636f6e66696760601b60648201526084016108a2565b600e5488106122525760405162461bcd60e51b81526004016108a290613bd5565b6101f48111156122745760405162461bcd60e51b81526004016108a290613b1d565b6040805160e0810182526001600160a01b039889168152600297880b602080830191825297890b828401908152606083019788526080830196875260a0830195865260c083019485525f9b8c52600d90985291909920985189549151965198166001600160b81b031990911617600160a01b62ffffff968716021762ffffff60b81b1916600160b81b95909716949094029590951786559051600186015551918401919091559051600383015551600490910155565b6001600160a01b038181165f908152600860205260408120549091829182918291829116612363576004546001600160a01b031661237e565b6001600160a01b038087165f90815260086020526040902054165b90505f6040518060a001604052805f6001600160a01b03168152602001886001600160a01b031681526020015f62ffffff16815260200160c860020b8152602001836001600160a01b031681525090505f816040516020016123e09190613c57565b60408051808303601f19018152908290528051602090910120600b54633205590760e21b8352600483018290529098508892506001600160a01b03169063c815641c90602401608060405180830381865afa92505050801561245f575060408051601f3d908101601f1916820190925261245c91810190613c77565b60015b61247557505f9450849350839250612572915050565b8399505f846001600160a01b03161115612561576001600160a01b038416600160601b5f826124ac83670de0b6b3a7640000613919565b6124b69190613930565b9050826124c38383613919565b6124cd9190613930565b9b505f8f6001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561250c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612530919061394f565b9050670de0b6b3a7640000612545828f613919565b61254f9190613930565b9b505050505050505050505050612572565b50505050505f945084935083925050505b9193509193565b5f610dfe8261232a565b6006602052815f5260405f20818154811061259c575f80fd5b5f918252602090912001546001600160a01b03169150829050565b5f60208190529081526040902080546001820180546001600160a01b039092169291610ea690613998565b6003546001600160a01b0316331461260c5760405162461bcd60e51b81526004016108a290613ae6565b600c805460ff60a01b198116600160a01b9182900460ff1615909102179055565b5f818152600d6020908152604091829020825160e08101845281546001600160a01b038082168352600160a01b8204600290810b95840195909552600160b81b909104840b8286015260018301546060830152928201546080820152600382015460a082015260049182015460c0820152925163095ea7b360e01b81526e22d473030f116ddee9f6b43ac78ba3918101919091525f196024820152849182169063095ea7b3906044016020604051808303815f875af11580156126f2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127169190613979565b506040516387517c4560e01b81526001600160a01b0380861660048301527358daec3116aae6d93017baaea7749052e8a04fa76024830152604482015265ffffffffffff60648201526e22d473030f116ddee9f6b43ac78ba3906387517c45906084015f604051808303815f87803b158015612790575f5ffd5b505af11580156127a2573d5f5f3e3d5ffd5b50506040516387517c4560e01b81526001600160a01b038088166004830152738366a39cc670b4001a1121b8f6a443a643e409516024830152604482015265ffffffffffff60648201526e22d473030f116ddee9f6b43ac78ba392506387517c4591506084015f604051808303815f87803b15801561281f575f5ffd5b505af1158015612831573d5f5f3e3d5ffd5b50506040805160a0810182525f8082526001600160a01b0389811660208401528284019190915260c860608301526004805482166080840152600a548851945163313b65df60e11b81529396509091169350636276cbbe9261289592869201613ccd565b6020604051808303815f875af11580156128b1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128d59190613cf3565b505f6128f7845f01518560200151866040015187606001518860800151612dcf565b60408051600160f91b6020820152600d60f81b602182015281516002818303810182525f602284018181526042850183815260a2860190965295965091949391926062015b606081526020019060019003908161293c5790505090508487602001518860400151868a606001518b6080015161dead88604051602001612984989796959493929190613d0e565b604051602081830303815290604052815f815181106129a5576129a5613c00565b6020026020010181905250845f015185602001516040516020016129df9291906001600160a01b0392831681529116602082015260400190565b60405160208183030381529060405281600181518110612a0157612a01613c00565b6020908102919091018101919091526009546040516001600160a01b039091169163dd46508f91612a36918791869101613dd6565b60408051601f19818403018152919052612a51426078613bc2565b6040518363ffffffff1660e01b8152600401612a6e929190613dfa565b5f604051808303815f87803b158015612a85575f5ffd5b505af1925050508015612a96575060015b612ad1573d808015612ac3576040519150601f19603f3d011682016040523d82523d5f602084013e612ac8565b606091505b50805160208201fd5b505050505050505050565b6040805160a0810182525f8082526001600160a01b0385811660208085019190915283850183905260c8606085015260045490911660808401528351600160fc1b91810191909152835160018183038101825260218301818152606184019096529394909390916041015b6060815260200190600190039081612b4757505060408051600360f91b6020820152600360fa1b6021820152600f60f81b602282015281516003818303810182526023830181815260a38401909452939450925f92916043015b6060815260200190600190039081612ba15750506040805160a08101825287815260016020808301919091526001600160801b038a16828401525f606083018190528351808301855290815260808301529151929350612c0392909101613e1b565b604051602081830303815290604052815f81518110612c2457612c24613c00565b6020026020010181905250845f015186604051602001612c599291906001600160a01b03929092168252602082015260400190565b60405160208183030381529060405281600181518110612c7b57612c7b613c00565b602002602001018190525084602001515f604051602001612cba9291906001600160a01b039290921682526001600160801b0316602082015260400190565b60405160208183030381529060405281600281518110612cdc57612cdc613c00565b60200260200101819052508181604051602001612cfa929190613dd6565b604051602081830303815290604052835f81518110612d1b57612d1b613c00565b60209081029190910101525f612d32426078613bc2565b600c54604051630d64d59360e21b81529192506001600160a01b031690633593564c908990612d6990899089908790600401613e7b565b5f604051808303818588803b158015612d80575f5ffd5b505af1158015612d92573d5f5f3e3d5ffd5b50505050505050505050505050565b612da9612df7565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f612ded86612ddd87612e3b565b612de687612e3b565b86866130f3565b9695505050505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0054600203612e3957604051633ee5aeb560e01b815260040160405180910390fd5b565b60020b5f60ff82901d80830118620d89e8811115612e6457612e646345c3193d60e11b846131a8565b7001fffcb933bd6fad37aa2d162d1a5940016001821602600160801b186002821615612ea0576ffff97272373d413259a46990580e213a0260801c5b6004821615612ebf576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615612ede576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615612efd576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615612f1c576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615612f3b576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615612f5a576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612f7a576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612f9a576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612fba576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612fda576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612ffa576fd097f3bdfd2022b8845ad8f792aa58250260801c5b61200082161561301a576fa9f746462d870fdf8a65dc1f90e061e50260801c5b61400082161561303a576f70d869a156d2a1b890bb3df62baf32f70260801c5b61800082161561305a576f31be135f97d08fd981231505542fcfa60260801c5b6201000082161561307b576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b6202000082161561309b576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156130ba576d2216e584f5fa1ea926041bedfe980260801c5b620800008216156130d7576b048a170391f7dc42444e8fa20260801c5b5f8413156130e3575f19045b63ffffffff0160201c9392505050565b5f836001600160a01b0316856001600160a01b03161115613112579293925b846001600160a01b0316866001600160a01b03161161313d576131368585856131b7565b9050610dfe565b836001600160a01b0316866001600160a01b0316101561319d575f6131638786866131b7565b90505f61317187898661322a565b9050806001600160801b0316826001600160801b0316106131925780613194565b815b92505050610dfe565b612ded85858461322a565b815f528060020b60045260245ffd5b5f826001600160a01b0316846001600160a01b031611156131d6579192915b5f6131f8856001600160a01b0316856001600160a01b0316600160601b613267565b905061321f61321a848361320c8989613eb0565b6001600160a01b0316613267565b613303565b9150505b9392505050565b5f826001600160a01b0316846001600160a01b03161115613249579192915b61325f61321a83600160601b61320c8888613eb0565b949350505050565b5f838302815f1985870982811083820303915050808411613286575f5ffd5b805f0361329857508290049050613223565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b806001600160801b0381168114611a4a5760405162461bcd60e51b81526020600482015260126024820152716c6971756964697479206f766572666c6f7760701b60448201526064016108a2565b61184280613ed083390190565b6001600160a01b0381168114613372575f5ffd5b50565b5f60208284031215613385575f5ffd5b81356132238161335e565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126133b3575f5ffd5b813567ffffffffffffffff8111156133cd576133cd613390565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156133fc576133fc613390565b604052818152838201602001851015613413575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f5f5f60a08688031215613443575f5ffd5b853567ffffffffffffffff811115613459575f5ffd5b613465888289016133a4565b955050602086013567ffffffffffffffff811115613481575f5ffd5b61348d888289016133a4565b945050604086013567ffffffffffffffff8111156134a9575f5ffd5b6134b5888289016133a4565b9598949750949560608101359550608001359392505050565b602080825282518282018190525f918401906040840190835b8181101561350e5783516001600160a01b03168352602093840193909201916001016134e7565b509095945050505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b0389168152610100602082018190525f9061356b9083018a613519565b828103604084015261357d818a613519565b6001600160a01b03891660608501526080840188905283810360a085015290506135a78187613519565b60c0840195909552505060e001529695505050505050565b8060020b8114613372575f5ffd5b5f5f5f5f5f5f5f60e0888a0312156135e3575f5ffd5b87356135ee8161335e565b965060208801356135fe816135bf565b9550604088013561360e816135bf565b969995985095966060810135965060808101359560a0820135955060c0909101359350915050565b5f60208284031215613646575f5ffd5b5035919050565b5f5f5f6060848603121561365f575f5ffd5b833567ffffffffffffffff811115613675575f5ffd5b613681868287016133a4565b935050602084013567ffffffffffffffff81111561369d575f5ffd5b6136a9868287016133a4565b92505060408401356136ba8161335e565b809150509250925092565b602081525f6132236020830184613519565b5f5f604083850312156136e8575f5ffd5b82356136f38161335e565b915060208301356137038161335e565b809150509250929050565b5f5f6040838503121561371f575f5ffd5b50508035926020909101359150565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561381457868503603f19018452815180516001600160a01b031686526020810151610100602088015261378f610100880182613519565b9050604082015187820360408901526137a88282613519565b91505060608201516137c560608901826001600160a01b03169052565b506080820151608088015260a082015187820360a08901526137e78282613519565b60c084810151908a015260e093840151939098019290925250506020938401939190910190600101613754565b50929695505050505050565b5f5f5f5f5f5f5f5f610100898b031215613838575f5ffd5b88359750602089013561384a8161335e565b9650604089013561385a816135bf565b9550606089013561386a816135bf565b979a969950949760808101359660a0820135965060c0820135955060e0909101359350915050565b5f5f604083850312156138a3575f5ffd5b82356138ae8161335e565b946020939093013593505050565b60a081525f6138ce60a0830188613519565b82810360208401526138e08188613519565b6001600160a01b03968716604085015294909516606083015250608001529392505050565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176120a8576120a8613905565b5f8261394a57634e487b7160e01b5f52601260045260245ffd5b500490565b5f6020828403121561395f575f5ffd5b5051919050565b818103818111156120a8576120a8613905565b5f60208284031215613989575f5ffd5b81518015158114613223575f5ffd5b600181811c908216806139ac57607f821691505b6020821081036139ca57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115613a225782821115613a2257805f5260205f20601f840160051c60208510156139fb57505f5b90810190601f840160051c035f5b81811015613a1e575f83820155600101613a09565b5050505b505050565b815167ffffffffffffffff811115613a4157613a41613390565b613a5581613a4f8454613998565b846139d0565b6020601f821160018114613a87575f8315613a705750848201515b5f19600385901b1c1916600184901b178455613adf565b5f84815260208120601f198516915b82811015613ab65787850151825560209485019460019092019101613a96565b5084821015613ad357868401515f19600387901b60f8161c191681555b505060018360011b0184555b5050505050565b60208082526018908201527f43616c6c6572206973206e6f7420636f6e74726f6c6c65720000000000000000604082015260600190565b60208082526027908201527f50656e616c7479206d756c7469706c696572206d757374206265206174206d6f6040820152667374203530302560c81b606082015260800190565b5f60018201613b7557613b75613905565b5060010190565b5f81518060208401855e5f93019283525090919050565b5f61325f613ba18386613b7c565b84613b7c565b5f60208284031215613bb7575f5ffd5b81516132238161335e565b808201808211156120a8576120a8613905565b602080825260119082015270125b9d985b1a590818dbdb999a59c81251607a1b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b60a081016120a88284613c14565b805162ffffff81168114611a4a575f5ffd5b5f5f5f5f60808587031215613c8a575f5ffd5b8451613c958161335e565b6020860151909450613ca6816135bf565b9250613cb460408601613c65565b9150613cc260608601613c65565b905092959194509250565b60c08101613cdb8285613c14565b6001600160a01b039290921660a09190910152919050565b5f60208284031215613d03575f5ffd5b8151613223816135bf565b613d18818a613c14565b8760020b60a08201528660020b60c08201526001600160801b03861660e0820152846101008201528361012082015260018060a01b0383166101408201526101806101608201525f613d6e610180830184613519565b9a9950505050505050505050565b5f82825180855260208501945060208160051b830101602085015f5b83811015613dca57601f19858403018852613db4838351613519565b6020988901989093509190910190600101613d98565b50909695505050505050565b604081525f613de86040830185613519565b828103602084015261321f8185613d7c565b604081525f613e0c6040830185613519565b90508260208301529392505050565b60208152613e2d602082018351613c14565b6020820151151560c08201526001600160801b0360408301511660e08201526001600160801b036060830151166101008201525f60808301516101208084015261325f610140840182613519565b606081525f613e8d6060830186613519565b8281036020840152613e9f8186613d7c565b915050826040830152949350505050565b6001600160a01b0382811682821603908111156120a8576120a861390556fe60c0604052738366a39cc670b4001a1121b8f6a443a643e4095160a052348015610027575f5ffd5b506040516118423803806118428339810160408190526100469161060d565b848460036100548382610729565b5060046100618282610729565b5050600580546001600160a01b038086166001600160a01b0319928316179092556006805492871692821692909217909155600780549091169055504360085560808190525f6100af601290565b6100ba90600a6108e0565b6100c890633b9aca006108f5565b905060646100d76002836108f5565b6100e1919061090c565b6009556100ee83826100f9565b50505050505061093e565b6001600160a01b0382166101275760405163ec442f0560e01b81525f60048201526024015b60405180910390fd5b6101325f8383610136565b5050565b600854431180156101565750608051600854610152919061092b565b4311155b156103465760a0516001600160a01b0316836001600160a01b031614801561018c57506005546001600160a01b03838116911614155b80156101a657506006546001600160a01b03838116911614155b1561025057325f908152600a6020526040812080548392906101c990849061092b565b90915550506009546064906101df90606e6108f5565b6101e9919061090c565b325f908152600a602052604090205411156102505760405162461bcd60e51b815260206004820152602160248201527f4b656570696e6720322520706f6f6c204c696d69747320496e204b6f6e74726f6044820152601b60fa1b606482015260840161011e565b6006546001600160a01b0383811691161480159061027c57506005546001600160a01b03838116911614155b801561029c575060a0516001600160a01b0316826001600160a01b031614155b80156102b057506001600160a01b03831615155b1561034657600954816102d7846001600160a01b03165f9081526020819052604090205490565b6102e1919061092b565b11156103465760405162461bcd60e51b815260206004820152602e60248201527f4d61782077616c6c6574206c696d697420657863656564656420647572696e6760448201526d081b185d5b98da081c195c9a5bd960921b606482015260840161011e565b6008544314801561035f57506001600160a01b03831615155b801561037957506005546001600160a01b03838116911614155b801561039357506005546001600160a01b03848116911614155b80156103c657506005546001600160a01b0384811691161480156103c457506006546001600160a01b038381169116145b155b1561041f5760405162461bcd60e51b8152602060048201526024808201527f4e6f206275797320616c6c6f77656420647572696e67206c61756e636820626c6044820152636f636b2160e01b606482015260840161011e565b61042a83838361042f565b505050565b6001600160a01b038316610459578060025f82825461044e919061092b565b909155506104c99050565b6001600160a01b0383165f90815260208190526040902054818110156104ab5760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640161011e565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166104e557600280548290039055610503565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161054891815260200190565b60405180910390a3505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112610578575f5ffd5b81516001600160401b0381111561059157610591610555565b604051601f8201601f19908116603f011681016001600160401b03811182821017156105bf576105bf610555565b6040528181528382016020018510156105d6575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b80516001600160a01b0381168114610608575f5ffd5b919050565b5f5f5f5f5f60a08688031215610621575f5ffd5b85516001600160401b03811115610636575f5ffd5b61064288828901610569565b602088015190965090506001600160401b0381111561065f575f5ffd5b61066b88828901610569565b94505061067a604087016105f2565b9250610688606087016105f2565b9150608086015190509295509295909350565b600181811c908216806106af57607f821691505b6020821081036106cd57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561042a578282111561042a57805f5260205f20601f840160051c60208510156106fe57505f5b90810190601f840160051c035f5b81811015610721575f8382015560010161070c565b505050505050565b81516001600160401b0381111561074257610742610555565b61075681610750845461069b565b846106d3565b6020601f821160018114610788575f83156107715750848201515b5f19600385901b1c1916600184901b1784556107e0565b5f84815260208120601f198516915b828110156107b75787850151825560209485019460019092019101610797565b50848210156107d457868401515f19600387901b60f8161c191681555b505060018360011b0184555b5050505050565b634e487b7160e01b5f52601160045260245ffd5b6001815b60018411156108365780850481111561081a5761081a6107e7565b600184161561082857908102905b60019390931c9280026107ff565b935093915050565b5f8261084c575060016108da565b8161085857505f6108da565b816001811461086e576002811461087857610894565b60019150506108da565b60ff841115610889576108896107e7565b50506001821b6108da565b5060208310610133831016604e8410600b84101617156108b7575081810a6108da565b6108c35f1984846107fb565b805f19048211156108d6576108d66107e7565b0290505b92915050565b5f6108ee60ff84168361083e565b9392505050565b80820281158282048414176108da576108da6107e7565b5f8261092657634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156108da576108da6107e7565b60805160a051610ed561096d5f395f81816108c60152610a0c01525f818161045c015261088f0152610ed55ff3fe6080604052600436106100fd575f3560e01c8063476343ee1161009257806379cc67901161006257806379cc6790146102da5780638da5cb5b146102f957806395d89b4114610316578063a9059cbb1461032a578063dd62ed3e14610349575f5ffd5b8063476343ee146102545780634bde38c81461026857806370a082311461028757806374580e2f146102bb575f5ffd5b806323b872dd116100cd57806323b872dd146101e55780632f4237c014610204578063313ce5671461021857806342966c6814610233575f5ffd5b806302d05d3f1461013b57806306fdde0314610177578063095ea7b31461019857806318160ddd146101c7575f5ffd5b36610137576040513481527f91b044947b8ab661360de0aedacf8d16ad45adfb1f3bafb2ac8c4633e297b9719060200160405180910390a1005b5f5ffd5b348015610146575f5ffd5b5060065461015a906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610182575f5ffd5b5061018b61038d565b60405161016e9190610cf0565b3480156101a3575f5ffd5b506101b76101b2366004610d40565b61041d565b604051901515815260200161016e565b3480156101d2575f5ffd5b506002545b60405190815260200161016e565b3480156101f0575f5ffd5b506101b76101ff366004610d68565b610436565b34801561020f575f5ffd5b506101b7610459565b348015610223575f5ffd5b506040516012815260200161016e565b34801561023e575f5ffd5b5061025261024d366004610da2565b610490565b005b34801561025f575f5ffd5b506101d761049d565b348015610273575f5ffd5b5060055461015a906001600160a01b031681565b348015610292575f5ffd5b506101d76102a1366004610db9565b6001600160a01b03165f9081526020819052604090205490565b3480156102c6575f5ffd5b506102526102d5366004610db9565b6105df565b3480156102e5575f5ffd5b506102526102f4366004610d40565b61065b565b348015610304575f5ffd5b506007546001600160a01b031661015a565b348015610321575f5ffd5b5061018b610674565b348015610335575f5ffd5b506101b7610344366004610d40565b610683565b348015610354575f5ffd5b506101d7610363366004610dd9565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b60606003805461039c90610e0a565b80601f01602080910402602001604051908101604052809291908181526020018280546103c890610e0a565b80156104135780601f106103ea57610100808354040283529160200191610413565b820191905f5260205f20905b8154815290600101906020018083116103f657829003601f168201915b5050505050905090565b5f3361042a818585610690565b60019150505b92915050565b5f336104438582856106a2565b61044e85858561071e565b506001949350505050565b5f7f00000000000000000000000000000000000000000000000000000000000000006008546104889190610e56565b431115905090565b61049a338261077b565b50565b6005545f906001600160a01b031633146104fe5760405162461bcd60e51b815260206004820152601960248201527f4f6e6c7920666163746f72792063616e2077697468647261770000000000000060448201526064015b60405180910390fd5b5047806105435760405162461bcd60e51b81526020600482015260136024820152724e6f206665657320746f20776974686472617760681b60448201526064016104f5565b6005546040515f916001600160a01b03169083908381818185875af1925050503d805f811461058d576040519150601f19603f3d011682016040523d82523d5f602084013e610592565b606091505b50509050806105db5760405162461bcd60e51b8152602060048201526015602482015274119959481dda5d1a191c985dd85b0819985a5b1959605a1b60448201526064016104f5565b5090565b6005546001600160a01b031633146106395760405162461bcd60e51b815260206004820181905260248201527f4f6e6c7920706c6174666f726d2063616e206368616e67652063726561746f7260448201526064016104f5565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6106668233836106a2565b610670828261077b565b5050565b60606004805461039c90610e0a565b5f3361042a81858561071e565b61069d83838360016107af565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f19811015610718578181101561070a57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016104f5565b61071884848484035f6107af565b50505050565b6001600160a01b03831661074757604051634b637e8f60e11b81525f60048201526024016104f5565b6001600160a01b0382166107705760405163ec442f0560e01b81525f60048201526024016104f5565b61069d838383610881565b6001600160a01b0382166107a457604051634b637e8f60e11b81525f60048201526024016104f5565b610670825f83610881565b6001600160a01b0384166107d85760405163e602df0560e01b81525f60048201526024016104f5565b6001600160a01b03831661080157604051634a1406b160e11b81525f60048201526024016104f5565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561071857826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161087391815260200190565b60405180910390a350505050565b600854431180156108bf57507f00000000000000000000000000000000000000000000000000000000000000006008546108bb9190610e56565b4311155b15610aeb577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614801561091357506005546001600160a01b03838116911614155b801561092d57506006546001600160a01b03838116911614155b156109d757325f908152600a602052604081208054839290610950908490610e56565b909155505060095460649061096690606e610e69565b6109709190610e80565b325f908152600a602052604090205411156109d75760405162461bcd60e51b815260206004820152602160248201527f4b656570696e6720322520706f6f6c204c696d69747320496e204b6f6e74726f6044820152601b60fa1b60648201526084016104f5565b6006546001600160a01b03838116911614801590610a0357506005546001600160a01b03838116911614155b8015610a4157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015610a5557506001600160a01b03831615155b15610aeb5760095481610a7c846001600160a01b03165f9081526020819052604090205490565b610a869190610e56565b1115610aeb5760405162461bcd60e51b815260206004820152602e60248201527f4d61782077616c6c6574206c696d697420657863656564656420647572696e6760448201526d081b185d5b98da081c195c9a5bd960921b60648201526084016104f5565b60085443148015610b0457506001600160a01b03831615155b8015610b1e57506005546001600160a01b03838116911614155b8015610b3857506005546001600160a01b03848116911614155b8015610b6b57506005546001600160a01b038481169116148015610b6957506006546001600160a01b038381169116145b155b15610bc45760405162461bcd60e51b8152602060048201526024808201527f4e6f206275797320616c6c6f77656420647572696e67206c61756e636820626c6044820152636f636b2160e01b60648201526084016104f5565b61069d8383836001600160a01b038316610bf4578060025f828254610be99190610e56565b90915550610c649050565b6001600160a01b0383165f9081526020819052604090205481811015610c465760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016104f5565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216610c8057600280548290039055610c9e565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610ce391815260200190565b60405180910390a3505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610d3b575f5ffd5b919050565b5f5f60408385031215610d51575f5ffd5b610d5a83610d25565b946020939093013593505050565b5f5f5f60608486031215610d7a575f5ffd5b610d8384610d25565b9250610d9160208501610d25565b929592945050506040919091013590565b5f60208284031215610db2575f5ffd5b5035919050565b5f60208284031215610dc9575f5ffd5b610dd282610d25565b9392505050565b5f5f60408385031215610dea575f5ffd5b610df383610d25565b9150610e0160208401610d25565b90509250929050565b600181811c90821680610e1e57607f821691505b602082108103610e3c57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561043057610430610e42565b808202811582820484141761043057610430610e42565b5f82610e9a57634e487b7160e01b5f52601260045260245ffd5b50049056fea264697066735822122045d0aafaefd7ed1a67a45d7015a7e4d6035c4b772a215311c8846bad5c7c821f64736f6c63430008230033a26469706673582212204a13cfc92a0747d42d540e19474988f8ba3411e7964a327eb19de697498c203064736f6c63430008230033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| DIH | 1 | $0.0000102 | $0 | |
| Green DOGE (GREENDOGE) | GREENDOGE | 0.000000 | — | — |
| TEST (TEST) | TEST | 0.000000 | — | — |
| LOBBYTEST (LOBBYTEST) | LOBBYTEST | 0.000000 | — | — |
| Heyyo (AS) | AS | 0.000000 | — | — |
| Mesh Mascot (MESHCLAW) | MESHCLAW | 0.000000 | — | — |
| Down (DOWN) | DOWN | 0.000000 | — | — |
| ALLDOWN (ALLDOWN) | ALLDOWN | 0.000000 | — | — |
| THE CHILDHOOD HERO (SPIDERMAN) | SPIDERMAN | 0.000000 | — | — |
| Proof of Bagwork (POB) | POB | 0.000000 | — | — |
| cash hood (CASH) | CASH | 0.000000 | — | — |
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0x32faba…93b0d5 | 28 days agoMon, 20 Jul 2026 21:27:01 UTC | 0x8daf50…2a6d | data: 0x000000000000000000…9534078d |
| 0x32faba…93b0d5 | 28 days agoMon, 20 Jul 2026 21:27:01 UTC | 0x60122e…c1b2 | data: 0x000000000000000000…9a0b4d8e |
| 0x3ea27b…9139e6 | 28 days agoMon, 20 Jul 2026 06:21:47 UTC | 0x8daf50…2a6d | data: 0x000000000000000000…11822363 |
| 0x3ea27b…9139e6 | 28 days agoMon, 20 Jul 2026 06:21:47 UTC | 0x60122e…c1b2 | data: 0x000000000000000000…416e719d |
| 0x9bc023…156aaa | 31 days agoFri, 17 Jul 2026 18:30:51 UTC | 0x60122e…c1b2 | data: 0x000000000000000000…54395c6c |
| 0x19379e…647769 | 34 days agoTue, 14 Jul 2026 06:25:10 UTC | 0x60122e…c1b2 | data: 0x000000000000000000…18678dcc |
| 0x2ff738…e4a815 | 34 days agoTue, 14 Jul 2026 00:53:32 UTC | 0x60122e…c1b2 | data: 0x000000000000000000…000df3b5 |
| 0x2715dc…a63be5 | 34 days agoTue, 14 Jul 2026 00:36:17 UTC | 0x8daf50…2a6d | data: 0x000000000000000000…11822363 |
| 0x2715dc…a63be5 | 34 days agoTue, 14 Jul 2026 00:36:17 UTC | 0x60122e…c1b2 | data: 0x000000000000000000…64594248 |
| 0x571ea3…f8b2ed | 34 days agoMon, 13 Jul 2026 23:53:36 UTC | 0x8daf50…2a6d | data: 0x000000000000000000…fe9ef818 |
| 0x571ea3…f8b2ed | 34 days agoMon, 13 Jul 2026 23:53:36 UTC | 0x60122e…c1b2 | data: 0x000000000000000000…51700eac |
| 0xd0ce6b…75e64b | 34 days agoMon, 13 Jul 2026 23:08:49 UTC | 0x8daf50…2a6d | data: 0x000000000000000000…40043e35 |
| 0xd0ce6b…75e64b | 34 days agoMon, 13 Jul 2026 23:08:49 UTC | 0x60122e…c1b2 | data: 0x000000000000000000…899554b8 |
| 0x6041ec…3417fe | 34 days agoMon, 13 Jul 2026 23:05:44 UTC | 0x8daf50…2a6d | data: 0x000000000000000000…7eec091f |
| 0x6041ec…3417fe | 34 days agoMon, 13 Jul 2026 23:05:44 UTC | 0x60122e…c1b2 | data: 0x000000000000000000…ce0a43ce |
| 0xfc31b2…41161a | 35 days agoMon, 13 Jul 2026 22:22:36 UTC | 0x60122e…c1b2 | data: 0x000000000000000000…d5dda448 |
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x32faba…93b0d5 | deployCoin | 15,023,642 | 28 days agoMon, 20 Jul 2026 21:27:01 UTC | 0x6c1e…1488 | IN | Factory | $228.400.12 ETH | 0.00011800 | |
| 0x3ea27b…9139e6 | deployCoin | 14,481,954 | 28 days agoMon, 20 Jul 2026 06:21:47 UTC | 0xdad2…0a75 | IN | Factory | $3.810.002 ETH | 0.00010633 | |
| 0x9bc023…156aaa | deployCoin | 12,336,114 | 31 days agoFri, 17 Jul 2026 18:30:51 UTC | 0x0000…1ca6 | IN | Factory | $0.000 ETH | 0.00014292 | |
| 0x19379e…647769 | deployCoin | 9,311,759 | 34 days agoTue, 14 Jul 2026 06:25:10 UTC | 0xe978…b252 | IN | Factory | $0.000 ETH | 0.00008892 | |
| 0x2ff738…e4a815 | deployCoin | 9,113,466 | 34 days agoTue, 14 Jul 2026 00:53:32 UTC | 0xe762…a33f | IN | Factory | $0.000 ETH | 0.00009426 | |
| 0x2715dc…a63be5 | deployCoin | 9,103,153 | 34 days agoTue, 14 Jul 2026 00:36:17 UTC | 0xe762…a33f | IN | Factory | $3.810.002 ETH | 0.00010043 | |
| 0x571ea3…f8b2ed | deployCoin | 9,077,619 | 34 days agoMon, 13 Jul 2026 23:53:36 UTC | 0xe762…a33f | IN | Factory | $9.520.005 ETH | 0.00010103 | |
| 0xd0ce6b…75e64b | deployCoin | 9,050,831 | 34 days agoMon, 13 Jul 2026 23:08:49 UTC | 0xe762…a33f | IN | Factory | $1.610.00084 ETH | 0.00010186 | |
| 0x6041ec…3417fe | deployCoin | 9,048,982 | 34 days agoMon, 13 Jul 2026 23:05:44 UTC | 0xe762…a33f | IN | Factory | $0.810.00042 ETH | 0.00010193 | |
| 0x050624…33410b | collectFees | 9,036,130 | 34 days agoMon, 13 Jul 2026 22:44:15 UTC | 0xe762…a33f | IN | Factory | $0.000 ETH | 0.00000350 | |
| 0xfc31b2…41161a | deployCoin | 9,023,179 | 35 days agoMon, 13 Jul 2026 22:22:36 UTC | 0xe762…a33f | IN | Factory | $0.000 ETH | 0.00009120 | |
| 0x06c985…c529fa | setLaunchPeriod | 9,023,118 | 35 days agoMon, 13 Jul 2026 22:22:30 UTC | 0xe762…a33f | IN | Factory | $0.000 ETH | 0.00000145 |
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 15,023,642 | 28 days agoMon, 20 Jul 2026 21:27:01 UTC | 0x32faba…93b0d5 | CALL | deployCoin | 0xdf96…a043 | OUT | 0x8876…0904 | 0.12 ETH |
| 15,023,642 | 28 days agoMon, 20 Jul 2026 21:27:01 UTC | 0x32faba…93b0d5 | CREATE2 | deployCoin | 0xdf96…a043 | OUT | 0x36f0…4d8e | 0 ETH |
| 14,481,954 | 28 days agoMon, 20 Jul 2026 06:21:47 UTC | 0x3ea27b…9139e6 | CALL | deployCoin | 0xdf96…a043 | OUT | 0x8876…0904 | 0.002 ETH |
| 14,481,954 | 28 days agoMon, 20 Jul 2026 06:21:47 UTC | 0x3ea27b…9139e6 | CREATE2 | deployCoin | 0xdf96…a043 | OUT | 0xd2c6…719d | 0 ETH |
| 12,336,114 | 31 days agoFri, 17 Jul 2026 18:30:51 UTC | 0x9bc023…156aaa | CREATE2 | deployCoin | 0xdf96…a043 | OUT | 0x6955…5c6c | 0 ETH |
| 9,311,759 | 34 days agoTue, 14 Jul 2026 06:25:10 UTC | 0x19379e…647769 | CREATE2 | deployCoin | 0xdf96…a043 | OUT | 0xa8de…8dcc | 0 ETH |
| 9,113,466 | 34 days agoTue, 14 Jul 2026 00:53:32 UTC | 0x2ff738…e4a815 | CREATE2 | deployCoin | 0xdf96…a043 | OUT | 0xe38f…f3b5 | 0 ETH |
| 9,103,153 | 34 days agoTue, 14 Jul 2026 00:36:17 UTC | 0x2715dc…a63be5 | CALL | deployCoin | 0xdf96…a043 | OUT | 0x8876…0904 | 0.002 ETH |
| 9,103,153 | 34 days agoTue, 14 Jul 2026 00:36:17 UTC | 0x2715dc…a63be5 | CREATE2 | deployCoin | 0xdf96…a043 | OUT | 0xa075…4248 | 0 ETH |
| 9,077,619 | 34 days agoMon, 13 Jul 2026 23:53:36 UTC | 0x571ea3…f8b2ed | CALL | deployCoin | 0xdf96…a043 | OUT | 0x8876…0904 | 0.005 ETH |
| 9,077,619 | 34 days agoMon, 13 Jul 2026 23:53:36 UTC | 0x571ea3…f8b2ed | CREATE2 | deployCoin | 0xdf96…a043 | OUT | 0x96fe…0eac | 0 ETH |
| 9,050,831 | 34 days agoMon, 13 Jul 2026 23:08:49 UTC | 0xd0ce6b…75e64b | CALL | deployCoin | 0xdf96…a043 | OUT | 0x8876…0904 | 0.00084 ETH |
| 9,050,831 | 34 days agoMon, 13 Jul 2026 23:08:49 UTC | 0xd0ce6b…75e64b | CREATE2 | deployCoin | 0xdf96…a043 | OUT | 0x7090…54b8 | 0 ETH |
| 9,048,982 | 34 days agoMon, 13 Jul 2026 23:05:44 UTC | 0x6041ec…3417fe | CALL | deployCoin | 0xdf96…a043 | OUT | 0x8876…0904 | 0.00042 ETH |
| 9,048,982 | 34 days agoMon, 13 Jul 2026 23:05:44 UTC | 0x6041ec…3417fe | CREATE2 | deployCoin | 0xdf96…a043 | OUT | 0x7f73…43ce | 0 ETH |
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x8ac50a71…88ceba | Transfer | 19,066,841 | 23 days agoSat, 25 Jul 2026 14:03:53 UTC | 0xcaf7…5d11 | IN | 0xdf96…a043 | $0.001 DIH | ||
| 0x32faba1e…93b0d5 | Transfer | 15,023,642 | 28 days agoMon, 20 Jul 2026 21:27:01 UTC | 0xdf96…a043 | OUT | 0x6c1e…1488 | 11,838,955.097101 POB | Proof of Bagwork (POB) | |
| 0x32faba1e…93b0d5 | Transfer | 15,023,642 | 28 days agoMon, 20 Jul 2026 21:27:01 UTC | 0x8366…0951 | IN | 0xdf96…a043 | 11,838,955.097101 POB | Proof of Bagwork (POB) | |
| 0x32faba1e…93b0d5 | Transfer | 15,023,642 | 28 days agoMon, 20 Jul 2026 21:27:01 UTC | 0xdf96…a043 | OUT | 0x8366…0951 | 1,000,000,000.000000 POB | Proof of Bagwork (POB) | |
| 0x32faba1e…93b0d5 | Transfer | 15,023,642 | 28 days agoMon, 20 Jul 2026 21:27:01 UTC | 0x0000…0000 | IN | 0xdf96…a043 | 1,000,000,000.000000 POB | Proof of Bagwork (POB) | |
| 0x3ea27bf3…9139e6 | Transfer | 14,481,954 | 28 days agoMon, 20 Jul 2026 06:21:47 UTC | 0xdf96…a043 | OUT | 0xdad2…0a75 | 199,640.055780 SPIDERMAN | THE CHILDHOOD HERO (SPIDERMAN) | |
| 0x3ea27bf3…9139e6 | Transfer | 14,481,954 | 28 days agoMon, 20 Jul 2026 06:21:47 UTC | 0x8366…0951 | IN | 0xdf96…a043 | 199,640.055780 SPIDERMAN | THE CHILDHOOD HERO (SPIDERMAN) | |
| 0x3ea27bf3…9139e6 | Transfer | 14,481,954 | 28 days agoMon, 20 Jul 2026 06:21:47 UTC | 0xdf96…a043 | OUT | 0x8366…0951 | 1,000,000,000.000000 SPIDERMAN | THE CHILDHOOD HERO (SPIDERMAN) | |
| 0x3ea27bf3…9139e6 | Transfer | 14,481,954 | 28 days agoMon, 20 Jul 2026 06:21:47 UTC | 0x0000…0000 | IN | 0xdf96…a043 | 1,000,000,000.000000 SPIDERMAN | THE CHILDHOOD HERO (SPIDERMAN) | |
| 0x9bc023f8…156aaa | Transfer | 12,336,114 | 31 days agoFri, 17 Jul 2026 18:30:51 UTC | 0xdf96…a043 | OUT | 0x8366…0951 | 1,000,000,000.000000 CASH | cash hood (CASH) | |
| 0x9bc023f8…156aaa | Transfer | 12,336,114 | 31 days agoFri, 17 Jul 2026 18:30:51 UTC | 0x0000…0000 | IN | 0xdf96…a043 | 1,000,000,000.000000 CASH | cash hood (CASH) | |
| 0x19379ef9…647769 | Transfer | 9,311,759 | 34 days agoTue, 14 Jul 2026 06:25:10 UTC | 0xdf96…a043 | OUT | 0x8366…0951 | 1,000,000,000.000000 MESHCLAW | Mesh Mascot (MESHCLAW) | |
| 0x19379ef9…647769 | Transfer | 9,311,759 | 34 days agoTue, 14 Jul 2026 06:25:10 UTC | 0x0000…0000 | IN | 0xdf96…a043 | 1,000,000,000.000000 MESHCLAW | Mesh Mascot (MESHCLAW) | |
| 0x2ff738cc…e4a815 | Transfer | 9,113,466 | 34 days agoTue, 14 Jul 2026 00:53:32 UTC | 0xdf96…a043 | OUT | 0x8366…0951 | 1,000,000,000.000000 AS | Heyyo (AS) | |
| 0x2ff738cc…e4a815 | Transfer | 9,113,466 | 34 days agoTue, 14 Jul 2026 00:53:32 UTC | 0x0000…0000 | IN | 0xdf96…a043 | 1,000,000,000.000000 AS | Heyyo (AS) | |
| 0x2715dc2f…a63be5 | Transfer | 9,103,153 | 34 days agoTue, 14 Jul 2026 00:36:17 UTC | 0xdf96…a043 | OUT | 0xe762…a33f | 199,640.055780 ALLDOWN | ALLDOWN (ALLDOWN) | |
| 0x2715dc2f…a63be5 | Transfer | 9,103,153 | 34 days agoTue, 14 Jul 2026 00:36:17 UTC | 0x8366…0951 | IN | 0xdf96…a043 | 199,640.055780 ALLDOWN | ALLDOWN (ALLDOWN) | |
| 0x2715dc2f…a63be5 | Transfer | 9,103,153 | 34 days agoTue, 14 Jul 2026 00:36:17 UTC | 0xdf96…a043 | OUT | 0x8366…0951 | 1,000,000,000.000000 ALLDOWN | ALLDOWN (ALLDOWN) | |
| 0x2715dc2f…a63be5 | Transfer | 9,103,153 | 34 days agoTue, 14 Jul 2026 00:36:17 UTC | 0x0000…0000 | IN | 0xdf96…a043 | 1,000,000,000.000000 ALLDOWN | ALLDOWN (ALLDOWN) | |
| 0x571ea3df…f8b2ed | Transfer | 9,077,619 | 34 days agoMon, 13 Jul 2026 23:53:36 UTC | 0xdf96…a043 | OUT | 0xe762…a33f | 498,950.723624 DOWN | Down (DOWN) | |
| 0x571ea3df…f8b2ed | Transfer | 9,077,619 | 34 days agoMon, 13 Jul 2026 23:53:36 UTC | 0x8366…0951 | IN | 0xdf96…a043 | 498,950.723624 DOWN | Down (DOWN) | |
| 0x571ea3df…f8b2ed | Transfer | 9,077,619 | 34 days agoMon, 13 Jul 2026 23:53:36 UTC | 0xdf96…a043 | OUT | 0x8366…0951 | 1,000,000,000.000000 DOWN | Down (DOWN) | |
| 0x571ea3df…f8b2ed | Transfer | 9,077,619 | 34 days agoMon, 13 Jul 2026 23:53:36 UTC | 0x0000…0000 | IN | 0xdf96…a043 | 1,000,000,000.000000 DOWN | Down (DOWN) | |
| 0xd0ce6b25…75e64b | Transfer | 9,050,831 | 34 days agoMon, 13 Jul 2026 23:08:49 UTC | 0xdf96…a043 | OUT | 0xe762…a33f | 1,206,340.976569 GREENDOGE | Green DOGE (GREENDOGE) | |
| 0xd0ce6b25…75e64b | Transfer | 9,050,831 | 34 days agoMon, 13 Jul 2026 23:08:49 UTC | 0x8366…0951 | IN | 0xdf96…a043 | 1,206,340.976569 GREENDOGE | Green DOGE (GREENDOGE) |