interface ISetFactory {

    /* ============ External Functions ============ */

    /**
     * Return core address
     *
     * @return address        core address
     */
    function core()
        external
        returns (address);

    /**
     * Deploys a new Set Token and adds it to the valid list of SetTokens
     *
     * @param  _components           The address of component tokens
     * @param  _units                The units of each component token
     * @param  _naturalUnit          The minimum unit to be issued or redeemed
     * @param  _name                 The bytes32 encoded name of the new Set
     * @param  _symbol               The bytes32 encoded symbol of the new Set
     * @param  _callData             Byte string containing additional call parameters
     * @return setTokenAddress       The address of the new Set
     */
    function createSet(
        address[] calldata _components,
        uint[] calldata _units,
        uint256 _naturalUnit,
        bytes32 _name,
        bytes32 _symbol,
        bytes calldata _callData
    )
        external
        returns (address);
}
/**
 * @title ISetFactory
 * @author Set Protocol
 *
 * The ISetFactory interface provides operability for authorized contracts
 * to interact with SetTokenFactory
 */
function createSet(
    address[] calldata _components,
    uint[] calldata _units,
    uint256 _naturalUnit,
    bytes32 _name,
    bytes32 _symbol,
    bytes calldata _callData
)
    external
    returns (address);

/**
 * Deploys a new Set Token and adds it to the valid list of SetTokens
 *
 * @param  _components           The address of component tokens
 * @param  _units                The units of each component token
 * @param  _naturalUnit          The minimum unit to be issued or redeemed
 * @param  _name                 The bytes32 encoded name of the new Set
 * @param  _symbol               The bytes32 encoded symbol of the new Set
 * @param  _callData             Byte string containing additional call parameters
 * @return setTokenAddress       The address of the new Set
 */