ETH Price: $2,071.05 (+6.62%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

ContractCreator

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Store At243899532026-02-05 10:12:1127 days ago1770286331IN
0x25CBB4e3...9CC6CE2De
0 ETH0.011371052.15749534
Add Chunk242777232026-01-20 18:16:1142 days ago1768932971IN
0x25CBB4e3...9CC6CE2De
0 ETH0.004495132.16865424
Add Chunk242777212026-01-20 18:15:4742 days ago1768932947IN
0x25CBB4e3...9CC6CE2De
0 ETH0.005814572.16545684
Add Chunk242777192026-01-20 18:15:2342 days ago1768932923IN
0x25CBB4e3...9CC6CE2De
0 ETH0.005818022.16673061
Add Chunk242777172026-01-20 18:14:5942 days ago1768932899IN
0x25CBB4e3...9CC6CE2De
0 ETH0.005828972.15735236
Init Chunked242777152026-01-20 18:14:3542 days ago1768932875IN
0x25CBB4e3...9CC6CE2De
0 ETH0.000114592.16406108
Add Chunk242777132026-01-20 18:14:1142 days ago1768932851IN
0x25CBB4e3...9CC6CE2De
0 ETH0.005235842.15716037
Add Chunk242777112026-01-20 18:13:4742 days ago1768932827IN
0x25CBB4e3...9CC6CE2De
0 ETH0.0058332.17209654
Add Chunk242777092026-01-20 18:13:2342 days ago1768932803IN
0x25CBB4e3...9CC6CE2De
0 ETH0.005862992.17013429
Init Chunked242777072026-01-20 18:12:5942 days ago1768932779IN
0x25CBB4e3...9CC6CE2De
0 ETH0.000008890.16794593
Add Chunk242777052026-01-20 18:12:3542 days ago1768932755IN
0x25CBB4e3...9CC6CE2De
0 ETH0.004220492.17588407
Add Chunk242777032026-01-20 18:12:1142 days ago1768932731IN
0x25CBB4e3...9CC6CE2De
0 ETH0.00585122.17905817
Add Chunk242777012026-01-20 18:11:4742 days ago1768932707IN
0x25CBB4e3...9CC6CE2De
0 ETH0.005881112.17678285
Init Chunked242776992026-01-20 18:11:2342 days ago1768932683IN
0x25CBB4e3...9CC6CE2De
0 ETH0.000065452.17639338
Init Chunked242776952026-01-20 18:10:3542 days ago1768932635IN
0x25CBB4e3...9CC6CE2De
0 ETH0.000115792.18681235
Add Chunk242776902026-01-20 18:09:3542 days ago1768932575IN
0x25CBB4e3...9CC6CE2De
0 ETH0.005266562.19400557
Add Chunk242776882026-01-20 18:09:1142 days ago1768932551IN
0x25CBB4e3...9CC6CE2De
0 ETH0.005876732.18849832
Add Chunk242776872026-01-20 18:08:5942 days ago1768932539IN
0x25CBB4e3...9CC6CE2De
0 ETH0.005937332.19762087
Init Chunked242776852026-01-20 18:08:3542 days ago1768932515IN
0x25CBB4e3...9CC6CE2De
0 ETH0.00001080.2039866
Add Chunk242776802026-01-20 18:07:3542 days ago1768932455IN
0x25CBB4e3...9CC6CE2De
0 ETH0.00049042.21495867
Add Chunk242776782026-01-20 18:07:1142 days ago1768932431IN
0x25CBB4e3...9CC6CE2De
0 ETH0.005945232.21397821
Add Chunk242776762026-01-20 18:06:4742 days ago1768932407IN
0x25CBB4e3...9CC6CE2De
0 ETH0.005963622.22084538
Add Chunk242776742026-01-20 18:06:2342 days ago1768932383IN
0x25CBB4e3...9CC6CE2De
0 ETH0.005965072.22160574
Add Chunk242776722026-01-20 18:05:5942 days ago1768932359IN
0x25CBB4e3...9CC6CE2De
0 ETH0.005993342.21836127
Init Chunked242776702026-01-20 18:05:3542 days ago1768932335IN
0x25CBB4e3...9CC6CE2De
0 ETH0.000116382.19797965
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
0x615d9580243899532026-02-05 10:12:1127 days ago1770286331
0x25CBB4e3...9CC6CE2De
 Contract Creation0 ETH
0x6123d780242777232026-01-20 18:16:1142 days ago1768932971
0x25CBB4e3...9CC6CE2De
 Contract Creation0 ETH
0x612ee180242777212026-01-20 18:15:4742 days ago1768932947
0x25CBB4e3...9CC6CE2De
 Contract Creation0 ETH
0x612ee180242777192026-01-20 18:15:2342 days ago1768932923
0x25CBB4e3...9CC6CE2De
 Contract Creation0 ETH
0x612ee180242777172026-01-20 18:14:5942 days ago1768932899
0x25CBB4e3...9CC6CE2De
 Contract Creation0 ETH
0x612a3b80242777132026-01-20 18:14:1142 days ago1768932851
0x25CBB4e3...9CC6CE2De
 Contract Creation0 ETH
0x612ee180242777112026-01-20 18:13:4742 days ago1768932827
0x25CBB4e3...9CC6CE2De
 Contract Creation0 ETH
0x612ee180242777092026-01-20 18:13:2342 days ago1768932803
0x25CBB4e3...9CC6CE2De
 Contract Creation0 ETH
0x61216f80242777052026-01-20 18:12:3542 days ago1768932755
0x25CBB4e3...9CC6CE2De
 Contract Creation0 ETH
0x612ee180242777032026-01-20 18:12:1142 days ago1768932731
0x25CBB4e3...9CC6CE2De
 Contract Creation0 ETH
0x612ee180242777012026-01-20 18:11:4742 days ago1768932707
0x25CBB4e3...9CC6CE2De
 Contract Creation0 ETH
0x6129bf80242776902026-01-20 18:09:3542 days ago1768932575
0x25CBB4e3...9CC6CE2De
 Contract Creation0 ETH
0x612ee180242776882026-01-20 18:09:1142 days ago1768932551
0x25CBB4e3...9CC6CE2De
 Contract Creation0 ETH
0x612ee180242776872026-01-20 18:08:5942 days ago1768932539
0x25CBB4e3...9CC6CE2De
 Contract Creation0 ETH
0x61026b80242776802026-01-20 18:07:3542 days ago1768932455
0x25CBB4e3...9CC6CE2De
 Contract Creation0 ETH
0x612ee180242776782026-01-20 18:07:1142 days ago1768932431
0x25CBB4e3...9CC6CE2De
 Contract Creation0 ETH
0x612ee180242776762026-01-20 18:06:4742 days ago1768932407
0x25CBB4e3...9CC6CE2De
 Contract Creation0 ETH
0x612ee180242776742026-01-20 18:06:2342 days ago1768932383
0x25CBB4e3...9CC6CE2De
 Contract Creation0 ETH
0x612ee180242776722026-01-20 18:05:5942 days ago1768932359
0x25CBB4e3...9CC6CE2De
 Contract Creation0 ETH
0x61105f80242776622026-01-20 18:03:5942 days ago1768932239
0x25CBB4e3...9CC6CE2De
 Contract Creation0 ETH
0x612ee180242776582026-01-20 18:03:1142 days ago1768932191
0x25CBB4e3...9CC6CE2De
 Contract Creation0 ETH
0x612ee180242776562026-01-20 18:02:4742 days ago1768932167
0x25CBB4e3...9CC6CE2De
 Contract Creation0 ETH
0x612ee180242776542026-01-20 18:02:2342 days ago1768932143
0x25CBB4e3...9CC6CE2De
 Contract Creation0 ETH
0x612ee180242776522026-01-20 18:01:5942 days ago1768932119
0x25CBB4e3...9CC6CE2De
 Contract Creation0 ETH
0x6112a180242776402026-01-20 17:59:3542 days ago1768931975
0x25CBB4e3...9CC6CE2De
 Contract Creation0 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ContentStore

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;

import "solady/auth/Ownable.sol";
import "solady/utils/SSTORE2.sol";

/// @title ContentStore
/// @notice Stores chunked content (images, game data) in contract bytecode
/// @dev Uses SSTORE2 for gas-efficient storage (~200 gas/byte vs 20000 gas/slot)
contract ContentStore is Ownable {

    /// @dev Location of stored data
    struct DataLoc {
        address pointer;
        uint48 start;
        uint48 end;
    }

    /// @dev Content entry with optional chunking
    struct Content {
        uint24 chunkCount;
        bytes32 contentType;  // e.g., keccak256("image/webp"), keccak256("application/javascript")
        mapping(uint256 => address) chunks;
    }

    mapping(uint256 => Content) internal contents;
    mapping(uint256 => DataLoc) internal locations;  // For single-pointer small content

    uint256 public nextId = 1;

    event ContentStored(uint256 indexed id, bytes32 contentType);
    event ChunkStored(uint256 indexed id, uint256 index);

    error ContentNotFound();
    error ChunkOutOfBounds();
    error EmptyData();

    constructor(address owner_) {
        _initializeOwner(owner_);
    }

    /// @notice Store small content in single transaction
    /// @param contentType Type identifier
    /// @param data Content bytes
    /// @return id Content ID
    function store(bytes32 contentType, bytes calldata data) external onlyOwner returns (uint256 id) {
        if (data.length == 0) revert EmptyData();

        id = nextId++;
        address pointer = SSTORE2.write(data);
        locations[id] = DataLoc(pointer, 0, uint48(data.length));
        contents[id].contentType = contentType;

        emit ContentStored(id, contentType);
    }

    /// @notice Store content at specific ID
    /// @param id Content ID
    /// @param contentType Type identifier
    /// @param data Content bytes
    function storeAt(uint256 id, bytes32 contentType, bytes calldata data) external onlyOwner {
        if (data.length == 0) revert EmptyData();

        if (id >= nextId) nextId = id + 1;

        address pointer = SSTORE2.write(data);
        locations[id] = DataLoc(pointer, 0, uint48(data.length));
        contents[id].contentType = contentType;

        emit ContentStored(id, contentType);
    }

    /// @notice Initialize chunked content
    /// @param id Content ID
    /// @param contentType Type identifier
    function initChunked(uint256 id, bytes32 contentType) external onlyOwner {
        if (id >= nextId) nextId = id + 1;
        contents[id].contentType = contentType;
        emit ContentStored(id, contentType);
    }

    /// @notice Add chunk to content
    /// @param id Content ID
    /// @param chunk Chunk data
    function addChunk(uint256 id, bytes calldata chunk) external onlyOwner {
        if (contents[id].contentType == bytes32(0)) revert ContentNotFound();
        if (chunk.length == 0) revert EmptyData();

        uint256 index = contents[id].chunkCount;
        contents[id].chunks[index] = SSTORE2.write(chunk);
        contents[id].chunkCount++;

        emit ChunkStored(id, index);
    }

    /// @notice Add multiple chunks
    /// @param id Content ID
    /// @param chunks Array of chunk data
    function addChunks(uint256 id, bytes[] calldata chunks) external onlyOwner {
        if (contents[id].contentType == bytes32(0)) revert ContentNotFound();

        uint256 startIndex = contents[id].chunkCount;
        for (uint256 i; i < chunks.length; ++i) {
            if (chunks[i].length == 0) revert EmptyData();
            contents[id].chunks[startIndex + i] = SSTORE2.write(chunks[i]);
            emit ChunkStored(id, startIndex + i);
        }
        contents[id].chunkCount += uint24(chunks.length);
    }

    /// @notice Batch store multiple small contents
    /// @param contentType Type identifier for all
    /// @param dataArray Array of content bytes
    /// @return startId First content ID
    function storeBatch(bytes32 contentType, bytes[] calldata dataArray) external onlyOwner returns (uint256 startId) {
        startId = nextId;

        for (uint256 i; i < dataArray.length; ++i) {
            if (dataArray[i].length == 0) revert EmptyData();
            uint256 id = nextId++;
            address pointer = SSTORE2.write(dataArray[i]);
            locations[id] = DataLoc(pointer, 0, uint48(dataArray[i].length));
            contents[id].contentType = contentType;
            emit ContentStored(id, contentType);
        }
    }

    /// @notice Get content bytes
    /// @param id Content ID
    /// @return Content as bytes
    function get(uint256 id) external view returns (bytes memory) {
        Content storage content = contents[id];
        if (content.contentType == bytes32(0)) revert ContentNotFound();

        // Single storage
        DataLoc memory loc = locations[id];
        if (loc.pointer != address(0)) {
            return SSTORE2.read(loc.pointer, loc.start, loc.end);
        }

        // Chunked storage
        bytes memory result;
        for (uint256 i; i < content.chunkCount; ++i) {
            result = bytes.concat(result, SSTORE2.read(content.chunks[i]));
        }
        return result;
    }

    /// @notice Get content as string
    /// @param id Content ID
    /// @return Content as string
    function getString(uint256 id) external view returns (string memory) {
        return string(this.get(id));
    }

    /// @notice Get single chunk
    /// @param id Content ID
    /// @param index Chunk index
    /// @return Chunk bytes
    function getChunk(uint256 id, uint256 index) external view returns (bytes memory) {
        Content storage content = contents[id];
        if (content.contentType == bytes32(0)) revert ContentNotFound();
        if (index >= content.chunkCount) revert ChunkOutOfBounds();
        return SSTORE2.read(content.chunks[index]);
    }

    /// @notice Get content info
    /// @param id Content ID
    /// @return contentType Content type
    /// @return chunkCount Number of chunks (0 if single storage)
    function getInfo(uint256 id) external view returns (bytes32 contentType, uint24 chunkCount) {
        Content storage content = contents[id];
        if (content.contentType == bytes32(0)) revert ContentNotFound();
        return (content.contentType, content.chunkCount);
    }

    /// @notice Check if content exists
    /// @param id Content ID
    /// @return True if exists
    function exists(uint256 id) external view returns (bool) {
        return contents[id].contentType != bytes32(0);
    }
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

/// @notice Read and write to persistent storage at a fraction of the cost.
/// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/SSTORE2.sol)
/// @author Saw-mon-and-Natalie (https://github.com/Saw-mon-and-Natalie)
/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/SSTORE2.sol)
/// @author Modified from 0xSequence (https://github.com/0xSequence/sstore2/blob/master/contracts/SSTORE2.sol)
/// @author Modified from SSTORE3 (https://github.com/Philogy/sstore3)
library SSTORE2 {
    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                         CONSTANTS                          */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The proxy initialization code.
    uint256 private constant _CREATE3_PROXY_INITCODE = 0x67363d3d37363d34f03d5260086018f3;

    /// @dev Hash of the `_CREATE3_PROXY_INITCODE`.
    /// Equivalent to `keccak256(abi.encodePacked(hex"67363d3d37363d34f03d5260086018f3"))`.
    bytes32 internal constant CREATE3_PROXY_INITCODE_HASH =
        0x21c35dbe1b344a2488cf3321d6ce542f8e9f305544ff09e4993a62319a497c1f;

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                        CUSTOM ERRORS                       */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Unable to deploy the storage contract.
    error DeploymentFailed();

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                         WRITE LOGIC                        */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Writes `data` into the bytecode of a storage contract and returns its address.
    function write(bytes memory data) internal returns (address pointer) {
        /// @solidity memory-safe-assembly
        assembly {
            let n := mload(data) // Let `l` be `n + 1`. +1 as we prefix a STOP opcode.
            /**
             * ---------------------------------------------------+
             * Opcode | Mnemonic       | Stack     | Memory       |
             * ---------------------------------------------------|
             * 61 l   | PUSH2 l        | l         |              |
             * 80     | DUP1           | l l       |              |
             * 60 0xa | PUSH1 0xa      | 0xa l l   |              |
             * 3D     | RETURNDATASIZE | 0 0xa l l |              |
             * 39     | CODECOPY       | l         | [0..l): code |
             * 3D     | RETURNDATASIZE | 0 l       | [0..l): code |
             * F3     | RETURN         |           | [0..l): code |
             * 00     | STOP           |           |              |
             * ---------------------------------------------------+
             * @dev Prefix the bytecode with a STOP opcode to ensure it cannot be called.
             * Also PUSH2 is used since max contract size cap is 24,576 bytes which is less than 2 ** 16.
             */
            // Do a out-of-gas revert if `n + 1` is more than 2 bytes.
            mstore(add(data, gt(n, 0xfffe)), add(0xfe61000180600a3d393df300, shl(0x40, n)))
            // Deploy a new contract with the generated creation code.
            pointer := create(0, add(data, 0x15), add(n, 0xb))
            if iszero(pointer) {
                mstore(0x00, 0x30116425) // `DeploymentFailed()`.
                revert(0x1c, 0x04)
            }
            mstore(data, n) // Restore the length of `data`.
        }
    }

    /// @dev Writes `data` into the bytecode of a storage contract with `salt`
    /// and returns its normal CREATE2 deterministic address.
    function writeCounterfactual(bytes memory data, bytes32 salt)
        internal
        returns (address pointer)
    {
        /// @solidity memory-safe-assembly
        assembly {
            let n := mload(data)
            // Do a out-of-gas revert if `n + 1` is more than 2 bytes.
            mstore(add(data, gt(n, 0xfffe)), add(0xfe61000180600a3d393df300, shl(0x40, n)))
            // Deploy a new contract with the generated creation code.
            pointer := create2(0, add(data, 0x15), add(n, 0xb), salt)
            if iszero(pointer) {
                mstore(0x00, 0x30116425) // `DeploymentFailed()`.
                revert(0x1c, 0x04)
            }
            mstore(data, n) // Restore the length of `data`.
        }
    }

    /// @dev Writes `data` into the bytecode of a storage contract and returns its address.
    /// This uses the so-called "CREATE3" workflow,
    /// which means that `pointer` is agnostic to `data, and only depends on `salt`.
    function writeDeterministic(bytes memory data, bytes32 salt)
        internal
        returns (address pointer)
    {
        /// @solidity memory-safe-assembly
        assembly {
            let n := mload(data)
            mstore(0x00, _CREATE3_PROXY_INITCODE) // Store the `_PROXY_INITCODE`.
            let proxy := create2(0, 0x10, 0x10, salt)
            if iszero(proxy) {
                mstore(0x00, 0x30116425) // `DeploymentFailed()`.
                revert(0x1c, 0x04)
            }
            mstore(0x14, proxy) // Store the proxy's address.
            // 0xd6 = 0xc0 (short RLP prefix) + 0x16 (length of: 0x94 ++ proxy ++ 0x01).
            // 0x94 = 0x80 + 0x14 (0x14 = the length of an address, 20 bytes, in hex).
            mstore(0x00, 0xd694)
            mstore8(0x34, 0x01) // Nonce of the proxy contract (1).
            pointer := keccak256(0x1e, 0x17)

            // Do a out-of-gas revert if `n + 1` is more than 2 bytes.
            mstore(add(data, gt(n, 0xfffe)), add(0xfe61000180600a3d393df300, shl(0x40, n)))
            if iszero(
                mul( // The arguments of `mul` are evaluated last to first.
                    extcodesize(pointer),
                    call(gas(), proxy, 0, add(data, 0x15), add(n, 0xb), codesize(), 0x00)
                )
            ) {
                mstore(0x00, 0x30116425) // `DeploymentFailed()`.
                revert(0x1c, 0x04)
            }
            mstore(data, n) // Restore the length of `data`.
        }
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                    ADDRESS CALCULATIONS                    */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Returns the initialization code hash of the storage contract for `data`.
    /// Used for mining vanity addresses with create2crunch.
    function initCodeHash(bytes memory data) internal pure returns (bytes32 hash) {
        /// @solidity memory-safe-assembly
        assembly {
            let n := mload(data)
            // Do a out-of-gas revert if `n + 1` is more than 2 bytes.
            returndatacopy(returndatasize(), returndatasize(), gt(n, 0xfffe))
            mstore(data, add(0x61000180600a3d393df300, shl(0x40, n)))
            hash := keccak256(add(data, 0x15), add(n, 0xb))
            mstore(data, n) // Restore the length of `data`.
        }
    }

    /// @dev Equivalent to `predictCounterfactualAddress(data, salt, address(this))`
    function predictCounterfactualAddress(bytes memory data, bytes32 salt)
        internal
        view
        returns (address pointer)
    {
        pointer = predictCounterfactualAddress(data, salt, address(this));
    }

    /// @dev Returns the CREATE2 address of the storage contract for `data`
    /// deployed with `salt` by `deployer`.
    /// Note: The returned result has dirty upper 96 bits. Please clean if used in assembly.
    function predictCounterfactualAddress(bytes memory data, bytes32 salt, address deployer)
        internal
        pure
        returns (address predicted)
    {
        bytes32 hash = initCodeHash(data);
        /// @solidity memory-safe-assembly
        assembly {
            // Compute and store the bytecode hash.
            mstore8(0x00, 0xff) // Write the prefix.
            mstore(0x35, hash)
            mstore(0x01, shl(96, deployer))
            mstore(0x15, salt)
            predicted := keccak256(0x00, 0x55)
            // Restore the part of the free memory pointer that has been overwritten.
            mstore(0x35, 0)
        }
    }

    /// @dev Equivalent to `predictDeterministicAddress(salt, address(this))`.
    function predictDeterministicAddress(bytes32 salt) internal view returns (address pointer) {
        pointer = predictDeterministicAddress(salt, address(this));
    }

    /// @dev Returns the "CREATE3" deterministic address for `salt` with `deployer`.
    function predictDeterministicAddress(bytes32 salt, address deployer)
        internal
        pure
        returns (address pointer)
    {
        /// @solidity memory-safe-assembly
        assembly {
            let m := mload(0x40) // Cache the free memory pointer.
            mstore(0x00, deployer) // Store `deployer`.
            mstore8(0x0b, 0xff) // Store the prefix.
            mstore(0x20, salt) // Store the salt.
            mstore(0x40, CREATE3_PROXY_INITCODE_HASH) // Store the bytecode hash.

            mstore(0x14, keccak256(0x0b, 0x55)) // Store the proxy's address.
            mstore(0x40, m) // Restore the free memory pointer.
            // 0xd6 = 0xc0 (short RLP prefix) + 0x16 (length of: 0x94 ++ proxy ++ 0x01).
            // 0x94 = 0x80 + 0x14 (0x14 = the length of an address, 20 bytes, in hex).
            mstore(0x00, 0xd694)
            mstore8(0x34, 0x01) // Nonce of the proxy contract (1).
            pointer := keccak256(0x1e, 0x17)
        }
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                         READ LOGIC                         */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Equivalent to `read(pointer, 0, 2 ** 256 - 1)`.
    function read(address pointer) internal view returns (bytes memory data) {
        /// @solidity memory-safe-assembly
        assembly {
            data := mload(0x40)
            let n := and(0xffffffffff, sub(extcodesize(pointer), 0x01))
            extcodecopy(pointer, add(data, 0x1f), 0x00, add(n, 0x21))
            mstore(data, n) // Store the length.
            mstore(0x40, add(n, add(data, 0x40))) // Allocate memory.
        }
    }

    /// @dev Equivalent to `read(pointer, start, 2 ** 256 - 1)`.
    function read(address pointer, uint256 start) internal view returns (bytes memory data) {
        /// @solidity memory-safe-assembly
        assembly {
            data := mload(0x40)
            let n := and(0xffffffffff, sub(extcodesize(pointer), 0x01))
            let l := sub(n, and(0xffffff, mul(lt(start, n), start)))
            extcodecopy(pointer, add(data, 0x1f), start, add(l, 0x21))
            mstore(data, mul(sub(n, start), lt(start, n))) // Store the length.
            mstore(0x40, add(data, add(0x40, mload(data)))) // Allocate memory.
        }
    }

    /// @dev Returns a slice of the data on `pointer` from `start` to `end`.
    /// `start` and `end` will be clamped to the range `[0, args.length]`.
    /// The `pointer` MUST be deployed via the SSTORE2 write functions.
    /// Otherwise, the behavior is undefined.
    /// Out-of-gas reverts if `pointer` does not have any code.
    function read(address pointer, uint256 start, uint256 end)
        internal
        view
        returns (bytes memory data)
    {
        /// @solidity memory-safe-assembly
        assembly {
            data := mload(0x40)
            if iszero(lt(end, 0xffff)) { end := 0xffff }
            let d := mul(sub(end, start), lt(start, end))
            extcodecopy(pointer, add(data, 0x1f), start, add(d, 0x01))
            if iszero(and(0xff, mload(add(data, d)))) {
                let n := sub(extcodesize(pointer), 0x01)
                returndatacopy(returndatasize(), returndatasize(), shr(40, n))
                d := mul(gt(n, start), sub(d, mul(gt(end, n), sub(end, n))))
            }
            mstore(data, d) // Store the length.
            mstore(add(add(data, 0x20), d), 0) // Zeroize the slot after the bytes.
            mstore(0x40, add(add(data, 0x40), d)) // Allocate memory.
        }
    }
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

/// @notice Simple single owner authorization mixin.
/// @author Solady (https://github.com/vectorized/solady/blob/main/src/auth/Ownable.sol)
///
/// @dev Note:
/// This implementation does NOT auto-initialize the owner to `msg.sender`.
/// You MUST call the `_initializeOwner` in the constructor / initializer.
///
/// While the ownable portion follows
/// [EIP-173](https://eips.ethereum.org/EIPS/eip-173) for compatibility,
/// the nomenclature for the 2-step ownership handover may be unique to this codebase.
abstract contract Ownable {
    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                       CUSTOM ERRORS                        */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The caller is not authorized to call the function.
    error Unauthorized();

    /// @dev The `newOwner` cannot be the zero address.
    error NewOwnerIsZeroAddress();

    /// @dev The `pendingOwner` does not have a valid handover request.
    error NoHandoverRequest();

    /// @dev Cannot double-initialize.
    error AlreadyInitialized();

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                           EVENTS                           */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The ownership is transferred from `oldOwner` to `newOwner`.
    /// This event is intentionally kept the same as OpenZeppelin's Ownable to be
    /// compatible with indexers and [EIP-173](https://eips.ethereum.org/EIPS/eip-173),
    /// despite it not being as lightweight as a single argument event.
    event OwnershipTransferred(address indexed oldOwner, address indexed newOwner);

    /// @dev An ownership handover to `pendingOwner` has been requested.
    event OwnershipHandoverRequested(address indexed pendingOwner);

    /// @dev The ownership handover to `pendingOwner` has been canceled.
    event OwnershipHandoverCanceled(address indexed pendingOwner);

    /// @dev `keccak256(bytes("OwnershipTransferred(address,address)"))`.
    uint256 private constant _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE =
        0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0;

    /// @dev `keccak256(bytes("OwnershipHandoverRequested(address)"))`.
    uint256 private constant _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE =
        0xdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d;

    /// @dev `keccak256(bytes("OwnershipHandoverCanceled(address)"))`.
    uint256 private constant _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE =
        0xfa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92;

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                          STORAGE                           */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The owner slot is given by:
    /// `bytes32(~uint256(uint32(bytes4(keccak256("_OWNER_SLOT_NOT")))))`.
    /// It is intentionally chosen to be a high value
    /// to avoid collision with lower slots.
    /// The choice of manual storage layout is to enable compatibility
    /// with both regular and upgradeable contracts.
    bytes32 internal constant _OWNER_SLOT =
        0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927;

    /// The ownership handover slot of `newOwner` is given by:
    /// ```
    ///     mstore(0x00, or(shl(96, user), _HANDOVER_SLOT_SEED))
    ///     let handoverSlot := keccak256(0x00, 0x20)
    /// ```
    /// It stores the expiry timestamp of the two-step ownership handover.
    uint256 private constant _HANDOVER_SLOT_SEED = 0x389a75e1;

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                     INTERNAL FUNCTIONS                     */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Override to return true to make `_initializeOwner` prevent double-initialization.
    function _guardInitializeOwner() internal pure virtual returns (bool guard) {}

    /// @dev Initializes the owner directly without authorization guard.
    /// This function must be called upon initialization,
    /// regardless of whether the contract is upgradeable or not.
    /// This is to enable generalization to both regular and upgradeable contracts,
    /// and to save gas in case the initial owner is not the caller.
    /// For performance reasons, this function will not check if there
    /// is an existing owner.
    function _initializeOwner(address newOwner) internal virtual {
        if (_guardInitializeOwner()) {
            /// @solidity memory-safe-assembly
            assembly {
                let ownerSlot := _OWNER_SLOT
                if sload(ownerSlot) {
                    mstore(0x00, 0x0dc149f0) // `AlreadyInitialized()`.
                    revert(0x1c, 0x04)
                }
                // Clean the upper 96 bits.
                newOwner := shr(96, shl(96, newOwner))
                // Store the new value.
                sstore(ownerSlot, or(newOwner, shl(255, iszero(newOwner))))
                // Emit the {OwnershipTransferred} event.
                log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, 0, newOwner)
            }
        } else {
            /// @solidity memory-safe-assembly
            assembly {
                // Clean the upper 96 bits.
                newOwner := shr(96, shl(96, newOwner))
                // Store the new value.
                sstore(_OWNER_SLOT, newOwner)
                // Emit the {OwnershipTransferred} event.
                log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, 0, newOwner)
            }
        }
    }

    /// @dev Sets the owner directly without authorization guard.
    function _setOwner(address newOwner) internal virtual {
        if (_guardInitializeOwner()) {
            /// @solidity memory-safe-assembly
            assembly {
                let ownerSlot := _OWNER_SLOT
                // Clean the upper 96 bits.
                newOwner := shr(96, shl(96, newOwner))
                // Emit the {OwnershipTransferred} event.
                log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, sload(ownerSlot), newOwner)
                // Store the new value.
                sstore(ownerSlot, or(newOwner, shl(255, iszero(newOwner))))
            }
        } else {
            /// @solidity memory-safe-assembly
            assembly {
                let ownerSlot := _OWNER_SLOT
                // Clean the upper 96 bits.
                newOwner := shr(96, shl(96, newOwner))
                // Emit the {OwnershipTransferred} event.
                log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, sload(ownerSlot), newOwner)
                // Store the new value.
                sstore(ownerSlot, newOwner)
            }
        }
    }

    /// @dev Throws if the sender is not the owner.
    function _checkOwner() internal view virtual {
        /// @solidity memory-safe-assembly
        assembly {
            // If the caller is not the stored owner, revert.
            if iszero(eq(caller(), sload(_OWNER_SLOT))) {
                mstore(0x00, 0x82b42900) // `Unauthorized()`.
                revert(0x1c, 0x04)
            }
        }
    }

    /// @dev Returns how long a two-step ownership handover is valid for in seconds.
    /// Override to return a different value if needed.
    /// Made internal to conserve bytecode. Wrap it in a public function if needed.
    function _ownershipHandoverValidFor() internal view virtual returns (uint64) {
        return 48 * 3600;
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                  PUBLIC UPDATE FUNCTIONS                   */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Allows the owner to transfer the ownership to `newOwner`.
    function transferOwnership(address newOwner) public payable virtual onlyOwner {
        /// @solidity memory-safe-assembly
        assembly {
            if iszero(shl(96, newOwner)) {
                mstore(0x00, 0x7448fbae) // `NewOwnerIsZeroAddress()`.
                revert(0x1c, 0x04)
            }
        }
        _setOwner(newOwner);
    }

    /// @dev Allows the owner to renounce their ownership.
    function renounceOwnership() public payable virtual onlyOwner {
        _setOwner(address(0));
    }

    /// @dev Request a two-step ownership handover to the caller.
    /// The request will automatically expire in 48 hours (172800 seconds) by default.
    function requestOwnershipHandover() public payable virtual {
        unchecked {
            uint256 expires = block.timestamp + _ownershipHandoverValidFor();
            /// @solidity memory-safe-assembly
            assembly {
                // Compute and set the handover slot to `expires`.
                mstore(0x0c, _HANDOVER_SLOT_SEED)
                mstore(0x00, caller())
                sstore(keccak256(0x0c, 0x20), expires)
                // Emit the {OwnershipHandoverRequested} event.
                log2(0, 0, _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE, caller())
            }
        }
    }

    /// @dev Cancels the two-step ownership handover to the caller, if any.
    function cancelOwnershipHandover() public payable virtual {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute and set the handover slot to 0.
            mstore(0x0c, _HANDOVER_SLOT_SEED)
            mstore(0x00, caller())
            sstore(keccak256(0x0c, 0x20), 0)
            // Emit the {OwnershipHandoverCanceled} event.
            log2(0, 0, _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE, caller())
        }
    }

    /// @dev Allows the owner to complete the two-step ownership handover to `pendingOwner`.
    /// Reverts if there is no existing ownership handover requested by `pendingOwner`.
    function completeOwnershipHandover(address pendingOwner) public payable virtual onlyOwner {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute and set the handover slot to 0.
            mstore(0x0c, _HANDOVER_SLOT_SEED)
            mstore(0x00, pendingOwner)
            let handoverSlot := keccak256(0x0c, 0x20)
            // If the handover does not exist, or has expired.
            if gt(timestamp(), sload(handoverSlot)) {
                mstore(0x00, 0x6f5e8818) // `NoHandoverRequest()`.
                revert(0x1c, 0x04)
            }
            // Set the handover slot to 0.
            sstore(handoverSlot, 0)
        }
        _setOwner(pendingOwner);
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                   PUBLIC READ FUNCTIONS                    */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Returns the owner of the contract.
    function owner() public view virtual returns (address result) {
        /// @solidity memory-safe-assembly
        assembly {
            result := sload(_OWNER_SLOT)
        }
    }

    /// @dev Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`.
    function ownershipHandoverExpiresAt(address pendingOwner)
        public
        view
        virtual
        returns (uint256 result)
    {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute the handover slot.
            mstore(0x0c, _HANDOVER_SLOT_SEED)
            mstore(0x00, pendingOwner)
            // Load the handover slot.
            result := sload(keccak256(0x0c, 0x20))
        }
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                         MODIFIERS                          */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Marks a function as only callable by the owner.
    modifier onlyOwner() virtual {
        _checkOwner();
        _;
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "remappings": [
    "solady/=https://raw.githubusercontent.com/Vectorized/solady/main/src/"
  ]
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"owner_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyInitialized","type":"error"},{"inputs":[],"name":"ChunkOutOfBounds","type":"error"},{"inputs":[],"name":"ContentNotFound","type":"error"},{"inputs":[],"name":"EmptyData","type":"error"},{"inputs":[],"name":"NewOwnerIsZeroAddress","type":"error"},{"inputs":[],"name":"NoHandoverRequest","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"ChunkStored","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"contentType","type":"bytes32"}],"name":"ContentStored","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pendingOwner","type":"address"}],"name":"OwnershipHandoverCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pendingOwner","type":"address"}],"name":"OwnershipHandoverRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"chunk","type":"bytes"}],"name":"addChunk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes[]","name":"chunks","type":"bytes[]"}],"name":"addChunks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cancelOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pendingOwner","type":"address"}],"name":"completeOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"get","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getChunk","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getInfo","outputs":[{"internalType":"bytes32","name":"contentType","type":"bytes32"},{"internalType":"uint24","name":"chunkCount","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes32","name":"contentType","type":"bytes32"}],"name":"initChunked","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nextId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"result","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pendingOwner","type":"address"}],"name":"ownershipHandoverExpiresAt","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"requestOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"contentType","type":"bytes32"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"store","outputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes32","name":"contentType","type":"bytes32"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"storeAt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"contentType","type":"bytes32"},{"internalType":"bytes[]","name":"dataArray","type":"bytes[]"}],"name":"storeBatch","outputs":[{"internalType":"uint256","name":"startId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"payable","type":"function"}]

608060405260016002553480156013575f5ffd5b5060405161140b38038061140b8339810160408190526030916077565b603781603c565b5060a2565b6001600160a01b0316638b78c6d819819055805f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b5f602082840312156086575f5ffd5b81516001600160a01b0381168114609b575f5ffd5b9392505050565b61135c806100af5f395ff3fe608060405260043610610110575f3560e01c806379627fa11161009d578063b7c763b511610062578063b7c763b5146102df578063cf6dc0fa146102fe578063f04e283e1461031d578063f2fde38b14610330578063fee81cf414610343575f5ffd5b806379627fa11461022b5780638da5cb5b1461024a5780639507d39a146102755780639a8c17dd146102a1578063ad88b6e4146102c0575f5ffd5b8063294bd5ce116100e3578063294bd5ce146101a75780634f558e79146101c657806354d1f13d1461020657806361b8ce8c1461020e578063715018a614610223575f5ffd5b80630f11e5471461011457806316d5002a146101355780631a3cd59a14610167578063256929621461019f575b5f5ffd5b34801561011f575f5ffd5b5061013361012e366004610f8d565b610374565b005b348015610140575f5ffd5b5061015461014f366004610f8d565b61053e565b6040519081526020015b60405180910390f35b348015610172575f5ffd5b50610186610181366004610fd5565b6106b1565b6040805192835262ffffff90911660208301520161015e565b6101336106fa565b3480156101b2575f5ffd5b506101546101c136600461102a565b610747565b3480156101d1575f5ffd5b506101f66101e0366004610fd5565b5f90815260208190526040902060010154151590565b604051901515815260200161015e565b61013361087e565b348015610219575f5ffd5b5061015460025481565b6101336108b7565b348015610236575f5ffd5b5061013361024536600461102a565b6108ca565b348015610255575f5ffd5b50638b78c6d819546040516001600160a01b03909116815260200161015e565b348015610280575f5ffd5b5061029461028f366004610fd5565b610a1d565b60405161015e9190611093565b3480156102ac575f5ffd5b506101336102bb3660046110ac565b610b3e565b3480156102cb575f5ffd5b506102946102da3660046110ac565b610b96565b3480156102ea575f5ffd5b506102946102f9366004610fd5565b610c1b565b348015610309575f5ffd5b506101336103183660046110cc565b610c7e565b61013361032b36600461111b565b610db6565b61013361033e36600461111b565b610df3565b34801561034e575f5ffd5b5061015461035d36600461111b565b63389a75e1600c9081525f91909152602090205490565b61037c610e19565b5f838152602081905260409020600101546103aa576040516315f2470160e31b815260040160405180910390fd5b5f8381526020819052604081205462ffffff16905b828110156104f9578383828181106103d9576103d9611141565b90506020028101906103eb9190611155565b90505f0361040c576040516399d8fec960e01b815260040160405180910390fd5b61046c84848381811061042157610421611141565b90506020028101906104339190611155565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610e3392505050565b5f8681526020819052604081206002019061048784866111ac565b815260208101919091526040015f2080546001600160a01b0319166001600160a01b0392909216919091179055847faa65dca3f562832c0ba4bbde8d03d3d978faaf4da00e3d88cc93ad26d927096d6104e083856111ac565b60405190815260200160405180910390a26001016103bf565b505f848152602081905260408120805484929061051c90849062ffffff166111bf565b92506101000a81548162ffffff021916908362ffffff16021790555050505050565b5f610547610e19565b506002545f5b828110156106a95783838281811061056757610567611141565b90506020028101906105799190611155565b90505f0361059a576040516399d8fec960e01b815260040160405180910390fd5b600280545f91826105aa836111da565b9190505590505f6105c686868581811061042157610421611141565b604080516060810182526001600160a01b03831681525f602082015291925081018787868181106105f9576105f9611141565b905060200281019061060b9190611155565b65ffffffffffff908116909252505f8481526001602081815260408084208651815488850151988401518816600160d01b026001600160d01b0399909816600160a01b026001600160d01b03199091166001600160a01b039092169190911717969096169490941790945581845290829020018990555188815283915f5160206113075f395f51905f52910160405180910390a2505060010161054d565b509392505050565b5f81815260208190526040812060018101548291906106e3576040516315f2470160e31b815260040160405180910390fd5b60018101549054909462ffffff9091169350915050565b5f6202a30067ffffffffffffffff164201905063389a75e1600c52335f52806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f5fa250565b5f610750610e19565b5f829003610771576040516399d8fec960e01b815260040160405180910390fd5b60028054905f610780836111da565b9190505590505f6107c584848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610e3392505050565b604080516060810182526001600160a01b0380841682525f602080840182815265ffffffffffff8a81168688019081528a8552600180855288862097518854945192518416600160d01b026001600160d01b0393909416600160a01b026001600160d01b03199095169716969096179290921791909116179093559182905290829020018790555190915082905f5160206113075f395f51905f529061086e9088815260200190565b60405180910390a2509392505050565b63389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f5fa2565b6108bf610e19565b6108c85f610e74565b565b6108d2610e19565b5f83815260208190526040902060010154610900576040516315f2470160e31b815260040160405180910390fd5b5f819003610921576040516399d8fec960e01b815260040160405180910390fd5b5f8381526020818152604091829020548251601f850183900483028101830190935283835262ffffff169161096f9185908590819084018382808284375f92019190915250610e3392505050565b5f8581526020818152604080832085845260028101835290832080546001600160a01b0319166001600160a01b039590951694909417909355868252819052815462ffffff1691906109c0836111f2565b91906101000a81548162ffffff021916908362ffffff16021790555050837faa65dca3f562832c0ba4bbde8d03d3d978faaf4da00e3d88cc93ad26d927096d82604051610a0f91815260200190565b60405180910390a250505050565b5f818152602081905260409020600181015460609190610a50576040516315f2470160e31b815260040160405180910390fd5b5f83815260016020908152604091829020825160608101845290546001600160a01b03811680835265ffffffffffff600160a01b8304811694840194909452600160d01b9091049092169281019290925215610ad457610acc815f0151826020015165ffffffffffff16836040015165ffffffffffff16610eb1565b949350505050565b60605f5b835462ffffff16811015610b35575f8181526002850160205260409020548290610b0a906001600160a01b0316610f19565b604051602001610b1b92919061122b565b60408051601f198184030181529190529150600101610ad8565b50949350505050565b610b46610e19565b6002548210610b5e57610b5a8260016111ac565b6002555b5f8281526020818152604091829020600101839055905182815283915f5160206113075f395f51905f52910160405180910390a25050565b5f828152602081905260409020600181015460609190610bc9576040516315f2470160e31b815260040160405180910390fd5b805462ffffff168310610bef576040516376fb3d3160e11b815260040160405180910390fd5b5f838152600282016020526040902054610c11906001600160a01b0316610f19565b9150505b92915050565b604051634a83e9cd60e11b8152600481018290526060903090639507d39a906024015f60405180830381865afa158015610c57573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c159190810190611253565b610c86610e19565b5f819003610ca7576040516399d8fec960e01b815260040160405180910390fd5b6002548410610cbf57610cbb8460016111ac565b6002555b5f610cfe83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610e3392505050565b604080516060810182526001600160a01b0380841682525f602080840182815265ffffffffffff8981168688019081528d8552600180855288862097518854945192518416600160d01b026001600160d01b0393909416600160a01b026001600160d01b03199095169716969096179290921791909116179093559182905290829020018690555190915085905f5160206113075f395f51905f5290610da79087815260200190565b60405180910390a25050505050565b610dbe610e19565b63389a75e1600c52805f526020600c208054421115610de457636f5e88185f526004601cfd5b5f9055610df081610e74565b50565b610dfb610e19565b8060601b610e1057637448fbae5f526004601cfd5b610df081610e74565b638b78c6d8195433146108c8576382b429005f526004601cfd5b5f81518060401b6bfe61000180600a3d393df3000161fffe8211840152600b8101601584015ff0915081610e6e5763301164255f526004601cfd5b90915290565b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a355565b60405161ffff8210610ec35761ffff91505b818310838303026001810184601f8401873c8082015160ff16610efd576001853b038060281c3d3d3e808403818511028203858211029150505b8082525f81602084010152806040830101604052509392505050565b60405164ffffffffff5f19833b0116602181015f601f8401853c80825260408201810160405250919050565b5f5f83601f840112610f55575f5ffd5b50813567ffffffffffffffff811115610f6c575f5ffd5b6020830191508360208260051b8501011115610f86575f5ffd5b9250929050565b5f5f5f60408486031215610f9f575f5ffd5b83359250602084013567ffffffffffffffff811115610fbc575f5ffd5b610fc886828701610f45565b9497909650939450505050565b5f60208284031215610fe5575f5ffd5b5035919050565b5f5f83601f840112610ffc575f5ffd5b50813567ffffffffffffffff811115611013575f5ffd5b602083019150836020828501011115610f86575f5ffd5b5f5f5f6040848603121561103c575f5ffd5b83359250602084013567ffffffffffffffff811115611059575f5ffd5b610fc886828701610fec565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6110a56020830184611065565b9392505050565b5f5f604083850312156110bd575f5ffd5b50508035926020909101359150565b5f5f5f5f606085870312156110df575f5ffd5b8435935060208501359250604085013567ffffffffffffffff811115611103575f5ffd5b61110f87828801610fec565b95989497509550505050565b5f6020828403121561112b575f5ffd5b81356001600160a01b03811681146110a5575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f5f8335601e1984360301811261116a575f5ffd5b83018035915067ffffffffffffffff821115611184575f5ffd5b602001915036819003821315610f86575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115610c1557610c15611198565b62ffffff8181168382160190811115610c1557610c15611198565b5f600182016111eb576111eb611198565b5060010190565b5f62ffffff821662ffffff810361120b5761120b611198565b60010192915050565b5f81518060208401855e5f93019283525090919050565b5f610acc6112398386611214565b84611214565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215611263575f5ffd5b815167ffffffffffffffff811115611279575f5ffd5b8201601f81018413611289575f5ffd5b805167ffffffffffffffff8111156112a3576112a361123f565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156112d2576112d261123f565b6040528181528282016020018610156112e9575f5ffd5b8160208401602083015e5f9181016020019190915294935050505056fef0d86e4da46a3c60e2dc0f8453bea09697e36bbb29e5a5fb05404b14387c7c2ea264697066735822122001ce30d100ea93568ded9489354569ab46461c3c38e084ad5eeea9fa21cdf94c64736f6c634300081c0033000000000000000000000000d7dd9612a21f7c249fb7f33e9c2e9144345e162b

Deployed Bytecode

0x608060405260043610610110575f3560e01c806379627fa11161009d578063b7c763b511610062578063b7c763b5146102df578063cf6dc0fa146102fe578063f04e283e1461031d578063f2fde38b14610330578063fee81cf414610343575f5ffd5b806379627fa11461022b5780638da5cb5b1461024a5780639507d39a146102755780639a8c17dd146102a1578063ad88b6e4146102c0575f5ffd5b8063294bd5ce116100e3578063294bd5ce146101a75780634f558e79146101c657806354d1f13d1461020657806361b8ce8c1461020e578063715018a614610223575f5ffd5b80630f11e5471461011457806316d5002a146101355780631a3cd59a14610167578063256929621461019f575b5f5ffd5b34801561011f575f5ffd5b5061013361012e366004610f8d565b610374565b005b348015610140575f5ffd5b5061015461014f366004610f8d565b61053e565b6040519081526020015b60405180910390f35b348015610172575f5ffd5b50610186610181366004610fd5565b6106b1565b6040805192835262ffffff90911660208301520161015e565b6101336106fa565b3480156101b2575f5ffd5b506101546101c136600461102a565b610747565b3480156101d1575f5ffd5b506101f66101e0366004610fd5565b5f90815260208190526040902060010154151590565b604051901515815260200161015e565b61013361087e565b348015610219575f5ffd5b5061015460025481565b6101336108b7565b348015610236575f5ffd5b5061013361024536600461102a565b6108ca565b348015610255575f5ffd5b50638b78c6d819546040516001600160a01b03909116815260200161015e565b348015610280575f5ffd5b5061029461028f366004610fd5565b610a1d565b60405161015e9190611093565b3480156102ac575f5ffd5b506101336102bb3660046110ac565b610b3e565b3480156102cb575f5ffd5b506102946102da3660046110ac565b610b96565b3480156102ea575f5ffd5b506102946102f9366004610fd5565b610c1b565b348015610309575f5ffd5b506101336103183660046110cc565b610c7e565b61013361032b36600461111b565b610db6565b61013361033e36600461111b565b610df3565b34801561034e575f5ffd5b5061015461035d36600461111b565b63389a75e1600c9081525f91909152602090205490565b61037c610e19565b5f838152602081905260409020600101546103aa576040516315f2470160e31b815260040160405180910390fd5b5f8381526020819052604081205462ffffff16905b828110156104f9578383828181106103d9576103d9611141565b90506020028101906103eb9190611155565b90505f0361040c576040516399d8fec960e01b815260040160405180910390fd5b61046c84848381811061042157610421611141565b90506020028101906104339190611155565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610e3392505050565b5f8681526020819052604081206002019061048784866111ac565b815260208101919091526040015f2080546001600160a01b0319166001600160a01b0392909216919091179055847faa65dca3f562832c0ba4bbde8d03d3d978faaf4da00e3d88cc93ad26d927096d6104e083856111ac565b60405190815260200160405180910390a26001016103bf565b505f848152602081905260408120805484929061051c90849062ffffff166111bf565b92506101000a81548162ffffff021916908362ffffff16021790555050505050565b5f610547610e19565b506002545f5b828110156106a95783838281811061056757610567611141565b90506020028101906105799190611155565b90505f0361059a576040516399d8fec960e01b815260040160405180910390fd5b600280545f91826105aa836111da565b9190505590505f6105c686868581811061042157610421611141565b604080516060810182526001600160a01b03831681525f602082015291925081018787868181106105f9576105f9611141565b905060200281019061060b9190611155565b65ffffffffffff908116909252505f8481526001602081815260408084208651815488850151988401518816600160d01b026001600160d01b0399909816600160a01b026001600160d01b03199091166001600160a01b039092169190911717969096169490941790945581845290829020018990555188815283915f5160206113075f395f51905f52910160405180910390a2505060010161054d565b509392505050565b5f81815260208190526040812060018101548291906106e3576040516315f2470160e31b815260040160405180910390fd5b60018101549054909462ffffff9091169350915050565b5f6202a30067ffffffffffffffff164201905063389a75e1600c52335f52806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f5fa250565b5f610750610e19565b5f829003610771576040516399d8fec960e01b815260040160405180910390fd5b60028054905f610780836111da565b9190505590505f6107c584848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610e3392505050565b604080516060810182526001600160a01b0380841682525f602080840182815265ffffffffffff8a81168688019081528a8552600180855288862097518854945192518416600160d01b026001600160d01b0393909416600160a01b026001600160d01b03199095169716969096179290921791909116179093559182905290829020018790555190915082905f5160206113075f395f51905f529061086e9088815260200190565b60405180910390a2509392505050565b63389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f5fa2565b6108bf610e19565b6108c85f610e74565b565b6108d2610e19565b5f83815260208190526040902060010154610900576040516315f2470160e31b815260040160405180910390fd5b5f819003610921576040516399d8fec960e01b815260040160405180910390fd5b5f8381526020818152604091829020548251601f850183900483028101830190935283835262ffffff169161096f9185908590819084018382808284375f92019190915250610e3392505050565b5f8581526020818152604080832085845260028101835290832080546001600160a01b0319166001600160a01b039590951694909417909355868252819052815462ffffff1691906109c0836111f2565b91906101000a81548162ffffff021916908362ffffff16021790555050837faa65dca3f562832c0ba4bbde8d03d3d978faaf4da00e3d88cc93ad26d927096d82604051610a0f91815260200190565b60405180910390a250505050565b5f818152602081905260409020600181015460609190610a50576040516315f2470160e31b815260040160405180910390fd5b5f83815260016020908152604091829020825160608101845290546001600160a01b03811680835265ffffffffffff600160a01b8304811694840194909452600160d01b9091049092169281019290925215610ad457610acc815f0151826020015165ffffffffffff16836040015165ffffffffffff16610eb1565b949350505050565b60605f5b835462ffffff16811015610b35575f8181526002850160205260409020548290610b0a906001600160a01b0316610f19565b604051602001610b1b92919061122b565b60408051601f198184030181529190529150600101610ad8565b50949350505050565b610b46610e19565b6002548210610b5e57610b5a8260016111ac565b6002555b5f8281526020818152604091829020600101839055905182815283915f5160206113075f395f51905f52910160405180910390a25050565b5f828152602081905260409020600181015460609190610bc9576040516315f2470160e31b815260040160405180910390fd5b805462ffffff168310610bef576040516376fb3d3160e11b815260040160405180910390fd5b5f838152600282016020526040902054610c11906001600160a01b0316610f19565b9150505b92915050565b604051634a83e9cd60e11b8152600481018290526060903090639507d39a906024015f60405180830381865afa158015610c57573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c159190810190611253565b610c86610e19565b5f819003610ca7576040516399d8fec960e01b815260040160405180910390fd5b6002548410610cbf57610cbb8460016111ac565b6002555b5f610cfe83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610e3392505050565b604080516060810182526001600160a01b0380841682525f602080840182815265ffffffffffff8981168688019081528d8552600180855288862097518854945192518416600160d01b026001600160d01b0393909416600160a01b026001600160d01b03199095169716969096179290921791909116179093559182905290829020018690555190915085905f5160206113075f395f51905f5290610da79087815260200190565b60405180910390a25050505050565b610dbe610e19565b63389a75e1600c52805f526020600c208054421115610de457636f5e88185f526004601cfd5b5f9055610df081610e74565b50565b610dfb610e19565b8060601b610e1057637448fbae5f526004601cfd5b610df081610e74565b638b78c6d8195433146108c8576382b429005f526004601cfd5b5f81518060401b6bfe61000180600a3d393df3000161fffe8211840152600b8101601584015ff0915081610e6e5763301164255f526004601cfd5b90915290565b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a355565b60405161ffff8210610ec35761ffff91505b818310838303026001810184601f8401873c8082015160ff16610efd576001853b038060281c3d3d3e808403818511028203858211029150505b8082525f81602084010152806040830101604052509392505050565b60405164ffffffffff5f19833b0116602181015f601f8401853c80825260408201810160405250919050565b5f5f83601f840112610f55575f5ffd5b50813567ffffffffffffffff811115610f6c575f5ffd5b6020830191508360208260051b8501011115610f86575f5ffd5b9250929050565b5f5f5f60408486031215610f9f575f5ffd5b83359250602084013567ffffffffffffffff811115610fbc575f5ffd5b610fc886828701610f45565b9497909650939450505050565b5f60208284031215610fe5575f5ffd5b5035919050565b5f5f83601f840112610ffc575f5ffd5b50813567ffffffffffffffff811115611013575f5ffd5b602083019150836020828501011115610f86575f5ffd5b5f5f5f6040848603121561103c575f5ffd5b83359250602084013567ffffffffffffffff811115611059575f5ffd5b610fc886828701610fec565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6110a56020830184611065565b9392505050565b5f5f604083850312156110bd575f5ffd5b50508035926020909101359150565b5f5f5f5f606085870312156110df575f5ffd5b8435935060208501359250604085013567ffffffffffffffff811115611103575f5ffd5b61110f87828801610fec565b95989497509550505050565b5f6020828403121561112b575f5ffd5b81356001600160a01b03811681146110a5575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f5f8335601e1984360301811261116a575f5ffd5b83018035915067ffffffffffffffff821115611184575f5ffd5b602001915036819003821315610f86575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115610c1557610c15611198565b62ffffff8181168382160190811115610c1557610c15611198565b5f600182016111eb576111eb611198565b5060010190565b5f62ffffff821662ffffff810361120b5761120b611198565b60010192915050565b5f81518060208401855e5f93019283525090919050565b5f610acc6112398386611214565b84611214565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215611263575f5ffd5b815167ffffffffffffffff811115611279575f5ffd5b8201601f81018413611289575f5ffd5b805167ffffffffffffffff8111156112a3576112a361123f565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156112d2576112d261123f565b6040528181528282016020018610156112e9575f5ffd5b8160208401602083015e5f9181016020019190915294935050505056fef0d86e4da46a3c60e2dc0f8453bea09697e36bbb29e5a5fb05404b14387c7c2ea264697066735822122001ce30d100ea93568ded9489354569ab46461c3c38e084ad5eeea9fa21cdf94c64736f6c634300081c0033

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

000000000000000000000000d7dd9612a21f7c249fb7f33e9c2e9144345e162b

-----Decoded View---------------
Arg [0] : owner_ (address): 0xd7dD9612A21F7C249Fb7F33E9C2e9144345e162b

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000d7dd9612a21f7c249fb7f33e9c2e9144345e162b


Deployed Bytecode Sourcemap

310:6248:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3236:518;;;;;;;;;;-1:-1:-1;3236:518:0;;;;;:::i;:::-;;:::i;:::-;;3952:546;;;;;;;;;;-1:-1:-1;3952:546:0;;;;;:::i;:::-;;:::i;:::-;;;1687:25:3;;;1675:2;1660:18;3952:546:0;;;;;;;;6053:278;;;;;;;;;;-1:-1:-1;6053:278:0;;;;;:::i;:::-;;:::i;:::-;;;;2126:25:3;;;2199:8;2187:21;;;2182:2;2167:18;;2160:49;2099:18;6053:278:0;1954:261:3;9021:617:1;;;:::i;1352:385:0:-;;;;;;;;;;-1:-1:-1;1352:385:0;;;;;:::i;:::-;;:::i;6437:119::-;;;;;;;;;;-1:-1:-1;6437:119:0;;;;;:::i;:::-;6488:4;6511:12;;;;;;;;;;:24;;;:38;;;6437:119;;;;3265:14:3;;3258:22;3240:41;;3228:2;3213:18;6437:119:0;3100:187:3;9720:456:1;;;:::i;872:25:0:-;;;;;;;;;;;;;;;;8762:100:1;;;:::i;2734:389:0:-;;;;;;;;;;-1:-1:-1;2734:389:0;;;;;:::i;:::-;;:::i;11408:182:1:-;;;;;;;;;;-1:-1:-1;;;11556:18:1;11408:182;;-1:-1:-1;;;;;3984:32:3;;;3966:51;;3954:2;3939:18;11408:182:1;3820:203:3;4600:599:0;;;;;;;;;;-1:-1:-1;4600:599:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2414:216::-;;;;;;;;;;-1:-1:-1;2414:216:0;;;;;:::i;:::-;;:::i;5548:330::-;;;;;;;;;;-1:-1:-1;5548:330:0;;;;;:::i;:::-;;:::i;5306:113::-;;;;;;;;;;-1:-1:-1;5306:113:0;;;;;:::i;:::-;;:::i;1894:399::-;;;;;;;;;;-1:-1:-1;1894:399:0;;;;;:::i;:::-;;:::i;10363:708:1:-;;;;;;:::i;:::-;;:::i;8348:349::-;;;;;;:::i;:::-;;:::i;11693:435::-;;;;;;;;;;-1:-1:-1;11693:435:1;;;;;:::i;:::-;11963:19;11957:4;11950:33;;;11812:14;11996:26;;;;12106:4;12090:21;;12084:28;;11693:435;3236:518:0;12517:13:1;:11;:13::i;:::-;3361:1:0::1;3325:12:::0;;;::::1;::::0;;;;;;:24:::1;;::::0;3321:68:::1;;3372:17;;-1:-1:-1::0;;;3372:17:0::1;;;;;;;;;;;3321:68;3400:18;3421:12:::0;;;::::1;::::0;;;;;;:23;::::1;;::::0;3454:236:::1;3470:17:::0;;::::1;3454:236;;;3512:6;;3519:1;3512:9;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:16;;3532:1;3512:21:::0;3508:45:::1;;3542:11;;-1:-1:-1::0;;;3542:11:0::1;;;;;;;;;;;3508:45;3605:24;3619:6;;3626:1;3619:9;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;3605:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;3605:13:0::1;::::0;-1:-1:-1;;;3605:24:0:i:1;:::-;3567:8;:12:::0;;;::::1;::::0;;;;;;:19:::1;;::::0;3587:14:::1;3600:1:::0;3587:10;:14:::1;:::i;:::-;3567:35:::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;3567:35:0;:62;;-1:-1:-1;;;;;;3567:62:0::1;-1:-1:-1::0;;;;;3567:62:0;;;::::1;::::0;;;::::1;::::0;;3660:2;3648:31:::1;3664:14;3677:1:::0;3664:10;:14:::1;:::i;:::-;3648:31;::::0;1687:25:3;;;1675:2;1660:18;3648:31:0::1;;;;;;;3489:3;;3454:236;;;-1:-1:-1::0;3699:8:0::1;:12:::0;;;::::1;::::0;;;;;;:48;;3733:6;;3699:8;:48:::1;::::0;3733:6;;3699:48:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3311:443;3236:518:::0;;;:::o;3952:546::-;4049:15;12517:13:1;:11;:13::i;:::-;-1:-1:-1;4086:6:0::1;::::0;4108:9:::1;4103:389;4119:20:::0;;::::1;4103:389;;;4164:9;;4174:1;4164:12;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:19;;4187:1;4164:24:::0;4160:48:::1;;4197:11;;-1:-1:-1::0;;;4197:11:0::1;;;;;;;;;;;4160:48;4235:6;:8:::0;;4222:10:::1;::::0;;4235:8:::1;::::0;::::1;:::i;:::-;;;;;4222:21;;4257:15;4275:27;4289:9;;4299:1;4289:12;;;;;;;:::i;4275:27::-;4332:48;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;4332:48:0;::::1;::::0;;-1:-1:-1;4332:48:0::1;::::0;::::1;::::0;4257:45;;-1:-1:-1;4332:48:0;;4359:9;;4369:1;4359:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;4332:48;::::0;;::::1;::::0;;;-1:-1:-1;4316:13:0::1;::::0;;;:9:::1;:13;::::0;;;;;;;:64;;;;;;::::1;::::0;;;::::1;::::0;;::::1;-1:-1:-1::0;;;4316:64:0::1;-1:-1:-1::0;;;;;4316:64:0;;;::::1;-1:-1:-1::0;;;4316:64:0::1;-1:-1:-1::0;;;;;;4316:64:0;;;-1:-1:-1;;;;;4316:64:0;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;4394:12;;;;;;;:24:::1;:38:::0;;;4451:30;1687:25:3;;;4316:13:0;;-1:-1:-1;;;;;;;;;;;4451:30:0;1660:18:3;4451:30:0::1;;;;;;;-1:-1:-1::0;;4141:3:0::1;;4103:389;;;;3952:546:::0;;;;;:::o;6053:278::-;6105:19;6181:12;;;;;;;;;;6207:19;;;;6105;;6181:12;6203:63;;6249:17;;-1:-1:-1;;;6249:17:0;;;;;;;;;;;6203:63;6284:19;;;;6305:18;;6284:19;;6305:18;;;;;-1:-1:-1;6053:278:0;-1:-1:-1;;6053:278:0:o;9021:617:1:-;9114:15;7972:9;9132:46;;:15;:46;9114:64;;9346:19;9340:4;9333:33;9396:8;9390:4;9383:22;9452:7;9445:4;9439;9429:21;9422:38;9599:8;9552:45;9549:1;9546;9541:67;9248:374;9021:617::o;1352:385:0:-;1437:10;12517:13:1;:11;:13::i;:::-;1478:1:0::1;1463:16:::0;;;1459:40:::1;;1488:11;;-1:-1:-1::0;;;1488:11:0::1;;;;;;;;;;;1459:40;1515:6;:8:::0;;;:6:::1;:8;::::0;::::1;:::i;:::-;;;;;1510:13;;1533:15;1551:19;1565:4;;1551:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;1551:13:0::1;::::0;-1:-1:-1;;;1551:19:0:i:1;:::-;1596:40;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;1596:40:0;;::::1;::::0;;-1:-1:-1;1596:40:0::1;::::0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;;;;1580:13;;;:9:::1;:13:::0;;;;;;:56;;;;;;;;;::::1;-1:-1:-1::0;;;1580:56:0::1;-1:-1:-1::0;;;;;1580:56:0;;;::::1;-1:-1:-1::0;;;1580:56:0::1;-1:-1:-1::0;;;;;;1580:56:0;;;;::::1;::::0;;;;;;;::::1;::::0;;;::::1;;::::0;;;1646:12;;;;;;;;:24:::1;:38:::0;;;1700:30;1533:37;;-1:-1:-1;1590:2:0;;-1:-1:-1;;;;;;;;;;;1700:30:0;::::1;::::0;1673:11;1687:25:3;;1675:2;1660:18;;1541:177;1700:30:0::1;;;;;;;;1449:288;1352:385:::0;;;;;:::o;9720:456:1:-;9922:19;9916:4;9909:33;9968:8;9962:4;9955:22;10020:1;10013:4;10007;9997:21;9990:32;10151:8;10105:44;10102:1;10099;10094:66;9720:456::o;8762:100::-;12517:13;:11;:13::i;:::-;8834:21:::1;8852:1;8834:9;:21::i;:::-;8762:100::o:0;2734:389:0:-;12517:13:1;:11;:13::i;:::-;2855:1:0::1;2819:12:::0;;;::::1;::::0;;;;;;:24:::1;;::::0;2815:68:::1;;2866:17;;-1:-1:-1::0;;;2866:17:0::1;;;;;;;;;;;2815:68;2913:1;2897:17:::0;;;2893:41:::1;;2923:11;;-1:-1:-1::0;;;2923:11:0::1;;;;;;;;;;;2893:41;2945:13;2961:12:::0;;;::::1;::::0;;;;;;;;:23;3023:20;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;2961:23:::1;;::::0;3023:20:::1;::::0;3037:5;;;;;;3023:20;::::1;3037:5:::0;;;;3023:20;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;3023:13:0::1;::::0;-1:-1:-1;;;3023:20:0:i:1;:::-;2994:8;:12:::0;;;::::1;::::0;;;;;;;:26;;;:19:::1;::::0;::::1;:26:::0;;;;;:49;;-1:-1:-1;;;;;;2994:49:0::1;-1:-1:-1::0;;;;;2994:49:0;;;::::1;::::0;;;::::1;::::0;;;3053:12;;;;;;:25;;::::1;;::::0;2994:12;3053:25:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;3106:2;3094:22;3110:5;3094:22;;;;1687:25:3::0;;1675:2;1660:18;;1541:177;3094:22:0::1;;;;;;;;2805:318;2734:389:::0;;;:::o;4600:599::-;4672:23;4698:12;;;;;;;;;;4724:19;;;;4648:12;;4698;4720:63;;4766:17;;-1:-1:-1;;;4766:17:0;;;;;;;;;;;4720:63;4820:18;4841:13;;;:9;:13;;;;;;;;;4820:34;;;;;;;;;-1:-1:-1;;;;;4820:34:0;;;;;;-1:-1:-1;;;4820:34:0;;;;;;;;;;;-1:-1:-1;;;4820:34:0;;;;;;;;;;;;;4868:25;4864:108;;4916:45;4929:3;:11;;;4942:3;:9;;;4916:45;;4953:3;:7;;;4916:45;;:12;:45::i;:::-;4909:52;4600:599;-1:-1:-1;;;;4600:599:0:o;4864:108::-;5009:19;5043:9;5038:132;5058:18;;;;5054:22;;5038:132;;;5140:17;;;;:14;;;:17;;;;;;5119:6;;5127:31;;-1:-1:-1;;;;;5140:17:0;5127:12;:31::i;:::-;5106:53;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;5106:53:0;;;;;;;;;;-1:-1:-1;5078:3:0;;5038:132;;;-1:-1:-1;5186:6:0;4600:599;-1:-1:-1;;;;4600:599:0:o;2414:216::-;12517:13:1;:11;:13::i;:::-;2507:6:0::1;;2501:2;:12;2497:33;;2524:6;:2:::0;2529:1:::1;2524:6;:::i;:::-;2515;:15:::0;2497:33:::1;2540:8;:12:::0;;;::::1;::::0;;;;;;;;:24:::1;;:38:::0;;;2593:30;;1687:25:3;;;2540:12:0;;-1:-1:-1;;;;;;;;;;;2593:30:0;1660:18:3;2593:30:0::1;;;;;;;2414:216:::0;;:::o;5548:330::-;5640:23;5666:12;;;;;;;;;;5692:19;;;;5616:12;;5666;5688:63;;5734:17;;-1:-1:-1;;;5734:17:0;;;;;;;;;;;5688:63;5774:18;;;;5765:27;;5761:58;;5801:18;;-1:-1:-1;;;5801:18:0;;;;;;;;;;;5761:58;5849:21;;;;:14;;;:21;;;;;;5836:35;;-1:-1:-1;;;;;5849:21:0;5836:12;:35::i;:::-;5829:42;;;5548:330;;;;;:::o;5306:113::-;5399:12;;-1:-1:-1;;;5399:12:0;;;;;1687:25:3;;;5360:13:0;;5399:4;;:8;;1660:18:3;;5399:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5399:12:0;;;;;;;;;;;;:::i;1894:399::-;12517:13:1;:11;:13::i;:::-;2013:1:0::1;1998:16:::0;;;1994:40:::1;;2023:11;;-1:-1:-1::0;;;2023:11:0::1;;;;;;;;;;;1994:40;2055:6;;2049:2;:12;2045:33;;2072:6;:2:::0;2077:1:::1;2072:6;:::i;:::-;2063;:15:::0;2045:33:::1;2089:15;2107:19;2121:4;;2107:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;2107:13:0::1;::::0;-1:-1:-1;;;2107:19:0:i:1;:::-;2152:40;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;2152:40:0;;::::1;::::0;;-1:-1:-1;2152:40:0::1;::::0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;;;;2136:13;;;:9:::1;:13:::0;;;;;;:56;;;;;;;;;::::1;-1:-1:-1::0;;;2136:56:0::1;-1:-1:-1::0;;;;;2136:56:0;;;::::1;-1:-1:-1::0;;;2136:56:0::1;-1:-1:-1::0;;;;;;2136:56:0;;;;::::1;::::0;;;;;;;::::1;::::0;;;::::1;;::::0;;;2202:12;;;;;;;;:24:::1;:38:::0;;;2256:30;2089:37;;-1:-1:-1;2146:2:0;;-1:-1:-1;;;;;;;;;;;2256:30:0;::::1;::::0;2229:11;1687:25:3;;1675:2;1660:18;;1541:177;2256:30:0::1;;;;;;;;1984:309;1894:399:::0;;;;:::o;10363:708:1:-;12517:13;:11;:13::i;:::-;10597:19:::1;10591:4;10584:33;10643:12;10637:4;10630:26;10705:4;10699;10689:21;10811:12;10805:19;10792:11;10789:36;10786:157;;;10857:10;10851:4;10844:24;10924:4;10918;10911:18;10786:157;11020:1;10999:23:::0;;11041::::1;11051:12:::0;11041:9:::1;:23::i;:::-;10363:708:::0;:::o;8348:349::-;12517:13;:11;:13::i;:::-;8520:8:::1;8516:2;8512:17;8502:150;;8562:10;8556:4;8549:24;8633:4;8627;8620:18;8502:150;8671:19;8681:8;8671:9;:19::i;7292:355::-:0;-1:-1:-1;;7498:18:1;7488:8;7485:32;7475:156;;7550:10;7544:4;7537:24;7612:4;7606;7599:18;2052:1785:2;2104:15;2212:4;2206:11;3474:1;3468:4;3464:12;3436:26;3432:45;3422:6;3419:1;3416:13;3410:4;3406:24;3399:79;3607:3;3604:1;3600:11;3593:4;3587;3583:15;3580:1;3573:39;3562:50;;3635:7;3625:135;;3675:10;3669:4;3662:24;3741:4;3735;3728:18;3625:135;3773:15;;;2052:1785;:::o;6145:1089:1:-;-1:-1:-1;;7093:16:1;;-1:-1:-1;;;;;6941:26:1;;;;;;7053:38;7050:1;;7042:78;7177:27;6145:1089::o;11718:912:2:-;11937:4;11931:11;11973:6;11965:15;;11955:44;;11991:6;11984:13;;11955:44;12052:3;12045:5;12042:14;12034:5;12029:3;12025:15;12021:36;12122:4;12119:1;12115:12;12108:5;12101:4;12095;12091:15;12082:7;12070:58;12177:1;12171:4;12167:12;12161:19;12155:4;12151:30;12141:270;;12236:4;12226:7;12214:20;12210:31;12317:1;12313:2;12309:10;12291:16;12273;12258:62;12392:1;12387:3;12383:11;12379:1;12374:3;12371:10;12367:28;12364:1;12360:36;12352:5;12349:1;12346:12;12342:55;12337:60;;;12141:270;12437:1;12431:4;12424:15;12505:1;12501;12494:4;12488;12484:15;12480:23;12473:34;12591:1;12584:4;12578;12574:15;12570:23;12564:4;12557:37;;11718:912;;;;;:::o;10291:445::-;10454:4;10448:11;10485:12;-1:-1:-1;;10503:20:2;;10499:31;10481:50;10595:4;10588:12;;10582:4;10575;10565:15;;10515:7;10544:57;10627:1;10621:4;10614:15;10693:4;10687;10683:15;10680:1;10676:23;10670:4;10663:37;;10291:445;;;:::o;14:374:3:-;84:8;94:6;148:3;141:4;133:6;129:17;125:27;115:55;;166:1;163;156:12;115:55;-1:-1:-1;189:20:3;;232:18;221:30;;218:50;;;264:1;261;254:12;218:50;301:4;293:6;289:17;277:29;;361:3;354:4;344:6;341:1;337:14;329:6;325:27;321:38;318:47;315:67;;;378:1;375;368:12;315:67;14:374;;;;;:::o;393:569::-;499:6;507;515;568:2;556:9;547:7;543:23;539:32;536:52;;;584:1;581;574:12;536:52;629:23;;;-1:-1:-1;727:2:3;712:18;;699:32;754:18;743:30;;740:50;;;786:1;783;776:12;740:50;825:77;894:7;885:6;874:9;870:22;825:77;:::i;:::-;393:569;;921:8;;-1:-1:-1;799:103:3;;-1:-1:-1;;;;393:569:3:o;1723:226::-;1782:6;1835:2;1823:9;1814:7;1810:23;1806:32;1803:52;;;1851:1;1848;1841:12;1803:52;-1:-1:-1;1896:23:3;;1723:226;-1:-1:-1;1723:226:3:o;2220:347::-;2271:8;2281:6;2335:3;2328:4;2320:6;2316:17;2312:27;2302:55;;2353:1;2350;2343:12;2302:55;-1:-1:-1;2376:20:3;;2419:18;2408:30;;2405:50;;;2451:1;2448;2441:12;2405:50;2488:4;2480:6;2476:17;2464:29;;2540:3;2533:4;2524:6;2516;2512:19;2508:30;2505:39;2502:59;;;2557:1;2554;2547:12;2572:523;2651:6;2659;2667;2720:2;2708:9;2699:7;2695:23;2691:32;2688:52;;;2736:1;2733;2726:12;2688:52;2781:23;;;-1:-1:-1;2879:2:3;2864:18;;2851:32;2906:18;2895:30;;2892:50;;;2938:1;2935;2928:12;2892:50;2977:58;3027:7;3018:6;3007:9;3003:22;2977:58;:::i;4028:299::-;4080:3;4118:5;4112:12;4145:6;4140:3;4133:19;4201:6;4194:4;4187:5;4183:16;4176:4;4171:3;4167:14;4161:47;4253:1;4246:4;4237:6;4232:3;4228:16;4224:27;4217:38;4316:4;4309:2;4305:7;4300:2;4292:6;4288:15;4284:29;4279:3;4275:39;4271:50;4264:57;;;4028:299;;;;:::o;4332:228::-;4479:2;4468:9;4461:21;4442:4;4499:55;4550:2;4539:9;4535:18;4527:6;4499:55;:::i;:::-;4491:63;4332:228;-1:-1:-1;;;4332:228:3:o;4565:346::-;4633:6;4641;4694:2;4682:9;4673:7;4669:23;4665:32;4662:52;;;4710:1;4707;4700:12;4662:52;-1:-1:-1;;4755:23:3;;;4875:2;4860:18;;;4847:32;;-1:-1:-1;4565:346:3:o;5502:643::-;5590:6;5598;5606;5614;5667:2;5655:9;5646:7;5642:23;5638:32;5635:52;;;5683:1;5680;5673:12;5635:52;5728:23;;;-1:-1:-1;5848:2:3;5833:18;;5820:32;;-1:-1:-1;5929:2:3;5914:18;;5901:32;5956:18;5945:30;;5942:50;;;5988:1;5985;5978:12;5942:50;6027:58;6077:7;6068:6;6057:9;6053:22;6027:58;:::i;:::-;5502:643;;;;-1:-1:-1;6104:8:3;-1:-1:-1;;;;5502:643:3:o;6150:286::-;6209:6;6262:2;6250:9;6241:7;6237:23;6233:32;6230:52;;;6278:1;6275;6268:12;6230:52;6304:23;;-1:-1:-1;;;;;6356:31:3;;6346:42;;6336:70;;6402:1;6399;6392:12;6441:127;6502:10;6497:3;6493:20;6490:1;6483:31;6533:4;6530:1;6523:15;6557:4;6554:1;6547:15;6573:521;6650:4;6656:6;6716:11;6703:25;6810:2;6806:7;6795:8;6779:14;6775:29;6771:43;6751:18;6747:68;6737:96;;6829:1;6826;6819:12;6737:96;6856:33;;6908:20;;;-1:-1:-1;6951:18:3;6940:30;;6937:50;;;6983:1;6980;6973:12;6937:50;7016:4;7004:17;;-1:-1:-1;7047:14:3;7043:27;;;7033:38;;7030:58;;;7084:1;7081;7074:12;7099:127;7160:10;7155:3;7151:20;7148:1;7141:31;7191:4;7188:1;7181:15;7215:4;7212:1;7205:15;7231:125;7296:9;;;7317:10;;;7314:36;;;7330:18;;:::i;7361:161::-;7454:8;7429:16;;;7447;;;7425:39;;7476:17;;7473:43;;;7496:18;;:::i;7527:135::-;7566:3;7587:17;;;7584:43;;7607:18;;:::i;:::-;-1:-1:-1;7654:1:3;7643:13;;7527:135::o;7849:184::-;7887:3;7931:8;7924:5;7920:20;7964:8;7955:7;7952:21;7949:47;;7976:18;;:::i;:::-;8025:1;8012:15;;7849:184;-1:-1:-1;;7849:184:3:o;8038:211::-;8079:3;8117:5;8111:12;8161:6;8154:4;8147:5;8143:16;8138:3;8132:36;8223:1;8187:16;;8212:13;;;-1:-1:-1;8187:16:3;;8038:211;-1:-1:-1;8038:211:3:o;8254:261::-;8429:3;8454:55;8479:29;8504:3;8496:6;8479:29;:::i;:::-;8471:6;8454:55;:::i;8520:127::-;8581:10;8576:3;8572:20;8569:1;8562:31;8612:4;8609:1;8602:15;8636:4;8633:1;8626:15;8652:934;8731:6;8784:2;8772:9;8763:7;8759:23;8755:32;8752:52;;;8800:1;8797;8790:12;8752:52;8833:9;8827:16;8866:18;8858:6;8855:30;8852:50;;;8898:1;8895;8888:12;8852:50;8921:22;;8974:4;8966:13;;8962:27;-1:-1:-1;8952:55:3;;9003:1;9000;8993:12;8952:55;9036:2;9030:9;9062:18;9054:6;9051:30;9048:56;;;9084:18;;:::i;:::-;9133:2;9127:9;9225:2;9187:17;;-1:-1:-1;;9183:31:3;;;9216:2;9179:40;9175:54;9163:67;;9260:18;9245:34;;9281:22;;;9242:62;9239:88;;;9307:18;;:::i;:::-;9343:2;9336:22;9367;;;9408:15;;;9425:2;9404:24;9401:37;-1:-1:-1;9398:57:3;;;9451:1;9448;9441:12;9398:57;9500:6;9495:2;9491;9487:11;9482:2;9474:6;9470:15;9464:43;9553:1;9527:19;;;9548:2;9523:28;9516:39;;;;9531:6;8652:934;-1:-1:-1;;;;8652:934:3:o

Swarm Source

ipfs://01ce30d100ea93568ded9489354569ab46461c3c38e084ad5eeea9fa21cdf94c

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
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.