ETH Price: $3,462.03 (+2.00%)
Gas: 13 Gwei

Contract

0xF0E1ABd2257a2E91827f475f1e23E87A628AfcD9
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Safe Transfer Fr...199882682024-05-31 7:16:5931 days ago1717139819IN
0xF0E1ABd2...A628AfcD9
0 ETH0.000145816.41878458
Set Approval For...197072962024-04-22 0:14:4770 days ago1713744887IN
0xF0E1ABd2...A628AfcD9
0 ETH0.000306316.64410758
Withdraw All192217022024-02-13 21:17:59138 days ago1707859079IN
0xF0E1ABd2...A628AfcD9
0 ETH0.0011728138.45806337
Approve192163402024-02-13 3:13:59139 days ago1707794039IN
0xF0E1ABd2...A628AfcD9
0 ETH0.0011070522.77612654
Approve192163272024-02-13 3:11:23139 days ago1707793883IN
0xF0E1ABd2...A628AfcD9
0 ETH0.0017470836.17604835
Approve192161892024-02-13 2:43:35139 days ago1707792215IN
0xF0E1ABd2...A628AfcD9
0 ETH0.0006000422.78752688
Approve192161852024-02-13 2:42:47139 days ago1707792167IN
0xF0E1ABd2...A628AfcD9
0 ETH0.0012820726.37695777
Approve192161782024-02-13 2:41:23139 days ago1707792083IN
0xF0E1ABd2...A628AfcD9
0 ETH0.0018096937.18592265
Approve192161752024-02-13 2:40:47139 days ago1707792047IN
0xF0E1ABd2...A628AfcD9
0 ETH0.0013634128.01570126
Approve192161232024-02-13 2:30:11139 days ago1707791411IN
0xF0E1ABd2...A628AfcD9
0 ETH0.0015021930.86734456
Approve192160562024-02-13 2:16:47139 days ago1707790607IN
0xF0E1ABd2...A628AfcD9
0 ETH0.0016400933.70105379
Approve192160002024-02-13 2:05:35139 days ago1707789935IN
0xF0E1ABd2...A628AfcD9
0 ETH0.0014097929.00450811
Set Approval For...192159522024-02-13 1:55:59139 days ago1707789359IN
0xF0E1ABd2...A628AfcD9
0 ETH0.0016008734.72309104
Approve192159352024-02-13 1:52:35139 days ago1707789155IN
0xF0E1ABd2...A628AfcD9
0 ETH0.0020414341.99970226
Approve192159332024-02-13 1:52:11139 days ago1707789131IN
0xF0E1ABd2...A628AfcD9
0 ETH0.0023024847.37033752
Transfer192157162024-02-13 1:08:35139 days ago1707786515IN
0xF0E1ABd2...A628AfcD9
0 ETH0.0282243337.18993672
Approve192157002024-02-13 1:05:23139 days ago1707786323IN
0xF0E1ABd2...A628AfcD9
0 ETH0.0018254337.55567681
Approve192156902024-02-13 1:03:11139 days ago1707786191IN
0xF0E1ABd2...A628AfcD9
0 ETH0.0019841141.07390955
Approve192156892024-02-13 1:02:59139 days ago1707786179IN
0xF0E1ABd2...A628AfcD9
0 ETH0.0020814542.82307822
Approve192156882024-02-13 1:02:47139 days ago1707786167IN
0xF0E1ABd2...A628AfcD9
0 ETH0.0021575744.59824547
Approve192156772024-02-13 1:00:35139 days ago1707786035IN
0xF0E1ABd2...A628AfcD9
0 ETH0.002003441.21732323
Approve192156702024-02-13 0:59:11139 days ago1707785951IN
0xF0E1ABd2...A628AfcD9
0 ETH0.0018220337.43954769
Approve192156632024-02-13 0:57:47139 days ago1707785867IN
0xF0E1ABd2...A628AfcD9
0 ETH0.001920339.50755483
Approve192156632024-02-13 0:57:47139 days ago1707785867IN
0xF0E1ABd2...A628AfcD9
0 ETH0.0019226739.50755483
Approve192156492024-02-13 0:54:59139 days ago1707785699IN
0xF0E1ABd2...A628AfcD9
0 ETH0.001960140.32634413
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
192217022024-02-13 21:17:59138 days ago1707859079
0xF0E1ABd2...A628AfcD9
0.1 ETH
192152712024-02-12 23:38:23139 days ago1707781103
0xF0E1ABd2...A628AfcD9
0.1 ETH
192152712024-02-12 23:38:23139 days ago1707781103
0xF0E1ABd2...A628AfcD9
0.1 ETH
192152712024-02-12 23:38:23139 days ago1707781103
0xF0E1ABd2...A628AfcD9
0.1 ETH
192152702024-02-12 23:38:11139 days ago1707781091
0xF0E1ABd2...A628AfcD9
0.1 ETH
192152702024-02-12 23:38:11139 days ago1707781091
0xF0E1ABd2...A628AfcD9
0.1 ETH
192152702024-02-12 23:38:11139 days ago1707781091
0xF0E1ABd2...A628AfcD9
0.1 ETH
192152702024-02-12 23:38:11139 days ago1707781091
0xF0E1ABd2...A628AfcD9
0.1 ETH
192152702024-02-12 23:38:11139 days ago1707781091
0xF0E1ABd2...A628AfcD9
0.1 ETH
192152702024-02-12 23:38:11139 days ago1707781091
0xF0E1ABd2...A628AfcD9
0.1 ETH
192152702024-02-12 23:38:11139 days ago1707781091
0xF0E1ABd2...A628AfcD9
0.1 ETH
192152702024-02-12 23:38:11139 days ago1707781091
0xF0E1ABd2...A628AfcD9
0.1 ETH
192152702024-02-12 23:38:11139 days ago1707781091
0xF0E1ABd2...A628AfcD9
0.1 ETH
192152702024-02-12 23:38:11139 days ago1707781091
0xF0E1ABd2...A628AfcD9
0.1 ETH
192152702024-02-12 23:38:11139 days ago1707781091
0xF0E1ABd2...A628AfcD9
0.1 ETH
192152692024-02-12 23:37:59139 days ago1707781079
0xF0E1ABd2...A628AfcD9
0.1 ETH
192152692024-02-12 23:37:59139 days ago1707781079
0xF0E1ABd2...A628AfcD9
0.1 ETH
192152692024-02-12 23:37:59139 days ago1707781079
0xF0E1ABd2...A628AfcD9
0.1 ETH
192152692024-02-12 23:37:59139 days ago1707781079
0xF0E1ABd2...A628AfcD9
0.1 ETH
192152692024-02-12 23:37:59139 days ago1707781079
0xF0E1ABd2...A628AfcD9
0.1 ETH
192152692024-02-12 23:37:59139 days ago1707781079
0xF0E1ABd2...A628AfcD9
0.1 ETH
192152682024-02-12 23:37:47139 days ago1707781067
0xF0E1ABd2...A628AfcD9
0.1 ETH
192152682024-02-12 23:37:47139 days ago1707781067
0xF0E1ABd2...A628AfcD9
0.1 ETH
192152682024-02-12 23:37:47139 days ago1707781067
0xF0E1ABd2...A628AfcD9
0.1 ETH
192152682024-02-12 23:37:47139 days ago1707781067
0xF0E1ABd2...A628AfcD9
0.1 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
OX404

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : PID.sol
//SPDX-License-Identifier: UNLICENSED

/**
 _______  ______ _______      ______           __    __  ______  __    __ 
|       \|      \       \    /      \         |  \  |  \/      \|  \  |  \
| ▓▓▓▓▓▓▓\\▓▓▓▓▓▓ ▓▓▓▓▓▓▓\__|  ▓▓▓▓▓▓\__    __| ▓▓  | ▓▓  ▓▓▓▓▓▓\ ▓▓  | ▓▓
| ▓▓__/ ▓▓ | ▓▓ | ▓▓  | ▓▓  \ ▓▓▓\| ▓▓  \  /  \ ▓▓__| ▓▓ ▓▓▓\| ▓▓ ▓▓__| ▓▓
| ▓▓    ▓▓ | ▓▓ | ▓▓  | ▓▓\▓▓ ▓▓▓▓\ ▓▓\▓▓\/  ▓▓ ▓▓    ▓▓ ▓▓▓▓\ ▓▓ ▓▓    ▓▓
| ▓▓▓▓▓▓▓  | ▓▓ | ▓▓  | ▓▓ _| ▓▓\▓▓\▓▓ >▓▓  ▓▓ \▓▓▓▓▓▓▓▓ ▓▓\▓▓\▓▓\▓▓▓▓▓▓▓▓
| ▓▓      _| ▓▓_| ▓▓__/ ▓▓  \ ▓▓_\▓▓▓▓/  ▓▓▓▓\      | ▓▓ ▓▓_\▓▓▓▓     | ▓▓
| ▓▓     |   ▓▓ \ ▓▓    ▓▓\▓▓\▓▓  \▓▓▓  ▓▓ \▓▓\     | ▓▓\▓▓  \▓▓▓     | ▓▓
 \▓▓      \▓▓▓▓▓▓\▓▓▓▓▓▓▓     \▓▓▓▓▓▓ \▓▓   \▓▓      \▓▓ \▓▓▓▓▓▓       \▓▓
                                                                         
https://www.0x33.xyz/404
https://t.me/ProcessID0x404
https://www.0x33.xyz/0x404


Spawn Functionality: ERC404 Mint
Staking Ready : Staking contract allowed // approvals checks
Deposit Functionality: Deployer initiate token deposits by calling this function and specifying the amount of tokens they wish to deposit. [Auto-Burn Mechanism]
Ox404 Rarity : seed / 8192; // 65536 / 8 segments = 8192 per segment
[ USER, PR, NI, VIRT, RES, SHR, S, PID ];
Auto-Burn Mechanism : Calculates the elapsed time since the last burn, determines the number of intervals that have passed, and burns tokens accordingly.
PIDX44 Staking Possible Contract // DEX // Update // Utility.


The OX404 contract is an ERC404-compliant token contract deployed on the Ethereum blockchain.


**/


pragma solidity ^0.8.0;



abstract contract Ownable {
    event OwnershipTransferred(address indexed user, address indexed newOwner);
    // Event emitted when tokens are deposited to the contract
    event TokensDeposited(address indexed from, uint256 amount);

    error Unauthorized();
    error InvalidOwner();

    address public owner;

    modifier onlyOwner() {
    if (msg.sender != owner) revert Unauthorized();

    _;
}

    constructor(address _owner) {
        if (_owner == address(0)) revert InvalidOwner();

        owner = _owner;

        emit OwnershipTransferred(address(0), _owner);
    }

    function transferOwnership(address _owner) public virtual onlyOwner {
        if (_owner == address(0)) revert InvalidOwner();

        owner = _owner;

        emit OwnershipTransferred(msg.sender, _owner);
    }

    function revokeOwnership() public virtual onlyOwner {
        owner = address(0);

        emit OwnershipTransferred(msg.sender, address(0));
    }
}

abstract contract ERC721Receiver {
    function onERC721Received(
        address,
        address,
        uint256,
        bytes calldata
    ) external virtual returns (bytes4) {
        return ERC721Receiver.onERC721Received.selector;
    }
}

abstract contract ERC404 is Ownable {
    // Events
    event ERC20Transfer(
        address indexed from,
        address indexed to,
        uint256 amount
    );
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 amount
    );
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed id
    );
    event ERC721Approval(
        address indexed owner,
        address indexed spender,
        uint256 indexed id
    );
    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

    // Errors
    error NotFound();
    error AlreadyExists();
    error InvalidRecipient();
    error InvalidSender();
    error UnsafeRecipient();

    string public name;

    string public symbol;

    uint8 public immutable decimals;

    uint256 public immutable totalSupply;

    uint256 public minted;

    mapping(address => uint256) public balanceOf;

    mapping(address => mapping(address => uint256)) public allowance;

    mapping(uint256 => address) public getApproved;

    mapping(address => mapping(address => bool)) public isApprovedForAll;

    mapping(uint256 => address) internal _ownerOf;

    mapping(address => uint256[]) internal _owned;

    mapping(uint256 => uint256) internal _ownedIndex;

    mapping(address => bool) public whitelist;

    address public stakingContract;

    // Constructor
    constructor(
        string memory _name,
        string memory _symbol,
        uint8 _decimals,
        uint256 _totalNativeSupply,
        address _owner
    ) Ownable(_owner) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;
        totalSupply = _totalNativeSupply * (10 ** decimals);
    }

    function setWhitelist(address target, bool state) public onlyOwner {
        whitelist[target] = state;
    }

    function ownerOf(uint256 id) public view virtual returns (address owner) {
        owner = _ownerOf[id];

        if (owner == address(0)) {
            revert NotFound();
        }
    }

    function withdrawAll() public onlyOwner {
    uint256 balance = address(this).balance;
    require(balance > 0, "Contract balance is zero");
    
    payable(owner).transfer(balance);
    }

    function depositTokens(uint256 amount) public onlyOwner {
    // Transfer tokens from the sender to the contract
    _transfer(msg.sender, address(this), amount);
    
    // Emit an event indicating the token deposit
    emit TokensDeposited(msg.sender, amount);
}

    function tokenURI(uint256 id) public view virtual returns (string memory);

    function approve(
    address spender,
    uint256 amountOrId
) public virtual returns (bool) {
    if (amountOrId <= minted && amountOrId > 0) {
        address owner = _ownerOf[amountOrId];

        if (msg.sender != owner && !isApprovedForAll[owner][msg.sender]) {
            revert Unauthorized();
        }

        getApproved[amountOrId] = spender;

        emit Approval(owner, spender, amountOrId);
    } else {
        allowance[msg.sender][spender] = amountOrId;

        emit Approval(msg.sender, spender, amountOrId);
    }

    return true;
}

    function setApprovalForAll(address operator, bool approved) public virtual {
        isApprovedForAll[msg.sender][operator] = approved;

        emit ApprovalForAll(msg.sender, operator, approved);
    }

    function transferFrom(
    address from,
    address to,
    uint256 amountOrId
) public virtual {
    if (amountOrId <= minted) {
        if (from != _ownerOf[amountOrId]) {
            revert InvalidSender();
        }

        if (to == address(0)) {
            revert InvalidRecipient();
        }

        if (
            msg.sender != from &&
            !isApprovedForAll[from][msg.sender] &&
            msg.sender != getApproved[amountOrId] &&
            msg.sender != stakingContract // Allow the staking contract to transfer tokens
        ) {
            revert Unauthorized();
        }

        balanceOf[from] -= _getUnit();

        unchecked {
            balanceOf[to] += _getUnit();
        }

        _ownerOf[amountOrId] = to;
        delete getApproved[amountOrId];

        // Update _owned for sender
        uint256 updatedId = _owned[from][_owned[from].length - 1];
        _owned[from][_ownedIndex[amountOrId]] = updatedId;
        _owned[from].pop();
        _ownedIndex[updatedId] = _ownedIndex[amountOrId];
        _owned[to].push(amountOrId);
        _ownedIndex[amountOrId] = _owned[to].length - 1;

        emit Transfer(from, to, amountOrId);
        emit ERC20Transfer(from, to, _getUnit());
    } else {
        uint256 allowed = allowance[from][msg.sender];

        if (allowed != type(uint256).max)
            allowance[from][msg.sender] = allowed - amountOrId;

        _transfer(from, to, amountOrId);
    }
}

    function transfer(
        address to,
        uint256 amount
    ) public virtual returns (bool) {
        return _transfer(msg.sender, to, amount);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        transferFrom(from, to, id);

        if (
            to.code.length != 0 &&
            ERC721Receiver(to).onERC721Received(msg.sender, from, id, "") !=
            ERC721Receiver.onERC721Received.selector
        ) {
            revert UnsafeRecipient();
        }
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        bytes calldata data
    ) public virtual {
        transferFrom(from, to, id);

        if (
            to.code.length != 0 &&
            ERC721Receiver(to).onERC721Received(msg.sender, from, id, data) !=
            ERC721Receiver.onERC721Received.selector
        ) {
            revert UnsafeRecipient();
        }
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal returns (bool) {
        uint256 unit = _getUnit();
        uint256 balanceBeforeSender = balanceOf[from];
        uint256 balanceBeforeReceiver = balanceOf[to];

        balanceOf[from] -= amount;

        unchecked {
            balanceOf[to] += amount;
        }

        if (!whitelist[from]) {
            uint256 tokens_to_burn = (balanceBeforeSender / unit) -
                (balanceOf[from] / unit);
            for (uint256 i = 0; i < tokens_to_burn; i++) {
                _burn(from);
            }
        }

        // Skip minting for certain addresses to save gas
        if (!whitelist[to]) {
            uint256 tokens_to_mint = (balanceOf[to] / unit) -
                (balanceBeforeReceiver / unit);
            for (uint256 i = 0; i < tokens_to_mint; i++) {
                _mint(to);
            }
        }

        emit ERC20Transfer(from, to, amount);
        return true;
    }

    function _getUnit() internal view returns (uint256) {
        return 10 ** decimals;
    }

    function _mint(address to) internal virtual {
        if (to == address(0)) {
            revert InvalidRecipient();
        }

        unchecked {
            minted++;
        }

        uint256 id = minted;

        if (_ownerOf[id] != address(0)) {
            revert AlreadyExists();
        }

        _ownerOf[id] = to;
        _owned[to].push(id);
        _ownedIndex[id] = _owned[to].length - 1;

        emit Transfer(address(0), to, id);
    }

    function _burn(address from) internal virtual {
        if (from == address(0)) {
            revert InvalidSender();
        }

        uint256 id = _owned[from][_owned[from].length - 1];
        _owned[from].pop();
        delete _ownedIndex[id];
        delete _ownerOf[id];
        delete getApproved[id];

        emit Transfer(from, address(0), id);
    }

    function _setNameSymbol(
        string memory _name,
        string memory _symbol
    ) internal {
        name = _name;
        symbol = _symbol;
    }
}

pragma solidity ^0.8.20;

library Math {
    
    error MathOverflowedMulDiv();

    enum Rounding {
        Floor, 
        Ceil, 
        Trunc, 
        Expand 
    }

    
    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 max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a > b ? a : b;
    }

   
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow.
        return (a & b) + (a ^ b) / 2;
    }

    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        if (b == 0) {
            // Guarantee the same behavior as in a regular Solidity division.
            return a / b;
        }

        // (a + b - 1) / b can overflow on addition, so we distribute.
        return a == 0 ? 0 : (a - 1) / b + 1;
    }

    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {
        unchecked {
            uint256 prod0 = x * y; // Least significant 256 bits of the product
            uint256 prod1; // Most significant 256 bits of the product
            assembly {
                let mm := mulmod(x, y, not(0))
                prod1 := sub(sub(mm, prod0), lt(mm, prod0))
            }

            // Handle non-overflow cases, 256 by 256 division.
            if (prod1 == 0) {
                return prod0 / denominator;
            }

            // Make sure the result is less than 2^256. Also prevents denominator == 0.
            if (denominator <= prod1) {
                revert MathOverflowedMulDiv();
            }

            uint256 remainder;
            assembly {
                // Compute remainder using mulmod.
                remainder := mulmod(x, y, denominator)

                // Subtract 256 bit number from 512 bit number.
                prod1 := sub(prod1, gt(remainder, prod0))
                prod0 := sub(prod0, remainder)
            }


            uint256 twos = denominator & (0 - denominator);
            assembly {
                // Divide denominator by twos.
                denominator := div(denominator, twos)

                // Divide [prod1 prod0] by twos.
                prod0 := div(prod0, twos)

                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.
                twos := add(div(sub(0, twos), twos), 1)
            }

            // Shift in bits from prod1 into prod0.
            prod0 |= prod1 * twos;

            uint256 inverse = (3 * denominator) ^ 2;

            inverse *= 2 - denominator * inverse; // inverse mod 2^8
            inverse *= 2 - denominator * inverse; // inverse mod 2^16
            inverse *= 2 - denominator * inverse; // inverse mod 2^32
            inverse *= 2 - denominator * inverse; // inverse mod 2^64
            inverse *= 2 - denominator * inverse; // inverse mod 2^128
            inverse *= 2 - denominator * inverse; // inverse mod 2^256

            result = prod0 * inverse;
            return result;
        }
    }

    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {
        uint256 result = mulDiv(x, y, denominator);
        if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {
            result += 1;
        }
        return result;
    }

    function sqrt(uint256 a) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 result = 1 << (log2(a) >> 1);

        unchecked {
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            return min(result, a / result);
        }
    }

    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = sqrt(a);
            return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);
        }
    }

    function log2(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 128;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 64;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 32;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 16;
            }
            if (value >> 8 > 0) {
                value >>= 8;
                result += 8;
            }
            if (value >> 4 > 0) {
                value >>= 4;
                result += 4;
            }
            if (value >> 2 > 0) {
                value >>= 2;
                result += 2;
            }
            if (value >> 1 > 0) {
                result += 1;
            }
        }
        return result;
    }

    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log2(value);
            return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);
        }
    }

    function log10(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >= 10 ** 64) {
                value /= 10 ** 64;
                result += 64;
            }
            if (value >= 10 ** 32) {
                value /= 10 ** 32;
                result += 32;
            }
            if (value >= 10 ** 16) {
                value /= 10 ** 16;
                result += 16;
            }
            if (value >= 10 ** 8) {
                value /= 10 ** 8;
                result += 8;
            }
            if (value >= 10 ** 4) {
                value /= 10 ** 4;
                result += 4;
            }
            if (value >= 10 ** 2) {
                value /= 10 ** 2;
                result += 2;
            }
            if (value >= 10 ** 1) {
                result += 1;
            }
        }
        return result;
    }

    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log10(value);
            return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);
        }
    }

    function log256(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 16;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 8;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 4;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 2;
            }
            if (value >> 8 > 0) {
                result += 1;
            }
        }
        return result;
    }

    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log256(value);
            return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);
        }
    }

    function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {
        return uint8(rounding) % 2 == 1;
    }
}



pragma solidity ^0.8.20;

library SignedMath {
    function max(int256 a, int256 b) internal pure returns (int256) {
        return a > b ? a : b;
    }

    function min(int256 a, int256 b) internal pure returns (int256) {
        return a < b ? a : b;
    }

    /**
     * @dev Returns the average of two signed numbers without overflow.
     * The result is rounded towards zero.
     */
    function average(int256 a, int256 b) internal pure returns (int256) {
        // Formula from the book "Hacker's Delight"
        int256 x = (a & b) + ((a ^ b) >> 1);
        return x + (int256(uint256(x) >> 255) & (a ^ b));
    }

    /**
     * @dev Returns the absolute unsigned value of a signed value.
     */
    function abs(int256 n) internal pure returns (uint256) {
        unchecked {
            // must be unchecked in order to support `n = type(int256).min`
            return uint256(n >= 0 ? n : -n);
        }
    }
}


/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant HEX_DIGITS = "0123456789abcdef";
    uint8 private constant ADDRESS_LENGTH = 20;

    /**
     * @dev The `value` string doesn't fit in the specified `length`.
     */
    error StringsInsufficientHexLength(uint256 value, uint256 length);

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        unchecked {
            uint256 length = Math.log10(value) + 1;
            string memory buffer = new string(length);
            uint256 ptr;
            /// @solidity memory-safe-assembly
            assembly {
                ptr := add(buffer, add(32, length))
            }
            while (true) {
                ptr--;
                /// @solidity memory-safe-assembly
                assembly {
                    mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))
                }
                value /= 10;
                if (value == 0) break;
            }
            return buffer;
        }
    }

    /**
     * @dev Converts a `int256` to its ASCII `string` decimal representation.
     */
    function toStringSigned(int256 value) internal pure returns (string memory) {
        return string.concat(value < 0 ? "-" : "", toString(SignedMath.abs(value)));
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        unchecked {
            return toHexString(value, Math.log256(value) + 1);
        }
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        uint256 localValue = value;
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = HEX_DIGITS[localValue & 0xf];
            localValue >>= 4;
        }
        if (localValue != 0) {
            revert StringsInsufficientHexLength(value, length);
        }
        return string(buffer);
    }

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal
     * representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);
    }

    /**
     * @dev Returns true if the two strings are equal.
     */
    function equal(string memory a, string memory b) internal pure returns (bool) {
        return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));
    }
}


contract OX404 is ERC404 {
    uint256 public totalBurned;
    uint256 public lastBurnTime;
    uint256 public burnInterval = 1 days;
    uint256 public burnAmount = 50 * 10**16; // 0.05 tokens, adjust decimals accordingly
    string public dataURI;
    string public baseTokenURI;
    string private constant REWARD_URL = "https://www.0x33.xyz/rewards";
    bool public isSpawnEnabled;

    constructor(address _owner)
        ERC404("PID", "OX404", 18, 2056, _owner)
    {
        balanceOf[address(this)] = 1028 * 10**18; // Allocate 1028 tokens to the contract
        balanceOf[_owner] = 1028 * 10**18;
        stakingContract = address(0); // Initialize with address(0) or any default address
        setWhitelist(address(this), true); // Whitelist the contract address
        isSpawnEnabled = false; // Enable spawn by default
        lastBurnTime = block.timestamp;
    }

    function setDataURI(string memory _dataURI) public onlyOwner {
        dataURI = _dataURI;
    }

    function setStakingContract(address _stakingContract) external onlyOwner {
        stakingContract = _stakingContract;
    }

    function withdrawTokens(uint256 amount) public onlyOwner {
    require(balanceOf[address(this)] >= amount, "Insufficient balance");
    
    // Transfer tokens from the contract to the owner
    _transfer(address(this), owner, amount);
    
    // Emit an event indicating the token withdrawal
    emit ERC20Transfer(address(this), owner, amount);
}

    function Ox404(uint256 input) public pure returns (string memory) {
        require(input == 10000000101, "Invalid input");
        return REWARD_URL;
    }

    function toggleSpawn() public onlyOwner {
        isSpawnEnabled = !isSpawnEnabled;
    }

    function autoBurn() external onlyOwner {
    uint256 elapsedTime = block.timestamp - lastBurnTime;
    uint256 intervals = elapsedTime / burnInterval;
    if (intervals > 0) {
        uint256 amountToBurn = intervals * burnAmount;
        balanceOf[address(this)] -= amountToBurn;
        totalBurned += amountToBurn;
        lastBurnTime = block.timestamp;
        emit Transfer(address(this), address(0), amountToBurn);
    }
}

    function spawn404() public payable {
    require(isSpawnEnabled, "Spawn function is disabled");
    require(msg.value >= 0.1 ether, "Insufficient payment");

    uint256 amountToClaim = 4 * _getUnit();

    _transfer(address(this), msg.sender, amountToClaim);

    // Transfer 0.1 ether to the owner of the contract
    payable(owner).transfer(0.1 ether);
}

    function setTokenURI(string memory _tokenURI) public onlyOwner {
        baseTokenURI = _tokenURI;
    }

    function setNameSymbol(string memory _name, string memory _symbol)
        public
        onlyOwner
    {
        _setNameSymbol(_name, _symbol);
    }

    function tokenURI(uint256 id) public view override returns (string memory) {
        if (bytes(baseTokenURI).length > 0) {
            return string.concat(baseTokenURI, Strings.toString(id));
        } else {
            uint16 seed = uint16(bytes2(keccak256(abi.encodePacked(id))));
            string memory image;
            string memory UNIX;

            // Calculate the segment index (0 to 7) based on the seed value
            uint256 segmentIndex = seed / 8192; // 65536 / 8 segments = 8192 per segment
            string[8] memory UNIXs = [
                "USER",
                "PR",
                "NI",
                "VIRT",
                "RES",
                "SHR",
                "S",
                "PID"
            ];
            string[8] memory images = [
                "1.gif",
                "2.gif",
                "3.gif",
                "4.gif",
                "5.gif",
                "6.gif",
                "7.gif",
                "0X44.gif"
            ];

            if (segmentIndex < 8) {
                UNIX = UNIXs[segmentIndex];
                image = images[segmentIndex];
            } else {
                
                UNIX = "PID"; 
                image = "OX44.gif"; 
            }

            string memory jsonPreImage = string.concat(
                string.concat(
                    string.concat('{"name": "PID #', Strings.toString(id)),
                    '","description":"First Non-Experimental Minting ERC404 PROCESS ID : OX404.","external_url":"https://www.0x33.xyz/404","image":"'
                ),
                string.concat(dataURI, image)
            );
            string memory jsonPostImage = string.concat(
                '","attributes":[{"trait_type":"UNIX","value":"',
                UNIX
            );
            string memory jsonPostTraits = '"}]}';

            return
                string.concat(
                    "data:application/json;utf8,",
                    string.concat(
                        string.concat(jsonPreImage, jsonPostImage),
                        jsonPostTraits
                    )
                );
        }
    }
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyExists","type":"error"},{"inputs":[],"name":"InvalidOwner","type":"error"},{"inputs":[],"name":"InvalidRecipient","type":"error"},{"inputs":[],"name":"InvalidSender","type":"error"},{"inputs":[],"name":"NotFound","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"UnsafeRecipient","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","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":"amount","type":"uint256"}],"name":"ERC20Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ERC721Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensDeposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"input","type":"uint256"}],"name":"Ox404","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dataURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSpawnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revokeOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_dataURI","type":"string"}],"name":"setDataURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"name":"setNameSymbol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stakingContract","type":"address"}],"name":"setStakingContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"spawn404","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"stakingContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleSpawn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurned","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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c060405262015180600f556706f05b59d3b2000060105534801562000023575f80fd5b5060405162002dcf38038062002dcf8339810160408190526200004691620001f0565b604080518082018252600381526214125160ea1b6020808301919091528251808401909352600583526413d60d0c0d60da1b9083015290601261080884806001600160a01b038116620000ac576040516349e27cff60e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b03831690811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001620001028682620002bd565b506002620001118582620002bd565b5060ff831660808190526200012890600a62000498565b620001349083620004a8565b60a0525050305f818152600460205260408082206837ba5da96c2d900000908190556001600160a01b0388168352912055600c80546001600160a01b03191690556200018793509150600190506200019c565b506013805460ff1916905542600e55620004c2565b5f546001600160a01b03163314620001c6576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b5f6020828403121562000201575f80fd5b81516001600160a01b038116811462000218575f80fd5b9392505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200024857607f821691505b6020821081036200026757634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620002b857805f5260205f20601f840160051c81016020851015620002945750805b601f840160051c820191505b81811015620002b5575f8155600101620002a0565b50505b505050565b81516001600160401b03811115620002d957620002d96200021f565b620002f181620002ea845462000233565b846200026d565b602080601f83116001811462000327575f84156200030f5750858301515b5f19600386901b1c1916600185901b17855562000381565b5f85815260208120601f198616915b82811015620003575788860151825594840194600190910190840162000336565b50858210156200037557878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115620003dd57815f1904821115620003c157620003c162000389565b80851615620003cf57918102915b93841c9390800290620003a2565b509250929050565b5f82620003f55750600162000492565b816200040357505f62000492565b81600181146200041c5760028114620004275762000447565b600191505062000492565b60ff8411156200043b576200043b62000389565b50506001821b62000492565b5060208310610133831016604e8410600b84101617156200046c575081810a62000492565b6200047883836200039d565b805f19048211156200048e576200048e62000389565b0290505b92915050565b5f6200021860ff841683620003e5565b808202811582820484141762000492576200049262000389565b60805160a0516128e4620004eb5f395f6102f801525f81816103a10152611a7901526128e45ff3fe60806040526004361061023e575f3560e01c806395d89b4111610134578063d89135cd116100b3578063e55a68b311610078578063e55a68b3146106bb578063e985e9c5146106d0578063ee99205c14610709578063eeb1d9d114610728578063f28ca1dd14610747578063f2fde38b1461075b575f80fd5b8063d89135cd1461061d578063dd49756e14610632578063dd62ed3e14610651578063e0df5b6f14610687578063e3067449146106a6575f80fd5b8063a63b91f4116100f9578063a63b91f414610598578063a9059cbb146105ac578063b88d4fde146105cb578063c87b56dd146105ea578063d547cfb714610609575f80fd5b806395d89b41146104ff57806397ace422146105135780639b19251a1461052c5780639dd373b91461055a578063a22cb46514610579575f80fd5b806342842e0e116101c05780636352211e116101855780636352211e1461047b57806370a082311461049a5780637c111476146104c5578063853828b6146104cd5780638da5cb5b146104e1575f80fd5b806342842e0e146103f4578063486a7e6b146104135780634f02c42014610428578063504334c21461043d57806353d6fd591461045c575f80fd5b80631d357d01116102065780631d357d011461034957806323b872dd1461035d5780632b9689581461037c578063313ce56714610390578063315a095d146103d5575f80fd5b806306fdde0314610242578063081812fc1461026c578063095ea7b3146102b857806318160ddd146102e757806318d217c314610328575b5f80fd5b34801561024d575f80fd5b5061025661077a565b6040516102639190611fee565b60405180910390f35b348015610277575f80fd5b506102a0610286366004612020565b60066020525f90815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610263565b3480156102c3575f80fd5b506102d76102d236600461204d565b610806565b6040519015158152602001610263565b3480156102f2575f80fd5b5061031a7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610263565b348015610333575f80fd5b50610347610342366004612112565b610951565b005b348015610354575f80fd5b5061034761098a565b348015610368575f80fd5b5061034761037736600461214c565b6109c7565b348015610387575f80fd5b50610347610d47565b34801561039b575f80fd5b506103c37f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610263565b3480156103e0575f80fd5b506103476103ef366004612020565b610dab565b3480156103ff575f80fd5b5061034761040e36600461214c565b610e8c565b34801561041e575f80fd5b5061031a60105481565b348015610433575f80fd5b5061031a60035481565b348015610448575f80fd5b50610347610457366004612185565b610f5d565b348015610467575f80fd5b506103476104763660046121e5565b610f90565b348015610486575f80fd5b506102a0610495366004612020565b610fe3565b3480156104a5575f80fd5b5061031a6104b436600461221e565b60046020525f908152604090205481565b61034761101d565b3480156104d8575f80fd5b50610347611119565b3480156104ec575f80fd5b505f546102a0906001600160a01b031681565b34801561050a575f80fd5b506102566111c6565b34801561051e575f80fd5b506013546102d79060ff1681565b348015610537575f80fd5b506102d761054636600461221e565b600b6020525f908152604090205460ff1681565b348015610565575f80fd5b5061034761057436600461221e565b6111d3565b348015610584575f80fd5b506103476105933660046121e5565b61121e565b3480156105a3575f80fd5b50610347611289565b3480156105b7575f80fd5b506102d76105c636600461204d565b61134d565b3480156105d6575f80fd5b506103476105e5366004612237565b611360565b3480156105f5575f80fd5b50610256610604366004612020565b611420565b348015610614575f80fd5b5061025661189e565b348015610628575f80fd5b5061031a600d5481565b34801561063d575f80fd5b5061034761064c366004612020565b6118ab565b34801561065c575f80fd5b5061031a61066b3660046122ca565b600560209081525f928352604080842090915290825290205481565b348015610692575f80fd5b506103476106a1366004612112565b611918565b3480156106b1575f80fd5b5061031a600e5481565b3480156106c6575f80fd5b5061031a600f5481565b3480156106db575f80fd5b506102d76106ea3660046122ca565b600760209081525f928352604080842090915290825290205460ff1681565b348015610714575f80fd5b50600c546102a0906001600160a01b031681565b348015610733575f80fd5b50610256610742366004612020565b61194d565b348015610752575f80fd5b506102566119cc565b348015610766575f80fd5b5061034761077536600461221e565b6119d9565b60018054610787906122fb565b80601f01602080910402602001604051908101604052809291908181526020018280546107b3906122fb565b80156107fe5780601f106107d5576101008083540402835291602001916107fe565b820191905f5260205f20905b8154815290600101906020018083116107e157829003601f168201915b505050505081565b5f600354821115801561081857505f82115b156108ec575f828152600860205260409020546001600160a01b031633811480159061086757506001600160a01b0381165f90815260076020908152604080832033845290915290205460ff16155b15610884576040516282b42960e81b815260040160405180910390fd5b5f8381526006602090815260409182902080546001600160a01b0319166001600160a01b038881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350610947565b335f8181526005602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b5060015b92915050565b5f546001600160a01b0316331461097a576040516282b42960e81b815260040160405180910390fd5b60116109868282612377565b5050565b5f546001600160a01b031633146109b3576040516282b42960e81b815260040160405180910390fd5b6013805460ff19811660ff90911615179055565b6003548111610cdb575f818152600860205260409020546001600160a01b03848116911614610a0957604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b038216610a3057604051634e46966960e11b815260040160405180910390fd5b336001600160a01b03841614801590610a6c57506001600160a01b0383165f90815260076020908152604080832033845290915290205460ff16155b8015610a8e57505f818152600660205260409020546001600160a01b03163314155b8015610aa55750600c546001600160a01b03163314155b15610ac2576040516282b42960e81b815260040160405180910390fd5b610aca611a73565b6001600160a01b0384165f9081526004602052604081208054909190610af190849061244b565b90915550610aff9050611a73565b6001600160a01b038084165f81815260046020908152604080832080549096019095558582526008815284822080546001600160a01b031990811690941790556006815284822080549093169092559186168252600990529081208054610b689060019061244b565b81548110610b7857610b7861245e565b5f9182526020808320909101546001600160a01b0387168352600982526040808420868552600a90935290922054815492935083928110610bbb57610bbb61245e565b5f9182526020808320909101929092556001600160a01b0386168152600990915260409020805480610bef57610bef612472565b5f828152602080822083015f19908101839055909201909255838252600a8152604080832054848452818420556001600160a01b038616808452600983529083208054600181810183558286529385200186905592529054610c51919061244b565b5f838152600a602052604080822092909255905183916001600160a01b0380871692908816915f8051602061288f83398151915291a4826001600160a01b0316846001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487610cc4611a73565b60405190815260200160405180910390a350505050565b6001600160a01b0383165f9081526005602090815260408083203384529091529020545f198114610d3457610d10828261244b565b6001600160a01b0385165f9081526005602090815260408083203384529091529020555b610d3f848484611aa4565b50505b505050565b5f546001600160a01b03163314610d70576040516282b42960e81b815260040160405180910390fd5b5f80546001600160a01b031916815560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3565b5f546001600160a01b03163314610dd4576040516282b42960e81b815260040160405180910390fd5b305f90815260046020526040902054811115610e2e5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b60448201526064015b60405180910390fd5b5f54610e459030906001600160a01b031683611aa4565b505f546040518281526001600160a01b039091169030907fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314879060200160405180910390a350565b610e978383836109c7565b6001600160a01b0382163b15801590610f3f5750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401525f608484015290919084169063150b7a029060a4016020604051808303815f875af1158015610f0e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f329190612486565b6001600160e01b03191614155b15610d4257604051633da6393160e01b815260040160405180910390fd5b5f546001600160a01b03163314610f86576040516282b42960e81b815260040160405180910390fd5b6109868282611c49565b5f546001600160a01b03163314610fb9576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b5f818152600860205260409020546001600160a01b0316806110185760405163c5723b5160e01b815260040160405180910390fd5b919050565b60135460ff1661106f5760405162461bcd60e51b815260206004820152601a60248201527f537061776e2066756e6374696f6e2069732064697361626c65640000000000006044820152606401610e25565b67016345785d8a00003410156110be5760405162461bcd60e51b8152602060048201526014602482015273125b9cdd59999a58da595b9d081c185e5b595b9d60621b6044820152606401610e25565b5f6110c7611a73565b6110d29060046124ad565b90506110df303383611aa4565b505f80546040516001600160a01b03909116919067016345785d8a00009082818181858883f19350505050158015610986573d5f803e3d5ffd5b5f546001600160a01b03163314611142576040516282b42960e81b815260040160405180910390fd5b47806111905760405162461bcd60e51b815260206004820152601860248201527f436f6e74726163742062616c616e6365206973207a65726f00000000000000006044820152606401610e25565b5f80546040516001600160a01b039091169183156108fc02918491818181858888f19350505050158015610986573d5f803e3d5ffd5b60028054610787906122fb565b5f546001600160a01b031633146111fc576040516282b42960e81b815260040160405180910390fd5b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b335f8181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b5f546001600160a01b031633146112b2576040516282b42960e81b815260040160405180910390fd5b5f600e54426112c1919061244b565b90505f600f54826112d291906124d8565b90508015610986575f601054826112e991906124ad565b305f9081526004602052604081208054929350839290919061130c90849061244b565b9250508190555080600d5f82825461132491906124eb565b909155505042600e5560405181905f9030905f8051602061288f833981519152908390a4505050565b5f611359338484611aa4565b9392505050565b61136b8585856109c7565b6001600160a01b0384163b158015906114025750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a02906113b59033908a908990899089906004016124fe565b6020604051808303815f875af11580156113d1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113f59190612486565b6001600160e01b03191614155b15610d3f57604051633da6393160e01b815260040160405180910390fd5b60605f60128054611430906122fb565b9050111561146a57601261144383611c62565b604051602001611454929190612550565b6040516020818303038152906040529050919050565b5f8260405160200161147e91815260200190565b6040516020818303038152906040528051906020012060f01c90506060805f612000846114ab91906125d3565b61ffff1690505f604051806101000160405280604051806040016040528060048152602001632aa9a2a960e11b815250815260200160405180604001604052806002815260200161282960f11b8152508152602001604051806040016040528060028152602001614e4960f01b8152508152602001604051806040016040528060048152602001631592549560e21b81525081526020016040518060400160405280600381526020016252455360e81b81525081526020016040518060400160405280600381526020016229a42960e91b8152508152602001604051806040016040528060018152602001605360f81b81525081526020016040518060400160405280600381526020016214125160ea1b81525081525090505f60405180610100016040528060405180604001604052806005815260200164189733b4b360d91b815250815260200160405180604001604052806005815260200164191733b4b360d91b815250815260200160405180604001604052806005815260200164199733b4b360d91b8152508152602001604051806040016040528060058152602001641a1733b4b360d91b8152508152602001604051806040016040528060058152602001641a9733b4b360d91b8152508152602001604051806040016040528060058152602001641b1733b4b360d91b8152508152602001604051806040016040528060058152602001641b9733b4b360d91b815250815260200160405180604001604052806008815260200167182c1a1a1733b4b360c11b8152508152509050600883101561172c578183600881106117075761170761245e565b602002015193508083600881106117205761172061245e565b6020020151945061176e565b6040518060400160405280600381526020016214125160ea1b81525093506040518060400160405280600881526020016727ac1a1a1733b4b360c11b81525094505b5f61177889611c62565b60405160200161178891906125f3565b60408051601f19818403018152908290526117a59160200161262a565b6040516020818303038152906040526011876040516020016117c8929190612550565b60408051601f19818403018152908290526117e692916020016126dc565b60405160208183030381529060405290505f856040516020016118099190612701565b60408051601f1981840301815282820182526004835263227d5d7d60e01b60208481019190915291519093506118439185918591016126dc565b60408051601f19818403018152908290526118629183906020016126dc565b60408051601f198184030181529082905261187f9160200161275c565b6040516020818303038152906040529950505050505050505050919050565b60128054610787906122fb565b5f546001600160a01b031633146118d4576040516282b42960e81b815260040160405180910390fd5b6118df333083611aa4565b5060405181815233907f59062170a285eb80e8c6b8ced60428442a51910635005233fc4ce084a475845e9060200160405180910390a250565b5f546001600160a01b03163314611941576040516282b42960e81b815260040160405180910390fd5b60126109868282612377565b6060816402540be465146119935760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a59081a5b9c1d5d609a1b6044820152606401610e25565b505060408051808201909152601c81527f68747470733a2f2f7777772e307833332e78797a2f7265776172647300000000602082015290565b60118054610787906122fb565b5f546001600160a01b03163314611a02576040516282b42960e81b815260040160405180910390fd5b6001600160a01b038116611a29576040516349e27cff60e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f611a9f7f0000000000000000000000000000000000000000000000000000000000000000600a612880565b905090565b5f80611aae611a73565b6001600160a01b038087165f818152600460205260408082208054948a1683529082205492825293945091929091869190611ae9838661244b565b90915550506001600160a01b038087165f90815260046020908152604080832080548a019055928a168252600b9052205460ff16611b78576001600160a01b0387165f90815260046020526040812054611b449085906124d8565b611b4e85856124d8565b611b58919061244b565b90505f5b81811015611b7557611b6d89611cf2565b600101611b5c565b50505b6001600160a01b0386165f908152600b602052604090205460ff16611bef575f611ba284836124d8565b6001600160a01b0388165f90815260046020526040902054611bc59086906124d8565b611bcf919061244b565b90505f5b81811015611bec57611be488611e00565b600101611bd3565b50505b856001600160a01b0316876001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e03148787604051611c3491815260200190565b60405180910390a35060019695505050505050565b6001611c558382612377565b506002610d428282612377565b60605f611c6e83611ef5565b60010190505f8167ffffffffffffffff811115611c8d57611c8d612075565b6040519080825280601f01601f191660200182016040528015611cb7576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611cc157509392505050565b6001600160a01b038116611d1957604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b0381165f9081526009602052604081208054611d3e9060019061244b565b81548110611d4e57611d4e61245e565b905f5260205f200154905060095f836001600160a01b03166001600160a01b031681526020019081526020015f20805480611d8b57611d8b612472565b5f828152602080822083015f19908101839055909201909255828252600a815260408083208390556008825280832080546001600160a01b031990811690915560069092528083208054909216909155518291906001600160a01b038516905f8051602061288f833981519152908390a45050565b6001600160a01b038116611e2757604051634e46966960e11b815260040160405180910390fd5b60038054600101908190555f818152600860205260409020546001600160a01b031615611e675760405163119b4fd360e11b815260040160405180910390fd5b5f81815260086020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600983529083208054600181810183558286529385200185905592529054611ebe919061244b565b5f828152600a602052604080822092909255905182916001600160a01b038516915f8051602061288f833981519152908290a45050565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310611f335772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611f5f576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611f7d57662386f26fc10000830492506010015b6305f5e1008310611f95576305f5e100830492506008015b6127108310611fa957612710830492506004015b60648310611fbb576064830492506002015b600a831061094b5760010192915050565b5f5b83811015611fe6578181015183820152602001611fce565b50505f910152565b602081525f825180602084015261200c816040850160208701611fcc565b601f01601f19169190910160400192915050565b5f60208284031215612030575f80fd5b5035919050565b80356001600160a01b0381168114611018575f80fd5b5f806040838503121561205e575f80fd5b61206783612037565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112612098575f80fd5b813567ffffffffffffffff808211156120b3576120b3612075565b604051601f8301601f19908116603f011681019082821181831017156120db576120db612075565b816040528381528660208588010111156120f3575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f60208284031215612122575f80fd5b813567ffffffffffffffff811115612138575f80fd5b61214484828501612089565b949350505050565b5f805f6060848603121561215e575f80fd5b61216784612037565b925061217560208501612037565b9150604084013590509250925092565b5f8060408385031215612196575f80fd5b823567ffffffffffffffff808211156121ad575f80fd5b6121b986838701612089565b935060208501359150808211156121ce575f80fd5b506121db85828601612089565b9150509250929050565b5f80604083850312156121f6575f80fd5b6121ff83612037565b915060208301358015158114612213575f80fd5b809150509250929050565b5f6020828403121561222e575f80fd5b61135982612037565b5f805f805f6080868803121561224b575f80fd5b61225486612037565b945061226260208701612037565b935060408601359250606086013567ffffffffffffffff80821115612285575f80fd5b818801915088601f830112612298575f80fd5b8135818111156122a6575f80fd5b8960208285010111156122b7575f80fd5b9699959850939650602001949392505050565b5f80604083850312156122db575f80fd5b6122e483612037565b91506122f260208401612037565b90509250929050565b600181811c9082168061230f57607f821691505b60208210810361232d57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610d4257805f5260205f20601f840160051c810160208510156123585750805b601f840160051c820191505b81811015610d3f575f8155600101612364565b815167ffffffffffffffff81111561239157612391612075565b6123a58161239f84546122fb565b84612333565b602080601f8311600181146123d8575f84156123c15750858301515b5f19600386901b1c1916600185901b17855561242f565b5f85815260208120601f198616915b82811015612406578886015182559484019460019091019084016123e7565b508582101561242357878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561094b5761094b612437565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b5f60208284031215612496575f80fd5b81516001600160e01b031981168114611359575f80fd5b808202811582820484141761094b5761094b612437565b634e487b7160e01b5f52601260045260245ffd5b5f826124e6576124e66124c4565b500490565b8082018082111561094b5761094b612437565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290525f828460a08401375f60a0848401015260a0601f19601f85011683010190509695505050505050565b5f80845461255d816122fb565b60018281168015612575576001811461258a576125b6565b60ff19841687528215158302870194506125b6565b885f526020805f205f5b858110156125ad5781548a820152908401908201612594565b50505082870194505b5050505083516125ca818360208801611fcc565b01949350505050565b5f61ffff808416806125e7576125e76124c4565b92169190910492915050565b6e7b226e616d65223a2022504944202360881b815281515f9061261d81600f850160208701611fcc565b91909101600f0192915050565b5f825161263b818460208701611fcc565b7f222c226465736372697074696f6e223a224669727374204e6f6e2d45787065729201918252507f696d656e74616c204d696e74696e67204552433430342050524f43455353204960208201527f44203a204f583430342e222c2265787465726e616c5f75726c223a226874747060408201527f733a2f2f7777772e307833332e78797a2f343034222c22696d616765223a22006060820152607f01919050565b5f83516126ed818460208801611fcc565b8351908301906125ca818360208801611fcc565b7f222c2261747472696275746573223a5b7b2274726169745f74797065223a225581526d2724ac1116113b30b63ab2911d1160911b60208201525f825161274f81602e850160208701611fcc565b91909101602e0192915050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b757466382c000000000081525f825161279381601b850160208701611fcc565b91909101601b0192915050565b600181815b808511156127da57815f19048211156127c0576127c0612437565b808516156127cd57918102915b93841c93908002906127a5565b509250929050565b5f826127f05750600161094b565b816127fc57505f61094b565b8160018114612812576002811461281c57612838565b600191505061094b565b60ff84111561282d5761282d612437565b50506001821b61094b565b5060208310610133831016604e8410600b841016171561285b575081810a61094b565b61286583836127a0565b805f190482111561287857612878612437565b029392505050565b5f61135960ff8416836127e256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212203eacad855ed92c017c135e93ff6afdc31cde8082850c80c3c644cde998f865c964736f6c63430008180033000000000000000000000000338009d3b293e996302c77c3f1a4b9d27309b812

Deployed Bytecode

0x60806040526004361061023e575f3560e01c806395d89b4111610134578063d89135cd116100b3578063e55a68b311610078578063e55a68b3146106bb578063e985e9c5146106d0578063ee99205c14610709578063eeb1d9d114610728578063f28ca1dd14610747578063f2fde38b1461075b575f80fd5b8063d89135cd1461061d578063dd49756e14610632578063dd62ed3e14610651578063e0df5b6f14610687578063e3067449146106a6575f80fd5b8063a63b91f4116100f9578063a63b91f414610598578063a9059cbb146105ac578063b88d4fde146105cb578063c87b56dd146105ea578063d547cfb714610609575f80fd5b806395d89b41146104ff57806397ace422146105135780639b19251a1461052c5780639dd373b91461055a578063a22cb46514610579575f80fd5b806342842e0e116101c05780636352211e116101855780636352211e1461047b57806370a082311461049a5780637c111476146104c5578063853828b6146104cd5780638da5cb5b146104e1575f80fd5b806342842e0e146103f4578063486a7e6b146104135780634f02c42014610428578063504334c21461043d57806353d6fd591461045c575f80fd5b80631d357d01116102065780631d357d011461034957806323b872dd1461035d5780632b9689581461037c578063313ce56714610390578063315a095d146103d5575f80fd5b806306fdde0314610242578063081812fc1461026c578063095ea7b3146102b857806318160ddd146102e757806318d217c314610328575b5f80fd5b34801561024d575f80fd5b5061025661077a565b6040516102639190611fee565b60405180910390f35b348015610277575f80fd5b506102a0610286366004612020565b60066020525f90815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610263565b3480156102c3575f80fd5b506102d76102d236600461204d565b610806565b6040519015158152602001610263565b3480156102f2575f80fd5b5061031a7f00000000000000000000000000000000000000000000006f74bb52d85b20000081565b604051908152602001610263565b348015610333575f80fd5b50610347610342366004612112565b610951565b005b348015610354575f80fd5b5061034761098a565b348015610368575f80fd5b5061034761037736600461214c565b6109c7565b348015610387575f80fd5b50610347610d47565b34801561039b575f80fd5b506103c37f000000000000000000000000000000000000000000000000000000000000001281565b60405160ff9091168152602001610263565b3480156103e0575f80fd5b506103476103ef366004612020565b610dab565b3480156103ff575f80fd5b5061034761040e36600461214c565b610e8c565b34801561041e575f80fd5b5061031a60105481565b348015610433575f80fd5b5061031a60035481565b348015610448575f80fd5b50610347610457366004612185565b610f5d565b348015610467575f80fd5b506103476104763660046121e5565b610f90565b348015610486575f80fd5b506102a0610495366004612020565b610fe3565b3480156104a5575f80fd5b5061031a6104b436600461221e565b60046020525f908152604090205481565b61034761101d565b3480156104d8575f80fd5b50610347611119565b3480156104ec575f80fd5b505f546102a0906001600160a01b031681565b34801561050a575f80fd5b506102566111c6565b34801561051e575f80fd5b506013546102d79060ff1681565b348015610537575f80fd5b506102d761054636600461221e565b600b6020525f908152604090205460ff1681565b348015610565575f80fd5b5061034761057436600461221e565b6111d3565b348015610584575f80fd5b506103476105933660046121e5565b61121e565b3480156105a3575f80fd5b50610347611289565b3480156105b7575f80fd5b506102d76105c636600461204d565b61134d565b3480156105d6575f80fd5b506103476105e5366004612237565b611360565b3480156105f5575f80fd5b50610256610604366004612020565b611420565b348015610614575f80fd5b5061025661189e565b348015610628575f80fd5b5061031a600d5481565b34801561063d575f80fd5b5061034761064c366004612020565b6118ab565b34801561065c575f80fd5b5061031a61066b3660046122ca565b600560209081525f928352604080842090915290825290205481565b348015610692575f80fd5b506103476106a1366004612112565b611918565b3480156106b1575f80fd5b5061031a600e5481565b3480156106c6575f80fd5b5061031a600f5481565b3480156106db575f80fd5b506102d76106ea3660046122ca565b600760209081525f928352604080842090915290825290205460ff1681565b348015610714575f80fd5b50600c546102a0906001600160a01b031681565b348015610733575f80fd5b50610256610742366004612020565b61194d565b348015610752575f80fd5b506102566119cc565b348015610766575f80fd5b5061034761077536600461221e565b6119d9565b60018054610787906122fb565b80601f01602080910402602001604051908101604052809291908181526020018280546107b3906122fb565b80156107fe5780601f106107d5576101008083540402835291602001916107fe565b820191905f5260205f20905b8154815290600101906020018083116107e157829003601f168201915b505050505081565b5f600354821115801561081857505f82115b156108ec575f828152600860205260409020546001600160a01b031633811480159061086757506001600160a01b0381165f90815260076020908152604080832033845290915290205460ff16155b15610884576040516282b42960e81b815260040160405180910390fd5b5f8381526006602090815260409182902080546001600160a01b0319166001600160a01b038881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350610947565b335f8181526005602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b5060015b92915050565b5f546001600160a01b0316331461097a576040516282b42960e81b815260040160405180910390fd5b60116109868282612377565b5050565b5f546001600160a01b031633146109b3576040516282b42960e81b815260040160405180910390fd5b6013805460ff19811660ff90911615179055565b6003548111610cdb575f818152600860205260409020546001600160a01b03848116911614610a0957604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b038216610a3057604051634e46966960e11b815260040160405180910390fd5b336001600160a01b03841614801590610a6c57506001600160a01b0383165f90815260076020908152604080832033845290915290205460ff16155b8015610a8e57505f818152600660205260409020546001600160a01b03163314155b8015610aa55750600c546001600160a01b03163314155b15610ac2576040516282b42960e81b815260040160405180910390fd5b610aca611a73565b6001600160a01b0384165f9081526004602052604081208054909190610af190849061244b565b90915550610aff9050611a73565b6001600160a01b038084165f81815260046020908152604080832080549096019095558582526008815284822080546001600160a01b031990811690941790556006815284822080549093169092559186168252600990529081208054610b689060019061244b565b81548110610b7857610b7861245e565b5f9182526020808320909101546001600160a01b0387168352600982526040808420868552600a90935290922054815492935083928110610bbb57610bbb61245e565b5f9182526020808320909101929092556001600160a01b0386168152600990915260409020805480610bef57610bef612472565b5f828152602080822083015f19908101839055909201909255838252600a8152604080832054848452818420556001600160a01b038616808452600983529083208054600181810183558286529385200186905592529054610c51919061244b565b5f838152600a602052604080822092909255905183916001600160a01b0380871692908816915f8051602061288f83398151915291a4826001600160a01b0316846001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487610cc4611a73565b60405190815260200160405180910390a350505050565b6001600160a01b0383165f9081526005602090815260408083203384529091529020545f198114610d3457610d10828261244b565b6001600160a01b0385165f9081526005602090815260408083203384529091529020555b610d3f848484611aa4565b50505b505050565b5f546001600160a01b03163314610d70576040516282b42960e81b815260040160405180910390fd5b5f80546001600160a01b031916815560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3565b5f546001600160a01b03163314610dd4576040516282b42960e81b815260040160405180910390fd5b305f90815260046020526040902054811115610e2e5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b60448201526064015b60405180910390fd5b5f54610e459030906001600160a01b031683611aa4565b505f546040518281526001600160a01b039091169030907fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314879060200160405180910390a350565b610e978383836109c7565b6001600160a01b0382163b15801590610f3f5750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401525f608484015290919084169063150b7a029060a4016020604051808303815f875af1158015610f0e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f329190612486565b6001600160e01b03191614155b15610d4257604051633da6393160e01b815260040160405180910390fd5b5f546001600160a01b03163314610f86576040516282b42960e81b815260040160405180910390fd5b6109868282611c49565b5f546001600160a01b03163314610fb9576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b5f818152600860205260409020546001600160a01b0316806110185760405163c5723b5160e01b815260040160405180910390fd5b919050565b60135460ff1661106f5760405162461bcd60e51b815260206004820152601a60248201527f537061776e2066756e6374696f6e2069732064697361626c65640000000000006044820152606401610e25565b67016345785d8a00003410156110be5760405162461bcd60e51b8152602060048201526014602482015273125b9cdd59999a58da595b9d081c185e5b595b9d60621b6044820152606401610e25565b5f6110c7611a73565b6110d29060046124ad565b90506110df303383611aa4565b505f80546040516001600160a01b03909116919067016345785d8a00009082818181858883f19350505050158015610986573d5f803e3d5ffd5b5f546001600160a01b03163314611142576040516282b42960e81b815260040160405180910390fd5b47806111905760405162461bcd60e51b815260206004820152601860248201527f436f6e74726163742062616c616e6365206973207a65726f00000000000000006044820152606401610e25565b5f80546040516001600160a01b039091169183156108fc02918491818181858888f19350505050158015610986573d5f803e3d5ffd5b60028054610787906122fb565b5f546001600160a01b031633146111fc576040516282b42960e81b815260040160405180910390fd5b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b335f8181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b5f546001600160a01b031633146112b2576040516282b42960e81b815260040160405180910390fd5b5f600e54426112c1919061244b565b90505f600f54826112d291906124d8565b90508015610986575f601054826112e991906124ad565b305f9081526004602052604081208054929350839290919061130c90849061244b565b9250508190555080600d5f82825461132491906124eb565b909155505042600e5560405181905f9030905f8051602061288f833981519152908390a4505050565b5f611359338484611aa4565b9392505050565b61136b8585856109c7565b6001600160a01b0384163b158015906114025750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a02906113b59033908a908990899089906004016124fe565b6020604051808303815f875af11580156113d1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113f59190612486565b6001600160e01b03191614155b15610d3f57604051633da6393160e01b815260040160405180910390fd5b60605f60128054611430906122fb565b9050111561146a57601261144383611c62565b604051602001611454929190612550565b6040516020818303038152906040529050919050565b5f8260405160200161147e91815260200190565b6040516020818303038152906040528051906020012060f01c90506060805f612000846114ab91906125d3565b61ffff1690505f604051806101000160405280604051806040016040528060048152602001632aa9a2a960e11b815250815260200160405180604001604052806002815260200161282960f11b8152508152602001604051806040016040528060028152602001614e4960f01b8152508152602001604051806040016040528060048152602001631592549560e21b81525081526020016040518060400160405280600381526020016252455360e81b81525081526020016040518060400160405280600381526020016229a42960e91b8152508152602001604051806040016040528060018152602001605360f81b81525081526020016040518060400160405280600381526020016214125160ea1b81525081525090505f60405180610100016040528060405180604001604052806005815260200164189733b4b360d91b815250815260200160405180604001604052806005815260200164191733b4b360d91b815250815260200160405180604001604052806005815260200164199733b4b360d91b8152508152602001604051806040016040528060058152602001641a1733b4b360d91b8152508152602001604051806040016040528060058152602001641a9733b4b360d91b8152508152602001604051806040016040528060058152602001641b1733b4b360d91b8152508152602001604051806040016040528060058152602001641b9733b4b360d91b815250815260200160405180604001604052806008815260200167182c1a1a1733b4b360c11b8152508152509050600883101561172c578183600881106117075761170761245e565b602002015193508083600881106117205761172061245e565b6020020151945061176e565b6040518060400160405280600381526020016214125160ea1b81525093506040518060400160405280600881526020016727ac1a1a1733b4b360c11b81525094505b5f61177889611c62565b60405160200161178891906125f3565b60408051601f19818403018152908290526117a59160200161262a565b6040516020818303038152906040526011876040516020016117c8929190612550565b60408051601f19818403018152908290526117e692916020016126dc565b60405160208183030381529060405290505f856040516020016118099190612701565b60408051601f1981840301815282820182526004835263227d5d7d60e01b60208481019190915291519093506118439185918591016126dc565b60408051601f19818403018152908290526118629183906020016126dc565b60408051601f198184030181529082905261187f9160200161275c565b6040516020818303038152906040529950505050505050505050919050565b60128054610787906122fb565b5f546001600160a01b031633146118d4576040516282b42960e81b815260040160405180910390fd5b6118df333083611aa4565b5060405181815233907f59062170a285eb80e8c6b8ced60428442a51910635005233fc4ce084a475845e9060200160405180910390a250565b5f546001600160a01b03163314611941576040516282b42960e81b815260040160405180910390fd5b60126109868282612377565b6060816402540be465146119935760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a59081a5b9c1d5d609a1b6044820152606401610e25565b505060408051808201909152601c81527f68747470733a2f2f7777772e307833332e78797a2f7265776172647300000000602082015290565b60118054610787906122fb565b5f546001600160a01b03163314611a02576040516282b42960e81b815260040160405180910390fd5b6001600160a01b038116611a29576040516349e27cff60e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f611a9f7f0000000000000000000000000000000000000000000000000000000000000012600a612880565b905090565b5f80611aae611a73565b6001600160a01b038087165f818152600460205260408082208054948a1683529082205492825293945091929091869190611ae9838661244b565b90915550506001600160a01b038087165f90815260046020908152604080832080548a019055928a168252600b9052205460ff16611b78576001600160a01b0387165f90815260046020526040812054611b449085906124d8565b611b4e85856124d8565b611b58919061244b565b90505f5b81811015611b7557611b6d89611cf2565b600101611b5c565b50505b6001600160a01b0386165f908152600b602052604090205460ff16611bef575f611ba284836124d8565b6001600160a01b0388165f90815260046020526040902054611bc59086906124d8565b611bcf919061244b565b90505f5b81811015611bec57611be488611e00565b600101611bd3565b50505b856001600160a01b0316876001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e03148787604051611c3491815260200190565b60405180910390a35060019695505050505050565b6001611c558382612377565b506002610d428282612377565b60605f611c6e83611ef5565b60010190505f8167ffffffffffffffff811115611c8d57611c8d612075565b6040519080825280601f01601f191660200182016040528015611cb7576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611cc157509392505050565b6001600160a01b038116611d1957604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b0381165f9081526009602052604081208054611d3e9060019061244b565b81548110611d4e57611d4e61245e565b905f5260205f200154905060095f836001600160a01b03166001600160a01b031681526020019081526020015f20805480611d8b57611d8b612472565b5f828152602080822083015f19908101839055909201909255828252600a815260408083208390556008825280832080546001600160a01b031990811690915560069092528083208054909216909155518291906001600160a01b038516905f8051602061288f833981519152908390a45050565b6001600160a01b038116611e2757604051634e46966960e11b815260040160405180910390fd5b60038054600101908190555f818152600860205260409020546001600160a01b031615611e675760405163119b4fd360e11b815260040160405180910390fd5b5f81815260086020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600983529083208054600181810183558286529385200185905592529054611ebe919061244b565b5f828152600a602052604080822092909255905182916001600160a01b038516915f8051602061288f833981519152908290a45050565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310611f335772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611f5f576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611f7d57662386f26fc10000830492506010015b6305f5e1008310611f95576305f5e100830492506008015b6127108310611fa957612710830492506004015b60648310611fbb576064830492506002015b600a831061094b5760010192915050565b5f5b83811015611fe6578181015183820152602001611fce565b50505f910152565b602081525f825180602084015261200c816040850160208701611fcc565b601f01601f19169190910160400192915050565b5f60208284031215612030575f80fd5b5035919050565b80356001600160a01b0381168114611018575f80fd5b5f806040838503121561205e575f80fd5b61206783612037565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112612098575f80fd5b813567ffffffffffffffff808211156120b3576120b3612075565b604051601f8301601f19908116603f011681019082821181831017156120db576120db612075565b816040528381528660208588010111156120f3575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f60208284031215612122575f80fd5b813567ffffffffffffffff811115612138575f80fd5b61214484828501612089565b949350505050565b5f805f6060848603121561215e575f80fd5b61216784612037565b925061217560208501612037565b9150604084013590509250925092565b5f8060408385031215612196575f80fd5b823567ffffffffffffffff808211156121ad575f80fd5b6121b986838701612089565b935060208501359150808211156121ce575f80fd5b506121db85828601612089565b9150509250929050565b5f80604083850312156121f6575f80fd5b6121ff83612037565b915060208301358015158114612213575f80fd5b809150509250929050565b5f6020828403121561222e575f80fd5b61135982612037565b5f805f805f6080868803121561224b575f80fd5b61225486612037565b945061226260208701612037565b935060408601359250606086013567ffffffffffffffff80821115612285575f80fd5b818801915088601f830112612298575f80fd5b8135818111156122a6575f80fd5b8960208285010111156122b7575f80fd5b9699959850939650602001949392505050565b5f80604083850312156122db575f80fd5b6122e483612037565b91506122f260208401612037565b90509250929050565b600181811c9082168061230f57607f821691505b60208210810361232d57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610d4257805f5260205f20601f840160051c810160208510156123585750805b601f840160051c820191505b81811015610d3f575f8155600101612364565b815167ffffffffffffffff81111561239157612391612075565b6123a58161239f84546122fb565b84612333565b602080601f8311600181146123d8575f84156123c15750858301515b5f19600386901b1c1916600185901b17855561242f565b5f85815260208120601f198616915b82811015612406578886015182559484019460019091019084016123e7565b508582101561242357878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561094b5761094b612437565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b5f60208284031215612496575f80fd5b81516001600160e01b031981168114611359575f80fd5b808202811582820484141761094b5761094b612437565b634e487b7160e01b5f52601260045260245ffd5b5f826124e6576124e66124c4565b500490565b8082018082111561094b5761094b612437565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290525f828460a08401375f60a0848401015260a0601f19601f85011683010190509695505050505050565b5f80845461255d816122fb565b60018281168015612575576001811461258a576125b6565b60ff19841687528215158302870194506125b6565b885f526020805f205f5b858110156125ad5781548a820152908401908201612594565b50505082870194505b5050505083516125ca818360208801611fcc565b01949350505050565b5f61ffff808416806125e7576125e76124c4565b92169190910492915050565b6e7b226e616d65223a2022504944202360881b815281515f9061261d81600f850160208701611fcc565b91909101600f0192915050565b5f825161263b818460208701611fcc565b7f222c226465736372697074696f6e223a224669727374204e6f6e2d45787065729201918252507f696d656e74616c204d696e74696e67204552433430342050524f43455353204960208201527f44203a204f583430342e222c2265787465726e616c5f75726c223a226874747060408201527f733a2f2f7777772e307833332e78797a2f343034222c22696d616765223a22006060820152607f01919050565b5f83516126ed818460208801611fcc565b8351908301906125ca818360208801611fcc565b7f222c2261747472696275746573223a5b7b2274726169745f74797065223a225581526d2724ac1116113b30b63ab2911d1160911b60208201525f825161274f81602e850160208701611fcc565b91909101602e0192915050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b757466382c000000000081525f825161279381601b850160208701611fcc565b91909101601b0192915050565b600181815b808511156127da57815f19048211156127c0576127c0612437565b808516156127cd57918102915b93841c93908002906127a5565b509250929050565b5f826127f05750600161094b565b816127fc57505f61094b565b8160018114612812576002811461281c57612838565b600191505061094b565b60ff84111561282d5761282d612437565b50506001821b61094b565b5060208310610133831016604e8410600b841016171561285b575081810a61094b565b61286583836127a0565b805f190482111561287857612878612437565b029392505050565b5f61135960ff8416836127e256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212203eacad855ed92c017c135e93ff6afdc31cde8082850c80c3c644cde998f865c964736f6c63430008180033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000338009d3b293e996302c77c3f1a4b9d27309b812

-----Decoded View---------------
Arg [0] : _owner (address): 0x338009D3b293E996302C77c3F1A4B9D27309b812

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000338009d3b293e996302c77c3f1a4b9d27309b812


Block Transaction Difficulty 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
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.