ETH Price: $3,233.63 (-1.56%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
New Merkle Airdr...164505092023-01-20 20:49:59733 days ago1674247799IN
0xA82D527e...16e29F724
0 ETH0.0129498428.93218678
New Merkle Airdr...164505072023-01-20 20:49:35733 days ago1674247775IN
0xA82D527e...16e29F724
0 ETH0.0132893729.69076324
New Merkle Airdr...164505052023-01-20 20:49:11733 days ago1674247751IN
0xA82D527e...16e29F724
0 ETH0.0132925129.69777668
New Merkle Airdr...163481722023-01-06 13:54:35748 days ago1673013275IN
0xA82D527e...16e29F724
0 ETH0.0059595715.52938103
New Merkle Airdr...163481072023-01-06 13:41:23748 days ago1673012483IN
0xA82D527e...16e29F724
0 ETH0.0071606415.99768335
New Merkle Airdr...161332762022-12-07 13:59:11778 days ago1670421551IN
0xA82D527e...16e29F724
0 ETH0.0063595714.20801073
New Merkle Airdr...161332742022-12-07 13:58:47778 days ago1670421527IN
0xA82D527e...16e29F724
0 ETH0.0066571714.87288182
New Merkle Airdr...161332732022-12-07 13:58:35778 days ago1670421515IN
0xA82D527e...16e29F724
0 ETH0.00679115.17187898
New Merkle Airdr...158708272022-10-31 21:49:23814 days ago1667252963IN
0xA82D527e...16e29F724
0 ETH0.0087465819.54084817
New Merkle Airdr...158708252022-10-31 21:48:59814 days ago1667252939IN
0xA82D527e...16e29F724
0 ETH0.0089726920.04601965
New Merkle Airdr...158708242022-10-31 21:48:47814 days ago1667252927IN
0xA82D527e...16e29F724
0 ETH0.0088262419.71882011
New Merkle Airdr...156480862022-09-30 18:57:11845 days ago1664564231IN
0xA82D527e...16e29F724
0 ETH0.006012713.43305113
New Merkle Airdr...156480352022-09-30 18:46:59845 days ago1664563619IN
0xA82D527e...16e29F724
0 ETH0.0065480814.62916521
New Merkle Airdr...156480112022-09-30 18:42:11845 days ago1664563331IN
0xA82D527e...16e29F724
0 ETH0.0101889414.83119703

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
164505092023-01-20 20:49:59733 days ago1674247799
0xA82D527e...16e29F724
 Contract Creation0 ETH
164505092023-01-20 20:49:59733 days ago1674247799
0xA82D527e...16e29F724
 Contract Creation0 ETH
164505072023-01-20 20:49:35733 days ago1674247775
0xA82D527e...16e29F724
 Contract Creation0 ETH
164505072023-01-20 20:49:35733 days ago1674247775
0xA82D527e...16e29F724
 Contract Creation0 ETH
164505052023-01-20 20:49:11733 days ago1674247751
0xA82D527e...16e29F724
 Contract Creation0 ETH
164505052023-01-20 20:49:11733 days ago1674247751
0xA82D527e...16e29F724
 Contract Creation0 ETH
163481722023-01-06 13:54:35748 days ago1673013275
0xA82D527e...16e29F724
 Contract Creation0 ETH
163481722023-01-06 13:54:35748 days ago1673013275
0xA82D527e...16e29F724
 Contract Creation0 ETH
163481072023-01-06 13:41:23748 days ago1673012483
0xA82D527e...16e29F724
 Contract Creation0 ETH
163481072023-01-06 13:41:23748 days ago1673012483
0xA82D527e...16e29F724
 Contract Creation0 ETH
161332762022-12-07 13:59:11778 days ago1670421551
0xA82D527e...16e29F724
 Contract Creation0 ETH
161332762022-12-07 13:59:11778 days ago1670421551
0xA82D527e...16e29F724
 Contract Creation0 ETH
161332742022-12-07 13:58:47778 days ago1670421527
0xA82D527e...16e29F724
 Contract Creation0 ETH
161332742022-12-07 13:58:47778 days ago1670421527
0xA82D527e...16e29F724
 Contract Creation0 ETH
161332732022-12-07 13:58:35778 days ago1670421515
0xA82D527e...16e29F724
 Contract Creation0 ETH
161332732022-12-07 13:58:35778 days ago1670421515
0xA82D527e...16e29F724
 Contract Creation0 ETH
158708272022-10-31 21:49:23814 days ago1667252963
0xA82D527e...16e29F724
 Contract Creation0 ETH
158708272022-10-31 21:49:23814 days ago1667252963
0xA82D527e...16e29F724
 Contract Creation0 ETH
158708252022-10-31 21:48:59814 days ago1667252939
0xA82D527e...16e29F724
 Contract Creation0 ETH
158708252022-10-31 21:48:59814 days ago1667252939
0xA82D527e...16e29F724
 Contract Creation0 ETH
158708242022-10-31 21:48:47814 days ago1667252927
0xA82D527e...16e29F724
 Contract Creation0 ETH
158708242022-10-31 21:48:47814 days ago1667252927
0xA82D527e...16e29F724
 Contract Creation0 ETH
156480862022-09-30 18:57:11845 days ago1664564231
0xA82D527e...16e29F724
 Contract Creation0 ETH
156480862022-09-30 18:57:11845 days ago1664564231
0xA82D527e...16e29F724
 Contract Creation0 ETH
156480352022-09-30 18:46:59845 days ago1664563619
0xA82D527e...16e29F724
 Contract Creation0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MerkleProofAirdropFactory

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 5 : MerkleAirdropFactory.sol
//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
import "@openzeppelin/contracts/proxy/Clones.sol";

interface IClonableWhitelistReference {
  function initialize(bytes32 merkleRoot) external;
}

interface IClonableAirdropMinimal1155Reference {
  function initialize(
    address merkleProofWhitelist,
    address tokenContract,
    uint256 tokenId,
    uint256 startTime,
    uint256 endTime,
    address admin,
    address payout
  ) external;
}

interface IClonableERC1155Reference {
    function initialize(
        string memory tokenName,
        string memory tokenSymbol,
        string memory tokenURI,
        address admin,
        address factory,
        address minter
    ) external;
    function grantRole(
        bytes32 role,
        address account
    ) external;
    function setTokenURI(
        uint256 _tokenId,
        string memory _tokenURI
    ) external;
    function tokenIdToURI(
        uint256 _tokenId
    ) external returns (string memory);
}

contract MerkleProofAirdropFactory is Ownable {

    event NewMerkle1155AirdropClone(
        uint256 indexed id,
        address indexed referenceContract,
        address indexed airdropClone,
        address merkleProofWhitelist,
        uint256 startTime,
        uint256 endTime
    );

    event NewMerkleWhitelistClone(
        address indexed referenceContract,
        address indexed merkleProofWhitelistClone
    );

    event NewERC1155Clone(
        address indexed referenceContract,
        address indexed erc1155Clone
    );

    event SetClonableAirdropReferenceValidity(
        address indexed referenceContract,
        bool validity
    );

    event SetClonableWhitelistReferenceValidity(
        address indexed referenceContract,
        bool validity
    );

    event SetClonableERC1155ReferenceValidity(
        address indexed referenceContract,
        bool validity
    );

    mapping(address => bool) public validClonableERC1155References;
    mapping(address => bool) public validClonableAirdropReferences;
    mapping(address => bool) public validClonableWhitelistReferences;

    bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");

    // Controlled variables
    using Counters for Counters.Counter;
    Counters.Counter private _airdropIds;

    constructor(
        address _clonableERC1155,
        address _clonableMerkleAirdrop,
        address _clonableMerkleWhitelist
    ) {
        validClonableERC1155References[_clonableERC1155] = true;
        validClonableAirdropReferences[_clonableMerkleAirdrop] = true;
        validClonableWhitelistReferences[_clonableMerkleWhitelist] = true;
        emit SetClonableERC1155ReferenceValidity(_clonableERC1155, true);
        emit SetClonableWhitelistReferenceValidity(_clonableMerkleWhitelist, true);
        emit SetClonableAirdropReferenceValidity(_clonableMerkleAirdrop, true);
    }

    function newMerkleAirdrop(
        address _airdropReferenceContract,
        address _whitelistContract,
        address _tokenContract,
        uint256 _tokenId,
        uint256 _startTime,
        uint256 _endTime,
        address _admin,
        address _payout
    ) external onlyOwner {
        require(validClonableAirdropReferences[_airdropReferenceContract], "INVALID_AIRDROP_REFERENCE_CONTRACT");
        _airdropIds.increment();
        uint256 newAirdropId = _airdropIds.current();
        // Deploy new airdrop contract
        address newAirdropCloneAddress = Clones.clone(_airdropReferenceContract);
        IClonableAirdropMinimal1155Reference newAirdropClone = IClonableAirdropMinimal1155Reference(newAirdropCloneAddress);
        newAirdropClone.initialize(_whitelistContract, _tokenContract, _tokenId, _startTime, _endTime, _admin, _payout);
        emit NewMerkle1155AirdropClone(newAirdropId, _airdropReferenceContract, newAirdropCloneAddress, _whitelistContract, _startTime, _endTime);
        // Set the airdrop contract as a minter of the NFT contract
        IClonableERC1155Reference existingERC1155Clone = IClonableERC1155Reference(_tokenContract);
        existingERC1155Clone.grantRole(MINTER_ROLE, newAirdropCloneAddress);
    }

    function newMerkleWhitelist(
        address _whitelistReferenceContract,
        bytes32 _merkleRoot
    ) external onlyOwner {
        require(validClonableWhitelistReferences[_whitelistReferenceContract], "INVALID_WHITELIST_REFERENCE_CONTRACT");
        // Deploy new whitelist contract
        address newWhitelistCloneAddress = Clones.clone(_whitelistReferenceContract);
        IClonableWhitelistReference newWhitelistClone = IClonableWhitelistReference(newWhitelistCloneAddress);
        newWhitelistClone.initialize(_merkleRoot);
        emit NewMerkleWhitelistClone(_whitelistReferenceContract, newWhitelistCloneAddress);
    }

    function newERC1155(
        address _erc1155ReferenceContract,
        string memory _tokenName,
        string memory _tokenSymbol,
        string memory _tokenURI,
        address _admin,
        address _minter
    ) external onlyOwner {
        require(validClonableERC1155References[_erc1155ReferenceContract], "INVALID_ERC1155_REFERENCE_CONTRACT");
        // Deploy new ERC1155 contract
        address newERC1155CloneAddress = Clones.clone(_erc1155ReferenceContract);
        IClonableERC1155Reference newERC1155Clone = IClonableERC1155Reference(newERC1155CloneAddress);
        newERC1155Clone.initialize(
            _tokenName,
            _tokenSymbol,
            _tokenURI,
            _admin,
            address(this),
            _minter
        );
        emit NewERC1155Clone(_erc1155ReferenceContract, newERC1155CloneAddress);
    }

    function newMerkleAirdropAndWhitelist(
        address _airdropReferenceContract,
        address _whitelistReferenceContract,
        bytes32 _merkleRoot,
        uint256 _startTime,
        uint256 _endTime,
        address _tokenContract,
        uint256 _tokenId,
        string memory _tokenURI,
        address _admin,
        address _payout
    ) external onlyOwner {
        require(validClonableAirdropReferences[_airdropReferenceContract], "INVALID_AIRDROP_REFERENCE_CONTRACT");
        require(validClonableWhitelistReferences[_whitelistReferenceContract], "INVALID_WHITELIST_REFERENCE_CONTRACT");
        _airdropIds.increment();
        uint256 newAirdropId = _airdropIds.current();
        // Deploy new whitelist contract
        address newWhitelistCloneAddress = cloneAndInitWhitelist(_whitelistReferenceContract, _merkleRoot);
        // Deploy new airdrop contract
        address newAirdropCloneAddress = Clones.clone(_airdropReferenceContract);
        initAirdropClone(newAirdropCloneAddress, newWhitelistCloneAddress, _tokenContract, _tokenId, _startTime, _endTime, _admin, _payout);
        emit NewMerkle1155AirdropClone(newAirdropId, _airdropReferenceContract, newAirdropCloneAddress, newWhitelistCloneAddress, _startTime, _endTime);
        // Set the airdrop contract as a minter of the NFT contract
        IClonableERC1155Reference existingERC1155Clone = IClonableERC1155Reference(_tokenContract);
        existingERC1155Clone.grantRole(MINTER_ROLE, newAirdropCloneAddress);
        // Set the tokenURI of the new token ID if there isn't one set already
        if(keccak256(bytes(existingERC1155Clone.tokenIdToURI(_tokenId))) == keccak256(bytes(""))) {
            existingERC1155Clone.setTokenURI(_tokenId, _tokenURI);
        }
    }

    function newMerkleAirdropAndWhitelistAndERC1155(
        address _airdropReferenceContract,
        address _whitelistReferenceContract,
        address _erc1155ReferenceContract,
        bytes32 _merkleRoot,
        uint256 _startTime,
        uint256 _endTime,
        string memory _tokenName,
        string memory _tokenSymbol,
        string memory _tokenURI,
        address _airdropAdminAndTempTokenAdmin,
        address _payout
    ) external onlyOwner {
        require(validClonableAirdropReferences[_airdropReferenceContract], "INVALID_AIRDROP_REFERENCE_CONTRACT");
        _airdropIds.increment();
        uint256 newAirdropId = _airdropIds.current();
        // Deploy new airdrop contract
        address newAirdropCloneAddress = Clones.clone(_airdropReferenceContract);
        // Deploy and init new whitelist contract
        address newWhitelistCloneAddress = cloneAndInitWhitelist(_whitelistReferenceContract, _merkleRoot);
        // Deploy and init new ERC1155 contract
        address newERC1155CloneAddress = cloneAndInitERC1155(
            _erc1155ReferenceContract,
            _tokenName,
            _tokenSymbol,
            _tokenURI,
            _airdropAdminAndTempTokenAdmin,
            newAirdropCloneAddress
        );
        // Initialize new airdrop contract
        initAirdropClone(newAirdropCloneAddress, newWhitelistCloneAddress, newERC1155CloneAddress, 1, _startTime, _endTime, _airdropAdminAndTempTokenAdmin, _payout);
        emit NewMerkle1155AirdropClone(newAirdropId, _airdropReferenceContract, newAirdropCloneAddress, newWhitelistCloneAddress, _startTime, _endTime);
    }

    function setClonableAirdropReferenceValidity(
        address _airdropReferenceContract,
        bool _validity
    ) external onlyOwner {
        validClonableAirdropReferences[_airdropReferenceContract] = _validity;
        emit SetClonableAirdropReferenceValidity(_airdropReferenceContract, _validity);
    }

    function setClonableWhitelistReferenceValidity(
        address _whitelistReferenceContract,
        bool _validity
    ) external onlyOwner {
        validClonableWhitelistReferences[_whitelistReferenceContract] = _validity;
        emit SetClonableWhitelistReferenceValidity(_whitelistReferenceContract, _validity);
    }

    function setClonableERC1155ReferenceValidity(
        address _erc1155ReferenceContract,
        bool _validity
    ) external onlyOwner {
        validClonableERC1155References[_erc1155ReferenceContract] = _validity;
        emit SetClonableERC1155ReferenceValidity(_erc1155ReferenceContract, _validity);
    }

    // Internal functions

    function initAirdropClone(
        address _clone,
        address _merkleProofWhitelist,
        address _tokenContract,
        uint256 _tokenId,
        uint256 _startTime,
        uint256 _endTime,
        address _admin,
        address _payout
    ) internal {
        IClonableAirdropMinimal1155Reference newAirdropClone = IClonableAirdropMinimal1155Reference(_clone);
        newAirdropClone.initialize(_merkleProofWhitelist, _tokenContract, _tokenId, _startTime, _endTime, _admin, _payout);
    }

    function cloneAndInitWhitelist(
        address _whitelistReferenceContract,
        bytes32 _merkleRoot
    ) internal returns (address) {
        require(validClonableWhitelistReferences[_whitelistReferenceContract], "INVALID_WHITELIST_REFERENCE_CONTRACT");
        // Deploy new whitelist contract
        address newWhitelistCloneAddress = Clones.clone(_whitelistReferenceContract);
        // Initialize new whitelist contract
        IClonableWhitelistReference newWhitelistClone = IClonableWhitelistReference(newWhitelistCloneAddress);
        newWhitelistClone.initialize(_merkleRoot);
        emit NewMerkleWhitelistClone(_whitelistReferenceContract, newWhitelistCloneAddress);
        return newWhitelistCloneAddress;
    }

    function cloneAndInitERC1155(
        address _erc1155ReferenceContract,
        string memory _tokenName,
        string memory _tokenSymbol,
        string memory _tokenURI,
        address _tokenAdmin,
        address _airdropCloneAddress
    ) internal returns (address) {
        require(validClonableERC1155References[_erc1155ReferenceContract], "INVALID_ERC1155_REFERENCE_CONTRACT");
        // Deploy new ERC1155 contract
        address newERC1155CloneAddress = Clones.clone(_erc1155ReferenceContract);
        // Initialize new ERC1155 contract
        IClonableERC1155Reference newERC1155Clone = IClonableERC1155Reference(newERC1155CloneAddress);
        newERC1155Clone.initialize(
            _tokenName,
            _tokenSymbol,
            _tokenURI,
            _tokenAdmin,
            address(this),
            _airdropCloneAddress
        );
        emit NewERC1155Clone(_erc1155ReferenceContract, newERC1155CloneAddress);
        return newERC1155CloneAddress;
    }

}

File 2 of 5 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 3 of 5 : Counters.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

File 4 of 5 : Clones.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (proxy/Clones.sol)

pragma solidity ^0.8.0;

/**
 * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for
 * deploying minimal proxy contracts, also known as "clones".
 *
 * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies
 * > a minimal bytecode implementation that delegates all calls to a known, fixed address.
 *
 * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`
 * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the
 * deterministic method.
 *
 * _Available since v3.4._
 */
library Clones {
    /**
     * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.
     *
     * This function uses the create opcode, which should never revert.
     */
    function clone(address implementation) internal returns (address instance) {
        /// @solidity memory-safe-assembly
        assembly {
            let ptr := mload(0x40)
            mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)
            mstore(add(ptr, 0x14), shl(0x60, implementation))
            mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)
            instance := create(0, ptr, 0x37)
        }
        require(instance != address(0), "ERC1167: create failed");
    }

    /**
     * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.
     *
     * This function uses the create2 opcode and a `salt` to deterministically deploy
     * the clone. Using the same `implementation` and `salt` multiple time will revert, since
     * the clones cannot be deployed twice at the same address.
     */
    function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {
        /// @solidity memory-safe-assembly
        assembly {
            let ptr := mload(0x40)
            mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)
            mstore(add(ptr, 0x14), shl(0x60, implementation))
            mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)
            instance := create2(0, ptr, 0x37, salt)
        }
        require(instance != address(0), "ERC1167: create2 failed");
    }

    /**
     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.
     */
    function predictDeterministicAddress(
        address implementation,
        bytes32 salt,
        address deployer
    ) internal pure returns (address predicted) {
        /// @solidity memory-safe-assembly
        assembly {
            let ptr := mload(0x40)
            mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)
            mstore(add(ptr, 0x14), shl(0x60, implementation))
            mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)
            mstore(add(ptr, 0x38), shl(0x60, deployer))
            mstore(add(ptr, 0x4c), salt)
            mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))
            predicted := keccak256(add(ptr, 0x37), 0x55)
        }
    }

    /**
     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.
     */
    function predictDeterministicAddress(address implementation, bytes32 salt)
        internal
        view
        returns (address predicted)
    {
        return predictDeterministicAddress(implementation, salt, address(this));
    }
}

File 5 of 5 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_clonableERC1155","type":"address"},{"internalType":"address","name":"_clonableMerkleAirdrop","type":"address"},{"internalType":"address","name":"_clonableMerkleWhitelist","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"referenceContract","type":"address"},{"indexed":true,"internalType":"address","name":"erc1155Clone","type":"address"}],"name":"NewERC1155Clone","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"address","name":"referenceContract","type":"address"},{"indexed":true,"internalType":"address","name":"airdropClone","type":"address"},{"indexed":false,"internalType":"address","name":"merkleProofWhitelist","type":"address"},{"indexed":false,"internalType":"uint256","name":"startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"NewMerkle1155AirdropClone","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"referenceContract","type":"address"},{"indexed":true,"internalType":"address","name":"merkleProofWhitelistClone","type":"address"}],"name":"NewMerkleWhitelistClone","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"referenceContract","type":"address"},{"indexed":false,"internalType":"bool","name":"validity","type":"bool"}],"name":"SetClonableAirdropReferenceValidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"referenceContract","type":"address"},{"indexed":false,"internalType":"bool","name":"validity","type":"bool"}],"name":"SetClonableERC1155ReferenceValidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"referenceContract","type":"address"},{"indexed":false,"internalType":"bool","name":"validity","type":"bool"}],"name":"SetClonableWhitelistReferenceValidity","type":"event"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_erc1155ReferenceContract","type":"address"},{"internalType":"string","name":"_tokenName","type":"string"},{"internalType":"string","name":"_tokenSymbol","type":"string"},{"internalType":"string","name":"_tokenURI","type":"string"},{"internalType":"address","name":"_admin","type":"address"},{"internalType":"address","name":"_minter","type":"address"}],"name":"newERC1155","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_airdropReferenceContract","type":"address"},{"internalType":"address","name":"_whitelistContract","type":"address"},{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_startTime","type":"uint256"},{"internalType":"uint256","name":"_endTime","type":"uint256"},{"internalType":"address","name":"_admin","type":"address"},{"internalType":"address","name":"_payout","type":"address"}],"name":"newMerkleAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_airdropReferenceContract","type":"address"},{"internalType":"address","name":"_whitelistReferenceContract","type":"address"},{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"},{"internalType":"uint256","name":"_startTime","type":"uint256"},{"internalType":"uint256","name":"_endTime","type":"uint256"},{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_tokenURI","type":"string"},{"internalType":"address","name":"_admin","type":"address"},{"internalType":"address","name":"_payout","type":"address"}],"name":"newMerkleAirdropAndWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_airdropReferenceContract","type":"address"},{"internalType":"address","name":"_whitelistReferenceContract","type":"address"},{"internalType":"address","name":"_erc1155ReferenceContract","type":"address"},{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"},{"internalType":"uint256","name":"_startTime","type":"uint256"},{"internalType":"uint256","name":"_endTime","type":"uint256"},{"internalType":"string","name":"_tokenName","type":"string"},{"internalType":"string","name":"_tokenSymbol","type":"string"},{"internalType":"string","name":"_tokenURI","type":"string"},{"internalType":"address","name":"_airdropAdminAndTempTokenAdmin","type":"address"},{"internalType":"address","name":"_payout","type":"address"}],"name":"newMerkleAirdropAndWhitelistAndERC1155","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_whitelistReferenceContract","type":"address"},{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"newMerkleWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_airdropReferenceContract","type":"address"},{"internalType":"bool","name":"_validity","type":"bool"}],"name":"setClonableAirdropReferenceValidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_erc1155ReferenceContract","type":"address"},{"internalType":"bool","name":"_validity","type":"bool"}],"name":"setClonableERC1155ReferenceValidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_whitelistReferenceContract","type":"address"},{"internalType":"bool","name":"_validity","type":"bool"}],"name":"setClonableWhitelistReferenceValidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"validClonableAirdropReferences","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"validClonableERC1155References","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"validClonableWhitelistReferences","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506040516200275e3803806200275e83398181016040528101906200003791906200033d565b620000576200004b6200025a60201b60201c565b6200026260201b60201c565b60018060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508273ffffffffffffffffffffffffffffffffffffffff167f816dd9d542e01163481293817da72fd7b35224cec934994070e574c8cf5236aa6001604051620001a79190620003a4565b60405180910390a28073ffffffffffffffffffffffffffffffffffffffff167f01fb9eb94f5bf0326f3d3d631427bac351c72601d541d777c3c3a0da382c9f216001604051620001f89190620003a4565b60405180910390a28173ffffffffffffffffffffffffffffffffffffffff167f3f459b5bacdd0024431150f62c0a086931fc501d4f56ce728e8657226f85b03d6001604051620002499190620003a4565b60405180910390a25050506200041b565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050620003378162000401565b92915050565b6000806000606084860312156200035357600080fd5b6000620003638682870162000326565b9350506020620003768682870162000326565b9250506040620003898682870162000326565b9150509250925092565b6200039e81620003d5565b82525050565b6000602082019050620003bb600083018462000393565b92915050565b6000620003ce82620003e1565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6200040c81620003c1565b81146200041857600080fd5b50565b612333806200042b6000396000f3fe608060405234801561001057600080fd5b50600436106100f45760003560e01c80637d7fc26c11610097578063d18a70a911610066578063d18a70a914610259578063d539139314610275578063eeabfbb314610293578063f2fde38b146102af576100f4565b80637d7fc26c146101e757806386a8a1cc146102035780638cc3cdd61461021f5780638da5cb5b1461023b576100f4565b806319d5e7f4116100d357806319d5e7f414610175578063258f185f146101a557806368fc97bc146101c1578063715018a6146101dd576100f4565b80625adc09146100f9578063176940b114610129578063199d0b0214610159575b600080fd5b610113600480360381019061010e9190611724565b6102cb565b6040516101209190611dbc565b60405180910390f35b610143600480360381019061013e9190611724565b6102eb565b6040516101509190611dbc565b60405180910390f35b610173600480360381019061016e9190611a2a565b61030b565b005b61018f600480360381019061018a9190611724565b6103bc565b60405161019c9190611dbc565b60405180910390f35b6101bf60048036038101906101ba9190611a66565b6103dc565b005b6101db60048036038101906101d69190611a2a565b61054d565b005b6101e56105fe565b005b61020160048036038101906101fc919061174d565b610612565b005b61021d60048036038101906102189190611885565b610777565b005b61023960048036038101906102349190611a2a565b6109b6565b005b610243610a67565b6040516102509190611cfb565b60405180910390f35b610273600480360381019061026e9190611aa2565b610a90565b005b61027d610c0f565b60405161028a9190611dd7565b60405180910390f35b6102ad60048036038101906102a89190611937565b610c33565b005b6102c960048036038101906102c49190611724565b610fc4565b005b60036020528060005260406000206000915054906101000a900460ff1681565b60026020528060005260406000206000915054906101000a900460ff1681565b610313611048565b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f3f459b5bacdd0024431150f62c0a086931fc501d4f56ce728e8657226f85b03d826040516103b09190611dbc565b60405180910390a25050565b60016020528060005260406000206000915054906101000a900460ff1681565b6103e4611048565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046790611ed1565b60405180910390fd5b600061047b836110c6565b905060008190508073ffffffffffffffffffffffffffffffffffffffff16639498bd71846040518263ffffffff1660e01b81526004016104bb9190611dd7565b600060405180830381600087803b1580156104d557600080fd5b505af11580156104e9573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f587ab8bc0e067435569ec0b3e95f4367351c426d88e05bc9eca7e3d53cb0934760405160405180910390a350505050565b610555611048565b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f01fb9eb94f5bf0326f3d3d631427bac351c72601d541d777c3c3a0da382c9f21826040516105f29190611dbc565b60405180910390a25050565b610606611048565b610610600061119b565b565b61061a611048565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166106a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069d90611f31565b60405180910390fd5b6106b0600461125f565b60006106bc6004611275565b905060006106c98d6110c6565b905060006106d78d8c611283565b905060006106e98d8a8a8a8a886113f3565b90506106fc83838360018f8f8c8c611571565b8273ffffffffffffffffffffffffffffffffffffffff168f73ffffffffffffffffffffffffffffffffffffffff16857f967fbe3c17b0d8a6ffaa17cca693b89857aa034f630b7911e6b45acf2f3631cf858f8f60405161075e93929190611d85565b60405180910390a4505050505050505050505050505050565b61077f611048565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661080b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080290611f31565b60405180910390fd5b610815600461125f565b60006108216004611275565b9050600061082e8a6110c6565b905060008190508073ffffffffffffffffffffffffffffffffffffffff16630729da0b8b8b8b8b8b8b8b6040518863ffffffff1660e01b815260040161087a9796959493929190611d16565b600060405180830381600087803b15801561089457600080fd5b505af11580156108a8573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16847f967fbe3c17b0d8a6ffaa17cca693b89857aa034f630b7911e6b45acf2f3631cf8d8b8b60405161090e93929190611d85565b60405180910390a460008990508073ffffffffffffffffffffffffffffffffffffffff16632f2ff15d7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6856040518363ffffffff1660e01b8152600401610976929190611df2565b600060405180830381600087803b15801561099057600080fd5b505af11580156109a4573d6000803e3d6000fd5b50505050505050505050505050505050565b6109be611048565b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f816dd9d542e01163481293817da72fd7b35224cec934994070e574c8cf5236aa82604051610a5b9190611dbc565b60405180910390a25050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610a98611048565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1b90611e91565b60405180910390fd5b6000610b2f876110c6565b905060008190508073ffffffffffffffffffffffffffffffffffffffff16639630c8ac8888888830896040518763ffffffff1660e01b8152600401610b7996959493929190611e1b565b600060405180830381600087803b158015610b9357600080fd5b505af1158015610ba7573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f7d610b3a75a2d62f1759d393489506232d0d94b8f72df7519d2e881e9fc3bbf060405160405180910390a35050505050505050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610c3b611048565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbe90611f31565b60405180910390fd5b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4a90611ed1565b60405180910390fd5b610d5d600461125f565b6000610d696004611275565b90506000610d778b8b611283565b90506000610d848d6110c6565b9050610d9681838a8a8e8e8b8b611571565b8073ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff16847f967fbe3c17b0d8a6ffaa17cca693b89857aa034f630b7911e6b45acf2f3631cf858e8e604051610df893929190611d85565b60405180910390a460008890508073ffffffffffffffffffffffffffffffffffffffff16632f2ff15d7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6846040518363ffffffff1660e01b8152600401610e60929190611df2565b600060405180830381600087803b158015610e7a57600080fd5b505af1158015610e8e573d6000803e3d6000fd5b5050505060405180602001604052806000815250805190602001208173ffffffffffffffffffffffffffffffffffffffff16630221e7858a6040518263ffffffff1660e01b8152600401610ee29190611f51565b600060405180830381600087803b158015610efc57600080fd5b505af1158015610f10573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610f399190611b73565b805190602001201415610fb4578073ffffffffffffffffffffffffffffffffffffffff1663162094c489896040518363ffffffff1660e01b8152600401610f81929190611f6c565b600060405180830381600087803b158015610f9b57600080fd5b505af1158015610faf573d6000803e3d6000fd5b505050505b5050505050505050505050505050565b610fcc611048565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561103c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103390611eb1565b60405180910390fd5b6110458161119b565b50565b6110506115f8565b73ffffffffffffffffffffffffffffffffffffffff1661106e610a67565b73ffffffffffffffffffffffffffffffffffffffff16146110c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bb90611f11565b60405180910390fd5b565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f0915050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118d90611ef1565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001816000016000828254019250508190555050565b600081600001549050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130890611ed1565b60405180910390fd5b600061131c846110c6565b905060008190508073ffffffffffffffffffffffffffffffffffffffff16639498bd71856040518263ffffffff1660e01b815260040161135c9190611dd7565b600060405180830381600087803b15801561137657600080fd5b505af115801561138a573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f587ab8bc0e067435569ec0b3e95f4367351c426d88e05bc9eca7e3d53cb0934760405160405180910390a3819250505092915050565b6000600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611481576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147890611e91565b60405180910390fd5b600061148c886110c6565b905060008190508073ffffffffffffffffffffffffffffffffffffffff16639630c8ac89898989308a6040518763ffffffff1660e01b81526004016114d696959493929190611e1b565b600060405180830381600087803b1580156114f057600080fd5b505af1158015611504573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f7d610b3a75a2d62f1759d393489506232d0d94b8f72df7519d2e881e9fc3bbf060405160405180910390a381925050509695505050505050565b60008890508073ffffffffffffffffffffffffffffffffffffffff16630729da0b898989898989896040518863ffffffff1660e01b81526004016115bb9796959493929190611d16565b600060405180830381600087803b1580156115d557600080fd5b505af11580156115e9573d6000803e3d6000fd5b50505050505050505050505050565b600033905090565b600061161361160e84611fc1565b611f9c565b90508281526020810184848401111561162b57600080fd5b611636848285612060565b509392505050565b600061165161164c84611fc1565b611f9c565b90508281526020810184848401111561166957600080fd5b61167484828561206f565b509392505050565b60008135905061168b816122a1565b92915050565b6000813590506116a0816122b8565b92915050565b6000813590506116b5816122cf565b92915050565b600082601f8301126116cc57600080fd5b81356116dc848260208601611600565b91505092915050565b600082601f8301126116f657600080fd5b815161170684826020860161163e565b91505092915050565b60008135905061171e816122e6565b92915050565b60006020828403121561173657600080fd5b60006117448482850161167c565b91505092915050565b60008060008060008060008060008060006101608c8e03121561176f57600080fd5b600061177d8e828f0161167c565b9b5050602061178e8e828f0161167c565b9a5050604061179f8e828f0161167c565b99505060606117b08e828f016116a6565b98505060806117c18e828f0161170f565b97505060a06117d28e828f0161170f565b96505060c08c013567ffffffffffffffff8111156117ef57600080fd5b6117fb8e828f016116bb565b95505060e08c013567ffffffffffffffff81111561181857600080fd5b6118248e828f016116bb565b9450506101008c013567ffffffffffffffff81111561184257600080fd5b61184e8e828f016116bb565b9350506101206118608e828f0161167c565b9250506101406118728e828f0161167c565b9150509295989b509295989b9093969950565b600080600080600080600080610100898b0312156118a257600080fd5b60006118b08b828c0161167c565b98505060206118c18b828c0161167c565b97505060406118d28b828c0161167c565b96505060606118e38b828c0161170f565b95505060806118f48b828c0161170f565b94505060a06119058b828c0161170f565b93505060c06119168b828c0161167c565b92505060e06119278b828c0161167c565b9150509295985092959890939650565b6000806000806000806000806000806101408b8d03121561195757600080fd5b60006119658d828e0161167c565b9a505060206119768d828e0161167c565b99505060406119878d828e016116a6565b98505060606119988d828e0161170f565b97505060806119a98d828e0161170f565b96505060a06119ba8d828e0161167c565b95505060c06119cb8d828e0161170f565b94505060e08b013567ffffffffffffffff8111156119e857600080fd5b6119f48d828e016116bb565b935050610100611a068d828e0161167c565b925050610120611a188d828e0161167c565b9150509295989b9194979a5092959850565b60008060408385031215611a3d57600080fd5b6000611a4b8582860161167c565b9250506020611a5c85828601611691565b9150509250929050565b60008060408385031215611a7957600080fd5b6000611a878582860161167c565b9250506020611a98858286016116a6565b9150509250929050565b60008060008060008060c08789031215611abb57600080fd5b6000611ac989828a0161167c565b965050602087013567ffffffffffffffff811115611ae657600080fd5b611af289828a016116bb565b955050604087013567ffffffffffffffff811115611b0f57600080fd5b611b1b89828a016116bb565b945050606087013567ffffffffffffffff811115611b3857600080fd5b611b4489828a016116bb565b9350506080611b5589828a0161167c565b92505060a0611b6689828a0161167c565b9150509295509295509295565b600060208284031215611b8557600080fd5b600082015167ffffffffffffffff811115611b9f57600080fd5b611bab848285016116e5565b91505092915050565b611bbd8161200e565b82525050565b611bcc81612020565b82525050565b611bdb8161202c565b82525050565b6000611bec82611ff2565b611bf68185611ffd565b9350611c0681856020860161206f565b611c0f81612102565b840191505092915050565b6000611c27602283611ffd565b9150611c3282612113565b604082019050919050565b6000611c4a602683611ffd565b9150611c5582612162565b604082019050919050565b6000611c6d602483611ffd565b9150611c78826121b1565b604082019050919050565b6000611c90601683611ffd565b9150611c9b82612200565b602082019050919050565b6000611cb3602083611ffd565b9150611cbe82612229565b602082019050919050565b6000611cd6602283611ffd565b9150611ce182612252565b604082019050919050565b611cf581612056565b82525050565b6000602082019050611d106000830184611bb4565b92915050565b600060e082019050611d2b600083018a611bb4565b611d386020830189611bb4565b611d456040830188611cec565b611d526060830187611cec565b611d5f6080830186611cec565b611d6c60a0830185611bb4565b611d7960c0830184611bb4565b98975050505050505050565b6000606082019050611d9a6000830186611bb4565b611da76020830185611cec565b611db46040830184611cec565b949350505050565b6000602082019050611dd16000830184611bc3565b92915050565b6000602082019050611dec6000830184611bd2565b92915050565b6000604082019050611e076000830185611bd2565b611e146020830184611bb4565b9392505050565b600060c0820190508181036000830152611e358189611be1565b90508181036020830152611e498188611be1565b90508181036040830152611e5d8187611be1565b9050611e6c6060830186611bb4565b611e796080830185611bb4565b611e8660a0830184611bb4565b979650505050505050565b60006020820190508181036000830152611eaa81611c1a565b9050919050565b60006020820190508181036000830152611eca81611c3d565b9050919050565b60006020820190508181036000830152611eea81611c60565b9050919050565b60006020820190508181036000830152611f0a81611c83565b9050919050565b60006020820190508181036000830152611f2a81611ca6565b9050919050565b60006020820190508181036000830152611f4a81611cc9565b9050919050565b6000602082019050611f666000830184611cec565b92915050565b6000604082019050611f816000830185611cec565b8181036020830152611f938184611be1565b90509392505050565b6000611fa6611fb7565b9050611fb282826120a2565b919050565b6000604051905090565b600067ffffffffffffffff821115611fdc57611fdb6120d3565b5b611fe582612102565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600061201982612036565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561208d578082015181840152602081019050612072565b8381111561209c576000848401525b50505050565b6120ab82612102565b810181811067ffffffffffffffff821117156120ca576120c96120d3565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f494e56414c49445f455243313135355f5245464552454e43455f434f4e54524160008201527f4354000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f494e56414c49445f57484954454c4953545f5245464552454e43455f434f4e5460008201527f5241435400000000000000000000000000000000000000000000000000000000602082015250565b7f455243313136373a20637265617465206661696c656400000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f494e56414c49445f41495244524f505f5245464552454e43455f434f4e54524160008201527f4354000000000000000000000000000000000000000000000000000000000000602082015250565b6122aa8161200e565b81146122b557600080fd5b50565b6122c181612020565b81146122cc57600080fd5b50565b6122d88161202c565b81146122e357600080fd5b50565b6122ef81612056565b81146122fa57600080fd5b5056fea2646970667358221220ad0ba27ce25bac976ba8d8e5f82ce5c81987e5328a446020d5305ca7df2acfeb64736f6c634300080400330000000000000000000000005341f7ac9770601eba8943da809c7ba51d71dde3000000000000000000000000a047e0cadbd8e215b39109592559734e6fa1880d0000000000000000000000000aa4b6af0f29dae7d822a15a6eef9547806d358a

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100f45760003560e01c80637d7fc26c11610097578063d18a70a911610066578063d18a70a914610259578063d539139314610275578063eeabfbb314610293578063f2fde38b146102af576100f4565b80637d7fc26c146101e757806386a8a1cc146102035780638cc3cdd61461021f5780638da5cb5b1461023b576100f4565b806319d5e7f4116100d357806319d5e7f414610175578063258f185f146101a557806368fc97bc146101c1578063715018a6146101dd576100f4565b80625adc09146100f9578063176940b114610129578063199d0b0214610159575b600080fd5b610113600480360381019061010e9190611724565b6102cb565b6040516101209190611dbc565b60405180910390f35b610143600480360381019061013e9190611724565b6102eb565b6040516101509190611dbc565b60405180910390f35b610173600480360381019061016e9190611a2a565b61030b565b005b61018f600480360381019061018a9190611724565b6103bc565b60405161019c9190611dbc565b60405180910390f35b6101bf60048036038101906101ba9190611a66565b6103dc565b005b6101db60048036038101906101d69190611a2a565b61054d565b005b6101e56105fe565b005b61020160048036038101906101fc919061174d565b610612565b005b61021d60048036038101906102189190611885565b610777565b005b61023960048036038101906102349190611a2a565b6109b6565b005b610243610a67565b6040516102509190611cfb565b60405180910390f35b610273600480360381019061026e9190611aa2565b610a90565b005b61027d610c0f565b60405161028a9190611dd7565b60405180910390f35b6102ad60048036038101906102a89190611937565b610c33565b005b6102c960048036038101906102c49190611724565b610fc4565b005b60036020528060005260406000206000915054906101000a900460ff1681565b60026020528060005260406000206000915054906101000a900460ff1681565b610313611048565b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f3f459b5bacdd0024431150f62c0a086931fc501d4f56ce728e8657226f85b03d826040516103b09190611dbc565b60405180910390a25050565b60016020528060005260406000206000915054906101000a900460ff1681565b6103e4611048565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046790611ed1565b60405180910390fd5b600061047b836110c6565b905060008190508073ffffffffffffffffffffffffffffffffffffffff16639498bd71846040518263ffffffff1660e01b81526004016104bb9190611dd7565b600060405180830381600087803b1580156104d557600080fd5b505af11580156104e9573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f587ab8bc0e067435569ec0b3e95f4367351c426d88e05bc9eca7e3d53cb0934760405160405180910390a350505050565b610555611048565b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f01fb9eb94f5bf0326f3d3d631427bac351c72601d541d777c3c3a0da382c9f21826040516105f29190611dbc565b60405180910390a25050565b610606611048565b610610600061119b565b565b61061a611048565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166106a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069d90611f31565b60405180910390fd5b6106b0600461125f565b60006106bc6004611275565b905060006106c98d6110c6565b905060006106d78d8c611283565b905060006106e98d8a8a8a8a886113f3565b90506106fc83838360018f8f8c8c611571565b8273ffffffffffffffffffffffffffffffffffffffff168f73ffffffffffffffffffffffffffffffffffffffff16857f967fbe3c17b0d8a6ffaa17cca693b89857aa034f630b7911e6b45acf2f3631cf858f8f60405161075e93929190611d85565b60405180910390a4505050505050505050505050505050565b61077f611048565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661080b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080290611f31565b60405180910390fd5b610815600461125f565b60006108216004611275565b9050600061082e8a6110c6565b905060008190508073ffffffffffffffffffffffffffffffffffffffff16630729da0b8b8b8b8b8b8b8b6040518863ffffffff1660e01b815260040161087a9796959493929190611d16565b600060405180830381600087803b15801561089457600080fd5b505af11580156108a8573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16847f967fbe3c17b0d8a6ffaa17cca693b89857aa034f630b7911e6b45acf2f3631cf8d8b8b60405161090e93929190611d85565b60405180910390a460008990508073ffffffffffffffffffffffffffffffffffffffff16632f2ff15d7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6856040518363ffffffff1660e01b8152600401610976929190611df2565b600060405180830381600087803b15801561099057600080fd5b505af11580156109a4573d6000803e3d6000fd5b50505050505050505050505050505050565b6109be611048565b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f816dd9d542e01163481293817da72fd7b35224cec934994070e574c8cf5236aa82604051610a5b9190611dbc565b60405180910390a25050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610a98611048565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1b90611e91565b60405180910390fd5b6000610b2f876110c6565b905060008190508073ffffffffffffffffffffffffffffffffffffffff16639630c8ac8888888830896040518763ffffffff1660e01b8152600401610b7996959493929190611e1b565b600060405180830381600087803b158015610b9357600080fd5b505af1158015610ba7573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f7d610b3a75a2d62f1759d393489506232d0d94b8f72df7519d2e881e9fc3bbf060405160405180910390a35050505050505050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610c3b611048565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbe90611f31565b60405180910390fd5b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4a90611ed1565b60405180910390fd5b610d5d600461125f565b6000610d696004611275565b90506000610d778b8b611283565b90506000610d848d6110c6565b9050610d9681838a8a8e8e8b8b611571565b8073ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff16847f967fbe3c17b0d8a6ffaa17cca693b89857aa034f630b7911e6b45acf2f3631cf858e8e604051610df893929190611d85565b60405180910390a460008890508073ffffffffffffffffffffffffffffffffffffffff16632f2ff15d7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6846040518363ffffffff1660e01b8152600401610e60929190611df2565b600060405180830381600087803b158015610e7a57600080fd5b505af1158015610e8e573d6000803e3d6000fd5b5050505060405180602001604052806000815250805190602001208173ffffffffffffffffffffffffffffffffffffffff16630221e7858a6040518263ffffffff1660e01b8152600401610ee29190611f51565b600060405180830381600087803b158015610efc57600080fd5b505af1158015610f10573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610f399190611b73565b805190602001201415610fb4578073ffffffffffffffffffffffffffffffffffffffff1663162094c489896040518363ffffffff1660e01b8152600401610f81929190611f6c565b600060405180830381600087803b158015610f9b57600080fd5b505af1158015610faf573d6000803e3d6000fd5b505050505b5050505050505050505050505050565b610fcc611048565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561103c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103390611eb1565b60405180910390fd5b6110458161119b565b50565b6110506115f8565b73ffffffffffffffffffffffffffffffffffffffff1661106e610a67565b73ffffffffffffffffffffffffffffffffffffffff16146110c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bb90611f11565b60405180910390fd5b565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f0915050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118d90611ef1565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001816000016000828254019250508190555050565b600081600001549050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130890611ed1565b60405180910390fd5b600061131c846110c6565b905060008190508073ffffffffffffffffffffffffffffffffffffffff16639498bd71856040518263ffffffff1660e01b815260040161135c9190611dd7565b600060405180830381600087803b15801561137657600080fd5b505af115801561138a573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f587ab8bc0e067435569ec0b3e95f4367351c426d88e05bc9eca7e3d53cb0934760405160405180910390a3819250505092915050565b6000600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611481576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147890611e91565b60405180910390fd5b600061148c886110c6565b905060008190508073ffffffffffffffffffffffffffffffffffffffff16639630c8ac89898989308a6040518763ffffffff1660e01b81526004016114d696959493929190611e1b565b600060405180830381600087803b1580156114f057600080fd5b505af1158015611504573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f7d610b3a75a2d62f1759d393489506232d0d94b8f72df7519d2e881e9fc3bbf060405160405180910390a381925050509695505050505050565b60008890508073ffffffffffffffffffffffffffffffffffffffff16630729da0b898989898989896040518863ffffffff1660e01b81526004016115bb9796959493929190611d16565b600060405180830381600087803b1580156115d557600080fd5b505af11580156115e9573d6000803e3d6000fd5b50505050505050505050505050565b600033905090565b600061161361160e84611fc1565b611f9c565b90508281526020810184848401111561162b57600080fd5b611636848285612060565b509392505050565b600061165161164c84611fc1565b611f9c565b90508281526020810184848401111561166957600080fd5b61167484828561206f565b509392505050565b60008135905061168b816122a1565b92915050565b6000813590506116a0816122b8565b92915050565b6000813590506116b5816122cf565b92915050565b600082601f8301126116cc57600080fd5b81356116dc848260208601611600565b91505092915050565b600082601f8301126116f657600080fd5b815161170684826020860161163e565b91505092915050565b60008135905061171e816122e6565b92915050565b60006020828403121561173657600080fd5b60006117448482850161167c565b91505092915050565b60008060008060008060008060008060006101608c8e03121561176f57600080fd5b600061177d8e828f0161167c565b9b5050602061178e8e828f0161167c565b9a5050604061179f8e828f0161167c565b99505060606117b08e828f016116a6565b98505060806117c18e828f0161170f565b97505060a06117d28e828f0161170f565b96505060c08c013567ffffffffffffffff8111156117ef57600080fd5b6117fb8e828f016116bb565b95505060e08c013567ffffffffffffffff81111561181857600080fd5b6118248e828f016116bb565b9450506101008c013567ffffffffffffffff81111561184257600080fd5b61184e8e828f016116bb565b9350506101206118608e828f0161167c565b9250506101406118728e828f0161167c565b9150509295989b509295989b9093969950565b600080600080600080600080610100898b0312156118a257600080fd5b60006118b08b828c0161167c565b98505060206118c18b828c0161167c565b97505060406118d28b828c0161167c565b96505060606118e38b828c0161170f565b95505060806118f48b828c0161170f565b94505060a06119058b828c0161170f565b93505060c06119168b828c0161167c565b92505060e06119278b828c0161167c565b9150509295985092959890939650565b6000806000806000806000806000806101408b8d03121561195757600080fd5b60006119658d828e0161167c565b9a505060206119768d828e0161167c565b99505060406119878d828e016116a6565b98505060606119988d828e0161170f565b97505060806119a98d828e0161170f565b96505060a06119ba8d828e0161167c565b95505060c06119cb8d828e0161170f565b94505060e08b013567ffffffffffffffff8111156119e857600080fd5b6119f48d828e016116bb565b935050610100611a068d828e0161167c565b925050610120611a188d828e0161167c565b9150509295989b9194979a5092959850565b60008060408385031215611a3d57600080fd5b6000611a4b8582860161167c565b9250506020611a5c85828601611691565b9150509250929050565b60008060408385031215611a7957600080fd5b6000611a878582860161167c565b9250506020611a98858286016116a6565b9150509250929050565b60008060008060008060c08789031215611abb57600080fd5b6000611ac989828a0161167c565b965050602087013567ffffffffffffffff811115611ae657600080fd5b611af289828a016116bb565b955050604087013567ffffffffffffffff811115611b0f57600080fd5b611b1b89828a016116bb565b945050606087013567ffffffffffffffff811115611b3857600080fd5b611b4489828a016116bb565b9350506080611b5589828a0161167c565b92505060a0611b6689828a0161167c565b9150509295509295509295565b600060208284031215611b8557600080fd5b600082015167ffffffffffffffff811115611b9f57600080fd5b611bab848285016116e5565b91505092915050565b611bbd8161200e565b82525050565b611bcc81612020565b82525050565b611bdb8161202c565b82525050565b6000611bec82611ff2565b611bf68185611ffd565b9350611c0681856020860161206f565b611c0f81612102565b840191505092915050565b6000611c27602283611ffd565b9150611c3282612113565b604082019050919050565b6000611c4a602683611ffd565b9150611c5582612162565b604082019050919050565b6000611c6d602483611ffd565b9150611c78826121b1565b604082019050919050565b6000611c90601683611ffd565b9150611c9b82612200565b602082019050919050565b6000611cb3602083611ffd565b9150611cbe82612229565b602082019050919050565b6000611cd6602283611ffd565b9150611ce182612252565b604082019050919050565b611cf581612056565b82525050565b6000602082019050611d106000830184611bb4565b92915050565b600060e082019050611d2b600083018a611bb4565b611d386020830189611bb4565b611d456040830188611cec565b611d526060830187611cec565b611d5f6080830186611cec565b611d6c60a0830185611bb4565b611d7960c0830184611bb4565b98975050505050505050565b6000606082019050611d9a6000830186611bb4565b611da76020830185611cec565b611db46040830184611cec565b949350505050565b6000602082019050611dd16000830184611bc3565b92915050565b6000602082019050611dec6000830184611bd2565b92915050565b6000604082019050611e076000830185611bd2565b611e146020830184611bb4565b9392505050565b600060c0820190508181036000830152611e358189611be1565b90508181036020830152611e498188611be1565b90508181036040830152611e5d8187611be1565b9050611e6c6060830186611bb4565b611e796080830185611bb4565b611e8660a0830184611bb4565b979650505050505050565b60006020820190508181036000830152611eaa81611c1a565b9050919050565b60006020820190508181036000830152611eca81611c3d565b9050919050565b60006020820190508181036000830152611eea81611c60565b9050919050565b60006020820190508181036000830152611f0a81611c83565b9050919050565b60006020820190508181036000830152611f2a81611ca6565b9050919050565b60006020820190508181036000830152611f4a81611cc9565b9050919050565b6000602082019050611f666000830184611cec565b92915050565b6000604082019050611f816000830185611cec565b8181036020830152611f938184611be1565b90509392505050565b6000611fa6611fb7565b9050611fb282826120a2565b919050565b6000604051905090565b600067ffffffffffffffff821115611fdc57611fdb6120d3565b5b611fe582612102565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600061201982612036565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561208d578082015181840152602081019050612072565b8381111561209c576000848401525b50505050565b6120ab82612102565b810181811067ffffffffffffffff821117156120ca576120c96120d3565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f494e56414c49445f455243313135355f5245464552454e43455f434f4e54524160008201527f4354000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f494e56414c49445f57484954454c4953545f5245464552454e43455f434f4e5460008201527f5241435400000000000000000000000000000000000000000000000000000000602082015250565b7f455243313136373a20637265617465206661696c656400000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f494e56414c49445f41495244524f505f5245464552454e43455f434f4e54524160008201527f4354000000000000000000000000000000000000000000000000000000000000602082015250565b6122aa8161200e565b81146122b557600080fd5b50565b6122c181612020565b81146122cc57600080fd5b50565b6122d88161202c565b81146122e357600080fd5b50565b6122ef81612056565b81146122fa57600080fd5b5056fea2646970667358221220ad0ba27ce25bac976ba8d8e5f82ce5c81987e5328a446020d5305ca7df2acfeb64736f6c63430008040033

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

0000000000000000000000005341f7ac9770601eba8943da809c7ba51d71dde3000000000000000000000000a047e0cadbd8e215b39109592559734e6fa1880d0000000000000000000000000aa4b6af0f29dae7d822a15a6eef9547806d358a

-----Decoded View---------------
Arg [0] : _clonableERC1155 (address): 0x5341F7AC9770601eBA8943dA809C7BA51d71DDe3
Arg [1] : _clonableMerkleAirdrop (address): 0xa047e0CAdBd8e215b39109592559734E6fa1880d
Arg [2] : _clonableMerkleWhitelist (address): 0x0Aa4b6AF0F29DaE7d822a15A6EEf9547806d358a

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000005341f7ac9770601eba8943da809c7ba51d71dde3
Arg [1] : 000000000000000000000000a047e0cadbd8e215b39109592559734e6fa1880d
Arg [2] : 0000000000000000000000000aa4b6af0f29dae7d822a15a6eef9547806d358a


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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