ETH Price: $2,938.64 (-0.72%)

Contract

0x038D0450A38Ac626747d3C82E731508EFEdbd6b3

Overview

ETH Balance

Linea Mainnet LogoLinea Mainnet LogoLinea Mainnet Logo0.000000045239669179 ETH

ETH Value

Less Than $0.01 (@ $2,938.64/ETH)

Token Holdings

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Approve190104882025-05-15 3:31:52255 days ago1747279912IN
0x038D0450...EFEdbd6b3
0 ETH0.000001750.06639078
Approve190104652025-05-15 3:30:44255 days ago1747279844IN
0x038D0450...EFEdbd6b3
0 ETH0.000001750.06639078
Approve190104342025-05-15 3:29:33255 days ago1747279773IN
0x038D0450...EFEdbd6b3
0 ETH0.000001750.06639078
Approve190104072025-05-15 3:28:23255 days ago1747279703IN
0x038D0450...EFEdbd6b3
0 ETH0.000002590.05590539
Transfer190001072025-05-14 19:12:59255 days ago1747249979IN
0x038D0450...EFEdbd6b3
0 ETH0.000009280.0417963
Approve190000182025-05-14 19:08:35255 days ago1747249715IN
0x038D0450...EFEdbd6b3
0 ETH0.000002490.05347332
Transfer189999522025-05-14 19:05:24255 days ago1747249524IN
0x038D0450...EFEdbd6b3
0 ETH0.00000750.04307602
Transfer189999392025-05-14 19:04:45255 days ago1747249485IN
0x038D0450...EFEdbd6b3
0 ETH0.000013160.07551227
Transfer189999212025-05-14 19:04:02255 days ago1747249442IN
0x038D0450...EFEdbd6b3
0 ETH0.000007490.04296761
Transfer189985562025-05-14 18:02:46255 days ago1747245766IN
0x038D0450...EFEdbd6b3
0 ETH0.000011630.04320378
Transfer189977672025-05-14 17:26:09255 days ago1747243569IN
0x038D0450...EFEdbd6b3
0 ETH0.000007840.04501369
Transfer189974852025-05-14 17:14:39255 days ago1747242879IN
0x038D0450...EFEdbd6b3
0 ETH0.000007630.04509283
Transfer189973562025-05-14 17:08:36255 days ago1747242516IN
0x038D0450...EFEdbd6b3
0 ETH0.000009320.04399054
Transfer189971162025-05-14 16:58:30255 days ago1747241910IN
0x038D0450...EFEdbd6b3
0 ETH0.000007860.04512726
Transfer189970912025-05-14 16:57:21255 days ago1747241841IN
0x038D0450...EFEdbd6b3
0 ETH0.000007840.04501369
Transfer189967262025-05-14 16:40:44255 days ago1747240844IN
0x038D0450...EFEdbd6b3
0 ETH0.00000840.04446981
Transfer189964012025-05-14 16:26:54255 days ago1747240014IN
0x038D0450...EFEdbd6b3
0 ETH0.000002840.05631911
Approve189962122025-05-14 16:18:24255 days ago1747239504IN
0x038D0450...EFEdbd6b3
0 ETH0.000002610.05601967
Transfer189961382025-05-14 16:15:30255 days ago1747239330IN
0x038D0450...EFEdbd6b3
0 ETH0.00000910.0441414
Transfer189960782025-05-14 16:12:55255 days ago1747239175IN
0x038D0450...EFEdbd6b3
0 ETH0.000007620.04519375
Approve189959172025-05-14 16:06:23255 days ago1747238783IN
0x038D0450...EFEdbd6b3
0 ETH0.00000260.05590539
Start Trading189958592025-05-14 16:03:40255 days ago1747238620IN
0x038D0450...EFEdbd6b3
0 ETH0.000001760.06161186
Set Pair189958482025-05-14 16:03:08255 days ago1747238588IN
0x038D0450...EFEdbd6b3
0 ETH0.000129930.03804833

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
190101072025-05-15 3:15:24255 days ago1747278924
0x038D0450...EFEdbd6b3
0 ETH
190101072025-05-15 3:15:24255 days ago1747278924
0x038D0450...EFEdbd6b3
0 ETH
190101072025-05-15 3:15:24255 days ago1747278924
0x038D0450...EFEdbd6b3
0 ETH
190101072025-05-15 3:15:24255 days ago1747278924
0x038D0450...EFEdbd6b3
0 ETH
190101072025-05-15 3:15:24255 days ago1747278924
0x038D0450...EFEdbd6b3
0 ETH
190101072025-05-15 3:15:24255 days ago1747278924
0x038D0450...EFEdbd6b3
0 ETH
190101072025-05-15 3:15:24255 days ago1747278924
0x038D0450...EFEdbd6b3
0 ETH
190101072025-05-15 3:15:24255 days ago1747278924
0x038D0450...EFEdbd6b3
0 ETH
190101072025-05-15 3:15:24255 days ago1747278924
0x038D0450...EFEdbd6b3
0 ETH
190098872025-05-15 3:06:07255 days ago1747278367
0x038D0450...EFEdbd6b3
0 ETH
190098872025-05-15 3:06:07255 days ago1747278367
0x038D0450...EFEdbd6b3
0 ETH
190098872025-05-15 3:06:07255 days ago1747278367
0x038D0450...EFEdbd6b3
0 ETH
190098872025-05-15 3:06:07255 days ago1747278367
0x038D0450...EFEdbd6b3
0 ETH
190098872025-05-15 3:06:07255 days ago1747278367
0x038D0450...EFEdbd6b3
0 ETH
190098872025-05-15 3:06:07255 days ago1747278367
0x038D0450...EFEdbd6b3
0 ETH
190098872025-05-15 3:06:07255 days ago1747278367
0x038D0450...EFEdbd6b3
0 ETH
190098872025-05-15 3:06:07255 days ago1747278367
0x038D0450...EFEdbd6b3
0 ETH
190098872025-05-15 3:06:07255 days ago1747278367
0x038D0450...EFEdbd6b3
0 ETH
190098672025-05-15 3:05:13255 days ago1747278313
0x038D0450...EFEdbd6b3
0 ETH
190098672025-05-15 3:05:13255 days ago1747278313
0x038D0450...EFEdbd6b3
0 ETH
190098672025-05-15 3:05:13255 days ago1747278313
0x038D0450...EFEdbd6b3
0 ETH
190098672025-05-15 3:05:13255 days ago1747278313
0x038D0450...EFEdbd6b3
0 ETH
190098672025-05-15 3:05:13255 days ago1747278313
0x038D0450...EFEdbd6b3
0 ETH
190098672025-05-15 3:05:13255 days ago1747278313
0x038D0450...EFEdbd6b3
0 ETH
190098672025-05-15 3:05:13255 days ago1747278313
0x038D0450...EFEdbd6b3
0 ETH
View All Internal Transactions
Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DoNotBuy

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
Yes with 10000 runs

Other Settings:
london EvmVersion
File 1 of 1 : DoNotBuy.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.26;


library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {return a + b;}
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {return a - b;}
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {return a * b;}
    function div(uint256 a, uint256 b) internal pure returns (uint256) {return a / b;}
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {return a % b;}
    
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {uint256 c = a + b; if(c < a) return(false, 0); return(true, c);}}

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b > a) return(false, 0); return(true, a - b);}}

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if (a == 0) return(true, 0); uint256 c = a * b;
        if(c / a != b) return(false, 0); return(true, c);}}

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b == 0) return(false, 0); return(true, a / b);}}

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b == 0) return(false, 0); return(true, a % b);}}

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked{require(b <= a, errorMessage); return a - b;}}

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked{require(b > 0, errorMessage); return a / b;}}

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked{require(b > 0, errorMessage); return a % b;}}}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function circulatingSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    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);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);}

abstract contract Ownable {
    address internal owner;
    constructor(address _owner) {owner = _owner;}
    modifier onlyOwner() {require(isOwner(msg.sender), "!OWNER"); _;}
    function isOwner(address account) public view returns (bool) {return account == owner;}
    function transferOwnership(address payable adr) public onlyOwner {owner = adr; emit OwnershipTransferred(adr);}
    event OwnershipTransferred(address owner);
}

struct route {
    address from;
    address to;
    bool stable;
}

interface IFactory {
    function createPair(address tokenA, address tokenB, bool stable) external returns (address pair);
    function getPair(address tokenA, address tokenB, bool stable) external view returns (address pair);
}

interface IRouter {
    function factory() external pure returns (address);
    function wETH() external pure returns (address);
    function getAmountsOut(uint amountIn, route[] calldata routes) external view returns (uint[] memory amounts);
    function addLiquidityETH(
        address token,
        bool stable,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        route[] calldata routes,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        route[] calldata routes,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
    uint amountIn,
    uint amountOutMin,
    route[] calldata routes,
    address to,
    uint deadline
   ) external;
}

contract DoNotBuy is IERC20, Ownable {
    using SafeMath for uint256;
    string private constant _name = 'DoNotBuy';
    string private constant _symbol = 'DNB';
    uint8 private constant _decimals = 18;
    uint256 private _totalSupply = 100000000 * (10 ** _decimals);
    uint256 private _maxTxAmount = ( _totalSupply * 200 ) / 10000;
    uint256 private _maxSellAmount = ( _totalSupply * 200 ) / 10000;
    uint256 private _maxWalletToken = ( _totalSupply * 200 ) / 10000;
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) public isDividendExempt;
    mapping (address => bool) private isBot;
    IRouter router;
    address public pair;
    bool private tradingAllowed = false;
    uint256 private liquidityFee = 200;
    uint256 private marketingFee = 1800;
    uint256 private rewardsFee = 7000;
    uint256 private developmentFee = 1000;
    uint256 private burnFee = 0;
    uint256 private totalFee = 1000;
    uint256 private sellFee = 1500;
    uint256 private transferFee = 200;
    uint256 private denominator = 10000;
    bool private swapEnabled = true;
    uint256 private swapTimes;
    bool private swapping; 
    uint256 private swapThreshold = ( _totalSupply * 500 ) / 100000;
    uint256 private _minTokenAmount = ( _totalSupply * 10 ) / 100000;
    modifier lockTheSwap {swapping = true; _; swapping = false;}
    address public reward = 0x176211869cA2b568f2A7D4EE941E073a821EE1ff;
    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 internal dividendsPerShare;
    uint256 internal dividendsPerShareAccuracyFactor = 10 ** 36;
    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;
    struct Share {uint256 amount; uint256 totalExcluded; uint256 totalRealised; }
    mapping (address => Share) public shares;
    uint256 internal currentIndex;
    uint256 public minPeriod = 1 minutes;
    uint256 public minDistribution = 1 * (10 ** 5);
    uint256 public distributorGas = 350000;
    function _claimDividend() external {distributeDividend(msg.sender);}

    address internal constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address internal constant development_receiver = 0x0F245A7D374388CD76fC8139Dd900E9B02bF69d7; 
    address internal constant marketing_receiver = 0x27DFbEC90EEa392446f71638b70193c6F558c001;
    address internal constant liquidity_receiver = 0xd53686b4298Ac78B1d182E95FeAC1A4DD1D780bD;

    constructor() Ownable(msg.sender) {
        isFeeExempt[address(this)] = true;
        isFeeExempt[liquidity_receiver] = true;
        isFeeExempt[marketing_receiver] = true;
        isFeeExempt[msg.sender] = true;
        isDividendExempt[address(msg.sender)] = true;        
        isDividendExempt[address(this)] = true;
        isDividendExempt[address(DEAD)] = true;
        isDividendExempt[address(0)] = true;
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }




    receive() external payable {}
    function name() public pure returns (string memory) {return _name;}
    function symbol() public pure returns (string memory) {return _symbol;}
    function decimals() public pure returns (uint8) {return _decimals;}
    function getOwner() external view override returns (address) { return owner; }
    function totalSupply() public view override returns (uint256) {return _totalSupply;}
    function balanceOf(address account) public view override returns (uint256) {return _balances[account];}
    function transfer(address recipient, uint256 amount) public override returns (bool) {_transfer(msg.sender, recipient, amount);return true;}
    function allowance(address owner, address spender) public view override returns (uint256) {return _allowances[owner][spender];}
    function isCont(address addr) internal view returns (bool) {uint size; assembly { size := extcodesize(addr) } return size > 0; }
    function setisExempt(address _address, bool _enabled) external onlyOwner {isFeeExempt[_address] = _enabled;}
    function approve(address spender, uint256 amount) public override returns (bool) {_approve(msg.sender, spender, amount);return true;}
    function circulatingSupply() public view override returns (uint256) {return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));}

    function startTrading() external onlyOwner {
        require(!tradingAllowed,"trading is already open");
        tradingAllowed = true;
    }

    function setPair(address _routerAddress) external onlyOwner {
        require(_routerAddress != address(0), "Router cannot be zero address");
        router = IRouter(_routerAddress);
        pair = IFactory(router.factory()).getPair(address(this), router.wETH(), false);
        if (pair == address(0)) {
            pair = IFactory(router.factory()).createPair(address(this), router.wETH(), false);
        }
        isDividendExempt[pair] = true;
    }

    function preTxCheck(address sender, address recipient, uint256 amount) internal view {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > uint256(0), "Transfer amount must be greater than zero");
        require(amount <= balanceOf(sender),"You are trying to transfer more than your balance");
    }

function _transfer(address sender, address recipient, uint256 amount) private {
    require(sender != address(0), "ERC20: transfer from zero address");
    require(recipient != address(0), "ERC20: transfer to zero address");
    require(amount > 0, "Transfer amount must be greater than zero");
    require(amount <= _balances[sender], "Insufficient balance");

    bool isSenderExempt = isFeeExempt[sender];
    bool isRecipientExempt = isFeeExempt[recipient];
    bool isSell = recipient == pair;
    bool isBuy = sender == pair;

    if (!isSenderExempt && !isRecipientExempt) {
        require(tradingAllowed, "Trading not allowed");
        if (!isSell && recipient != address(DEAD)) {
            require(_balances[recipient] + amount <= _maxWalletToken, "Exceeds max wallet");
        }
        require(amount <= _maxTxAmount, "Exceeds max tx amount");
        if (!isBuy) {
            require(amount <= _maxSellAmount, "Exceeds max sell amount");
        }
    }

    if (isSell && !isSenderExempt) {
        swapTimes++;
    }

    uint256 contractBalance = _balances[address(this)];
    bool shouldSwap = !swapping && swapEnabled && tradingAllowed && !isSenderExempt && isSell &&
                      swapTimes >= 2 && amount >= _minTokenAmount && contractBalance >= swapThreshold;
    if (shouldSwap) {
        swapandreward(swapThreshold);
        swapTimes = 0;
    }

    _balances[sender] -= amount;
    uint256 amountReceived = (isSenderExempt || isRecipientExempt) ? amount : takeFee(sender, recipient, amount);
    _balances[recipient] += amountReceived;

    emit Transfer(sender, recipient, amountReceived);

    bool senderHasShares = !isDividendExempt[sender];
    bool recipientHasShares = !isDividendExempt[recipient];

    if (senderHasShares || recipientHasShares) {
        if (senderHasShares) {
            if (isSell && shouldSwap) {
                distributeDividend(sender); // Sender only on sell with swap
            } else if (!isSell && !isBuy) {
                distributeDividend(sender); // Sender on transfer
            }
            setShare(sender, _balances[sender]);
        }
        if (recipientHasShares) {
            if (!isSell && !isBuy && !shouldSwap) {
                distributeDividend(recipient); // Recipient on transfer
            }
            setShare(recipient, _balances[recipient]);
        }
    }
}



    

    function setStructure(uint256 _liquidity, uint256 _marketing, uint256 _burn, uint256 _rewards, uint256 _development, uint256 _total, uint256 _sell, uint256 _trans) external onlyOwner {
        liquidityFee = _liquidity;
        marketingFee = _marketing;
        burnFee = _burn;
        rewardsFee = _rewards;
        developmentFee = _development;
        totalFee = _total;
        sellFee = _sell;
        transferFee = _trans;
        //require(totalFee <= denominator.div(10) && sellFee <= denominator.div(10) && transferFee <= denominator.div(10), "totalFee and sellFee cannot be more than 10%");
    }

    function setisBot(address _address, bool _enabled) external onlyOwner {
        require(_address != address(pair) && _address != address(router) && _address != address(this), "Ineligible Address");
        isBot[_address] = _enabled;
    }

    function setParameters(uint256 _buy, uint256 _trans, uint256 _wallet) external onlyOwner {
        uint256 newTx = (totalSupply() * _buy) / 10000;
        uint256 newTransfer = (totalSupply() * _trans) / 10000;
        uint256 newWallet = (totalSupply() * _wallet) / 10000;
        _maxTxAmount = newTx;
        _maxSellAmount = newTransfer;
        _maxWalletToken = newWallet;
        uint256 limit = totalSupply().mul(5).div(1000);
        require(newTx >= limit && newTransfer >= limit && newWallet >= limit, "Max TXs and Max Wallet cannot be less than .5%");
    }

    function checkTradingAllowed(address sender, address recipient) internal view {
        if(!isFeeExempt[sender] && !isFeeExempt[recipient]){require(tradingAllowed, "tradingAllowed");}
    }
    
    function checkMaxWallet(address sender, address recipient, uint256 amount) internal view {
        if(!isFeeExempt[sender] && !isFeeExempt[recipient] && recipient != address(pair) && recipient != address(DEAD)){
            require((_balances[recipient].add(amount)) <= _maxWalletToken, "Exceeds maximum wallet amount.");}
    }

    function swapbackCounters(address sender, address recipient) internal {
        if(recipient == pair && !isFeeExempt[sender]){swapTimes += uint256(1);}
    }

    function checkTxLimit(address sender, address recipient, uint256 amount) internal view {
        if(sender != pair){require(amount <= _maxSellAmount || isFeeExempt[sender] || isFeeExempt[recipient], "TX Limit Exceeded");}
        require(amount <= _maxTxAmount || isFeeExempt[sender] || isFeeExempt[recipient], "TX Limit Exceeded");
    }

    

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
        _approve(address(this), address(router), tokenAmount);
        router.addLiquidityETH{value: ETHAmount}(
            address(this),
            false,
            tokenAmount,
            0,
            0,
            liquidity_receiver,
            block.timestamp);
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        route[] memory routes = new route[](1);
        routes[0] = route({
            from: address(this),
            to: router.wETH(),
            stable: false
        });
        _approve(address(this), address(router), tokenAmount);
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            routes,
            address(this),
            block.timestamp);
    }

    function swapETHForRewardToken(uint256 ethAmount) external onlyOwner {
        route[] memory routes = new route[](1);
        routes[0] = route({
            from: router.wETH(),
            to: reward,
            stable: true
        });
       
        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(
            0,
            routes,
            address(this),
            block.timestamp);
    }


    function shouldSwapBack(address sender, address recipient, uint256 amount) internal view returns (bool) {
        bool aboveMin = amount >= _minTokenAmount;
        bool aboveThreshold = balanceOf(address(this)) >= swapThreshold;
        return !swapping && swapEnabled && tradingAllowed && aboveMin && !isFeeExempt[sender] && recipient == pair && swapTimes >= uint256(2) && aboveThreshold;
    }

function depositreward(uint256 amount) private {
        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

function swapandreward(uint256 tokens) private lockTheSwap {
    uint256 _denominator = marketingFee + developmentFee + rewardsFee;

    // Swap tokens for ETH
    uint256 initialBalance = address(this).balance;
    swapTokensForETH(tokens);
    uint256 deltaBalance = address(this).balance - initialBalance;

    // Calculate unit ETH per fee weight
    uint256 unitBalance = deltaBalance / _denominator;

    // Distribute ETH based on fee allocations
    uint256 rewardsAmount = unitBalance * rewardsFee;
    if (rewardsAmount > 0) {
        depositreward(rewardsAmount); // Assumes deposit handles ETH distribution for rewards
    }

    uint256 marketingAmount = unitBalance * marketingFee;
    if (marketingAmount > 0) {
        payable(marketing_receiver).transfer(marketingAmount);
    }

    // Calculate the remaining balance after rewards and marketing
    uint256 usedBalance = rewardsAmount + marketingAmount;
    uint256 remaining = deltaBalance > usedBalance ? deltaBalance - usedBalance : 0;

    if (remaining > 0) {
        payable(development_receiver).transfer(remaining);
    }
}

    function swapBack(address sender, address recipient, uint256 amount) internal {
        if(shouldSwapBack(sender, recipient, amount)){swapandreward(swapThreshold); swapTimes = uint256(0);}
    }

    function shouldTakeFee(address sender, address recipient) internal view returns (bool) {
        return !isFeeExempt[sender] && !isFeeExempt[recipient];
    }

    function getTotalFee(address sender, address recipient) internal view returns (uint256) {
        if(isBot[sender] || isBot[recipient]){return denominator.sub(uint256(100));}
        if(recipient == pair){return sellFee;}
        if(sender == pair){return totalFee;}
        return transferFee;
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        if(getTotalFee(sender, recipient) > 0){
        uint256 feeAmount = amount.div(denominator).mul(getTotalFee(sender, recipient));
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);
        if(burnFee > uint256(0)){_transfer(address(this), address(DEAD), amount.div(denominator).mul(burnFee));}
        return amount.sub(feeAmount);} return amount;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function triggerSwap(uint256 tokens) external onlyOwner {
        swapandreward(tokens);
    }

    function _approve(address owner, address spender, uint256 amount) private {
        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 setisDividendExempt(address holder, bool exempt) external onlyOwner {
        isDividendExempt[holder] = exempt;
        if(exempt){setShare(holder, 0);}
        else{setShare(holder, balanceOf(holder)); }
    }

    function setShare(address shareholder, uint256 amount) internal {
        if(amount > 0 && shares[shareholder].amount == 0){addShareholder(shareholder);}
        else if(amount == 0 && shares[shareholder].amount > 0){removeShareholder(shareholder); }
        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    

    function processDistribution(uint256 gas) external {
        uint256 shareholderCount = shareholders.length;
        if(shareholderCount == 0) { return; }
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();
        uint256 iterations = 0;
        while(gasUsed < gas && iterations < shareholderCount) {
            if(currentIndex >= shareholderCount){currentIndex = 0;}
            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);}
            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }

   function rescueERC20(address _address, uint256 _amount) external onlyOwner {
    IERC20(_address).transfer(marketing_receiver, _amount);

    }

function getExcessETH() public view returns (uint256) {
    uint256 contractBalance = address(this).balance;
    uint256 pendingDividends = totalDividends - totalDistributed;

    // Safety check: totalDividends should always be >= totalDistributed
    if (pendingDividends > contractBalance) return 0;

    return contractBalance - pendingDividends;
}

function rescueExcessETH(address to) external onlyOwner {
    uint256 excess = getExcessETH();
    require(excess > 0, "No excess ETH");
    (bool success, ) = payable(to).call{value: excess}("");
    require(success, "Transfer failed");
}

function forceDistributeExcessETH() external onlyOwner {
    uint256 unallocated = getExcessETH();
    require(unallocated > 0, "No unallocated ETH");
    totalDividends += unallocated;
    dividendsPerShare += (unallocated * dividendsPerShareAccuracyFactor) / totalShares;
}
    
    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
                && getUnpaidEarnings(shareholder) > minDistribution;
    }

    function totalRewardsDistributed(address _wallet) external view returns (uint256) {
        address shareholder = _wallet;
        return uint256(shares[shareholder].totalRealised);
    }

function distributeDividend(address shareholder) private {
    Share storage share = shares[shareholder];
    uint256 amount = getUnpaidEarnings(shareholder);

    if (share.amount == 0 || amount == 0) return;

    totalDistributed += amount;
    
    // Use transfer instead of call
    payable(shareholder).transfer(amount);

    shareholderClaims[shareholder] = block.timestamp;
    share.totalRealised += amount;
    share.totalExcluded = getCumulativeDividends(share.amount);
}

    

    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }
        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;
        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }
        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution, uint256 _distributorGas) external onlyOwner {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
        distributorGas = _distributorGas;
    }
}

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

Contract Security Audit

Contract ABI

API
[{"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":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_claimDividend","outputs":[],"stateMutability":"nonpayable","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":"circulatingSupply","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":"distributorGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"forceDistributeExcessETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getExcessETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUnpaidEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"processDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"rescueExcessETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reward","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"},{"internalType":"uint256","name":"_distributorGas","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_routerAddress","type":"address"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"setParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"},{"internalType":"uint256","name":"_rewards","type":"uint256"},{"internalType":"uint256","name":"_development","type":"uint256"},{"internalType":"uint256","name":"_total","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setisDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"totalExcluded","type":"uint256"},{"internalType":"uint256","name":"totalRealised","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"swapETHForRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"totalRewardsDistributed","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":[{"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 payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"triggerSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526100106012600a6103b0565b61001e906305f5e1006103c6565b60015561271060015460c861003391906103c6565b61003d91906103dd565b60025561271060015460c861005291906103c6565b61005c91906103dd565b60035561271060015460c861007191906103c6565b61007b91906103dd565b600455600b805460ff60a01b1916905560c8600c819055610708600d55611b58600e556103e8600f81905560006010556011556105dc6012556013556127106014556015805460ff1916600190811790915554620186a0906100df906101f46103c6565b6100e991906103dd565b601855620186a0600154600a6100ff91906103c6565b61010991906103dd565b601955601a80546001600160a01b03191673176211869ca2b568f2a7d4ee941e073a821ee1ff1790556ec097ce7bc90715b34b9f1000000000601f55603c602555620186a06026556205573060275534801561016457600080fd5b50600080546001600160a01b03191633908117825530808352600760209081526040808520805460ff1990811660019081179092557f8e59ac7acde592c7ba2df38c5a1ecf7a6c39a39b6e4a94fdf4dfdb65e47f3b2380548216831790557f3bafff0d408724193cd1257de0975bfddf34c1c58e69455d3122fbd65073fb4a8054821683179055858752828720805482168317905560088452828720805482168317905593865281862080548516821790557f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd0933429980548516821790557f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c78054909416811790935591548385526005825282852081905591519182529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36103ff565b634e487b7160e01b600052601160045260246000fd5b6001815b6001841115610302578085048111156102e6576102e66102b1565b60018416156102f457908102905b60019390931c9280026102cb565b935093915050565b600082610319575060016103aa565b81610326575060006103aa565b816001811461033c576002811461034657610362565b60019150506103aa565b60ff841115610357576103576102b1565b50506001821b6103aa565b5060208310610133831016604e8410600b8410161715610385575081810a6103aa565b61039260001984846102c7565b80600019048211156103a6576103a66102b1565b0290505b92915050565b60006103bf60ff84168361030a565b9392505050565b80820281158282048414176103aa576103aa6102b1565b6000826103fa57634e487b7160e01b600052601260045260246000fd5b500490565b6130eb8061040e6000396000f3fe6080604052600436106102d55760003560e01c80638187f51611610179578063c942435d116100d6578063e2d6f94c1161008a578063f2fde38b11610064578063f2fde38b14610894578063f8e5884b146108b4578063ffd49c84146108d457600080fd5b8063e2d6f94c1461083e578063ef43b02b1461085e578063efca2eed1461087e57600080fd5b8063ce7c2ac2116100bb578063ce7c2ac21461078c578063d84b440a146107e3578063dd62ed3e146107f857600080fd5b8063c942435d1461073e578063ca89b8991461075357600080fd5b806395d89b411161012d578063a8aa1b3111610112578063a8aa1b31146106e9578063a9059cbb14610709578063ad77bd141461072957600080fd5b806395d89b411461068d578063997664d7146106d357600080fd5b80638c41180e1161015e5780638c41180e146106385780638cd4426d146106585780639358928b1461067857600080fd5b80638187f516146105fa578063893d20e81461061a57600080fd5b806334c5d2ce1161023257806344e56680116101e657806360e71962116101c057806360e719621461058e57806370a08231146105a45780637d3dec60146105da57600080fd5b806344e566801461053857806348ff2b8b146105585780634fab0ae81461057857600080fd5b80633f4218e0116102175780633f4218e0146104b85780633f89797e146104e85780634355855a1461050857600080fd5b806334c5d2ce146104825780633a98ef39146104a257600080fd5b806323b872dd11610289578063293230b81161026e578063293230b8146104225780632f54bf6e14610437578063313ce5671461046657600080fd5b806323b872dd146103e257806328fd31981461040257600080fd5b80630ca61cb1116102ba5780630ca61cb11461036957806318160ddd1461038b578063228cb733146103aa57600080fd5b806306fdde03146102e1578063095ea7b31461033957600080fd5b366102dc57005b600080fd5b3480156102ed57600080fd5b5060408051808201909152600881527f446f4e6f7442757900000000000000000000000000000000000000000000000060208201525b6040516103309190612c1f565b60405180910390f35b34801561034557600080fd5b50610359610354366004612ca0565b6108ea565b6040519015158152602001610330565b34801561037557600080fd5b50610389610384366004612ccc565b610901565b005b34801561039757600080fd5b506001545b604051908152602001610330565b3480156103b657600080fd5b50601a546103ca906001600160a01b031681565b6040516001600160a01b039091168152602001610330565b3480156103ee57600080fd5b506103596103fd366004612cf8565b610957565b34801561040e57600080fd5b5061039c61041d366004612d39565b6109c1565b34801561042e57600080fd5b50610389610a4c565b34801561044357600080fd5b50610359610452366004612d39565b6000546001600160a01b0391821691161490565b34801561047257600080fd5b5060405160128152602001610330565b34801561048e57600080fd5b5061038961049d366004612ccc565b610b3b565b3480156104ae57600080fd5b5061039c601b5481565b3480156104c457600080fd5b506103596104d3366004612d39565b60076020526000908152604090205460ff1681565b3480156104f457600080fd5b50610389610503366004612d56565b610cb7565b34801561051457600080fd5b50610359610523366004612d39565b60086020526000908152604090205460ff1681565b34801561054457600080fd5b50610389610553366004612d39565b610da4565b34801561056457600080fd5b50610389610573366004612d7d565b610eeb565b34801561058457600080fd5b5061039c60265481565b34801561059a57600080fd5b5061039c60275481565b3480156105b057600080fd5b5061039c6105bf366004612d39565b6001600160a01b031660009081526005602052604090205490565b3480156105e657600080fd5b506103896105f5366004612d56565b610f59565b34801561060657600080fd5b50610389610615366004612d39565b611148565b34801561062657600080fd5b506000546001600160a01b03166103ca565b34801561064457600080fd5b50610389610653366004612d7d565b6115cc565b34801561066457600080fd5b50610389610673366004612ca0565b6116c7565b34801561068457600080fd5b5061039c6117a8565b34801561069957600080fd5b5060408051808201909152600381527f444e4200000000000000000000000000000000000000000000000000000000006020820152610323565b3480156106df57600080fd5b5061039c601c5481565b3480156106f557600080fd5b50600b546103ca906001600160a01b031681565b34801561071557600080fd5b50610359610724366004612ca0565b611819565b34801561073557600080fd5b5061039c611826565b34801561074a57600080fd5b50610389611860565b34801561075f57600080fd5b5061039c61076e366004612d39565b6001600160a01b031660009081526023602052604090206002015490565b34801561079857600080fd5b506107c86107a7366004612d39565b60236020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610330565b3480156107ef57600080fd5b5061038961186b565b34801561080457600080fd5b5061039c610813366004612db6565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561084a57600080fd5b50610389610859366004612de4565b611954565b34801561086a57600080fd5b50610389610879366004612d7d565b6119bd565b34801561088a57600080fd5b5061039c601d5481565b3480156108a057600080fd5b506103896108af366004612d39565b611a64565b3480156108c057600080fd5b506103896108cf366004612d56565b611b13565b3480156108e057600080fd5b5061039c60255481565b60006108f7338484611b62565b5060015b92915050565b6000546001600160a01b031633146109495760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b60448201526064015b60405180910390fd5b602592909255602655602755565b6000610964848484611cba565b6109b684336109b18560405180606001604052806028815260200161308e602891396001600160a01b038a16600090815260066020908152604080832033845290915290205491906122ee565b611b62565b5060015b9392505050565b6001600160a01b03811660009081526023602052604081205481036109e857506000919050565b6001600160a01b038216600090815260236020526040812054610a0a9061231a565b6001600160a01b038416600090815260236020526040902060010154909150808211610a3a575060009392505050565b610a448282612337565b949350505050565b6000546001600160a01b03163314610a8f5760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610940565b600b5474010000000000000000000000000000000000000000900460ff1615610afa5760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610940565b600b80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b6000546001600160a01b03163314610b7e5760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610940565b600061271084610b8d60015490565b610b979190612e68565b610ba19190612e7f565b9050600061271084610bb260015490565b610bbc9190612e68565b610bc69190612e7f565b9050600061271084610bd760015490565b610be19190612e68565b610beb9190612e7f565b60028490556003839055600481905590506000610c1e6103e8610c186005610c1260015490565b90612343565b9061234f565b9050808410158015610c305750808310155b8015610c3c5750808210155b610cae5760405162461bcd60e51b815260206004820152602e60248201527f4d61782054587320616e64204d61782057616c6c65742063616e6e6f7420626560448201527f206c657373207468616e202e35250000000000000000000000000000000000006064820152608401610940565b50505050505050565b6020546000819003610cc7575050565b6000805a905060005b8483108015610cde57508381105b15610d9d578360245410610cf25760006024555b610d24602060245481548110610d0a57610d0a612eba565b6000918252602090912001546001600160a01b031661235b565b15610d5b57610d5b602060245481548110610d4157610d41612eba565b6000918252602090912001546001600160a01b03166123a0565b610d70610d695a8490612337565b8490612475565b92505a602480549193506000610d8583612ee9565b91905055508080610d9590612ee9565b915050610cd0565b5050505050565b6000546001600160a01b03163314610de75760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610940565b6000610df1611826565b905060008111610e435760405162461bcd60e51b815260206004820152600d60248201527f4e6f2065786365737320455448000000000000000000000000000000000000006044820152606401610940565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610e90576040519150601f19603f3d011682016040523d82523d6000602084013e610e95565b606091505b5050905080610ee65760405162461bcd60e51b815260206004820152600f60248201527f5472616e73666572206661696c656400000000000000000000000000000000006044820152606401610940565b505050565b6000546001600160a01b03163314610f2e5760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610940565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610f9c5760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610940565b604080516001808252818301909252600091816020015b60408051606081018252600080825260208083018290529282015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610fb35750506040805160608101808352600a547ff24286210000000000000000000000000000000000000000000000000000000090915291519293509182916001600160a01b03169063f2428621906064808501916020918187030181865afa158015611069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108d9190612f21565b6001600160a01b039081168252601a541660208201526001604090910152815182906000906110be576110be612eba565b6020908102919091010152600a546040517f76c727510000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906376c7275190849061111b90600090869030904290600401612faa565b6000604051808303818588803b15801561113457600080fd5b505af1158015610cae573d6000803e3d6000fd5b6000546001600160a01b0316331461118b5760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610940565b6001600160a01b0381166111e15760405162461bcd60e51b815260206004820152601d60248201527f526f757465722063616e6e6f74206265207a65726f20616464726573730000006044820152606401610940565b600a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038316908117909155604080517fc45a0155000000000000000000000000000000000000000000000000000000008152905163c45a0155916004808201926020929091908290030181865afa15801561126b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128f9190612f21565b6001600160a01b0316636801cc3030600a60009054906101000a90046001600160a01b03166001600160a01b031663f24286216040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113159190612f21565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201529116602482015260006044820152606401602060405180830381865afa15801561137f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a39190612f21565b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691821790556115a457600a60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611431573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114559190612f21565b6001600160a01b03166382dfdce430600a60009054906101000a90046001600160a01b03166001600160a01b031663f24286216040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114db9190612f21565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152600060448201526064016020604051808303816000875af1158015611547573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156b9190612f21565b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790555b50600b546001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000546001600160a01b0316331461160f5760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610940565b600b546001600160a01b0383811691161480159061163b5750600a546001600160a01b03838116911614155b801561165057506001600160a01b0382163014155b61169c5760405162461bcd60e51b815260206004820152601260248201527f496e656c696769626c65204164647265737300000000000000000000000000006044820152606401610940565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461170a5760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610940565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081527327dfbec90eea392446f71638b70193c6f558c0016004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611784573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee69190612fdf565b60056020527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc5461dead60009081527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba54600154919261181492909161180e9190612337565b90612337565b905090565b60006108f7338484611cba565b601d54601c546000914791839161183c91612ffc565b90508181111561184f5760009250505090565b6118598183612ffc565b9250505090565b611869336123a0565b565b6000546001600160a01b031633146118ae5760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610940565b60006118b8611826565b90506000811161190a5760405162461bcd60e51b815260206004820152601260248201527f4e6f20756e616c6c6f63617465642045544800000000000000000000000000006044820152606401610940565b80601c600082825461191c919061300f565b9091555050601b54601f546119319083612e68565b61193b9190612e7f565b601e600082825461194c919061300f565b909155505050565b6000546001600160a01b031633146119975760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610940565b600c97909755600d95909555601093909355600e91909155600f55601155601255601355565b6000546001600160a01b03163314611a005760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610940565b6001600160a01b0382166000908152600860205260409020805460ff19168215801591909117909155611a3c57611a38826000612481565b5050565b611a3882611a5f846001600160a01b031660009081526005602052604090205490565b612481565b6000546001600160a01b03163314611aa75760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610940565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6000546001600160a01b03163314611b565760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610940565b611b5f816125d2565b50565b6001600160a01b038316611bdd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610940565b6001600160a01b038216611c595760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610940565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611d365760405162461bcd60e51b815260206004820152602160248201527f45524332303a207472616e736665722066726f6d207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610940565b6001600160a01b038216611d8c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a207472616e7366657220746f207a65726f2061646472657373006044820152606401610940565b60008111611e025760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610940565b6001600160a01b038316600090815260056020526040902054811115611e6a5760405162461bcd60e51b815260206004820152601460248201527f496e73756666696369656e742062616c616e63650000000000000000000000006044820152606401610940565b6001600160a01b03808416600081815260076020526040808220548685168084529190922054600b5460ff9384169591909316939216908114911483158015611eb1575082155b1561205c57600b5474010000000000000000000000000000000000000000900460ff16611f205760405162461bcd60e51b815260206004820152601360248201527f54726164696e67206e6f7420616c6c6f776564000000000000000000000000006044820152606401610940565b81158015611f3957506001600160a01b03861661dead14155b15611fb3576004546001600160a01b038716600090815260056020526040902054611f6590879061300f565b1115611fb35760405162461bcd60e51b815260206004820152601260248201527f45786365656473206d61782077616c6c657400000000000000000000000000006044820152606401610940565b6002548511156120055760405162461bcd60e51b815260206004820152601560248201527f45786365656473206d617820747820616d6f756e7400000000000000000000006044820152606401610940565b8061205c5760035485111561205c5760405162461bcd60e51b815260206004820152601760248201527f45786365656473206d61782073656c6c20616d6f756e740000000000000000006044820152606401610940565b818015612067575083155b15612082576016805490600061207c83612ee9565b91905055505b3060009081526005602052604081205460175490919060ff161580156120aa575060155460ff165b80156120d05750600b5474010000000000000000000000000000000000000000900460ff165b80156120da575085155b80156120e35750835b80156120f25750600260165410155b801561210057506019548710155b801561210e57506018548210155b90508015612127576121216018546125d2565b60006016555b6001600160a01b0389166000908152600560205260408120805489929061214f908490612ffc565b909155506000905086806121605750855b6121745761216f8a8a8a61272b565b612176565b875b6001600160a01b038a166000908152600560205260408120805492935083929091906121a390849061300f565b92505081905550886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121ef91815260200190565b60405180910390a36001600160a01b03808b1660009081526008602052604080822054928c16825290205460ff91821615911615818061222c5750805b156122e0578115612292578680156122415750835b156122545761224f8c6123a0565b61226e565b86158015612260575085155b1561226e5761226e8c6123a0565b6001600160a01b038c16600090815260056020526040902054612292908d90612481565b80156122e057861580156122a4575085155b80156122ae575083155b156122bc576122bc8b6123a0565b6001600160a01b038b166000908152600560205260409020546122e0908c90612481565b505050505050505050505050565b600081848411156123125760405162461bcd60e51b81526004016109409190612c1f565b505050900390565b60006108fb601f54610c18601e548561234390919063ffffffff16565b60006109ba8284612ffc565b60006109ba8284612e68565b60006109ba8284612e7f565b6025546001600160a01b03821660009081526022602052604081205490914291612385919061300f565b1080156108fb5750602654612399836109c1565b1192915050565b6001600160a01b0381166000908152602360205260408120906123c2836109c1565b825490915015806123d1575080155b156123db57505050565b80601d60008282546123ed919061300f565b90915550506040516001600160a01b0384169082156108fc029083906000818181858888f19350505050158015612428573d6000803e3d6000fd5b506001600160a01b038316600090815260226020526040812042905560028301805483929061245890849061300f565b909155505081546124689061231a565b8260010181905550505050565b60006109ba828461300f565b6000811180156124a757506001600160a01b038216600090815260236020526040902054155b1561252457602080546001600160a01b03841660008181526021845260408120839055600183018455929092527fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bb0180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055612557565b8015801561254957506001600160a01b03821660009081526023602052604090205415155b156125575761255782612819565b6001600160a01b038216600090815260236020526040902054601b5461258891839161258291612337565b90612475565b601b556001600160a01b03821660009081526023602052604090208190556125af8161231a565b6001600160a01b0390921660009081526023602052604090206001019190915550565b6017805460ff19166001179055600e54600f54600d54600092916125f59161300f565b6125ff919061300f565b90504761260b8361297b565b60006126178247612ffc565b905060006126258483612e7f565b90506000600e54826126379190612e68565b905080156126485761264881612b47565b6000600d54836126589190612e68565b905080156126a3576040517327dfbec90eea392446f71638b70193c6f558c0019082156108fc029083906000818181858888f193505050501580156126a1573d6000803e3d6000fd5b505b60006126af828461300f565b905060008186116126c15760006126cb565b6126cb8287612ffc565b9050801561271657604051730f245a7d374388cd76fc8139dd900e9b02bf69d79082156108fc029083906000818181858888f19350505050158015612714573d6000803e3d6000fd5b505b50506017805460ff1916905550505050505050565b6000806127388585612b7e565b111561281257600061275b61274d8686612b7e565b601454610c1290869061234f565b306000908152600560205260409020549091506127789082612475565b30600081815260056020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906127c99085815260200190565b60405180910390a360105415612800576128003061dead6127fb601054610c126014548961234f90919063ffffffff16565b611cba565b61280a8382612337565b9150506109ba565b5092915050565b6020805461282990600190612ffc565b8154811061283957612839612eba565b60009182526020808320909101546001600160a01b0384811684526021835260409093205482549390911692811061287357612873612eba565b600091825260208083209190910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0394851617905591831681526021808352604082205483549093919291906128d690600190612ffc565b815481106128e6576128e6612eba565b60009182526020808320909101546001600160a01b0316835282810193909352604090910190209190915580548061292057612920613022565b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905501905550565b604080516001808252818301909252600091816020015b60408051606081018252600080825260208083018290529282015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161299257505060408051606081018252308152600a5482517ff2428621000000000000000000000000000000000000000000000000000000008152925193945090926020808501936001600160a01b039093169263f242862192600480830193928290030181865afa158015612a50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a749190612f21565b6001600160a01b031681526020016000151581525081600081518110612a9c57612a9c612eba565b6020908102919091010152600a54612abf9030906001600160a01b031684611b62565b600a546040517f7af728c80000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690637af728c890612b11908590600090869030904290600401613051565b600060405180830381600087803b158015612b2b57600080fd5b505af1158015612b3f573d6000803e3d6000fd5b505050505050565b601c54612b549082612475565b601c55601b54601f54612b7891612b6f91610c189085612343565b601e5490612475565b601e5550565b6001600160a01b03821660009081526009602052604081205460ff1680612bbd57506001600160a01b03821660009081526009602052604090205460ff165b15612bd757601454612bd0906064612337565b90506108fb565b600b546001600160a01b0390811690831603612bf657506012546108fb565b600b546001600160a01b0390811690841603612c1557506011546108fb565b5060135492915050565b602081526000825180602084015260005b81811015612c4d5760208186018101516040868401015201612c30565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b6001600160a01b0381168114611b5f57600080fd5b60008060408385031215612cb357600080fd5b8235612cbe81612c8b565b946020939093013593505050565b600080600060608486031215612ce157600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215612d0d57600080fd5b8335612d1881612c8b565b92506020840135612d2881612c8b565b929592945050506040919091013590565b600060208284031215612d4b57600080fd5b81356109ba81612c8b565b600060208284031215612d6857600080fd5b5035919050565b8015158114611b5f57600080fd5b60008060408385031215612d9057600080fd5b8235612d9b81612c8b565b91506020830135612dab81612d6f565b809150509250929050565b60008060408385031215612dc957600080fd5b8235612dd481612c8b565b91506020830135612dab81612c8b565b600080600080600080600080610100898b031215612e0157600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820281158282048414176108fb576108fb612e39565b600082612eb5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612f1a57612f1a612e39565b5060010190565b600060208284031215612f3357600080fd5b81516109ba81612c8b565b600081518084526020840193506020830160005b82811015612fa05781516001600160a01b0381511687526001600160a01b03602082015116602088015260408101511515604088015250606086019550602082019150600181019050612f52565b5093949350505050565b848152608060208201526000612fc36080830186612f3e565b6001600160a01b03949094166040830152506060015292915050565b600060208284031215612ff157600080fd5b81516109ba81612d6f565b818103818111156108fb576108fb612e39565b808201808211156108fb576108fb612e39565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b85815284602082015260a06040820152600061307060a0830186612f3e565b6001600160a01b039490941660608301525060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122061fdd3232719ff08838692ef477f917861aab5fe6f7175bbf15391857c40670864736f6c634300081a0033

Deployed Bytecode

0x6080604052600436106102d55760003560e01c80638187f51611610179578063c942435d116100d6578063e2d6f94c1161008a578063f2fde38b11610064578063f2fde38b14610894578063f8e5884b146108b4578063ffd49c84146108d457600080fd5b8063e2d6f94c1461083e578063ef43b02b1461085e578063efca2eed1461087e57600080fd5b8063ce7c2ac2116100bb578063ce7c2ac21461078c578063d84b440a146107e3578063dd62ed3e146107f857600080fd5b8063c942435d1461073e578063ca89b8991461075357600080fd5b806395d89b411161012d578063a8aa1b3111610112578063a8aa1b31146106e9578063a9059cbb14610709578063ad77bd141461072957600080fd5b806395d89b411461068d578063997664d7146106d357600080fd5b80638c41180e1161015e5780638c41180e146106385780638cd4426d146106585780639358928b1461067857600080fd5b80638187f516146105fa578063893d20e81461061a57600080fd5b806334c5d2ce1161023257806344e56680116101e657806360e71962116101c057806360e719621461058e57806370a08231146105a45780637d3dec60146105da57600080fd5b806344e566801461053857806348ff2b8b146105585780634fab0ae81461057857600080fd5b80633f4218e0116102175780633f4218e0146104b85780633f89797e146104e85780634355855a1461050857600080fd5b806334c5d2ce146104825780633a98ef39146104a257600080fd5b806323b872dd11610289578063293230b81161026e578063293230b8146104225780632f54bf6e14610437578063313ce5671461046657600080fd5b806323b872dd146103e257806328fd31981461040257600080fd5b80630ca61cb1116102ba5780630ca61cb11461036957806318160ddd1461038b578063228cb733146103aa57600080fd5b806306fdde03146102e1578063095ea7b31461033957600080fd5b366102dc57005b600080fd5b3480156102ed57600080fd5b5060408051808201909152600881527f446f4e6f7442757900000000000000000000000000000000000000000000000060208201525b6040516103309190612c1f565b60405180910390f35b34801561034557600080fd5b50610359610354366004612ca0565b6108ea565b6040519015158152602001610330565b34801561037557600080fd5b50610389610384366004612ccc565b610901565b005b34801561039757600080fd5b506001545b604051908152602001610330565b3480156103b657600080fd5b50601a546103ca906001600160a01b031681565b6040516001600160a01b039091168152602001610330565b3480156103ee57600080fd5b506103596103fd366004612cf8565b610957565b34801561040e57600080fd5b5061039c61041d366004612d39565b6109c1565b34801561042e57600080fd5b50610389610a4c565b34801561044357600080fd5b50610359610452366004612d39565b6000546001600160a01b0391821691161490565b34801561047257600080fd5b5060405160128152602001610330565b34801561048e57600080fd5b5061038961049d366004612ccc565b610b3b565b3480156104ae57600080fd5b5061039c601b5481565b3480156104c457600080fd5b506103596104d3366004612d39565b60076020526000908152604090205460ff1681565b3480156104f457600080fd5b50610389610503366004612d56565b610cb7565b34801561051457600080fd5b50610359610523366004612d39565b60086020526000908152604090205460ff1681565b34801561054457600080fd5b50610389610553366004612d39565b610da4565b34801561056457600080fd5b50610389610573366004612d7d565b610eeb565b34801561058457600080fd5b5061039c60265481565b34801561059a57600080fd5b5061039c60275481565b3480156105b057600080fd5b5061039c6105bf366004612d39565b6001600160a01b031660009081526005602052604090205490565b3480156105e657600080fd5b506103896105f5366004612d56565b610f59565b34801561060657600080fd5b50610389610615366004612d39565b611148565b34801561062657600080fd5b506000546001600160a01b03166103ca565b34801561064457600080fd5b50610389610653366004612d7d565b6115cc565b34801561066457600080fd5b50610389610673366004612ca0565b6116c7565b34801561068457600080fd5b5061039c6117a8565b34801561069957600080fd5b5060408051808201909152600381527f444e4200000000000000000000000000000000000000000000000000000000006020820152610323565b3480156106df57600080fd5b5061039c601c5481565b3480156106f557600080fd5b50600b546103ca906001600160a01b031681565b34801561071557600080fd5b50610359610724366004612ca0565b611819565b34801561073557600080fd5b5061039c611826565b34801561074a57600080fd5b50610389611860565b34801561075f57600080fd5b5061039c61076e366004612d39565b6001600160a01b031660009081526023602052604090206002015490565b34801561079857600080fd5b506107c86107a7366004612d39565b60236020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610330565b3480156107ef57600080fd5b5061038961186b565b34801561080457600080fd5b5061039c610813366004612db6565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561084a57600080fd5b50610389610859366004612de4565b611954565b34801561086a57600080fd5b50610389610879366004612d7d565b6119bd565b34801561088a57600080fd5b5061039c601d5481565b3480156108a057600080fd5b506103896108af366004612d39565b611a64565b3480156108c057600080fd5b506103896108cf366004612d56565b611b13565b3480156108e057600080fd5b5061039c60255481565b60006108f7338484611b62565b5060015b92915050565b6000546001600160a01b031633146109495760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b60448201526064015b60405180910390fd5b602592909255602655602755565b6000610964848484611cba565b6109b684336109b18560405180606001604052806028815260200161308e602891396001600160a01b038a16600090815260066020908152604080832033845290915290205491906122ee565b611b62565b5060015b9392505050565b6001600160a01b03811660009081526023602052604081205481036109e857506000919050565b6001600160a01b038216600090815260236020526040812054610a0a9061231a565b6001600160a01b038416600090815260236020526040902060010154909150808211610a3a575060009392505050565b610a448282612337565b949350505050565b6000546001600160a01b03163314610a8f5760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610940565b600b5474010000000000000000000000000000000000000000900460ff1615610afa5760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610940565b600b80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b6000546001600160a01b03163314610b7e5760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610940565b600061271084610b8d60015490565b610b979190612e68565b610ba19190612e7f565b9050600061271084610bb260015490565b610bbc9190612e68565b610bc69190612e7f565b9050600061271084610bd760015490565b610be19190612e68565b610beb9190612e7f565b60028490556003839055600481905590506000610c1e6103e8610c186005610c1260015490565b90612343565b9061234f565b9050808410158015610c305750808310155b8015610c3c5750808210155b610cae5760405162461bcd60e51b815260206004820152602e60248201527f4d61782054587320616e64204d61782057616c6c65742063616e6e6f7420626560448201527f206c657373207468616e202e35250000000000000000000000000000000000006064820152608401610940565b50505050505050565b6020546000819003610cc7575050565b6000805a905060005b8483108015610cde57508381105b15610d9d578360245410610cf25760006024555b610d24602060245481548110610d0a57610d0a612eba565b6000918252602090912001546001600160a01b031661235b565b15610d5b57610d5b602060245481548110610d4157610d41612eba565b6000918252602090912001546001600160a01b03166123a0565b610d70610d695a8490612337565b8490612475565b92505a602480549193506000610d8583612ee9565b91905055508080610d9590612ee9565b915050610cd0565b5050505050565b6000546001600160a01b03163314610de75760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610940565b6000610df1611826565b905060008111610e435760405162461bcd60e51b815260206004820152600d60248201527f4e6f2065786365737320455448000000000000000000000000000000000000006044820152606401610940565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610e90576040519150601f19603f3d011682016040523d82523d6000602084013e610e95565b606091505b5050905080610ee65760405162461bcd60e51b815260206004820152600f60248201527f5472616e73666572206661696c656400000000000000000000000000000000006044820152606401610940565b505050565b6000546001600160a01b03163314610f2e5760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610940565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610f9c5760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610940565b604080516001808252818301909252600091816020015b60408051606081018252600080825260208083018290529282015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610fb35750506040805160608101808352600a547ff24286210000000000000000000000000000000000000000000000000000000090915291519293509182916001600160a01b03169063f2428621906064808501916020918187030181865afa158015611069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108d9190612f21565b6001600160a01b039081168252601a541660208201526001604090910152815182906000906110be576110be612eba565b6020908102919091010152600a546040517f76c727510000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906376c7275190849061111b90600090869030904290600401612faa565b6000604051808303818588803b15801561113457600080fd5b505af1158015610cae573d6000803e3d6000fd5b6000546001600160a01b0316331461118b5760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610940565b6001600160a01b0381166111e15760405162461bcd60e51b815260206004820152601d60248201527f526f757465722063616e6e6f74206265207a65726f20616464726573730000006044820152606401610940565b600a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038316908117909155604080517fc45a0155000000000000000000000000000000000000000000000000000000008152905163c45a0155916004808201926020929091908290030181865afa15801561126b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128f9190612f21565b6001600160a01b0316636801cc3030600a60009054906101000a90046001600160a01b03166001600160a01b031663f24286216040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113159190612f21565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201529116602482015260006044820152606401602060405180830381865afa15801561137f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a39190612f21565b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691821790556115a457600a60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611431573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114559190612f21565b6001600160a01b03166382dfdce430600a60009054906101000a90046001600160a01b03166001600160a01b031663f24286216040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114db9190612f21565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152600060448201526064016020604051808303816000875af1158015611547573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156b9190612f21565b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790555b50600b546001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000546001600160a01b0316331461160f5760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610940565b600b546001600160a01b0383811691161480159061163b5750600a546001600160a01b03838116911614155b801561165057506001600160a01b0382163014155b61169c5760405162461bcd60e51b815260206004820152601260248201527f496e656c696769626c65204164647265737300000000000000000000000000006044820152606401610940565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461170a5760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610940565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081527327dfbec90eea392446f71638b70193c6f558c0016004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611784573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee69190612fdf565b60056020527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc5461dead60009081527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba54600154919261181492909161180e9190612337565b90612337565b905090565b60006108f7338484611cba565b601d54601c546000914791839161183c91612ffc565b90508181111561184f5760009250505090565b6118598183612ffc565b9250505090565b611869336123a0565b565b6000546001600160a01b031633146118ae5760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610940565b60006118b8611826565b90506000811161190a5760405162461bcd60e51b815260206004820152601260248201527f4e6f20756e616c6c6f63617465642045544800000000000000000000000000006044820152606401610940565b80601c600082825461191c919061300f565b9091555050601b54601f546119319083612e68565b61193b9190612e7f565b601e600082825461194c919061300f565b909155505050565b6000546001600160a01b031633146119975760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610940565b600c97909755600d95909555601093909355600e91909155600f55601155601255601355565b6000546001600160a01b03163314611a005760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610940565b6001600160a01b0382166000908152600860205260409020805460ff19168215801591909117909155611a3c57611a38826000612481565b5050565b611a3882611a5f846001600160a01b031660009081526005602052604090205490565b612481565b6000546001600160a01b03163314611aa75760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610940565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6000546001600160a01b03163314611b565760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610940565b611b5f816125d2565b50565b6001600160a01b038316611bdd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610940565b6001600160a01b038216611c595760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610940565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611d365760405162461bcd60e51b815260206004820152602160248201527f45524332303a207472616e736665722066726f6d207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610940565b6001600160a01b038216611d8c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a207472616e7366657220746f207a65726f2061646472657373006044820152606401610940565b60008111611e025760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610940565b6001600160a01b038316600090815260056020526040902054811115611e6a5760405162461bcd60e51b815260206004820152601460248201527f496e73756666696369656e742062616c616e63650000000000000000000000006044820152606401610940565b6001600160a01b03808416600081815260076020526040808220548685168084529190922054600b5460ff9384169591909316939216908114911483158015611eb1575082155b1561205c57600b5474010000000000000000000000000000000000000000900460ff16611f205760405162461bcd60e51b815260206004820152601360248201527f54726164696e67206e6f7420616c6c6f776564000000000000000000000000006044820152606401610940565b81158015611f3957506001600160a01b03861661dead14155b15611fb3576004546001600160a01b038716600090815260056020526040902054611f6590879061300f565b1115611fb35760405162461bcd60e51b815260206004820152601260248201527f45786365656473206d61782077616c6c657400000000000000000000000000006044820152606401610940565b6002548511156120055760405162461bcd60e51b815260206004820152601560248201527f45786365656473206d617820747820616d6f756e7400000000000000000000006044820152606401610940565b8061205c5760035485111561205c5760405162461bcd60e51b815260206004820152601760248201527f45786365656473206d61782073656c6c20616d6f756e740000000000000000006044820152606401610940565b818015612067575083155b15612082576016805490600061207c83612ee9565b91905055505b3060009081526005602052604081205460175490919060ff161580156120aa575060155460ff165b80156120d05750600b5474010000000000000000000000000000000000000000900460ff165b80156120da575085155b80156120e35750835b80156120f25750600260165410155b801561210057506019548710155b801561210e57506018548210155b90508015612127576121216018546125d2565b60006016555b6001600160a01b0389166000908152600560205260408120805489929061214f908490612ffc565b909155506000905086806121605750855b6121745761216f8a8a8a61272b565b612176565b875b6001600160a01b038a166000908152600560205260408120805492935083929091906121a390849061300f565b92505081905550886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121ef91815260200190565b60405180910390a36001600160a01b03808b1660009081526008602052604080822054928c16825290205460ff91821615911615818061222c5750805b156122e0578115612292578680156122415750835b156122545761224f8c6123a0565b61226e565b86158015612260575085155b1561226e5761226e8c6123a0565b6001600160a01b038c16600090815260056020526040902054612292908d90612481565b80156122e057861580156122a4575085155b80156122ae575083155b156122bc576122bc8b6123a0565b6001600160a01b038b166000908152600560205260409020546122e0908c90612481565b505050505050505050505050565b600081848411156123125760405162461bcd60e51b81526004016109409190612c1f565b505050900390565b60006108fb601f54610c18601e548561234390919063ffffffff16565b60006109ba8284612ffc565b60006109ba8284612e68565b60006109ba8284612e7f565b6025546001600160a01b03821660009081526022602052604081205490914291612385919061300f565b1080156108fb5750602654612399836109c1565b1192915050565b6001600160a01b0381166000908152602360205260408120906123c2836109c1565b825490915015806123d1575080155b156123db57505050565b80601d60008282546123ed919061300f565b90915550506040516001600160a01b0384169082156108fc029083906000818181858888f19350505050158015612428573d6000803e3d6000fd5b506001600160a01b038316600090815260226020526040812042905560028301805483929061245890849061300f565b909155505081546124689061231a565b8260010181905550505050565b60006109ba828461300f565b6000811180156124a757506001600160a01b038216600090815260236020526040902054155b1561252457602080546001600160a01b03841660008181526021845260408120839055600183018455929092527fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bb0180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055612557565b8015801561254957506001600160a01b03821660009081526023602052604090205415155b156125575761255782612819565b6001600160a01b038216600090815260236020526040902054601b5461258891839161258291612337565b90612475565b601b556001600160a01b03821660009081526023602052604090208190556125af8161231a565b6001600160a01b0390921660009081526023602052604090206001019190915550565b6017805460ff19166001179055600e54600f54600d54600092916125f59161300f565b6125ff919061300f565b90504761260b8361297b565b60006126178247612ffc565b905060006126258483612e7f565b90506000600e54826126379190612e68565b905080156126485761264881612b47565b6000600d54836126589190612e68565b905080156126a3576040517327dfbec90eea392446f71638b70193c6f558c0019082156108fc029083906000818181858888f193505050501580156126a1573d6000803e3d6000fd5b505b60006126af828461300f565b905060008186116126c15760006126cb565b6126cb8287612ffc565b9050801561271657604051730f245a7d374388cd76fc8139dd900e9b02bf69d79082156108fc029083906000818181858888f19350505050158015612714573d6000803e3d6000fd5b505b50506017805460ff1916905550505050505050565b6000806127388585612b7e565b111561281257600061275b61274d8686612b7e565b601454610c1290869061234f565b306000908152600560205260409020549091506127789082612475565b30600081815260056020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906127c99085815260200190565b60405180910390a360105415612800576128003061dead6127fb601054610c126014548961234f90919063ffffffff16565b611cba565b61280a8382612337565b9150506109ba565b5092915050565b6020805461282990600190612ffc565b8154811061283957612839612eba565b60009182526020808320909101546001600160a01b0384811684526021835260409093205482549390911692811061287357612873612eba565b600091825260208083209190910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0394851617905591831681526021808352604082205483549093919291906128d690600190612ffc565b815481106128e6576128e6612eba565b60009182526020808320909101546001600160a01b0316835282810193909352604090910190209190915580548061292057612920613022565b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905501905550565b604080516001808252818301909252600091816020015b60408051606081018252600080825260208083018290529282015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161299257505060408051606081018252308152600a5482517ff2428621000000000000000000000000000000000000000000000000000000008152925193945090926020808501936001600160a01b039093169263f242862192600480830193928290030181865afa158015612a50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a749190612f21565b6001600160a01b031681526020016000151581525081600081518110612a9c57612a9c612eba565b6020908102919091010152600a54612abf9030906001600160a01b031684611b62565b600a546040517f7af728c80000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690637af728c890612b11908590600090869030904290600401613051565b600060405180830381600087803b158015612b2b57600080fd5b505af1158015612b3f573d6000803e3d6000fd5b505050505050565b601c54612b549082612475565b601c55601b54601f54612b7891612b6f91610c189085612343565b601e5490612475565b601e5550565b6001600160a01b03821660009081526009602052604081205460ff1680612bbd57506001600160a01b03821660009081526009602052604090205460ff165b15612bd757601454612bd0906064612337565b90506108fb565b600b546001600160a01b0390811690831603612bf657506012546108fb565b600b546001600160a01b0390811690841603612c1557506011546108fb565b5060135492915050565b602081526000825180602084015260005b81811015612c4d5760208186018101516040868401015201612c30565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b6001600160a01b0381168114611b5f57600080fd5b60008060408385031215612cb357600080fd5b8235612cbe81612c8b565b946020939093013593505050565b600080600060608486031215612ce157600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215612d0d57600080fd5b8335612d1881612c8b565b92506020840135612d2881612c8b565b929592945050506040919091013590565b600060208284031215612d4b57600080fd5b81356109ba81612c8b565b600060208284031215612d6857600080fd5b5035919050565b8015158114611b5f57600080fd5b60008060408385031215612d9057600080fd5b8235612d9b81612c8b565b91506020830135612dab81612d6f565b809150509250929050565b60008060408385031215612dc957600080fd5b8235612dd481612c8b565b91506020830135612dab81612c8b565b600080600080600080600080610100898b031215612e0157600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820281158282048414176108fb576108fb612e39565b600082612eb5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612f1a57612f1a612e39565b5060010190565b600060208284031215612f3357600080fd5b81516109ba81612c8b565b600081518084526020840193506020830160005b82811015612fa05781516001600160a01b0381511687526001600160a01b03602082015116602088015260408101511515604088015250606086019550602082019150600181019050612f52565b5093949350505050565b848152608060208201526000612fc36080830186612f3e565b6001600160a01b03949094166040830152506060015292915050565b600060208284031215612ff157600080fd5b81516109ba81612d6f565b818103818111156108fb576108fb612e39565b808201808211156108fb576108fb612e39565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b85815284602082015260a06040820152600061307060a0830186612f3e565b6001600160a01b039490941660608301525060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122061fdd3232719ff08838692ef477f917861aab5fe6f7175bbf15391857c40670864736f6c634300081a0033

Block Transaction Gas Used Reward
view all blocks sequenced

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

Validator Index Block Amount
View All Withdrawals

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

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