-- **************************************************************
--
-- 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	::= OCTET 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
