ETH Price: $1,903.91 (+1.85%)
Gas: 29 Gwei
 

Overview

ETH Balance

0.002 ETH

Eth Value

$3.81 (@ $1,903.91/ETH)

More Info

Private Name Tags

TokenTracker

Multi Chain

Multichain Addresses

Transaction Hash
Method
Block
From
To
Value
0xab06315c28b0ffde62c96b8e17ee381470b750b40b346ca95b6d73e54365f94aSafe Transfer Fr...(pending)2023-05-28 2:52:175 days 18 hrs ago1685242337IN
0xD57474...1df7bCd8
0 ETH(Pending)(Pending)
Safe Transfer Fr...173957902023-06-02 21:45:231 min ago1685742323IN
0xD57474...1df7bCd8
0 ETH0.0015230133.25806682
Safe Transfer Fr...173957822023-06-02 21:43:473 mins ago1685742227IN
0xD57474...1df7bCd8
0 ETH0.0015828434.55550379
Transfer From173955422023-06-02 20:55:3551 mins ago1685739335IN
0xD57474...1df7bCd8
0 ETH0.0013575722.86132228
Set Approval For...173950402023-06-02 19:13:112 hrs 33 mins ago1685733191IN
0xD57474...1df7bCd8
0 ETH0.0020902632.56062507
Transfer From173947992023-06-02 18:24:233 hrs 22 mins ago1685730263IN
0xD57474...1df7bCd8
0 ETH0.0017188426.78043257
Set Approval For...173938832023-06-02 15:17:356 hrs 29 mins ago1685719055IN
0xD57474...1df7bCd8
0 ETH0.0027053142.14141616
Set Approval For...173929132023-06-02 12:00:359 hrs 46 mins ago1685707235IN
0xD57474...1df7bCd8
0 ETH0.0019412330.23925406
Set Approval For...173923542023-06-02 10:05:4711 hrs 41 mins ago1685700347IN
0xD57474...1df7bCd8
0 ETH0.0017410327.11041129
Set Approval For...173921122023-06-02 9:16:4712 hrs 30 mins ago1685697407IN
0xD57474...1df7bCd8
0 ETH0.0016984926.44801628
Set Approval For...173910562023-06-02 5:42:2316 hrs 4 mins ago1685684543IN
0xD57474...1df7bCd8
0 ETH0.0017309526.95345432
Safe Transfer Fr...173898492023-06-02 1:37:4720 hrs 9 mins ago1685669867IN
0xD57474...1df7bCd8
0 ETH0.0011493422.71158061
Safe Transfer Fr...173895942023-06-02 0:46:2321 hrs ago1685666783IN
0xD57474...1df7bCd8
0 ETH0.0013494926.66677505
Safe Transfer Fr...173895182023-06-02 0:30:5921 hrs 16 mins ago1685665859IN
0xD57474...1df7bCd8
0 ETH0.0015314230.61449457
Set Approval For...173876962023-06-01 18:19:591 day 3 hrs ago1685643599IN
0xD57474...1df7bCd8
0 ETH0.0023841637.13883259
Safe Transfer Fr...173845662023-06-01 7:45:591 day 14 hrs ago1685605559IN
0xD57474...1df7bCd8
0 ETH0.0016796133.19794542
Set Approval For...173823152023-06-01 0:09:591 day 21 hrs ago1685578199IN
0xD57474...1df7bCd8
0 ETH0.0015733624.50880551
Set Approval For...173786062023-05-31 11:37:472 days 10 hrs ago1685533067IN
0xD57474...1df7bCd8
0 ETH0.0023916837.25595983
Set Approval For...173775642023-05-31 8:06:592 days 13 hrs ago1685520419IN
0xD57474...1df7bCd8
0 ETH0.0020076231.26162171
Set Approval For...173751152023-05-30 23:50:112 days 21 hrs ago1685490611IN
0xD57474...1df7bCd8
0 ETH0.0021887234.09447478
Set Approval For...173737662023-05-30 19:17:593 days 2 hrs ago1685474279IN
0xD57474...1df7bCd8
0 ETH0.0022338334.79704698
Set Approval For...173687472023-05-30 2:20:473 days 19 hrs ago1685413247IN
0xD57474...1df7bCd8
0 ETH0.0015934324.82143112
Set Approval For...173674302023-05-29 21:52:353 days 23 hrs ago1685397155IN
0xD57474...1df7bCd8
0 ETH0.0017443727.17257403
Safe Transfer Fr...173669082023-05-29 20:06:474 days 1 hr ago1685390807IN
0xD57474...1df7bCd8
0 ETH0.0014586131.84334387
Safe Transfer Fr...173669032023-05-29 20:05:474 days 1 hr ago1685390747IN
0xD57474...1df7bCd8
0 ETH0.0009956532.58689073
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DevDiamond

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 99999 runs

Other Settings:
default evmVersion, None license
File 1 of 14 : DevDiamond.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;

import { IERC721AUpgradeable } from 'erc721a-upgradeable/contracts/IERC721AUpgradeable.sol';
import { IERC721AQueryableUpgradeable } from 'erc721a-upgradeable/contracts/extensions/IERC721AQueryableUpgradeable.sol';
import { IERC165 } from '@openzeppelin/contracts/interfaces/IERC165.sol';
import { IERC2981 } from '@openzeppelin/contracts/interfaces/IERC2981.sol';
import { Diamond } from 'contracts-starter/contracts/Diamond.sol';
import { DiamondCutFacet } from 'contracts-starter/contracts/facets/DiamondCutFacet.sol';
import { DiamondLoupeFacet } from 'contracts-starter/contracts/facets/DiamondLoupeFacet.sol';
import { LibDiamond } from 'contracts-starter/contracts/libraries/LibDiamond.sol';
import { IDiamondCut } from 'contracts-starter/contracts/interfaces/IDiamondCut.sol';
import { IDiamondLoupe } from 'contracts-starter/contracts/interfaces/IDiamondLoupe.sol';
import { IERC173 } from 'contracts-starter/contracts/interfaces/IERC173.sol';

contract DevDiamond is Diamond {
	constructor(address contractOwner, address diamondCutFacet, address diamondLoupeFacet)
		Diamond(contractOwner, diamondCutFacet) payable
	{
		// Add ERC165 data
		LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();

		ds.supportedInterfaces[type(IERC165).interfaceId] = true;
		ds.supportedInterfaces[type(IDiamondCut).interfaceId] = true;
		ds.supportedInterfaces[type(IDiamondLoupe).interfaceId] = true;
		ds.supportedInterfaces[type(IERC173).interfaceId] = true;
		ds.supportedInterfaces[type(IERC721AUpgradeable).interfaceId] = true;
		ds.supportedInterfaces[type(IERC721AQueryableUpgradeable).interfaceId] = true;
		ds.supportedInterfaces[type(IERC2981).interfaceId] = true;

		// Add functions to the diamond
		IDiamondCut.FacetCut[] memory cut = new IDiamondCut.FacetCut[](1);
		bytes4[] memory diamondLoupeSelectors = new bytes4[](5);
		diamondLoupeSelectors[0] = IDiamondLoupe.facets.selector;
		diamondLoupeSelectors[1] = IDiamondLoupe.facetFunctionSelectors.selector;
        diamondLoupeSelectors[2] = IDiamondLoupe.facetAddresses.selector;
        diamondLoupeSelectors[3] = IDiamondLoupe.facetAddress.selector;
		diamondLoupeSelectors[4] = IERC165.supportsInterface.selector;
		cut[0] = IDiamondCut.FacetCut({
			facetAddress: diamondLoupeFacet,
			action: IDiamondCut.FacetCutAction.Add,
			functionSelectors: diamondLoupeSelectors
		});
		LibDiamond.diamondCut(cut, address(0), '');
	}
}

File 2 of 14 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (interfaces/IERC165.sol)

pragma solidity ^0.8.0;

import "../utils/introspection/IERC165.sol";

File 3 of 14 : IERC2981.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (interfaces/IERC2981.sol)

pragma solidity ^0.8.0;

import "../utils/introspection/IERC165.sol";

/**
 * @dev Interface for the NFT Royalty Standard.
 *
 * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal
 * support for royalty payments across all NFT marketplaces and ecosystem participants.
 *
 * _Available since v4.5._
 */
interface IERC2981 is IERC165 {
    /**
     * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of
     * exchange. The royalty amount is denominated and should be paid in that same unit of exchange.
     */
    function royaltyInfo(uint256 tokenId, uint256 salePrice)
        external
        view
        returns (address receiver, uint256 royaltyAmount);
}

File 4 of 14 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 5 of 14 : Diamond.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/******************************************************************************\
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen)
* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535
*
* Implementation of a diamond.
/******************************************************************************/

import { LibDiamond } from "./libraries/LibDiamond.sol";
import { IDiamondCut } from "./interfaces/IDiamondCut.sol";

contract Diamond {    

    constructor(address _contractOwner, address _diamondCutFacet) payable {        
        LibDiamond.setContractOwner(_contractOwner);

        // Add the diamondCut external function from the diamondCutFacet
        IDiamondCut.FacetCut[] memory cut = new IDiamondCut.FacetCut[](1);
        bytes4[] memory functionSelectors = new bytes4[](1);
        functionSelectors[0] = IDiamondCut.diamondCut.selector;
        cut[0] = IDiamondCut.FacetCut({
            facetAddress: _diamondCutFacet, 
            action: IDiamondCut.FacetCutAction.Add, 
            functionSelectors: functionSelectors
        });
        LibDiamond.diamondCut(cut, address(0), "");        
    }

    // Find facet for function that is called and execute the
    // function if a facet is found and return any value.
    fallback() external payable {
        LibDiamond.DiamondStorage storage ds;
        bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;
        // get diamond storage
        assembly {
            ds.slot := position
        }
        // get facet from function selector
        address facet = address(bytes20(ds.facets[msg.sig]));
        require(facet != address(0), "Diamond: Function does not exist");
        // Execute external function from facet using delegatecall and return any value.
        assembly {
            // copy function selector and any arguments
            calldatacopy(0, 0, calldatasize())
            // execute function call using the facet
            let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)
            // get any return value
            returndatacopy(0, 0, returndatasize())
            // return any return value or error back to the caller
            switch result
                case 0 {
                    revert(0, returndatasize())
                }
                default {
                    return(0, returndatasize())
                }
        }
    }

    receive() external payable {}
}

File 6 of 14 : DiamondCutFacet.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/******************************************************************************\
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen)
* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535
/******************************************************************************/

import { IDiamondCut } from "../interfaces/IDiamondCut.sol";
import { LibDiamond } from "../libraries/LibDiamond.sol";

// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.
// The loupe functions are required by the EIP2535 Diamonds standard

contract DiamondCutFacet is IDiamondCut {
    /// @notice Add/replace/remove any number of functions and optionally execute
    ///         a function with delegatecall
    /// @param _diamondCut Contains the facet addresses and function selectors
    /// @param _init The address of the contract or facet to execute _calldata
    /// @param _calldata A function call, including function selector and arguments
    ///                  _calldata is executed with delegatecall on _init
    function diamondCut(
        FacetCut[] calldata _diamondCut,
        address _init,
        bytes calldata _calldata
    ) external override {
        LibDiamond.enforceIsContractOwner();
        LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();
        uint256 originalSelectorCount = ds.selectorCount;
        uint256 selectorCount = originalSelectorCount;
        bytes32 selectorSlot;
        // Check if last selector slot is not full
        // "selectorCount & 7" is a gas efficient modulo by eight "selectorCount % 8" 
        if (selectorCount & 7 > 0) {
            // get last selectorSlot
            // "selectorCount >> 3" is a gas efficient division by 8 "selectorCount / 8"
            selectorSlot = ds.selectorSlots[selectorCount >> 3];
        }
        // loop through diamond cut
        for (uint256 facetIndex; facetIndex < _diamondCut.length; ) {
            (selectorCount, selectorSlot) = LibDiamond.addReplaceRemoveFacetSelectors(
                selectorCount,
                selectorSlot,
                _diamondCut[facetIndex].facetAddress,
                _diamondCut[facetIndex].action,
                _diamondCut[facetIndex].functionSelectors
            );

            unchecked {
                facetIndex++;
            }
        }
        if (selectorCount != originalSelectorCount) {
            ds.selectorCount = uint16(selectorCount);
        }
        // If last selector slot is not full
        // "selectorCount & 7" is a gas efficient modulo by eight "selectorCount % 8" 
        if (selectorCount & 7 > 0) {
            // "selectorCount >> 3" is a gas efficient division by 8 "selectorCount / 8"
            ds.selectorSlots[selectorCount >> 3] = selectorSlot;
        }
        emit DiamondCut(_diamondCut, _init, _calldata);
        LibDiamond.initializeDiamondCut(_init, _calldata);
    }
}

File 7 of 14 : DiamondLoupeFacet.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/******************************************************************************\
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen)
* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535
/******************************************************************************/

import { LibDiamond } from  "../libraries/LibDiamond.sol";
import { IDiamondLoupe } from "../interfaces/IDiamondLoupe.sol";
import { IERC165 } from "../interfaces/IERC165.sol";

// The functions in DiamondLoupeFacet MUST be added to a diamond.
// The EIP-2535 Diamond standard requires these functions

contract DiamondLoupeFacet is IDiamondLoupe, IERC165 {
    // Diamond Loupe Functions
    ////////////////////////////////////////////////////////////////////
    /// These functions are expected to be called frequently by tools.
    //
    // struct Facet {
    //     address facetAddress;
    //     bytes4[] functionSelectors;
    // }
    /// @notice Gets all facets and their selectors.
    /// @return facets_ Facet
    function facets() external override view returns (Facet[] memory facets_) {
        LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();
        facets_ = new Facet[](ds.selectorCount);
        uint16[] memory numFacetSelectors = new uint16[](ds.selectorCount);
        uint256 numFacets;
        uint256 selectorIndex;
        // loop through function selectors
        for (uint256 slotIndex; selectorIndex < ds.selectorCount; slotIndex++) {
            bytes32 slot = ds.selectorSlots[slotIndex];
            for (uint256 selectorSlotIndex; selectorSlotIndex < 8; selectorSlotIndex++) {
                selectorIndex++;
                if (selectorIndex > ds.selectorCount) {
                    break;
                }
                // " << 5 is the same as multiplying by 32 ( * 32)
                bytes4 selector = bytes4(slot << (selectorSlotIndex << 5));
                address facetAddress_ = address(bytes20(ds.facets[selector]));
                bool continueLoop;
                for (uint256 facetIndex; facetIndex < numFacets; facetIndex++) {
                    if (facets_[facetIndex].facetAddress == facetAddress_) {
                        facets_[facetIndex].functionSelectors[numFacetSelectors[facetIndex]] = selector;
                        // probably will never have more than 256 functions from one facet contract
                        require(numFacetSelectors[facetIndex] < 255);
                        numFacetSelectors[facetIndex]++;
                        continueLoop = true;
                        break;
                    }
                }
                if (continueLoop) {
                    continue;
                }
                facets_[numFacets].facetAddress = facetAddress_;
                facets_[numFacets].functionSelectors = new bytes4[](ds.selectorCount);
                facets_[numFacets].functionSelectors[0] = selector;
                numFacetSelectors[numFacets] = 1;
                numFacets++;
            }
        }
        for (uint256 facetIndex; facetIndex < numFacets; facetIndex++) {
            uint256 numSelectors = numFacetSelectors[facetIndex];
            bytes4[] memory selectors = facets_[facetIndex].functionSelectors;
            // setting the number of selectors
            assembly {
                mstore(selectors, numSelectors)
            }
        }
        // setting the number of facets
        assembly {
            mstore(facets_, numFacets)
        }
    }

    /// @notice Gets all the function selectors supported by a specific facet.
    /// @param _facet The facet address.
    /// @return _facetFunctionSelectors The selectors associated with a facet address.
    function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory _facetFunctionSelectors) {
        LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();
        uint256 numSelectors;
        _facetFunctionSelectors = new bytes4[](ds.selectorCount);
        uint256 selectorIndex;
        // loop through function selectors
        for (uint256 slotIndex; selectorIndex < ds.selectorCount; slotIndex++) {
            bytes32 slot = ds.selectorSlots[slotIndex];
            for (uint256 selectorSlotIndex; selectorSlotIndex < 8; selectorSlotIndex++) {
                selectorIndex++;
                if (selectorIndex > ds.selectorCount) {
                    break;
                }
                // " << 5 is the same as multiplying by 32 ( * 32)
                bytes4 selector = bytes4(slot << (selectorSlotIndex << 5));
                address facet = address(bytes20(ds.facets[selector]));
                if (_facet == facet) {
                    _facetFunctionSelectors[numSelectors] = selector;
                    numSelectors++;
                }
            }
        }
        // Set the number of selectors in the array
        assembly {
            mstore(_facetFunctionSelectors, numSelectors)
        }
    }

    /// @notice Get all the facet addresses used by a diamond.
    /// @return facetAddresses_
    function facetAddresses() external override view returns (address[] memory facetAddresses_) {
        LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();
        facetAddresses_ = new address[](ds.selectorCount);
        uint256 numFacets;
        uint256 selectorIndex;
        // loop through function selectors
        for (uint256 slotIndex; selectorIndex < ds.selectorCount; slotIndex++) {
            bytes32 slot = ds.selectorSlots[slotIndex];
            for (uint256 selectorSlotIndex; selectorSlotIndex < 8; selectorSlotIndex++) {
                selectorIndex++;
                if (selectorIndex > ds.selectorCount) {
                    break;
                }
                // " << 5 is the same as multiplying by 32 ( * 32)
                bytes4 selector = bytes4(slot << (selectorSlotIndex << 5));
                address facetAddress_ = address(bytes20(ds.facets[selector]));
                bool continueLoop;
                for (uint256 facetIndex; facetIndex < numFacets; facetIndex++) {
                    if (facetAddress_ == facetAddresses_[facetIndex]) {
                        continueLoop = true;
                        break;
                    }
                }
                if (continueLoop) {                    
                    continue;
                }
                facetAddresses_[numFacets] = facetAddress_;
                numFacets++;
            }
        }
        // Set the number of facet addresses in the array
        assembly {
            mstore(facetAddresses_, numFacets)
        }
    }

    /// @notice Gets the facet that supports the given selector.
    /// @dev If facet is not found return address(0).
    /// @param _functionSelector The function selector.
    /// @return facetAddress_ The facet address.
    function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {
        LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();
        facetAddress_ = address(bytes20(ds.facets[_functionSelector]));
    }

    // This implements ERC-165.
    function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {
        LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();
        return ds.supportedInterfaces[_interfaceId];
    }
}

File 8 of 14 : IDiamondCut.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/******************************************************************************\
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen)
* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535
/******************************************************************************/

interface IDiamondCut {
    enum FacetCutAction {Add, Replace, Remove}
    // Add=0, Replace=1, Remove=2

    struct FacetCut {
        address facetAddress;
        FacetCutAction action;
        bytes4[] functionSelectors;
    }

    /// @notice Add/replace/remove any number of functions and optionally execute
    ///         a function with delegatecall
    /// @param _diamondCut Contains the facet addresses and function selectors
    /// @param _init The address of the contract or facet to execute _calldata
    /// @param _calldata A function call, including function selector and arguments
    ///                  _calldata is executed with delegatecall on _init
    function diamondCut(
        FacetCut[] calldata _diamondCut,
        address _init,
        bytes calldata _calldata
    ) external;

    event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);
}

File 9 of 14 : IDiamondLoupe.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/******************************************************************************\
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen)
* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535
/******************************************************************************/

// A loupe is a small magnifying glass used to look at diamonds.
// These functions look at diamonds
interface IDiamondLoupe {
    /// These functions are expected to be called frequently
    /// by tools.

    struct Facet {
        address facetAddress;
        bytes4[] functionSelectors;
    }

    /// @notice Gets all facet addresses and their four byte function selectors.
    /// @return facets_ Facet
    function facets() external view returns (Facet[] memory facets_);

    /// @notice Gets all the function selectors supported by a specific facet.
    /// @param _facet The facet address.
    /// @return facetFunctionSelectors_
    function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);

    /// @notice Get all the facet addresses used by a diamond.
    /// @return facetAddresses_
    function facetAddresses() external view returns (address[] memory facetAddresses_);

    /// @notice Gets the facet that supports the given selector.
    /// @dev If facet is not found return address(0).
    /// @param _functionSelector The function selector.
    /// @return facetAddress_ The facet address.
    function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);
}

File 10 of 14 : IERC165.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IERC165 {
    /// @notice Query if a contract implements an interface
    /// @param interfaceId The interface identifier, as specified in ERC-165
    /// @dev Interface identification is specified in ERC-165. This function
    ///  uses less than 30,000 gas.
    /// @return `true` if the contract implements `interfaceID` and
    ///  `interfaceID` is not 0xffffffff, `false` otherwise
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 11 of 14 : IERC173.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/// @title ERC-173 Contract Ownership Standard
///  Note: the ERC-165 identifier for this interface is 0x7f5828d0
/* is ERC165 */
interface IERC173 {
    /// @dev This emits when ownership of a contract changes.
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /// @notice Get the address of the owner
    /// @return owner_ The address of the owner.
    function owner() external view returns (address owner_);

    /// @notice Set the address of the new owner of the contract
    /// @dev Set _newOwner to address(0) to renounce any ownership.
    /// @param _newOwner The address of the new owner of the contract
    function transferOwnership(address _newOwner) external;
}

File 12 of 14 : LibDiamond.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/******************************************************************************\
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen)
* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535
/******************************************************************************/
import { IDiamondCut } from "../interfaces/IDiamondCut.sol";

// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.
// The loupe functions are required by the EIP2535 Diamonds standard

error InitializationFunctionReverted(address _initializationContractAddress, bytes _calldata);

library LibDiamond {
    bytes32 constant DIAMOND_STORAGE_POSITION = keccak256("diamond.standard.diamond.storage");

    struct DiamondStorage {
        // maps function selectors to the facets that execute the functions.
        // and maps the selectors to their position in the selectorSlots array.
        // func selector => address facet, selector position
        mapping(bytes4 => bytes32) facets;
        // array of slots of function selectors.
        // each slot holds 8 function selectors.
        mapping(uint256 => bytes32) selectorSlots;
        // The number of function selectors in selectorSlots
        uint16 selectorCount;
        // Used to query if a contract implements an interface.
        // Used to implement ERC-165.
        mapping(bytes4 => bool) supportedInterfaces;
        // owner of the contract
        address contractOwner;
    }

    function diamondStorage() internal pure returns (DiamondStorage storage ds) {
        bytes32 position = DIAMOND_STORAGE_POSITION;
        assembly {
            ds.slot := position
        }
    }

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    function setContractOwner(address _newOwner) internal {
        DiamondStorage storage ds = diamondStorage();
        address previousOwner = ds.contractOwner;
        ds.contractOwner = _newOwner;
        emit OwnershipTransferred(previousOwner, _newOwner);
    }

    function contractOwner() internal view returns (address contractOwner_) {
        contractOwner_ = diamondStorage().contractOwner;
    }

    function enforceIsContractOwner() internal view {
        require(msg.sender == diamondStorage().contractOwner, "LibDiamond: Must be contract owner");
    }

    event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);

    bytes32 constant CLEAR_ADDRESS_MASK = bytes32(uint256(0xffffffffffffffffffffffff));
    bytes32 constant CLEAR_SELECTOR_MASK = bytes32(uint256(0xffffffff << 224));

    // Internal function version of diamondCut
    // This code is almost the same as the external diamondCut,
    // except it is using 'Facet[] memory _diamondCut' instead of
    // 'Facet[] calldata _diamondCut'.
    // The code is duplicated to prevent copying calldata to memory which
    // causes an error for a two dimensional array.
    function diamondCut(
        IDiamondCut.FacetCut[] memory _diamondCut,
        address _init,
        bytes memory _calldata
    ) internal {
        DiamondStorage storage ds = diamondStorage();
        uint256 originalSelectorCount = ds.selectorCount;
        uint256 selectorCount = originalSelectorCount;
        bytes32 selectorSlot;
        // Check if last selector slot is not full
        // "selectorCount & 7" is a gas efficient modulo by eight "selectorCount % 8" 
        if (selectorCount & 7 > 0) {
            // get last selectorSlot
            // "selectorSlot >> 3" is a gas efficient division by 8 "selectorSlot / 8"
            selectorSlot = ds.selectorSlots[selectorCount >> 3];
        }
        // loop through diamond cut
        for (uint256 facetIndex; facetIndex < _diamondCut.length; ) {
            (selectorCount, selectorSlot) = addReplaceRemoveFacetSelectors(
                selectorCount,
                selectorSlot,
                _diamondCut[facetIndex].facetAddress,
                _diamondCut[facetIndex].action,
                _diamondCut[facetIndex].functionSelectors
            );

            unchecked {
                facetIndex++;
            }
        }
        if (selectorCount != originalSelectorCount) {
            ds.selectorCount = uint16(selectorCount);
        }
        // If last selector slot is not full
        // "selectorCount & 7" is a gas efficient modulo by eight "selectorCount % 8" 
        if (selectorCount & 7 > 0) {
            // "selectorSlot >> 3" is a gas efficient division by 8 "selectorSlot / 8"
            ds.selectorSlots[selectorCount >> 3] = selectorSlot;
        }
        emit DiamondCut(_diamondCut, _init, _calldata);
        initializeDiamondCut(_init, _calldata);
    }

    function addReplaceRemoveFacetSelectors(
        uint256 _selectorCount,
        bytes32 _selectorSlot,
        address _newFacetAddress,
        IDiamondCut.FacetCutAction _action,
        bytes4[] memory _selectors
    ) internal returns (uint256, bytes32) {
        DiamondStorage storage ds = diamondStorage();
        require(_selectors.length > 0, "LibDiamondCut: No selectors in facet to cut");
        if (_action == IDiamondCut.FacetCutAction.Add) {
            enforceHasContractCode(_newFacetAddress, "LibDiamondCut: Add facet has no code");
            for (uint256 selectorIndex; selectorIndex < _selectors.length; ) {
                bytes4 selector = _selectors[selectorIndex];
                bytes32 oldFacet = ds.facets[selector];
                require(address(bytes20(oldFacet)) == address(0), "LibDiamondCut: Can't add function that already exists");
                // add facet for selector
                ds.facets[selector] = bytes20(_newFacetAddress) | bytes32(_selectorCount);
                // "_selectorCount & 7" is a gas efficient modulo by eight "_selectorCount % 8" 
                // " << 5 is the same as multiplying by 32 ( * 32)
                uint256 selectorInSlotPosition = (_selectorCount & 7) << 5;
                // clear selector position in slot and add selector
                _selectorSlot = (_selectorSlot & ~(CLEAR_SELECTOR_MASK >> selectorInSlotPosition)) | (bytes32(selector) >> selectorInSlotPosition);
                // if slot is full then write it to storage
                if (selectorInSlotPosition == 224) {
                    // "_selectorSlot >> 3" is a gas efficient division by 8 "_selectorSlot / 8"
                    ds.selectorSlots[_selectorCount >> 3] = _selectorSlot;
                    _selectorSlot = 0;
                }
                _selectorCount++;

                unchecked {
                    selectorIndex++;
                }
            }
        } else if (_action == IDiamondCut.FacetCutAction.Replace) {
            enforceHasContractCode(_newFacetAddress, "LibDiamondCut: Replace facet has no code");
            for (uint256 selectorIndex; selectorIndex < _selectors.length; ) {
                bytes4 selector = _selectors[selectorIndex];
                bytes32 oldFacet = ds.facets[selector];
                address oldFacetAddress = address(bytes20(oldFacet));
                // only useful if immutable functions exist
                require(oldFacetAddress != address(this), "LibDiamondCut: Can't replace immutable function");
                require(oldFacetAddress != _newFacetAddress, "LibDiamondCut: Can't replace function with same function");
                require(oldFacetAddress != address(0), "LibDiamondCut: Can't replace function that doesn't exist");
                // replace old facet address
                ds.facets[selector] = (oldFacet & CLEAR_ADDRESS_MASK) | bytes20(_newFacetAddress);

                unchecked {
                    selectorIndex++;
                }
            }
        } else if (_action == IDiamondCut.FacetCutAction.Remove) {
            require(_newFacetAddress == address(0), "LibDiamondCut: Remove facet address must be address(0)");
            // "_selectorCount >> 3" is a gas efficient division by 8 "_selectorCount / 8"
            uint256 selectorSlotCount = _selectorCount >> 3;
            // "_selectorCount & 7" is a gas efficient modulo by eight "_selectorCount % 8" 
            uint256 selectorInSlotIndex = _selectorCount & 7;
            for (uint256 selectorIndex; selectorIndex < _selectors.length; ) {
                if (_selectorSlot == 0) {
                    // get last selectorSlot
                    selectorSlotCount--;
                    _selectorSlot = ds.selectorSlots[selectorSlotCount];
                    selectorInSlotIndex = 7;
                } else {
                    selectorInSlotIndex--;
                }
                bytes4 lastSelector;
                uint256 oldSelectorsSlotCount;
                uint256 oldSelectorInSlotPosition;
                // adding a block here prevents stack too deep error
                {
                    bytes4 selector = _selectors[selectorIndex];
                    bytes32 oldFacet = ds.facets[selector];
                    require(address(bytes20(oldFacet)) != address(0), "LibDiamondCut: Can't remove function that doesn't exist");
                    // only useful if immutable functions exist
                    require(address(bytes20(oldFacet)) != address(this), "LibDiamondCut: Can't remove immutable function");
                    // replace selector with last selector in ds.facets
                    // gets the last selector
                    // " << 5 is the same as multiplying by 32 ( * 32)
                    lastSelector = bytes4(_selectorSlot << (selectorInSlotIndex << 5));
                    if (lastSelector != selector) {
                        // update last selector slot position info
                        ds.facets[lastSelector] = (oldFacet & CLEAR_ADDRESS_MASK) | bytes20(ds.facets[lastSelector]);
                    }
                    delete ds.facets[selector];
                    uint256 oldSelectorCount = uint16(uint256(oldFacet));
                    // "oldSelectorCount >> 3" is a gas efficient division by 8 "oldSelectorCount / 8"
                    oldSelectorsSlotCount = oldSelectorCount >> 3;
                    // "oldSelectorCount & 7" is a gas efficient modulo by eight "oldSelectorCount % 8" 
                    // " << 5 is the same as multiplying by 32 ( * 32)
                    oldSelectorInSlotPosition = (oldSelectorCount & 7) << 5;
                }
                if (oldSelectorsSlotCount != selectorSlotCount) {
                    bytes32 oldSelectorSlot = ds.selectorSlots[oldSelectorsSlotCount];
                    // clears the selector we are deleting and puts the last selector in its place.
                    oldSelectorSlot =
                        (oldSelectorSlot & ~(CLEAR_SELECTOR_MASK >> oldSelectorInSlotPosition)) |
                        (bytes32(lastSelector) >> oldSelectorInSlotPosition);
                    // update storage with the modified slot
                    ds.selectorSlots[oldSelectorsSlotCount] = oldSelectorSlot;
                } else {
                    // clears the selector we are deleting and puts the last selector in its place.
                    _selectorSlot =
                        (_selectorSlot & ~(CLEAR_SELECTOR_MASK >> oldSelectorInSlotPosition)) |
                        (bytes32(lastSelector) >> oldSelectorInSlotPosition);
                }
                if (selectorInSlotIndex == 0) {
                    delete ds.selectorSlots[selectorSlotCount];
                    _selectorSlot = 0;
                }

                unchecked {
                    selectorIndex++;
                }
            }
            _selectorCount = selectorSlotCount * 8 + selectorInSlotIndex;
        } else {
            revert("LibDiamondCut: Incorrect FacetCutAction");
        }
        return (_selectorCount, _selectorSlot);
    }

    function initializeDiamondCut(address _init, bytes memory _calldata) internal {
        if (_init == address(0)) {
            return;
        }
        enforceHasContractCode(_init, "LibDiamondCut: _init address has no code");        
        (bool success, bytes memory error) = _init.delegatecall(_calldata);
        if (!success) {
            if (error.length > 0) {
                // bubble up error
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(error)
                    revert(add(32, error), returndata_size)
                }
            } else {
                revert InitializationFunctionReverted(_init, _calldata);
            }
        }
    }

    function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {
        uint256 contractSize;
        assembly {
            contractSize := extcodesize(_contract)
        }
        require(contractSize > 0, _errorMessage);
    }
}

File 13 of 14 : IERC721AQueryableUpgradeable.sol
// SPDX-License-Identifier: MIT
// ERC721A Contracts v4.2.3
// Creator: Chiru Labs

pragma solidity ^0.8.4;

import '../IERC721AUpgradeable.sol';

/**
 * @dev Interface of ERC721AQueryable.
 */
interface IERC721AQueryableUpgradeable is IERC721AUpgradeable {
    /**
     * Invalid query range (`start` >= `stop`).
     */
    error InvalidQueryRange();

    /**
     * @dev Returns the `TokenOwnership` struct at `tokenId` without reverting.
     *
     * If the `tokenId` is out of bounds:
     *
     * - `addr = address(0)`
     * - `startTimestamp = 0`
     * - `burned = false`
     * - `extraData = 0`
     *
     * If the `tokenId` is burned:
     *
     * - `addr = <Address of owner before token was burned>`
     * - `startTimestamp = <Timestamp when token was burned>`
     * - `burned = true`
     * - `extraData = <Extra data when token was burned>`
     *
     * Otherwise:
     *
     * - `addr = <Address of owner>`
     * - `startTimestamp = <Timestamp of start of ownership>`
     * - `burned = false`
     * - `extraData = <Extra data at start of ownership>`
     */
    function explicitOwnershipOf(uint256 tokenId) external view returns (TokenOwnership memory);

    /**
     * @dev Returns an array of `TokenOwnership` structs at `tokenIds` in order.
     * See {ERC721AQueryable-explicitOwnershipOf}
     */
    function explicitOwnershipsOf(uint256[] memory tokenIds) external view returns (TokenOwnership[] memory);

    /**
     * @dev Returns an array of token IDs owned by `owner`,
     * in the range [`start`, `stop`)
     * (i.e. `start <= tokenId < stop`).
     *
     * This function allows for tokens to be queried if the collection
     * grows too big for a single call of {ERC721AQueryable-tokensOfOwner}.
     *
     * Requirements:
     *
     * - `start < stop`
     */
    function tokensOfOwnerIn(
        address owner,
        uint256 start,
        uint256 stop
    ) external view returns (uint256[] memory);

    /**
     * @dev Returns an array of token IDs owned by `owner`.
     *
     * This function scans the ownership mapping and is O(`totalSupply`) in complexity.
     * It is meant to be called off-chain.
     *
     * See {ERC721AQueryable-tokensOfOwnerIn} for splitting the scan into
     * multiple smaller scans if the collection is large enough to cause
     * an out-of-gas error (10K collections should be fine).
     */
    function tokensOfOwner(address owner) external view returns (uint256[] memory);
}

File 14 of 14 : IERC721AUpgradeable.sol
// SPDX-License-Identifier: MIT
// ERC721A Contracts v4.2.3
// Creator: Chiru Labs

pragma solidity ^0.8.4;

/**
 * @dev Interface of ERC721A.
 */
interface IERC721AUpgradeable {
    /**
     * The caller must own the token or be an approved operator.
     */
    error ApprovalCallerNotOwnerNorApproved();

    /**
     * The token does not exist.
     */
    error ApprovalQueryForNonexistentToken();

    /**
     * Cannot query the balance for the zero address.
     */
    error BalanceQueryForZeroAddress();

    /**
     * Cannot mint to the zero address.
     */
    error MintToZeroAddress();

    /**
     * The quantity of tokens minted must be more than zero.
     */
    error MintZeroQuantity();

    /**
     * The token does not exist.
     */
    error OwnerQueryForNonexistentToken();

    /**
     * The caller must own the token or be an approved operator.
     */
    error TransferCallerNotOwnerNorApproved();

    /**
     * The token must be owned by `from`.
     */
    error TransferFromIncorrectOwner();

    /**
     * Cannot safely transfer to a contract that does not implement the
     * ERC721Receiver interface.
     */
    error TransferToNonERC721ReceiverImplementer();

    /**
     * Cannot transfer to the zero address.
     */
    error TransferToZeroAddress();

    /**
     * The token does not exist.
     */
    error URIQueryForNonexistentToken();

    /**
     * The `quantity` minted with ERC2309 exceeds the safety limit.
     */
    error MintERC2309QuantityExceedsLimit();

    /**
     * The `extraData` cannot be set on an unintialized ownership slot.
     */
    error OwnershipNotInitializedForExtraData();

    // =============================================================
    //                            STRUCTS
    // =============================================================

    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Stores the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
        // Arbitrary data similar to `startTimestamp` that can be set via {_extraData}.
        uint24 extraData;
    }

    // =============================================================
    //                         TOKEN COUNTERS
    // =============================================================

    /**
     * @dev Returns the total number of tokens in existence.
     * Burned tokens will reduce the count.
     * To get the total number of tokens minted, please see {_totalMinted}.
     */
    function totalSupply() external view returns (uint256);

    // =============================================================
    //                            IERC165
    // =============================================================

    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified)
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);

    // =============================================================
    //                            IERC721
    // =============================================================

    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables
     * (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in `owner`'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`,
     * checking first that contract recipients are aware of the ERC721 protocol
     * to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move
     * this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement
     * {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external payable;

    /**
     * @dev Equivalent to `safeTransferFrom(from, to, tokenId, '')`.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external payable;

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom}
     * whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token
     * by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external payable;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the
     * zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external payable;

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom}
     * for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    // =============================================================
    //                        IERC721Metadata
    // =============================================================

    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);

    // =============================================================
    //                           IERC2309
    // =============================================================

    /**
     * @dev Emitted when tokens in `fromTokenId` to `toTokenId`
     * (inclusive) is transferred from `from` to `to`, as defined in the
     * [ERC2309](https://eips.ethereum.org/EIPS/eip-2309) standard.
     *
     * See {_mintERC2309} for more details.
     */
    event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to);
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 99999
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"contractOwner","type":"address"},{"internalType":"address","name":"diamondCutFacet","type":"address"},{"internalType":"address","name":"diamondLoupeFacet","type":"address"}],"stateMutability":"payable","type":"constructor"},{"inputs":[{"internalType":"address","name":"_initializationContractAddress","type":"address"},{"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"InitializationFunctionReverted","type":"error"},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"payable","type":"receive"}]

6080604052604051620025fa380380620025fa833981016040819052620000269162000f32565b82826200003e826200041460201b620000f41760201c565b604080516001808252818301909252600091816020015b60408051606080820183526000808352602083015291810191909152815260200190600190039081620000555750506040805160018082528183019092529192506000919060208083019080368337019050509050631f931c1c60e01b81600081518110620000c857620000c862000f7c565b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b03851681529081016000815260200182815250826000815181106200011b576200011b62000f7c565b60200260200101819052506200014e826000604051806020016040528060008152506200049860201b620001ae1760201c565b505050506000620001696200061960201b620003431760201c565b6301ffc9a760e01b6000908152600382016020526040808220805460ff1990811660019081179092556307e4c70760e21b845282842080548216831790556348e2b09360e01b845282842080548216831790556307f5828d60e41b8452828420805482168317905563184371e560e31b8452828420805482168317905563422353cf60e11b8452828420805482168317905563152a902d60e11b845282842080549091168217905581518181528083019092529293509091816020015b604080516060808201835260008083526020830152918101919091528152602001906001900390816200022657505060408051600580825260c08201909252919250600091906020820160a080368337019050509050637a0ed62760e01b816000815181106200029a576200029a62000f7c565b6001600160e01b03199092166020928302919091019091015280516356fe50af60e11b9082906001908110620002d457620002d462000f7c565b6001600160e01b03199092166020928302919091019091015280516314bbdacb60e21b90829060029081106200030e576200030e62000f7c565b6001600160e01b03199092166020928302919091019091015280516366ffd66360e11b908290600390811062000348576200034862000f7c565b6001600160e01b03199092166020928302919091019091015280516301ffc9a760e01b908290600490811062000382576200038262000f7c565b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b0386168152908101600081526020018281525082600081518110620003d557620003d562000f7c565b602002602001018190525062000408826000604051806020016040528060008152506200049860201b620001ae1760201c565b505050505050620011ed565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c132080546001600160a01b031981166001600160a01b0384811691821790935560405160008051602062002566833981519152939092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131e54600080516020620025668339815191529061ffff811690819060009060071615620004f75750600381901c60009081526001840160205260409020545b60005b875181101562000587576200057983838a84815181106200051f576200051f62000f7c565b6020026020010151600001518b858151811062000540576200054062000f7c565b6020026020010151602001518c868151811062000561576200056162000f7c565b6020026020010151604001516200062c60201b60201c565b9093509150600101620004fa565b50828214620005a45760028401805461ffff191661ffff84161790555b6007821615620005c757600382901c600090815260018501602052604090208190555b7f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673878787604051620005fc9392919062000ffc565b60405180910390a162000610868662000e19565b50505050505050565b6000805160206200256683398151915290565b600080806000805160206200256683398151915290506000845111620006ad5760405162461bcd60e51b815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201526a1858d95d081d1bc818dd5d60aa1b60648201526084015b60405180910390fd5b6000856002811115620006c457620006c462000f92565b036200084157620006ef86604051806060016040528060248152602001620025866024913962000ef1565b60005b84518110156200083a57600085828151811062000713576200071362000f7c565b6020908102919091018101516001600160e01b03198116600090815291859052604090912054909150606081901c15620007b65760405162461bcd60e51b815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60448201527f6e207468617420616c72656164792065786973747300000000000000000000006064820152608401620006a4565b6001600160e01b031980831660008181526020879052604090206001600160601b031960608d901b168e17905560e060058e901b811692831c199c909c1690821c179a8190036200081b5760038c901c600090815260018601602052604081209b909b555b8b620008278162001119565b9c505060019093019250620006f2915050565b5062000e0d565b600185600281111562000858576200085862000f92565b0362000a65576200088386604051806060016040528060288152602001620025d26028913962000ef1565b60005b84518110156200083a576000858281518110620008a757620008a762000f7c565b6020908102919091018101516001600160e01b03198116600090815291859052604090912054909150606081901c3081036200093e5760405162461bcd60e51b815260206004820152602f60248201527f4c69624469616d6f6e644375743a2043616e2774207265706c61636520696d6d60448201526e3aba30b1363290333ab731ba34b7b760891b6064820152608401620006a4565b896001600160a01b0316816001600160a01b031603620009b65760405162461bcd60e51b815260206004820152603860248201526000805160206200254683398151915260448201527f6374696f6e20776974682073616d652066756e6374696f6e00000000000000006064820152608401620006a4565b6001600160a01b03811662000a235760405162461bcd60e51b815260206004820152603860248201526000805160206200254683398151915260448201527f6374696f6e207468617420646f65736e277420657869737400000000000000006064820152608401620006a4565b506001600160e01b031990911660009081526020849052604090206001600160601b03919091166001600160601b031960608a901b1617905560010162000886565b600285600281111562000a7c5762000a7c62000f92565b0362000db4576001600160a01b0386161562000b015760405162461bcd60e51b815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260448201527f657373206d7573742062652061646472657373283029000000000000000000006064820152608401620006a4565b600388901c6007891660005b865181101562000d8f5760008a900362000b4e578262000b2d8162001135565b60008181526001870160205260409020549b5093506007925062000b5e9050565b8162000b5a8162001135565b9250505b6000806000808a858151811062000b795762000b7962000f7c565b6020908102919091018101516001600160e01b031981166000908152918a9052604090912054909150606081901c62000c1b5760405162461bcd60e51b815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e27742065786973740000000000000000006064820152608401620006a4565b30606082901c0362000c875760405162461bcd60e51b815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201526d3a30b1363290333ab731ba34b7b760911b6064820152608401620006a4565b600587901b8f901b94506001600160e01b03198086169083161462000cd9576001600160e01b03198516600090815260208a90526040902080546001600160601b0319166001600160601b0383161790555b6001600160e01b031991909116600090815260208990526040812055600381901c611fff16925060051b60e016905085821462000d40576000828152600188016020526040902080546001600160e01b031980841c19909116908516831c17905562000d64565b80836001600160e01b031916901c816001600160e01b031960001b901c198e16179c505b8460000362000d8357600086815260018801602052604081208190559c505b50505060010162000b0d565b508062000d9e8360086200114f565b62000daa91906200116f565b9950505062000e0d565b60405162461bcd60e51b815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f727265637420466163657443756044820152663a20b1ba34b7b760c91b6064820152608401620006a4565b50959694955050505050565b6001600160a01b03821662000e2c575050565b62000e5182604051806060016040528060288152602001620025aa6028913962000ef1565b600080836001600160a01b03168360405162000e6e919062001185565b600060405180830381855af49150503d806000811462000eab576040519150601f19603f3d011682016040523d82523d6000602084013e62000eb0565b606091505b50915091508162000eeb5780511562000ecc5780518082602001fd5b838360405163192105d760e01b8152600401620006a4929190620011a3565b50505050565b813b818162000eeb5760405162461bcd60e51b8152600401620006a49190620011d1565b80516001600160a01b038116811462000f2d57600080fd5b919050565b60008060006060848603121562000f4857600080fd5b62000f538462000f15565b925062000f636020850162000f15565b915062000f736040850162000f15565b90509250925092565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b60005b8381101562000fc557818101518382015260200162000fab565b50506000910152565b6000815180845262000fe881602086016020860162000fa8565b601f01601f19169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b84811015620010d157898403607f19018652815180516001600160a01b031685528381015189860190600381106200106d57634e487b7160e01b600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b80831015620010bb5783516001600160e01b03191682529286019260019290920191908601906200108f565b5097850197955050509082019060010162001025565b50506001600160a01b038a16908801528681036040880152620010f5818962000fce565b9a9950505050505050505050565b634e487b7160e01b600052601160045260246000fd5b6000600182016200112e576200112e62001103565b5060010190565b60008162001147576200114762001103565b506000190190565b808202811582820484141762001169576200116962001103565b92915050565b8082018082111562001169576200116962001103565b600082516200119981846020870162000fa8565b9190910192915050565b6001600160a01b0383168152604060208201819052600090620011c99083018462000fce565b949350505050565b602081526000620011e6602083018462000fce565b9392505050565b61134980620011fd6000396000f3fe60806040523661000b57005b600080357fffffffff000000000000000000000000000000000000000000000000000000001681527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6020819052604090912054819060601c806100d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4469616d6f6e643a2046756e6374696f6e20646f6573206e6f7420657869737460448201526064015b60405180910390fd5b3660008037600080366000845af43d6000803e8080156100ef573d6000f35b3d6000fd5b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c132080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff8481169182179093556040517fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c939092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131e547fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c9061ffff81169081906000906007161561021d5750600381901c60009081526001840160205260409020545b60005b875181101561029a5761028d83838a848151811061024057610240610f32565b6020026020010151600001518b858151811061025e5761025e610f32565b6020026020010151602001518c868151811061027c5761027c610f32565b602002602001015160400151610367565b9093509150600101610220565b508282146102d3576002840180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff84161790555b60078216156102f557600382901c600090815260018501602052604090208190555b7f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67387878760405161032893929190610ffe565b60405180910390a161033a8686610df8565b50505050505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90565b600080807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c9050600084511161041f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f2063757400000000000000000000000000000000000000000060648201526084016100c7565b600085600281111561043357610433610f61565b036106035761045a866040518060600160405280602481526020016112a060249139610ef7565b60005b84518110156105fd57600085828151811061047a5761047a610f32565b6020908102919091018101517fffffffff000000000000000000000000000000000000000000000000000000008116600090815291859052604090912054909150606081901c1561054d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60448201527f6e207468617420616c726561647920657869737473000000000000000000000060648201526084016100c7565b7fffffffff0000000000000000000000000000000000000000000000000000000080831660008181526020879052604090207fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608d901b168e17905560e060058e901b811692831c199c909c1690821c179a8190036105e15760038c901c600090815260018601602052604081209b909b555b8b6105eb81611195565b9c50506001909301925061045d915050565b50610dec565b600185600281111561061757610617610f61565b036109075761063e866040518060600160405280602881526020016112ec60289139610ef7565b60005b84518110156105fd57600085828151811061065e5761065e610f32565b6020908102919091018101517fffffffff000000000000000000000000000000000000000000000000000000008116600090815291859052604090912054909150606081901c308103610733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4c69624469616d6f6e644375743a2043616e2774207265706c61636520696d6d60448201527f757461626c652066756e6374696f6e000000000000000000000000000000000060648201526084016100c7565b8973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e000000000000000060648201526084016100c7565b73ffffffffffffffffffffffffffffffffffffffff8116610891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e207468617420646f65736e2774206578697374000000000000000060648201526084016100c7565b507fffffffff0000000000000000000000000000000000000000000000000000000090911660009081526020849052604090206bffffffffffffffffffffffff919091167fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a901b16179055600101610641565b600285600281111561091b5761091b610f61565b03610d645773ffffffffffffffffffffffffffffffffffffffff8616156109c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260448201527f657373206d75737420626520616464726573732830290000000000000000000060648201526084016100c7565b600388901c6007891660005b8651811015610d445760008a9003610a0c57826109ec816111cd565b60008181526001870160205260409020549b50935060079250610a1a9050565b81610a16816111cd565b9250505b6000806000808a8581518110610a3257610a32610f32565b6020908102919091018101517fffffffff0000000000000000000000000000000000000000000000000000000081166000908152918a9052604090912054909150606081901c610b04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e277420657869737400000000000000000060648201526084016100c7565b30606082901c03610b97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201527f7461626c652066756e6374696f6e00000000000000000000000000000000000060648201526084016100c7565b600587901b8f901b94507fffffffff0000000000000000000000000000000000000000000000000000000080861690831614610c35577fffffffff000000000000000000000000000000000000000000000000000000008516600090815260208a90526040902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff83161790555b7fffffffff0000000000000000000000000000000000000000000000000000000091909116600090815260208990526040812055600381901c611fff16925060051b60e0169050858214610cca576000828152600188016020526040902080547fffffffff0000000000000000000000000000000000000000000000000000000080841c19909116908516831c179055610d1b565b80837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916901c817fffffffff0000000000000000000000000000000000000000000000000000000060001b901c198e16179c505b84600003610d3957600086815260018801602052604081208190559c505b5050506001016109d0565b5080610d51836008611202565b610d5b919061121f565b99505050610dec565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560448201527f74416374696f6e0000000000000000000000000000000000000000000000000060648201526084016100c7565b50959694955050505050565b73ffffffffffffffffffffffffffffffffffffffff8216610e17575050565b610e39826040518060600160405280602881526020016112c460289139610ef7565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610e619190611232565b600060405180830381855af49150503d8060008114610e9c576040519150601f19603f3d011682016040523d82523d6000602084013e610ea1565b606091505b509150915081610ef157805115610ebb5780518082602001fd5b83836040517f192105d70000000000000000000000000000000000000000000000000000000081526004016100c792919061124e565b50505050565b813b8181610ef1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100c79190611285565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60005b83811015610fab578181015183820152602001610f93565b50506000910152565b60008151808452610fcc816020860160208601610f90565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b84811015611129577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a8503018652815188850173ffffffffffffffffffffffffffffffffffffffff825116865284820151600381106110b0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b808310156111145783517fffffffff000000000000000000000000000000000000000000000000000000001682529286019260019290920191908601906110d2565b50978501979550505090820190600101611027565b505073ffffffffffffffffffffffffffffffffffffffff8a169088015286810360408801526111588189610fb4565b9a9950505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036111c6576111c6611166565b5060010190565b6000816111dc576111dc611166565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b808202811582820484141761121957611219611166565b92915050565b8082018082111561121957611219611166565b60008251611244818460208701610f90565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff8316815260406020820152600061127d6040830184610fb4565b949350505050565b6020815260006112986020830184610fb4565b939250505056fe4c69624469616d6f6e644375743a2041646420666163657420686173206e6f20636f64654c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a205265706c61636520666163657420686173206e6f20636f6465a2646970667358221220556f6ee723a54cde862bfaa9d1c8524bd821adc488cdf63bae4b1f8300ba741264736f6c634300081100334c69624469616d6f6e644375743a2043616e2774207265706c6163652066756ec8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c4c69624469616d6f6e644375743a2041646420666163657420686173206e6f20636f64654c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a205265706c61636520666163657420686173206e6f20636f646500000000000000000000000009b34e69363d37379e1c5e27fc793fdb5aca893d000000000000000000000000cb0da433790ccec9e9157e08ea4e781bad68eb18000000000000000000000000b591adcb70c980f06f7dc9d96d1353838c3668e2

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

00000000000000000000000009b34e69363d37379e1c5e27fc793fdb5aca893d000000000000000000000000cb0da433790ccec9e9157e08ea4e781bad68eb18000000000000000000000000b591adcb70c980f06f7dc9d96d1353838c3668e2

-----Decoded View---------------
Arg [0] : contractOwner (address): 0x09B34e69363D37379e1C5e27fc793fDb5Aca893D
Arg [1] : diamondCutFacet (address): 0xCb0DA433790ccEC9E9157E08EA4e781baD68eB18
Arg [2] : diamondLoupeFacet (address): 0xb591aDCB70c980F06f7dC9D96D1353838c3668e2

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000009b34e69363d37379e1c5e27fc793fdb5aca893d
Arg [1] : 000000000000000000000000cb0da433790ccec9e9157e08ea4e781bad68eb18
Arg [2] : 000000000000000000000000b591adcb70c980f06f7dc9d96d1353838c3668e2


Deployed ByteCode Sourcemap

1019:1453:13:-:0;;;;;;;;1376:36:3;1664:7;;;;1654:18;;736:45:10;1654:18:3;;;;;;;;;736:45:10;;1638:36:3;;;1684:64;;;;;;;216:2:14;1684:64:3;;;198:21:14;;;235:18;;;228:30;294:34;274:18;;;267:62;346:18;;1684:64:3;;;;;;;;;1945:14;1942:1;1939;1926:34;2089:1;2086;2070:14;2067:1;2060:5;2053;2040:51;2161:16;2158:1;2155;2140:38;2265:6;2288:74;;;;2419:16;2416:1;2409:27;2288:74;2327:16;2324:1;2317:27;1836:264:10;1978:16;;;2004:28;;;1978:16;2004:28;;;;;;;;;2047:46;;736:45;;1978:16;;;;;;2047:46;;1900:25;;2047:46;1890:210;;1836:264;:::o;3012:1769::-;3249:16;;736:45;;3249:16;;;;;;3163:25;;3518:1;3502:17;:21;3498:227;;-1:-1:-1;3712:1:10;3695:18;;;3678:36;;;;:16;;;:36;;;;;;3498:227;3775:18;3770:452;3808:11;:18;3795:10;:31;3770:452;;;3876:266;3924:13;3955:12;3985:11;3997:10;3985:23;;;;;;;;:::i;:::-;;;;;;;:36;;;4039:11;4051:10;4039:23;;;;;;;;:::i;:::-;;;;;;;:30;;;4087:11;4099:10;4087:23;;;;;;;;:::i;:::-;;;;;;;:41;;;3876:30;:266::i;:::-;3844:298;;-1:-1:-1;3844:298:10;-1:-1:-1;4185:12:10;;3770:452;;;;4252:21;4235:13;:38;4231:109;;4289:16;;;:40;;;;;;;;;;4231:109;4501:1;4485:17;;:21;4481:190;;4643:1;4626:18;;;4609:36;;;;:16;;;:36;;;;;:51;;;4481:190;4685:41;4696:11;4709:5;4716:9;4685:41;;;;;;;;:::i;:::-;;;;;;;;4736:38;4757:5;4764:9;4736:20;:38::i;:::-;3153:1628;;;;3012:1769;;;:::o;1543:197::-;736:45;;1543:197::o;4787:7122::-;5028:7;;;736:45;5056:44;;5138:1;5118:10;:17;:21;5110:77;;;;;;;3953:2:14;5110:77:10;;;3935:21:14;3992:2;3972:18;;;3965:30;4031:34;4011:18;;;4004:62;4102:13;4082:18;;;4075:41;4133:19;;5110:77:10;3751:407:14;5110:77:10;5212:30;5201:7;:41;;;;;;;;:::i;:::-;;5197:6658;;5258:80;5281:16;5258:80;;;;;;;;;;;;;;;;;:22;:80::i;:::-;5357:21;5352:1370;5396:10;:17;5380:13;:33;5352:1370;;;5435:15;5453:10;5464:13;5453:25;;;;;;;;:::i;:::-;;;;;;;;;;;;5515:19;;;5496:16;5515:19;;;;;;;;;;;;5453:25;;-1:-1:-1;5560:26:10;;;;:40;5552:106;;;;;;;4365:2:14;5552:106:10;;;4347:21:14;4404:2;4384:18;;;4377:30;4443:34;4423:18;;;4416:62;4514:23;4494:18;;;4487:51;4555:19;;5552:106:10;4163:417:14;5552:106:10;5718:19;;;;5768:23;5718:19;;;;;;;;;;5740:51;:25;;;;:51;;;5718:73;;6006:25;6030:1;6006:25;;;;;6152:45;;;6150:48;6134:64;;;;6203:43;;;6133:114;;6329:29;;;6325:265;;6514:1;6496:19;;;6479:37;;;;:16;;;:37;;;;;:53;;;;6325:265;6607:16;;;;:::i;:::-;;-1:-1:-1;;6674:15:10;;;;;-1:-1:-1;5352:1370:10;;-1:-1:-1;;5352:1370:10;;;5197:6658;;;6753:34;6742:7;:45;;;;;;;;:::i;:::-;;6738:5117;;6803:84;6826:16;6803:84;;;;;;;;;;;;;;;;;:22;:84::i;:::-;6906:21;6901:903;6945:10;:17;6929:13;:33;6901:903;;;6984:15;7002:10;7013:13;7002:25;;;;;;;;:::i;:::-;;;;;;;;;;;;7064:19;;;7045:16;7064:19;;;;;;;;;;;;7002:25;;-1:-1:-1;7127:26:10;;;;7266:4;7239:32;;7231:92;;;;;;;5176:2:14;7231:92:10;;;5158:21:14;5215:2;5195:18;;;5188:30;5254:34;5234:18;;;5227:62;5325:17;5305:18;;;5298:45;5360:19;;7231:92:10;4974:411:14;7231:92:10;7368:16;7349:35;;:15;:35;;;7341:104;;;;;;;5592:2:14;7341:104:10;;;5574:21:14;5631:2;5611:18;;;5604:30;5670:34;5650:18;;;5643:62;5741:26;5721:18;;;5714:54;5785:19;;7341:104:10;5390:420:14;7341:104:10;7471:29;;;7463:98;;;;;;;6017:2:14;7463:98:10;;;5999:21:14;6056:2;6036:18;;;6029:30;6095:34;6075:18;;;6068:62;6166:26;6146:18;;;6139:54;6210:19;;7463:98:10;5815:420:14;7463:98:10;-1:-1:-1;7624:19:10;;;;2539:44;7624:19;;;;;;;;;;7646:59;7647:29;;;;7646:59;7680:25;;;;7646:59;;7624:81;;7756:15;;6901:903;;6738:5117;7835:33;7824:7;:44;;;;;;;;:::i;:::-;;7820:4035;;7892:30;;;;7884:97;;;;;;;6442:2:14;7884:97:10;;;6424:21:14;6481:2;6461:18;;;6454:30;6520:34;6500:18;;;6493:62;6591:24;6571:18;;;6564:52;6633:19;;7884:97:10;6240:418:14;7884:97:10;8132:1;8114:19;;;8287:1;8270:18;;8086:25;8302:3389;8346:10;:17;8330:13;:33;8302:3389;;;8406:1;8389:18;;;8385:315;;8476:19;;;;:::i;:::-;8533:35;;;;:16;;;:35;;;;;;;-1:-1:-1;8476:19:10;-1:-1:-1;8612:1:10;;-1:-1:-1;8385:315:10;;-1:-1:-1;8385:315:10;;8660:21;;;;:::i;:::-;;;;8385:315;8717:19;8754:29;8801:33;8943:15;8961:10;8972:13;8961:25;;;;;;;;:::i;:::-;;;;;;;;;;;;9027:19;;;9008:16;9027:19;;;;;;;;;;;;8961:25;;-1:-1:-1;9076:26:10;;;;9068:108;;;;;;;7066:2:14;9068:108:10;;;7048:21:14;7105:2;7085:18;;;7078:30;7144:34;7124:18;;;7117:62;7215:25;7195:18;;;7188:53;7258:19;;9068:108:10;6864:419:14;9068:108:10;9308:4;9270:26;;;;:43;9262:102;;;;;;;7490:2:14;9262:102:10;;;7472:21:14;7529:2;7509:18;;;7502:30;7568:34;7548:18;;;7541:62;7639:16;7619:18;;;7612:44;7673:19;;9262:102:10;7288:410:14;9262:102:10;9638:1;9615:24;;;9597:43;;;;-1:-1:-1;9667:24:10;;;;;;;;9663:238;;9854:23;;;:9;:23;;;;;;;;;;;;9812:66;;;9813:29;;9812:66;9786:92;;9663:238;9929:19;;;;;:9;:19;;;;;;;;;;9922:26;10191:1;10171:21;;;;;;-1:-1:-1;10444:1:10;10418:27;;;;-1:-1:-1;10485:42:10;;;10481:943;;10551:23;10577:39;;;:16;;;:39;;;;;;;10879:21;10801:48;;;10799:51;10781:69;;;10879:21;;;:50;;10780:150;11013:57;;10481:943;;;11379:25;11362:12;11354:21;;;:50;;11299:25;2644:17;2628:35;;11276:48;;11274:51;11258:13;:67;11257:148;11217:188;;10481:943;11445:19;11468:1;11445:24;11441:152;;11500:35;;;;:16;;;:35;;;;;11493:42;;;11500:35;-1:-1:-1;11441:152:10;-1:-1:-1;;;11643:15:10;;8302:3389;;;-1:-1:-1;11745:19:10;11721:21;:17;11741:1;11721:21;:::i;:::-;:43;;;;:::i;:::-;11704:60;;7870:3905;;7820:4035;;;11795:49;;;;;8208:2:14;11795:49:10;;;8190:21:14;8247:2;8227:18;;;8220:30;8286:34;8266:18;;;8259:62;8357:9;8337:18;;;8330:37;8384:19;;11795:49:10;8006:403:14;7820:4035:10;-1:-1:-1;11872:14:10;;11888:13;;-1:-1:-1;;;;;4787:7122:10:o;11915:742::-;12007:19;;;12003:56;;11915:742;;:::o;12003:56::-;12068:73;12091:5;12068:73;;;;;;;;;;;;;;;;;:22;:73::i;:::-;12160:12;12174:18;12196:5;:18;;12215:9;12196:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12159:66;;;;12240:7;12235:416;;12267:12;;:16;12263:378;;12449:5;12443:12;12499:15;12491:5;12487:2;12483:14;12476:39;12263:378;12609:5;12616:9;12578:48;;;;;;;;;;;;:::i;12263:378::-;11993:664;;11915:742;;:::o;12663:261::-;12836:22;;12903:13;12885:16;12877:40;;;;;;;;;;;;;:::i;375:184:14:-;427:77;424:1;417:88;524:4;521:1;514:15;548:4;545:1;538:15;696:184;748:77;745:1;738:88;845:4;842:1;835:15;869:4;866:1;859:15;885:250;970:1;980:113;994:6;991:1;988:13;980:113;;;1070:11;;;1064:18;1051:11;;;1044:39;1016:2;1009:10;980:113;;;-1:-1:-1;;1127:1:14;1109:16;;1102:27;885:250::o;1140:329::-;1181:3;1219:5;1213:12;1246:6;1241:3;1234:19;1262:76;1331:6;1324:4;1319:3;1315:14;1308:4;1301:5;1297:16;1262:76;:::i;:::-;1383:2;1371:15;1388:66;1367:88;1358:98;;;;1458:4;1354:109;;1140:329;-1:-1:-1;;1140:329:14:o;1474:2272::-;1740:4;1769:2;1809;1798:9;1794:18;1839:2;1828:9;1821:21;1862:6;1897;1891:13;1928:6;1920;1913:22;1954:3;1944:13;;1988:2;1977:9;1973:18;1966:25;;2050:2;2040:6;2037:1;2033:14;2022:9;2018:30;2014:39;2072:4;2111:2;2103:6;2099:15;2132:1;2142:1433;2156:6;2153:1;2150:13;2142:1433;;;2245:66;2233:9;2225:6;2221:22;2217:95;2212:3;2205:108;2342:6;2336:13;2388:2;2380:6;2376:15;2434:42;2429:2;2423:9;2419:58;2411:6;2404:74;2525:2;2521;2517:11;2511:18;2569:1;2555:12;2552:19;2542:227;;2613:77;2610:1;2603:88;2718:4;2715:1;2708:15;2750:4;2747:1;2740:15;2542:227;2789:15;;;2782:37;2842:4;2887:11;;;2881:18;2919:15;;;2912:27;;;3000:21;;3034:24;;;;3124:23;;;;-1:-1:-1;;3080:15:14;;;;3185:282;3201:8;3196:3;3193:17;3185:282;;;3282:15;;3299:66;3278:88;3264:103;;3436:17;;;;3229:1;3220:11;;;;;3393:14;;;;3185:282;;;-1:-1:-1;3553:12:14;;;;3490:5;-1:-1:-1;;;3518:15:14;;;;2178:1;2171:9;2142:1433;;;-1:-1:-1;;641:42:14;630:54;;3611:18;;;618:67;3668:22;;;3661:4;3646:20;;3639:52;3708:32;3672:6;3725;3708:32;:::i;:::-;3700:40;1474:2272;-1:-1:-1;;;;;;;;;;1474:2272:14:o;4585:184::-;4637:77;4634:1;4627:88;4734:4;4731:1;4724:15;4758:4;4755:1;4748:15;4774:195;4813:3;4844:66;4837:5;4834:77;4831:103;;4914:18;;:::i;:::-;-1:-1:-1;4961:1:14;4950:13;;4774:195::o;6663:196::-;6702:3;6730:5;6720:39;;6739:18;;:::i;:::-;-1:-1:-1;6786:66:14;6775:78;;6663:196::o;7703:168::-;7776:9;;;7807;;7824:15;;;7818:22;;7804:37;7794:71;;7845:18;;:::i;:::-;7703:168;;;;:::o;7876:125::-;7941:9;;;7962:10;;;7959:36;;;7975:18;;:::i;8414:287::-;8543:3;8581:6;8575:13;8597:66;8656:6;8651:3;8644:4;8636:6;8632:17;8597:66;:::i;:::-;8679:16;;;;;8414:287;-1:-1:-1;;8414:287:14:o;8706:337::-;8893:42;8885:6;8881:55;8870:9;8863:74;8973:2;8968;8957:9;8953:18;8946:30;8844:4;8993:44;9033:2;9022:9;9018:18;9010:6;8993:44;:::i;:::-;8985:52;8706:337;-1:-1:-1;;;;8706:337:14:o;9048:219::-;9197:2;9186:9;9179:21;9160:4;9217:44;9257:2;9246:9;9242:18;9234:6;9217:44;:::i;:::-;9209:52;9048:219;-1:-1:-1;;;9048:219:14:o

Swarm Source

ipfs://556f6ee723a54cde862bfaa9d1c8524bd821adc488cdf63bae4b1f8300ba7412

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.