ETH Price: $2,638.83 (+1.97%)

Contract

0xcd484E37931f62013E6BD47FdA62C21480248B47
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00
Transaction Hash
Method
Block
From
To
Purchase210426012024-10-25 12:22:11106 days ago1729858931IN
Mirage Gallery: Curated Minter V3
0.12 ETH0.002378728.86877594
Purchase210164252024-10-21 20:44:11109 days ago1729543451IN
Mirage Gallery: Curated Minter V3
0.36 ETH0.005941189.74119018
Purchase194578412024-03-17 23:31:23327 days ago1710718283IN
Mirage Gallery: Curated Minter V3
0.12 ETH0.0067454425.14959433
Purchase193413062024-03-01 15:45:47344 days ago1709307947IN
Mirage Gallery: Curated Minter V3
0.12 ETH0.019421768.74623847
Purchase191516922024-02-04 1:28:35370 days ago1707010115IN
Mirage Gallery: Curated Minter V3
0.12 ETH0.0034736712.9511835
Purchase190075382024-01-14 20:34:23390 days ago1705264463IN
Mirage Gallery: Curated Minter V3
0.12 ETH0.0060455621.39926009
Purchase188626682023-12-25 12:12:47411 days ago1703506367IN
Mirage Gallery: Curated Minter V3
0.6 ETH0.021779623.59672236
Purchase188597702023-12-25 2:25:59411 days ago1703471159IN
Mirage Gallery: Curated Minter V3
0.12 ETH0.0039743614.06789885
Purchase188227532023-12-19 21:45:47416 days ago1703022347IN
Mirage Gallery: Curated Minter V3
0.12 ETH0.0136653350.94955236
Purchase188183122023-12-19 6:46:59417 days ago1702968419IN
Mirage Gallery: Curated Minter V3
0.12 ETH0.012995148.45070144
Purchase188178642023-12-19 5:15:59417 days ago1702962959IN
Mirage Gallery: Curated Minter V3
0.12 ETH0.0125899546.94012497
Purchase188165112023-12-19 0:41:35417 days ago1702946495IN
Mirage Gallery: Curated Minter V3
0.12 ETH0.0120688544.99726646
Purchase188164142023-12-19 0:22:11417 days ago1702945331IN
Mirage Gallery: Curated Minter V3
0.12 ETH0.0143986353.68358744
Purchase188161752023-12-18 23:34:23417 days ago1702942463IN
Mirage Gallery: Curated Minter V3
0.12 ETH0.0143040350.63140804
Purchase188146882023-12-18 18:35:23418 days ago1702924523IN
Mirage Gallery: Curated Minter V3
0.12 ETH0.0146549954.63937984
Early Intelligen...188144192023-12-18 17:40:47418 days ago1702921247IN
Mirage Gallery: Curated Minter V3
0.12 ETH0.0178253364.47942378
Early Intelligen...188144112023-12-18 17:39:11418 days ago1702921151IN
Mirage Gallery: Curated Minter V3
0.12 ETH0.0202915869.79050244
Early Intelligen...188143972023-12-18 17:36:23418 days ago1702920983IN
Mirage Gallery: Curated Minter V3
0.12 ETH0.0192506465.83961496
Early Sentient P...188143932023-12-18 17:35:35418 days ago1702920935IN
Mirage Gallery: Curated Minter V3
0.12 ETH0.0205104967.8782372
Enable Second Pr...188143822023-12-18 17:33:23418 days ago1702920803IN
Mirage Gallery: Curated Minter V3
0 ETH0.0034895476.11287825
Early Intelligen...188143812023-12-18 17:33:11418 days ago1702920791IN
Mirage Gallery: Curated Minter V3
0.12 ETH0.0250036376.30525651
Set Intel Allotm...188111292023-12-18 6:35:11418 days ago1702881311IN
Mirage Gallery: Curated Minter V3
0 ETH0.0508759129.55860434
Purchase186652152023-11-27 19:59:35439 days ago1701115175IN
Mirage Gallery: Curated Minter V3
0.12 ETH0.0108133538.27561783
Purchase186652142023-11-27 19:59:23439 days ago1701115163IN
Mirage Gallery: Curated Minter V3
0.6 ETH0.0369285740.0095921
Purchase186652132023-11-27 19:59:11439 days ago1701115151IN
Mirage Gallery: Curated Minter V3
0.36 ETH0.0247513640.58245836
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
210426012024-10-25 12:22:11106 days ago1729858931
Mirage Gallery: Curated Minter V3
0.102 ETH
210426012024-10-25 12:22:11106 days ago1729858931
Mirage Gallery: Curated Minter V3
0.018 ETH
210164252024-10-21 20:44:11109 days ago1729543451
Mirage Gallery: Curated Minter V3
0.306 ETH
210164252024-10-21 20:44:11109 days ago1729543451
Mirage Gallery: Curated Minter V3
0.054 ETH
194578412024-03-17 23:31:23327 days ago1710718283
Mirage Gallery: Curated Minter V3
0.102 ETH
194578412024-03-17 23:31:23327 days ago1710718283
Mirage Gallery: Curated Minter V3
0.018 ETH
193413062024-03-01 15:45:47344 days ago1709307947
Mirage Gallery: Curated Minter V3
0.102 ETH
193413062024-03-01 15:45:47344 days ago1709307947
Mirage Gallery: Curated Minter V3
0.018 ETH
191516922024-02-04 1:28:35370 days ago1707010115
Mirage Gallery: Curated Minter V3
0.102 ETH
191516922024-02-04 1:28:35370 days ago1707010115
Mirage Gallery: Curated Minter V3
0.018 ETH
190075382024-01-14 20:34:23390 days ago1705264463
Mirage Gallery: Curated Minter V3
0.102 ETH
190075382024-01-14 20:34:23390 days ago1705264463
Mirage Gallery: Curated Minter V3
0.018 ETH
188626682023-12-25 12:12:47411 days ago1703506367
Mirage Gallery: Curated Minter V3
0.51 ETH
188626682023-12-25 12:12:47411 days ago1703506367
Mirage Gallery: Curated Minter V3
0.09 ETH
188597702023-12-25 2:25:59411 days ago1703471159
Mirage Gallery: Curated Minter V3
0.102 ETH
188597702023-12-25 2:25:59411 days ago1703471159
Mirage Gallery: Curated Minter V3
0.018 ETH
188227532023-12-19 21:45:47416 days ago1703022347
Mirage Gallery: Curated Minter V3
0.102 ETH
188227532023-12-19 21:45:47416 days ago1703022347
Mirage Gallery: Curated Minter V3
0.018 ETH
188183122023-12-19 6:46:59417 days ago1702968419
Mirage Gallery: Curated Minter V3
0.102 ETH
188183122023-12-19 6:46:59417 days ago1702968419
Mirage Gallery: Curated Minter V3
0.018 ETH
188178642023-12-19 5:15:59417 days ago1702962959
Mirage Gallery: Curated Minter V3
0.102 ETH
188178642023-12-19 5:15:59417 days ago1702962959
Mirage Gallery: Curated Minter V3
0.018 ETH
188165112023-12-19 0:41:35417 days ago1702946495
Mirage Gallery: Curated Minter V3
0.102 ETH
188165112023-12-19 0:41:35417 days ago1702946495
Mirage Gallery: Curated Minter V3
0.018 ETH
188164142023-12-19 0:22:11417 days ago1702945331
Mirage Gallery: Curated Minter V3
0.102 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
curatedMinterV3

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-13
*/

// File: IDelegationRegistry.sol


pragma solidity ^0.8.17;

/**
 * @title An immutable registry contract to be deployed as a standalone primitive
 * @dev See EIP-5639, new project launches can read previous cold wallet -> hot wallet delegations
 *      from here and integrate those permissions into their flow
 */
interface IDelegationRegistry {
    /// @notice Delegation type
    enum DelegationType {
        NONE,
        ALL,
        CONTRACT,
        TOKEN
    }

    /// @notice Info about a single delegation, used for onchain enumeration
    struct DelegationInfo {
        DelegationType type_;
        address vault;
        address delegate;
        address contract_;
        uint256 tokenId;
    }

    /// @notice Info about a single contract-level delegation
    struct ContractDelegation {
        address contract_;
        address delegate;
    }

    /// @notice Info about a single token-level delegation
    struct TokenDelegation {
        address contract_;
        uint256 tokenId;
        address delegate;
    }

    /// @notice Emitted when a user delegates their entire wallet
    event DelegateForAll(address vault, address delegate, bool value);

    /// @notice Emitted when a user delegates a specific contract
    event DelegateForContract(address vault, address delegate, address contract_, bool value);

    /// @notice Emitted when a user delegates a specific token
    event DelegateForToken(address vault, address delegate, address contract_, uint256 tokenId, bool value);

    /// @notice Emitted when a user revokes all delegations
    event RevokeAllDelegates(address vault);

    /// @notice Emitted when a user revoes all delegations for a given delegate
    event RevokeDelegate(address vault, address delegate);

    /**
     * -----------  WRITE -----------
     */

    /**
     * @notice Allow the delegate to act on your behalf for all contracts
     * @param delegate The hotwallet to act on your behalf
     * @param value Whether to enable or disable delegation for this address, true for setting and false for revoking
     */
    function delegateForAll(address delegate, bool value) external;

    /**
     * @notice Allow the delegate to act on your behalf for a specific contract
     * @param delegate The hotwallet to act on your behalf
     * @param contract_ The address for the contract you're delegating
     * @param value Whether to enable or disable delegation for this address, true for setting and false for revoking
     */
    function delegateForContract(address delegate, address contract_, bool value) external;

    /**
     * @notice Allow the delegate to act on your behalf for a specific token
     * @param delegate The hotwallet to act on your behalf
     * @param contract_ The address for the contract you're delegating
     * @param tokenId The token id for the token you're delegating
     * @param value Whether to enable or disable delegation for this address, true for setting and false for revoking
     */
    function delegateForToken(address delegate, address contract_, uint256 tokenId, bool value) external;

    /**
     * @notice Revoke all delegates
     */
    function revokeAllDelegates() external;

    /**
     * @notice Revoke a specific delegate for all their permissions
     * @param delegate The hotwallet to revoke
     */
    function revokeDelegate(address delegate) external;

    /**
     * @notice Remove yourself as a delegate for a specific vault
     * @param vault The vault which delegated to the msg.sender, and should be removed
     */
    function revokeSelf(address vault) external;

    /**
     * -----------  READ -----------
     */

    /**
     * @notice Returns all active delegations a given delegate is able to claim on behalf of
     * @param delegate The delegate that you would like to retrieve delegations for
     * @return info Array of DelegationInfo structs
     */
    function getDelegationsByDelegate(address delegate) external view returns (DelegationInfo[] memory);

    /**
     * @notice Returns an array of wallet-level delegates for a given vault
     * @param vault The cold wallet who issued the delegation
     * @return addresses Array of wallet-level delegates for a given vault
     */
    function getDelegatesForAll(address vault) external view returns (address[] memory);

    /**
     * @notice Returns an array of contract-level delegates for a given vault and contract
     * @param vault The cold wallet who issued the delegation
     * @param contract_ The address for the contract you're delegating
     * @return addresses Array of contract-level delegates for a given vault and contract
     */
    function getDelegatesForContract(address vault, address contract_) external view returns (address[] memory);

    /**
     * @notice Returns an array of contract-level delegates for a given vault's token
     * @param vault The cold wallet who issued the delegation
     * @param contract_ The address for the contract holding the token
     * @param tokenId The token id for the token you're delegating
     * @return addresses Array of contract-level delegates for a given vault's token
     */
    function getDelegatesForToken(address vault, address contract_, uint256 tokenId)
        external
        view
        returns (address[] memory);

    /**
     * @notice Returns all contract-level delegations for a given vault
     * @param vault The cold wallet who issued the delegations
     * @return delegations Array of ContractDelegation structs
     */
    function getContractLevelDelegations(address vault)
        external
        view
        returns (ContractDelegation[] memory delegations);

    /**
     * @notice Returns all token-level delegations for a given vault
     * @param vault The cold wallet who issued the delegations
     * @return delegations Array of TokenDelegation structs
     */
    function getTokenLevelDelegations(address vault) external view returns (TokenDelegation[] memory delegations);

    /**
     * @notice Returns true if the address is delegated to act on the entire vault
     * @param delegate The hotwallet to act on your behalf
     * @param vault The cold wallet who issued the delegation
     */
    function checkDelegateForAll(address delegate, address vault) external view returns (bool);

    /**
     * @notice Returns true if the address is delegated to act on your behalf for a token contract or an entire vault
     * @param delegate The hotwallet to act on your behalf
     * @param contract_ The address for the contract you're delegating
     * @param vault The cold wallet who issued the delegation
     */
    function checkDelegateForContract(address delegate, address vault, address contract_)
        external
        view
        returns (bool);

    /**
     * @notice Returns true if the address is delegated to act on your behalf for a specific token, the token's contract or an entire vault
     * @param delegate The hotwallet to act on your behalf
     * @param contract_ The address for the contract you're delegating
     * @param tokenId The token id for the token you're delegating
     * @param vault The cold wallet who issued the delegation
     */
    function checkDelegateForToken(address delegate, address vault, address contract_, uint256 tokenId)
        external
        view
        returns (bool);
}

// File: @openzeppelin/contracts/utils/Context.sol


// 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;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @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: curatedMinterV3.sol

/*
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMNOOXMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMXO0NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMk,'lKWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMKc.,kWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMNo...cKMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMKc...lNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMK:....cKMMMMMMMMMMMMMMMMMMMMMMMMMMMMMKc....:0MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMk,.....cKMMMMMMMMMMMMMMMMMMMMMMMMMMWKc.....,kWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMNd.......cKWMMMMMMMMMMMMMMMMMMMMMMMKkc.......oNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMKc........cKMMMMMMMMMMMMMMMMMMMMMMKc'........cKMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMO,.........cKMMMMMMMMMMMMMMMMMMMMKc..........,OMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMWd'..........cKWMMMMMMMMMMMMMMMMMKl............dWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMXc...;;.......cKMMMMMMMMMMMMMMMMKc...'co,......cXMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMO;..,x0:.......cKMMMMMMMMMMMMMMKl...cxKKc......;OMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMWd'..;0W0:.......cKWMMMMMMMMMMMKc...cKWMNo......'xWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMXl...lXMW0:.......c0WMMMMMMMMMKl...cKMMMWx'......lXXkxxddddoddddxxxkO0KXXNWWWMMMMMMMMMMM
MMMMMMMMMMMM0;...dWMMW0:.......c0WMMMMMMMKl...cKMMMMMO;......;0k,.'''',,''.......'',;::cxXMMMMMMMMMM
MMMMMMMMMMMWx'..,kMMMMW0:.......c0WMMMMMKl...cKMMMMWWKc......'xXOO00KKKKK00Okdoc,'......cKMMMMMMMMMM
MMMMMMMMMMMXl...:0MMMMMW0:.......:0WMMMKl...cKMMWKkdxKd.......oNMMMMMMMMMMMMMMMWXOd:'...lXMMMMMMMMMM
MMMMMMMMMMM0:...lXMMMMMMWO:.......:0MMKl...cKMWKo,..;0k,......:KMMMMMMMMMMMMMMMMMMWNOc'.oNMMMMMMMMMM
MMMMMMMMMMWx'..'dWMMMMMMMW0:.......:0Kl...cKMNk;....,k0:......,kMMMMMMMMMMMMMMMMMMMMMXl'oNMMMMMMMMMM
MMMMMMMMMMNl...,OMMMMMMMMMW0:.......;;...cKWXo'......dKl.......oNMMMMMMMMMMMMMMMMMMMMM0:dWMMMMMMMMMM
MMMMMMMMMM0:...:KMMMMMMMMMMW0c..........lKMNo'.......oXd'......cKMMMMMMMMMMMMMMMMMMMMMNKXMMMMMMMMMMM
MMMMMMMMMWk,...lXMMMMMMMMMMMWKc........cKMWx,.......,kWk,......,OMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMNo...'dWMMMMMMMMMMMMMKl......lKMMK:........:KMK:.......dNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMWO;...'xWMMMMMMMMMMMMMMXl'...lKMMWx'........lXMXl.......;OWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMNKOOd;.....;dkO0NMMMMMMMMMMMXo''lXMMMNo.........lNW0:........,lxkO0XWMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMN0kkkkkkkkkkxxkOXWMMMMMMMMMMMN0ONMMMMNo.........lXWXOkkkkxxxxxxxxxk0WMXOkkkkkkkkkkkkkkkkkOXMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNo.........:0MMMMMMMMMMMMMMMMMMMMN0OOxl,........,lxO0NMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWx'........'xWMMMMMMMMMMMMMMMMMMMMMMMMNd'......'dNMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM0:.........:KMMMMMMMMMMMMMMMMMMMMMMMMMk,......'xWMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNd'.........oXMMMMMMMMMMMMMMMMMMMMMMMMO,......'kWMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMXo.........'oXMMMMMMMMMMMMMMMMMMMMMMMO,......'kMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMXo'.........c0WMMMMMMMMMMMMMMMMMMMMMO,......'kMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNx;.........,dXWMMMMMMMMMMMMMMMMMMMO,......'kMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWKo;'........;d0NMMMMMMMMMMMMMMMMMO,......'kWMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWKOxc'.......':dOKNWMMMMMMMMMMMWk,......'kWMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN0xl;'.......,:ldxkO00KK00Od:.......;OMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWX0kdl:;''.......''''''....',;cox0NMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNXK0OkxxddddddddxxkkO0XNWMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
*/

// Contract authored by August Rosedale (@augustfr)
// https://miragegallery.ai
 
pragma solidity ^0.8.19;




interface curatedContract {
    function projectIdToArtistAddress(uint256 _projectId) external view returns (address payable);
    function projectIdToPricePerTokenInWei(uint256 _projectId) external view returns (uint256);
    function projectIdToAdditionalPayee(uint256 _projectId) external view returns (address payable);
    function projectIdToAdditionalPayeePercentage(uint256 _projectId) external view returns (uint256);
    function mirageAddress() external view returns (address payable);
    function miragePercentage() external view returns (uint256);
    function mint(address _to, uint256 _projectId, address _by) external returns (uint256 tokenId);
    function earlyMint(address _to, uint256 _projectId, address _by) external returns (uint256 _tokenId);
    function balanceOf(address owner) external view returns (uint256);
}

interface membershipContracts {
    function balanceOf(address owner, uint256 _id) external view returns (uint256);
}

contract curatedMinterV3 is Ownable {

    curatedContract public mirageContract;
    address private curatedAddress;
    membershipContracts public membershipContract;
    address private membershipAddress;
    IDelegationRegistry public immutable registry;

    mapping(uint256 => uint256) public maxPubMint; // per transaction per drop
    uint256 public maxPreMint = 1; //per intelligent membership
    uint256 public maxPreMintSentient = 1; //per sentient membership
    uint256 public maxSecondPhase = 1; //per transaction
    uint256 public curatedHolderReq = 5;

    mapping(uint256 => bool) public excluded;
    mapping(uint256 => mapping(uint256 => uint256)) public tokensMinted;

    mapping(uint256 => bool) public secondPresalePhase;

    struct intelAllotment {
        uint256 allotment;
    }

    mapping(uint256 => bool) public usingCoupons;

    struct Coupon {
        bytes32 r;
        bytes32 s;
        uint8 v;
    }

    mapping(address => mapping(uint256 => intelAllotment)) public intelQuantity; // when using coupons, allotments are only needed to be set for members with more than 1 intel membership. When not using coupons, allotments are set for how many mints each address gets

    address private immutable adminSigner;

    constructor(address _curatedAddress, address _membershipAddress, address _registry, address _adminSigner) {
        mirageContract = curatedContract(_curatedAddress);
        membershipContract = membershipContracts(_membershipAddress);
        curatedAddress = _curatedAddress;
        membershipAddress = _membershipAddress;
        registry = IDelegationRegistry(_registry);
        adminSigner = _adminSigner;
        for (uint256 i = 0; i < 100; i++) {
            maxPubMint[i] = 10;
        }
    }

    function setLimits(uint256 _projectId, uint256 pubLimit, uint256 preLimit, uint256 preSentient) public onlyOwner {
        maxPubMint[_projectId] = pubLimit;
        maxPreMint = preLimit;
        maxPreMintSentient = preSentient;
    }

    function enableSecondPresalePhase(uint256 _projectId) public onlyOwner {
        secondPresalePhase[_projectId] = true;
    }

    function updateHolderReq(uint256 newLimit) public onlyOwner {
        curatedHolderReq = newLimit;
    }

    function updateContracts(address _curatedAddress, address _membershipAddress) public onlyOwner {
        mirageContract = curatedContract(_curatedAddress);
        membershipContract = membershipContracts(_membershipAddress);
    }

    function _isVerifiedCoupon(bytes32 digest, Coupon memory coupon) internal view returns (bool) {
        address signer = ecrecover(digest, coupon.v, coupon.r, coupon.s);
        require(signer != address(0), "ECDSA: invalid signature");
        return signer == adminSigner;
    }

    function setIntelAllotment(uint256 _projectID, address[] memory _addresses, uint256[] memory allotments) public onlyOwner {
        for(uint i = 0; i < _addresses.length; i++) {
            intelQuantity[_addresses[i]][_projectID].allotment = allotments[i];
        }
    }

    function viewAllotment(address _address, uint256 _projectID) public view returns (uint256) {
        if (intelQuantity[_address][_projectID].allotment == 99) {
            return 0;
        } else {
            return intelQuantity[_address][_projectID].allotment;
        }
    }
    
    function purchase(uint256 _projectId, uint256 numberOfTokens) public payable {
        require(!excluded[_projectId], "Project cannot be minted through this contract");
        require(numberOfTokens <= maxPubMint[_projectId], "Can't mint this many in a single transaction");
        require(msg.value >= mirageContract.projectIdToPricePerTokenInWei(_projectId) * numberOfTokens, "Must send minimum value to mint!");
        require(msg.sender == tx.origin, "Reverting, Method can only be called directly by user.");

        _splitFundsETH(_projectId, numberOfTokens);
        for(uint i = 0; i < numberOfTokens; i++) {
            mirageContract.mint(msg.sender, _projectId, msg.sender);
        }
    }

    function earlySentientPurchase(uint256 _projectId, uint256 _membershipId, uint256 numberOfTokens, address _vault) public payable {
        require(!excluded[_projectId], "Project cannot be minted through this contract");
        require(_membershipId < 50, "Not a valid sentient ID");
        require(msg.value >= mirageContract.projectIdToPricePerTokenInWei(_projectId) * numberOfTokens, "Must send minimum value to mint!");
        require(msg.sender == tx.origin, "Reverting, Method can only be called directly by user.");

        address requester = msg.sender;
  
        if (_vault != msg.sender) { 
            bool isDelegateValid = registry.checkDelegateForContract(requester, _vault, membershipAddress);
            require(isDelegateValid, "invalid delegate-vault pairing");
            require(membershipContract.balanceOf(_vault,_membershipId) > 0, "No membership tokens in this wallet");
            requester = _vault;
        } else {
            require(membershipContract.balanceOf(requester,_membershipId) > 0, "No membership tokens in this wallet");
        }

        if (secondPresalePhase[_projectId]) {
            require(numberOfTokens <= maxSecondPhase, "Can't mint this many in one transaction");
        } else {
            require(tokensMinted[_projectId][_membershipId] + numberOfTokens <= maxPreMintSentient, "Would exceed mint allotment");
        }

        _splitFundsETH(_projectId, numberOfTokens);
        for(uint i = 0; i < numberOfTokens; i++) {
            tokensMinted[_projectId][_membershipId]++;
            mirageContract.earlyMint(requester, _projectId, msg.sender);
        }
    }

    function earlyCuratedHolderPurchase(uint256 _projectId, uint256 numberOfTokens, address _vault) public payable {
        require(!excluded[_projectId], "Project cannot be minted through this contract");
        require(secondPresalePhase[_projectId], "Not in second presale phase");
        require(mirageContract.balanceOf(_vault) >= curatedHolderReq, "Address does not hold enough curated artworks");
        require(msg.value >= mirageContract.projectIdToPricePerTokenInWei(_projectId) * numberOfTokens, "Must send minimum value to mint!");
        require(msg.sender == tx.origin, "Reverting, Method can only be called directly by user.");
        require(numberOfTokens <= maxSecondPhase, "Can't mint this many in one transaction");
        
        address requester = msg.sender;

        if (_vault != msg.sender) { 
            bool isDelegateValid = registry.checkDelegateForContract(requester, _vault, curatedAddress);
            require(isDelegateValid, "invalid delegate-vault pairing");
            requester = _vault;
        }

        _splitFundsETH(_projectId, numberOfTokens);
        for(uint i = 0; i < numberOfTokens; i++) {
            mirageContract.earlyMint(requester, _projectId, msg.sender);
        }
    }

    function enableCoupons(uint256 _projectId) public onlyOwner {
        usingCoupons[_projectId] = !usingCoupons[_projectId];
    }

    function earlyIntelligentPurchase(uint256 _projectId, uint256 numberOfTokens, address _vault) public payable {
        require(!excluded[_projectId], "Project cannot be minted through this contract");
        require(!usingCoupons[_projectId], "Not a valid minting function for this drop");
        require(msg.value >= mirageContract.projectIdToPricePerTokenInWei(_projectId) * numberOfTokens, "Must send minimum value to mint!");
        require(msg.sender == tx.origin, "Reverting, Method can only be called directly by user.");

        address requester = msg.sender;
    
        if (_vault != msg.sender) { 
            bool isDelegateValid = registry.checkDelegateForContract(requester, _vault, membershipAddress);
            require(isDelegateValid, "invalid delegate-vault pairing");
            requester = _vault;
        }

        uint256 allot = intelQuantity[requester][_projectId].allotment;
        require(allot > 0, "No available mints for this address");
        
        if (secondPresalePhase[_projectId]) {
            require(numberOfTokens <= maxSecondPhase, "Can't mint this many in one transaction");
        } else {
            require(numberOfTokens <= allot, "Would exceed mint allotment");
            require(allot != 99, "Already minted total allotment");
            uint256 updatedAllot = allot - numberOfTokens;
            intelQuantity[requester][_projectId].allotment = updatedAllot;
            if (updatedAllot == 0) {
                intelQuantity[requester][_projectId].allotment = 99;
            }
        }
        _splitFundsETH(_projectId, numberOfTokens);
        for(uint i = 0; i < numberOfTokens; i++) {
            mirageContract.earlyMint(requester, _projectId, msg.sender);
        }
    }

    function earlyIntelligentCouponPurchase(uint256 _projectId, Coupon memory coupon, address _vault, uint256 numberOfTokens) public payable {
        require(!excluded[_projectId], "Project cannot be minted through this contract");
        require(usingCoupons[_projectId], "Not a valid minting function for this drop");
        require(msg.value >= mirageContract.projectIdToPricePerTokenInWei(_projectId), "Must send minimum value to mint!");
        require(msg.sender == tx.origin, "Reverting, Method can only be called directly by user.");

        address requester = msg.sender;

        if (_vault != msg.sender) { 
            bool isDelegateValid = registry.checkDelegateForContract(requester, _vault, membershipAddress);
            require(isDelegateValid, "invalid delegate-vault pairing");
            requester = _vault;
        }

        bytes32 digest = keccak256(abi.encode(requester,"member"));
        require(_isVerifiedCoupon(digest, coupon), "Invalid coupon");
    
        if (secondPresalePhase[_projectId]) {
            require(numberOfTokens <= maxSecondPhase, "Can't mint this many in one transaction");
        } else {
            uint256 allot = intelQuantity[msg.sender][_projectId].allotment;
            if (allot > 0) {
                require(numberOfTokens <= allot, "Would exceed mint allotment");
                require(allot != 99, "Already minted total allotment");
                uint256 updatedAllot = allot - numberOfTokens;
                intelQuantity[msg.sender][_projectId].allotment = updatedAllot;
                if (updatedAllot == 0) {
                    intelQuantity[msg.sender][_projectId].allotment = 99;
                }
            } else if (allot == 0) {
                require(numberOfTokens <= 1, "Would exceed mint allotment");
                intelQuantity[msg.sender][_projectId].allotment = 99;
            }
        }
        _splitFundsETH(_projectId, numberOfTokens);
        for(uint i = 0; i < numberOfTokens; i++) {
            mirageContract.earlyMint(requester, _projectId, msg.sender);
        }
    }

    function toggleProject(uint256 _projectId) public onlyOwner {
        excluded[_projectId] = !excluded[_projectId];
    }

    function _splitFundsETH(uint256 _projectId, uint256 numberOfTokens) internal {
        if (msg.value > 0) {
            uint256 mintCost = mirageContract.projectIdToPricePerTokenInWei(_projectId) * numberOfTokens;
            uint256 refund = msg.value - (mirageContract.projectIdToPricePerTokenInWei(_projectId) * numberOfTokens);
            if (refund > 0) {
                payable(msg.sender).transfer(refund);
            }
            uint256 mirageAmount = mintCost / 100 * mirageContract.miragePercentage();
            if (mirageAmount > 0) {
                payable(mirageContract.mirageAddress()).transfer(mirageAmount);
            }
            uint256 projectFunds = mintCost - mirageAmount;
            uint256 additionalPayeeAmount;
            if (mirageContract.projectIdToAdditionalPayeePercentage(_projectId) > 0) {
                additionalPayeeAmount = projectFunds / 100 * mirageContract.projectIdToAdditionalPayeePercentage(_projectId);
                if (additionalPayeeAmount > 0) {
                payable(mirageContract.projectIdToAdditionalPayee(_projectId)).transfer(additionalPayeeAmount);
                }
            }
            uint256 creatorFunds = projectFunds - additionalPayeeAmount;
            if (creatorFunds > 0) {
                payable(mirageContract.projectIdToArtistAddress(_projectId)).transfer(creatorFunds);
            }
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_curatedAddress","type":"address"},{"internalType":"address","name":"_membershipAddress","type":"address"},{"internalType":"address","name":"_registry","type":"address"},{"internalType":"address","name":"_adminSigner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"curatedHolderReq","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"uint256","name":"numberOfTokens","type":"uint256"},{"internalType":"address","name":"_vault","type":"address"}],"name":"earlyCuratedHolderPurchase","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"components":[{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"}],"internalType":"struct curatedMinterV3.Coupon","name":"coupon","type":"tuple"},{"internalType":"address","name":"_vault","type":"address"},{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"earlyIntelligentCouponPurchase","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"uint256","name":"numberOfTokens","type":"uint256"},{"internalType":"address","name":"_vault","type":"address"}],"name":"earlyIntelligentPurchase","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"uint256","name":"_membershipId","type":"uint256"},{"internalType":"uint256","name":"numberOfTokens","type":"uint256"},{"internalType":"address","name":"_vault","type":"address"}],"name":"earlySentientPurchase","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"}],"name":"enableCoupons","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"}],"name":"enableSecondPresalePhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"excluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"intelQuantity","outputs":[{"internalType":"uint256","name":"allotment","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPreMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPreMintSentient","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"maxPubMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSecondPhase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"membershipContract","outputs":[{"internalType":"contract membershipContracts","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mirageContract","outputs":[{"internalType":"contract curatedContract","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"purchase","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"registry","outputs":[{"internalType":"contract IDelegationRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"secondPresalePhase","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectID","type":"uint256"},{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256[]","name":"allotments","type":"uint256[]"}],"name":"setIntelAllotment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"uint256","name":"pubLimit","type":"uint256"},{"internalType":"uint256","name":"preLimit","type":"uint256"},{"internalType":"uint256","name":"preSentient","type":"uint256"}],"name":"setLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"}],"name":"toggleProject","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokensMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_curatedAddress","type":"address"},{"internalType":"address","name":"_membershipAddress","type":"address"}],"name":"updateContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"updateHolderReq","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"usingCoupons","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_projectID","type":"uint256"}],"name":"viewAllotment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60c060405260016006556001600755600160085560056009553480156200002557600080fd5b5060405162002ae038038062002ae0833981016040819052620000489162000150565b6200005333620000e3565b600180546001600160a01b03199081166001600160a01b0387811691821790935560038054831687851690811790915560028054841690921790915560048054909216179055828116608052811660a05260005b6064811015620000d8576000818152600560205260409020600a905580620000cf81620001ad565b915050620000a7565b5050505050620001d5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200014b57600080fd5b919050565b600080600080608085870312156200016757600080fd5b620001728562000133565b9350620001826020860162000133565b9250620001926040860162000133565b9150620001a26060860162000133565b905092959194509250565b600060018201620001ce57634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a0516128c96200021760003960006121320152600081816103530152818161071a01528181610f07015281816114b9015261174201526128c96000f3fe6080604052600436106101c15760003560e01c8063a961c235116100f7578063d4fc6e8911610095578063f1ace46c11610064578063f1ace46c14610528578063f2fde38b14610558578063f82288a614610578578063f9cd69a41461058e57600080fd5b8063d4fc6e89146104cf578063d7a48cb2146104e2578063d9820d43146104f5578063e692c49f1461050857600080fd5b8063bee2ddc2116100d1578063bee2ddc214610449578063c655c9dc14610479578063ce1fcd541461048f578063d2cc472f146104af57600080fd5b8063a961c235146103c9578063adb1dd38146103e9578063bca1d4511461040957600080fd5b8063731ba998116101645780637b1039991161013e5780637b103999146103415780638da5cb5b14610375578063a075b7c714610393578063a7ee066d146103b357600080fd5b8063731ba998146102c6578063771b6179146102dc578063774e68691461030957600080fd5b806346e670d3116101a057806346e670d31461024657806351ec8d1e1461026657806370876c981461029e578063715018a6146102b157600080fd5b8062194d16146101c65780632a7df06f146101db5780633b492873146101fb575b600080fd5b6101d96101d4366004612183565b6105ae565b005b3480156101e757600080fd5b506101d96101f63660046121c4565b610a32565b34801561020757600080fd5b506102336102163660046121dd565b600e60209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561025257600080fd5b506101d96102613660046121c4565b610a3f565b34801561027257600080fd5b50600354610286906001600160a01b031681565b6040516001600160a01b03909116815260200161023d565b6101d96102ac366004612209565b610a67565b3480156102bd57600080fd5b506101d9610c62565b3480156102d257600080fd5b5061023360085481565b3480156102e857600080fd5b506102336102f73660046121c4565b60056020526000908152604090205481565b34801561031557600080fd5b50610233610324366004612209565b600b60209081526000928352604080842090915290825290205481565b34801561034d57600080fd5b506102867f000000000000000000000000000000000000000000000000000000000000000081565b34801561038157600080fd5b506000546001600160a01b0316610286565b34801561039f57600080fd5b506101d96103ae36600461222b565b610c76565b3480156103bf57600080fd5b5061023360065481565b3480156103d557600080fd5b506102336103e43660046121dd565b610c99565b3480156103f557600080fd5b506101d96104043660046121c4565b610cf8565b34801561041557600080fd5b506104396104243660046121c4565b600d6020526000908152604090205460ff1681565b604051901515815260200161023d565b34801561045557600080fd5b506104396104643660046121c4565b600a6020526000908152604090205460ff1681565b34801561048557600080fd5b5061023360095481565b34801561049b57600080fd5b506101d96104aa366004612333565b610d1b565b3480156104bb57600080fd5b506101d96104ca3660046121c4565b610da8565b6101d96104dd366004612400565b610dd0565b6101d96104f03660046124a0565b611252565b6101d96105033660046124a0565b611600565b34801561051457600080fd5b506101d96105233660046124d9565b611a0f565b34801561053457600080fd5b506104396105433660046121c4565b600c6020526000908152604090205460ff1681565b34801561056457600080fd5b506101d9610573366004612512565b611a45565b34801561058457600080fd5b5061023360075481565b34801561059a57600080fd5b50600154610286906001600160a01b031681565b6000848152600a602052604090205460ff16156105e65760405162461bcd60e51b81526004016105dd90612536565b60405180910390fd5b603283106106365760405162461bcd60e51b815260206004820152601760248201527f4e6f7420612076616c69642073656e7469656e7420494400000000000000000060448201526064016105dd565b600154604051633dc303c160e21b81526004810186905283916001600160a01b03169063f70c0f0490602401602060405180830381865afa15801561067f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a39190612584565b6106ad91906125b3565b3410156106cc5760405162461bcd60e51b81526004016105dd906125ca565b3332146106eb5760405162461bcd60e51b81526004016105dd906125ff565b336001600160a01b038216811461084c576004805460405163090c9a2d60e41b81526000926001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116936390c9a2d0936107529388938a93169101612655565b602060405180830381865afa15801561076f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107939190612678565b9050806107b25760405162461bcd60e51b81526004016105dd9061269a565b600354604051627eeac760e11b81526001600160a01b03858116600483015260248201889052600092169062fdd58e90604401602060405180830381865afa158015610802573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108269190612584565b116108435760405162461bcd60e51b81526004016105dd906126d1565b829150506108dd565b600354604051627eeac760e11b81526001600160a01b03838116600483015260248201879052600092169062fdd58e90604401602060405180830381865afa15801561089c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c09190612584565b116108dd5760405162461bcd60e51b81526004016105dd906126d1565b6000858152600c602052604090205460ff161561091b576008548311156109165760405162461bcd60e51b81526004016105dd90612714565b610961565b6007546000868152600b6020908152604080832088845290915290205461094390859061275b565b11156109615760405162461bcd60e51b81526004016105dd9061276e565b61096b8584611abe565b60005b83811015610a2a576000868152600b60209081526040808320888452909152812080549161099b836127a5565b909155505060015460405163710d417960e11b81526001600160a01b039091169063e21a82f2906109d49085908a9033906004016127be565b6020604051808303816000875af11580156109f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a179190612584565b5080610a22816127a5565b91505061096e565b505050505050565b610a3a611fb6565b600955565b610a47611fb6565b6000908152600d60205260409020805460ff19811660ff90911615179055565b6000828152600a602052604090205460ff1615610a965760405162461bcd60e51b81526004016105dd90612536565b600082815260056020526040902054811115610b095760405162461bcd60e51b815260206004820152602c60248201527f43616e2774206d696e742074686973206d616e7920696e20612073696e676c6560448201526b103a3930b739b0b1ba34b7b760a11b60648201526084016105dd565b600154604051633dc303c160e21b81526004810184905282916001600160a01b03169063f70c0f0490602401602060405180830381865afa158015610b52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b769190612584565b610b8091906125b3565b341015610b9f5760405162461bcd60e51b81526004016105dd906125ca565b333214610bbe5760405162461bcd60e51b81526004016105dd906125ff565b610bc88282611abe565b60005b81811015610c5d57600154604051630d4d151360e01b81526001600160a01b0390911690630d4d151390610c07903390879082906004016127be565b6020604051808303816000875af1158015610c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4a9190612584565b5080610c55816127a5565b915050610bcb565b505050565b610c6a611fb6565b610c746000612010565b565b610c7e611fb6565b60009384526005602052604090932091909155600655600755565b6001600160a01b0382166000908152600e60209081526040808320848452909152812054606303610ccc57506000610cf2565b506001600160a01b0382166000908152600e602090815260408083208484529091529020545b92915050565b610d00611fb6565b6000908152600c60205260409020805460ff19166001179055565b610d23611fb6565b60005b8251811015610da257818181518110610d4157610d416127e1565b6020026020010151600e6000858481518110610d5f57610d5f6127e1565b6020908102919091018101516001600160a01b03168252818101929092526040908101600090812088825290925290205580610d9a816127a5565b915050610d26565b50505050565b610db0611fb6565b6000908152600a60205260409020805460ff19811660ff90911615179055565b6000848152600a602052604090205460ff1615610dff5760405162461bcd60e51b81526004016105dd90612536565b6000848152600d602052604090205460ff16610e2d5760405162461bcd60e51b81526004016105dd906127f7565b600154604051633dc303c160e21b8152600481018690526001600160a01b039091169063f70c0f0490602401602060405180830381865afa158015610e76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9a9190612584565b341015610eb95760405162461bcd60e51b81526004016105dd906125ca565b333214610ed85760405162461bcd60e51b81526004016105dd906125ff565b336001600160a01b0383168114610fa4576004805460405163090c9a2d60e41b81526000926001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116936390c9a2d093610f3f9388938b93169101612655565b602060405180830381865afa158015610f5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f809190612678565b905080610f9f5760405162461bcd60e51b81526004016105dd9061269a565b839150505b604080516001600160a01b038316602082015280820191909152600660608201526536b2b6b132b960d11b608082015260009060a001604051602081830303815290604052805190602001209050610ffc8186612060565b6110395760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b21031b7bab837b760911b60448201526064016105dd565b6000868152600c602052604090205460ff1615611077576008548311156110725760405162461bcd60e51b81526004016105dd90612714565b6111aa565b336000908152600e60209081526040808320898452909152902054801561116057808411156110b85760405162461bcd60e51b81526004016105dd9061276e565b806063036111085760405162461bcd60e51b815260206004820152601e60248201527f416c7265616479206d696e74656420746f74616c20616c6c6f746d656e74000060448201526064016105dd565b60006111148583612841565b336000908152600e602090815260408083208c8452909152812082905590915081900361115a57336000908152600e602090815260408083208b84529091529020606390555b506111a8565b806000036111a85760018411156111895760405162461bcd60e51b81526004016105dd9061276e565b336000908152600e602090815260408083208a84529091529020606390555b505b6111b48684611abe565b60005b838110156112495760015460405163710d417960e11b81526001600160a01b039091169063e21a82f2906111f39086908b9033906004016127be565b6020604051808303816000875af1158015611212573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112369190612584565b5080611241816127a5565b9150506111b7565b50505050505050565b6000838152600a602052604090205460ff16156112815760405162461bcd60e51b81526004016105dd90612536565b6000838152600c602052604090205460ff166112df5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420696e207365636f6e642070726573616c65207068617365000000000060448201526064016105dd565b6009546001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a0823190602401602060405180830381865afa15801561132c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113509190612584565b10156113b45760405162461bcd60e51b815260206004820152602d60248201527f4164647265737320646f6573206e6f7420686f6c6420656e6f7567682063757260448201526c6174656420617274776f726b7360981b60648201526084016105dd565b600154604051633dc303c160e21b81526004810185905283916001600160a01b03169063f70c0f0490602401602060405180830381865afa1580156113fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114219190612584565b61142b91906125b3565b34101561144a5760405162461bcd60e51b81526004016105dd906125ca565b3332146114695760405162461bcd60e51b81526004016105dd906125ff565b60085482111561148b5760405162461bcd60e51b81526004016105dd90612714565b336001600160a01b038216811461155a5760025460405163090c9a2d60e41b81526000916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116926390c9a2d0926114f5928792899290911690600401612655565b602060405180830381865afa158015611512573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115369190612678565b9050806115555760405162461bcd60e51b81526004016105dd9061269a565b829150505b6115648484611abe565b60005b838110156115f95760015460405163710d417960e11b81526001600160a01b039091169063e21a82f2906115a3908590899033906004016127be565b6020604051808303816000875af11580156115c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e69190612584565b50806115f1816127a5565b915050611567565b5050505050565b6000838152600a602052604090205460ff161561162f5760405162461bcd60e51b81526004016105dd90612536565b6000838152600d602052604090205460ff161561165e5760405162461bcd60e51b81526004016105dd906127f7565b600154604051633dc303c160e21b81526004810185905283916001600160a01b03169063f70c0f0490602401602060405180830381865afa1580156116a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116cb9190612584565b6116d591906125b3565b3410156116f45760405162461bcd60e51b81526004016105dd906125ca565b3332146117135760405162461bcd60e51b81526004016105dd906125ff565b336001600160a01b03821681146117df576004805460405163090c9a2d60e41b81526000926001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116936390c9a2d09361177a9388938a93169101612655565b602060405180830381865afa158015611797573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bb9190612678565b9050806117da5760405162461bcd60e51b81526004016105dd9061269a565b829150505b6001600160a01b0381166000908152600e602090815260408083208784529091529020548061185c5760405162461bcd60e51b815260206004820152602360248201527f4e6f20617661696c61626c65206d696e747320666f722074686973206164647260448201526265737360e81b60648201526084016105dd565b6000858152600c602052604090205460ff161561189a576008548411156118955760405162461bcd60e51b81526004016105dd90612714565b611970565b808411156118ba5760405162461bcd60e51b81526004016105dd9061276e565b8060630361190a5760405162461bcd60e51b815260206004820152601e60248201527f416c7265616479206d696e74656420746f74616c20616c6c6f746d656e74000060448201526064016105dd565b60006119168583612841565b6001600160a01b0384166000908152600e602090815260408083208a8452909152812082905590915081900361196e576001600160a01b0383166000908152600e602090815260408083208984529091529020606390555b505b61197a8585611abe565b60005b84811015610a2a5760015460405163710d417960e11b81526001600160a01b039091169063e21a82f2906119b99086908a9033906004016127be565b6020604051808303816000875af11580156119d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119fc9190612584565b5080611a07816127a5565b91505061197d565b611a17611fb6565b600180546001600160a01b039384166001600160a01b03199182161790915560038054929093169116179055565b611a4d611fb6565b6001600160a01b038116611ab25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105dd565b611abb81612010565b50565b3415611fb257600154604051633dc303c160e21b81526004810184905260009183916001600160a01b039091169063f70c0f0490602401602060405180830381865afa158015611b12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b369190612584565b611b4091906125b3565b600154604051633dc303c160e21b81526004810186905291925060009184916001600160a01b03169063f70c0f0490602401602060405180830381865afa158015611b8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb39190612584565b611bbd91906125b3565b611bc79034612841565b90508015611bfe57604051339082156108fc029083906000818181858888f19350505050158015611bfc573d6000803e3d6000fd5b505b600154604080516315ce21bd60e21b815290516000926001600160a01b03169163573886f49160048083019260209291908290030181865afa158015611c48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6c9190612584565b611c77606485612854565b611c8191906125b3565b90508015611d3a57600160009054906101000a90046001600160a01b03166001600160a01b031663a3fd3a8e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d009190612876565b6001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015611d38573d6000803e3d6000fd5b505b6000611d468285612841565b60015460405163cc74234b60e01b81526004810189905291925060009182916001600160a01b03169063cc74234b90602401602060405180830381865afa158015611d95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db99190612584565b1115611ef05760015460405163cc74234b60e01b8152600481018990526001600160a01b039091169063cc74234b90602401602060405180830381865afa158015611e08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2c9190612584565b611e37606484612854565b611e4191906125b3565b90508015611ef057600154604051636bd8225b60e11b8152600481018990526001600160a01b039091169063d7b044b690602401602060405180830381865afa158015611e92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb69190612876565b6001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015611eee573d6000803e3d6000fd5b505b6000611efc8284612841565b90508015611fab5760015460405163a47d29cb60e01b8152600481018a90526001600160a01b039091169063a47d29cb90602401602060405180830381865afa158015611f4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f719190612876565b6001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015611fa9573d6000803e3d6000fd5b505b5050505050505b5050565b6000546001600160a01b03163314610c745760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105dd565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080600184846040015185600001518660200151604051600081526020016040526040516120ab949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa1580156120cd573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166121305760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016105dd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03161491505092915050565b6001600160a01b0381168114611abb57600080fd5b6000806000806080858703121561219957600080fd5b84359350602085013592506040850135915060608501356121b98161216e565b939692955090935050565b6000602082840312156121d657600080fd5b5035919050565b600080604083850312156121f057600080fd5b82356121fb8161216e565b946020939093013593505050565b6000806040838503121561221c57600080fd5b50508035926020909101359150565b6000806000806080858703121561224157600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561229c5761229c61225d565b604052919050565b600067ffffffffffffffff8211156122be576122be61225d565b5060051b60200190565b600082601f8301126122d957600080fd5b813560206122ee6122e9836122a4565b612273565b82815260059290921b8401810191818101908684111561230d57600080fd5b8286015b848110156123285780358352918301918301612311565b509695505050505050565b60008060006060848603121561234857600080fd5b8335925060208085013567ffffffffffffffff8082111561236857600080fd5b818701915087601f83011261237c57600080fd5b813561238a6122e9826122a4565b81815260059190911b8301840190848101908a8311156123a957600080fd5b938501935b828510156123d05784356123c18161216e565b825293850193908501906123ae565b9650505060408701359250808311156123e857600080fd5b50506123f6868287016122c8565b9150509250925092565b60008060008084860360c081121561241757600080fd5b853594506060601f198201121561242d57600080fd5b506040516060810181811067ffffffffffffffff821117156124515761245161225d565b80604052506020860135815260408601356020820152606086013560ff8116811461247b57600080fd5b6040820152925060808501356124908161216e565b9396929550929360a00135925050565b6000806000606084860312156124b557600080fd5b833592506020840135915060408401356124ce8161216e565b809150509250925092565b600080604083850312156124ec57600080fd5b82356124f78161216e565b915060208301356125078161216e565b809150509250929050565b60006020828403121561252457600080fd5b813561252f8161216e565b9392505050565b6020808252602e908201527f50726f6a6563742063616e6e6f74206265206d696e746564207468726f75676860408201526d081d1a1a5cc818dbdb9d1c9858dd60921b606082015260800190565b60006020828403121561259657600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610cf257610cf261259d565b6020808252818101527f4d7573742073656e64206d696e696d756d2076616c756520746f206d696e7421604082015260600190565b60208082526036908201527f526576657274696e672c204d6574686f642063616e206f6e6c79206265206361604082015275363632b2103234b932b1ba363c90313c903ab9b2b91760511b606082015260800190565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561268a57600080fd5b8151801515811461252f57600080fd5b6020808252601e908201527f696e76616c69642064656c65676174652d7661756c742070616972696e670000604082015260600190565b60208082526023908201527f4e6f206d656d6265727368697020746f6b656e7320696e20746869732077616c6040820152621b195d60ea1b606082015260800190565b60208082526027908201527f43616e2774206d696e742074686973206d616e7920696e206f6e65207472616e60408201526639b0b1ba34b7b760c91b606082015260800190565b80820180821115610cf257610cf261259d565b6020808252601b908201527f576f756c6420657863656564206d696e7420616c6c6f746d656e740000000000604082015260600190565b6000600182016127b7576127b761259d565b5060010190565b6001600160a01b0393841681526020810192909252909116604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6020808252602a908201527f4e6f7420612076616c6964206d696e74696e672066756e6374696f6e20666f72604082015269020746869732064726f760b41b606082015260800190565b81810381811115610cf257610cf261259d565b60008261287157634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561288857600080fd5b815161252f8161216e56fea264697066735822122063dd0a713c430fd9b0dd750485266333814461cd5ee31515c02d94f0f49c951f64736f6c63430008130033000000000000000000000000b7ec7bbd2d2193b47027247fc666fb342d23c4b50000000000000000000000000170227514a274826685bf81aed06e421817557200000000000000000000000000000000000076a84fef008cdabe6409d2fe638b0000000000000000000000001539330800eb03c4da74cdd25c5dad03a7ec3623

Deployed Bytecode

0x6080604052600436106101c15760003560e01c8063a961c235116100f7578063d4fc6e8911610095578063f1ace46c11610064578063f1ace46c14610528578063f2fde38b14610558578063f82288a614610578578063f9cd69a41461058e57600080fd5b8063d4fc6e89146104cf578063d7a48cb2146104e2578063d9820d43146104f5578063e692c49f1461050857600080fd5b8063bee2ddc2116100d1578063bee2ddc214610449578063c655c9dc14610479578063ce1fcd541461048f578063d2cc472f146104af57600080fd5b8063a961c235146103c9578063adb1dd38146103e9578063bca1d4511461040957600080fd5b8063731ba998116101645780637b1039991161013e5780637b103999146103415780638da5cb5b14610375578063a075b7c714610393578063a7ee066d146103b357600080fd5b8063731ba998146102c6578063771b6179146102dc578063774e68691461030957600080fd5b806346e670d3116101a057806346e670d31461024657806351ec8d1e1461026657806370876c981461029e578063715018a6146102b157600080fd5b8062194d16146101c65780632a7df06f146101db5780633b492873146101fb575b600080fd5b6101d96101d4366004612183565b6105ae565b005b3480156101e757600080fd5b506101d96101f63660046121c4565b610a32565b34801561020757600080fd5b506102336102163660046121dd565b600e60209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561025257600080fd5b506101d96102613660046121c4565b610a3f565b34801561027257600080fd5b50600354610286906001600160a01b031681565b6040516001600160a01b03909116815260200161023d565b6101d96102ac366004612209565b610a67565b3480156102bd57600080fd5b506101d9610c62565b3480156102d257600080fd5b5061023360085481565b3480156102e857600080fd5b506102336102f73660046121c4565b60056020526000908152604090205481565b34801561031557600080fd5b50610233610324366004612209565b600b60209081526000928352604080842090915290825290205481565b34801561034d57600080fd5b506102867f00000000000000000000000000000000000076a84fef008cdabe6409d2fe638b81565b34801561038157600080fd5b506000546001600160a01b0316610286565b34801561039f57600080fd5b506101d96103ae36600461222b565b610c76565b3480156103bf57600080fd5b5061023360065481565b3480156103d557600080fd5b506102336103e43660046121dd565b610c99565b3480156103f557600080fd5b506101d96104043660046121c4565b610cf8565b34801561041557600080fd5b506104396104243660046121c4565b600d6020526000908152604090205460ff1681565b604051901515815260200161023d565b34801561045557600080fd5b506104396104643660046121c4565b600a6020526000908152604090205460ff1681565b34801561048557600080fd5b5061023360095481565b34801561049b57600080fd5b506101d96104aa366004612333565b610d1b565b3480156104bb57600080fd5b506101d96104ca3660046121c4565b610da8565b6101d96104dd366004612400565b610dd0565b6101d96104f03660046124a0565b611252565b6101d96105033660046124a0565b611600565b34801561051457600080fd5b506101d96105233660046124d9565b611a0f565b34801561053457600080fd5b506104396105433660046121c4565b600c6020526000908152604090205460ff1681565b34801561056457600080fd5b506101d9610573366004612512565b611a45565b34801561058457600080fd5b5061023360075481565b34801561059a57600080fd5b50600154610286906001600160a01b031681565b6000848152600a602052604090205460ff16156105e65760405162461bcd60e51b81526004016105dd90612536565b60405180910390fd5b603283106106365760405162461bcd60e51b815260206004820152601760248201527f4e6f7420612076616c69642073656e7469656e7420494400000000000000000060448201526064016105dd565b600154604051633dc303c160e21b81526004810186905283916001600160a01b03169063f70c0f0490602401602060405180830381865afa15801561067f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a39190612584565b6106ad91906125b3565b3410156106cc5760405162461bcd60e51b81526004016105dd906125ca565b3332146106eb5760405162461bcd60e51b81526004016105dd906125ff565b336001600160a01b038216811461084c576004805460405163090c9a2d60e41b81526000926001600160a01b037f00000000000000000000000000000000000076a84fef008cdabe6409d2fe638b8116936390c9a2d0936107529388938a93169101612655565b602060405180830381865afa15801561076f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107939190612678565b9050806107b25760405162461bcd60e51b81526004016105dd9061269a565b600354604051627eeac760e11b81526001600160a01b03858116600483015260248201889052600092169062fdd58e90604401602060405180830381865afa158015610802573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108269190612584565b116108435760405162461bcd60e51b81526004016105dd906126d1565b829150506108dd565b600354604051627eeac760e11b81526001600160a01b03838116600483015260248201879052600092169062fdd58e90604401602060405180830381865afa15801561089c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c09190612584565b116108dd5760405162461bcd60e51b81526004016105dd906126d1565b6000858152600c602052604090205460ff161561091b576008548311156109165760405162461bcd60e51b81526004016105dd90612714565b610961565b6007546000868152600b6020908152604080832088845290915290205461094390859061275b565b11156109615760405162461bcd60e51b81526004016105dd9061276e565b61096b8584611abe565b60005b83811015610a2a576000868152600b60209081526040808320888452909152812080549161099b836127a5565b909155505060015460405163710d417960e11b81526001600160a01b039091169063e21a82f2906109d49085908a9033906004016127be565b6020604051808303816000875af11580156109f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a179190612584565b5080610a22816127a5565b91505061096e565b505050505050565b610a3a611fb6565b600955565b610a47611fb6565b6000908152600d60205260409020805460ff19811660ff90911615179055565b6000828152600a602052604090205460ff1615610a965760405162461bcd60e51b81526004016105dd90612536565b600082815260056020526040902054811115610b095760405162461bcd60e51b815260206004820152602c60248201527f43616e2774206d696e742074686973206d616e7920696e20612073696e676c6560448201526b103a3930b739b0b1ba34b7b760a11b60648201526084016105dd565b600154604051633dc303c160e21b81526004810184905282916001600160a01b03169063f70c0f0490602401602060405180830381865afa158015610b52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b769190612584565b610b8091906125b3565b341015610b9f5760405162461bcd60e51b81526004016105dd906125ca565b333214610bbe5760405162461bcd60e51b81526004016105dd906125ff565b610bc88282611abe565b60005b81811015610c5d57600154604051630d4d151360e01b81526001600160a01b0390911690630d4d151390610c07903390879082906004016127be565b6020604051808303816000875af1158015610c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4a9190612584565b5080610c55816127a5565b915050610bcb565b505050565b610c6a611fb6565b610c746000612010565b565b610c7e611fb6565b60009384526005602052604090932091909155600655600755565b6001600160a01b0382166000908152600e60209081526040808320848452909152812054606303610ccc57506000610cf2565b506001600160a01b0382166000908152600e602090815260408083208484529091529020545b92915050565b610d00611fb6565b6000908152600c60205260409020805460ff19166001179055565b610d23611fb6565b60005b8251811015610da257818181518110610d4157610d416127e1565b6020026020010151600e6000858481518110610d5f57610d5f6127e1565b6020908102919091018101516001600160a01b03168252818101929092526040908101600090812088825290925290205580610d9a816127a5565b915050610d26565b50505050565b610db0611fb6565b6000908152600a60205260409020805460ff19811660ff90911615179055565b6000848152600a602052604090205460ff1615610dff5760405162461bcd60e51b81526004016105dd90612536565b6000848152600d602052604090205460ff16610e2d5760405162461bcd60e51b81526004016105dd906127f7565b600154604051633dc303c160e21b8152600481018690526001600160a01b039091169063f70c0f0490602401602060405180830381865afa158015610e76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9a9190612584565b341015610eb95760405162461bcd60e51b81526004016105dd906125ca565b333214610ed85760405162461bcd60e51b81526004016105dd906125ff565b336001600160a01b0383168114610fa4576004805460405163090c9a2d60e41b81526000926001600160a01b037f00000000000000000000000000000000000076a84fef008cdabe6409d2fe638b8116936390c9a2d093610f3f9388938b93169101612655565b602060405180830381865afa158015610f5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f809190612678565b905080610f9f5760405162461bcd60e51b81526004016105dd9061269a565b839150505b604080516001600160a01b038316602082015280820191909152600660608201526536b2b6b132b960d11b608082015260009060a001604051602081830303815290604052805190602001209050610ffc8186612060565b6110395760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b21031b7bab837b760911b60448201526064016105dd565b6000868152600c602052604090205460ff1615611077576008548311156110725760405162461bcd60e51b81526004016105dd90612714565b6111aa565b336000908152600e60209081526040808320898452909152902054801561116057808411156110b85760405162461bcd60e51b81526004016105dd9061276e565b806063036111085760405162461bcd60e51b815260206004820152601e60248201527f416c7265616479206d696e74656420746f74616c20616c6c6f746d656e74000060448201526064016105dd565b60006111148583612841565b336000908152600e602090815260408083208c8452909152812082905590915081900361115a57336000908152600e602090815260408083208b84529091529020606390555b506111a8565b806000036111a85760018411156111895760405162461bcd60e51b81526004016105dd9061276e565b336000908152600e602090815260408083208a84529091529020606390555b505b6111b48684611abe565b60005b838110156112495760015460405163710d417960e11b81526001600160a01b039091169063e21a82f2906111f39086908b9033906004016127be565b6020604051808303816000875af1158015611212573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112369190612584565b5080611241816127a5565b9150506111b7565b50505050505050565b6000838152600a602052604090205460ff16156112815760405162461bcd60e51b81526004016105dd90612536565b6000838152600c602052604090205460ff166112df5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420696e207365636f6e642070726573616c65207068617365000000000060448201526064016105dd565b6009546001546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a0823190602401602060405180830381865afa15801561132c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113509190612584565b10156113b45760405162461bcd60e51b815260206004820152602d60248201527f4164647265737320646f6573206e6f7420686f6c6420656e6f7567682063757260448201526c6174656420617274776f726b7360981b60648201526084016105dd565b600154604051633dc303c160e21b81526004810185905283916001600160a01b03169063f70c0f0490602401602060405180830381865afa1580156113fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114219190612584565b61142b91906125b3565b34101561144a5760405162461bcd60e51b81526004016105dd906125ca565b3332146114695760405162461bcd60e51b81526004016105dd906125ff565b60085482111561148b5760405162461bcd60e51b81526004016105dd90612714565b336001600160a01b038216811461155a5760025460405163090c9a2d60e41b81526000916001600160a01b037f00000000000000000000000000000000000076a84fef008cdabe6409d2fe638b8116926390c9a2d0926114f5928792899290911690600401612655565b602060405180830381865afa158015611512573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115369190612678565b9050806115555760405162461bcd60e51b81526004016105dd9061269a565b829150505b6115648484611abe565b60005b838110156115f95760015460405163710d417960e11b81526001600160a01b039091169063e21a82f2906115a3908590899033906004016127be565b6020604051808303816000875af11580156115c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e69190612584565b50806115f1816127a5565b915050611567565b5050505050565b6000838152600a602052604090205460ff161561162f5760405162461bcd60e51b81526004016105dd90612536565b6000838152600d602052604090205460ff161561165e5760405162461bcd60e51b81526004016105dd906127f7565b600154604051633dc303c160e21b81526004810185905283916001600160a01b03169063f70c0f0490602401602060405180830381865afa1580156116a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116cb9190612584565b6116d591906125b3565b3410156116f45760405162461bcd60e51b81526004016105dd906125ca565b3332146117135760405162461bcd60e51b81526004016105dd906125ff565b336001600160a01b03821681146117df576004805460405163090c9a2d60e41b81526000926001600160a01b037f00000000000000000000000000000000000076a84fef008cdabe6409d2fe638b8116936390c9a2d09361177a9388938a93169101612655565b602060405180830381865afa158015611797573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bb9190612678565b9050806117da5760405162461bcd60e51b81526004016105dd9061269a565b829150505b6001600160a01b0381166000908152600e602090815260408083208784529091529020548061185c5760405162461bcd60e51b815260206004820152602360248201527f4e6f20617661696c61626c65206d696e747320666f722074686973206164647260448201526265737360e81b60648201526084016105dd565b6000858152600c602052604090205460ff161561189a576008548411156118955760405162461bcd60e51b81526004016105dd90612714565b611970565b808411156118ba5760405162461bcd60e51b81526004016105dd9061276e565b8060630361190a5760405162461bcd60e51b815260206004820152601e60248201527f416c7265616479206d696e74656420746f74616c20616c6c6f746d656e74000060448201526064016105dd565b60006119168583612841565b6001600160a01b0384166000908152600e602090815260408083208a8452909152812082905590915081900361196e576001600160a01b0383166000908152600e602090815260408083208984529091529020606390555b505b61197a8585611abe565b60005b84811015610a2a5760015460405163710d417960e11b81526001600160a01b039091169063e21a82f2906119b99086908a9033906004016127be565b6020604051808303816000875af11580156119d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119fc9190612584565b5080611a07816127a5565b91505061197d565b611a17611fb6565b600180546001600160a01b039384166001600160a01b03199182161790915560038054929093169116179055565b611a4d611fb6565b6001600160a01b038116611ab25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105dd565b611abb81612010565b50565b3415611fb257600154604051633dc303c160e21b81526004810184905260009183916001600160a01b039091169063f70c0f0490602401602060405180830381865afa158015611b12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b369190612584565b611b4091906125b3565b600154604051633dc303c160e21b81526004810186905291925060009184916001600160a01b03169063f70c0f0490602401602060405180830381865afa158015611b8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb39190612584565b611bbd91906125b3565b611bc79034612841565b90508015611bfe57604051339082156108fc029083906000818181858888f19350505050158015611bfc573d6000803e3d6000fd5b505b600154604080516315ce21bd60e21b815290516000926001600160a01b03169163573886f49160048083019260209291908290030181865afa158015611c48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6c9190612584565b611c77606485612854565b611c8191906125b3565b90508015611d3a57600160009054906101000a90046001600160a01b03166001600160a01b031663a3fd3a8e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d009190612876565b6001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015611d38573d6000803e3d6000fd5b505b6000611d468285612841565b60015460405163cc74234b60e01b81526004810189905291925060009182916001600160a01b03169063cc74234b90602401602060405180830381865afa158015611d95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db99190612584565b1115611ef05760015460405163cc74234b60e01b8152600481018990526001600160a01b039091169063cc74234b90602401602060405180830381865afa158015611e08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2c9190612584565b611e37606484612854565b611e4191906125b3565b90508015611ef057600154604051636bd8225b60e11b8152600481018990526001600160a01b039091169063d7b044b690602401602060405180830381865afa158015611e92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb69190612876565b6001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015611eee573d6000803e3d6000fd5b505b6000611efc8284612841565b90508015611fab5760015460405163a47d29cb60e01b8152600481018a90526001600160a01b039091169063a47d29cb90602401602060405180830381865afa158015611f4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f719190612876565b6001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015611fa9573d6000803e3d6000fd5b505b5050505050505b5050565b6000546001600160a01b03163314610c745760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105dd565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080600184846040015185600001518660200151604051600081526020016040526040516120ab949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa1580156120cd573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166121305760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016105dd565b7f0000000000000000000000001539330800eb03c4da74cdd25c5dad03a7ec36236001600160a01b0316816001600160a01b03161491505092915050565b6001600160a01b0381168114611abb57600080fd5b6000806000806080858703121561219957600080fd5b84359350602085013592506040850135915060608501356121b98161216e565b939692955090935050565b6000602082840312156121d657600080fd5b5035919050565b600080604083850312156121f057600080fd5b82356121fb8161216e565b946020939093013593505050565b6000806040838503121561221c57600080fd5b50508035926020909101359150565b6000806000806080858703121561224157600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561229c5761229c61225d565b604052919050565b600067ffffffffffffffff8211156122be576122be61225d565b5060051b60200190565b600082601f8301126122d957600080fd5b813560206122ee6122e9836122a4565b612273565b82815260059290921b8401810191818101908684111561230d57600080fd5b8286015b848110156123285780358352918301918301612311565b509695505050505050565b60008060006060848603121561234857600080fd5b8335925060208085013567ffffffffffffffff8082111561236857600080fd5b818701915087601f83011261237c57600080fd5b813561238a6122e9826122a4565b81815260059190911b8301840190848101908a8311156123a957600080fd5b938501935b828510156123d05784356123c18161216e565b825293850193908501906123ae565b9650505060408701359250808311156123e857600080fd5b50506123f6868287016122c8565b9150509250925092565b60008060008084860360c081121561241757600080fd5b853594506060601f198201121561242d57600080fd5b506040516060810181811067ffffffffffffffff821117156124515761245161225d565b80604052506020860135815260408601356020820152606086013560ff8116811461247b57600080fd5b6040820152925060808501356124908161216e565b9396929550929360a00135925050565b6000806000606084860312156124b557600080fd5b833592506020840135915060408401356124ce8161216e565b809150509250925092565b600080604083850312156124ec57600080fd5b82356124f78161216e565b915060208301356125078161216e565b809150509250929050565b60006020828403121561252457600080fd5b813561252f8161216e565b9392505050565b6020808252602e908201527f50726f6a6563742063616e6e6f74206265206d696e746564207468726f75676860408201526d081d1a1a5cc818dbdb9d1c9858dd60921b606082015260800190565b60006020828403121561259657600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610cf257610cf261259d565b6020808252818101527f4d7573742073656e64206d696e696d756d2076616c756520746f206d696e7421604082015260600190565b60208082526036908201527f526576657274696e672c204d6574686f642063616e206f6e6c79206265206361604082015275363632b2103234b932b1ba363c90313c903ab9b2b91760511b606082015260800190565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561268a57600080fd5b8151801515811461252f57600080fd5b6020808252601e908201527f696e76616c69642064656c65676174652d7661756c742070616972696e670000604082015260600190565b60208082526023908201527f4e6f206d656d6265727368697020746f6b656e7320696e20746869732077616c6040820152621b195d60ea1b606082015260800190565b60208082526027908201527f43616e2774206d696e742074686973206d616e7920696e206f6e65207472616e60408201526639b0b1ba34b7b760c91b606082015260800190565b80820180821115610cf257610cf261259d565b6020808252601b908201527f576f756c6420657863656564206d696e7420616c6c6f746d656e740000000000604082015260600190565b6000600182016127b7576127b761259d565b5060010190565b6001600160a01b0393841681526020810192909252909116604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6020808252602a908201527f4e6f7420612076616c6964206d696e74696e672066756e6374696f6e20666f72604082015269020746869732064726f760b41b606082015260800190565b81810381811115610cf257610cf261259d565b60008261287157634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561288857600080fd5b815161252f8161216e56fea264697066735822122063dd0a713c430fd9b0dd750485266333814461cd5ee31515c02d94f0f49c951f64736f6c63430008130033

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

000000000000000000000000b7ec7bbd2d2193b47027247fc666fb342d23c4b50000000000000000000000000170227514a274826685bf81aed06e421817557200000000000000000000000000000000000076a84fef008cdabe6409d2fe638b0000000000000000000000001539330800eb03c4da74cdd25c5dad03a7ec3623

-----Decoded View---------------
Arg [0] : _curatedAddress (address): 0xb7eC7bbd2d2193B47027247FC666fB342D23c4B5
Arg [1] : _membershipAddress (address): 0x0170227514A274826685BF81AED06e4218175572
Arg [2] : _registry (address): 0x00000000000076A84feF008CDAbe6409d2FE638B
Arg [3] : _adminSigner (address): 0x1539330800EB03c4dA74CDd25C5DaD03A7Ec3623

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000b7ec7bbd2d2193b47027247fc666fb342d23c4b5
Arg [1] : 0000000000000000000000000170227514a274826685bf81aed06e4218175572
Arg [2] : 00000000000000000000000000000000000076a84fef008cdabe6409d2fe638b
Arg [3] : 0000000000000000000000001539330800eb03c4da74cdd25c5dad03a7ec3623


Deployed Bytecode Sourcemap

16973:12694:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21128:1660;;;;;;:::i;:::-;;:::i;:::-;;19174:106;;;;;;;;;;-1:-1:-1;19174:106:0;;;;;:::i;:::-;;:::i;17951:75::-;;;;;;;;;;-1:-1:-1;17951:75:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;1258:25:1;;;1246:2;1231:18;17951:75:0;;;;;;;;24060:131;;;;;;;;;;-1:-1:-1;24060:131:0;;;;;:::i;:::-;;:::i;17099:45::-;;;;;;;;;;-1:-1:-1;17099:45:0;;;;-1:-1:-1;;;;;17099:45:0;;;;;;-1:-1:-1;;;;;1485:32:1;;;1467:51;;1455:2;1440:18;17099:45:0;1294:230:1;20405:715:0;;;;;;:::i;:::-;;:::i;10326:103::-;;;;;;;;;;;;;:::i;17460:33::-;;;;;;;;;;;;;;;;17245:45;;;;;;;;;;-1:-1:-1;17245:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;17609:67;;;;;;;;;;-1:-1:-1;17609:67:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;17191:45;;;;;;;;;;;;;;;9678:87;;;;;;;;;;-1:-1:-1;9724:7:0;9751:6;-1:-1:-1;;;;;9751:6:0;9678:87;;18791:240;;;;;;;;;;-1:-1:-1;18791:240:0;;;;;:::i;:::-;;:::i;17325:29::-;;;;;;;;;;;;;;;;20107:286;;;;;;;;;;-1:-1:-1;20107:286:0;;;;;:::i;:::-;;:::i;19039:127::-;;;;;;;;;;-1:-1:-1;19039:127:0;;;;;:::i;:::-;;:::i;17810:44::-;;;;;;;;;;-1:-1:-1;17810:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2780:14:1;;2773:22;2755:41;;2743:2;2728:18;17810:44:0;2615:187:1;17562:40:0;;;;;;;;;;-1:-1:-1;17562:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17518:35;;;;;;;;;;;;;;;;19822:277;;;;;;;;;;-1:-1:-1;19822:277:0;;;;;:::i;:::-;;:::i;28114:123::-;;;;;;;;;;-1:-1:-1;28114:123:0;;;;;:::i;:::-;;:::i;25986:2120::-;;;;;;:::i;:::-;;:::i;22796:1256::-;;;;;;:::i;:::-;;:::i;24199:1779::-;;;;;;:::i;:::-;;:::i;19288:234::-;;;;;;;;;;-1:-1:-1;19288:234:0;;;;;:::i;:::-;;:::i;17685:50::-;;;;;;;;;;-1:-1:-1;17685:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10584:201;;;;;;;;;;-1:-1:-1;10584:201:0;;;;;:::i;:::-;;:::i;17390:37::-;;;;;;;;;;;;;;;;17018;;;;;;;;;;-1:-1:-1;17018:37:0;;;;-1:-1:-1;;;;;17018:37:0;;;21128:1660;21277:20;;;;:8;:20;;;;;;;;21276:21;21268:80;;;;-1:-1:-1;;;21268:80:0;;;;;;;:::i;:::-;;;;;;;;;21383:2;21367:13;:18;21359:54;;;;-1:-1:-1;;;21359:54:0;;8266:2:1;21359:54:0;;;8248:21:1;8305:2;8285:18;;;8278:30;8344:25;8324:18;;;8317:53;8387:18;;21359:54:0;8064:347:1;21359:54:0;21445:14;;:56;;-1:-1:-1;;;21445:56:0;;;;;1258:25:1;;;21504:14:0;;-1:-1:-1;;;;;21445:14:0;;:44;;1231:18:1;;21445:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:73;;;;:::i;:::-;21432:9;:86;;21424:131;;;;-1:-1:-1;;;21424:131:0;;;;;;;:::i;:::-;21574:10;21588:9;21574:23;21566:90;;;;-1:-1:-1;;;21566:90:0;;;;;;;:::i;:::-;21689:10;-1:-1:-1;;;;;21718:20:0;;;;21714:509;;21832:17;;;21779:71;;-1:-1:-1;;;21779:71:0;;21756:20;;-1:-1:-1;;;;;21779:8:0;:33;;;;;:71;;21813:9;;21824:6;;21832:17;;21779:71;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21756:94;;21873:15;21865:58;;;;-1:-1:-1;;;21865:58:0;;;;;;;:::i;:::-;21946:18;;:50;;-1:-1:-1;;;21946:50:0;;-1:-1:-1;;;;;10916:32:1;;;21946:50:0;;;10898:51:1;10965:18;;;10958:34;;;21999:1:0;;21946:18;;:28;;10871:18:1;;21946:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;21938:102;;;;-1:-1:-1;;;21938:102:0;;;;;;;:::i;:::-;22067:6;22055:18;;21740:345;21714:509;;;22114:18;;:53;;-1:-1:-1;;;22114:53:0;;-1:-1:-1;;;;;10916:32:1;;;22114:53:0;;;10898:51:1;10965:18;;;10958:34;;;22170:1:0;;22114:18;;:28;;10871:18:1;;22114:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;22106:105;;;;-1:-1:-1;;;22106:105:0;;;;;;;:::i;:::-;22239:30;;;;:18;:30;;;;;;;;22235:298;;;22312:14;;22294;:32;;22286:84;;;;-1:-1:-1;;;22286:84:0;;;;;;;:::i;:::-;22235:298;;;22471:18;;22411:24;;;;:12;:24;;;;;;;;:39;;;;;;;;;:56;;22453:14;;22411:56;:::i;:::-;:78;;22403:118;;;;-1:-1:-1;;;22403:118:0;;;;;;;:::i;:::-;22545:42;22560:10;22572:14;22545;:42::i;:::-;22602:6;22598:183;22618:14;22614:1;:18;22598:183;;;22654:24;;;;:12;:24;;;;;;;;:39;;;;;;;;:41;;;;;;:::i;:::-;;;;-1:-1:-1;;22710:14:0;;:59;;-1:-1:-1;;;22710:59:0;;-1:-1:-1;;;;;22710:14:0;;;;:24;;:59;;22735:9;;22746:10;;22758;;22710:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;22634:3:0;;;;:::i;:::-;;;;22598:183;;;;21257:1531;21128:1660;;;;:::o;19174:106::-;9564:13;:11;:13::i;:::-;19245:16:::1;:27:::0;19174:106::o;24060:131::-;9564:13;:11;:13::i;:::-;24159:24:::1;::::0;;;:12:::1;:24;::::0;;;;;;-1:-1:-1;;24131:52:0;::::1;24159:24;::::0;;::::1;24158:25;24131:52;::::0;;24060:131::o;20405:715::-;20502:20;;;;:8;:20;;;;;;;;20501:21;20493:80;;;;-1:-1:-1;;;20493:80:0;;;;;;;:::i;:::-;20610:22;;;;:10;:22;;;;;;20592:40;;;20584:97;;;;-1:-1:-1;;;20584:97:0;;13023:2:1;20584:97:0;;;13005:21:1;13062:2;13042:18;;;13035:30;13101:34;13081:18;;;13074:62;-1:-1:-1;;;13152:18:1;;;13145:42;13204:19;;20584:97:0;12821:408:1;20584:97:0;20713:14;;:56;;-1:-1:-1;;;20713:56:0;;;;;1258:25:1;;;20772:14:0;;-1:-1:-1;;;;;20713:14:0;;:44;;1231:18:1;;20713:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:73;;;;:::i;:::-;20700:9;:86;;20692:131;;;;-1:-1:-1;;;20692:131:0;;;;;;;:::i;:::-;20842:10;20856:9;20842:23;20834:90;;;;-1:-1:-1;;;20834:90:0;;;;;;;:::i;:::-;20937:42;20952:10;20964:14;20937;:42::i;:::-;20994:6;20990:123;21010:14;21006:1;:18;20990:123;;;21046:14;;:55;;-1:-1:-1;;;21046:55:0;;-1:-1:-1;;;;;21046:14:0;;;;:19;;:55;;21066:10;;21078;;21066;;21046:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;21026:3:0;;;;:::i;:::-;;;;20990:123;;;;20405:715;;:::o;10326:103::-;9564:13;:11;:13::i;:::-;10391:30:::1;10418:1;10391:18;:30::i;:::-;10326:103::o:0;18791:240::-;9564:13;:11;:13::i;:::-;18915:22:::1;::::0;;;:10:::1;:22;::::0;;;;;:33;;;;18959:10:::1;:21:::0;18991:18:::1;:32:::0;18791:240::o;20107:286::-;-1:-1:-1;;;;;20213:23:0;;20189:7;20213:23;;;:13;:23;;;;;;;;:35;;;;;;;;:45;20262:2;20213:51;20209:177;;-1:-1:-1;20288:1:0;20281:8;;20209:177;-1:-1:-1;;;;;;20329:23:0;;;;;;:13;:23;;;;;;;;:35;;;;;;;;:45;20209:177;20107:286;;;;:::o;19039:127::-;9564:13;:11;:13::i;:::-;19121:30:::1;::::0;;;:18:::1;:30;::::0;;;;:37;;-1:-1:-1;;19121:37:0::1;19154:4;19121:37;::::0;;19039:127::o;19822:277::-;9564:13;:11;:13::i;:::-;19959:6:::1;19955:137;19975:10;:17;19971:1;:21;19955:137;;;20067:10;20078:1;20067:13;;;;;;;;:::i;:::-;;;;;;;20014;:28;20028:10;20039:1;20028:13;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;20014:28:0::1;::::0;;;;::::1;::::0;;;;;;;;-1:-1:-1;20014:28:0;;;:40;;;;;;;;:66;19994:3;::::1;::::0;::::1;:::i;:::-;;;;19955:137;;;;19822:277:::0;;;:::o;28114:123::-;9564:13;:11;:13::i;:::-;28209:20:::1;::::0;;;:8:::1;:20;::::0;;;;;;-1:-1:-1;;28185:44:0;::::1;28209:20;::::0;;::::1;28208:21;28185:44;::::0;;28114:123::o;25986:2120::-;26143:20;;;;:8;:20;;;;;;;;26142:21;26134:80;;;;-1:-1:-1;;;26134:80:0;;;;;;;:::i;:::-;26233:24;;;;:12;:24;;;;;;;;26225:79;;;;-1:-1:-1;;;26225:79:0;;;;;;;:::i;:::-;26336:14;;:56;;-1:-1:-1;;;26336:56:0;;;;;1258:25:1;;;-1:-1:-1;;;;;26336:14:0;;;;:44;;1231:18:1;;26336:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26323:9;:69;;26315:114;;;;-1:-1:-1;;;26315:114:0;;;;;;;:::i;:::-;26448:10;26462:9;26448:23;26440:90;;;;-1:-1:-1;;;26440:90:0;;;;;;;:::i;:::-;26563:10;-1:-1:-1;;;;;26590:20:0;;;;26586:254;;26704:17;;;26651:71;;-1:-1:-1;;;26651:71:0;;26628:20;;-1:-1:-1;;;;;26651:8:0;:33;;;;;:71;;26685:9;;26696:6;;26704:17;;26651:71;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26628:94;;26745:15;26737:58;;;;-1:-1:-1;;;26737:58:0;;;;;;;:::i;:::-;26822:6;26810:18;;26612:228;26586:254;26879:30;;;-1:-1:-1;;;;;14007:32:1;;26879:30:0;;;13989:51:1;14056:18;;;14049:30;;;;14115:1;14095:18;;;14088:29;-1:-1:-1;;;14133:18:1;;;14126:36;26852:14:0;;14179:19:1;;26879:30:0;;;;;;;;;;;;26869:41;;;;;;26852:58;;26929:33;26947:6;26955;26929:17;:33::i;:::-;26921:60;;;;-1:-1:-1;;;26921:60:0;;14411:2:1;26921:60:0;;;14393:21:1;14450:2;14430:18;;;14423:30;-1:-1:-1;;;14469:18:1;;;14462:44;14523:18;;26921:60:0;14209:338:1;26921:60:0;27002:30;;;;:18;:30;;;;;;;;26998:911;;;27075:14;;27057;:32;;27049:84;;;;-1:-1:-1;;;27049:84:0;;;;;;;:::i;:::-;26998:911;;;27196:10;27166:13;27182:25;;;:13;:25;;;;;;;;:37;;;;;;;;:47;27248:9;;27244:654;;27304:5;27286:14;:23;;27278:63;;;;-1:-1:-1;;;27278:63:0;;;;;;;:::i;:::-;27368:5;27377:2;27368:11;27360:54;;;;-1:-1:-1;;;27360:54:0;;14754:2:1;27360:54:0;;;14736:21:1;14793:2;14773:18;;;14766:30;14832:32;14812:18;;;14805:60;14882:18;;27360:54:0;14552:354:1;27360:54:0;27433:20;27456:22;27464:14;27456:5;:22;:::i;:::-;27511:10;27497:25;;;;:13;:25;;;;;;;;:37;;;;;;;;:62;;;27433:45;;-1:-1:-1;27582:17:0;;;27578:118;;27638:10;27624:25;;;;:13;:25;;;;;;;;:37;;;;;;;;27674:2;27624:52;;27578:118;27259:452;27244:654;;;27721:5;27730:1;27721:10;27717:181;;27778:1;27760:14;:19;;27752:59;;;;-1:-1:-1;;;27752:59:0;;;;;;;:::i;:::-;27844:10;27830:25;;;;:13;:25;;;;;;;;:37;;;;;;;;27880:2;27830:52;;27717:181;27151:758;26998:911;27919:42;27934:10;27946:14;27919;:42::i;:::-;27976:6;27972:127;27992:14;27988:1;:18;27972:127;;;28028:14;;:59;;-1:-1:-1;;;28028:59:0;;-1:-1:-1;;;;;28028:14:0;;;;:24;;:59;;28053:9;;28064:10;;28076;;28028:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;28008:3:0;;;;:::i;:::-;;;;27972:127;;;;26123:1983;;25986:2120;;;;:::o;22796:1256::-;22927:20;;;;:8;:20;;;;;;;;22926:21;22918:80;;;;-1:-1:-1;;;22918:80:0;;;;;;;:::i;:::-;23017:30;;;;:18;:30;;;;;;;;23009:70;;;;-1:-1:-1;;;23009:70:0;;15246:2:1;23009:70:0;;;15228:21:1;15285:2;15265:18;;;15258:30;15324:29;15304:18;;;15297:57;15371:18;;23009:70:0;15044:351:1;23009:70:0;23134:16;;23098:14;;:32;;-1:-1:-1;;;23098:32:0;;-1:-1:-1;;;;;1485:32:1;;;23098::0;;;1467:51:1;23098:14:0;;;;:24;;1440:18:1;;23098:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:52;;23090:110;;;;-1:-1:-1;;;23090:110:0;;15602:2:1;23090:110:0;;;15584:21:1;15641:2;15621:18;;;15614:30;15680:34;15660:18;;;15653:62;-1:-1:-1;;;15731:18:1;;;15724:43;15784:19;;23090:110:0;15400:409:1;23090:110:0;23232:14;;:56;;-1:-1:-1;;;23232:56:0;;;;;1258:25:1;;;23291:14:0;;-1:-1:-1;;;;;23232:14:0;;:44;;1231:18:1;;23232:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:73;;;;:::i;:::-;23219:9;:86;;23211:131;;;;-1:-1:-1;;;23211:131:0;;;;;;;:::i;:::-;23361:10;23375:9;23361:23;23353:90;;;;-1:-1:-1;;;23353:90:0;;;;;;;:::i;:::-;23480:14;;23462;:32;;23454:84;;;;-1:-1:-1;;;23454:84:0;;;;;;;:::i;:::-;23579:10;-1:-1:-1;;;;;23606:20:0;;;;23602:251;;23720:14;;23667:68;;-1:-1:-1;;;23667:68:0;;23644:20;;-1:-1:-1;;;;;23667:8:0;:33;;;;;:68;;23701:9;;23712:6;;23720:14;;;;23667:68;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23644:91;;23758:15;23750:58;;;;-1:-1:-1;;;23750:58:0;;;;;;;:::i;:::-;23835:6;23823:18;;23628:225;23602:251;23865:42;23880:10;23892:14;23865;:42::i;:::-;23922:6;23918:127;23938:14;23934:1;:18;23918:127;;;23974:14;;:59;;-1:-1:-1;;;23974:59:0;;-1:-1:-1;;;;;23974:14:0;;;;:24;;:59;;23999:9;;24010:10;;24022;;23974:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;23954:3:0;;;;:::i;:::-;;;;23918:127;;;;22907:1145;22796:1256;;;:::o;24199:1779::-;24328:20;;;;:8;:20;;;;;;;;24327:21;24319:80;;;;-1:-1:-1;;;24319:80:0;;;;;;;:::i;:::-;24419:24;;;;:12;:24;;;;;;;;24418:25;24410:80;;;;-1:-1:-1;;;24410:80:0;;;;;;;:::i;:::-;24522:14;;:56;;-1:-1:-1;;;24522:56:0;;;;;1258:25:1;;;24581:14:0;;-1:-1:-1;;;;;24522:14:0;;:44;;1231:18:1;;24522:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:73;;;;:::i;:::-;24509:9;:86;;24501:131;;;;-1:-1:-1;;;24501:131:0;;;;;;;:::i;:::-;24651:10;24665:9;24651:23;24643:90;;;;-1:-1:-1;;;24643:90:0;;;;;;;:::i;:::-;24766:10;-1:-1:-1;;;;;24797:20:0;;;;24793:254;;24911:17;;;24858:71;;-1:-1:-1;;;24858:71:0;;24835:20;;-1:-1:-1;;;;;24858:8:0;:33;;;;;:71;;24892:9;;24903:6;;24911:17;;24858:71;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24835:94;;24952:15;24944:58;;;;-1:-1:-1;;;24944:58:0;;;;;;;:::i;:::-;25029:6;25017:18;;24819:228;24793:254;-1:-1:-1;;;;;25075:24:0;;25059:13;25075:24;;;:13;:24;;;;;;;;:36;;;;;;;;:46;25140:9;25132:57;;;;-1:-1:-1;;;25132:57:0;;16016:2:1;25132:57:0;;;15998:21:1;16055:2;16035:18;;;16028:30;16094:34;16074:18;;;16067:62;-1:-1:-1;;;16145:18:1;;;16138:33;16188:19;;25132:57:0;15814:399:1;25132:57:0;25214:30;;;;:18;:30;;;;;;;;25210:571;;;25287:14;;25269;:32;;25261:84;;;;-1:-1:-1;;;25261:84:0;;;;;;;:::i;:::-;25210:571;;;25404:5;25386:14;:23;;25378:63;;;;-1:-1:-1;;;25378:63:0;;;;;;;:::i;:::-;25464:5;25473:2;25464:11;25456:54;;;;-1:-1:-1;;;25456:54:0;;14754:2:1;25456:54:0;;;14736:21:1;14793:2;14773:18;;;14766:30;14832:32;14812:18;;;14805:60;14882:18;;25456:54:0;14552:354:1;25456:54:0;25525:20;25548:22;25556:14;25548:5;:22;:::i;:::-;-1:-1:-1;;;;;25585:24:0;;;;;;:13;:24;;;;;;;;:36;;;;;;;;:61;;;25525:45;;-1:-1:-1;25665:17:0;;;25661:109;;-1:-1:-1;;;;;25703:24:0;;;;;;:13;:24;;;;;;;;:36;;;;;;;;25752:2;25703:51;;25661:109;25363:418;25210:571;25791:42;25806:10;25818:14;25791;:42::i;:::-;25848:6;25844:127;25864:14;25860:1;:18;25844:127;;;25900:14;;:59;;-1:-1:-1;;;25900:59:0;;-1:-1:-1;;;;;25900:14:0;;;;:24;;:59;;25925:9;;25936:10;;25948;;25900:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;25880:3:0;;;;:::i;:::-;;;;25844:127;;19288:234;9564:13;:11;:13::i;:::-;19394:14:::1;:49:::0;;-1:-1:-1;;;;;19394:49:0;;::::1;-1:-1:-1::0;;;;;;19394:49:0;;::::1;;::::0;;;19454:18:::1;:60:::0;;;;;::::1;::::0;::::1;;::::0;;19288:234::o;10584:201::-;9564:13;:11;:13::i;:::-;-1:-1:-1;;;;;10673:22:0;::::1;10665:73;;;::::0;-1:-1:-1;;;10665:73:0;;16420:2:1;10665:73:0::1;::::0;::::1;16402:21:1::0;16459:2;16439:18;;;16432:30;16498:34;16478:18;;;16471:62;-1:-1:-1;;;16549:18:1;;;16542:36;16595:19;;10665:73:0::1;16218:402:1::0;10665:73:0::1;10749:28;10768:8;10749:18;:28::i;:::-;10584:201:::0;:::o;28245:1419::-;28337:9;:13;28333:1324;;28386:14;;:56;;-1:-1:-1;;;28386:56:0;;;;;1258:25:1;;;28367:16:0;;28445:14;;-1:-1:-1;;;;;28386:14:0;;;;:44;;1231:18:1;;28386:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:73;;;;:::i;:::-;28504:14;;:56;;-1:-1:-1;;;28504:56:0;;;;;1258:25:1;;;28367:92:0;;-1:-1:-1;28474:14:0;;28563;;-1:-1:-1;;;;;28504:14:0;;:44;;1231:18:1;;28504:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:73;;;;:::i;:::-;28491:87;;:9;:87;:::i;:::-;28474:104;-1:-1:-1;28597:10:0;;28593:87;;28628:36;;28636:10;;28628:36;;;;;28657:6;;28628:36;;;;28657:6;28636:10;28628:36;;;;;;;;;;;;;;;;;;;;;28593:87;28734:14;;:33;;;-1:-1:-1;;;28734:33:0;;;;28694:20;;-1:-1:-1;;;;;28734:14:0;;:31;;:33;;;;;;;;;;;;;;:14;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28717:14;28728:3;28717:8;:14;:::i;:::-;:50;;;;:::i;:::-;28694:73;-1:-1:-1;28786:16:0;;28782:119;;28831:14;;;;;;;;;-1:-1:-1;;;;;28831:14:0;-1:-1:-1;;;;;28831:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28823:48:0;:62;28872:12;28823:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28782:119;28915:20;28938:23;28949:12;28938:8;:23;:::i;:::-;29024:14;;:63;;-1:-1:-1;;;29024:63:0;;;;;1258:25:1;;;28915:46:0;;-1:-1:-1;28976:29:0;;;;-1:-1:-1;;;;;29024:14:0;;:51;;1231:18:1;;29024:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:67;29020:398;;;29157:14;;:63;;-1:-1:-1;;;29157:63:0;;;;;1258:25:1;;;-1:-1:-1;;;;;29157:14:0;;;;:51;;1231:18:1;;29157:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29136:18;29151:3;29136:12;:18;:::i;:::-;:84;;;;:::i;:::-;29112:108;-1:-1:-1;29243:25:0;;29239:164;;29297:14;;:53;;-1:-1:-1;;;29297:53:0;;;;;1258:25:1;;;-1:-1:-1;;;;;29297:14:0;;;;:41;;1231:18:1;;29297:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29289:71:0;:94;29361:21;29289:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29239:164;29432:20;29455:36;29470:21;29455:12;:36;:::i;:::-;29432:59;-1:-1:-1;29510:16:0;;29506:140;;29555:14;;:51;;-1:-1:-1;;;29555:51:0;;;;;1258:25:1;;;-1:-1:-1;;;;;29555:14:0;;;;:39;;1231:18:1;;29555:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29547:69:0;:83;29617:12;29547:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29506:140;28352:1305;;;;;;28333:1324;28245:1419;;:::o;9843:132::-;9724:7;9751:6;-1:-1:-1;;;;;9751:6:0;8309:10;9907:23;9899:68;;;;-1:-1:-1;;;9899:68:0;;17313:2:1;9899:68:0;;;17295:21:1;;;17332:18;;;17325:30;17391:34;17371:18;;;17364:62;17443:18;;9899:68:0;17111:356:1;10945:191:0;11019:16;11038:6;;-1:-1:-1;;;;;11055:17:0;;;-1:-1:-1;;;;;;11055:17:0;;;;;;11088:40;;11038:6;;;;;;;11088:40;;11019:16;11088:40;11008:128;10945:191;:::o;19530:284::-;19618:4;19635:14;19652:47;19662:6;19670;:8;;;19680:6;:8;;;19690:6;:8;;;19652:47;;;;;;;;;;;;;;;;;17699:25:1;;;17772:4;17760:17;;;;17755:2;17740:18;;17733:45;17809:2;17794:18;;17787:34;17852:2;17837:18;;17830:34;17686:3;17671:19;;17472:398;19652:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19652:47:0;;-1:-1:-1;;19652:47:0;;;-1:-1:-1;;;;;;;19718:20:0;;19710:57;;;;-1:-1:-1;;;19710:57:0;;18077:2:1;19710:57:0;;;18059:21:1;18116:2;18096:18;;;18089:30;18155:26;18135:18;;;18128:54;18199:18;;19710:57:0;17875:348:1;19710:57:0;19795:11;-1:-1:-1;;;;;19785:21:0;:6;-1:-1:-1;;;;;19785:21:0;;19778:28;;;19530:284;;;;:::o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:452;236:6;244;252;260;313:3;301:9;292:7;288:23;284:33;281:53;;;330:1;327;320:12;281:53;366:9;353:23;343:33;;423:2;412:9;408:18;395:32;385:42;;474:2;463:9;459:18;446:32;436:42;;528:2;517:9;513:18;500:32;541:31;566:5;541:31;:::i;:::-;150:452;;;;-1:-1:-1;150:452:1;;-1:-1:-1;;150:452:1:o;607:180::-;666:6;719:2;707:9;698:7;694:23;690:32;687:52;;;735:1;732;725:12;687:52;-1:-1:-1;758:23:1;;607:180;-1:-1:-1;607:180:1:o;792:315::-;860:6;868;921:2;909:9;900:7;896:23;892:32;889:52;;;937:1;934;927:12;889:52;976:9;963:23;995:31;1020:5;995:31;:::i;:::-;1045:5;1097:2;1082:18;;;;1069:32;;-1:-1:-1;;;792:315:1:o;1529:248::-;1597:6;1605;1658:2;1646:9;1637:7;1633:23;1629:32;1626:52;;;1674:1;1671;1664:12;1626:52;-1:-1:-1;;1697:23:1;;;1767:2;1752:18;;;1739:32;;-1:-1:-1;1529:248:1:o;2225:385::-;2311:6;2319;2327;2335;2388:3;2376:9;2367:7;2363:23;2359:33;2356:53;;;2405:1;2402;2395:12;2356:53;-1:-1:-1;;2428:23:1;;;2498:2;2483:18;;2470:32;;-1:-1:-1;2549:2:1;2534:18;;2521:32;;2600:2;2585:18;2572:32;;-1:-1:-1;2225:385:1;-1:-1:-1;2225:385:1:o;2807:127::-;2868:10;2863:3;2859:20;2856:1;2849:31;2899:4;2896:1;2889:15;2923:4;2920:1;2913:15;2939:275;3010:2;3004:9;3075:2;3056:13;;-1:-1:-1;;3052:27:1;3040:40;;3110:18;3095:34;;3131:22;;;3092:62;3089:88;;;3157:18;;:::i;:::-;3193:2;3186:22;2939:275;;-1:-1:-1;2939:275:1:o;3219:183::-;3279:4;3312:18;3304:6;3301:30;3298:56;;;3334:18;;:::i;:::-;-1:-1:-1;3379:1:1;3375:14;3391:4;3371:25;;3219:183::o;3407:662::-;3461:5;3514:3;3507:4;3499:6;3495:17;3491:27;3481:55;;3532:1;3529;3522:12;3481:55;3568:6;3555:20;3594:4;3618:60;3634:43;3674:2;3634:43;:::i;:::-;3618:60;:::i;:::-;3712:15;;;3798:1;3794:10;;;;3782:23;;3778:32;;;3743:12;;;;3822:15;;;3819:35;;;3850:1;3847;3840:12;3819:35;3886:2;3878:6;3874:15;3898:142;3914:6;3909:3;3906:15;3898:142;;;3980:17;;3968:30;;4018:12;;;;3931;;3898:142;;;-1:-1:-1;4058:5:1;3407:662;-1:-1:-1;;;;;;3407:662:1:o;4074:1281::-;4201:6;4209;4217;4270:2;4258:9;4249:7;4245:23;4241:32;4238:52;;;4286:1;4283;4276:12;4238:52;4322:9;4309:23;4299:33;;4351:2;4404;4393:9;4389:18;4376:32;4427:18;4468:2;4460:6;4457:14;4454:34;;;4484:1;4481;4474:12;4454:34;4522:6;4511:9;4507:22;4497:32;;4567:7;4560:4;4556:2;4552:13;4548:27;4538:55;;4589:1;4586;4579:12;4538:55;4625:2;4612:16;4648:60;4664:43;4704:2;4664:43;:::i;4648:60::-;4742:15;;;4824:1;4820:10;;;;4812:19;;4808:28;;;4773:12;;;;4848:19;;;4845:39;;;4880:1;4877;4870:12;4845:39;4904:11;;;;4924:217;4940:6;4935:3;4932:15;4924:217;;;5020:3;5007:17;5037:31;5062:5;5037:31;:::i;:::-;5081:18;;4957:12;;;;5119;;;;4924:217;;;5160:5;-1:-1:-1;;;5218:2:1;5203:18;;5190:32;;-1:-1:-1;5234:16:1;;;5231:36;;;5263:1;5260;5253:12;5231:36;;;5286:63;5341:7;5330:8;5319:9;5315:24;5286:63;:::i;:::-;5276:73;;;4074:1281;;;;;:::o;5360:1020::-;5469:6;5477;5485;5493;5537:9;5528:7;5524:23;5567:3;5563:2;5559:12;5556:32;;;5584:1;5581;5574:12;5556:32;5607:23;;;-1:-1:-1;5664:4:1;-1:-1:-1;;5646:16:1;;5642:27;5639:47;;;5682:1;5679;5672:12;5639:47;;5715:2;5709:9;5757:4;5749:6;5745:17;5828:6;5816:10;5813:22;5792:18;5780:10;5777:34;5774:62;5771:88;;;5839:18;;:::i;:::-;5879:10;5875:2;5868:22;;5942:2;5931:9;5927:18;5914:32;5906:6;5899:48;6008:2;5997:9;5993:18;5980:32;5975:2;5967:6;5963:15;5956:57;6063:4;6052:9;6048:20;6035:34;6109:4;6102:5;6098:16;6091:5;6088:27;6078:55;;6129:1;6126;6119:12;6078:55;6161:2;6149:15;;6142:30;6153:6;-1:-1:-1;6249:3:1;6234:19;;6221:33;6263;6221;6263;:::i;:::-;5360:1020;;;;-1:-1:-1;6315:7:1;;6369:3;6354:19;6341:33;;-1:-1:-1;;5360:1020:1:o;6385:383::-;6462:6;6470;6478;6531:2;6519:9;6510:7;6506:23;6502:32;6499:52;;;6547:1;6544;6537:12;6499:52;6583:9;6570:23;6560:33;;6640:2;6629:9;6625:18;6612:32;6602:42;;6694:2;6683:9;6679:18;6666:32;6707:31;6732:5;6707:31;:::i;:::-;6757:5;6747:15;;;6385:383;;;;;:::o;6773:388::-;6841:6;6849;6902:2;6890:9;6881:7;6877:23;6873:32;6870:52;;;6918:1;6915;6908:12;6870:52;6957:9;6944:23;6976:31;7001:5;6976:31;:::i;:::-;7026:5;-1:-1:-1;7083:2:1;7068:18;;7055:32;7096:33;7055:32;7096:33;:::i;:::-;7148:7;7138:17;;;6773:388;;;;;:::o;7166:247::-;7225:6;7278:2;7266:9;7257:7;7253:23;7249:32;7246:52;;;7294:1;7291;7284:12;7246:52;7333:9;7320:23;7352:31;7377:5;7352:31;:::i;:::-;7402:5;7166:247;-1:-1:-1;;;7166:247:1:o;7649:410::-;7851:2;7833:21;;;7890:2;7870:18;;;7863:30;7929:34;7924:2;7909:18;;7902:62;-1:-1:-1;;;7995:2:1;7980:18;;7973:44;8049:3;8034:19;;7649:410::o;8416:184::-;8486:6;8539:2;8527:9;8518:7;8514:23;8510:32;8507:52;;;8555:1;8552;8545:12;8507:52;-1:-1:-1;8578:16:1;;8416:184;-1:-1:-1;8416:184:1:o;8605:127::-;8666:10;8661:3;8657:20;8654:1;8647:31;8697:4;8694:1;8687:15;8721:4;8718:1;8711:15;8737:168;8810:9;;;8841;;8858:15;;;8852:22;;8838:37;8828:71;;8879:18;;:::i;8910:356::-;9112:2;9094:21;;;9131:18;;;9124:30;9190:34;9185:2;9170:18;;9163:62;9257:2;9242:18;;8910:356::o;9271:418::-;9473:2;9455:21;;;9512:2;9492:18;;;9485:30;9551:34;9546:2;9531:18;;9524:62;-1:-1:-1;;;9617:2:1;9602:18;;9595:52;9679:3;9664:19;;9271:418::o;9694:384::-;-1:-1:-1;;;;;9952:15:1;;;9934:34;;10004:15;;;9999:2;9984:18;;9977:43;10056:15;;;10051:2;10036:18;;10029:43;9884:2;9869:18;;9694:384::o;10083:277::-;10150:6;10203:2;10191:9;10182:7;10178:23;10174:32;10171:52;;;10219:1;10216;10209:12;10171:52;10251:9;10245:16;10304:5;10297:13;10290:21;10283:5;10280:32;10270:60;;10326:1;10323;10316:12;10365:354;10567:2;10549:21;;;10606:2;10586:18;;;10579:30;10645:32;10640:2;10625:18;;10618:60;10710:2;10695:18;;10365:354::o;11003:399::-;11205:2;11187:21;;;11244:2;11224:18;;;11217:30;11283:34;11278:2;11263:18;;11256:62;-1:-1:-1;;;11349:2:1;11334:18;;11327:33;11392:3;11377:19;;11003:399::o;11407:403::-;11609:2;11591:21;;;11648:2;11628:18;;;11621:30;11687:34;11682:2;11667:18;;11660:62;-1:-1:-1;;;11753:2:1;11738:18;;11731:37;11800:3;11785:19;;11407:403::o;11815:125::-;11880:9;;;11901:10;;;11898:36;;;11914:18;;:::i;11945:351::-;12147:2;12129:21;;;12186:2;12166:18;;;12159:30;12225:29;12220:2;12205:18;;12198:57;12287:2;12272:18;;11945:351::o;12301:135::-;12340:3;12361:17;;;12358:43;;12381:18;;:::i;:::-;-1:-1:-1;12428:1:1;12417:13;;12301:135::o;12441:375::-;-1:-1:-1;;;;;12699:15:1;;;12681:34;;12746:2;12731:18;;12724:34;;;;12794:15;;;12789:2;12774:18;;12767:43;12631:2;12616:18;;12441:375::o;13234:127::-;13295:10;13290:3;13286:20;13283:1;13276:31;13326:4;13323:1;13316:15;13350:4;13347:1;13340:15;13366:406;13568:2;13550:21;;;13607:2;13587:18;;;13580:30;13646:34;13641:2;13626:18;;13619:62;-1:-1:-1;;;13712:2:1;13697:18;;13690:40;13762:3;13747:19;;13366:406::o;14911:128::-;14978:9;;;14999:11;;;14996:37;;;15013:18;;:::i;16625:217::-;16665:1;16691;16681:132;;16735:10;16730:3;16726:20;16723:1;16716:31;16770:4;16767:1;16760:15;16798:4;16795:1;16788:15;16681:132;-1:-1:-1;16827:9:1;;16625:217::o;16847:259::-;16925:6;16978:2;16966:9;16957:7;16953:23;16949:32;16946:52;;;16994:1;16991;16984:12;16946:52;17026:9;17020:16;17045:31;17070:5;17045:31;:::i

Swarm Source

ipfs://63dd0a713c430fd9b0dd750485266333814461cd5ee31515c02d94f0f49c951f

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

OVERVIEW

Official address for the Mirage Gallery Curated Minter V3

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.