-- **************************************************************
--
-- Information Element Definitions
--
-- **************************************************************

RANAP-IEs {
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0)
umts-Access (20) modules (3) ranap (0) version1 (1) ranap-IEs (2) }

DEFINITIONS AUTOMATIC TAGS ::=

BEGIN

IMPORTS
	maxNrOfCSGs,
	maxNrOfErrors,
	maxNrOfPDPDirections,
	maxNrOfPoints,
	maxNrOfRABs,
	maxNrOfSRBs,
	maxNrOfSeparateTrafficDirections,
	maxRAB-Subflows,
	maxRAB-SubflowCombination,
	maxNrOfLevels,
	maxNrOfAltValues,
	maxNrOfSNAs,
	maxNrOfLAs,
	maxNrOfPLMNsSN,
	maxSet,
	maxNrOfHSDSCHMACdFlows-1,
	maxNrOfUEsToBeTraced,
	maxNrOfInterfaces,
	maxnoofMulticastServicesPerRNC,
	maxMBMSSA,
	maxMBMSRA,
	maxnoofMulticastServicesPerUE,
	maxNrOfEDCHMACdFlows-1,
	maxGANSSSet,
	maxNrOfEUTRAFreqs,
	maxNrOfCellIds,
	maxNrOfRAIs,
	maxNrOfLAIs,
	maxNrOfVol,
	maxSizeOfIMSInfo,
	maxnoofMDTPLMNs,
	maxProtocolExtensions,

	id-CN-DomainIndicator,
	id-MessageStructure,
	id-SRB-TrCH-Mapping,
	id-TypeOfError,
	id-hS-DSCH-MAC-d-Flow-ID,
	id-SignallingIndication,
	id-CellLoadInformationGroup,
	id-TraceRecordingSessionInformation,
	id-MBMSLinkingInformation,
	id-AlternativeRABConfiguration,
	id-AlternativeRABConfigurationRequest,
	id-E-DCH-MAC-d-Flow-ID,
	id-RAC,
	id-Alt-RAB-Parameter-ExtendedGuaranteedBitrateInf,
	id-Alt-RAB-Parameter-ExtendedMaxBitrateInf,
	id-Ass-RAB-Parameter-ExtendedGuaranteedBitrateList,
	id-Ass-RAB-Parameter-ExtendedMaxBitrateList,
	id-RAB-Parameter-ExtendedGuaranteedBitrateList,
	id-RAB-Parameter-ExtendedMaxBitrateList,
	id-Requested-RAB-Parameter-ExtendedMaxBitrateList,
	id-Requested-RAB-Parameter-ExtendedGuaranteedBitrateList,
	id-LAofIdleModeUEs,
	id-newLAListofIdleModeUEs,
	id-LAListwithNoIdleModeUEsAnyMore,
	id-ExtendedRNC-ID,
	id-GANSS-PositioningDataSet,
	id-d-RNTI-for-NoIuCSUP,
	id-UE-History-Information,
	id-SubscriberProfileIDforRFP,
	id-Alt-RAB-Parameter-SupportedGuaranteedBitrateInf,
	id-Alt-RAB-Parameter-SupportedMaxBitrateInf,
	id-Ass-RAB-Parameter-SupportedGuaranteedBitrateList,
	id-Ass-RAB-Parameter-SupportedMaxBitrateList,
	id-RAB-Parameter-SupportedGuaranteedBitrateList,
	id-RAB-Parameter-SupportedMaxBitrateList,
	id-Requested-RAB-Parameter-SupportedMaxBitrateList,
	id-Requested-RAB-Parameter-SupportedGuaranteedBitrateList,
	id-PSRABtobeReplaced,
	id-SRVCC-Information,
	id-CSG-Id,
	id-CSFB-Information,
	id-IRAT-Measurement-Configuration,
	id-Management-Based-MDT-Allowed,
	id-Time-UE-StayedInCell-EnhancedGranularity,
	id-HO-Cause,
	id-TraceRecordingSessionReference,
	id-IMSI,
	id-Management-Based-MDT-PLMN-List,
	id-SignallingBasedMDTPLMNList,
	id-M4Report,
	id-M5Report,
	id-M6Report,
	id-M7Report,
	id-TimingDifferenceULDL,
	id-Trace-Collection-Entity-IP-Addess,
	id-Serving-Cell-Identifier,
	id-EARFCN-Extended,
	id-LastE-UTRANPLMNIdentity,
	id-RSRQ-Type,
	id-RSRQ-Extension


FROM RANAP-Constants

	Criticality,
	ProcedureCode,
	ProtocolIE-ID,
	TriggeringMessage
FROM RANAP-CommonDataTypes

	IE
FROM RANAP-PDU;

IE-Extensions ::= SEQUENCE (SIZE (1..maxProtocolExtensions)) OF IE

-- A

AccuracyFulfilmentIndicator ::= ENUMERATED{
	requested-Accuracy-Fulfilled,
	requested-Accuracy-Not-Fulfilled,
	...
}

AllocationOrRetentionPriority ::= SEQUENCE {
	priorityLevel			PriorityLevel,
	pre-emptionCapability		Pre-emptionCapability,
	pre-emptionVulnerability	Pre-emptionVulnerability,
	queuingAllowed			QueuingAllowed,
	iE-Extensions			IE-Extensions		 OPTIONAL,
	...
}

Alt-RAB-Parameters ::= SEQUENCE {
	altMaxBitrateInf		Alt-RAB-Parameter-MaxBitrateInf 				OPTIONAL,
	altGuaranteedBitRateInf		Alt-RAB-Parameter-GuaranteedBitrateInf 				OPTIONAL,
	iE-Extensions			IE-Extensions		 					OPTIONAL,
	...
}

Alt-RAB-Parameter-ExtendedGuaranteedBitrateInf ::= SEQUENCE {
	altExtendedGuaranteedBitrateType	Alt-RAB-Parameter-GuaranteedBitrateType,
	altExtendedGuaranteedBitrates		Alt-RAB-Parameter-ExtendedGuaranteedBitrates	OPTIONAL
	-- This IE shall be present if the Type of Extended Guaranteed Bit Rates Information IE is set to "Value range" or "Discrete values" --,
	...
}

Alt-RAB-Parameter-ExtendedGuaranteedBitrates ::= SEQUENCE (SIZE (1..maxNrOfAltValues)) OF
	Alt-RAB-Parameter-ExtendedGuaranteedBitrateList

Alt-RAB-Parameter-ExtendedGuaranteedBitrateList	::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF ExtendedGuaranteedBitrate

Alt-RAB-Parameter-GuaranteedBitrateInf ::= SEQUENCE {
	altGuaranteedBitrateType	Alt-RAB-Parameter-GuaranteedBitrateType,
	altGuaranteedBitrates		Alt-RAB-Parameter-GuaranteedBitrates			OPTIONAL
	-- This IE shall be present if the Type of Guaranteed Bit Rates Information IE is set to "Value range" or "Discrete values" --,
	...
}

Alt-RAB-Parameter-GuaranteedBitrateType ::= ENUMERATED{
	unspecified,
	value-range,
	discrete-values,
	...
}

Alt-RAB-Parameter-GuaranteedBitrates ::= SEQUENCE (SIZE (1..maxNrOfAltValues)) OF
	Alt-RAB-Parameter-GuaranteedBitrateList


Alt-RAB-Parameter-GuaranteedBitrateList	::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF GuaranteedBitrate

Alt-RAB-Parameter-SupportedGuaranteedBitrateInf ::= SEQUENCE {
	altSupportedGuaranteedBitrateType	Alt-RAB-Parameter-GuaranteedBitrateType,
	altSupportedGuaranteedBitrates		Alt-RAB-Parameter-SupportedGuaranteedBitrates	OPTIONAL
	-- This IE shall be present if the Type of Supported Guaranteed Bit Rates Information IE is set to "Value range" or "Discrete values" --,
	iE-Extensions			IE-Extensions		 					OPTIONAL,
	...
}

Alt-RAB-Parameter-SupportedGuaranteedBitrates ::= SEQUENCE (SIZE (1..maxNrOfAltValues)) OF
	SupportedRAB-ParameterBitrateList


Alt-RAB-Parameter-ExtendedMaxBitrateInf ::= SEQUENCE {
	altExtendedMaxBitrateType	Alt-RAB-Parameter-MaxBitrateType,
	altExtendedMaxBitrates		Alt-RAB-Parameter-ExtendedMaxBitrates			OPTIONAL
	-- This IE shall be present if the Type of Extended Alternative Maximum Bit Rates Information IE is set to "Value range" or "Discrete values" --,
	...
}

Alt-RAB-Parameter-ExtendedMaxBitrates ::= SEQUENCE (SIZE (1..maxNrOfAltValues)) OF
	Alt-RAB-Parameter-ExtendedMaxBitrateList

Alt-RAB-Parameter-ExtendedMaxBitrateList	::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF ExtendedMaxBitrate

Alt-RAB-Parameter-MaxBitrateInf ::= SEQUENCE {
	altMaxBitrateType	Alt-RAB-Parameter-MaxBitrateType,
	altMaxBitrates		Alt-RAB-Parameter-MaxBitrates			OPTIONAL
	-- This IE shall be present if the Type of Alternative Maximun Bit Rates Information IE is set to "Value range" or "Discrete values" --,
	...
}

Alt-RAB-Parameter-MaxBitrateType ::= ENUMERATED{
	unspecified,
	value-range,
	discrete-values,
	...
}

Alt-RAB-Parameter-MaxBitrates ::= SEQUENCE (SIZE (1..maxNrOfAltValues)) OF
	Alt-RAB-Parameter-MaxBitrateList


Alt-RAB-Parameter-MaxBitrateList ::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF MaxBitrate


Alt-RAB-Parameter-SupportedMaxBitrateInf ::= SEQUENCE {
	altSupportedMaxBitrateType	Alt-RAB-Parameter-MaxBitrateType,
	altSupportedMaxBitrates		Alt-RAB-Parameter-SupportedMaxBitrates			OPTIONAL
	-- This IE shall be present if the Type of Supported Alternative Maximun Bit Rates Information IE is set to "Value range" or "Discrete values" --,
	iE-Extensions			IE-Extensions		 					OPTIONAL,
...
}


Alt-RAB-Parameter-SupportedMaxBitrates ::= SEQUENCE (SIZE (1..maxNrOfAltValues)) OF
	SupportedRAB-ParameterBitrateList

AlternativeRABConfigurationRequest ::= ENUMERATED{
	alternative-RAB-configuration-Requested,
	...
}

APN	::= OCTET STRING (SIZE (1..255))
-- Reference: 23.003

AreaIdentity ::= CHOICE {
	sAI				SAI,
	geographicalArea		GeographicalArea,
	...
}

Ass-RAB-Parameters ::= SEQUENCE {
	assMaxBitrateInf		Ass-RAB-Parameter-MaxBitrateList 				OPTIONAL,
	assGuaranteedBitRateInf		Ass-RAB-Parameter-GuaranteedBitrateList 			OPTIONAL,
	iE-Extensions			IE-Extensions		 					OPTIONAL,
	...
}

Ass-RAB-Parameter-ExtendedGuaranteedBitrateList	::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF ExtendedGuaranteedBitrate

Ass-RAB-Parameter-ExtendedMaxBitrateList ::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF ExtendedMaxBitrate


Ass-RAB-Parameter-GuaranteedBitrateList	::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF GuaranteedBitrate


Ass-RAB-Parameter-MaxBitrateList ::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF MaxBitrate

AuthorisedPLMNs ::= SEQUENCE (SIZE (1..maxNrOfPLMNsSN)) OF
	SEQUENCE {
		pLMNidentity		PLMNidentity,
		authorisedSNAsList	AuthorisedSNAs		OPTIONAL,
		iE-Extensions		IE-Extensions		OPTIONAL,
		...
	}

AuthorisedSNAs ::= SEQUENCE (SIZE (1..maxNrOfSNAs)) OF SNAC


-- B

BindingID ::= OCTET STRING (SIZE (4))

BroadcastAssistanceDataDecipheringKeys	::= SEQUENCE {
	cipheringKeyFlag	BIT STRING (SIZE (1)),
	currentDecipheringKey	BIT STRING (SIZE (56)),
	nextDecipheringKey	BIT STRING (SIZE (56)),
	...
}

-- C


Cause ::= CHOICE {
	radioNetwork		CauseRadioNetwork,
	transmissionNetwork	CauseTransmissionNetwork,
	nAS			CauseNAS,
	protocol		CauseProtocol,
	misc			CauseMisc,
	non-Standard		CauseNon-Standard,
	...,
	radioNetworkExtension	CauseRadioNetworkExtension
}

CauseMisc ::= INTEGER {
	om-intervention (113),
	no-resource-available (114),
	unspecified-failure (115),
	network-optimisation (116)
} (113..128)

CauseNAS ::= INTEGER {
	user-restriction-start-indication (81),
	user-restriction-end-indication (82),
	normal-release (83),
	csg-subscription-expiry(84)
} (81..96)

CauseProtocol ::= INTEGER {
	transfer-syntax-error (97),
	semantic-error (98),
	message-not-compatible-with-receiver-state (99),
	abstract-syntax-error-reject (100),
	abstract-syntax-error-ignore-and-notify (101),
	abstract-syntax-error-falsely-constructed-message (102)
} (97..112)

CauseRadioNetwork ::= INTEGER {
	rab-pre-empted (1),
	trelocoverall-expiry (2),
	trelocprep-expiry (3),
	treloccomplete-expiry (4),
	tqueing-expiry (5),
	relocation-triggered (6),
	trellocalloc-expiry(7),
	unable-to-establish-during-relocation (8),
	unknown-target-rnc (9),
	relocation-cancelled (10),
	successful-relocation (11),
	requested-ciphering-and-or-integrity-protection-algorithms-not-supported (12),
	conflict-with-already-existing-integrity-protection-and-or-ciphering-information (13),
	failure-in-the-radio-interface-procedure (14),
	release-due-to-utran-generated-reason (15),
	user-inactivity (16),
	time-critical-relocation (17),
	requested-traffic-class-not-available (18),
	invalid-rab-parameters-value (19),
	requested-maximum-bit-rate-not-available (20),
	requested-guaranteed-bit-rate-not-available (21),
	requested-transfer-delay-not-achievable (22),
	invalid-rab-parameters-combination (23),
	condition-violation-for-sdu-parameters (24),
	condition-violation-for-traffic-handling-priority (25),
	condition-violation-for-guaranteed-bit-rate (26),
	user-plane-versions-not-supported (27),
	iu-up-failure (28),
	relocation-failure-in-target-CN-RNC-or-target-system(29),
	invalid-RAB-ID (30),
	no-remaining-rab (31),
	interaction-with-other-procedure (32),
	requested-maximum-bit-rate-for-dl-not-available (33),
	requested-maximum-bit-rate-for-ul-not-available (34),
	requested-guaranteed-bit-rate-for-dl-not-available (35),
	requested-guaranteed-bit-rate-for-ul-not-available (36),
	repeated-integrity-checking-failure (37),
	requested-request-type-not-supported (38),
	request-superseded (39),
	release-due-to-UE-generated-signalling-connection-release (40),
	resource-optimisation-relocation (41),
	requested-information-not-available (42),
	relocation-desirable-for-radio-reasons (43),
	relocation-not-supported-in-target-RNC-or-target-system (44),
	directed-retry (45),
	radio-connection-with-UE-Lost (46),
	rNC-unable-to-establish-all-RFCs (47),
	deciphering-keys-not-available(48),
	dedicated-assistance-data-not-available(49),
	relocation-target-not-allowed (50),
	location-reporting-congestion (51),
	reduce-load-in-serving-cell (52),
	no-radio-resources-available-in-target-cell (53),
	gERAN-Iumode-failure (54),
	access-restricted-due-to-shared-networks (55),
	incoming-relocation-not-supported-due-to-PUESBINE-feature (56),
	traffic-load-in-the-target-cell-higher-than-in-the-source-cell (57),
	mBMS-no-multicast-service-for-this-UE(58),
	mBMS-unknown-UE-ID(59),
	successful-MBMS-session-start-no-data-bearer-necessary(60),
	mBMS-superseded-due-to-NNSF(61),
	mBMS-UE-linking-already-done(62),
	mBMS-UE-de-linking-failure-no-existing-UE-linking(63),
	tMGI-unknown(64)
} (1..64)

CauseRadioNetworkExtension ::= INTEGER {
	iP-multicast-address-and-APN-not-valid(257),
	mBMS-de-registration-rejected-due-to-implicit-registration(258),
	mBMS-request-superseded(259),
	mBMS-de-registration-during-session-not-allowed(260),
	mBMS-no-data-bearer-necessary(261),
	periodicLocationInformationNotAvailable(262),
	gTP-Resources-Unavailable(263),
	tMGI-inUse-overlapping-MBMS-service-area(264),
	mBMS-no-cell-in-MBMS-service-area(265),
	no-Iu-CS-UP-relocation(266),
	successful-MBMS-Session-Start-IP-Multicast-Bearer-established(267),
	cS-fallback-triggered(268),
	invalid-CSG-Id(269)
} (257..512)

CauseNon-Standard ::= INTEGER (129..256)
-- Cause value 256 shall not be used --

CauseTransmissionNetwork ::= INTEGER {
	signalling-transport-resource-failure (65),
	iu-transport-connection-failed-to-establish (66)
} (65..80)

Cell-Access-Mode::= ENUMERATED {
	hybrid,
	... 
}

CellBased::= SEQUENCE {
	cellIdList		CellIdList,
	iE-Extensions		IE-Extensions		OPTIONAL,
	...
}

CellIdList ::= SEQUENCE (SIZE (1..maxNrOfCellIds)) OF
	Cell-Id

Cell-Id		::= INTEGER (0..268435455)

Cell-Capacity-Class-Value ::= INTEGER (1..100,...)

CellLoadInformation ::= SEQUENCE {
	cell-Capacity-Class-Value	Cell-Capacity-Class-Value,
	loadValue			LoadValue,
	rTLoadValue			RTLoadValue				OPTIONAL,
	nRTLoadInformationValue		NRTLoadInformationValue			OPTIONAL,
	iE-Extensions			IE-Extensions				OPTIONAL,
	...
}

CellLoadInformationGroup ::= SEQUENCE {
	sourceCellID					SourceCellID,
	uplinkCellLoadInformation			CellLoadInformation		OPTIONAL,
	downlinkCellLoadInformation			CellLoadInformation		OPTIONAL,
	iE-Extensions					IE-Extensions			OPTIONAL,
	...
}

CellType ::= ENUMERATED{
	macro,
	micro,
	pico,
	femto,
	...
}

ClientType ::= ENUMERATED {
	emergency-Services,
	value-Added-Services,
	pLMN-Operator-Services,
	lawful-Intercept-Services,
	pLMN-Operator-Broadcast-Services,
	pLMN-Operator-O-et-M,
	pLMN-Operator-Anonymous-Statistics,
	pLMN-Operator-Target-MS-Service-Support,
	...
}

CriticalityDiagnostics ::= SEQUENCE {
	procedureCode			ProcedureCode			OPTIONAL,
	triggeringMessage		TriggeringMessage		OPTIONAL,
	procedureCriticality		Criticality			OPTIONAL,
	iEsCriticalityDiagnostics	CriticalityDiagnostics-IE-List 	OPTIONAL,
	iE-Extensions			IE-Extensions			OPTIONAL,
	...
}

CriticalityDiagnostics-IE-List ::= SEQUENCE (SIZE (1..maxNrOfErrors)) OF
	SEQUENCE {
		iECriticality		Criticality,
		iE-ID			ProtocolIE-ID,
		repetitionNumber	RepetitionNumber0		OPTIONAL,
		iE-Extensions		IE-Extensions			OPTIONAL,
		...
	}

MessageStructure ::= SEQUENCE (SIZE (1..maxNrOfLevels)) OF
	SEQUENCE {
		iE-ID			ProtocolIE-ID,
		repetitionNumber	RepetitionNumber1		OPTIONAL,
		iE-Extensions		IE-Extensions			OPTIONAL,
		...
	}

CGI ::= SEQUENCE {
	pLMNidentity	PLMNidentity,
	lAC		LAC,
	cI		CI,
	iE-Extensions		IE-Extensions			OPTIONAL
}

ChosenEncryptionAlgorithm 		::= EncryptionAlgorithm

ChosenIntegrityProtectionAlgorithm 	::= IntegrityProtectionAlgorithm

CI					::= OCTET STRING (SIZE (2))

ClassmarkInformation2			::= OCTET STRING

ClassmarkInformation3			::= OCTET STRING

CN-DomainIndicator ::= ENUMERATED {
	cs-domain,
	ps-domain
}

CN-ID	::= INTEGER (0..4095)

Correlation-ID	::= OCTET STRING (SIZE (4))

CSFB-Information ::= ENUMERATED {
	csfb,
	csfb-high-priority,
	...
}

CSG-Id		::= BIT STRING (SIZE (27))

CSG-Id-List ::= SEQUENCE (SIZE (1..maxNrOfCSGs)) OF
	CSG-Id

CSG-Membership-Status ::= ENUMERATED { 
	member, 
	non-member,
	...
}

-- D

DataPDUType		::=	ENUMERATED {
	pDUtype0,
	pDUtype1,
	...
}

DataVolumeReference	::= INTEGER (0..255)

DataVolumeReportingIndication ::= ENUMERATED {
	do-report,
	do-not-report
}

DCH-ID ::= INTEGER (0..255)

DeliveryOfErroneousSDU ::= ENUMERATED {
	yes,
	no,
	no-error-detection-consideration
}

DeliveryOrder::= ENUMERATED {
	delivery-order-requested,
	delivery-order-not-requested
}

DeltaRAListofIdleModeUEs ::= SEQUENCE {
	newRAListofIdleModeUEs		NewRAListofIdleModeUEs	OPTIONAL,
	rAListwithNoIdleModeUEsAnyMore	RAListwithNoIdleModeUEsAnyMore	OPTIONAL,
	iE-Extensions			IE-Extensions			OPTIONAL
}

NewRAListofIdleModeUEs ::= SEQUENCE (SIZE (1..maxMBMSRA)) OF
	RAC

RAListwithNoIdleModeUEsAnyMore ::= SEQUENCE (SIZE (1..maxMBMSRA)) OF
	RAC

ForwardingIndication::=ENUMERATED{
	forwarding-admitted,
	...
}

DL-GTP-PDU-SequenceNumber		::= INTEGER (0..65535)

DL-N-PDU-SequenceNumber 		::= INTEGER (0..65535)

D-RNTI					::= INTEGER (0..1048575)

DRX-CycleLengthCoefficient		::= INTEGER (6..9)

DSCH-ID ::= INTEGER (0..255)


-- E

EARFCN-Extended		::= INTEGER (65536..262143, ...)

E-DCH-MAC-d-Flow-ID	::= INTEGER (0.. maxNrOfEDCHMACdFlows-1)

ENB-ID ::= CHOICE {
	macroENB-ID	BIT STRING (SIZE(20)),
	homeENB-ID	BIT STRING (SIZE(28)),
	...
}

EncryptionAlgorithm ::= INTEGER { no-encryption (0), standard-UMTS-encryption-algorith-UEA1 (1), standard-UMTS-encryption-algorithm-UEA2 (2) } (0..15)

EncryptionInformation ::= SEQUENCE {
	permittedAlgorithms	PermittedEncryptionAlgorithms,
	key			EncryptionKey,
	iE-Extensions		IE-Extensions			OPTIONAL
}

EncryptionKey ::= BIT STRING (SIZE (128))
-- Reference: 33.102

End-Of-CSFB ::= ENUMERATED{
	end-of-CSFB,
	...
}

EquipmentsToBeTraced ::= CHOICE {
	iMEIlist	IMEIList,
	iMEISVlist	IMEISVList,
	iMEIgroup	IMEIGroup,
	iMEISVgroup	IMEISVGroup,
	...
}

E-UTRAN-Service-Handover ::= ENUMERATED {
	handover-to-E-UTRAN-shall-not-be-performed,
	...
}

Event ::= ENUMERATED {
	stop-change-of-service-area,
	direct,
	change-of-servicearea,
	...,
	stop-direct,
	periodic,
	stop-periodic
}

Event1F-Parameters ::= SEQUENCE {
	measurementQuantity	MeasurementQuantity,
	threshold		INTEGER(-120..165),
	...
}

Event1I-Parameters ::= SEQUENCE {
	threshold	INTEGER(-120..-25),
	...
}

ExtendedGuaranteedBitrate	::= INTEGER (16000001..256000000)
-- Unit is bits per sec

ExtendedMaxBitrate		::= INTEGER (16000001..256000000)
-- Unit is bits per sec

ExtendedRNC-ID			::= INTEGER (4096..65535)

-- F

FrameSequenceNumber		::=	INTEGER(0..15)

FrequenceLayerConvergenceFlag ::= ENUMERATED {
	no-FLC-flag,
	...
}

-- G

GANSS-PositioningDataSet ::= SEQUENCE(SIZE(1..maxGANSSSet)) OF GANSS-PositioningMethodAndUsage

GANSS-PositioningMethodAndUsage ::= OCTET STRING (SIZE(1))

GeographicalArea ::= CHOICE {
	point				GA-Point,
	pointWithUnCertainty		GA-PointWithUnCertainty,
	polygon				GA-Polygon,
	...,
	pointWithUncertaintyEllipse	GA-PointWithUnCertaintyEllipse,
	pointWithAltitude		GA-PointWithAltitude,
	pointWithAltitudeAndUncertaintyEllipsoid		GA-PointWithAltitudeAndUncertaintyEllipsoid,
	ellipsoidArc			GA-EllipsoidArc
}

GeographicalCoordinates ::= SEQUENCE {
	latitudeSign	ENUMERATED { north, south },
	latitude	INTEGER (0..8388607),
	longitude	INTEGER (-8388608..8388607),
	iE-Extensions	IE-Extensions			OPTIONAL,
	...
}

GA-AltitudeAndDirection ::= SEQUENCE {
	directionOfAltitude	ENUMERATED {height, depth},
	altitude		INTEGER (0..32767),
	...
}

GA-EllipsoidArc ::= SEQUENCE {
	geographicalCoordinates	GeographicalCoordinates,
	innerRadius		INTEGER (0..65535),
	uncertaintyRadius	INTEGER (0..127),
	offsetAngle		INTEGER (0..179),
	includedAngle		INTEGER(0..179),
	confidence		INTEGER (0..127),
	iE-Extensions		IE-Extensions			OPTIONAL,
	...
}

GA-Point ::= SEQUENCE {
	geographicalCoordinates	GeographicalCoordinates,
	iE-Extensions		IE-Extensions			OPTIONAL,
	...
}

GA-PointWithAltitude ::= SEQUENCE {
	geographicalCoordinates	GeographicalCoordinates,
	altitudeAndDirection	GA-AltitudeAndDirection,
	iE-Extensions		IE-Extensions			OPTIONAL,
	...
}

GA-PointWithAltitudeAndUncertaintyEllipsoid ::= SEQUENCE {
	geographicalCoordinates	GeographicalCoordinates,
	altitudeAndDirection	GA-AltitudeAndDirection,
	uncertaintyEllipse	GA-UncertaintyEllipse,
	uncertaintyAltitude	INTEGER (0..127),
	confidence		INTEGER (0..127),
	iE-Extensions		IE-Extensions			OPTIONAL,
	...
}

GA-PointWithUnCertainty ::=SEQUENCE {
	geographicalCoordinates	GeographicalCoordinates,
	iE-Extensions		IE-Extensions			OPTIONAL,
	uncertaintyCode		INTEGER (0..127)
}

GA-PointWithUnCertaintyEllipse ::= SEQUENCE {
	geographicalCoordinates	GeographicalCoordinates,
	uncertaintyEllipse	GA-UncertaintyEllipse,
	confidence		INTEGER (0..127),
	iE-Extensions		IE-Extensions			OPTIONAL,
	...
}

GA-Polygon ::= SEQUENCE (SIZE (1..maxNrOfPoints)) OF
	SEQUENCE {
		geographicalCoordinates	GeographicalCoordinates,
		iE-Extensions		IE-Extensions			OPTIONAL,
		...
	}

GA-UncertaintyEllipse ::= SEQUENCE {
	uncertaintySemi-major	INTEGER (0..127),
	uncertaintySemi-minor	INTEGER (0..127),
	orientationOfMajorAxis	INTEGER (0..179), 	-- The values 90..179 shall not be used.
	...
}

GERAN-BSC-Container				::= OCTET STRING
	-- GERAN BSC Container as defined in TS 48.008 [11] --


GERAN-Cell-ID ::= SEQUENCE {
	lAI		LAI,
	rAC		RAC,
	cI		CI,
	iE-Extensions	IE-Extensions			OPTIONAL
}

GERAN-Classmark	 				::= OCTET STRING
	-- GERAN Classmark as defined in TS 48.008 [11] --

GlobalCN-ID ::= SEQUENCE {
	pLMNidentity	PLMNidentity,
	cN-ID		CN-ID
}


GlobalRNC-ID ::= SEQUENCE {
	pLMNidentity	PLMNidentity,
	rNC-ID		RNC-ID
}

GTP-TEI	::= OCTET STRING (SIZE (4))

GuaranteedBitrate ::= INTEGER (0..16000000)
-- Unit is bits per sec

-- H

HigherBitratesThan16MbpsFlag ::= ENUMERATED{
	allowed,
	not-allowed,
	...
}

HS-DSCH-MAC-d-Flow-ID	::= INTEGER (0.. maxNrOfHSDSCHMACdFlows-1)

-- I


IMEI	::= OCTET STRING (SIZE (8))
-- Reference: 23.003

IMEIGroup	::= SEQUENCE {
	iMEI		IMEI,
	iMEIMask	BIT STRING (SIZE (7)),
	iE-Extensions	IE-Extensions			OPTIONAL
}

IMEIList	::= SEQUENCE (SIZE (1..maxNrOfUEsToBeTraced)) OF IMEI

IMEISV		::= OCTET STRING (SIZE (8))
-- Reference: 23.003

IMEISVGroup	::= SEQUENCE {
	iMEISV		IMEISV,
	iMEISVMask	BIT STRING (SIZE (7)),
	iE-Extensions	IE-Extensions			OPTIONAL
}

IMEISVList	::= SEQUENCE (SIZE (1..maxNrOfUEsToBeTraced)) OF IMEISV

ImmediateMDT	::= SEQUENCE {
	measurementsToActivate	MeasurementsToActivate,
	m1report		M1Report				OPTIONAL,
	-- Included in case of event-triggered reporting for measurement M1
	m2report		M2Report				OPTIONAL,
	-- Included in case of event-triggered reporting for measurement M2
	...,
	iE-Extensions		IE-Extensions			OPTIONAL
}

IMSI	::= TBCD-STRING (SIZE (3..8))
-- Reference: 23.003

IncludeVelocity		::= ENUMERATED {
	requested
}

InformationExchangeID ::= INTEGER (0.. 1048575)

InformationExchangeType ::= ENUMERATED {
	transfer,
	request,
	...
}

InformationRequested ::= CHOICE {
	requestedMBMSIPMulticastAddressandAPNRequest	RequestedMBMSIPMulticastAddressandAPNRequest,
	requestedMulticastServiceList			RequestedMulticastServiceList,
	...
}


InformationRequestType ::= CHOICE {
	mBMSIPMulticastAddressandAPNRequest		MBMSIPMulticastAddressandAPNRequest,
	permanentNAS-UE-ID				PermanentNAS-UE-ID,
	...
}

InformationTransferID ::= INTEGER (0.. 1048575)

InformationTransferType ::= CHOICE {
	rNCTraceInformation			RNCTraceInformation,
	...
}

IntegrityProtectionAlgorithm		::= INTEGER {
	standard-UMTS-integrity-algorithm-UIA1 (0), standard-UMTS-integrity-algorithm-UIA2 (1),
	no-value (15)
} (0..15)

IntegrityProtectionInformation ::= SEQUENCE {
	permittedAlgorithms		PermittedIntegrityProtectionAlgorithms,
	key				IntegrityProtectionKey,
	iE-Extensions			IE-Extensions			OPTIONAL
}

IntegrityProtectionKey			::= BIT STRING (SIZE (128))

InterSystemInformationTransferType ::= CHOICE {
	rIM-Transfer			RIM-Transfer,
	...
}

InterSystemInformation-TransparentContainer ::= SEQUENCE {
	downlinkCellLoadInformation	CellLoadInformation		OPTIONAL,
	uplinkCellLoadInformation	CellLoadInformation		OPTIONAL,
	iE-Extensions			IE-Extensions 			OPTIONAL,
	...
}

IPMulticastAddress ::= OCTET STRING (SIZE (4..16))
-- Reference: 23.003

IuSignallingConnectionIdentifier	::= BIT STRING (SIZE (24))

IuTransportAssociation ::= CHOICE {
	gTP-TEI				GTP-TEI,
	bindingID			BindingID,
	...
}

-- J
-- K

KeyStatus	::= ENUMERATED {
	old,
	new,
	...
}
-- L

LA-LIST ::= SEQUENCE (SIZE (1..maxNrOfLAs)) OF
	SEQUENCE {
		lAC			LAC,
		listOF-SNAs		ListOF-SNAs,
		iE-Extensions		IE-Extensions 			OPTIONAL,
		...
	}

LAC					::= OCTET STRING (SIZE (2))

LAI ::= SEQUENCE {
	pLMNidentity			PLMNidentity,
	lAC				LAC,
	iE-Extensions			IE-Extensions 			OPTIONAL
}

LastKnownServiceArea	::= SEQUENCE {
	sAI		SAI,
	ageOfSAI	INTEGER (0..32767),
	iE-Extensions	IE-Extensions 			OPTIONAL,
	...
}

LastVisitedUTRANCell-Item ::= SEQUENCE {
	uTRAN-CellID		UTRAN-CellID,
	cellType		CellType,
	time-UE-StayedInCell	Time-UE-StayedInCell,
	iE-Extensions		IE-Extensions 			OPTIONAL,
	...
}

LHN-ID ::= OCTET STRING (SIZE (32..256))

Links-to-log ::= ENUMERATED {uplink, downlink, both-uplink-and-downlink, ...}

ListOF-SNAs ::= SEQUENCE (SIZE (1..maxNrOfSNAs)) OF SNAC

ListOfInterfacesToTrace ::= SEQUENCE (SIZE (1..maxNrOfInterfaces)) OF InterfacesToTraceItem

InterfacesToTraceItem ::= SEQUENCE {
	interface	ENUMERATED {iu-cs, iu-ps, iur, iub, uu, ...},
	iE-Extensions	IE-Extensions 			OPTIONAL,
	...
}

LoadValue	::= INTEGER (0..100)

LocationRelatedDataRequestType	::= SEQUENCE {
	requestedLocationRelatedDataType	RequestedLocationRelatedDataType,
	requestedGPSAssistanceData		RequestedGPSAssistanceData	OPTIONAL,
	-- This IE shall be present if the Requested Location Related Data Type IE is set to ‘Dedicated Assistance Data for Assisted GPS’ or
	-- `Dedicated Assistance Data for Assisted GPS and GANSS’
	...
}

LocationRelatedDataRequestTypeSpecificToGERANIuMode	::= ENUMERATED {
	decipheringKeysEOTD,
	dedicatedMobileAssistedEOTDAssistanceData,
	dedicatedMobileBasedEOTDAssistanceData,
	...
}

LocationReportingTransferInformation	::=	SEQUENCE {
	reportChangeOfSAI		ReportChangeOfSAI		OPTIONAL,
	periodicReportingIndicator	PeriodicReportingIndicator	OPTIONAL,
	directReportingIndicator	DirectReportingIndicator	OPTIONAL,
	verticalAccuracyCode		VerticalAccuracyCode		OPTIONAL,
	positioningPriorityChangeSAI	PositioningPriority		OPTIONAL,
	positioningPriorityDirect	PositioningPriority		OPTIONAL,
	clientTypePeriodic		ClientType			OPTIONAL,
	clientTypeDirect		ClientType			OPTIONAL,
	responseTime			ResponseTime			OPTIONAL,
	includeVelocity			IncludeVelocity			OPTIONAL,
	periodicLocationInfo		PeriodicLocationInfo		OPTIONAL,
	iE-Extensions			IE-Extensions 			OPTIONAL,
	...
}

ReportChangeOfSAI ::=	ENUMERATED {
	requested,
	...
}

PeriodicReportingIndicator ::=	ENUMERATED {
	periodicSAI,
	periodicGeo,
	...
}

DirectReportingIndicator ::=	ENUMERATED {
	directSAI,
	directGeo,
	...
}

L3-Information	::= OCTET STRING

-- M

M1Report	::= CHOICE {
	periodic			MDT-Report-Parameters,
	event1F				Event1F-Parameters,
	...
}

M2Report	::= CHOICE {
	periodic			MDT-Report-Parameters,
	event1I				Event1I-Parameters,
	...
}

M4Report	::= CHOICE {
	all				NULL,
	m4-collection-parameters	M4-Collection-Parameters,
	...
}

M4-Collection-Parameters ::= SEQUENCE {
	m4-period	M4-Period,
	m4-threshold	M4-Threshold	OPTIONAL,
	iE-Extensions	IE-Extensions 	OPTIONAL,
	...
}

M4-Period  ::= ENUMERATED {ms100, ms250, ms500, ms1000, ms2000, ms3000, ms4000, ms6000, ...}


M4-Threshold ::= INTEGER (0..31)


M5Report	::= CHOICE {
	when-available	NULL,
	m5-period	M5-Period,
	...
}
M5-Period ::= ENUMERATED {ms100, ms250, ms500, ms1000, ms2000, ms3000, ms4000, ms6000, ...}



M6Report ::= SEQUENCE {
	m6-period	M6-Period,
	m6-links-to-log	Links-to-log,
	iE-Extensions	IE-Extensions 	OPTIONAL,
	...
}

M6-Period ::= ENUMERATED {ms1000, ms2000, ms3000, ms4000, ms6000, ms8000, ms12000, ms16000, ms20000, ms24000, ms28000, ms32000, ms64000, ...}

M7Report ::= SEQUENCE {
	m7-period	M7-Period,
	m7-links-to-log	Links-to-log,
	iE-Extensions	IE-Extensions 	OPTIONAL,
	...
}

M7-Period ::= ENUMERATED {ms1000, ms2000, ms3000, ms4000, ms6000, ms8000, ms12000, ms16000, ms20000, ms24000, ms28000, ms32000, ms64000, ...}

Management-Based-MDT-Allowed ::= ENUMERATED { 
	allowed, ... }

MaxBitrate				::= INTEGER (1..16000000)
-- Unit is bits per sec

MaxSDU-Size				::= INTEGER (0..32768)
-- MaxSDU-Size
-- Unit isBIT STRING (SIZE (8))

MBMS-PTP-RAB-ID ::= BIT STRING (SIZE (8))

MBMSBearerServiceType ::= ENUMERATED {
	multicast,
	broadcast,
	...
}

MBMSCNDe-Registration ::= ENUMERATED {
	normalsessionstop,
	deregister,
	...
}


MBMSCountingInformation ::= ENUMERATED {
	counting,
	notcounting,
	...
}

MBMSHCIndicator ::= ENUMERATED {
	uncompressed-header,
	compressed-header,
	...
}

MBMSIPMulticastAddressandAPNRequest ::= SEQUENCE (SIZE (1..maxnoofMulticastServicesPerRNC)) OF
	TMGI

MBMSLinkingInformation ::= ENUMERATED {
	uE-has-joined-multicast-services,
	...
}

MBMSRegistrationRequestType ::= ENUMERATED {
	register,
	deregister,
	...
}

MBMSServiceArea ::= OCTET STRING

MBMSSessionDuration ::= OCTET STRING (SIZE (3))



MBMSSessionIdentity ::= OCTET STRING (SIZE (1))

MBMSSessionRepetitionNumber ::= OCTET STRING (SIZE (1))

MDT-Activation	::= ENUMERATED {
	immediateMDTonly,
	loggedMDTonly,
	immediateMDTandTrace,
	...
}

MDTAreaScope ::= CHOICE {
	cellbased	CellBased,
	labased		LABased,
	rabased		RABased,
	plmn-area-based	NULL,
	...
}

MDT-Configuration	::= SEQUENCE {
	mdtActivation		MDT-Activation,
	mdtAreaScope		MDTAreaScope,
	mdtMode			MDTMode,
	iE-Extensions		IE-Extensions 	OPTIONAL,
	...
}

MDTMode	::= CHOICE {
	immediateMDT		ImmediateMDT,
	loggedMDT		LoggedMDT,
	...
}

MDT-PLMN-List ::= SEQUENCE (SIZE (1..maxnoofMDTPLMNs)) OF PLMNidentity

MDT-Report-Parameters ::= SEQUENCE {
	reportInterval	ReportInterval,
	reportAmount	ReportAmount,
	...
}

MeasurementQuantity ::= ENUMERATED {
	cpichEcNo,
	cpichRSCP,
	pathloss,
	...
}

MeasurementsToActivate::= BIT STRING (SIZE (8))

MSISDN ::= OCTET STRING (SIZE (1..9))

-- N


NAS-PDU				::= OCTET STRING

NAS-SequenceNumber		::= BIT STRING (SIZE (2))
-- Reference: 24.008

NAS-SynchronisationIndicator	::= BIT STRING (SIZE (4))

NewBSS-To-OldBSS-Information	::= OCTET STRING

NonSearchingIndication ::= ENUMERATED {
	non-searching,
	searching
}

NRTLoadInformationValue	::= INTEGER (0..3)

NumberOfIuInstances	::= INTEGER (1..2)

NumberOfSteps		::= INTEGER (1..16)

-- O

Offload-RAB-Parameters ::= SEQUENCE {
	accessPointName			Offload-RAB-Parameters-APN,
	chargingCharacteristics		Offload-RAB-Parameters-ChargingCharacteristics,
	iE-Extensions			IE-Extensions 	OPTIONAL,
	...
}

Offload-RAB-Parameters-APN ::= OCTET STRING (SIZE (1..255))

Offload-RAB-Parameters-ChargingCharacteristics ::= OCTET STRING (SIZE (2))

OldBSS-ToNewBSS-Information		::= OCTET STRING

OMC-ID					::= OCTET STRING (SIZE (3..22))
-- Reference: GSM TS 12.20 [25]

Out-Of-UTRAN ::= ENUMERATED{
	cell-reselection-to-EUTRAN,
	...
}

-- P

PagingAreaID ::= CHOICE {
	lAI				LAI,
	rAI				RAI,
	...
}

PagingCause ::= ENUMERATED {
	terminating-conversational-call,
	terminating-streaming-call,
	terminating-interactive-call,
	terminating-background-call,
	terminating-low-priority-signalling,
	...,
	terminating-high-priority-signalling
}

PDP-TypeInformation ::= SEQUENCE (SIZE (1..maxNrOfPDPDirections)) OF
	PDP-Type

PDP-Type ::= ENUMERATED {
	empty,
	ppp,
	osp-ihoss	-- this value shall not be used -- ,
	ipv4,
	ipv6,
	...
}

PDP-TypeInformation-extension ::= SEQUENCE (SIZE (1..maxNrOfPDPDirections)) OF
	PDP-Type-extension

PDP-Type-extension ::= ENUMERATED {
	ipv4-and-ipv6,
	...
}

PDUType14FrameSequenceNumber		::=	INTEGER(0..3)

PeriodicLocationInfo ::= SEQUENCE {
	reportingAmount		INTEGER (1..8639999, ...),
	reportingInterval	INTEGER (1..8639999, ...),
	iE-Extensions		IE-Extensions 	OPTIONAL,
	...
}

PermanentNAS-UE-ID ::= CHOICE {
	iMSI			IMSI,
	...
}

PermittedEncryptionAlgorithms ::= SEQUENCE (SIZE (1..16)) OF
	EncryptionAlgorithm

PermittedIntegrityProtectionAlgorithms ::= SEQUENCE (SIZE (1..16)) OF
	IntegrityProtectionAlgorithm

LABased	::= SEQUENCE {
	laiList			LAI-List,
	iE-Extensions		IE-Extensions 	OPTIONAL,
	...
}

LAI-List	::= SEQUENCE (SIZE (1..maxNrOfLAIs)) OF
	LAI



LoggedMDT	::=	SEQUENCE {
	loggingInterval		LoggingInterval,
	loggingDuration		LoggingDuration,
	iE-Extensions		IE-Extensions 	OPTIONAL,
	...
}

LoggingInterval	::=	ENUMERATED {
	s1d28,
	s2d56,
	s5d12,
	s10d24,
	s20d48,
	s30d72,
	s40d96,
	s61d44,
	...
	}

LoggingDuration	::=	ENUMERATED {
		min10,
		min20,
		min40,
		min60,
		min90,
		min120,
...}



PLMNidentity 				::= TBCD-STRING (SIZE (3))

PLMNs-in-shared-network ::= SEQUENCE (SIZE (1..maxNrOfPLMNsSN)) OF
	SEQUENCE {
		pLMNidentity	PLMNidentity,
		lA-LIST		LA-LIST,
		iE-Extensions	IE-Extensions 	OPTIONAL,
		...
	}

Port-Number ::= OCTET STRING (SIZE (2))

PositioningDataDiscriminator ::= BIT STRING (SIZE(4))

PositioningDataSet ::= SEQUENCE(SIZE(1..maxSet)) OF PositioningMethodAndUsage

PositioningMethodAndUsage ::= OCTET STRING (SIZE(1))

PositioningPriority	::= ENUMERATED {
	high-Priority,
	normal-Priority,
...
}

PositionData ::= SEQUENCE {
	positioningDataDiscriminator	PositioningDataDiscriminator,
	positioningDataSet		PositioningDataSet			OPTIONAL,
-- This IE shall be present if the PositioningDataDiscriminator IE is set to the value "0000" --
	iE-Extensions			IE-Extensions 	OPTIONAL,
	...
}

PositionDataSpecificToGERANIuMode ::= OCTET STRING

Pre-emptionCapability ::= ENUMERATED {
	shall-not-trigger-pre-emption,
	may-trigger-pre-emption
}

Pre-emptionVulnerability ::= ENUMERATED {
	not-pre-emptable,
	pre-emptable
}

PriorityLevel	::= INTEGER { spare (0), highest (1), lowest (14), no-priority (15) } (0..15)

Priority-Class-Indicator ::= BIT STRING (SIZE(8))

ProvidedData ::= CHOICE {
	shared-network-information	Shared-Network-Information,
	...
}

P-TMSI	::= OCTET STRING (SIZE (4))

-- Q

QueuingAllowed ::= ENUMERATED {
	queueing-not-allowed,
	queueing-allowed
}

-- R
RAB-AsymmetryIndicator::= ENUMERATED {
	symmetric-bidirectional,
	asymmetric-unidirectional-downlink,
	asymmetric-unidirectional-uplink,
	asymmetric-bidirectional,
	...
}

RABased	::= SEQUENCE {
	raiList		RAI-List,
	iE-Extensions	IE-Extensions 	OPTIONAL,
	...
}

RAI-List	::= SEQUENCE (SIZE (1..maxNrOfRAIs)) OF
	RAI

RABDataVolumeReport ::= SEQUENCE (SIZE (1..maxNrOfVol)) OF
	SEQUENCE {
		dl-UnsuccessfullyTransmittedDataVolume	UnsuccessfullyTransmittedDataVolume,
		dataVolumeReference			DataVolumeReference	OPTIONAL,
		iE-Extensions				IE-Extensions 		OPTIONAL,
		...
	}

RAB-ID	::= BIT STRING (SIZE (8))

RAB-Parameter-ExtendedGuaranteedBitrateList	::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF ExtendedGuaranteedBitrate

RAB-Parameter-ExtendedMaxBitrateList		::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF ExtendedMaxBitrate


RAB-Parameter-GuaranteedBitrateList	::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF GuaranteedBitrate
--This IE shall be ignored if Supported Guaranteed Bit rate is present--

RAB-Parameter-MaxBitrateList		::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF MaxBitrate
--This IE shall be ignored if Supported Maximum Bit rate is present--

RAB-Parameters ::= SEQUENCE {
	trafficClass			TrafficClass,
	rAB-AsymmetryIndicator		RAB-AsymmetryIndicator,
	maxBitrate			RAB-Parameter-MaxBitrateList,
	guaranteedBitRate		RAB-Parameter-GuaranteedBitrateList OPTIONAL
	-- This IE shall be present the traffic class IE is set to "Conversational" or "Streaming" --,
	deliveryOrder			DeliveryOrder,
	maxSDU-Size			MaxSDU-Size,
	sDU-Parameters			SDU-Parameters,
	transferDelay			TransferDelay OPTIONAL
	-- This IE shall be present the traffic class IE is set to "Conversational" or "Streaming" --,
	trafficHandlingPriority		TrafficHandlingPriority OPTIONAL
	-- This IE shall be present the traffic class IE is set to "Interactive" --,
	allocationOrRetentionPriority	AllocationOrRetentionPriority OPTIONAL,
	sourceStatisticsDescriptor	SourceStatisticsDescriptor OPTIONAL
	-- This IE shall be present the traffic class IE is set to "Conversational" or "Streaming" --,
	relocationRequirement	RelocationRequirement OPTIONAL,
	iE-Extensions			IE-Extensions OPTIONAL,
	...
}

RABParametersList	::=	SEQUENCE (SIZE (1.. maxNrOfRABs)) OF SEQUENCE	{
	rab-Id			RAB-ID,
	cn-domain		CN-DomainIndicator,
	rabDataVolumeReport	RABDataVolumeReport	OPTIONAL,
	upInformation		UPInformation	OPTIONAL,
	iE-Extensions		IE-Extensions OPTIONAL,
	...
}

RAB-SubflowCombinationBitRate 	::= INTEGER (0..16000000)

RAB-TrCH-Mapping ::=	SEQUENCE ( SIZE (1..maxNrOfRABs)) OF
	RAB-TrCH-MappingItem

RAB-TrCH-MappingItem ::= SEQUENCE {
	rAB-ID		RAB-ID,
	trCH-ID-List	TrCH-ID-List,
	iE-Extensions	IE-Extensions OPTIONAL,
	...
}

RAC ::= OCTET STRING (SIZE (1))

RAI ::= SEQUENCE {
	lAI		LAI,
	rAC		RAC,
	iE-Extensions	IE-Extensions OPTIONAL,
	...
}

RAListofIdleModeUEs ::= CHOICE {
	notEmptyRAListofIdleModeUEs	NotEmptyRAListofIdleModeUEs,
	emptyFullRAListofIdleModeUEs	ENUMERATED {emptylist,fulllist,...},
	...
}

NotEmptyRAListofIdleModeUEs ::= SEQUENCE {
	rAofIdleModeUEs	RAofIdleModeUEs,
	iE-Extensions	IE-Extensions OPTIONAL
}

RAofIdleModeUEs ::= SEQUENCE (SIZE (1..maxMBMSRA)) OF
	RAC

LAListofIdleModeUEs ::= SEQUENCE (SIZE (1..maxMBMSRA)) OF
	LAI

RAT-Type ::= ENUMERATED {
	utran,
	geran,
	...
}

RateControlAllowed ::= ENUMERATED {
	not-allowed,
	allowed
}

RedirectAttemptFlag 	::= NULL

RedirectionCompleted	::= ENUMERATED {
	redirection-completed,
	...
}

RejectCauseValue ::= ENUMERATED {
	pLMN-Not-Allowed,
	location-Area-Not-Allowed,
	roaming-Not-Allowed-In-This-Location-Area,
	no-Suitable-Cell-In-Location-Area,
	gPRS-Services-Not-Allowed-In-This-PLMN,
	cS-PS-coordination-required,
	...,
	network-failure,
	not-authorized-for-this-CSG
}


RelocationRequirement ::= ENUMERATED {
	lossless,
	none,
	...,
	realtime
}

RelocationType ::= ENUMERATED {
	ue-not-involved,
	ue-involved,
	...
}

RepetitionNumber0 ::= INTEGER (0..255)

RepetitionNumber1 ::= INTEGER (1..256)


ReportArea ::= ENUMERATED {
	service-area,
	geographical-area,
	...
}

ReportInterval		::=	ENUMERATED {
	ms250,
	ms500,
	ms1000,
	ms2000,
	ms3000,
	ms4000,
	ms6000,
	ms12000,
	ms16000,
	ms20000,
	ms24000,
	ms32000,
	ms64000,
	...,
	ms8000,
	ms28000
}

ReportAmount		::=	ENUMERATED { n1, n2, n4, n8, n16, n32, n64, infinity, ... }

RequestedGPSAssistanceData 	::= OCTET STRING (SIZE (1 .. 38 ))
	-- gpsAssistanceData as defined in 24.080 --

RequestedGANSSAssistanceData 	::= OCTET STRING (SIZE (1 .. 201 ))
	-- ganssAssistanceData as defined in 24.080 --

RequestedLocationRelatedDataType ::= ENUMERATED {
	decipheringKeysUEBasedOTDOA,
	decipheringKeysAssistedGPS,
	dedicatedAssistanceDataUEBasedOTDOA,
	dedicatedAssistanceDataAssistedGPS,
	...,
-- Release 7 extension elements --
	decipheringKeysAssistedGANSS,
	dedicatedAssistanceDataAssistedGANSS,
	decipheringKeysAssistedGPSandGANSS,
	dedicatedAssistanceDataAssistedGPSandGANSS
}

RequestedMBMSIPMulticastAddressandAPNRequest ::= SEQUENCE (SIZE (1..maxnoofMulticastServicesPerRNC)) OF
	MBMSIPMulticastAddressandAPNlist

MBMSIPMulticastAddressandAPNlist ::= SEQUENCE {
	tMGI			TMGI,
	iPMulticastAddress	IPMulticastAddress,
	aPN			APN,
	iE-Extensions		IE-Extensions OPTIONAL,
	...
}

RequestedMulticastServiceList ::= SEQUENCE (SIZE (1.. maxnoofMulticastServicesPerUE)) OF
	TMGI

Requested-RAB-Parameter-Values ::= SEQUENCE {
	requestedMaxBitrates		Requested-RAB-Parameter-MaxBitrateList			OPTIONAL,
	requestedGuaranteedBitrates	Requested-RAB-Parameter-GuaranteedBitrateList			OPTIONAL,
	iE-Extensions			IE-Extensions OPTIONAL,
	...
}

Requested-RAB-Parameter-ExtendedMaxBitrateList ::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF ExtendedMaxBitrate

Requested-RAB-Parameter-ExtendedGuaranteedBitrateList	::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF ExtendedGuaranteedBitrate

Requested-RAB-Parameter-MaxBitrateList ::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF MaxBitrate

Requested-RAB-Parameter-GuaranteedBitrateList	::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF GuaranteedBitrate


RequestType ::= SEQUENCE {
	event		Event,
	reportArea	ReportArea,
	accuracyCode	INTEGER (0..127)	OPTIONAL,
	...
}

ResidualBitErrorRatio ::= SEQUENCE {
	mantissa	INTEGER (1..9),
	exponent	INTEGER (1..8),
	iE-Extensions	IE-Extensions OPTIONAL
}
-- ResidualBitErrorRatio = mantissa * 10^-exponent

ResponseTime	::= ENUMERATED {
	lowdelay,
	delaytolerant,
	...
}

RIMInformation	::= OCTET STRING

RIM-Transfer ::= SEQUENCE {
	rIMInformation		RIMInformation,
	rIMRoutingAddress	RIMRoutingAddress	OPTIONAL,
	iE-Extensions		IE-Extensions OPTIONAL
}

RIMRoutingAddress ::= CHOICE {
	targetRNC-ID		TargetRNC-ID,
	gERAN-Cell-ID		GERAN-Cell-ID,
	... ,
	targeteNB-ID		TargetENB-ID
}


RNC-ID	::= INTEGER (0..4095)
-- RNC-ID					::= BIT STRING (SIZE (12))
-- Harmonized with RNSAP and NBAP definitions


RNCTraceInformation::= SEQUENCE {
	traceReference			TraceReference,
	traceActivationIndicato		ENUMERATED {activated,deactivated},
	equipmentsToBeTraced		EquipmentsToBeTraced						OPTIONAL,
	-- This IE shall be present if the Trace Activation Indicator IE is set to "Activated".
	iE-Extensions			IE-Extensions OPTIONAL
}

RNSAPRelocationParameters ::=	SEQUENCE {
	rabParmetersList	RABParametersList 			OPTIONAL,
	locationReporting	LocationReportingTransferInformation	OPTIONAL,
	traceInformation	TraceInformation 			OPTIONAL,
	sourceSAI		SAI					OPTIONAL,
	iE-Extensions		IE-Extensions OPTIONAL,
	...
}

RRC-Container	::= OCTET STRING

RTLoadValue	::= INTEGER (0..100)

RSRVCC-HO-Indication ::= ENUMERATED {
	ps-only,
	...
}

RSRVCC-Information ::= SEQUENCE {
	nonce		BIT STRING (SIZE (128)),
	iMSInformation	OCTET STRING(SIZE(1.. maxSizeOfIMSInfo)),
	iE-Extensions	IE-Extensions OPTIONAL,
	...

}

RSRVCC-Operation-Possible ::= ENUMERATED {
	rsrvcc-possible,
	...
}

-- S

SAC	::= OCTET STRING (SIZE (2))
SAI ::= SEQUENCE {
	pLMNidentity	PLMNidentity,
	lAC		LAC,
	sAC		SAC,
	iE-Extensions	IE-Extensions OPTIONAL
}

SAPI ::= ENUMERATED {
	sapi-0,
	sapi-3,
	...
}

SessionUpdateID ::= INTEGER (0.. 1048575)
Shared-Network-Information ::= SEQUENCE {
	pLMNs-in-shared-network		PLMNs-in-shared-network,
	iE-Extensions			IE-Extensions OPTIONAL,
	...
}

Session-Re-establishment-Indicator	::= ENUMERATED {true, ...}

SignallingIndication ::= ENUMERATED {
	signalling,
	...
}

SDU-ErrorRatio ::= SEQUENCE {
	mantissa	INTEGER (1..9),
	exponent	INTEGER (1..6),
	iE-Extensions	IE-Extensions OPTIONAL
}
-- SDU-ErrorRatio = mantissa * 10^-exponent

SDU-FormatInformationParameters ::= SEQUENCE (SIZE (1..maxRAB-SubflowCombination)) OF SDU-FormatInformationParameterItem
SDU-FormatInformationParameterItem ::=
	SEQUENCE {
		subflowSDU-Size			SubflowSDU-Size 	OPTIONAL,
		rAB-SubflowCombinationBitRate	RAB-SubflowCombinationBitRate 	OPTIONAL,
		iE-Extensions			IE-Extensions 		OPTIONAL,
		...
	}

SDU-Parameters ::= SEQUENCE (SIZE (1..maxRAB-Subflows)) OF SDU-ParameterItem
SDU-ParameterItem ::=
	SEQUENCE {
		sDU-ErrorRatio			SDU-ErrorRatio OPTIONAL
		-- This IE shall be present if the Delivery Of Erroneous SDU IE is set to "Yes" or "No" --,
		residualBitErrorRatio		ResidualBitErrorRatio,
		deliveryOfErroneousSDU		DeliveryOfErroneousSDU,
		sDU-FormatInformationParameters	SDU-FormatInformationParameters OPTIONAL,
		iE-Extensions			IE-Extensions 		OPTIONAL,
		...
	}

SNA-Access-Information ::= SEQUENCE {
		authorisedPLMNs	AuthorisedPLMNs,
		iE-Extensions	IE-Extensions 		OPTIONAL,
		...
	}

SNAC ::= INTEGER (0..65535)

Service-Handover ::= ENUMERATED {
	handover-to-GSM-should-be-performed,
	handover-to-GSM-should-not-be-performed,
	handover-to-GSM-shall-not-be-performed,
	...
}

Source-ToTarget-TransparentContainer ::= OCTET STRING
-- This IE is a transparent container, the IE shall be encoded not as an OCTET STRING but according to the type specifications of the target system.
-- Note: In the current version of this specification, this IE may either carry the Source RNC to
-- Target RNC Transparent Container or the Source eNB to Target eNB Transparent Container IE as
-- defined in TS 36.413 [49]

SourceeNodeB-ToTargeteNodeB-TransparentContainer ::= OCTET STRING


SourceCellID ::= CHOICE {
	sourceUTRANCellID	SourceUTRANCellID,
	sourceGERANCellID	CGI,
	...
}

SourceBSS-ToTargetBSS-TransparentContainer		::= OCTET STRING

SourceID ::= CHOICE {
	sourceRNC-ID	SourceRNC-ID,
	sAI		SAI,
	...
}


SourceRNC-ID ::= SEQUENCE {
	pLMNidentity	PLMNidentity,
	rNC-ID		RNC-ID,
	iE-Extensions	IE-Extensions 		OPTIONAL
}

SourceRNC-ToTargetRNC-TransparentContainer ::= SEQUENCE {
	rRC-Container			RRC-Container,
	numberOfIuInstances		NumberOfIuInstances,
	relocationType 			RelocationType,
	chosenIntegrityProtectionAlgorithm ChosenIntegrityProtectionAlgorithm	OPTIONAL,
	integrityProtectionKey		IntegrityProtectionKey			OPTIONAL,
	chosenEncryptionAlgorithForSignalling ChosenEncryptionAlgorithm		OPTIONAL,
	cipheringKey			EncryptionKey				OPTIONAL,
	chosenEncryptionAlgorithForCS	ChosenEncryptionAlgorithm		OPTIONAL,
	chosenEncryptionAlgorithForPS	ChosenEncryptionAlgorithm		OPTIONAL,
	d-RNTI				D-RNTI 					OPTIONAL
	-- This IE shall be present if the Relocation type IE is set to "UE not involved in relocation of SRNS" --,
	targetCellId			TargetCellId				OPTIONAL
	-- This IE shall be present if the Relocation type IE is set to "UE involved in relocation of SRNS" --,
	rAB-TrCH-Mapping		RAB-TrCH-Mapping			OPTIONAL,
	iE-Extensions			IE-Extensions 				OPTIONAL,
	...
}

IRAT-Measurement-Configuration ::= SEQUENCE {
	rSRP				INTEGER (0..97)			OPTIONAL,
	rSRQ				INTEGER (0..34)			OPTIONAL,
	iRATmeasurementParameters	IRATmeasurementParameters,
	iE-Extensions			IE-Extensions OPTIONAL}

IRATmeasurementParameters::= SEQUENCE {
	measurementDuration	INTEGER (1..100),
	eUTRANFrequencies	EUTRANFrequencies		OPTIONAL,
	iE-Extensions		IE-Extensions OPTIONAL}

RSRQ-Type ::= SEQUENCE {
	allSymbols		BOOLEAN,
	wideBand		BOOLEAN
}

RSRQ-Extension ::= INTEGER (-30..46, ...)

EUTRANFrequencies ::= SEQUENCE (SIZE (1..maxNrOfEUTRAFreqs)) OF SEQUENCE {
	earfcn			INTEGER (0..65535),
	measBand		MeasBand			OPTIONAL,
	iE-Extensions		IE-Extensions OPTIONAL}

MeasBand ::= ENUMERATED {
	v6,
	v15,
	v25,
	v50,
	v75,
	v100
}

SubscriberProfileIDforRFP ::= INTEGER (1..256)

SourceStatisticsDescriptor ::= ENUMERATED {
	speech,
	unknown,
	...
}

SupportedRAB-ParameterBitrateList ::= SEQUENCE (SIZE (1..maxNrOfSeparateTrafficDirections)) OF SupportedBitrate

SupportedBitrate ::= INTEGER (1..1000000000, ...)
-- Unit is bits per sec

SourceUTRANCellID ::= SEQUENCE {
	pLMNidentity	PLMNidentity,
	uTRANcellID	TargetCellId,
	iE-Extensions	IE-Extensions OPTIONAL
}

SRB-ID ::= INTEGER (1..32)

SRB-TrCH-Mapping ::=	SEQUENCE ( SIZE (1..maxNrOfSRBs)) OF
	SRB-TrCH-MappingItem

SRB-TrCH-MappingItem ::= SEQUENCE {
	sRB-ID		SRB-ID,
	trCH-ID		TrCH-ID,
	iE-Extensions	IE-Extensions OPTIONAL,
	...
}


SRVCC-HO-Indication ::= ENUMERATED {
	ps-and-cs,
	cs-only,
	...
}

SRVCC-Information ::= SEQUENCE {
	nonce		BIT STRING (SIZE (128)),
	iE-Extensions	IE-Extensions OPTIONAL,
	...
}

SRVCC-Operation-Possible ::= ENUMERATED {
	srvcc-possible,
	...
}

SubflowSDU-Size				::= INTEGER (0..4095)
-- Unit is bit


-- T
TAC ::= OCTET STRING (SIZE (2))

TAI ::= SEQUENCE {
	pLMNidentity	PLMNidentity,
	tAC		TAC,
	iE-Extensions	IE-Extensions OPTIONAL
}

Target-ToSource-TransparentContainer ::= OCTET STRING
-- This IE is a transparent container, the IE shall be encoded not as an OCTET STRING but according to the type specifications of the target system.
-- Note: In the current version of this specification, this IE may either carry the Target RNC to
-- Source RNC Transparent Container or the Target eNB to Source eNB Transparent Container IE as
-- defined in TS 36.413 [49]

TargeteNodeB-ToSourceeNodeB-TransparentContainer ::= OCTET STRING

TargetBSS-ToSourceBSS-TransparentContainer		::= OCTET STRING

TargetCellId		::= INTEGER (0..268435455)

TargetID ::= CHOICE {
	targetRNC-ID	TargetRNC-ID,
	cGI		CGI,
	
	...,
	targeteNB-ID	TargetENB-ID
}

TargetENB-ID ::= SEQUENCE {
	pLMNidentity	PLMNidentity,
	eNB-ID		ENB-ID,
	iE-Extensions	IE-Extensions	OPTIONAL,
	selectedTAI	TAI,
	...
}

TargetRNC-ID ::= SEQUENCE {
	lAI		LAI,
	rAC		RAC 		OPTIONAL,
	rNC-ID		RNC-ID,
	iE-Extensions	IE-Extensions	OPTIONAL
}

TargetRNC-ToSourceRNC-TransparentContainer ::= SEQUENCE {
	rRC-Container	RRC-Container,
	d-RNTI		D-RNTI 		OPTIONAL
	-- May be included to allow the triggering of the Relocation Detect procedure from the Iur Interface --,
	iE-Extensions	IE-Extensions	OPTIONAL,
	...
}

TBCD-STRING 		::= OCTET STRING

TemporaryUE-ID ::= CHOICE {
	tMSI		TMSI,
	p-TMSI		P-TMSI,
	...
}

Time-UE-StayedInCell ::= INTEGER (0..4095)

Time-UE-StayedInCell-EnhancedGranularity ::= INTEGER (0..40950)

TimeToMBMSDataTransfer	::= OCTET STRING(SIZE(1))

TimingDifferenceULDL	::= OCTET STRING (SIZE(1))

TMGI ::= SEQUENCE {
	pLMNidentity	PLMNidentity,
	serviceID	OCTET STRING (SIZE (3)),
	iE-Extensions	IE-Extensions	OPTIONAL
}

TMSI ::= OCTET STRING (SIZE (4))

TraceDepth ::= ENUMERATED {
	minimum,
	medium,
	maximum,
	...
}

TraceInformation	::= SEQUENCE {
	traceReference			TraceReference,
	ue-identity			UE-ID,
	tracePropagationParameters	TracePropagationParameters OPTIONAL,
	iE-Extensions			IE-Extensions		OPTIONAL,
	...
}

TracePropagationParameters ::= SEQUENCE {
	traceRecordingSessionReference	TraceRecordingSessionReference,
	traceDepth			TraceDepth,
	listOfInterfacesToTrace		ListOfInterfacesToTrace		OPTIONAL,
	iE-Extensions			IE-Extensions		OPTIONAL,
	...
}

TraceRecordingSessionInformation	::= SEQUENCE {
	traceReference			TraceReference,
	traceRecordingSessionReference	TraceRecordingSessionReference,
	iE-Extensions			IE-Extensions		OPTIONAL,
	...
}

TraceRecordingSessionReference		::= INTEGER (0..65535)

TraceReference				::= OCTET STRING (SIZE (2..3))

TraceType				::= OCTET STRING (SIZE (1))
-- Reference: GSM TS 12.08

TrafficClass ::= ENUMERATED {
	conversational,
	streaming,
	interactive,
	background,
	...
}

TrafficHandlingPriority 		::= INTEGER { spare (0), highest (1), lowest (14), no-priority-used (15) } (0..15)

TransferDelay 				::= INTEGER (0..65535)
-- Unit is millisecond

UnsuccessfullyTransmittedDataVolume	::= INTEGER (0..4294967295)

TransportLayerAddress 			::= BIT STRING (SIZE (1..160, ...))

TrCH-ID ::= SEQUENCE {
	dCH-ID		DCH-ID		OPTIONAL,
	dSCH-ID		DSCH-ID		OPTIONAL,
	uSCH-ID		USCH-ID		OPTIONAL,
	iE-Extensions	IE-Extensions	OPTIONAL,
	...
}

TrCH-ID-List ::= SEQUENCE (SIZE (1..maxRAB-Subflows)) OF
	TrCH-ID

TriggerID				::= OCTET STRING (SIZE (3..22))

TunnelInformation ::= SEQUENCE {
	transportLayerAddress	TransportLayerAddress,
	uDP-Port-Number		Port-Number				OPTIONAL,
	iE-Extensions		IE-Extensions				OPTIONAL,
	...
}

TypeOfError ::= ENUMERATED {
	not-understood,
	missing,
	...
}


-- U

UE-AggregateMaximumBitRate ::= SEQUENCE {
	uE-AggregateMaximumBitRateDownlink	UE-AggregateMaximumBitRateDownlink	OPTIONAL,
	uE-AggregateMaximumBitRateUplink	UE-AggregateMaximumBitRateUplink	OPTIONAL,
	...
}

UE-AggregateMaximumBitRateDownlink	::= INTEGER (1..1000000000)
-- Unit is bits per sec

UE-AggregateMaximumBitRateUplink	::= INTEGER (1..1000000000)
-- Unit is bits per sec


UE-History-Information ::= OCTET STRING

UE-ID ::= CHOICE {
	imsi	IMSI,
	imei	IMEI,
	...,
	imeisv	IMEISV

}

UESBI-Iu ::= SEQUENCE {
	uESBI-IuA	UESBI-IuA	OPTIONAL,
	uESBI-IuB	UESBI-IuB	OPTIONAL,
	iE-Extensions	IE-Extensions	OPTIONAL,
	...
}

UESBI-IuA				::= BIT STRING (SIZE(1..128))
-- Reference: TR25.994 --
UESBI-IuB				::= BIT STRING (SIZE(1..128))
-- Reference: TR25.995 --

UL-GTP-PDU-SequenceNumber		::= INTEGER (0..65535)

UL-N-PDU-SequenceNumber 		::= INTEGER (0..65535)

UPInformation		::=		SEQUENCE {
	frameSeqNoUL		FrameSequenceNumber,
	frameSeqNoDL		FrameSequenceNumber,
	pdu14FrameSeqNoUL	PDUType14FrameSequenceNumber,
	pdu14FrameSeqNoDL	PDUType14FrameSequenceNumber,
	dataPDUType		DataPDUType,
	upinitialisationFrame	UPInitialisationFrame,
	iE-Extensions		IE-Extensions	OPTIONAL,
	...
}

UPInitialisationFrame	::= OCTET STRING

UP-ModeVersions		::= BIT STRING (SIZE (16))

USCH-ID			::= INTEGER (0..255)

UserPlaneMode ::= ENUMERATED {
	transparent-mode,
	support-mode-for-predefined-SDU-sizes,
	...
}

UTRAN-CellID ::= SEQUENCE {
	pLMNidentity	PLMNidentity,
	cellID		TargetCellId,
	iE-Extensions	IE-Extensions	OPTIONAL
}


-- V

VelocityEstimate ::= CHOICE {
	horizontalVelocity			HorizontalVelocity,
	horizontalWithVerticalVelocity		HorizontalWithVerticalVelocity,
	horizontalVelocityWithUncertainty	HorizontalVelocityWithUncertainty,
	horizontalWithVeritcalVelocityAndUncertainty	HorizontalWithVerticalVelocityAndUncertainty,
	...
}

HorizontalVelocity	::= SEQUENCE {
	horizontalSpeedAndBearing	HorizontalSpeedAndBearing,
	iE-Extensions			IE-Extensions	OPTIONAL,
	...
}

HorizontalWithVerticalVelocity ::= SEQUENCE {
	horizontalSpeedAndBearing	HorizontalSpeedAndBearing,
	veritcalVelocity		VerticalVelocity,
	iE-Extensions			IE-Extensions	OPTIONAL,
	...
}

HorizontalVelocityWithUncertainty ::= SEQUENCE {
	horizontalSpeedAndBearing	HorizontalSpeedAndBearing,
	uncertaintySpeed		INTEGER (0..255),
	iE-Extensions			IE-Extensions	OPTIONAL,
	...
}

HorizontalWithVerticalVelocityAndUncertainty ::= SEQUENCE {
	horizontalSpeedAndBearing	HorizontalSpeedAndBearing,
	veritcalVelocity		VerticalVelocity,
	horizontalUncertaintySpeed	INTEGER (0..255),
	verticalUncertaintySpeed	INTEGER (0..255),
	iE-Extensions			IE-Extensions	OPTIONAL,
	...
}

HorizontalSpeedAndBearing ::= SEQUENCE {
	bearing		INTEGER (0..359),
	horizontalSpeed	INTEGER (0..2047)
}

VerticalVelocity ::= SEQUENCE {
	veritcalSpeed		INTEGER (0..255),
	veritcalSpeedDirection	VerticalSpeedDirection
}

VerticalSpeedDirection ::= ENUMERATED {
	upward,
	downward
}

VerticalAccuracyCode	::= INTEGER (0..127)

VoiceSupportMatchIndicator ::= ENUMERATED { 
	supported,
	not-supported,
	...
}

END
