S Price: $0.736089 (+9.38%)

Contract

0x9ed2D7eec351a2089b66a21Ea9d392c60E02769E

Overview

S Balance

Sonic LogoSonic LogoSonic Logo0.107468944595200504 S

S Value

$0.08 (@ $0.74/S)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Manual Swap107720562025-02-28 14:09:3318 hrs ago1740751773IN
0x9ed2D7ee...60E02769E
0 S0.0090554255
Set Exempt107715892025-02-28 14:06:5418 hrs ago1740751614IN
0x9ed2D7ee...60E02769E
0 S0.002581255
Set Excluded107715512025-02-28 14:06:4218 hrs ago1740751602IN
0x9ed2D7ee...60E02769E
0 S0.0040213255
Set Excluded107714902025-02-28 14:06:2118 hrs ago1740751581IN
0x9ed2D7ee...60E02769E
0 S0.0041303355
Set Exempt107713602025-02-28 14:05:3818 hrs ago1740751538IN
0x9ed2D7ee...60E02769E
0 S0.002581255
Process Rewards107705682025-02-28 14:01:0418 hrs ago1740751264IN
0x9ed2D7ee...60E02769E
0 S0.0145890255
Approve107565002025-02-28 12:34:5720 hrs ago1740746097IN
0x9ed2D7ee...60E02769E
0 S0.001674555.01
Approve107551282025-02-28 12:25:4720 hrs ago1740745547IN
0x9ed2D7ee...60E02769E
0 S0.0026594555.01
Manual Swap107551222025-02-28 12:25:4520 hrs ago1740745545IN
0x9ed2D7ee...60E02769E
0 S0.010164655
Set LP Pair107543952025-02-28 12:20:5720 hrs ago1740745257IN
0x9ed2D7ee...60E02769E
0 S0.0025781255
Enable Trading107543422025-02-28 12:20:3320 hrs ago1740745233IN
0x9ed2D7ee...60E02769E
0 S0.0025320955
Approve107542572025-02-28 12:19:5920 hrs ago1740745199IN
0x9ed2D7ee...60E02769E
0 S0.0028292461.05
Approve107541632025-02-28 12:19:2020 hrs ago1740745160IN
0x9ed2D7ee...60E02769E
0 S0.0023027550

Latest 9 internal transactions

Parent Transaction Hash Block From To
108426702025-02-28 21:26:3611 hrs ago1740777996
0x9ed2D7ee...60E02769E
0.02866511 S
108426702025-02-28 21:26:3611 hrs ago1740777996
0x9ed2D7ee...60E02769E
0.02870335 S
107705682025-02-28 14:01:0418 hrs ago1740751264
0x9ed2D7ee...60E02769E
0x9ed2D7ee...60E02769E
0.00027775 S
107705682025-02-28 14:01:0418 hrs ago1740751264
0x9ed2D7ee...60E02769E
0.00021373 S
107705682025-02-28 14:01:0418 hrs ago1740751264
0x9ed2D7ee...60E02769E
0.00022812 S
107705682025-02-28 14:01:0418 hrs ago1740751264
0x9ed2D7ee...60E02769E
0.04576176 S
107705682025-02-28 14:01:0418 hrs ago1740751264
0x9ed2D7ee...60E02769E
0.01305675 S
107566402025-02-28 12:35:5420 hrs ago1740746154
0x9ed2D7ee...60E02769E
0.03160791 S
107553502025-02-28 12:27:1520 hrs ago1740745635
0x9ed2D7ee...60E02769E
0.03199117 S
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SonicSuperRain

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
Yes with 1000 runs

Other Settings:
paris EvmVersion
File 1 of 1 : SonicSuperRain.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

// Interface definitions
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
}

interface IUniswapRouter {
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
    
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

/**
 * @title SuperRain
 * @dev ERC20 token with reflection rewards in native currency
 */
contract SonicSuperRain {
    // Token setup
    string private _name = "SonicSuperRain";
    string private _symbol = "SSR";
    uint8 private constant _decimals = 18;
    uint256 private _totalSupply;
    
    // Reward token and router addresses
    address public REWARD_TOKEN;
    address constant private ROUTER = 0x95a7e403d7cF20F675fF9273D66e94d35ba49fA3; // ROUTER
    address public LP_PAIR;
    
    // Ownership
    address private _owner;
    
    // Balances and allowances
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    
    // Fee configuration
    uint256 public taxPercentage = 5; // 5% default tax
    uint256 public swapThreshold;
    
    // Reward distribution
    uint256 public distributionInterval = 300; // 5 minutes (in seconds)
    uint256 public batchSize = 50;
    uint256 public lastProcessedTime;
    uint256 public currentIndex;
    
    // Holder management
    address[] private holders;
    mapping(address => uint256) public holderIndexes;
    
    struct HolderInfo {
        uint256 amount;
        uint256 pendingRewards;
        uint256 totalExcluded;
    }
    
    mapping(address => HolderInfo) public holderInfo;
    
    // Rewards accounting - using higher precision for calculations
    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public dividendsPerShare;
    uint256 private constant PRECISION_FACTOR = 1e18;
    
    // Special addresses
    mapping(address => bool) public excluded;
    mapping(address => bool) public exempt;
    
    // Control flags
    bool private inSwap;
    bool public tradingEnabled;
    
    // Events
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event SwapAndDistribute(uint256 tokenAmount, uint256 rewardAmount);
    event Excluded(address indexed account, bool status);
    event TaxUpdated(uint256 newTaxPercentage);
    event IntervalUpdated(uint256 newDistributionInterval);
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event RewardsProcessed(uint256 holderCount);
    event RewardSent(address indexed holder, uint256 amount);
    event SharesUpdated(address indexed holder, uint256 amount);
    event TotalSharesUpdated(uint256 newValue);
    
    // Modifiers
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }
    
    modifier onlyOwner() {
        require(msg.sender == _owner, "Caller is not the owner");
        _;
    }
    
    // Constructor
    constructor() {
        _owner = msg.sender;
        
        // Initial supply
        _totalSupply = 100000000 * 10**_decimals;
        _balances[msg.sender] = _totalSupply;
        
        // Set default parameters
        swapThreshold = _totalSupply * 5 / 10000; // 0.05%
        
        // Set initial reward token address
        REWARD_TOKEN = 0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38; // WRAPPED_SONIC
        
        // Add owner to holders array
        _addHolder(_owner, _balances[_owner]);
        
        // Approve router for future swaps
        _approve(address(this), ROUTER, _totalSupply);
        
        emit Transfer(address(0), msg.sender, _totalSupply);
    }
    
    // External functions
    
    function setRewardToken(address newRewardToken) external onlyOwner {
        require(newRewardToken != address(0), "Reward token cannot be zero address");
        REWARD_TOKEN = newRewardToken;
    }
    
    function setLPPair(address newPair) external onlyOwner {
        require(newPair != address(0), "LP pair cannot be zero address");
        LP_PAIR = newPair;
    }
    
    function setTaxPercentage(uint256 newTaxPercentage) external onlyOwner {
        taxPercentage = newTaxPercentage;
        emit TaxUpdated(newTaxPercentage);
    }
    
    function setDistributionInterval(uint256 newInterval) external onlyOwner {
        require(newInterval >= 60, "Interval must be at least 60 seconds");
        distributionInterval = newInterval;
        emit IntervalUpdated(newInterval);
    }
    
    function setBatchSize(uint256 newBatchSize) external onlyOwner {
        require(newBatchSize >= 5 && newBatchSize <= 100, "Batch size must be between 5 and 100");
        batchSize = newBatchSize;
    }
    
    function setSwapThreshold(uint256 newThreshold) external onlyOwner {
        require(newThreshold > 0, "Threshold must be greater than 0");
        swapThreshold = newThreshold;
    }
    
    function setExcluded(address account, bool status) external onlyOwner {
        if (excluded[account] != status) {
            excluded[account] = status;
            if (status) {
                // If excluding an address, remove it from holders
                if (holderInfo[account].amount > 0) {
                    _removeHolder(account);
                }
            } else {
                // If including an address, add it to holders
                _setShare(account, balanceOf(account));
            }
        }
        emit Excluded(account, status);
    }
    
    function setExempt(address account, bool status) external onlyOwner {
        exempt[account] = status;
    }
    
    function enableTrading() external onlyOwner {
        require(!tradingEnabled, "Trading already enabled");
        tradingEnabled = true;
    }
    
    function transferOwnership(address newOwner) external onlyOwner {
        require(newOwner != address(0), "New owner cannot be zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
    
    /**
     * @dev Manually swap a specified amount of tokens for rewards
     * @param amount Amount of tokens to swap (0 for custom calculation based on contract balance)
     * @return swapped Amount of tokens that were actually swapped
     * @return received Amount of reward tokens received from the swap
     */
    function manualSwap(uint256 amount) external onlyOwner returns (uint256 swapped, uint256 received) {
        uint256 contractBalance = balanceOf(address(this));
        require(contractBalance > 0, "No tokens to swap");
        
        // Determine swap amount based on parameters and contract balance
        uint256 swapAmount;
        if (amount > 0 && amount <= contractBalance) {
            // Use specified amount
            swapAmount = amount;
        } else if (swapThreshold > 0 && contractBalance >= swapThreshold) {
            // Use threshold amount
            swapAmount = swapThreshold;
        } else {
            // Use entire balance
            swapAmount = contractBalance;
        }
        
        // Execute the swap and track results
        uint256 receivedAmount = _swapTokensForRewards(swapAmount);
        
        return (swapAmount, receivedAmount);
    }
    
    /**
     * @dev Manually distribute rewards to holders - optimized for cron job
     * @param batchSize Number of holders to process (0 for default batchSize)
     * @return processed Number of holders processed
     * @return currentIdx Current index position after processing
     */
    function processRewards(uint256 batchSize) external returns (uint256 processed, uint256 currentIdx) {
        require(msg.sender == _owner, "Only owner can process rewards");
        
        // No holders to process
        if (holders.length == 0) return (0, 0);
        
        // Use specified batch size or default
        uint256 batchToProcess = batchSize > 0 ? batchSize : this.batchSize();
        
        // Cap at the number of holders
        if (currentIndex + batchToProcess > holders.length) {
            batchToProcess = holders.length - currentIndex;
        }
        
        if (batchToProcess == 0) {
            // Reset index and update timestamp if we've processed everyone
            currentIndex = 0;
            lastProcessedTime = block.timestamp;
            return (0, 0);
        }
        
        uint256 startIndex = currentIndex;
        uint256 endIndex = currentIndex + batchToProcess;
        
        // Process this batch of holders
        for (uint256 i = startIndex; i < endIndex; i++) {
            if (i < holders.length) {
                _distributeRewards(holders[i]);
            }
        }
        
        // Update current index
        currentIndex = endIndex;
        
        // If we've processed everyone, reset index and update timestamp
        if (currentIndex >= holders.length) {
            currentIndex = 0;
            lastProcessedTime = block.timestamp;
            emit RewardsProcessed(holders.length);
        }
        
        return (endIndex - startIndex, currentIndex);
    }
    
    /**
     * @dev Process rewards for ALL holders in one transaction
     * @return processed Number of holders processed
     */
    function processAllRewards() external onlyOwner returns (uint256 processed) {
        // No holders to process
        if (holders.length == 0) return 0;
        
        // Process all holders
        for (uint256 i = 0; i < holders.length; i++) {
            _distributeRewards(holders[i]);
        }
        
        // Reset index and update timestamp
        currentIndex = 0;
        lastProcessedTime = block.timestamp;
        emit RewardsProcessed(holders.length);
        
        return holders.length;
    }
    
    /**
     * @dev Fix totalShares calculation and recalculate dividends
     */
    function recalculateShares() external onlyOwner {
        // Reset totalShares
        totalShares = 0;
        
        // Recalculate from actual holder balances
        for (uint256 i = 0; i < holders.length; i++) {
            address holder = holders[i];
            uint256 balance = _balances[holder];
            holderInfo[holder].amount = balance;
            totalShares += balance;
        }
        
        // Recalculate dividendsPerShare if we have dividends
        if (totalDividends > 0 && totalShares > 0) {
            dividendsPerShare = totalDividends * PRECISION_FACTOR / totalShares;
        }
        
        emit TotalSharesUpdated(totalShares);
    }
    
    /**
     * @dev Returns the contract's current balance of RAIN tokens available for swapping
     */
    function getSwappableBalance() external view returns (uint256) {
        return balanceOf(address(this));
    }
    
    /**
     * @dev Returns the contract's current balance of native SONIC available for distribution
     */
    function getRewardBalance() external view returns (uint256) {
        return address(this).balance;
    }
    
    /**
     * @dev Get detailed holder info for debugging
     */
    function getHolderInfo(address holder) external view returns (
        bool isHolder,
        uint256 balance,
        uint256 shares,
        uint256 pendingRewards,
        uint256 alreadyPaid
    ) {
        bool isInList = false;
        if (holderIndexes[holder] > 0 || (holders.length > 0 && holders[0] == holder)) {
            isInList = true;
        }
        
        return (
            isInList,
            _balances[holder],
            holderInfo[holder].amount,
            getUnpaidEarnings(holder),
            holderInfo[holder].totalExcluded
        );
    }
    
    /**
     * @dev Get detailed contract status for debugging
     */
    function getContractStatus() external view returns (
        uint256 totalHolders,
        uint256 tokenTotalSupply,
        uint256 contractTokenBalance,
        uint256 contractSonicBalance,
        uint256 trackedTotalShares,
        uint256 totalRewards,
        uint256 rewardPerShare
    ) {
        return (
            holders.length,
            _totalSupply,
            balanceOf(address(this)),
            address(this).balance,
            totalShares,
            totalDividends,
            dividendsPerShare
        );
    }
    
    // ERC20 Standard Functions
    
    function name() public view returns (string memory) {
        return _name;
    }
    
    function symbol() public view returns (string memory) {
        return _symbol;
    }
    
    function decimals() public pure returns (uint8) {
        return _decimals;
    }
    
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }
    
    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }
    
    function transfer(address recipient, uint256 amount) public returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }
    
    function allowance(address owner_, address spender) public view returns (uint256) {
        return _allowances[owner_][spender];
    }
    
    function approve(address spender, uint256 amount) public returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }
    
    function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
        uint256 currentAllowance = _allowances[sender][msg.sender];
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
            _approve(sender, msg.sender, currentAllowance - amount);
        }
        
        _transfer(sender, recipient, amount);
        return true;
    }
    
    // Information functions
    
    function owner() public view returns (address) {
        return _owner;
    }
    
    function getHolderCount() public view returns (uint256) {
        return holders.length;
    }
    
    function isRewardsReady() public view returns (bool) {
        return block.timestamp >= lastProcessedTime + distributionInterval;
    }
    
    function getTimeUntilRewards() public view returns (uint256) {
        if (isRewardsReady()) return 0;
        return lastProcessedTime + distributionInterval - block.timestamp;
    }
    
    function getUnpaidEarnings(address account) public view returns (uint256) {
        if (holderInfo[account].amount == 0) return 0;
        
        uint256 earnedRewards = (dividendsPerShare * holderInfo[account].amount) / PRECISION_FACTOR;
        uint256 alreadyPaid = holderInfo[account].totalExcluded;
        
        if (earnedRewards <= alreadyPaid) return 0;
        return earnedRewards - alreadyPaid;
    }
    
    function getDistributionStatus() public view returns (uint256, uint256, uint256) {
        if (holders.length == 0) return (0, 0, 100);
        
        uint256 percentage = currentIndex * 100 / holders.length;
        return (holders.length, currentIndex, percentage);
    }
    
    // Internal functions
    
    function _transfer(address from, address to, uint256 amount) internal {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        // Check if trading is enabled when interacting with LP
        if (!tradingEnabled && (from == LP_PAIR || to == LP_PAIR)) {
            require(from == _owner || to == _owner, "Trading not enabled yet");
        }
        
        // Auto-liquidity and swap
        bool canSwap = balanceOf(address(this)) >= swapThreshold;
        if (canSwap && !inSwap && from != LP_PAIR && from != _owner && to != _owner) {
            uint256 swapAmount = amount > swapThreshold ? swapThreshold : amount;
            _swapTokensForRewards(swapAmount);
        }
        
        // Fee system
        bool takeFee = !exempt[from] && !exempt[to];
        
        uint256 fees = 0;
        if (takeFee) {
            if (from == LP_PAIR || to == LP_PAIR) {
                fees = amount * taxPercentage / 100;
            }
            if (fees > 0) {
                _takeFee(from, address(this), fees);
                amount -= fees;
            }
        }
        
        // Standard transfer
        _balances[from] -= amount;
        _balances[to] += amount;
        emit Transfer(from, to, amount);
        
        // Update holder tracking
        if (!excluded[from] && from != LP_PAIR) {
            _setShare(from, _balances[from]);
        }
        
        if (!excluded[to] && to != LP_PAIR) {
            _setShare(to, _balances[to]);
        }
    }
    
    function _approve(address owner_, address spender, uint256 amount) internal {
        require(owner_ != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        
        _allowances[owner_][spender] = amount;
        emit Approval(owner_, spender, amount);
    }
    
    function _takeFee(address from, address to, uint256 amount) internal {
        _balances[to] += amount;
        emit Transfer(from, to, amount);
    }
    
    // Optimized swap function
    function _swapTokensForRewards(uint256 amount) internal lockTheSwap returns (uint256) {
        // Setup swap path
        address[] memory path = new address[](2);
        path[0] = address(this);      // SUPERRAIN token address
        path[1] = REWARD_TOKEN;       // WRAPPED_SONIC address
        
        // Approve router
        _approve(address(this), ROUTER, amount);
        
        // Get initial balance of native SONIC
        uint256 initialBalance = address(this).balance;
        
        try IUniswapRouter(ROUTER).swapExactTokensForETHSupportingFeeOnTransferTokens(
            amount,
            0,
            path,
            address(this),
            block.timestamp + 1200 // 20 minute deadline
        ) {
            // Calculate received native SONIC
            uint256 newBalance = address(this).balance;
            uint256 receivedSonic = newBalance - initialBalance;
            
            if (receivedSonic > 0 && totalShares > 0) {
                // Update dividends per share with higher precision
                totalDividends += receivedSonic;
                dividendsPerShare = totalDividends * PRECISION_FACTOR / totalShares;
                
                emit SwapAndDistribute(amount, receivedSonic);
            }
            
            return receivedSonic;
        } catch {
            // If swap fails, return 0
            return 0;
        }
    }
    
    // Optimized reward distribution function
    function _distributeRewards(address holder) internal {
        // Skip if holder has zero balance or is excluded
        if (holderInfo[holder].amount == 0 || excluded[holder]) return;
        
        uint256 amount = getUnpaidEarnings(holder);
        if (amount > 0) {
            uint256 contractBalance = address(this).balance;
            
            if (amount <= contractBalance) {
                // Update holder's accounting first to prevent reentrancy
                holderInfo[holder].totalExcluded = (dividendsPerShare * holderInfo[holder].amount) / PRECISION_FACTOR;
                holderInfo[holder].pendingRewards = 0;
                
                // Send native SONIC
                (bool success, ) = holder.call{value: amount}("");
                
                // Only emit event if transfer succeeded
                if (success) {
                    emit RewardSent(holder, amount);
                }
            }
        }
    }
    
    // Optimized share tracking function
    function _setShare(address holder, uint256 amount) internal {
        // Only consider meaningful balances
        if (amount < 1 * 10**_decimals) { // Minimum 1 token
            if (amount == 0 && holderInfo[holder].amount > 0) {
                _removeHolder(holder);
            }
            return;
        }
        
        if (holderInfo[holder].amount > 0) {
            // Existing holder - update totalShares correctly
            if (amount == 0) {
                _removeHolder(holder);
            } else {
                uint256 oldAmount = holderInfo[holder].amount;
                
                // Update totalShares safely
                totalShares = totalShares - oldAmount + amount;
                
                // Update holder info
                holderInfo[holder].amount = amount;
                
                emit SharesUpdated(holder, amount);
            }
        } else {
            // New holder
            _addHolder(holder, amount);
        }
    }
    
    function _addHolder(address holder, uint256 amount) internal {
        // Check if holder already exists (safety check)
        if (holderIndexes[holder] > 0 || (holders.length > 0 && holders[0] == holder)) {
            return;
        }
        
        // Add to holders array
        holders.push(holder);
        holderIndexes[holder] = holders.length - 1;
        
        // Set holder info
        holderInfo[holder].amount = amount;
        totalShares += amount;
        
        emit SharesUpdated(holder, amount);
    }
    
    function _removeHolder(address holder) internal {
        // Make sure holder exists
        if (holders.length == 0 || 
            (holderIndexes[holder] == 0 && holders[0] != holder) || 
            holderIndexes[holder] >= holders.length) {
            return;
        }
        
        // Get holder amount before removal
        uint256 holderAmount = holderInfo[holder].amount;
        
        // Handle array removal
        address lastHolder = holders[holders.length - 1];
        uint256 holderIndex = holderIndexes[holder];
        
        // Replace with last element
        holders[holderIndex] = lastHolder;
        holderIndexes[lastHolder] = holderIndex;
        
        // Remove last element
        holders.pop();
        delete holderIndexes[holder];
        
        // Update totalShares
        totalShares -= holderAmount;
        
        // Clear holder info
        delete holderInfo[holder];
        
        emit SharesUpdated(holder, 0);
    }
    
    // Rescue functions
    
    function rescueToken(address token, uint256 amount) external onlyOwner {
        IERC20(token).transfer(_owner, amount);
    }
    
    function withdrawETH() external onlyOwner {
        (bool success,) = _owner.call{value: address(this).balance}("");
        require(success, "ETH withdrawal failed");
    }
    
    // Receive function to accept ETH (native SONIC)
    receive() external payable {}
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 1000
  },
  "viaIR": true,
  "evmVersion": "paris",
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"Excluded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newDistributionInterval","type":"uint256"}],"name":"IntervalUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"holderCount","type":"uint256"}],"name":"RewardsProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SharesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardAmount","type":"uint256"}],"name":"SwapAndDistribute","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newTaxPercentage","type":"uint256"}],"name":"TaxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"TotalSharesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"LP_PAIR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARD_TOKEN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"batchSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"distributionInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendsPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractStatus","outputs":[{"internalType":"uint256","name":"totalHolders","type":"uint256"},{"internalType":"uint256","name":"tokenTotalSupply","type":"uint256"},{"internalType":"uint256","name":"contractTokenBalance","type":"uint256"},{"internalType":"uint256","name":"contractSonicBalance","type":"uint256"},{"internalType":"uint256","name":"trackedTotalShares","type":"uint256"},{"internalType":"uint256","name":"totalRewards","type":"uint256"},{"internalType":"uint256","name":"rewardPerShare","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDistributionStatus","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolderCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"getHolderInfo","outputs":[{"internalType":"bool","name":"isHolder","type":"bool"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"pendingRewards","type":"uint256"},{"internalType":"uint256","name":"alreadyPaid","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSwappableBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTimeUntilRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getUnpaidEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"holderIndexes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"holderInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"pendingRewards","type":"uint256"},{"internalType":"uint256","name":"totalExcluded","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRewardsReady","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastProcessedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualSwap","outputs":[{"internalType":"uint256","name":"swapped","type":"uint256"},{"internalType":"uint256","name":"received","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processAllRewards","outputs":[{"internalType":"uint256","name":"processed","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"batchSize","type":"uint256"}],"name":"processRewards","outputs":[{"internalType":"uint256","name":"processed","type":"uint256"},{"internalType":"uint256","name":"currentIdx","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recalculateShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBatchSize","type":"uint256"}],"name":"setBatchSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newInterval","type":"uint256"}],"name":"setDistributionInterval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPair","type":"address"}],"name":"setLPPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRewardToken","type":"address"}],"name":"setRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newThreshold","type":"uint256"}],"name":"setSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTaxPercentage","type":"uint256"}],"name":"setTaxPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523461029257610014600054610297565b601f8111610249575b507f536f6e696353757065725261696e00000000000000000000000000000000001c60005560015461004e90610297565b601f81116101ff575b5060066229a9a960e91b016001556005600881905561012c600a556032600b5580546001600160a01b03199081163390811783556a52b7d2dcc80cd2e4000000600281905560009182526006602052604080832091909155690a968163f0a57b4000006009556003805490931673039e2fb66102314ce7b64ce5ce3e5183bc94ad381790925591546001600160a01b03168083529120546100f7916102d1565b60025430156101ae5730600052600760205260406000207395a7e403d7cf20f675ff9273d66e94d35ba49fa3600052602052806040600020557395a7e403d7cf20f675ff9273d66e94d35ba49fa36040518281527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203092a360405190815260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60203393a360405161273b90816104468239f35b60405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b6001600052601f0160051c7fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6908101905b81811061023d5750610057565b60008155600101610230565b60008052601f0160051c7f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563908101905b818110610286575061001d565b60008155600101610279565b600080fd5b90600182811c921680156102c7575b60208310146102b157565b634e487b7160e01b600052602260045260246000fd5b91607f16916102a6565b6001600160a01b03166000818152600f60205260409020549091901580159061040a575b61040657600e54680100000000000000008110156103f05760018101600e556000600e548210156103dc57600e90819052600080516020612b818339815191529190910180546001600160a01b031916841790555460009060001981019081116103c857838252600f60205260408220558281526010602052816040822055601154908282018092116103b457507fe6382c9ed5c0c33bb05042f73cf6cbe9cb25639f9a711e094ee563bc9cb80e2c91602091601155604051908152a2565b634e487b7160e01b81526011600452602490fd5b634e487b7160e01b82526011600452602482fd5b634e487b7160e01b81526032600452602490fd5b634e487b7160e01b600052604160045260246000fd5b5050565b50600e54151580156102f557506000600e54156103dc57600e9052600080516020612b81833981519152546001600160a01b031682146102f556fe608080604052600436101561001d575b50361561001b57600080fd5b005b60003560e01c9081630445b667146114bf5750806306fdde0314611404578063095ea7b3146113de57806318160ddd146113c057806323b872dd146112cc57806326987b60146112ae5780632836be24146111c057806328fd31981461119d578063313ce5671461118157806333f3d628146110c35780633a98ef39146110a5578063429cead1146110665780634ada218b1461104057806354e4067a14610f6d578063576f35e314610eba5780635e42b45514610e9e57806363c98ffa14610e80578063699abb3c14610e265780636d1d59a814610dcb57806370a0823114610d9357806371201a0e14610d755780637136982b14610d575780637a16a49e14610c8b578063880603d414610b6d5780638a8c523c14610ae65780638aee812714610a3c5780638da5cb5b14610a155780638f1b0efc146109e457806393a013e0146109bd57806395d89b41146108b957806399248ea714610892578063997664d7146108745780639d0014b1146107fb5780639fde54f5146107b2578063a1b140b614610775578063a9059cbb14610744578063ae7b6d1614610726578063b70143c914610652578063c032846b146105f7578063c07fbb8c146105bd578063cbdd9b30146105a2578063dd62ed3e1461054a578063de1c24d0146104ac578063e086e5ec14610427578063e2d2e21914610409578063e6ef675b146103df578063f1320af2146103a0578063f2fde38b146102dc578063f4daaba1146102be578063f74fe6be146102995763f96b88841461025b573861000f565b34610294576000366003190112610294576102826001600160a01b036005541633146115c3565b602061028c6119d0565b604051908152f35b600080fd5b346102945760003660031901126102945760206102b46119bb565b6040519015158152f35b34610294576000366003190112610294576020600b54604051908152f35b34610294576020366003190112610294576102f5611523565b600554906001600160a01b03808316916103108333146115c3565b1691821561035c578273ffffffffffffffffffffffffffffffffffffffff19927f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a31617600555005b606460405162461bcd60e51b815260206004820152602060248201527f4e6577206f776e65722063616e6e6f74206265207a65726f20616464726573736044820152fd5b34610294576020366003190112610294576001600160a01b036103c1611523565b166000526015602052602060ff604060002054166040519015158152f35b346102945760203660031901126102945760406103fd6004356117cc565b82519182526020820152f35b34610294576000366003190112610294576020601354604051908152f35b346102945760003660031901126102945760008080806001600160a01b03600554166104548133146115c3565b47905af161046061178c565b501561046857005b606460405162461bcd60e51b815260206004820152601560248201527f455448207769746864726177616c206661696c656400000000000000000000006044820152fd5b34610294576020366003190112610294576001600160a01b036104cd611523565b6104dc826005541633146115c3565b1680156105065773ffffffffffffffffffffffffffffffffffffffff196004541617600455600080f35b606460405162461bcd60e51b815260206004820152601e60248201527f4c5020706169722063616e6e6f74206265207a65726f206164647265737300006044820152fd5b3461029457604036600319011261029457610563611523565b6001600160a01b03610573611539565b911660005260076020526001600160a01b03604060002091166000526020526020604060002054604051908152f35b3461029457600036600319011261029457602061028c611762565b34610294576020366003190112610294576001600160a01b036105de611523565b16600052600f6020526020604060002054604051908152f35b346102945760003660031901126102945760e0600e5460025430600052600660205260406000205447601154906012549260135494604051968752602087015260408601526060850152608084015260a083015260c0820152f35b346102945760203660031901126102945760043561067c6001600160a01b036005541633146115c3565b3060005260066020526040600020549081156106e257604091811515806106d8575b156106ae57505b6103fd81612275565b6009549150811515806106ce575b156106c757506106a5565b90506106a5565b50818110156106bc565b508082111561069e565b606460405162461bcd60e51b815260206004820152601160248201527f4e6f20746f6b656e7320746f20737761700000000000000000000000000000006044820152fd5b34610294576000366003190112610294576020600854604051908152f35b346102945760403660031901126102945761076a610760611523565b6024359033611b76565b602060405160018152f35b34610294576000366003190112610294576107ae610791611727565b604080519384526020840192909252908201529081906060820190565b0390f35b346102945761001b6001600160a01b036107cb3661154f565b91906107dc826005541633146115c3565b16600052601560205260406000209060ff801983541691151516179055565b34610294576020366003190112610294576004356108256001600160a01b036005541633146115c3565b801561083057600955005b606460405162461bcd60e51b815260206004820152602060248201527f5468726573686f6c64206d7573742062652067726561746572207468616e20306044820152fd5b34610294576000366003190112610294576020601254604051908152f35b346102945760003660031901126102945760206001600160a01b0360035416604051908152f35b346102945760003660031901126102945760405160006001548060011c906001811680156109b3575b60208310811461099f5782855290811561097b575060011461091b575b6107ae8361090f8185038261157e565b604051918291826114da565b91905060016000527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6916000905b8082106109615750909150810160200161090f6108ff565b919260018160209254838588010152019101909291610949565b60ff191660208086019190915291151560051b8401909101915061090f90506108ff565b602484634e487b7160e01b81526022600452fd5b91607f16916108e2565b346102945760003660031901126102945760206001600160a01b0360045416604051908152f35b3461029457600036600319011261029457602061028c306001600160a01b0316600052600660205260406000205490565b346102945760003660031901126102945760206001600160a01b0360055416604051908152f35b34610294576020366003190112610294576001600160a01b03610a5d611523565b610a6c826005541633146115c3565b168015610a965773ffffffffffffffffffffffffffffffffffffffff196003541617600355600080f35b608460405162461bcd60e51b815260206004820152602360248201527f52657761726420746f6b656e2063616e6e6f74206265207a65726f206164647260448201526265737360e81b6064820152fd5b3461029457600036600319011261029457610b0d6001600160a01b036005541633146115c3565b60165460ff8160081c16610b295761ff00191661010017601655005b606460405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c65640000000000000000006044820152fd5b3461029457600036600319011261029457610b946001600160a01b036005541633146115c3565b600060115560005b600e54811015610bf55780610bec6001600160a01b03610bbd6001946116ff565b90549060031b1c168060005260066020526040600020549060005260106020528060406000205560115461171a565b60115501610b9c565b6012548015801580610c80575b610c36575b7f3677ba94506ffc0a2e6968fe926b51985b6403fcc6b900d17c926b41079f93346020601154604051908152a1005b670de0b6b3a76400008202918204670de0b6b3a7640000141715610c6a57601154610c6091611621565b6013558080610c07565b634e487b7160e01b600052601160045260246000fd5b506011541515610c02565b3461029457602036600319011261029457600435610cb56001600160a01b036005541633146115c3565b603c8110610cee576020817fc6f44473d25b86976ee7357c1339328224e349abc5486edc3007ef658a57608a92600a55604051908152a1005b608460405162461bcd60e51b8152602060048201526024808201527f496e74657276616c206d757374206265206174206c656173742036302073656360448201527f6f6e6473000000000000000000000000000000000000000000000000000000006064820152fd5b34610294576000366003190112610294576020600e54604051908152f35b34610294576000366003190112610294576020600a54604051908152f35b3461029457602036600319011261029457602061028c610db1611523565b6001600160a01b0316600052600660205260406000205490565b34610294576020366003190112610294576001600160a01b03610dec611523565b166000526010602052604060002080546107ae60026001840154930154604051938493846040919493926060820195825260208201520152565b34610294576020366003190112610294577f35ad15e7f5e4a16b548e8916bd02c51847dde8d106f334b4edaaacf140e43c916020600435610e736001600160a01b036005541633146115c3565b80600855604051908152a1005b34610294576000366003190112610294576020600c54604051908152f35b3461029457600036600319011261029457602047604051908152f35b3461029457602036600319011261029457600435610ee46001600160a01b036005541633146115c3565b600581101580610f62575b15610ef957600b55005b608460405162461bcd60e51b8152602060048201526024808201527f42617463682073697a65206d757374206265206265747765656e203520616e6460448201527f20313030000000000000000000000000000000000000000000000000000000006064820152fd5b506064811115610eef565b346102945760203660031901126102945760a0610f88611523565b6000906001600160a01b03811680600052600f60205260406000205415801590611014575b61100b575b80600052600660205260406000205491816000526010602052610fda60406000205491611641565b9160005260106020526002604060002001549260405194151585526020850152604084015260608301526080820152f35b60019250610fb2565b50600e5415158015610fad5750806001600160a01b036110326116b6565b90549060031b1c1614610fad565b3461029457600036600319011261029457602060ff60165460081c166040519015158152f35b34610294576020366003190112610294576001600160a01b03611087611523565b166000526014602052602060ff604060002054166040519015158152f35b34610294576000366003190112610294576020601154604051908152f35b34610294576040366003190112610294576001600160a01b0360206110e6611523565b604483600554166110f88133146115c3565b600060405195869485937fa9059cbb00000000000000000000000000000000000000000000000000000000855260048501526024356024850152165af180156111755761114157005b6020813d60201161116d575b8161115a6020938361157e565b8101031261029457518015150361029457005b3d915061114d565b6040513d6000823e3d90fd5b3461029457600036600319011261029457602060405160128152f35b3461029457602036600319011261029457602061028c6111bb611523565b611641565b346102945760207ff3a7c8242f0708821ed31a47f066fc7fa42f2ae65ed3e4d1d7cb5b3765d2939c6111f13661154f565b61120a6001600160a01b036005959395541633146115c3565b6001600160a01b03841693846000526014835260ff6040600020541691801515809315150361123f575b5050604051908152a2005b85600052601484526112618160406000209060ff801983541691151516179055565b15611291578460005260108352604060002054611282575b505b8480611234565b61128b906120ba565b84611279565b6112a990856000526006845260406000205490611fd2565b61127b565b34610294576000366003190112610294576020600d54604051908152f35b34610294576060366003190112610294576112e5611523565b6112ed611539565b604435906001600160a01b038316600052600760205260406000206001600160a01b033316600052602052604060002054926000198403611333575b61076a9350611b76565b8284106113565761135161134a8461076a966115b6565b3383611a3c565b611329565b608460405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e63650000000000000000000000000000000000000000000000006064820152fd5b34610294576000366003190112610294576020600254604051908152f35b346102945760403660031901126102945761076a6113fa611523565b6024359033611a3c565b3461029457600036600319011261029457604051600080548060011c906001811680156114b5575b60208310811461099f5782855290811561097b5750600114611458576107ae8361090f8185038261157e565b60008080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563939250905b80821061149b5750909150810160200161090f6108ff565b919260018160209254838588010152019101909291611483565b91607f169161142c565b34610294576000366003190112610294576020906009548152f35b91909160208152825180602083015260005b81811061150d575060409293506000838284010152601f8019910116010190565b80602080928701015160408286010152016114ec565b600435906001600160a01b038216820361029457565b602435906001600160a01b038216820361029457565b6040906003190112610294576004356001600160a01b0381168103610294579060243580151581036102945790565b90601f8019910116810190811067ffffffffffffffff8211176115a057604052565b634e487b7160e01b600052604160045260246000fd5b91908203918211610c6a57565b156115ca57565b606460405162461bcd60e51b815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152fd5b81810292918115918404141715610c6a57565b811561162b570490565b634e487b7160e01b600052601260045260246000fd5b6001600160a01b0316806000526010602052604060002054156116b057670de0b6b3a76400006116826013548360005260106020526040600020549061160e565b04906000526010602052600260406000200154808211156116a9576116a6916115b6565b90565b5050600090565b50600090565b600e54156116e957600e60009081527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd91565b634e487b7160e01b600052603260045260246000fd5b600e548110156116e957600e60005260206000200190600090565b91908201809211610c6a57565b600e54801561175657600d54916064830283810460641484151715610c6a578261175091611621565b91929190565b50600090600090606490565b61176a6119bb565b611787576116a6611780600c54600a549061171a565b42906115b6565b600090565b3d156117c7573d9067ffffffffffffffff82116115a057604051916117bb601f8201601f19166020018461157e565b82523d6000602084013e565b606090565b906001600160a01b0360055416330361197757600e5491821561196e57600081156118e457505b809280611803600d54938461171a565b116118d1575b505081156118be5761181e600d54928361171a565b91805b8381106118855750826118449293600d55600e548082101561184b575b506115b6565b90600d5490565b60207fcbb46d9b69e77a6b5011c11cd2bf9be0461c9a1920e9f42678661cec154cd2a8916000600d5542600c55604051908152a13861183e565b600190600e548110611898575b01611821565b6118b96001600160a01b036118ac836116ff565b90549060031b1c16612535565b611892565b90506000600d5542600c55600090600090565b6118dc9293506115b6565b903880611809565b90506040517ff4daaba1000000000000000000000000000000000000000000000000000000008152602081600481305afa91821561196257809261192a575b50506117f3565b9091506020823d60201161195a575b816119466020938361157e565b810103126119575750513880611923565b80fd5b3d9150611939565b604051903d90823e3d90fd5b50600091508190565b606460405162461bcd60e51b815260206004820152601e60248201527f4f6e6c79206f776e65722063616e2070726f63657373207265776172647300006044820152fd5b6119ca600c54600a549061171a565b42101590565b600e54156117875760005b600e54811015611a0257806119fc6001600160a01b036118ac6001946116ff565b016119db565b506000600d5542600c55600e547fcbb46d9b69e77a6b5011c11cd2bf9be0461c9a1920e9f42678661cec154cd2a86020604051838152a190565b6001600160a01b0316908115611b0d576001600160a01b0316918215611aa35760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925918360005260078252604060002085600052825280604060002055604051908152a3565b608460405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152fd5b608460405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152fd5b6001600160a01b038116908115611f68576001600160a01b038316938415611f18578015611eae5782859160165460ff8160081c161580611e86575b611e0e575b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91602091306000526006835260406000205490600954809210159081611e02575b5080611ded575b80611dd8575b80611dc3575b611da1575b50836000526015825260ff604060002054161580611d89575b600090611d12575b5083600052600682526040600020611c4b8282546115b6565b905584600052600682526040600020611c6582825461171a565b9055604051908152a381600052601460205260ff604060002054161580611cfd575b611cde575b505081600052601460205260ff604060002054161580611cc9575b611caf575050565b611cc791600052600660205260406000205490611fd2565b565b506001600160a01b0360045416821415611ca7565b611cf691600052600660205260406000205490611fd2565b3880611c8c565b506001600160a01b0360045416821415611c87565b6001600160a01b0360045416808614908115611d7f575b50611d6a575b8015611c3257611d649130600052600684526040600020611d5183825461171a565b90556040518281528686863093a36115b6565b38611c32565b506064611d796008548361160e565b04611d2f565b9050861438611d29565b50846000526015825260ff6040600020541615611c2a565b80821115611db957611db290612275565b5038611c11565b50611db281612275565b506001600160a01b0360055416861415611c0c565b506001600160a01b0360055416851415611c06565b506001600160a01b0360045416851415611c00565b60ff9150161538611bf9565b915091506001600160a01b0360055416808514908115611e7c575b5015611e385785918491611bb7565b606460405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152fd5b9050861438611e29565b506001600160a01b0360045416808414908115611ea4575b50611bb2565b9050841438611e9e565b608460405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152fd5b608460405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152fd5b608460405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152fd5b670de0b6b3a76400008210612082576001600160a01b03811691826000526010602052604060002054151560001461207757806120145750611cc791506120ba565b7fe6382c9ed5c0c33bb05042f73cf6cbe9cb25639f9a711e094ee563bc9cb80e2c9150602090836000526010825261205c816120576040600020546011546115b6565b61171a565b601155836000526010825280604060002055604051908152a2565b90611cc79250612620565b90158061209a575b6120915750565b611cc7906120ba565b506001600160a01b0381166000526010602052604060002054151561208a565b600e54908115801561222b575b801561220a575b612206576001600160a01b031690816000526010602052604060002054906000198101908111610c6a576121096001600160a01b03916116ff565b90549060031b1c1682600052600f6020526040600020549061214d8161212e846116ff565b9091906001600160a01b038084549260031b9316831b921b1916179055565b600052600f602052604060002055600e549081156121f0576121a49160001901612176816116ff565b6001600160a01b0382549160031b1b19169055600e5582600052600f602052600060408120556011546115b6565b601155806000526010602052600060026040822082815582600182015501557fe6382c9ed5c0c33bb05042f73cf6cbe9cb25639f9a711e094ee563bc9cb80e2c602060405160008152a2565b634e487b7160e01b600052603160045260246000fd5b5050565b506001600160a01b038116600052600f6020528160406000205410156120ce565b506001600160a01b03811680600052600f602052604060002054159081612253575b506120c7565b90506001600160a01b036122656116b6565b90549060031b1c1614153861224d565b61228b90600160ff196016541617601655612298565b9060ff1960165416601655565b6000906040516122a960608261157e565b6002815260208101906040368337805115612521573082526001600160a01b036003541681516001101561250d5760408201523015611b0d573084526007602052604084207395a7e403d7cf20f675ff9273d66e94d35ba49fa385526020528260408520557395a7e403d7cf20f675ff9273d66e94d35ba49fa36040518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203092a347916104b042018042116124f9577395a7e403d7cf20f675ff9273d66e94d35ba49fa33b156124f5579185916040519384927f791ac94700000000000000000000000000000000000000000000000000000000845260a484019088600486015285602486015260a060448601525180915260c484019290855b8181106124d057505030606485015250608483015281900381837395a7e403d7cf20f675ff9273d66e94d35ba49fa35af190816124bc575b5061240a57505090565b61241490476115b6565b91821515806124b1575b61242757505090565b6124338360125461171a565b9081601255670de0b6b3a7640000820291808304670de0b6b3a7640000149015171561249d57507f10da9408d1358808fea34ded33d675db0ba8e618a2fb814298059b2a6b0a473f9161248b60409260115490611621565b6013558151908152836020820152a190565b80634e487b7160e01b602492526011600452fd5b50601154151561241e565b846124c99195929561157e565b9238612400565b82516001600160a01b031685528a9650879550602094850194909201916001016123c8565b8580fd5b602486634e487b7160e01b81526011600452fd5b602485634e487b7160e01b81526032600452fd5b602484634e487b7160e01b81526032600452fd5b6001600160a01b03811690816000526010602052604060002054158015612608575b6122065761256481611641565b9081612570575b505050565b4782111561257d57505050565b60008080848194670de0b6b3a76400006125a66013548a8652601060205260408620549061160e565b048884526010602052600260408520015587835260106020528260016040822001555af16125d261178c565b506125db575050565b60207f6177f4110771217c72937d51f3a73915f2c714a6b98507e17eea7a186136a24a91604051908152a2565b5081600052601460205260ff60406000205416612557565b906001600160a01b0382169182600052600f602052604060002054158015906126d9575b61256b57600e5490680100000000000000008210156115a05761212e8260016126709401600e556116ff565b600e546000198101908111610c6a577fe6382c9ed5c0c33bb05042f73cf6cbe9cb25639f9a711e094ee563bc9cb80e2c9160209184600052600f83526040600020558360005260108252806040600020556126cd8160115461171a565b601155604051908152a2565b50600e54151580156126445750826001600160a01b036126f76116b6565b90549060031b1c161461264456fea26469706673582212203608c89ffa25b8fd9ca72abf410b8086f24bb3154b8c37f17ac8af4a75d7217564736f6c634300081c0033bb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd

Deployed Bytecode

0x608080604052600436101561001d575b50361561001b57600080fd5b005b60003560e01c9081630445b667146114bf5750806306fdde0314611404578063095ea7b3146113de57806318160ddd146113c057806323b872dd146112cc57806326987b60146112ae5780632836be24146111c057806328fd31981461119d578063313ce5671461118157806333f3d628146110c35780633a98ef39146110a5578063429cead1146110665780634ada218b1461104057806354e4067a14610f6d578063576f35e314610eba5780635e42b45514610e9e57806363c98ffa14610e80578063699abb3c14610e265780636d1d59a814610dcb57806370a0823114610d9357806371201a0e14610d755780637136982b14610d575780637a16a49e14610c8b578063880603d414610b6d5780638a8c523c14610ae65780638aee812714610a3c5780638da5cb5b14610a155780638f1b0efc146109e457806393a013e0146109bd57806395d89b41146108b957806399248ea714610892578063997664d7146108745780639d0014b1146107fb5780639fde54f5146107b2578063a1b140b614610775578063a9059cbb14610744578063ae7b6d1614610726578063b70143c914610652578063c032846b146105f7578063c07fbb8c146105bd578063cbdd9b30146105a2578063dd62ed3e1461054a578063de1c24d0146104ac578063e086e5ec14610427578063e2d2e21914610409578063e6ef675b146103df578063f1320af2146103a0578063f2fde38b146102dc578063f4daaba1146102be578063f74fe6be146102995763f96b88841461025b573861000f565b34610294576000366003190112610294576102826001600160a01b036005541633146115c3565b602061028c6119d0565b604051908152f35b600080fd5b346102945760003660031901126102945760206102b46119bb565b6040519015158152f35b34610294576000366003190112610294576020600b54604051908152f35b34610294576020366003190112610294576102f5611523565b600554906001600160a01b03808316916103108333146115c3565b1691821561035c578273ffffffffffffffffffffffffffffffffffffffff19927f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a31617600555005b606460405162461bcd60e51b815260206004820152602060248201527f4e6577206f776e65722063616e6e6f74206265207a65726f20616464726573736044820152fd5b34610294576020366003190112610294576001600160a01b036103c1611523565b166000526015602052602060ff604060002054166040519015158152f35b346102945760203660031901126102945760406103fd6004356117cc565b82519182526020820152f35b34610294576000366003190112610294576020601354604051908152f35b346102945760003660031901126102945760008080806001600160a01b03600554166104548133146115c3565b47905af161046061178c565b501561046857005b606460405162461bcd60e51b815260206004820152601560248201527f455448207769746864726177616c206661696c656400000000000000000000006044820152fd5b34610294576020366003190112610294576001600160a01b036104cd611523565b6104dc826005541633146115c3565b1680156105065773ffffffffffffffffffffffffffffffffffffffff196004541617600455600080f35b606460405162461bcd60e51b815260206004820152601e60248201527f4c5020706169722063616e6e6f74206265207a65726f206164647265737300006044820152fd5b3461029457604036600319011261029457610563611523565b6001600160a01b03610573611539565b911660005260076020526001600160a01b03604060002091166000526020526020604060002054604051908152f35b3461029457600036600319011261029457602061028c611762565b34610294576020366003190112610294576001600160a01b036105de611523565b16600052600f6020526020604060002054604051908152f35b346102945760003660031901126102945760e0600e5460025430600052600660205260406000205447601154906012549260135494604051968752602087015260408601526060850152608084015260a083015260c0820152f35b346102945760203660031901126102945760043561067c6001600160a01b036005541633146115c3565b3060005260066020526040600020549081156106e257604091811515806106d8575b156106ae57505b6103fd81612275565b6009549150811515806106ce575b156106c757506106a5565b90506106a5565b50818110156106bc565b508082111561069e565b606460405162461bcd60e51b815260206004820152601160248201527f4e6f20746f6b656e7320746f20737761700000000000000000000000000000006044820152fd5b34610294576000366003190112610294576020600854604051908152f35b346102945760403660031901126102945761076a610760611523565b6024359033611b76565b602060405160018152f35b34610294576000366003190112610294576107ae610791611727565b604080519384526020840192909252908201529081906060820190565b0390f35b346102945761001b6001600160a01b036107cb3661154f565b91906107dc826005541633146115c3565b16600052601560205260406000209060ff801983541691151516179055565b34610294576020366003190112610294576004356108256001600160a01b036005541633146115c3565b801561083057600955005b606460405162461bcd60e51b815260206004820152602060248201527f5468726573686f6c64206d7573742062652067726561746572207468616e20306044820152fd5b34610294576000366003190112610294576020601254604051908152f35b346102945760003660031901126102945760206001600160a01b0360035416604051908152f35b346102945760003660031901126102945760405160006001548060011c906001811680156109b3575b60208310811461099f5782855290811561097b575060011461091b575b6107ae8361090f8185038261157e565b604051918291826114da565b91905060016000527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6916000905b8082106109615750909150810160200161090f6108ff565b919260018160209254838588010152019101909291610949565b60ff191660208086019190915291151560051b8401909101915061090f90506108ff565b602484634e487b7160e01b81526022600452fd5b91607f16916108e2565b346102945760003660031901126102945760206001600160a01b0360045416604051908152f35b3461029457600036600319011261029457602061028c306001600160a01b0316600052600660205260406000205490565b346102945760003660031901126102945760206001600160a01b0360055416604051908152f35b34610294576020366003190112610294576001600160a01b03610a5d611523565b610a6c826005541633146115c3565b168015610a965773ffffffffffffffffffffffffffffffffffffffff196003541617600355600080f35b608460405162461bcd60e51b815260206004820152602360248201527f52657761726420746f6b656e2063616e6e6f74206265207a65726f206164647260448201526265737360e81b6064820152fd5b3461029457600036600319011261029457610b0d6001600160a01b036005541633146115c3565b60165460ff8160081c16610b295761ff00191661010017601655005b606460405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c65640000000000000000006044820152fd5b3461029457600036600319011261029457610b946001600160a01b036005541633146115c3565b600060115560005b600e54811015610bf55780610bec6001600160a01b03610bbd6001946116ff565b90549060031b1c168060005260066020526040600020549060005260106020528060406000205560115461171a565b60115501610b9c565b6012548015801580610c80575b610c36575b7f3677ba94506ffc0a2e6968fe926b51985b6403fcc6b900d17c926b41079f93346020601154604051908152a1005b670de0b6b3a76400008202918204670de0b6b3a7640000141715610c6a57601154610c6091611621565b6013558080610c07565b634e487b7160e01b600052601160045260246000fd5b506011541515610c02565b3461029457602036600319011261029457600435610cb56001600160a01b036005541633146115c3565b603c8110610cee576020817fc6f44473d25b86976ee7357c1339328224e349abc5486edc3007ef658a57608a92600a55604051908152a1005b608460405162461bcd60e51b8152602060048201526024808201527f496e74657276616c206d757374206265206174206c656173742036302073656360448201527f6f6e6473000000000000000000000000000000000000000000000000000000006064820152fd5b34610294576000366003190112610294576020600e54604051908152f35b34610294576000366003190112610294576020600a54604051908152f35b3461029457602036600319011261029457602061028c610db1611523565b6001600160a01b0316600052600660205260406000205490565b34610294576020366003190112610294576001600160a01b03610dec611523565b166000526010602052604060002080546107ae60026001840154930154604051938493846040919493926060820195825260208201520152565b34610294576020366003190112610294577f35ad15e7f5e4a16b548e8916bd02c51847dde8d106f334b4edaaacf140e43c916020600435610e736001600160a01b036005541633146115c3565b80600855604051908152a1005b34610294576000366003190112610294576020600c54604051908152f35b3461029457600036600319011261029457602047604051908152f35b3461029457602036600319011261029457600435610ee46001600160a01b036005541633146115c3565b600581101580610f62575b15610ef957600b55005b608460405162461bcd60e51b8152602060048201526024808201527f42617463682073697a65206d757374206265206265747765656e203520616e6460448201527f20313030000000000000000000000000000000000000000000000000000000006064820152fd5b506064811115610eef565b346102945760203660031901126102945760a0610f88611523565b6000906001600160a01b03811680600052600f60205260406000205415801590611014575b61100b575b80600052600660205260406000205491816000526010602052610fda60406000205491611641565b9160005260106020526002604060002001549260405194151585526020850152604084015260608301526080820152f35b60019250610fb2565b50600e5415158015610fad5750806001600160a01b036110326116b6565b90549060031b1c1614610fad565b3461029457600036600319011261029457602060ff60165460081c166040519015158152f35b34610294576020366003190112610294576001600160a01b03611087611523565b166000526014602052602060ff604060002054166040519015158152f35b34610294576000366003190112610294576020601154604051908152f35b34610294576040366003190112610294576001600160a01b0360206110e6611523565b604483600554166110f88133146115c3565b600060405195869485937fa9059cbb00000000000000000000000000000000000000000000000000000000855260048501526024356024850152165af180156111755761114157005b6020813d60201161116d575b8161115a6020938361157e565b8101031261029457518015150361029457005b3d915061114d565b6040513d6000823e3d90fd5b3461029457600036600319011261029457602060405160128152f35b3461029457602036600319011261029457602061028c6111bb611523565b611641565b346102945760207ff3a7c8242f0708821ed31a47f066fc7fa42f2ae65ed3e4d1d7cb5b3765d2939c6111f13661154f565b61120a6001600160a01b036005959395541633146115c3565b6001600160a01b03841693846000526014835260ff6040600020541691801515809315150361123f575b5050604051908152a2005b85600052601484526112618160406000209060ff801983541691151516179055565b15611291578460005260108352604060002054611282575b505b8480611234565b61128b906120ba565b84611279565b6112a990856000526006845260406000205490611fd2565b61127b565b34610294576000366003190112610294576020600d54604051908152f35b34610294576060366003190112610294576112e5611523565b6112ed611539565b604435906001600160a01b038316600052600760205260406000206001600160a01b033316600052602052604060002054926000198403611333575b61076a9350611b76565b8284106113565761135161134a8461076a966115b6565b3383611a3c565b611329565b608460405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e63650000000000000000000000000000000000000000000000006064820152fd5b34610294576000366003190112610294576020600254604051908152f35b346102945760403660031901126102945761076a6113fa611523565b6024359033611a3c565b3461029457600036600319011261029457604051600080548060011c906001811680156114b5575b60208310811461099f5782855290811561097b5750600114611458576107ae8361090f8185038261157e565b60008080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563939250905b80821061149b5750909150810160200161090f6108ff565b919260018160209254838588010152019101909291611483565b91607f169161142c565b34610294576000366003190112610294576020906009548152f35b91909160208152825180602083015260005b81811061150d575060409293506000838284010152601f8019910116010190565b80602080928701015160408286010152016114ec565b600435906001600160a01b038216820361029457565b602435906001600160a01b038216820361029457565b6040906003190112610294576004356001600160a01b0381168103610294579060243580151581036102945790565b90601f8019910116810190811067ffffffffffffffff8211176115a057604052565b634e487b7160e01b600052604160045260246000fd5b91908203918211610c6a57565b156115ca57565b606460405162461bcd60e51b815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152fd5b81810292918115918404141715610c6a57565b811561162b570490565b634e487b7160e01b600052601260045260246000fd5b6001600160a01b0316806000526010602052604060002054156116b057670de0b6b3a76400006116826013548360005260106020526040600020549061160e565b04906000526010602052600260406000200154808211156116a9576116a6916115b6565b90565b5050600090565b50600090565b600e54156116e957600e60009081527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd91565b634e487b7160e01b600052603260045260246000fd5b600e548110156116e957600e60005260206000200190600090565b91908201809211610c6a57565b600e54801561175657600d54916064830283810460641484151715610c6a578261175091611621565b91929190565b50600090600090606490565b61176a6119bb565b611787576116a6611780600c54600a549061171a565b42906115b6565b600090565b3d156117c7573d9067ffffffffffffffff82116115a057604051916117bb601f8201601f19166020018461157e565b82523d6000602084013e565b606090565b906001600160a01b0360055416330361197757600e5491821561196e57600081156118e457505b809280611803600d54938461171a565b116118d1575b505081156118be5761181e600d54928361171a565b91805b8381106118855750826118449293600d55600e548082101561184b575b506115b6565b90600d5490565b60207fcbb46d9b69e77a6b5011c11cd2bf9be0461c9a1920e9f42678661cec154cd2a8916000600d5542600c55604051908152a13861183e565b600190600e548110611898575b01611821565b6118b96001600160a01b036118ac836116ff565b90549060031b1c16612535565b611892565b90506000600d5542600c55600090600090565b6118dc9293506115b6565b903880611809565b90506040517ff4daaba1000000000000000000000000000000000000000000000000000000008152602081600481305afa91821561196257809261192a575b50506117f3565b9091506020823d60201161195a575b816119466020938361157e565b810103126119575750513880611923565b80fd5b3d9150611939565b604051903d90823e3d90fd5b50600091508190565b606460405162461bcd60e51b815260206004820152601e60248201527f4f6e6c79206f776e65722063616e2070726f63657373207265776172647300006044820152fd5b6119ca600c54600a549061171a565b42101590565b600e54156117875760005b600e54811015611a0257806119fc6001600160a01b036118ac6001946116ff565b016119db565b506000600d5542600c55600e547fcbb46d9b69e77a6b5011c11cd2bf9be0461c9a1920e9f42678661cec154cd2a86020604051838152a190565b6001600160a01b0316908115611b0d576001600160a01b0316918215611aa35760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925918360005260078252604060002085600052825280604060002055604051908152a3565b608460405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152fd5b608460405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152fd5b6001600160a01b038116908115611f68576001600160a01b038316938415611f18578015611eae5782859160165460ff8160081c161580611e86575b611e0e575b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91602091306000526006835260406000205490600954809210159081611e02575b5080611ded575b80611dd8575b80611dc3575b611da1575b50836000526015825260ff604060002054161580611d89575b600090611d12575b5083600052600682526040600020611c4b8282546115b6565b905584600052600682526040600020611c6582825461171a565b9055604051908152a381600052601460205260ff604060002054161580611cfd575b611cde575b505081600052601460205260ff604060002054161580611cc9575b611caf575050565b611cc791600052600660205260406000205490611fd2565b565b506001600160a01b0360045416821415611ca7565b611cf691600052600660205260406000205490611fd2565b3880611c8c565b506001600160a01b0360045416821415611c87565b6001600160a01b0360045416808614908115611d7f575b50611d6a575b8015611c3257611d649130600052600684526040600020611d5183825461171a565b90556040518281528686863093a36115b6565b38611c32565b506064611d796008548361160e565b04611d2f565b9050861438611d29565b50846000526015825260ff6040600020541615611c2a565b80821115611db957611db290612275565b5038611c11565b50611db281612275565b506001600160a01b0360055416861415611c0c565b506001600160a01b0360055416851415611c06565b506001600160a01b0360045416851415611c00565b60ff9150161538611bf9565b915091506001600160a01b0360055416808514908115611e7c575b5015611e385785918491611bb7565b606460405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152fd5b9050861438611e29565b506001600160a01b0360045416808414908115611ea4575b50611bb2565b9050841438611e9e565b608460405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152fd5b608460405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152fd5b608460405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152fd5b670de0b6b3a76400008210612082576001600160a01b03811691826000526010602052604060002054151560001461207757806120145750611cc791506120ba565b7fe6382c9ed5c0c33bb05042f73cf6cbe9cb25639f9a711e094ee563bc9cb80e2c9150602090836000526010825261205c816120576040600020546011546115b6565b61171a565b601155836000526010825280604060002055604051908152a2565b90611cc79250612620565b90158061209a575b6120915750565b611cc7906120ba565b506001600160a01b0381166000526010602052604060002054151561208a565b600e54908115801561222b575b801561220a575b612206576001600160a01b031690816000526010602052604060002054906000198101908111610c6a576121096001600160a01b03916116ff565b90549060031b1c1682600052600f6020526040600020549061214d8161212e846116ff565b9091906001600160a01b038084549260031b9316831b921b1916179055565b600052600f602052604060002055600e549081156121f0576121a49160001901612176816116ff565b6001600160a01b0382549160031b1b19169055600e5582600052600f602052600060408120556011546115b6565b601155806000526010602052600060026040822082815582600182015501557fe6382c9ed5c0c33bb05042f73cf6cbe9cb25639f9a711e094ee563bc9cb80e2c602060405160008152a2565b634e487b7160e01b600052603160045260246000fd5b5050565b506001600160a01b038116600052600f6020528160406000205410156120ce565b506001600160a01b03811680600052600f602052604060002054159081612253575b506120c7565b90506001600160a01b036122656116b6565b90549060031b1c1614153861224d565b61228b90600160ff196016541617601655612298565b9060ff1960165416601655565b6000906040516122a960608261157e565b6002815260208101906040368337805115612521573082526001600160a01b036003541681516001101561250d5760408201523015611b0d573084526007602052604084207395a7e403d7cf20f675ff9273d66e94d35ba49fa385526020528260408520557395a7e403d7cf20f675ff9273d66e94d35ba49fa36040518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203092a347916104b042018042116124f9577395a7e403d7cf20f675ff9273d66e94d35ba49fa33b156124f5579185916040519384927f791ac94700000000000000000000000000000000000000000000000000000000845260a484019088600486015285602486015260a060448601525180915260c484019290855b8181106124d057505030606485015250608483015281900381837395a7e403d7cf20f675ff9273d66e94d35ba49fa35af190816124bc575b5061240a57505090565b61241490476115b6565b91821515806124b1575b61242757505090565b6124338360125461171a565b9081601255670de0b6b3a7640000820291808304670de0b6b3a7640000149015171561249d57507f10da9408d1358808fea34ded33d675db0ba8e618a2fb814298059b2a6b0a473f9161248b60409260115490611621565b6013558151908152836020820152a190565b80634e487b7160e01b602492526011600452fd5b50601154151561241e565b846124c99195929561157e565b9238612400565b82516001600160a01b031685528a9650879550602094850194909201916001016123c8565b8580fd5b602486634e487b7160e01b81526011600452fd5b602485634e487b7160e01b81526032600452fd5b602484634e487b7160e01b81526032600452fd5b6001600160a01b03811690816000526010602052604060002054158015612608575b6122065761256481611641565b9081612570575b505050565b4782111561257d57505050565b60008080848194670de0b6b3a76400006125a66013548a8652601060205260408620549061160e565b048884526010602052600260408520015587835260106020528260016040822001555af16125d261178c565b506125db575050565b60207f6177f4110771217c72937d51f3a73915f2c714a6b98507e17eea7a186136a24a91604051908152a2565b5081600052601460205260ff60406000205416612557565b906001600160a01b0382169182600052600f602052604060002054158015906126d9575b61256b57600e5490680100000000000000008210156115a05761212e8260016126709401600e556116ff565b600e546000198101908111610c6a577fe6382c9ed5c0c33bb05042f73cf6cbe9cb25639f9a711e094ee563bc9cb80e2c9160209184600052600f83526040600020558360005260108252806040600020556126cd8160115461171a565b601155604051908152a2565b50600e54151580156126445750826001600160a01b036126f76116b6565b90549060031b1c161461264456fea26469706673582212203608c89ffa25b8fd9ca72abf410b8086f24bb3154b8c37f17ac8af4a75d7217564736f6c634300081c0033

Block Transaction Gas Used Reward
view all blocks produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.