/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package comrel;


/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Multi Input Port</b></em>'.
 * <!-- end-user-doc -->
 *
 *
 * @see comrel.ComrelPackage#getMultiInputPort()
 * @model
 * @generated
 */
public interface MultiInputPort extends MultiPort, InputPort {
} // MultiInputPort
