/**
 * <copyright>
 *
 * Copyright (c) 2014 itemis and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
 *
 * Contributors:
 *     itemis - Initial API and implementation
 *
 * </copyright>
 */
package org.eclipse.sphinx.tests.emf.serialization.model.extnodes;

import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.sphinx.tests.emf.serialization.model.nodes.NodesPackage;

/**
 * <!-- begin-user-doc --> The <b>Package</b> for the model. It contains accessors for the meta objects to represent
 * <ul>
 * <li>each class,</li>
 * <li>each feature of each class,</li>
 * <li>each operation of each class,</li>
 * <li>each enum,</li>
 * <li>and each data type</li>
 * </ul>
 * <!-- end-user-doc -->
 * 
 * @see org.eclipse.sphinx.tests.emf.serialization.model.extnodes.ExtNodesFactory
 * @model kind="package"
 * @generated
 */
public interface ExtNodesPackage extends EPackage {
	/**
	 * The package name. <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 */
	String eNAME = "extnodes";

	/**
	 * The package namespace URI. <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 */
	String eNS_URI = "http://www.eclipse.org/rmf/serialization/model/extnodes.ecore";

	/**
	 * The package namespace name. <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 */
	String eNS_PREFIX = "extnodes";

	/**
	 * The singleton instance of the package. <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 */
	ExtNodesPackage eINSTANCE = org.eclipse.sphinx.tests.emf.serialization.model.extnodes.impl.ExtNodesPackageImpl.init();

	/**
	 * The meta object id for the '{@link org.eclipse.sphinx.tests.emf.serialization.model.extnodes.impl.ExtendedNodeImpl
	 * <em>Extended Node</em>}' class. <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @see org.eclipse.sphinx.tests.emf.serialization.model.extnodes.impl.ExtendedNodeImpl
	 * @see org.eclipse.sphinx.tests.emf.serialization.model.extnodes.impl.ExtNodesPackageImpl#getExtendedNode()
	 * @generated
	 */
	int EXTENDED_NODE = 0;

	/**
	 * The feature id for the '<em><b>EReference Contained0000 Single</b></em>' containment reference. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_CONTAINED0000_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_CONTAINED0000_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference Contained0001 Single</b></em>' containment reference. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_CONTAINED0001_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_CONTAINED0001_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference Contained0010 Single</b></em>' containment reference. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_CONTAINED0010_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_CONTAINED0010_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference Contained0011 Single</b></em>' containment reference. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_CONTAINED0011_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_CONTAINED0011_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference Contained0100 Single</b></em>' containment reference. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_CONTAINED0100_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_CONTAINED0100_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference Contained0101 Single</b></em>' containment reference. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_CONTAINED0101_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_CONTAINED0101_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference Contained0110 Single</b></em>' containment reference. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_CONTAINED0110_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_CONTAINED0110_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference Contained0111 Single</b></em>' containment reference. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_CONTAINED0111_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_CONTAINED0111_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference Contained1000 Single</b></em>' containment reference. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_CONTAINED1000_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_CONTAINED1000_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference Contained1001 Single</b></em>' containment reference. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_CONTAINED1001_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_CONTAINED1001_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference Contained1010 Single</b></em>' containment reference. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_CONTAINED1010_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_CONTAINED1010_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference Contained1011 Single</b></em>' containment reference. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_CONTAINED1011_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_CONTAINED1011_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference Contained1100 Single</b></em>' containment reference. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_CONTAINED1100_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_CONTAINED1100_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference Contained1101 Single</b></em>' containment reference. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_CONTAINED1101_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_CONTAINED1101_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference Contained1110 Single</b></em>' containment reference. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_CONTAINED1110_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_CONTAINED1110_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference Contained1111 Single</b></em>' containment reference. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_CONTAINED1111_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_CONTAINED1111_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference Empty Annotation Single</b></em>' containment reference. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_EMPTY_ANNOTATION_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_EMPTY_ANNOTATION_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference No Annotation Single</b></em>' containment reference. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_NO_ANNOTATION_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_NO_ANNOTATION_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference Contained0000 Many</b></em>' containment reference list. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_CONTAINED0000_MANY = NodesPackage.SUB_NODE__EREFERENCE_CONTAINED0000_MANY;

	/**
	 * The feature id for the '<em><b>EReference Contained0001 Many</b></em>' containment reference list. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_CONTAINED0001_MANY = NodesPackage.SUB_NODE__EREFERENCE_CONTAINED0001_MANY;

	/**
	 * The feature id for the '<em><b>EReference Contained0010 Many</b></em>' containment reference list. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_CONTAINED0010_MANY = NodesPackage.SUB_NODE__EREFERENCE_CONTAINED0010_MANY;

	/**
	 * The feature id for the '<em><b>EReference Contained0011 Many</b></em>' containment reference list. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_CONTAINED0011_MANY = NodesPackage.SUB_NODE__EREFERENCE_CONTAINED0011_MANY;

	/**
	 * The feature id for the '<em><b>EReference Contained0100 Many</b></em>' containment reference list. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_CONTAINED0100_MANY = NodesPackage.SUB_NODE__EREFERENCE_CONTAINED0100_MANY;

	/**
	 * The feature id for the '<em><b>EReference Contained0101 Many</b></em>' containment reference list. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_CONTAINED0101_MANY = NodesPackage.SUB_NODE__EREFERENCE_CONTAINED0101_MANY;

	/**
	 * The feature id for the '<em><b>EReference Contained0110 Many</b></em>' containment reference list. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_CONTAINED0110_MANY = NodesPackage.SUB_NODE__EREFERENCE_CONTAINED0110_MANY;

	/**
	 * The feature id for the '<em><b>EReference Contained0111 Many</b></em>' containment reference list. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_CONTAINED0111_MANY = NodesPackage.SUB_NODE__EREFERENCE_CONTAINED0111_MANY;

	/**
	 * The feature id for the '<em><b>EReference Contained1000 Many</b></em>' containment reference list. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_CONTAINED1000_MANY = NodesPackage.SUB_NODE__EREFERENCE_CONTAINED1000_MANY;

	/**
	 * The feature id for the '<em><b>EReference Contained1001 Many</b></em>' containment reference list. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_CONTAINED1001_MANY = NodesPackage.SUB_NODE__EREFERENCE_CONTAINED1001_MANY;

	/**
	 * The feature id for the '<em><b>EReference Contained1010 Many</b></em>' containment reference list. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_CONTAINED1010_MANY = NodesPackage.SUB_NODE__EREFERENCE_CONTAINED1010_MANY;

	/**
	 * The feature id for the '<em><b>EReference Contained1011 Many</b></em>' containment reference list. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_CONTAINED1011_MANY = NodesPackage.SUB_NODE__EREFERENCE_CONTAINED1011_MANY;

	/**
	 * The feature id for the '<em><b>EReference Contained1100 Many</b></em>' containment reference list. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_CONTAINED1100_MANY = NodesPackage.SUB_NODE__EREFERENCE_CONTAINED1100_MANY;

	/**
	 * The feature id for the '<em><b>EReference Contained1101 Many</b></em>' containment reference list. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_CONTAINED1101_MANY = NodesPackage.SUB_NODE__EREFERENCE_CONTAINED1101_MANY;

	/**
	 * The feature id for the '<em><b>EReference Contained1110 Many</b></em>' containment reference list. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_CONTAINED1110_MANY = NodesPackage.SUB_NODE__EREFERENCE_CONTAINED1110_MANY;

	/**
	 * The feature id for the '<em><b>EReference Contained1111 Many</b></em>' containment reference list. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_CONTAINED1111_MANY = NodesPackage.SUB_NODE__EREFERENCE_CONTAINED1111_MANY;

	/**
	 * The feature id for the '<em><b>EReference Empty Annotation Many</b></em>' containment reference list. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_EMPTY_ANNOTATION_MANY = NodesPackage.SUB_NODE__EREFERENCE_EMPTY_ANNOTATION_MANY;

	/**
	 * The feature id for the '<em><b>EReference No Annotation Many</b></em>' containment reference list. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_NO_ANNOTATION_MANY = NodesPackage.SUB_NODE__EREFERENCE_NO_ANNOTATION_MANY;

	/**
	 * The feature id for the '<em><b>Name</b></em>' attribute. <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__NAME = NodesPackage.SUB_NODE__NAME;

	/**
	 * The feature id for the '<em><b>EReference With Type EObject Contained0001 Many</b></em>' containment reference
	 * list. <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_WITH_TYPE_EOBJECT_CONTAINED0001_MANY = NodesPackage.SUB_NODE__EREFERENCE_WITH_TYPE_EOBJECT_CONTAINED0001_MANY;

	/**
	 * The feature id for the '<em><b>EReference With Type EObject Contained0010 Many</b></em>' containment reference
	 * list. <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_WITH_TYPE_EOBJECT_CONTAINED0010_MANY = NodesPackage.SUB_NODE__EREFERENCE_WITH_TYPE_EOBJECT_CONTAINED0010_MANY;

	/**
	 * The feature id for the '<em><b>EReference With Type EObject Contained0100 Many</b></em>' containment reference
	 * list. <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_WITH_TYPE_EOBJECT_CONTAINED0100_MANY = NodesPackage.SUB_NODE__EREFERENCE_WITH_TYPE_EOBJECT_CONTAINED0100_MANY;

	/**
	 * The feature id for the '<em><b>EReference With Type EObject Contained1000 Many</b></em>' containment reference
	 * list. <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_WITH_TYPE_EOBJECT_CONTAINED1000_MANY = NodesPackage.SUB_NODE__EREFERENCE_WITH_TYPE_EOBJECT_CONTAINED1000_MANY;

	/**
	 * The feature id for the '<em><b>EReference Referenced0000 Single</b></em>' reference. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_REFERENCED0000_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_REFERENCED0000_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference Referenced0001 Single</b></em>' reference. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_REFERENCED0001_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_REFERENCED0001_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference Referenced0010 Single</b></em>' reference. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_REFERENCED0010_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_REFERENCED0010_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference Referenced0011 Single</b></em>' reference. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_REFERENCED0011_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_REFERENCED0011_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference Referenced0100 Single</b></em>' reference. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_REFERENCED0100_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_REFERENCED0100_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference Referenced0101 Single</b></em>' reference. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_REFERENCED0101_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_REFERENCED0101_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference Referenced0110 Single</b></em>' reference. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_REFERENCED0110_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_REFERENCED0110_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference Referenced0111 Single</b></em>' reference. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_REFERENCED0111_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_REFERENCED0111_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference Referenced1000 Single</b></em>' reference. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_REFERENCED1000_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_REFERENCED1000_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference Referenced1001 Single</b></em>' reference. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_REFERENCED1001_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_REFERENCED1001_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference Referenced1010 Single</b></em>' reference. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_REFERENCED1010_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_REFERENCED1010_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference Referenced1011 Single</b></em>' reference. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_REFERENCED1011_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_REFERENCED1011_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference Referenced1100 Single</b></em>' reference. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_REFERENCED1100_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_REFERENCED1100_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference Referenced1101 Single</b></em>' reference. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_REFERENCED1101_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_REFERENCED1101_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference Referenced1110 Single</b></em>' reference. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_REFERENCED1110_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_REFERENCED1110_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference Referenced1111 Single</b></em>' reference. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_REFERENCED1111_SINGLE = NodesPackage.SUB_NODE__EREFERENCE_REFERENCED1111_SINGLE;

	/**
	 * The feature id for the '<em><b>EReference Referenced0000 Many</b></em>' reference list. <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_REFERENCED0000_MANY = NodesPackage.SUB_NODE__EREFERENCE_REFERENCED0000_MANY;

	/**
	 * The feature id for the '<em><b>EReference Referenced0001 Many</b></em>' reference list. <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_REFERENCED0001_MANY = NodesPackage.SUB_NODE__EREFERENCE_REFERENCED0001_MANY;

	/**
	 * The feature id for the '<em><b>EReference Referenced0010 Many</b></em>' reference list. <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_REFERENCED0010_MANY = NodesPackage.SUB_NODE__EREFERENCE_REFERENCED0010_MANY;

	/**
	 * The feature id for the '<em><b>EReference Referenced0011 Many</b></em>' reference list. <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_REFERENCED0011_MANY = NodesPackage.SUB_NODE__EREFERENCE_REFERENCED0011_MANY;

	/**
	 * The feature id for the '<em><b>EReference Referenced0100 Many</b></em>' reference list. <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_REFERENCED0100_MANY = NodesPackage.SUB_NODE__EREFERENCE_REFERENCED0100_MANY;

	/**
	 * The feature id for the '<em><b>EReference Referenced0101 Many</b></em>' reference list. <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_REFERENCED0101_MANY = NodesPackage.SUB_NODE__EREFERENCE_REFERENCED0101_MANY;

	/**
	 * The feature id for the '<em><b>EReference Referenced0110 Many</b></em>' reference list. <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_REFERENCED0110_MANY = NodesPackage.SUB_NODE__EREFERENCE_REFERENCED0110_MANY;

	/**
	 * The feature id for the '<em><b>EReference Referenced0111 Many</b></em>' reference list. <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_REFERENCED0111_MANY = NodesPackage.SUB_NODE__EREFERENCE_REFERENCED0111_MANY;

	/**
	 * The feature id for the '<em><b>EReference Referenced1000 Many</b></em>' reference list. <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_REFERENCED1000_MANY = NodesPackage.SUB_NODE__EREFERENCE_REFERENCED1000_MANY;

	/**
	 * The feature id for the '<em><b>EReference Referenced1001 Many</b></em>' reference list. <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_REFERENCED1001_MANY = NodesPackage.SUB_NODE__EREFERENCE_REFERENCED1001_MANY;

	/**
	 * The feature id for the '<em><b>EReference Referenced1010 Many</b></em>' reference list. <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_REFERENCED1010_MANY = NodesPackage.SUB_NODE__EREFERENCE_REFERENCED1010_MANY;

	/**
	 * The feature id for the '<em><b>EReference Referenced1011 Many</b></em>' reference list. <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_REFERENCED1011_MANY = NodesPackage.SUB_NODE__EREFERENCE_REFERENCED1011_MANY;

	/**
	 * The feature id for the '<em><b>EReference Referenced1100 Many</b></em>' reference list. <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_REFERENCED1100_MANY = NodesPackage.SUB_NODE__EREFERENCE_REFERENCED1100_MANY;

	/**
	 * The feature id for the '<em><b>EReference Referenced1101 Many</b></em>' reference list. <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_REFERENCED1101_MANY = NodesPackage.SUB_NODE__EREFERENCE_REFERENCED1101_MANY;

	/**
	 * The feature id for the '<em><b>EReference Referenced1110 Many</b></em>' reference list. <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_REFERENCED1110_MANY = NodesPackage.SUB_NODE__EREFERENCE_REFERENCED1110_MANY;

	/**
	 * The feature id for the '<em><b>EReference Referenced1111 Many</b></em>' reference list. <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EREFERENCE_REFERENCED1111_MANY = NodesPackage.SUB_NODE__EREFERENCE_REFERENCED1111_MANY;

	/**
	 * The feature id for the '<em><b>EAttribute Attribute0000 Single</b></em>' attribute. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EATTRIBUTE_ATTRIBUTE0000_SINGLE = NodesPackage.SUB_NODE__EATTRIBUTE_ATTRIBUTE0000_SINGLE;

	/**
	 * The feature id for the '<em><b>EAttribute Attribute0001 Single</b></em>' attribute. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EATTRIBUTE_ATTRIBUTE0001_SINGLE = NodesPackage.SUB_NODE__EATTRIBUTE_ATTRIBUTE0001_SINGLE;

	/**
	 * The feature id for the '<em><b>EAttribute Attribute0010 Single</b></em>' attribute. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EATTRIBUTE_ATTRIBUTE0010_SINGLE = NodesPackage.SUB_NODE__EATTRIBUTE_ATTRIBUTE0010_SINGLE;

	/**
	 * The feature id for the '<em><b>EAttribute Attribute0011 Single</b></em>' attribute. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EATTRIBUTE_ATTRIBUTE0011_SINGLE = NodesPackage.SUB_NODE__EATTRIBUTE_ATTRIBUTE0011_SINGLE;

	/**
	 * The feature id for the '<em><b>EAttribute Attribute0100 Single</b></em>' attribute. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EATTRIBUTE_ATTRIBUTE0100_SINGLE = NodesPackage.SUB_NODE__EATTRIBUTE_ATTRIBUTE0100_SINGLE;

	/**
	 * The feature id for the '<em><b>EAttribute Attribute0101 Single</b></em>' attribute. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EATTRIBUTE_ATTRIBUTE0101_SINGLE = NodesPackage.SUB_NODE__EATTRIBUTE_ATTRIBUTE0101_SINGLE;

	/**
	 * The feature id for the '<em><b>EAttribute Attribute0110 Single</b></em>' attribute. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EATTRIBUTE_ATTRIBUTE0110_SINGLE = NodesPackage.SUB_NODE__EATTRIBUTE_ATTRIBUTE0110_SINGLE;

	/**
	 * The feature id for the '<em><b>EAttribute Attribute0111 Single</b></em>' attribute. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EATTRIBUTE_ATTRIBUTE0111_SINGLE = NodesPackage.SUB_NODE__EATTRIBUTE_ATTRIBUTE0111_SINGLE;

	/**
	 * The feature id for the '<em><b>EAttribute Attribute1000 Single</b></em>' attribute. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EATTRIBUTE_ATTRIBUTE1000_SINGLE = NodesPackage.SUB_NODE__EATTRIBUTE_ATTRIBUTE1000_SINGLE;

	/**
	 * The feature id for the '<em><b>EAttribute Attribute1001 Single</b></em>' attribute. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EATTRIBUTE_ATTRIBUTE1001_SINGLE = NodesPackage.SUB_NODE__EATTRIBUTE_ATTRIBUTE1001_SINGLE;

	/**
	 * The feature id for the '<em><b>EAttribute Attribute1010 Single</b></em>' attribute. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EATTRIBUTE_ATTRIBUTE1010_SINGLE = NodesPackage.SUB_NODE__EATTRIBUTE_ATTRIBUTE1010_SINGLE;

	/**
	 * The feature id for the '<em><b>EAttribute Attribute1011 Single</b></em>' attribute. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EATTRIBUTE_ATTRIBUTE1011_SINGLE = NodesPackage.SUB_NODE__EATTRIBUTE_ATTRIBUTE1011_SINGLE;

	/**
	 * The feature id for the '<em><b>EAttribute Attribute1100 Single</b></em>' attribute. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EATTRIBUTE_ATTRIBUTE1100_SINGLE = NodesPackage.SUB_NODE__EATTRIBUTE_ATTRIBUTE1100_SINGLE;

	/**
	 * The feature id for the '<em><b>EAttribute Attribute1101 Single</b></em>' attribute. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EATTRIBUTE_ATTRIBUTE1101_SINGLE = NodesPackage.SUB_NODE__EATTRIBUTE_ATTRIBUTE1101_SINGLE;

	/**
	 * The feature id for the '<em><b>EAttribute Attribute1110 Single</b></em>' attribute. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EATTRIBUTE_ATTRIBUTE1110_SINGLE = NodesPackage.SUB_NODE__EATTRIBUTE_ATTRIBUTE1110_SINGLE;

	/**
	 * The feature id for the '<em><b>EAttribute Attribute1111 Single</b></em>' attribute. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EATTRIBUTE_ATTRIBUTE1111_SINGLE = NodesPackage.SUB_NODE__EATTRIBUTE_ATTRIBUTE1111_SINGLE;

	/**
	 * The feature id for the '<em><b>EAttribute Attribute0000 Many</b></em>' attribute list. <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EATTRIBUTE_ATTRIBUTE0000_MANY = NodesPackage.SUB_NODE__EATTRIBUTE_ATTRIBUTE0000_MANY;

	/**
	 * The feature id for the '<em><b>EAttribute Attribute0001 Many</b></em>' attribute list. <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EATTRIBUTE_ATTRIBUTE0001_MANY = NodesPackage.SUB_NODE__EATTRIBUTE_ATTRIBUTE0001_MANY;

	/**
	 * The feature id for the '<em><b>EAttribute Attribute0010 Many</b></em>' attribute list. <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EATTRIBUTE_ATTRIBUTE0010_MANY = NodesPackage.SUB_NODE__EATTRIBUTE_ATTRIBUTE0010_MANY;

	/**
	 * The feature id for the '<em><b>EAttribute Attribute0011 Many</b></em>' attribute list. <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EATTRIBUTE_ATTRIBUTE0011_MANY = NodesPackage.SUB_NODE__EATTRIBUTE_ATTRIBUTE0011_MANY;

	/**
	 * The feature id for the '<em><b>EAttribute Attribute0100 Many</b></em>' attribute list. <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EATTRIBUTE_ATTRIBUTE0100_MANY = NodesPackage.SUB_NODE__EATTRIBUTE_ATTRIBUTE0100_MANY;

	/**
	 * The feature id for the '<em><b>EAttribute Attribute0101 Many</b></em>' attribute list. <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EATTRIBUTE_ATTRIBUTE0101_MANY = NodesPackage.SUB_NODE__EATTRIBUTE_ATTRIBUTE0101_MANY;

	/**
	 * The feature id for the '<em><b>EAttribute Attribute0110 Many</b></em>' attribute list. <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EATTRIBUTE_ATTRIBUTE0110_MANY = NodesPackage.SUB_NODE__EATTRIBUTE_ATTRIBUTE0110_MANY;

	/**
	 * The feature id for the '<em><b>EAttribute Attribute0111 Many</b></em>' attribute list. <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EATTRIBUTE_ATTRIBUTE0111_MANY = NodesPackage.SUB_NODE__EATTRIBUTE_ATTRIBUTE0111_MANY;

	/**
	 * The feature id for the '<em><b>EAttribute Attribute1000 Many</b></em>' attribute list. <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EATTRIBUTE_ATTRIBUTE1000_MANY = NodesPackage.SUB_NODE__EATTRIBUTE_ATTRIBUTE1000_MANY;

	/**
	 * The feature id for the '<em><b>EAttribute Attribute1001 Many</b></em>' attribute list. <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EATTRIBUTE_ATTRIBUTE1001_MANY = NodesPackage.SUB_NODE__EATTRIBUTE_ATTRIBUTE1001_MANY;

	/**
	 * The feature id for the '<em><b>EAttribute Attribute1010 Many</b></em>' attribute list. <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EATTRIBUTE_ATTRIBUTE1010_MANY = NodesPackage.SUB_NODE__EATTRIBUTE_ATTRIBUTE1010_MANY;

	/**
	 * The feature id for the '<em><b>EAttribute Attribute1011 Many</b></em>' attribute list. <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EATTRIBUTE_ATTRIBUTE1011_MANY = NodesPackage.SUB_NODE__EATTRIBUTE_ATTRIBUTE1011_MANY;

	/**
	 * The feature id for the '<em><b>EAttribute Attribute1100 Many</b></em>' attribute list. <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EATTRIBUTE_ATTRIBUTE1100_MANY = NodesPackage.SUB_NODE__EATTRIBUTE_ATTRIBUTE1100_MANY;

	/**
	 * The feature id for the '<em><b>EAttribute Attribute1101 Many</b></em>' attribute list. <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EATTRIBUTE_ATTRIBUTE1101_MANY = NodesPackage.SUB_NODE__EATTRIBUTE_ATTRIBUTE1101_MANY;

	/**
	 * The feature id for the '<em><b>EAttribute Attribute1110 Many</b></em>' attribute list. <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EATTRIBUTE_ATTRIBUTE1110_MANY = NodesPackage.SUB_NODE__EATTRIBUTE_ATTRIBUTE1110_MANY;

	/**
	 * The feature id for the '<em><b>EAttribute Attribute1111 Many</b></em>' attribute list. <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__EATTRIBUTE_ATTRIBUTE1111_MANY = NodesPackage.SUB_NODE__EATTRIBUTE_ATTRIBUTE1111_MANY;

	/**
	 * The feature id for the '<em><b>Reqif eReference Referenced0101 Single</b></em>' reference. <!-- begin-user-doc
	 * --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__REQIF_EREFERENCE_REFERENCED0101_SINGLE = NodesPackage.SUB_NODE__REQIF_EREFERENCE_REFERENCED0101_SINGLE;

	/**
	 * The feature id for the '<em><b>Reqif eReference Referenced1001 Many</b></em>' reference list. <!-- begin-user-doc
	 * --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__REQIF_EREFERENCE_REFERENCED1001_MANY = NodesPackage.SUB_NODE__REQIF_EREFERENCE_REFERENCED1001_MANY;

	/**
	 * The feature id for the '<em><b>Altenative Name</b></em>' attribute. <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE__ALTENATIVE_NAME = NodesPackage.SUB_NODE_FEATURE_COUNT + 0;

	/**
	 * The number of structural features of the '<em>Extended Node</em>' class. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE_FEATURE_COUNT = NodesPackage.SUB_NODE_FEATURE_COUNT + 1;

	/**
	 * The number of operations of the '<em>Extended Node</em>' class. <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENDED_NODE_OPERATION_COUNT = NodesPackage.SUB_NODE_OPERATION_COUNT + 0;

	/**
	 * The meta object id for the '{@link org.eclipse.sphinx.tests.emf.serialization.model.extnodes.impl.ExtensionImpl
	 * <em>Extension</em>}' class. <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @see org.eclipse.sphinx.tests.emf.serialization.model.extnodes.impl.ExtensionImpl
	 * @see org.eclipse.sphinx.tests.emf.serialization.model.extnodes.impl.ExtNodesPackageImpl#getExtension()
	 * @generated
	 */
	int EXTENSION = 1;

	/**
	 * The feature id for the '<em><b>Extensions</b></em>' containment reference list. <!-- begin-user-doc --> <!--
	 * end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENSION__EXTENSIONS = 0;

	/**
	 * The number of structural features of the '<em>Extension</em>' class. <!-- begin-user-doc --> <!-- end-user-doc
	 * -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENSION_FEATURE_COUNT = 1;

	/**
	 * The number of operations of the '<em>Extension</em>' class. <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 * @ordered
	 */
	int EXTENSION_OPERATION_COUNT = 0;

	/**
	 * Returns the meta object for class '{@link org.eclipse.sphinx.tests.emf.serialization.model.extnodes.ExtendedNode
	 * <em>Extended Node</em>}'. <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @return the meta object for class '<em>Extended Node</em>'.
	 * @see org.eclipse.sphinx.tests.emf.serialization.model.extnodes.ExtendedNode
	 * @generated
	 */
	EClass getExtendedNode();

	/**
	 * Returns the meta object for the attribute '
	 * {@link org.eclipse.sphinx.tests.emf.serialization.model.extnodes.ExtendedNode#getAltenativeName
	 * <em>Altenative Name</em>}'. <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @return the meta object for the attribute '<em>Altenative Name</em>'.
	 * @see org.eclipse.sphinx.tests.emf.serialization.model.extnodes.ExtendedNode#getAltenativeName()
	 * @see #getExtendedNode()
	 * @generated
	 */
	EAttribute getExtendedNode_AltenativeName();

	/**
	 * Returns the meta object for class '{@link org.eclipse.sphinx.tests.emf.serialization.model.extnodes.Extension
	 * <em>Extension</em>}'. <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @return the meta object for class '<em>Extension</em>'.
	 * @see org.eclipse.sphinx.tests.emf.serialization.model.extnodes.Extension
	 * @generated
	 */
	EClass getExtension();

	/**
	 * Returns the meta object for the containment reference list '
	 * {@link org.eclipse.sphinx.tests.emf.serialization.model.extnodes.Extension#getExtensions <em>Extensions</em>}'. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @return the meta object for the containment reference list '<em>Extensions</em>'.
	 * @see org.eclipse.sphinx.tests.emf.serialization.model.extnodes.Extension#getExtensions()
	 * @see #getExtension()
	 * @generated
	 */
	EReference getExtension_Extensions();

	/**
	 * Returns the factory that creates the instances of the model. <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @return the factory that creates the instances of the model.
	 * @generated
	 */
	ExtNodesFactory getExtNodesFactory();

	/**
	 * <!-- begin-user-doc --> Defines literals for the meta objects that represent
	 * <ul>
	 * <li>each class,</li>
	 * <li>each feature of each class,</li>
	 * <li>each operation of each class,</li>
	 * <li>each enum,</li>
	 * <li>and each data type</li>
	 * </ul>
	 * <!-- end-user-doc -->
	 * 
	 * @generated
	 */
	interface Literals {
		/**
		 * The meta object literal for the '
		 * {@link org.eclipse.sphinx.tests.emf.serialization.model.extnodes.impl.ExtendedNodeImpl <em>Extended Node</em>}'
		 * class. <!-- begin-user-doc --> <!-- end-user-doc -->
		 * 
		 * @see org.eclipse.sphinx.tests.emf.serialization.model.extnodes.impl.ExtendedNodeImpl
		 * @see org.eclipse.sphinx.tests.emf.serialization.model.extnodes.impl.ExtNodesPackageImpl#getExtendedNode()
		 * @generated
		 */
		EClass EXTENDED_NODE = eINSTANCE.getExtendedNode();

		/**
		 * The meta object literal for the '<em><b>Altenative Name</b></em>' attribute feature. <!-- begin-user-doc -->
		 * <!-- end-user-doc -->
		 * 
		 * @generated
		 */
		EAttribute EXTENDED_NODE__ALTENATIVE_NAME = eINSTANCE.getExtendedNode_AltenativeName();

		/**
		 * The meta object literal for the '
		 * {@link org.eclipse.sphinx.tests.emf.serialization.model.extnodes.impl.ExtensionImpl <em>Extension</em>}' class. <!--
		 * begin-user-doc --> <!-- end-user-doc -->
		 * 
		 * @see org.eclipse.sphinx.tests.emf.serialization.model.extnodes.impl.ExtensionImpl
		 * @see org.eclipse.sphinx.tests.emf.serialization.model.extnodes.impl.ExtNodesPackageImpl#getExtension()
		 * @generated
		 */
		EClass EXTENSION = eINSTANCE.getExtension();

		/**
		 * The meta object literal for the '<em><b>Extensions</b></em>' containment reference list feature. <!--
		 * begin-user-doc --> <!-- end-user-doc -->
		 * 
		 * @generated
		 */
		EReference EXTENSION__EXTENSIONS = eINSTANCE.getExtension_Extensions();

	}

} // ExtNodesPackage
