Contract 0x9134c9975244b46692ad9a7da36dba8734ec6da3

 
Ad
Crypto.com
Txn Hash
Block
From
To
Value
0x09b01e4fc9f396ccb18626afcd16f1e6a11f9c804001f9e6000924e3b374c3be(pending)2021-03-08 7:02:1611 hrs 53 mins ago0x6d5735fd38687a3255c725d878c1791e0490ea43 IN 0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether(Pending)(Pending)
0x5463a839ac279787eba409faea326226029a40ec3b63a7baea04da9291d77e3f(pending)2021-03-07 21:03:5021 hrs 51 mins ago0x3f8e04414ff69f7b6bc21b1b957d986ebf15a508 IN 0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether(Pending)(Pending)
0x8fe2b27328bd95b01fbd46facd858333ab0bd621e30b0ddb1b67bdb20811f12d119947982021-03-08 1:11:4217 hrs 43 mins ago0xa1e1b309cfcaf0a94b6b622520914c50c5a6ee4a IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.125951922111
0xd20dbb237fdb7332383171bb323ea9df2775d42235306d5dd43029196137a4e7119947382021-03-08 0:59:0717 hrs 56 mins ago0xcfdbd6664f87ad488cd50719ee1f247ff9184a55 IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.119994204132
0x9750dda64954a9184349863515b5d77ba51eb1e24be860b9bf38c6fa02bf420b119927932021-03-07 17:55:591 day 59 mins ago0x178f56fed183685541d0a22bc9bf36fed9b3d3bd IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.179389784196
0xa332d73b8d108b188e228655cbf9dc47a9f29dfcee79851f83edaaa45c07696f119921982021-03-07 15:31:331 day 3 hrs ago0x178f56fed183685541d0a22bc9bf36fed9b3d3bd IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.112524213123
0xf92237304f8318163e9c3ae95bb1d0392df498847c28f856c88bb0da1b6341bf119913622021-03-07 12:33:291 day 6 hrs ago0xc9023d799fe0849d3786cd11fb7278e36ae00d3a IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.08877032697
0xbe989c6aae94bffdde89deb46118173a2af337f9dda541515d812d3a44a95291119912792021-03-07 12:14:291 day 6 hrs ago0x0f0c002b43c70ea336c546e06f9986a3dcc91d50 IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.09403505199
0x6f1234837d5b62e4eba4e65c03241d911aaa7aa5ea75991eef3f9a3007b48b87119873542021-03-06 21:37:581 day 21 hrs ago0x80a76ebaf72d25b3b7ec78d9dfc48c8d3625135e IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.0727274100
0xd306a998d86361412fee5a53fb4ae497f0bf8cd77c5fa6e4b5caca6806a0c0a2119807922021-03-05 21:31:502 days 21 hrs ago0xe633e28517f6aeeb8ba4b7c33bd9d912b59fc2dc IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.1116729494
0xee4ad0572a260926a1327514e2ae10adc778f7dd0ed998792e15b7d742c72385119798652021-03-05 18:08:363 days 46 mins ago0x79d7348dea02b6ad19b88fbd45d9b4333277badd IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.12428793130
0xdf5c4aa9dbd5d7c32630ff8dae9217e838424af5773f68cc5d268a3471ed7d5d119790242021-03-05 15:03:543 days 3 hrs ago0xaaba24a851d02e55adac725e5a127c4b9c43f245 IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.08625994130
0xb613ad85011d18985b98bca3bb043f99df25f127ec9dc5573bf965411b8d153f119747032021-03-04 23:09:533 days 19 hrs ago0x3506b9f43e22c28bed8eddfec1fc36ce87e914c8 IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.05217154866
0x432de9285c59ca78286a88e93f577aaa9b7c6fdf56f93b37112be58a3d42c576119725362021-03-04 15:14:044 days 3 hrs ago0xa645e89a04fa63bc4f3fae82f74b0c7f5d5aa512 IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.14311032120
0xa543c22559efeaa1e940e9d94bfe58670ba37767bd3107c374c978025602498d119717702021-03-04 12:24:344 days 6 hrs ago0x1c70b57923b0a582fd7a145c9839155bd4aa1f72 IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.06182090868
0x5a27824dcf3c20d687f03ed8ee9f85148c3c33db141841d902d8b82951784c8d119696472021-03-04 4:38:354 days 14 hrs ago0x903cf9576061a02406d61bfbcdc1b63098f6e2b8 IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.07721459977
0x0210ffa07b99a5c10cdaab2db5e44c0c9b46863208bd74ee2fd5680da385a9bb119666512021-03-03 17:20:185 days 1 hr ago0xd6117c247a7c30c2863386ed657c826459717c6c IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.0832913991
0x1d21994d5d38fd7ec977e993713908daa3579e52e9a61715ddaa4262b4d01c33119625542021-03-03 2:13:395 days 16 hrs ago0x02a561eac513d03c729be304cda5cc4ae5621fe1 IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.06830940681
0xc2454cea6f6e1626aa4cf0e3e5a71fbe0085ac054c8472ebc2b6c1ae7ae3a5b5119612262021-03-02 21:17:225 days 21 hrs ago0x712b6cc785a840e7d8188dfcbe299aab9fec2978 IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.08259594105
0xa1c4342c8f517f70077e8378905f57843125e0d662cab1c76a1f648f4c6ab2c9119608482021-03-02 19:53:065 days 23 hrs ago0x44da00f9edf2d02fa37fa73fbe3ee4db5019f068 IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.0511336770
0x51595f34726acd39e2bfc1b4de76338f5ad9a05ead62881311b79ec1b42d88a2119593582021-03-02 14:28:456 days 4 hrs ago0x4bdf57007be460b851575d833d6b4ca0621a0526 IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.07816462686
0x309db6970d8f5a17a450b9688ffceaaa3d727626391d12d9d5c8bef674e454f0119580992021-03-02 9:44:436 days 9 hrs ago0xb7f5578d9e3ed2f49171a0a94f5fbad34779347e IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.06627800478
0xc7fefccb05962da6fbe71e2e18743fde0dc8281901d190d09b4241d85a398f84119579142021-03-02 9:05:066 days 9 hrs ago0x3ca5bff9e122851d93598194d66eea075936601c IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.08459586993
0x01bea20c2f343ce5820791e2a8d2523db6472580bdcc368827f79118a2950987119569442021-03-02 5:31:366 days 13 hrs ago0xa4c7a9734356749ce4b46f2eb1ac14a29494efc5 IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.04543562868
0x6eb148197785723517d6310ffefa90c6c2553a0a5f7de40781e75ebd0ef73872119554202021-03-01 23:56:316 days 18 hrs ago0x6b23e87ac05323053765568fffe6c24595e989d5 IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.08254189474
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xbe01d803c6197085facf058c9b171c94a5bab5cda74138f45c909def725d5ae9119973212021-03-08 10:39:268 hrs 15 mins ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0x8fe2b27328bd95b01fbd46facd858333ab0bd621e30b0ddb1b67bdb20811f12d119947982021-03-08 1:11:4217 hrs 43 mins ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0xd20dbb237fdb7332383171bb323ea9df2775d42235306d5dd43029196137a4e7119947382021-03-08 0:59:0717 hrs 56 mins ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0x9750dda64954a9184349863515b5d77ba51eb1e24be860b9bf38c6fa02bf420b119927932021-03-07 17:55:591 day 59 mins ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0xa332d73b8d108b188e228655cbf9dc47a9f29dfcee79851f83edaaa45c07696f119921982021-03-07 15:31:331 day 3 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0xf92237304f8318163e9c3ae95bb1d0392df498847c28f856c88bb0da1b6341bf119913622021-03-07 12:33:291 day 6 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0xbe989c6aae94bffdde89deb46118173a2af337f9dda541515d812d3a44a95291119912792021-03-07 12:14:291 day 6 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0x6f1234837d5b62e4eba4e65c03241d911aaa7aa5ea75991eef3f9a3007b48b87119873542021-03-06 21:37:581 day 21 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0xd306a998d86361412fee5a53fb4ae497f0bf8cd77c5fa6e4b5caca6806a0c0a2119807922021-03-05 21:31:502 days 21 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0xee4ad0572a260926a1327514e2ae10adc778f7dd0ed998792e15b7d742c72385119798652021-03-05 18:08:363 days 46 mins ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0xdf5c4aa9dbd5d7c32630ff8dae9217e838424af5773f68cc5d268a3471ed7d5d119790242021-03-05 15:03:543 days 3 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0x799256e057e2a2d1ec8a55b6b4f5c5ca27fe522e7275c412f6ba4635d01affb4119779032021-03-05 11:02:383 days 7 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0xb613ad85011d18985b98bca3bb043f99df25f127ec9dc5573bf965411b8d153f119747032021-03-04 23:09:533 days 19 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0x432de9285c59ca78286a88e93f577aaa9b7c6fdf56f93b37112be58a3d42c576119725362021-03-04 15:14:044 days 3 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0xa543c22559efeaa1e940e9d94bfe58670ba37767bd3107c374c978025602498d119717702021-03-04 12:24:344 days 6 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0x5a27824dcf3c20d687f03ed8ee9f85148c3c33db141841d902d8b82951784c8d119696472021-03-04 4:38:354 days 14 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0x0210ffa07b99a5c10cdaab2db5e44c0c9b46863208bd74ee2fd5680da385a9bb119666512021-03-03 17:20:185 days 1 hr ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0x1d21994d5d38fd7ec977e993713908daa3579e52e9a61715ddaa4262b4d01c33119625542021-03-03 2:13:395 days 16 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0xc2454cea6f6e1626aa4cf0e3e5a71fbe0085ac054c8472ebc2b6c1ae7ae3a5b5119612262021-03-02 21:17:225 days 21 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0xa1c4342c8f517f70077e8378905f57843125e0d662cab1c76a1f648f4c6ab2c9119608482021-03-02 19:53:065 days 23 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0x12b5be7906cdc3cd2942936cdb58d3b0dee1e78221785ed4eeb778565dac9ea3119600632021-03-02 16:58:146 days 1 hr ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0x51595f34726acd39e2bfc1b4de76338f5ad9a05ead62881311b79ec1b42d88a2119593582021-03-02 14:28:456 days 4 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0x309db6970d8f5a17a450b9688ffceaaa3d727626391d12d9d5c8bef674e454f0119580992021-03-02 9:44:436 days 9 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0xc7fefccb05962da6fbe71e2e18743fde0dc8281901d190d09b4241d85a398f84119579142021-03-02 9:05:066 days 9 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0x01bea20c2f343ce5820791e2a8d2523db6472580bdcc368827f79118a2950987119569442021-03-02 5:31:366 days 13 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FundDeployer

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license
File 1 of 9 : IDispatcher.sol
// SPDX-License-Identifier: GPL-3.0

/*
    This file is part of the Enzyme Protocol.

    (c) Enzyme Council <[email protected]>

    For the full license information, please view the LICENSE
    file that was distributed with this source code.
*/

pragma solidity 0.6.12;

/// @title IDispatcher Interface
/// @author Enzyme Council <[email protected]>
interface IDispatcher {
    function cancelMigration(address _vaultProxy, bool _bypassFailure) external;

    function claimOwnership() external;

    function deployVaultProxy(
        address _vaultLib,
        address _owner,
        address _vaultAccessor,
        string calldata _fundName
    ) external returns (address vaultProxy_);

    function executeMigration(address _vaultProxy, bool _bypassFailure) external;

    function getCurrentFundDeployer() external view returns (address currentFundDeployer_);

    function getFundDeployerForVaultProxy(address _vaultProxy)
        external
        view
        returns (address fundDeployer_);

    function getMigrationRequestDetailsForVaultProxy(address _vaultProxy)
        external
        view
        returns (
            address nextFundDeployer_,
            address nextVaultAccessor_,
            address nextVaultLib_,
            uint256 executableTimestamp_
        );

    function getMigrationTimelock() external view returns (uint256 migrationTimelock_);

    function getNominatedOwner() external view returns (address nominatedOwner_);

    function getOwner() external view returns (address owner_);

    function getSharesTokenSymbol() external view returns (string memory sharesTokenSymbol_);

    function getTimelockRemainingForMigrationRequest(address _vaultProxy)
        external
        view
        returns (uint256 secondsRemaining_);

    function hasExecutableMigrationRequest(address _vaultProxy)
        external
        view
        returns (bool hasExecutableRequest_);

    function hasMigrationRequest(address _vaultProxy)
        external
        view
        returns (bool hasMigrationRequest_);

    function removeNominatedOwner() external;

    function setCurrentFundDeployer(address _nextFundDeployer) external;

    function setMigrationTimelock(uint256 _nextTimelock) external;

    function setNominatedOwner(address _nextNominatedOwner) external;

    function setSharesTokenSymbol(string calldata _nextSymbol) external;

    function signalMigration(
        address _vaultProxy,
        address _nextVaultAccessor,
        address _nextVaultLib,
        bool _bypassFailure
    ) external;
}

File 2 of 9 : IMigratableVault.sol
// SPDX-License-Identifier: GPL-3.0

/*
    This file is part of the Enzyme Protocol.

    (c) Enzyme Council <[email protected]>

    For the full license information, please view the LICENSE
    file that was distributed with this source code.
*/

pragma solidity 0.6.12;

/// @title IMigratableVault Interface
/// @author Enzyme Council <[email protected]>
/// @dev DO NOT EDIT CONTRACT
interface IMigratableVault {
    function canMigrate(address _who) external view returns (bool canMigrate_);

    function init(
        address _owner,
        address _accessor,
        string calldata _fundName
    ) external;

    function setAccessor(address _nextAccessor) external;

    function setVaultLib(address _nextVaultLib) external;
}

File 3 of 9 : IMigrationHookHandler.sol
// SPDX-License-Identifier: GPL-3.0

/*
    This file is part of the Enzyme Protocol.

    (c) Enzyme Council <[email protected]>

    For the full license information, please view the LICENSE
    file that was distributed with this source code.
*/

pragma solidity 0.6.12;

/// @title IMigrationHookHandler Interface
/// @author Enzyme Council <[email protected]>
interface IMigrationHookHandler {
    enum MigrationOutHook {PreSignal, PostSignal, PreMigrate, PostMigrate, PostCancel}

    function invokeMigrationInCancelHook(
        address _vaultProxy,
        address _prevFundDeployer,
        address _nextVaultAccessor,
        address _nextVaultLib
    ) external;

    function invokeMigrationOutHook(
        MigrationOutHook _hook,
        address _vaultProxy,
        address _nextFundDeployer,
        address _nextVaultAccessor,
        address _nextVaultLib
    ) external;
}

File 4 of 9 : FundDeployer.sol
// SPDX-License-Identifier: GPL-3.0

/*
    This file is part of the Enzyme Protocol.

    (c) Enzyme Council <[email protected]>

    For the full license information, please view the LICENSE
    file that was distributed with this source code.
*/

pragma solidity 0.6.12;
pragma experimental ABIEncoderV2;

import "../../../persistent/dispatcher/IDispatcher.sol";
import "../../../persistent/utils/IMigrationHookHandler.sol";
import "../fund/comptroller/IComptroller.sol";
import "../fund/comptroller/ComptrollerProxy.sol";
import "../fund/vault/IVault.sol";
import "./IFundDeployer.sol";

/// @title FundDeployer Contract
/// @author Enzyme Council <[email protected]>
/// @notice The top-level contract of the release.
/// It primarily coordinates fund deployment and fund migration, but
/// it is also deferred to for contract access control and for allowed calls
/// that can be made with a fund's VaultProxy as the msg.sender.
contract FundDeployer is IFundDeployer, IMigrationHookHandler {
    event ComptrollerLibSet(address comptrollerLib);

    event ComptrollerProxyDeployed(
        address indexed creator,
        address comptrollerProxy,
        address indexed denominationAsset,
        uint256 sharesActionTimelock,
        bytes feeManagerConfigData,
        bytes policyManagerConfigData,
        bool indexed forMigration
    );

    event NewFundCreated(
        address indexed creator,
        address comptrollerProxy,
        address vaultProxy,
        address indexed fundOwner,
        string fundName,
        address indexed denominationAsset,
        uint256 sharesActionTimelock,
        bytes feeManagerConfigData,
        bytes policyManagerConfigData
    );

    event ReleaseStatusSet(ReleaseStatus indexed prevStatus, ReleaseStatus indexed nextStatus);

    event VaultCallDeregistered(address indexed contractAddress, bytes4 selector);

    event VaultCallRegistered(address indexed contractAddress, bytes4 selector);

    // Constants
    address private immutable CREATOR;
    address private immutable DISPATCHER;
    address private immutable VAULT_LIB;

    // Pseudo-constants (can only be set once)
    address private comptrollerLib;

    // Storage
    ReleaseStatus private releaseStatus;
    mapping(address => mapping(bytes4 => bool)) private contractToSelectorToIsRegisteredVaultCall;
    mapping(address => address) private pendingComptrollerProxyToCreator;

    modifier onlyLiveRelease() {
        require(releaseStatus == ReleaseStatus.Live, "Release is not Live");
        _;
    }

    modifier onlyMigrator(address _vaultProxy) {
        require(
            IVault(_vaultProxy).canMigrate(msg.sender),
            "Only a permissioned migrator can call this function"
        );
        _;
    }

    modifier onlyOwner() {
        require(msg.sender == getOwner(), "Only the contract owner can call this function");
        _;
    }

    modifier onlyPendingComptrollerProxyCreator(address _comptrollerProxy) {
        require(
            msg.sender == pendingComptrollerProxyToCreator[_comptrollerProxy],
            "Only the ComptrollerProxy creator can call this function"
        );
        _;
    }

    constructor(
        address _dispatcher,
        address _vaultLib,
        address[] memory _vaultCallContracts,
        bytes4[] memory _vaultCallSelectors
    ) public {
        if (_vaultCallContracts.length > 0) {
            __registerVaultCalls(_vaultCallContracts, _vaultCallSelectors);
        }
        CREATOR = msg.sender;
        DISPATCHER = _dispatcher;
        VAULT_LIB = _vaultLib;
    }

    /////////////
    // GENERAL //
    /////////////

    /// @notice Sets the comptrollerLib
    /// @param _comptrollerLib The ComptrollerLib contract address
    /// @dev Can only be set once
    function setComptrollerLib(address _comptrollerLib) external onlyOwner {
        require(
            comptrollerLib == address(0),
            "setComptrollerLib: This value can only be set once"
        );

        comptrollerLib = _comptrollerLib;

        emit ComptrollerLibSet(_comptrollerLib);
    }

    /// @notice Sets the status of the protocol to a new state
    /// @param _nextStatus The next status state to set
    function setReleaseStatus(ReleaseStatus _nextStatus) external {
        require(
            msg.sender == IDispatcher(DISPATCHER).getOwner(),
            "setReleaseStatus: Only the Dispatcher owner can call this function"
        );
        require(
            _nextStatus != ReleaseStatus.PreLaunch,
            "setReleaseStatus: Cannot return to PreLaunch status"
        );
        require(
            comptrollerLib != address(0),
            "setReleaseStatus: Can only set the release status when comptrollerLib is set"
        );

        ReleaseStatus prevStatus = releaseStatus;
        require(_nextStatus != prevStatus, "setReleaseStatus: _nextStatus is the current status");

        releaseStatus = _nextStatus;

        emit ReleaseStatusSet(prevStatus, _nextStatus);
    }

    /// @notice Gets the current owner of the contract
    /// @return owner_ The contract owner address
    /// @dev Dynamically gets the owner based on the Protocol status. The owner is initially the
    /// contract's deployer, for convenience in setting up configuration.
    /// Ownership is claimed when the owner of the Dispatcher contract (the Enzyme Council)
    /// sets the releaseStatus to `Live`.
    function getOwner() public view override returns (address owner_) {
        if (releaseStatus == ReleaseStatus.PreLaunch) {
            return CREATOR;
        }

        return IDispatcher(DISPATCHER).getOwner();
    }

    ///////////////////
    // FUND CREATION //
    ///////////////////

    /// @notice Creates a fully-configured ComptrollerProxy, to which a fund from a previous
    /// release can migrate in a subsequent step
    /// @param _denominationAsset The contract address of the denomination asset for the fund
    /// @param _sharesActionTimelock The minimum number of seconds between any two "shares actions"
    /// (buying or selling shares) by the same user
    /// @param _feeManagerConfigData Bytes data for the fees to be enabled for the fund
    /// @param _policyManagerConfigData Bytes data for the policies to be enabled for the fund
    /// @return comptrollerProxy_ The address of the ComptrollerProxy deployed during this action
    function createMigratedFundConfig(
        address _denominationAsset,
        uint256 _sharesActionTimelock,
        bytes calldata _feeManagerConfigData,
        bytes calldata _policyManagerConfigData
    ) external onlyLiveRelease returns (address comptrollerProxy_) {
        comptrollerProxy_ = __deployComptrollerProxy(
            _denominationAsset,
            _sharesActionTimelock,
            _feeManagerConfigData,
            _policyManagerConfigData,
            true
        );

        pendingComptrollerProxyToCreator[comptrollerProxy_] = msg.sender;

        return comptrollerProxy_;
    }

    /// @notice Creates a new fund
    /// @param _fundOwner The address of the owner for the fund
    /// @param _fundName The name of the fund
    /// @param _denominationAsset The contract address of the denomination asset for the fund
    /// @param _sharesActionTimelock The minimum number of seconds between any two "shares actions"
    /// (buying or selling shares) by the same user
    /// @param _feeManagerConfigData Bytes data for the fees to be enabled for the fund
    /// @param _policyManagerConfigData Bytes data for the policies to be enabled for the fund
    /// @return comptrollerProxy_ The address of the ComptrollerProxy deployed during this action
    function createNewFund(
        address _fundOwner,
        string calldata _fundName,
        address _denominationAsset,
        uint256 _sharesActionTimelock,
        bytes calldata _feeManagerConfigData,
        bytes calldata _policyManagerConfigData
    ) external onlyLiveRelease returns (address comptrollerProxy_, address vaultProxy_) {
        return
            __createNewFund(
                _fundOwner,
                _fundName,
                _denominationAsset,
                _sharesActionTimelock,
                _feeManagerConfigData,
                _policyManagerConfigData
            );
    }

    /// @dev Helper to avoid the stack-too-deep error during createNewFund
    function __createNewFund(
        address _fundOwner,
        string memory _fundName,
        address _denominationAsset,
        uint256 _sharesActionTimelock,
        bytes memory _feeManagerConfigData,
        bytes memory _policyManagerConfigData
    ) private returns (address comptrollerProxy_, address vaultProxy_) {
        require(_fundOwner != address(0), "__createNewFund: _owner cannot be empty");

        comptrollerProxy_ = __deployComptrollerProxy(
            _denominationAsset,
            _sharesActionTimelock,
            _feeManagerConfigData,
            _policyManagerConfigData,
            false
        );

        vaultProxy_ = IDispatcher(DISPATCHER).deployVaultProxy(
            VAULT_LIB,
            _fundOwner,
            comptrollerProxy_,
            _fundName
        );

        IComptroller(comptrollerProxy_).activate(vaultProxy_, false);

        emit NewFundCreated(
            msg.sender,
            comptrollerProxy_,
            vaultProxy_,
            _fundOwner,
            _fundName,
            _denominationAsset,
            _sharesActionTimelock,
            _feeManagerConfigData,
            _policyManagerConfigData
        );

        return (comptrollerProxy_, vaultProxy_);
    }

    /// @dev Helper function to deploy a configured ComptrollerProxy
    function __deployComptrollerProxy(
        address _denominationAsset,
        uint256 _sharesActionTimelock,
        bytes memory _feeManagerConfigData,
        bytes memory _policyManagerConfigData,
        bool _forMigration
    ) private returns (address comptrollerProxy_) {
        require(
            _denominationAsset != address(0),
            "__deployComptrollerProxy: _denominationAsset cannot be empty"
        );

        bytes memory constructData = abi.encodeWithSelector(
            IComptroller.init.selector,
            _denominationAsset,
            _sharesActionTimelock
        );
        comptrollerProxy_ = address(new ComptrollerProxy(constructData, comptrollerLib));

        if (_feeManagerConfigData.length > 0 || _policyManagerConfigData.length > 0) {
            IComptroller(comptrollerProxy_).configureExtensions(
                _feeManagerConfigData,
                _policyManagerConfigData
            );
        }

        emit ComptrollerProxyDeployed(
            msg.sender,
            comptrollerProxy_,
            _denominationAsset,
            _sharesActionTimelock,
            _feeManagerConfigData,
            _policyManagerConfigData,
            _forMigration
        );

        return comptrollerProxy_;
    }

    //////////////////
    // MIGRATION IN //
    //////////////////

    /// @notice Cancels fund migration
    /// @param _vaultProxy The VaultProxy for which to cancel migration
    function cancelMigration(address _vaultProxy) external {
        __cancelMigration(_vaultProxy, false);
    }

    /// @notice Cancels fund migration, bypassing any failures.
    /// Should be used in an emergency only.
    /// @param _vaultProxy The VaultProxy for which to cancel migration
    function cancelMigrationEmergency(address _vaultProxy) external {
        __cancelMigration(_vaultProxy, true);
    }

    /// @notice Executes fund migration
    /// @param _vaultProxy The VaultProxy for which to execute the migration
    function executeMigration(address _vaultProxy) external {
        __executeMigration(_vaultProxy, false);
    }

    /// @notice Executes fund migration, bypassing any failures.
    /// Should be used in an emergency only.
    /// @param _vaultProxy The VaultProxy for which to execute the migration
    function executeMigrationEmergency(address _vaultProxy) external {
        __executeMigration(_vaultProxy, true);
    }

    /// @dev Unimplemented
    function invokeMigrationInCancelHook(
        address,
        address,
        address,
        address
    ) external virtual override {
        return;
    }

    /// @notice Signal a fund migration
    /// @param _vaultProxy The VaultProxy for which to signal the migration
    /// @param _comptrollerProxy The ComptrollerProxy for which to signal the migration
    function signalMigration(address _vaultProxy, address _comptrollerProxy) external {
        __signalMigration(_vaultProxy, _comptrollerProxy, false);
    }

    /// @notice Signal a fund migration, bypassing any failures.
    /// Should be used in an emergency only.
    /// @param _vaultProxy The VaultProxy for which to signal the migration
    /// @param _comptrollerProxy The ComptrollerProxy for which to signal the migration
    function signalMigrationEmergency(address _vaultProxy, address _comptrollerProxy) external {
        __signalMigration(_vaultProxy, _comptrollerProxy, true);
    }

    /// @dev Helper to cancel a migration
    function __cancelMigration(address _vaultProxy, bool _bypassFailure)
        private
        onlyLiveRelease
        onlyMigrator(_vaultProxy)
    {
        IDispatcher(DISPATCHER).cancelMigration(_vaultProxy, _bypassFailure);
    }

    /// @dev Helper to execute a migration
    function __executeMigration(address _vaultProxy, bool _bypassFailure)
        private
        onlyLiveRelease
        onlyMigrator(_vaultProxy)
    {
        IDispatcher dispatcherContract = IDispatcher(DISPATCHER);

        (, address comptrollerProxy, , ) = dispatcherContract
            .getMigrationRequestDetailsForVaultProxy(_vaultProxy);

        dispatcherContract.executeMigration(_vaultProxy, _bypassFailure);

        IComptroller(comptrollerProxy).activate(_vaultProxy, true);

        delete pendingComptrollerProxyToCreator[comptrollerProxy];
    }

    /// @dev Helper to signal a migration
    function __signalMigration(
        address _vaultProxy,
        address _comptrollerProxy,
        bool _bypassFailure
    )
        private
        onlyLiveRelease
        onlyPendingComptrollerProxyCreator(_comptrollerProxy)
        onlyMigrator(_vaultProxy)
    {
        IDispatcher(DISPATCHER).signalMigration(
            _vaultProxy,
            _comptrollerProxy,
            VAULT_LIB,
            _bypassFailure
        );
    }

    ///////////////////
    // MIGRATION OUT //
    ///////////////////

    /// @notice Allows "hooking into" specific moments in the migration pipeline
    /// to execute arbitrary logic during a migration out of this release
    /// @param _vaultProxy The VaultProxy being migrated
    function invokeMigrationOutHook(
        MigrationOutHook _hook,
        address _vaultProxy,
        address,
        address,
        address
    ) external override {
        if (_hook != MigrationOutHook.PreMigrate) {
            return;
        }

        require(
            msg.sender == DISPATCHER,
            "postMigrateOriginHook: Only Dispatcher can call this function"
        );

        // Must use PreMigrate hook to get the ComptrollerProxy from the VaultProxy
        address comptrollerProxy = IVault(_vaultProxy).getAccessor();

        // Wind down fund and destroy its config
        IComptroller(comptrollerProxy).destruct();
    }

    //////////////
    // REGISTRY //
    //////////////

    /// @notice De-registers allowed arbitrary contract calls that can be sent from the VaultProxy
    /// @param _contracts The contracts of the calls to de-register
    /// @param _selectors The selectors of the calls to de-register
    function deregisterVaultCalls(address[] calldata _contracts, bytes4[] calldata _selectors)
        external
        onlyOwner
    {
        require(_contracts.length > 0, "deregisterVaultCalls: Empty _contracts");
        require(
            _contracts.length == _selectors.length,
            "deregisterVaultCalls: Uneven input arrays"
        );

        for (uint256 i; i < _contracts.length; i++) {
            require(
                isRegisteredVaultCall(_contracts[i], _selectors[i]),
                "deregisterVaultCalls: Call not registered"
            );

            contractToSelectorToIsRegisteredVaultCall[_contracts[i]][_selectors[i]] = false;

            emit VaultCallDeregistered(_contracts[i], _selectors[i]);
        }
    }

    /// @notice Registers allowed arbitrary contract calls that can be sent from the VaultProxy
    /// @param _contracts The contracts of the calls to register
    /// @param _selectors The selectors of the calls to register
    function registerVaultCalls(address[] calldata _contracts, bytes4[] calldata _selectors)
        external
        onlyOwner
    {
        require(_contracts.length > 0, "registerVaultCalls: Empty _contracts");

        __registerVaultCalls(_contracts, _selectors);
    }

    /// @dev Helper to register allowed vault calls
    function __registerVaultCalls(address[] memory _contracts, bytes4[] memory _selectors)
        private
    {
        require(
            _contracts.length == _selectors.length,
            "__registerVaultCalls: Uneven input arrays"
        );

        for (uint256 i; i < _contracts.length; i++) {
            require(
                !isRegisteredVaultCall(_contracts[i], _selectors[i]),
                "__registerVaultCalls: Call already registered"
            );

            contractToSelectorToIsRegisteredVaultCall[_contracts[i]][_selectors[i]] = true;

            emit VaultCallRegistered(_contracts[i], _selectors[i]);
        }
    }

    ///////////////////
    // STATE GETTERS //
    ///////////////////

    /// @notice Gets the `comptrollerLib` variable value
    /// @return comptrollerLib_ The `comptrollerLib` variable value
    function getComptrollerLib() external view returns (address comptrollerLib_) {
        return comptrollerLib;
    }

    /// @notice Gets the `CREATOR` variable value
    /// @return creator_ The `CREATOR` variable value
    function getCreator() external view returns (address creator_) {
        return CREATOR;
    }

    /// @notice Gets the `DISPATCHER` variable value
    /// @return dispatcher_ The `DISPATCHER` variable value
    function getDispatcher() external view returns (address dispatcher_) {
        return DISPATCHER;
    }

    /// @notice Gets the creator of a pending ComptrollerProxy
    /// @return pendingComptrollerProxyCreator_ The pending ComptrollerProxy creator
    function getPendingComptrollerProxyCreator(address _comptrollerProxy)
        external
        view
        returns (address pendingComptrollerProxyCreator_)
    {
        return pendingComptrollerProxyToCreator[_comptrollerProxy];
    }

    /// @notice Gets the `releaseStatus` variable value
    /// @return status_ The `releaseStatus` variable value
    function getReleaseStatus() external view override returns (ReleaseStatus status_) {
        return releaseStatus;
    }

    /// @notice Gets the `VAULT_LIB` variable value
    /// @return vaultLib_ The `VAULT_LIB` variable value
    function getVaultLib() external view returns (address vaultLib_) {
        return VAULT_LIB;
    }

    /// @notice Checks if a contract call is registered
    /// @param _contract The contract of the call to check
    /// @param _selector The selector of the call to check
    /// @return isRegistered_ True if the call is registered
    function isRegisteredVaultCall(address _contract, bytes4 _selector)
        public
        view
        override
        returns (bool isRegistered_)
    {
        return contractToSelectorToIsRegisteredVaultCall[_contract][_selector];
    }
}

File 5 of 9 : IFundDeployer.sol
// SPDX-License-Identifier: GPL-3.0

/*
    This file is part of the Enzyme Protocol.

    (c) Enzyme Council <[email protected]>

    For the full license information, please view the LICENSE
    file that was distributed with this source code.
*/

pragma solidity 0.6.12;

/// @title IFundDeployer Interface
/// @author Enzyme Council <[email protected]>
interface IFundDeployer {
    enum ReleaseStatus {PreLaunch, Live, Paused}

    function getOwner() external view returns (address);

    function getReleaseStatus() external view returns (ReleaseStatus);

    function isRegisteredVaultCall(address, bytes4) external view returns (bool);
}

File 6 of 9 : ComptrollerProxy.sol
// SPDX-License-Identifier: GPL-3.0

/*
    This file is part of the Enzyme Protocol.

    (c) Enzyme Council <[email protected]>

    For the full license information, please view the LICENSE
    file that was distributed with this source code.
*/

pragma solidity 0.6.12;

import "../../../utils/Proxy.sol";

/// @title ComptrollerProxy Contract
/// @author Enzyme Council <[email protected]>
/// @notice A proxy contract for all ComptrollerProxy instances
contract ComptrollerProxy is Proxy {
    constructor(bytes memory _constructData, address _comptrollerLib)
        public
        Proxy(_constructData, _comptrollerLib)
    {}
}

File 7 of 9 : IComptroller.sol
// SPDX-License-Identifier: GPL-3.0

/*
    This file is part of the Enzyme Protocol.

    (c) Enzyme Council <[email protected]>

    For the full license information, please view the LICENSE
    file that was distributed with this source code.
*/

pragma solidity 0.6.12;

/// @title IComptroller Interface
/// @author Enzyme Council <[email protected]>
interface IComptroller {
    enum VaultAction {
        None,
        BurnShares,
        MintShares,
        TransferShares,
        ApproveAssetSpender,
        WithdrawAssetTo,
        AddTrackedAsset,
        RemoveTrackedAsset
    }

    function activate(address, bool) external;

    function calcGav(bool) external returns (uint256, bool);

    function calcGrossShareValue(bool) external returns (uint256, bool);

    function callOnExtension(
        address,
        uint256,
        bytes calldata
    ) external;

    function configureExtensions(bytes calldata, bytes calldata) external;

    function destruct() external;

    function getDenominationAsset() external view returns (address);

    function getVaultProxy() external view returns (address);

    function init(address, uint256) external;

    function permissionedVaultAction(VaultAction, bytes calldata) external;
}

File 8 of 9 : IVault.sol
// SPDX-License-Identifier: GPL-3.0

/*
    This file is part of the Enzyme Protocol.

    (c) Enzyme Council <[email protected]>

    For the full license information, please view the LICENSE
    file that was distributed with this source code.
*/

pragma solidity 0.6.12;

import "../../../../persistent/utils/IMigratableVault.sol";

/// @title IVault Interface
/// @author Enzyme Council <[email protected]>
interface IVault is IMigratableVault {
    function addTrackedAsset(address) external;

    function approveAssetSpender(
        address,
        address,
        uint256
    ) external;

    function burnShares(address, uint256) external;

    function callOnContract(address, bytes calldata) external;

    function getAccessor() external view returns (address);

    function getOwner() external view returns (address);

    function getTrackedAssets() external view returns (address[] memory);

    function isTrackedAsset(address) external view returns (bool);

    function mintShares(address, uint256) external;

    function removeTrackedAsset(address) external;

    function transferShares(
        address,
        address,
        uint256
    ) external;

    function withdrawAssetTo(
        address,
        address,
        uint256
    ) external;
}

File 9 of 9 : Proxy.sol
// SPDX-License-Identifier: GPL-3.0

/*
    This file is part of the Enzyme Protocol.

    (c) Enzyme Council <[email protected]>

    For the full license information, please view the LICENSE
    file that was distributed with this source code.
*/

pragma solidity 0.6.12;

/// @title Proxy Contract
/// @author Enzyme Council <[email protected]>
/// @notice A proxy contract for all Proxy instances
/// @dev The recommended implementation of a Proxy in EIP-1822, updated for solc 0.6.12,
/// and using the EIP-1967 storage slot for the proxiable implementation.
/// i.e., `bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)`, which is
/// "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"
/// See: https://eips.ethereum.org/EIPS/eip-1822
contract Proxy {
    constructor(bytes memory _constructData, address _contractLogic) public {
        assembly {
            sstore(
                0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc,
                _contractLogic
            )
        }
        (bool success, bytes memory returnData) = _contractLogic.delegatecall(_constructData);
        require(success, string(returnData));
    }

    fallback() external payable {
        assembly {
            let contractLogic := sload(
                0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc
            )
            calldatacopy(0x0, 0x0, calldatasize())
            let success := delegatecall(
                sub(gas(), 10000),
                contractLogic,
                0x0,
                calldatasize(),
                0,
                0
            )
            let retSz := returndatasize()
            returndatacopy(0, 0, retSz)
            switch success
                case 0 {
                    revert(0, retSz)
                }
                default {
                    return(0, retSz)
                }
        }
    }
}

Settings
{
  "evmVersion": "istanbul",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "details": {
      "constantOptimizer": true,
      "cse": true,
      "deduplicate": true,
      "jumpdestRemover": true,
      "orderLiterals": true,
      "peephole": true,
      "yul": false
    },
    "runs": 200
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_dispatcher","type":"address"},{"internalType":"address","name":"_vaultLib","type":"address"},{"internalType":"address[]","name":"_vaultCallContracts","type":"address[]"},{"internalType":"bytes4[]","name":"_vaultCallSelectors","type":"bytes4[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"comptrollerLib","type":"address"}],"name":"ComptrollerLibSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"address","name":"comptrollerProxy","type":"address"},{"indexed":true,"internalType":"address","name":"denominationAsset","type":"address"},{"indexed":false,"internalType":"uint256","name":"sharesActionTimelock","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"feeManagerConfigData","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"policyManagerConfigData","type":"bytes"},{"indexed":true,"internalType":"bool","name":"forMigration","type":"bool"}],"name":"ComptrollerProxyDeployed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"address","name":"comptrollerProxy","type":"address"},{"indexed":false,"internalType":"address","name":"vaultProxy","type":"address"},{"indexed":true,"internalType":"address","name":"fundOwner","type":"address"},{"indexed":false,"internalType":"string","name":"fundName","type":"string"},{"indexed":true,"internalType":"address","name":"denominationAsset","type":"address"},{"indexed":false,"internalType":"uint256","name":"sharesActionTimelock","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"feeManagerConfigData","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"policyManagerConfigData","type":"bytes"}],"name":"NewFundCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum IFundDeployer.ReleaseStatus","name":"prevStatus","type":"uint8"},{"indexed":true,"internalType":"enum IFundDeployer.ReleaseStatus","name":"nextStatus","type":"uint8"}],"name":"ReleaseStatusSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"VaultCallDeregistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"VaultCallRegistered","type":"event"},{"inputs":[{"internalType":"address","name":"_vaultProxy","type":"address"}],"name":"cancelMigration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vaultProxy","type":"address"}],"name":"cancelMigrationEmergency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_denominationAsset","type":"address"},{"internalType":"uint256","name":"_sharesActionTimelock","type":"uint256"},{"internalType":"bytes","name":"_feeManagerConfigData","type":"bytes"},{"internalType":"bytes","name":"_policyManagerConfigData","type":"bytes"}],"name":"createMigratedFundConfig","outputs":[{"internalType":"address","name":"comptrollerProxy_","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_fundOwner","type":"address"},{"internalType":"string","name":"_fundName","type":"string"},{"internalType":"address","name":"_denominationAsset","type":"address"},{"internalType":"uint256","name":"_sharesActionTimelock","type":"uint256"},{"internalType":"bytes","name":"_feeManagerConfigData","type":"bytes"},{"internalType":"bytes","name":"_policyManagerConfigData","type":"bytes"}],"name":"createNewFund","outputs":[{"internalType":"address","name":"comptrollerProxy_","type":"address"},{"internalType":"address","name":"vaultProxy_","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_contracts","type":"address[]"},{"internalType":"bytes4[]","name":"_selectors","type":"bytes4[]"}],"name":"deregisterVaultCalls","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vaultProxy","type":"address"}],"name":"executeMigration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vaultProxy","type":"address"}],"name":"executeMigrationEmergency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getComptrollerLib","outputs":[{"internalType":"address","name":"comptrollerLib_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCreator","outputs":[{"internalType":"address","name":"creator_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDispatcher","outputs":[{"internalType":"address","name":"dispatcher_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"owner_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_comptrollerProxy","type":"address"}],"name":"getPendingComptrollerProxyCreator","outputs":[{"internalType":"address","name":"pendingComptrollerProxyCreator_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReleaseStatus","outputs":[{"internalType":"enum IFundDeployer.ReleaseStatus","name":"status_","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultLib","outputs":[{"internalType":"address","name":"vaultLib_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"invokeMigrationInCancelHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum IMigrationHookHandler.MigrationOutHook","name":"_hook","type":"uint8"},{"internalType":"address","name":"_vaultProxy","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"invokeMigrationOutHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"isRegisteredVaultCall","outputs":[{"internalType":"bool","name":"isRegistered_","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_contracts","type":"address[]"},{"internalType":"bytes4[]","name":"_selectors","type":"bytes4[]"}],"name":"registerVaultCalls","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_comptrollerLib","type":"address"}],"name":"setComptrollerLib","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum IFundDeployer.ReleaseStatus","name":"_nextStatus","type":"uint8"}],"name":"setReleaseStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vaultProxy","type":"address"},{"internalType":"address","name":"_comptrollerProxy","type":"address"}],"name":"signalMigration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vaultProxy","type":"address"},{"internalType":"address","name":"_comptrollerProxy","type":"address"}],"name":"signalMigrationEmergency","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60e06040523480156200001157600080fd5b50604051620032743803806200327483398101604081905262000034916200035a565b81511562000048576200004882826200006f565b505033606090811b6080526001600160601b031992811b831660a0521b1660c05262000573565b80518251146200009c5760405162461bcd60e51b81526004016200009390620004c5565b60405180910390fd5b60005b82518110156200020157620000e3838281518110620000ba57fe5b6020026020010151838381518110620000cf57fe5b60200260200101516200020660201b60201c565b15620001035760405162461bcd60e51b81526004016200009390620004b3565b60018060008584815181106200011557fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008484815181106200014c57fe5b60200260200101516001600160e01b0319166001600160e01b031916815260200190815260200160002060006101000a81548160ff0219169083151502179055508281815181106200019a57fe5b60200260200101516001600160a01b03167f355d4742de92efa1dcd9085b88ede27d7cfda96747ea062a59010a992c8af150838381518110620001d957fe5b6020026020010151604051620001f09190620004a3565b60405180910390a26001016200009f565b505050565b6001600160a01b03821660009081526001602090815260408083206001600160e01b03198516845290915290205460ff165b92915050565b805162000238816200054e565b600082601f8301126200025d57600080fd5b8151620002746200026e82620004fe565b620004d7565b915081818352602084019350602081019050838560208402820111156200029a57600080fd5b60005b83811015620002ca5781620002b388826200023e565b84525060209283019291909101906001016200029d565b5050505092915050565b600082601f830112620002e657600080fd5b8151620002f76200026e82620004fe565b915081818352602084019350602081019050838560208402820111156200031d57600080fd5b60005b83811015620002ca57816200033688826200034d565b845250602092830192919091019060010162000320565b8051620002388162000568565b600080600080608085870312156200037157600080fd5b60006200037f87876200023e565b945050602062000392878288016200023e565b93505060408501516001600160401b03811115620003af57600080fd5b620003bd878288016200024b565b92505060608501516001600160401b03811115620003da57600080fd5b620003e887828801620002d4565b91505092959194509250565b620003ff8162000535565b82525050565b600062000414602d836200051f565b7f5f5f72656769737465725661756c7443616c6c733a2043616c6c20616c72656181526c191e481c9959da5cdd195c9959609a1b602082015260400192915050565b6000620004656029836200051f565b7f5f5f72656769737465725661756c7443616c6c733a20556e6576656e20696e7081526875742061727261797360b81b602082015260400192915050565b60208101620002388284620003f4565b60208082528101620002388162000405565b60208082528101620002388162000456565b6040518181016001600160401b0381118282101715620004f657600080fd5b604052919050565b60006001600160401b038211156200051557600080fd5b5060209081020190565b90815260200190565b6000620002388262000542565b6001600160e01b03191690565b6001600160a01b031690565b620005598162000528565b81146200056557600080fd5b50565b620005598162000535565b60805160601c60a05160601c60c05160601c612c99620005db60003980610995528061152b528061179d525080610672528061086d5280610a1e5280610d1a5280610f2752806111ae52806114f9528061176f52508061042552806109f75250612c996000f3fe60806040523480156200001157600080fd5b5060043610620001605760003560e01c80639eb2c7b211620000c9578063d2456de11162000087578063d2456de114620002bd578063da29fcfe14620002d4578063dc77205314620002eb578063df369ba71462000311578063ebb3d5891462000328578063f0bb66ac14620003325762000160565b80639eb2c7b21462000248578063a08d967d146200025f578063a5fede1d1462000276578063c108b47d146200028f578063c166f9ea14620002a65762000160565b806351dfdb48116200012357806351dfdb4814620001e5578063682cea1914620001fc5780636f022ac4146200020657806378ed2293146200021d578063893d20e8146200023457806393a2ecd9146200023e5762000160565b80630d2fcd7614620001655780630ee2cb10146200017e5780630fe6972b14620001a057806328eb9ca514620001b75780633f84c12c14620001ce575b600080fd5b6200017c62000176366004620019fd565b62000359565b005b6200018862000423565b604051620001979190620024ee565b60405180910390f35b6200017c620001b136600462001d14565b62000448565b6200017c620001c836600462001e4d565b62000670565b6200017c620001df36600462001dcd565b62000847565b6200017c620001f6366004620019fd565b62000983565b6200018862000993565b6200017c62000217366004620019fd565b620009b7565b6200017c6200022e366004620019fd565b620009c4565b62000188620009d1565b6200018862000ab6565b6200017c62000259366004620019fd565b62000ac5565b6200018862000270366004620019fd565b62000ad2565b6200028062000af3565b6040516200019791906200272b565b62000188620002a036600462001c70565b62000b03565b6200017c620002b736600462001a47565b62000bee565b6200017c620002ce36600462001a47565b62000c00565b6200017c620002e536600462001d14565b62000c0e565b62000302620002fc36600462001b4e565b62000ce0565b604051620001979190620026be565b6200017c6200032236600462001a86565b62000cda565b6200018862000d18565b620003496200034336600462001b83565b62000d3c565b604051620001979291906200250e565b62000363620009d1565b6001600160a01b0316336001600160a01b0316146200039f5760405162461bcd60e51b81526004016200039690620027a7565b60405180910390fd5b6000546001600160a01b031615620003cb5760405162461bcd60e51b815260040162000396906200273b565b600080546001600160a01b0319166001600160a01b0383161790556040517f38e37d5fdf60e4358769c3b616594ad451626b1e023c65eaa1062116feadacf89062000418908390620024ee565b60405180910390a150565b7f00000000000000000000000000000000000000000000000000000000000000005b90565b62000452620009d1565b6001600160a01b0316336001600160a01b031614620004855760405162461bcd60e51b81526004016200039690620027a7565b82620004a55760405162461bcd60e51b8152600401620003969062002825565b828114620004c75760405162461bcd60e51b815260040162000396906200285b565b60005b8381101562000669576200051f858583818110620004e457fe5b9050602002016020810190620004fb9190620019fd565b8484848181106200050857fe5b9050602002016020810190620002fc919062001dac565b6200053e5760405162461bcd60e51b81526004016200039690620027b9565b6000600160008787858181106200055157fe5b9050602002016020810190620005689190620019fd565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008585858181106200059757fe5b9050602002016020810190620005ae919062001dac565b6001600160e01b03191681526020810191909152604001600020805460ff1916911515919091179055848482818110620005e457fe5b9050602002016020810190620005fb9190620019fd565b6001600160a01b03167f04a77425d9eba3b1260e976806c0cdefae7f41bb1106222790dd45e863ceaf978484848181106200063257fe5b905060200201602081019062000649919062001dac565b604051620006589190620026ce565b60405180910390a2600101620004ca565b5050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b158015620006ca57600080fd5b505afa158015620006df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000705919062001a26565b6001600160a01b0316336001600160a01b031614620007385760405162461bcd60e51b8152600401620003969062002837565b60008160028111156200074757fe5b1415620007685760405162461bcd60e51b815260040162000396906200286d565b6000546001600160a01b0316620007935760405162461bcd60e51b8152600401620003969062002795565b600054600160a01b900460ff16806002811115620007ad57fe5b826002811115620007ba57fe5b1415620007db5760405162461bcd60e51b8152600401620003969062002849565b6000805483919060ff60a01b1916600160a01b836002811115620007fb57fe5b02179055508160028111156200080d57fe5b8160028111156200081a57fe5b6040517ffaab041807e925180f5d7036a295923ff66f30f9d7957c96b898d16b0e90b7d890600090a35050565b60028560048111156200085657fe5b14620008625762000669565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614620008ad5760405162461bcd60e51b81526004016200039690620027dd565b6000846001600160a01b0316635a53e3486040518163ffffffff1660e01b815260040160206040518083038186803b158015620008e957600080fd5b505afa158015620008fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000924919062001a26565b9050806001600160a01b0316632b68b9c66040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200096257600080fd5b505af115801562000977573d6000803e3d6000fd5b50505050505050505050565b6200099081600062000e3a565b50565b7f000000000000000000000000000000000000000000000000000000000000000090565b62000990816000620010b9565b6200099081600162000e3a565b600080600054600160a01b900460ff166002811115620009ed57fe5b141562000a1c57507f000000000000000000000000000000000000000000000000000000000000000062000445565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b15801562000a7657600080fd5b505afa15801562000a8b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ab1919062001a26565b905090565b6000546001600160a01b031690565b62000990816001620010b9565b6001600160a01b03808216600090815260026020526040902054165b919050565b600054600160a01b900460ff1690565b60006001600054600160a01b900460ff16600281111562000b2057fe5b1462000b405760405162461bcd60e51b815260040162000396906200275f565b62000bba878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b0181900481028201810190925289815292508991508890819084018382808284376000920191909152506001925062001220915050565b6001600160a01b038116600090815260026020526040902080546001600160a01b0319163317905590509695505050505050565b62000bfc82826001620013c6565b5050565b62000bfc82826000620013c6565b62000c18620009d1565b6001600160a01b0316336001600160a01b03161462000c4b5760405162461bcd60e51b81526004016200039690620027a7565b8262000c6b5760405162461bcd60e51b8152600401620003969062002813565b62000cda848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506040805160208088028281018201909352878252909350879250869182918501908490808284376000920191909152506200159192505050565b50505050565b6001600160a01b03821660009081526001602090815260408083206001600160e01b03198516845290915290205460ff165b92915050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000806001600054600160a01b900460ff16600281111562000d5a57fe5b1462000d7a5760405162461bcd60e51b815260040162000396906200275f565b62000e288b8b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8d018190048102820181019092528b81528e93508d9250908c908c908190840183828082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284376000920191909152506200171992505050565b91509150995099975050505050505050565b6001600054600160a01b900460ff16600281111562000e5557fe5b1462000e755760405162461bcd60e51b815260040162000396906200275f565b604051633ef03e7560e11b815282906001600160a01b03821690637de07cea9062000ea5903390600401620024fe565b60206040518083038186803b15801562000ebe57600080fd5b505afa15801562000ed3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ef9919062001d8b565b62000f185760405162461bcd60e51b81526004016200039690620027cb565b604051630fb5b3f960e31b81527f0000000000000000000000000000000000000000000000000000000000000000906000906001600160a01b03831690637dad9fc89062000f6b908890600401620024ee565b60806040518083038186803b15801562000f8457600080fd5b505afa15801562000f99573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fbf919062001af0565b50506040516338b3eb1b60e01b81529092506001600160a01b03841691506338b3eb1b9062000ff5908890889060040162002637565b600060405180830381600087803b1580156200101057600080fd5b505af115801562001025573d6000803e3d6000fd5b50506040516382d3a1dd60e01b81526001600160a01b03841692506382d3a1dd91506200105a90889060019060040162002637565b600060405180830381600087803b1580156200107557600080fd5b505af11580156200108a573d6000803e3d6000fd5b505050506001600160a01b0316600090815260026020526040902080546001600160a01b031916905550505050565b6001600054600160a01b900460ff166002811115620010d457fe5b14620010f45760405162461bcd60e51b815260040162000396906200275f565b604051633ef03e7560e11b815282906001600160a01b03821690637de07cea9062001124903390600401620024fe565b60206040518083038186803b1580156200113d57600080fd5b505afa15801562001152573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001178919062001d8b565b620011975760405162461bcd60e51b81526004016200039690620027cb565b604051634e4ea46d60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639c9d48da90620011e7908690869060040162002637565b600060405180830381600087803b1580156200120257600080fd5b505af115801562001217573d6000803e3d6000fd5b50505050505050565b60006001600160a01b0386166200124b5760405162461bcd60e51b81526004016200039690620027ef565b606063399ae72460e01b87876040516024016200126a92919062002656565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252600054915190925082916001600160a01b031690620012bb90620018f6565b620012c8929190620026de565b604051809103906000f080158015620012e5573d6000803e3d6000fd5b509150600085511180620012fa575060008451115b1562001365576040516396aed58760e01b81526001600160a01b038316906396aed5879062001330908890889060040162002702565b600060405180830381600087803b1580156200134b57600080fd5b505af115801562001360573d6000803e3d6000fd5b505050505b821515876001600160a01b0316336001600160a01b03167f0e6310be2c106224ea5db41e7f599982b85c8524b0e7cd0c4fb88e2ac46554b5858a8a8a604051620013b3949392919062002675565b60405180910390a4505b95945050505050565b6001600054600160a01b900460ff166002811115620013e157fe5b14620014015760405162461bcd60e51b815260040162000396906200275f565b6001600160a01b0382811660009081526002602052604090205483911633146200143f5760405162461bcd60e51b8152600401620003969062002783565b604051633ef03e7560e11b815284906001600160a01b03821690637de07cea906200146f903390600401620024fe565b60206040518083038186803b1580156200148857600080fd5b505afa1580156200149d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014c3919062001d8b565b620014e25760405162461bcd60e51b81526004016200039690620027cb565b604051633457e6e760e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d15f9b9c906200155690889088907f000000000000000000000000000000000000000000000000000000000000000090899060040162002534565b600060405180830381600087803b1580156200157157600080fd5b505af115801562001586573d6000803e3d6000fd5b505050505050505050565b8051825114620015b55760405162461bcd60e51b8152600401620003969062002801565b60005b82518110156200171457620015f6838281518110620015d357fe5b6020026020010151838381518110620015e857fe5b602002602001015162000ce0565b15620016165760405162461bcd60e51b8152600401620003969062002771565b60018060008584815181106200162857fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008484815181106200165f57fe5b60200260200101516001600160e01b0319166001600160e01b031916815260200190815260200160002060006101000a81548160ff021916908315150217905550828181518110620016ad57fe5b60200260200101516001600160a01b03167f355d4742de92efa1dcd9085b88ede27d7cfda96747ea062a59010a992c8af150838381518110620016ec57fe5b6020026020010151604051620017039190620026ce565b60405180910390a2600101620015b8565b505050565b6000806001600160a01b038816620017455760405162461bcd60e51b815260040162000396906200274d565b6200175586868686600062001220565b6040516322a0c08b60e01b81529092506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906322a0c08b90620017cc907f0000000000000000000000000000000000000000000000000000000000000000908c9087908d9060040162002571565b602060405180830381600087803b158015620017e757600080fd5b505af1158015620017fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001822919062001a26565b6040516382d3a1dd60e01b81529091506001600160a01b038316906382d3a1dd906200185690849060009060040162002637565b600060405180830381600087803b1580156200187157600080fd5b505af115801562001886573d6000803e3d6000fd5b50505050856001600160a01b0316886001600160a01b0316336001600160a01b03167f38d3196918721ec4627522d424d47f608e3f0f7e7a8f8abe5369150f7fc4b2a585858c8b8b8b604051620018e396959493929190620025bd565b60405180910390a4965096945050505050565b6102e1806200298383390190565b803562000d12816200292e565b805162000d12816200292e565b60008083601f8401126200193157600080fd5b50813567ffffffffffffffff8111156200194a57600080fd5b6020830191508360208202830111156200196357600080fd5b9250929050565b805162000d128162002945565b803562000d128162002950565b60008083601f8401126200199757600080fd5b50813567ffffffffffffffff811115620019b057600080fd5b6020830191508360018202830111156200196357600080fd5b803562000d12816200295b565b803562000d128162002969565b803562000d128162002977565b805162000d128162002977565b60006020828403121562001a1057600080fd5b600062001a1e848462001904565b949350505050565b60006020828403121562001a3957600080fd5b600062001a1e848462001911565b6000806040838503121562001a5b57600080fd5b600062001a69858562001904565b925050602062001a7c8582860162001904565b9150509250929050565b6000806000806080858703121562001a9d57600080fd5b600062001aab878762001904565b945050602062001abe8782880162001904565b935050604062001ad18782880162001904565b925050606062001ae48782880162001904565b91505092959194509250565b6000806000806080858703121562001b0757600080fd5b600062001b15878762001911565b945050602062001b288782880162001911565b935050604062001b3b8782880162001911565b925050606062001ae487828801620019f0565b6000806040838503121562001b6257600080fd5b600062001b70858562001904565b925050602062001a7c8582860162001977565b600080600080600080600080600060c08a8c03121562001ba257600080fd5b600062001bb08c8c62001904565b99505060208a013567ffffffffffffffff81111562001bce57600080fd5b62001bdc8c828d0162001984565b9850985050604062001bf18c828d0162001904565b965050606062001c048c828d01620019e3565b95505060808a013567ffffffffffffffff81111562001c2257600080fd5b62001c308c828d0162001984565b945094505060a08a013567ffffffffffffffff81111562001c5057600080fd5b62001c5e8c828d0162001984565b92509250509295985092959850929598565b6000806000806000806080878903121562001c8a57600080fd5b600062001c98898962001904565b965050602062001cab89828a01620019e3565b955050604087013567ffffffffffffffff81111562001cc957600080fd5b62001cd789828a0162001984565b9450945050606087013567ffffffffffffffff81111562001cf757600080fd5b62001d0589828a0162001984565b92509250509295509295509295565b6000806000806040858703121562001d2b57600080fd5b843567ffffffffffffffff81111562001d4357600080fd5b62001d51878288016200191e565b9450945050602085013567ffffffffffffffff81111562001d7157600080fd5b62001d7f878288016200191e565b95989497509550505050565b60006020828403121562001d9e57600080fd5b600062001a1e84846200196a565b60006020828403121562001dbf57600080fd5b600062001a1e848462001977565b600080600080600060a0868803121562001de657600080fd5b600062001df48888620019c9565b955050602062001e078882890162001904565b945050604062001e1a8882890162001904565b935050606062001e2d8882890162001904565b925050608062001e408882890162001904565b9150509295509295909350565b60006020828403121562001e6057600080fd5b600062001a1e8484620019d6565b62001e7981620028c3565b82525050565b62001e79816200288c565b62001e798162002899565b62001e79816200289e565b600062001ead826200287f565b62001eb9818562002883565b935062001ecb818560208601620028ea565b62001ed68162002919565b9093019392505050565b62001e7981620028d0565b600062001efa60328362002883565b7f736574436f6d7074726f6c6c65724c69623a20546869732076616c75652063618152716e206f6e6c7920626520736574206f6e636560701b602082015260400192915050565b600062001f5060278362002883565b7f5f5f6372656174654e657746756e643a205f6f776e65722063616e6e6f7420628152666520656d70747960c81b602082015260400192915050565b600062001f9b60138362002883565b7252656c65617365206973206e6f74204c69766560681b815260200192915050565b600062001fcc602d8362002883565b7f5f5f72656769737465725661756c7443616c6c733a2043616c6c20616c72656181526c191e481c9959da5cdd195c9959609a1b602082015260400192915050565b60006200201d60388362002883565b7f4f6e6c792074686520436f6d7074726f6c6c657250726f78792063726561746f81527f722063616e2063616c6c20746869732066756e6374696f6e0000000000000000602082015260400192915050565b60006200207e604c8362002883565b7f73657452656c656173655374617475733a2043616e206f6e6c7920736574207481527f68652072656c6561736520737461747573207768656e20636f6d7074726f6c6c60208201526b195c931a58881a5cc81cd95d60a21b604082015260600192915050565b6000620020f4602e8362002883565b7f4f6e6c792074686520636f6e7472616374206f776e65722063616e2063616c6c81526d103a3434b990333ab731ba34b7b760911b602082015260400192915050565b60006200214660298362002883565b7f646572656769737465725661756c7443616c6c733a2043616c6c206e6f7420728152681959da5cdd195c995960ba1b602082015260400192915050565b60006200219360338362002883565b7f4f6e6c792061207065726d697373696f6e6564206d69677261746f722063616e8152721031b0b636103a3434b990333ab731ba34b7b760691b602082015260400192915050565b6000620021ea603d8362002883565b7f706f73744d6967726174654f726967696e486f6f6b3a204f6e6c79204469737081527f6174636865722063616e2063616c6c20746869732066756e6374696f6e000000602082015260400192915050565b60006200224b603c8362002883565b7f5f5f6465706c6f79436f6d7074726f6c6c657250726f78793a205f64656e6f6d81527f696e6174696f6e41737365742063616e6e6f7420626520656d70747900000000602082015260400192915050565b6000620022ac60298362002883565b7f5f5f72656769737465725661756c7443616c6c733a20556e6576656e20696e7081526875742061727261797360b81b602082015260400192915050565b6000620022f960248362002883565b7f72656769737465725661756c7443616c6c733a20456d707479205f636f6e74728152636163747360e01b602082015260400192915050565b60006200234160268362002883565b7f646572656769737465725661756c7443616c6c733a20456d707479205f636f6e81526574726163747360d01b602082015260400192915050565b60006200238b60428362002883565b7f73657452656c656173655374617475733a204f6e6c792074686520446973706181527f7463686572206f776e65722063616e2063616c6c20746869732066756e63746960208201526137b760f11b604082015260600192915050565b6000620023f760338362002883565b7f73657452656c656173655374617475733a205f6e657874537461747573206973815272207468652063757272656e742073746174757360681b602082015260400192915050565b60006200244e60298362002883565b7f646572656769737465725661756c7443616c6c733a20556e6576656e20696e7081526875742061727261797360b81b602082015260400192915050565b60006200249b60338362002883565b7f73657452656c656173655374617475733a2043616e6e6f742072657475726e20815272746f205072654c61756e63682073746174757360681b602082015260400192915050565b62001e798162000445565b6020810162000d12828462001e7f565b6020810162000d12828462001e6e565b604081016200251e828562001e7f565b6200252d602083018462001e7f565b9392505050565b6080810162002544828762001e7f565b62002553602083018662001e7f565b62002562604083018562001e7f565b620013bd606083018462001e8a565b6080810162002581828762001e7f565b62002590602083018662001e7f565b6200259f604083018562001e7f565b8181036060830152620025b3818462001ea0565b9695505050505050565b60c08101620025cd828962001e7f565b620025dc602083018862001e7f565b8181036040830152620025f0818762001ea0565b9050620026016060830186620024e3565b818103608083015262002615818562001ea0565b905081810360a08301526200262b818462001ea0565b98975050505050505050565b6040810162002647828562001e7f565b6200252d602083018462001e8a565b6040810162002666828562001e7f565b6200252d6020830184620024e3565b6080810162002685828762001e7f565b620026946020830186620024e3565b8181036040830152620026a8818562001ea0565b90508181036060830152620025b3818462001ea0565b6020810162000d12828462001e8a565b6020810162000d12828462001e95565b60408082528101620026f1818562001ea0565b90506200252d602083018462001e7f565b6040808252810162002715818562001ea0565b9050818103602083015262001a1e818462001ea0565b6020810162000d12828462001ee0565b6020808252810162000d128162001eeb565b6020808252810162000d128162001f41565b6020808252810162000d128162001f8c565b6020808252810162000d128162001fbd565b6020808252810162000d12816200200e565b6020808252810162000d12816200206f565b6020808252810162000d1281620020e5565b6020808252810162000d128162002137565b6020808252810162000d128162002184565b6020808252810162000d1281620021db565b6020808252810162000d12816200223c565b6020808252810162000d12816200229d565b6020808252810162000d1281620022ea565b6020808252810162000d128162002332565b6020808252810162000d12816200237c565b6020808252810162000d1281620023e8565b6020808252810162000d12816200243f565b6020808252810162000d12816200248c565b5190565b90815260200190565b600062000d1282620028b7565b151590565b6001600160e01b03191690565b8062000aee8162002923565b6001600160a01b031690565b600062000d1282620028dd565b600062000d1282620028ab565b600062000d12826200288c565b60005b8381101562002907578181015183820152602001620028ed565b8381111562000cda5750506000910152565b601f01601f191690565b600381106200099057fe5b62002939816200288c565b81146200099057600080fd5b620029398162002899565b62002939816200289e565b600581106200099057600080fd5b600381106200099057600080fd5b62002939816200044556fe608060405234801561001057600080fd5b506040516102e13803806102e18339818101604052604081101561003357600080fd5b810190808051604051939291908464010000000082111561005357600080fd5b90830190602082018581111561006857600080fd5b825164010000000081118282018810171561008257600080fd5b82525081516020918201929091019080838360005b838110156100af578181015183820152602001610097565b50505050905090810190601f1680156100dc5780820380516001836020036101000a031916815260200191505b50604052602001805190602001909291905050508181807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5560006060826001600160a01b0316846040518082805190602001908083835b602083106101535780518252601f199092019160209182019101610134565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146101b3576040519150601f19603f3d011682016040523d82523d6000602084013e6101b8565b606091505b50915091508181906102485760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561020d5781810151838201526020016101f5565b50505050905090810190601f16801561023a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5050505050505060848061025d6000396000f3fe60806040527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc543660008037600080366000846127105a03f43d806000803e818015604957816000f35b816000fdfea2646970667358221220479fe1a45f639b2b28264f0664c5040a754e68dd3840b29a2a20405474a7d2b164736f6c634300060c0033a26469706673582212201fc017016bd33cb57d8f2a34d07045a85f3ad8cc8d28daafac75d8a06cf7e6b764736f6c634300060c0033000000000000000000000000c3dc853dd716bd5754f421ef94fdcbac3902ab32000000000000000000000000ac3fe07f51c51153e181be892e4e37326eea13da000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

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

000000000000000000000000c3dc853dd716bd5754f421ef94fdcbac3902ab32000000000000000000000000ac3fe07f51c51153e181be892e4e37326eea13da000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _dispatcher (address): 0xc3dc853dd716bd5754f421ef94fdcbac3902ab32
Arg [1] : _vaultLib (address): 0xac3fe07f51c51153e181be892e4e37326eea13da

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000c3dc853dd716bd5754f421ef94fdcbac3902ab32
Arg [1] : 000000000000000000000000ac3fe07f51c51153e181be892e4e37326eea13da
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000


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