First code commit
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..3534f2f
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,277 @@
+Eclipse Public License - v 2.0

+

+    THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE

+    PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION

+    OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.

+

+1. DEFINITIONS

+

+"Contribution" means:

+

+  a) in the case of the initial Contributor, the initial content

+     Distributed under this Agreement, and

+

+  b) in the case of each subsequent Contributor:

+     i) changes to the Program, and

+     ii) additions to the Program;

+  where such changes and/or additions to the Program originate from

+  and are Distributed by that particular Contributor. A Contribution

+  "originates" from a Contributor if it was added to the Program by

+  such Contributor itself or anyone acting on such Contributor's behalf.

+  Contributions do not include changes or additions to the Program that

+  are not Modified Works.

+

+"Contributor" means any person or entity that Distributes the Program.

+

+"Licensed Patents" mean patent claims licensable by a Contributor which

+are necessarily infringed by the use or sale of its Contribution alone

+or when combined with the Program.

+

+"Program" means the Contributions Distributed in accordance with this

+Agreement.

+

+"Recipient" means anyone who receives the Program under this Agreement

+or any Secondary License (as applicable), including Contributors.

+

+"Derivative Works" shall mean any work, whether in Source Code or other

+form, that is based on (or derived from) the Program and for which the

+editorial revisions, annotations, elaborations, or other modifications

+represent, as a whole, an original work of authorship.

+

+"Modified Works" shall mean any work in Source Code or other form that

+results from an addition to, deletion from, or modification of the

+contents of the Program, including, for purposes of clarity any new file

+in Source Code form that contains any contents of the Program. Modified

+Works shall not include works that contain only declarations,

+interfaces, types, classes, structures, or files of the Program solely

+in each case in order to link to, bind by name, or subclass the Program

+or Modified Works thereof.

+

+"Distribute" means the acts of a) distributing or b) making available

+in any manner that enables the transfer of a copy.

+

+"Source Code" means the form of a Program preferred for making

+modifications, including but not limited to software source code,

+documentation source, and configuration files.

+

+"Secondary License" means either the GNU General Public License,

+Version 2.0, or any later versions of that license, including any

+exceptions or additional permissions as identified by the initial

+Contributor.

+

+2. GRANT OF RIGHTS

+

+  a) Subject to the terms of this Agreement, each Contributor hereby

+  grants Recipient a non-exclusive, worldwide, royalty-free copyright

+  license to reproduce, prepare Derivative Works of, publicly display,

+  publicly perform, Distribute and sublicense the Contribution of such

+  Contributor, if any, and such Derivative Works.

+

+  b) Subject to the terms of this Agreement, each Contributor hereby

+  grants Recipient a non-exclusive, worldwide, royalty-free patent

+  license under Licensed Patents to make, use, sell, offer to sell,

+  import and otherwise transfer the Contribution of such Contributor,

+  if any, in Source Code or other form. This patent license shall

+  apply to the combination of the Contribution and the Program if, at

+  the time the Contribution is added by the Contributor, such addition

+  of the Contribution causes such combination to be covered by the

+  Licensed Patents. The patent license shall not apply to any other

+  combinations which include the Contribution. No hardware per se is

+  licensed hereunder.

+

+  c) Recipient understands that although each Contributor grants the

+  licenses to its Contributions set forth herein, no assurances are

+  provided by any Contributor that the Program does not infringe the

+  patent or other intellectual property rights of any other entity.

+  Each Contributor disclaims any liability to Recipient for claims

+  brought by any other entity based on infringement of intellectual

+  property rights or otherwise. As a condition to exercising the

+  rights and licenses granted hereunder, each Recipient hereby

+  assumes sole responsibility to secure any other intellectual

+  property rights needed, if any. For example, if a third party

+  patent license is required to allow Recipient to Distribute the

+  Program, it is Recipient's responsibility to acquire that license

+  before distributing the Program.

+

+  d) Each Contributor represents that to its knowledge it has

+  sufficient copyright rights in its Contribution, if any, to grant

+  the copyright license set forth in this Agreement.

+

+  e) Notwithstanding the terms of any Secondary License, no

+  Contributor makes additional grants to any Recipient (other than

+  those set forth in this Agreement) as a result of such Recipient's

+  receipt of the Program under the terms of a Secondary License

+  (if permitted under the terms of Section 3).

+

+3. REQUIREMENTS

+

+3.1 If a Contributor Distributes the Program in any form, then:

+

+  a) the Program must also be made available as Source Code, in

+  accordance with section 3.2, and the Contributor must accompany

+  the Program with a statement that the Source Code for the Program

+  is available under this Agreement, and informs Recipients how to

+  obtain it in a reasonable manner on or through a medium customarily

+  used for software exchange; and

+

+  b) the Contributor may Distribute the Program under a license

+  different than this Agreement, provided that such license:

+     i) effectively disclaims on behalf of all other Contributors all

+     warranties and conditions, express and implied, including

+     warranties or conditions of title and non-infringement, and

+     implied warranties or conditions of merchantability and fitness

+     for a particular purpose;

+

+     ii) effectively excludes on behalf of all other Contributors all

+     liability for damages, including direct, indirect, special,

+     incidental and consequential damages, such as lost profits;

+

+     iii) does not attempt to limit or alter the recipients' rights

+     in the Source Code under section 3.2; and

+

+     iv) requires any subsequent distribution of the Program by any

+     party to be under a license that satisfies the requirements

+     of this section 3.

+

+3.2 When the Program is Distributed as Source Code:

+

+  a) it must be made available under this Agreement, or if the

+  Program (i) is combined with other material in a separate file or

+  files made available under a Secondary License, and (ii) the initial

+  Contributor attached to the Source Code the notice described in

+  Exhibit A of this Agreement, then the Program may be made available

+  under the terms of such Secondary Licenses, and

+

+  b) a copy of this Agreement must be included with each copy of

+  the Program.

+

+3.3 Contributors may not remove or alter any copyright, patent,

+trademark, attribution notices, disclaimers of warranty, or limitations

+of liability ("notices") contained within the Program from any copy of

+the Program which they Distribute, provided that Contributors may add

+their own appropriate notices.

+

+4. COMMERCIAL DISTRIBUTION

+

+Commercial distributors of software may accept certain responsibilities

+with respect to end users, business partners and the like. While this

+license is intended to facilitate the commercial use of the Program,

+the Contributor who includes the Program in a commercial product

+offering should do so in a manner which does not create potential

+liability for other Contributors. Therefore, if a Contributor includes

+the Program in a commercial product offering, such Contributor

+("Commercial Contributor") hereby agrees to defend and indemnify every

+other Contributor ("Indemnified Contributor") against any losses,

+damages and costs (collectively "Losses") arising from claims, lawsuits

+and other legal actions brought by a third party against the Indemnified

+Contributor to the extent caused by the acts or omissions of such

+Commercial Contributor in connection with its distribution of the Program

+in a commercial product offering. The obligations in this section do not

+apply to any claims or Losses relating to any actual or alleged

+intellectual property infringement. In order to qualify, an Indemnified

+Contributor must: a) promptly notify the Commercial Contributor in

+writing of such claim, and b) allow the Commercial Contributor to control,

+and cooperate with the Commercial Contributor in, the defense and any

+related settlement negotiations. The Indemnified Contributor may

+participate in any such claim at its own expense.

+

+For example, a Contributor might include the Program in a commercial

+product offering, Product X. That Contributor is then a Commercial

+Contributor. If that Commercial Contributor then makes performance

+claims, or offers warranties related to Product X, those performance

+claims and warranties are such Commercial Contributor's responsibility

+alone. Under this section, the Commercial Contributor would have to

+defend claims against the other Contributors related to those performance

+claims and warranties, and if a court requires any other Contributor to

+pay any damages as a result, the Commercial Contributor must pay

+those damages.

+

+5. NO WARRANTY

+

+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT

+PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS"

+BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR

+IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF

+TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR

+PURPOSE. Each Recipient is solely responsible for determining the

+appropriateness of using and distributing the Program and assumes all

+risks associated with its exercise of rights under this Agreement,

+including but not limited to the risks and costs of program errors,

+compliance with applicable laws, damage to or loss of data, programs

+or equipment, and unavailability or interruption of operations.

+

+6. DISCLAIMER OF LIABILITY

+

+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT

+PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS

+SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,

+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST

+PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN

+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)

+ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE

+EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE

+POSSIBILITY OF SUCH DAMAGES.

+

+7. GENERAL

+

+If any provision of this Agreement is invalid or unenforceable under

+applicable law, it shall not affect the validity or enforceability of

+the remainder of the terms of this Agreement, and without further

+action by the parties hereto, such provision shall be reformed to the

+minimum extent necessary to make such provision valid and enforceable.

+

+If Recipient institutes patent litigation against any entity

+(including a cross-claim or counterclaim in a lawsuit) alleging that the

+Program itself (excluding combinations of the Program with other software

+or hardware) infringes such Recipient's patent(s), then such Recipient's

+rights granted under Section 2(b) shall terminate as of the date such

+litigation is filed.

+

+All Recipient's rights under this Agreement shall terminate if it

+fails to comply with any of the material terms or conditions of this

+Agreement and does not cure such failure in a reasonable period of

+time after becoming aware of such noncompliance. If all Recipient's

+rights under this Agreement terminate, Recipient agrees to cease use

+and distribution of the Program as soon as reasonably practicable.

+However, Recipient's obligations under this Agreement and any licenses

+granted by Recipient relating to the Program shall continue and survive.

+

+Everyone is permitted to copy and distribute copies of this Agreement,

+but in order to avoid inconsistency the Agreement is copyrighted and

+may only be modified in the following manner. The Agreement Steward

+reserves the right to publish new versions (including revisions) of

+this Agreement from time to time. No one other than the Agreement

+Steward has the right to modify this Agreement. The Eclipse Foundation

+is the initial Agreement Steward. The Eclipse Foundation may assign the

+responsibility to serve as the Agreement Steward to a suitable separate

+entity. Each new version of the Agreement will be given a distinguishing

+version number. The Program (including Contributions) may always be

+Distributed subject to the version of the Agreement under which it was

+received. In addition, after a new version of the Agreement is published,

+Contributor may elect to Distribute the Program (including its

+Contributions) under the new version.

+

+Except as expressly stated in Sections 2(a) and 2(b) above, Recipient

+receives no rights or licenses to the intellectual property of any

+Contributor under this Agreement, whether expressly, by implication,

+estoppel or otherwise. All rights in the Program not expressly granted

+under this Agreement are reserved. Nothing in this Agreement is intended

+to be enforceable by any entity that is not a Contributor or Recipient.

+No third-party beneficiary rights are created under this Agreement.

+

+Exhibit A - Form of Secondary Licenses Notice

+

+"This Source Code may also be made available under the following 

+Secondary Licenses when the conditions for such availability set forth 

+in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),

+version(s), and exceptions or additional permissions here}."

+

+  Simply including a copy of this Agreement, including this Exhibit A

+  is not sufficient to license the Source Code under Secondary Licenses.

+

+  If it is not possible or desirable to put the notice in a particular

+  file, then You may include the notice in a location (such as a LICENSE

+  file in a relevant directory) where a recipient would be likely to

+  look for such a notice.

+

+  You may add additional accurate notices of copyright ownership.
\ No newline at end of file
diff --git a/NAS_EPS_v15.2.0_1_CNL113862.tpd b/NAS_EPS_v15.2.0_1_CNL113862.tpd
new file mode 100644
index 0000000..238219a
--- /dev/null
+++ b/NAS_EPS_v15.2.0_1_CNL113862.tpd
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TITAN_Project_File_Information version="1.0">
+  <ProjectName>NAS_EPS_v15.2.0_1_CNL113862</ProjectName>
+  <ReferencedProjects>
+    <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/>
+  </ReferencedProjects>
+  <Folders>
+    <FolderResource projectRelativePath="src" relativeURI="src"/>
+  </Folders>
+  <Files>
+    <FileResource projectRelativePath="src/NAS_EPS_Types.ttcn" relativeURI="src/NAS_EPS_Types.ttcn"/>
+  </Files>
+  <ActiveConfiguration>Default</ActiveConfiguration>
+  <Configurations>
+    <Configuration name="Default">
+      <ProjectProperties>
+        <MakefileSettings>
+          <generateInternalMakefile>true</generateInternalMakefile>
+          <GNUMake>true</GNUMake>
+          <incrementalDependencyRefresh>true</incrementalDependencyRefresh>
+          <targetExecutable>bin/NAS_EPS_v15.2.0_1_CNL113862</targetExecutable>
+          <buildLevel>Level 3 - Creating object files with dependency update</buildLevel>
+        </MakefileSettings>
+        <LocalBuildSettings>
+          <workingDirectory>bin</workingDirectory>
+        </LocalBuildSettings>
+      </ProjectProperties>
+    </Configuration>
+  </Configurations>
+</TITAN_Project_File_Information>
diff --git a/doc/NAS_EPS__v15.2.0_1CNL113862_PRI.doc b/doc/NAS_EPS__v15.2.0_1CNL113862_PRI.doc
new file mode 100644
index 0000000..24aecb1
--- /dev/null
+++ b/doc/NAS_EPS__v15.2.0_1CNL113862_PRI.doc
Binary files differ
diff --git a/doc/NAS_EPS_v15.2.0_1CNL113862_1551.doc b/doc/NAS_EPS_v15.2.0_1CNL113862_1551.doc
new file mode 100644
index 0000000..c9c618d
--- /dev/null
+++ b/doc/NAS_EPS_v15.2.0_1CNL113862_1551.doc
Binary files differ
diff --git a/src/NAS_EPS_Types.ttcn b/src/NAS_EPS_Types.ttcn
new file mode 100644
index 0000000..d13bff7
--- /dev/null
+++ b/src/NAS_EPS_Types.ttcn
@@ -0,0 +1,3386 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v2.0
+// which accompanies this distribution, and is available at
+// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+///////////////////////////////////////////////////////////////////////////////
+//
+//  File:               NAS_EPS_Types.ttcn
+//  Rev:                <RnXnn>
+//  Prodnr:             1/CNL 113 862
+//  Contact:            http://ttcn.ericsson.se
+//  Reference:          3GPP 24.301 v15.2.0 (24.008 v15.3.0, 24.011 v15.1.0, 24.161 v15.0.0 
+
+module NAS_EPS_Types
+{
+
+import from General_Types all;
+
+
+external function enc_PDU_NAS_EPS(in PDU_NAS_EPS pdu) return octetstring
+with { extension "prototype(convert)" extension "encode(RAW)" }
+
+external function dec_PDU_NAS_EPS(in octetstring stream) return PDU_NAS_EPS
+with { extension "prototype(convert)" extension "decode(RAW)" }
+
+external function dec_PDU_NAS_EPS_backtrack(in octetstring stream, out PDU_NAS_EPS pdu) return integer
+with { extension "prototype(backtrack) decode(RAW)" }
+
+external function enc_EPS_MobileIdentityV_NAS_EPS(in EPS_MobileIdentityV ePS_mobileIdentityV) return octetstring
+with { extension "prototype(convert)" extension "encode(RAW)" }
+
+external function dec_EPS_MobileIdentityV_NAS_EPS(in octetstring ePS_mobileIdentityV_oct) return EPS_MobileIdentityV
+with { extension "prototype(convert)" extension "decode(RAW)" }
+
+external function dec_EPS_MobileIdentityV_NAS_EPS_backtrack(in octetstring ePS_mobileIdentityV_oct, out EPS_MobileIdentityV ePS_mobileIdentityV) return integer
+with { extension "prototype(backtrack) decode(RAW)" }
+
+external function enc_IMSI_NAS_EPS(in IMSI imsi) return octetstring
+with { extension "prototype(convert)" extension "encode(RAW)" }
+
+external function dec_IMSI_NAS_EPS(in octetstring imsi_oct) return IMSI
+with { extension "prototype(convert)" extension "decode(RAW)" }
+
+external function dec_IMSI_NAS_EPS_backtrack(in octetstring imsi_oct, out IMSI imsi) return integer
+with { extension "prototype(backtrack) decode(RAW)" }
+
+external function enc_GUTI_NAS_EPS(in GUTI guti) return octetstring
+with { extension "prototype(convert)" extension "encode(RAW)" }
+
+external function dec_GUTI_NAS_EPS(in octetstring guti_oct) return GUTI
+with { extension "prototype(convert)" extension "decode(RAW)" }
+
+external function dec_GUTI_NAS_EPS_backtrack(in octetstring guti_oct, out GUTI guti) return integer
+with { extension "prototype(backtrack) decode(RAW)" }
+
+external function enc_IMEI_NAS_EPS(in IMEI imei) return octetstring
+with { extension "prototype(convert)" extension "encode(RAW)" }
+
+external function dec_IMEI_NAS_EPS(in octetstring imei_oct) return IMEI
+with { extension "prototype(convert)" extension "decode(RAW)" }
+
+external function dec_IMEI_NAS_EPS_backtrack(in octetstring imei_oct, out IMEI imei) return integer
+with { extension "prototype(backtrack) decode(RAW)" }
+
+//==================================
+// Common Information Elements
+//==================================
+
+// 9.9.2.0
+type record AdditionalInformationTLV
+{
+  OCT1              elementIdentifier,
+  LIN1              lengthIndicator,
+  octetstring       additionalInformation_Value
+} with {
+  variant "PRESENCE (elementIdentifier = '65'O)"
+  variant (lengthIndicator) "LENGTHTO (additionalInformation_Value)" 
+}
+
+// 9.9.2.0A  10.5.7.8/24.008
+type record DevicePropertiesTV
+{
+  BIT1             lowPriority,
+  BIT3             spare,
+  BIT4             elementIdentifier
+}
+
+// 9.9.2.1
+type record EPS_BearerContextStatusTLV
+{
+  OCT1              elementIdentifier,
+  LIN1              lengthIndicator,
+  BIT1              ebi0,
+  BIT1              ebi1,
+  BIT1              ebi2,
+  BIT1              ebi3,
+  BIT1              ebi4,
+  BIT1              ebi5,
+  BIT1              ebi6,
+  BIT1              ebi7,
+  BIT1              ebi8,
+  BIT1              ebi9,
+  BIT1              ebi10,
+  BIT1              ebi11,
+  BIT1              ebi12,
+  BIT1              ebi13,
+  BIT1              ebi14,
+  BIT1              ebi15
+} with { 
+  variant (lengthIndicator) "LENGTHTO (ebi0,ebi1,ebi2,ebi3,ebi4,ebi5,ebi6,ebi7,ebi8,ebi9,ebi10,ebi11,ebi12,ebi13,ebi14,ebi15)"  
+  variant "PRESENCE (elementIdentifier = '57'O )" 
+}
+
+// 9.9.2.2 - 10.5.1.3/24.008  
+
+type record LocationAreaIdentificationV {
+  OCT3  mcc_mnc,
+  OCT2  lac
+} 
+
+type record LocationAreaIdentificationTV {
+  OCT1  elementIdentifier,
+  OCT3  mcc_mnc, 
+  OCT2  lac
+} with {
+  variant "PRESENCE (elementIdentifier = '13'O)"
+}
+
+// 9.9.2.3 - 10.5.1.4/24.008
+
+type record MobileIdentityTLV
+{
+  BIT7              elementIdentifier,
+  BIT1              spare1,
+  MobileIdentityLV  mobileIdentityLV
+} with {
+  variant "PRESENCE (elementIdentifier = '0100011'B)"
+}
+
+type record MobileIdentityLV
+{
+  LIN1             lengthIndicator,
+  MobileIdentityV  mobileIdentityV
+} with { 
+  variant (lengthIndicator) "LENGTHTO (mobileIdentityV)"  
+}
+
+type record MobileIdentityV
+{
+  BIT3                         typeOfIdentity,
+  OddEvenInd_Identity          oddEvenInd_identity
+} with {
+  variant (oddEvenInd_identity) "CROSSTAG(
+  imsi,                     typeOfIdentity ='001'B;
+  imei,                     typeOfIdentity ='010'B;
+  imei_sv,                  typeOfIdentity ='011'B;
+  tmsi_ptmsi_mtmsi,         typeOfIdentity ='100'B;
+  tmgi_and_mbms_sessionID,  typeOfIdentity ='101'B;
+  no_identity,              typeOfIdentity ='000'B;
+ )"
+}
+
+type union OddEvenInd_Identity
+{
+  IMSI                     imsi,  
+  IMEI                     imei,    
+  IMEI_SV                  imei_sv,
+  TMSI_PTMSI_MTMSI         tmsi_ptmsi_mtmsi,
+  TMGI_and_MBMS_SessionID  tmgi_and_mbms_sessionID,
+  No_Identity              no_identity
+}
+
+type record IMSI
+{
+  BIT1               oddevenIndicator,       
+  hexstring          digits,
+  BIT4               fillerDigit  optional   // filler '1111'B 
+} with {
+  variant (fillerDigit) "PRESENCE (oddevenIndicator   = '0'B) "
+}
+
+type record IMEI
+{
+  BIT1               oddevenIndicator,   
+  hexstring          digits,   
+  BIT4               fillerDigit  optional   // filler '1111'B  
+} with {
+  variant (fillerDigit) "PRESENCE (oddevenIndicator   = '0'B) "
+}
+
+type record IMEI_SV
+{
+  BIT1               oddevenIndicator,  
+  hexstring          digits,
+  BIT4               fillerDigit  optional   // filler '1111'B
+} with {
+  variant (fillerDigit) "PRESENCE (oddevenIndicator   = '0'B) "
+}
+
+type record TMSI_PTMSI_MTMSI
+{
+  BIT1               oddevenIndicator,  
+  BIT4               fillerDigit,   // filler '1111'B
+  hexstring          digits
+} with {
+  variant (fillerDigit) "PRESENCE (oddevenIndicator   = '0'B) ";
+  variant (digits) "HEXORDER(high)"  
+}
+
+type record TMGI_and_MBMS_SessionID
+{
+  BIT1               oddevenIndicator,
+  BIT1               mccMncIndicator,
+  BIT1               sessIdIndicator,
+  BIT2               spare,  // '00'B
+  OCT3               mBMSServiceID,
+  HEX1               mccDigit1 optional,
+  HEX1               mccDigit2 optional,  
+  HEX1               mccDigit3 optional,  
+  HEX1               mncDigit3 optional,   
+  HEX1               mncDigit1 optional,
+  HEX1               mncDigit2 optional,   
+  OCT1               mBMSSessionIdentity optional
+} with {
+  variant (mccDigit1) "PRESENCE (mccMncIndicator   = '1'B)";
+  variant (mccDigit2) "PRESENCE (mccMncIndicator   = '1'B)";
+  variant (mccDigit3) "PRESENCE (mccMncIndicator   = '1'B)";
+  variant (mncDigit3) "PRESENCE (mccMncIndicator   = '1'B)";
+  variant (mncDigit2) "PRESENCE (mccMncIndicator   = '1'B)";
+  variant (mncDigit1) "PRESENCE (mccMncIndicator   = '1'B)";
+  variant (mBMSSessionIdentity) "PRESENCE (sessIdIndicator   = '1'B)";
+}
+
+type record No_Identity
+{
+  BIT1               oddevenIndicator,
+  hexstring          fillerDigits
+};
+
+// 9.9.2.4 - 10.5.1.6/24.008
+//24.008/ 10.5.1.6 , 4th octet:
+type record MobileStationClassmark2_oct4 {
+  BIT1  fc, // '0'B no MS support of E/R_GSM
+  // '1'B      MS support of E/R_GSM
+////BIT2  spare1_2, // '00'B
+  BIT1  vgcs,//'0'B no VGCS capability
+  //'1'B  VGCS capability and notifications wanted
+  BIT1  vbs, //'0'B no VBS capability, 
+  //  '1'B VBS capability and notifications wanted
+  BIT1  sm_Capability, // '0'B SM capbility present  not
+  // '1'B SM capbility        present
+  BIT2 ss_ScreenIndicator,
+  // '00'B default value of phase1 (GSM+DCS) reserved or (PCS)
+  // '01'B capability of notation  ellipsis
+  // '10'B for future use
+  // '11'B for use  future
+  BIT1  ps_Capability, // 'x'B  ignored, received  if
+  BIT1  spare2_1   // '0'B
+} with { variant "" };
+
+
+//24.008/ 10.5.1.6 5th octet ( Table 10.5.6a ):
+type record MobileStationClassmark2_oct5 {
+  BIT1  a5_2,     // '0'B encryption algorithm A5/2 available not(0)
+                  // '1'B encryption algorithm A5/available  2   (1)
+  BIT1  a5_3,     // '0'B encryption algorithm A5/3 available not(0)
+                  // '1'B encryption algorithm A5/available  3   (1)
+  //BIT5  spare3_5, //   '00000'B 
+  BIT1  cmsp,
+  BIT1  solsa,
+  BIT1  ucs2,
+  BIT1  lcsva_cap,
+  BIT1  spare5_7,
+  BIT1  cm3       // '0'B  no additional capability info
+  // '1'B The MS supports options that are indicated in classmark 3 IE
+  //      (additional info  capability)
+} with { variant "" };
+
+
+//24.008/ 10.5.1.6
+type record MobileStationClassmark2_TLV {
+  OCT1  elementIdentifier,
+  LIN1  lengthIndicator, // '01'O..'03'O
+  BIT3  rf_PowerCapability, //        '000'B class1 (for GSM+DCS+PCS)
+  //        '001'B class2 (for GSM+DCS+PCS)
+  //        '010'B class3 (for GSM+DCS+PCS)
+  //        '011'class4  B  (only for GSM)
+  //        '100'class5  B  (only for GSM)
+  BIT1  a5_1, // '0'B encryption algorithm A5/1 available (0)
+  // '1'B encryption algorithm A5/1 not available  1  (1)
+  BIT1  esind,
+  // '0'B controlled early classmark sending option implemented not (0)
+  // '1'B controlled early classmark sending implemented option (1)
+  BIT2  revisionLevel, //   '00'B reserved for phase1 (GSM+DCS)
+  //   '00'B reserved for GSM phase 1 (PCS)
+  //   '01'B used by phase2 MSs  (GSM+DCS)
+  //   '01'B used by PCS1900 MSs  phase1  (PCS)
+  //   '10'B used by  MSs  R99  supporting
+  //   '11'B reserved for future use
+  BIT1  spare1_1, // '0'B
+  MobileStationClassmark2_oct4  mobileStationClassmark2_oct4    optional,
+  MobileStationClassmark2_oct5  mobileStationClassmark2_oct5    optional
+} with { 
+  variant "PRESENCE (elementIdentifier = '11'O)"
+  variant (lengthIndicator) "LENGTHTO (rf_PowerCapability, a5_1, esind,
+                                             revisionLevel, spare1_1,
+                                             mobileStationClassmark2_oct4,
+                                             mobileStationClassmark2_oct5)"};
+
+
+// 9.9.2.5 - 10.5.1.7/24.008
+type record MobileStationClassmark3_TLV {
+  OCT1  elementIdentifier,
+  LIN1  lengthIndicator,
+  OCTN  valuePart
+} with { 
+  variant "PRESENCE (elementIdentifier = '20'O)"
+  variant (lengthIndicator) "LENGTHTO (valuePart)"};
+
+
+// 9.9.2.6
+type record NASSecurityParFromEUTRAN_TV{
+  OCT1  elementIdentifier,
+  BIT4  DL_NAS_count_value,
+  BIT4  spare
+} //with { 
+//  variant "PRESENCE (elementIdentifier = '20'O)"
+//};
+
+
+// 9.9.2.7
+type record NASSecurityParToEUTRAN_TV{
+  OCT1  elementIdentifier,
+  OCT4  nonceMME_value,
+  BIT3  typeof_IP_algorithm,
+  BIT1  spare,
+  BIT3  typeof_ciphering_algorithm,
+  BIT1  spare2,
+  BIT3  NAS_key_ID,
+  BIT1  tSC,
+  BIT4  spare3
+} // with { 
+//  variant "PRESENCE (elementIdentifier = '20'O)"
+//};
+
+// 9.9.2.8 - 10.5.1.13/24.008
+type record PLMN_ListTLV
+{
+  OCT1         elementIdentifier,
+  LIN1         lengthIndicator,
+  MCC_MNC_List mcc_mnc length(1..15)
+} with {
+  variant (lengthIndicator) "LENGTHTO (mcc_mnc)"
+  variant "PRESENCE (elementIdentifier = '4A'O)"
+}
+
+type record of OCT3 MCC_MNC_List;
+
+// 9.9.2.9
+// implemented as BIT4
+
+// 9.9.2.10 - 10.5.4.32/24.008
+type record codec{
+  OCT1  systemIdentification1,
+  INT1  lengthOfBitmap1,
+  OCT1  codecBitmap1_bits1to8,
+  OCT1  codecBitmap1_bits9to16 optional,
+  octetstring additional_codecs optional
+} with { variant (lengthOfBitmap1) "LENGTHTO(codecBitmap1_bits1to8, codecBitmap1_bits9to16, additional_codecs)"; 
+};
+
+type record of codec CodecList_ML3 with { variant "" }; 
+
+type record SupportedCodecListTLV {
+  OCT1            elementIdentifier,
+  LIN1            lengthIndicator, //  
+  CodecList_ML3   codecList 
+} with { 
+  variant "PRESENCE (elementIdentifier = '40'O)"
+  variant (lengthIndicator) "LENGTHTO( codecList )"};
+
+//==================================================================
+// EPS Mobility Management (EMM) information elements - 9.9.3/24.301
+//==================================================================
+
+// 9.9.3.0A
+type record AdditionalUpdateResultTV
+{
+  BIT2      additionalUpdateResultValue,  // "CS Fallback not preferred" is never given as CS Fallback is not supported
+  BIT2      spare,
+  BIT4      elementIdentifier 
+} with{
+  variant "PRESENCE (elementIdentifier = '1111'B)"
+}
+
+// 9.9.3.0B
+type record AdditionalUpdateTypeTV
+{
+  BIT1      aUTV,
+  BIT1      SAF,
+  BIT2      pNB_CIoT,
+  BIT4      elementIdentifier  
+} with{
+  variant "PRESENCE (elementIdentifier = '1111'B)"
+}
+
+// 9.9.3.1 - 10.5.3.2.2/24.008
+type record AuthenticationFailureParameterTLV
+{
+  OCT1     elementIdentifier,
+  LIN1     lengthIndicator,
+  OCT14    authenticationFailureParameter
+} with{
+  variant "PRESENCE (elementIdentifier = '30'O)"
+  variant (lengthIndicator) "LENGTHTO (authenticationFailureParameter)"  
+}
+
+// 9.9.3.2 - 10.5.3.1.1/24.008
+type record AuthenticationParameterAUTNLV
+{
+  LIN1        lengthIndicator,
+  OCT16       aUTN
+} with {
+  variant (lengthIndicator) "LENGTHTO (aUTN)"  
+}
+
+// 9.9.3.3 - 10.5.3.1/24.008
+type record AuthenticationParameterRANDV
+{
+  OCT16       rAND
+}
+
+// 9.9.3.4
+type record AuthenticationResponseParameterLV
+{
+  LIN1              lengthIndicator,
+  AuthenticationResponseParameterV authenticationResponseParameter
+} with {
+  variant (lengthIndicator) "LENGTHTO (authenticationResponseParameter)"  
+}
+
+type record AuthenticationResponseParameterV
+{
+  octetstring       rES length (4..16)
+}
+
+// 9.9.3.4A - 10.5.1.2/24.008
+type record CipheringKeySequenceNumberTV
+{
+  CipheringKeySequenceNumberV  keySequence,
+  BIT4                         elementIdentifier
+} with { variant "PRESENCE (elementIdentifier = '1000'B)"; };
+
+
+type record CipheringKeySequenceNumberV
+{
+  BIT3               keySequence,
+  BIT1               spare
+};
+
+// 9.9.3.4B
+type record SMS_ServiceStatusTV
+{
+  BIT3             sMS_ServiceStatusValue,
+  BIT1             spare,
+  BIT4             elementIdentifier
+} with { variant "PRESENCE (elementIdentifier = '1110'B)"; };
+
+
+// 9.9.3.5
+type record CSFB_ResponseTV
+{
+ BIT3             cSFB_ResponseValue,
+ BIT1             spare,
+ BIT4             elementIdentifier
+} with { variant "PRESENCE (elementIdentifier = '1011'B)"; };
+
+// 9.9.3.6 - 10.5.3.12/24.008
+type record DaylightSavingTimeTLV
+{
+  OCT1                        elementIdentifier,
+  DaylightSavingTimeLV        daylightSavingTimeLV
+
+} with { variant "PRESENCE (elementIdentifier = '49'O)"; };
+
+type record DaylightSavingTimeLV
+{
+  LIN1                         lengthIndicator,
+  DaylightSavingTimeV          daylightSavingTimeV
+} with {
+  variant (lengthIndicator) "LENGTHTO (daylightSavingTimeV)" 
+}
+
+type record DaylightSavingTimeV 
+{
+  BIT2               valueField,
+  BIT6               spare     // Shall be set to 000000
+}
+
+// 9.9.3.7
+// type record DetachTypeTV 
+// {
+//   DetachTypeV detachType,
+//   BIT4 elementIdentifier
+// } with {
+//   variant "PRESENCE (elementIdentifier = '?? 'O)"
+// }
+
+type record DetachTypeV
+{
+  BIT3     typeofDetach,
+  BIT1     switchOff
+}
+
+// 9.9.3.8 - 10.5.5.6/24.008
+type record DRXParameterTV
+{
+  OCT1               elementIdentifier,
+  DRXParameterV      drxParameter
+} with { variant "PRESENCE (elementIdentifier = '5C'O)"; };
+
+type record DRXParameterV
+{
+  OCT1               splitPGCycleCode,
+  BIT3               nonDRXTimer,
+  BIT1               splitOnCCCH,
+  BIT4               cnSpecificDRXCycleLength
+}
+
+// 9.9.3.9
+type record EMM_CauseTV
+{
+  OCT1        elementIdentifier,
+  EMM_CauseV  causeValue
+} with {
+  variant "PRESENCE (elementIdentifier = '53'O)"
+}
+
+type record EMM_CauseV
+{
+  OCT1        causeValue
+}
+
+// 9.9.3.10
+type record EPS_AttachResultV
+{
+  BIT3     valueOfAttachResult,
+  BIT1     spare
+}
+
+// EPS_AttachResultTV -- not used
+
+// 9.9.3.11
+type record EPS_AttachTypeV
+{
+  BIT3     typeOfAttach,
+  BIT1     spare
+} 
+
+// EPS_AttachTypeTV -- not used
+
+// 9.9.3.12
+type record EPS_MobileIdentityTLV
+{
+  OCT1                         elementIdentifier,
+  EPS_MobileIdentityLV         ePS_MobileIdentity
+} with {
+  variant "PRESENCE (elementIdentifier = '50'O; )" 
+}
+
+type record EPS_MobileIdentityLV
+{
+  LIN1                         lengthIndicator,
+  EPS_MobileIdentityV          ePS_MobileIdentity
+} with {
+  variant (lengthIndicator) "LENGTHTO (ePS_MobileIdentity)"
+}
+
+type record EPS_MobileIdentityV 
+{
+  BIT3                         typeOfIdentity,
+  OddEvenInd_Identity_EPS      oddEvenInd_identity
+} with {
+  variant (oddEvenInd_identity) "CROSSTAG(
+  imsi,                     typeOfIdentity ='001'B;
+  guti,                     typeOfIdentity ='110'B;
+  imei,                     typeOfIdentity ='011'B;
+  )"
+}
+
+type union OddEvenInd_Identity_EPS
+{
+  IMSI  imsi,
+  GUTI  guti,
+  IMEI  imei       
+}
+
+type record GUTI
+{
+  BIT1               oddevenIndicator, 
+  BIT4               spare,  // '1111'B
+  HEX1               mccDigit1,
+  HEX1               mccDigit2,
+  HEX1               mccDigit3,
+  HEX1               mncDigit3,
+  HEX1               mncDigit1,
+  HEX1               mncDigit2,
+  OCT2               mMEGI,
+  OCT1               mMEC,
+  OCT4               mTMSI
+}
+
+// 9.9.3.12A
+type record EPS_NetworkFeatureSupportTLV 
+{
+  OCT1     elementIdentifier,
+  LIN1     lengthIndicator,
+  BIT1     iMS_VoPS,
+  BIT1     eMCBS,
+  BIT1     ePC_LCS,
+  BIT2     cS_LCS,
+  BIT1     eSR_PS, 
+  BIT1     eRwoPDN,
+  BIT1     cP_CIoT,
+  BIT1     uP_CIoT optional, 
+  BIT1     s1_UData optional,
+  BIT1     hC_CP_CIoT optional,
+  BIT1     ePCO optional,
+  BIT1     restrictEC optional,
+  BIT1     restrictDCNR optional,
+  BIT1     n26OInd optional,
+  BIT1     spare optional
+} with{
+  variant "PRESENCE (elementIdentifier = '64'O)"
+  variant (lengthIndicator) "LENGTHTO (iMS_VoPS, eMCBS, ePC_LCS, cS_LCS, eSR_PS, eRwoPDN, cP_CIoT,uP_CIoT,
+                                       s1_UData, hC_CP_CIoT, ePCO, restrictEC, restrictDCNR, n26OInd, spare)"  
+}
+
+// 9.9.3.13
+type record EPS_UpdateResultV
+{
+  BIT3         valueOfUpdateResult, // set to "TA updated" or "combined TA/LA updated"
+  BIT1         spare
+}
+
+// 9.9.3.14
+type record EPS_UpdateTypeV 
+{
+  BIT3         typeOfUpdate,
+  BIT1         activeFlag  
+}
+
+// 9.9.3.15
+type record ESM_MessageContainerTLVE
+{
+  OCT1                      elementIdentifier,
+  ESM_MessageContainerLVE   eSM_MessageContainer
+} with {
+  variant "PRESENCE (elementIdentifier = '78'O)"
+}
+
+type record ESM_MessageContainerLVE
+{
+  LIN2_BO_LAST      lengthIndicator,
+  octetstring       content length (1..65535)
+} with { 
+  variant (lengthIndicator) "LENGTHTO (content)"
+}
+
+// 9.9.3.16 - 10.5.7.3/24.008
+type record GPRSTimerTV
+{
+  OCT1        elementIdentifier,   // different values in different PDUs
+  GPRSTimerV  gprsTimer
+} 
+
+type record GPRSTimerV
+{
+  BIT5     timerValue,
+  BIT3     unit
+}
+
+// 9.9.3.16a  10.5.7.4/24.008
+type record GPRSTimer2TLV 
+{
+ OCT1          elementIdentifier,
+ LIN1          lengthIndicator,
+ GPRSTimer2V   gprsTimer2
+} with { 
+  variant (lengthIndicator) "LENGTHTO (gprsTimer2)"
+}
+
+type record GPRSTimer2V
+{
+  BIT5     timerValue,
+  BIT3     unit
+}
+
+// 9.9.3.16b 10.5.7.4a/24.008
+type record GPRSTimer3TLV
+{
+ OCT1          elementIdentifier,
+ LIN1          lengthIndicator, 
+ GPRSTimer3V   gprsTimer3
+} with { 
+  variant (lengthIndicator) "LENGTHTO (gprsTimer3)"
+}
+
+type record GPRSTimer3V
+{
+  BIT5     timerValue,
+  BIT3     unit
+}
+
+// 9.9.3.17 - 10.5.5.9/24.008
+type record IdentityType2V
+{
+  BIT3         typeOfIdentity,
+  BIT1         spare  //'0'B
+}
+
+// 9.9.3.18 - 10.5.5.10/24.008
+type record IMEISV_RequestTV
+{ 
+  IMEISV_RequestV   iMEISV_Request,
+  BIT4              elementIdentifier
+} with {
+  variant "PRESENCE (elementIdentifier = '1100'B)"
+} 
+
+type record IMEISV_RequestV
+{
+  BIT3         valueOfRequest,
+  BIT1         spare  //'0'B
+}
+
+//9.9.3.19
+type record KSIandSequenceNumberV
+{
+  BIT5              sequenceNumber,
+  BIT3              kSI
+}
+
+// 9.9.3.20 - 10.5.5.12/24.008
+type record  MSNetworkCapabilityTLV
+{
+  OCT1                         elementIdentifier,
+  MSNetworkCapabilityLV        mSNetworkCapabilityLV
+} with { 
+  variant "PRESENCE (elementIdentifier = '31'O)" 
+};
+
+
+type record MSNetworkCapabilityLV
+{
+  LIN1                         lengthIndicator,
+  MSNetworkCapabilityV         msNetworkCapabilityV
+} with { variant (lengthIndicator) "LENGTHTO (msNetworkCapabilityV)";
+  variant (msNetworkCapabilityV)    "PADDING(yes)"
+};
+
+
+type record MSNetworkCapabilityV    //length 3-10 octets
+{
+  BIT1               gea1bit,
+  BIT1               smCapabilitiesviaDedicatedChannels,
+  BIT1               smCapabilitiesviaGPRSChannels,
+  BIT1               ucs2Support,
+  BIT2               ssScreeningIndicator,
+  BIT1               solSACapability            optional, //spare in V97
+  BIT1               revisionLevelIndicatior    optional, //spare in V97
+  BIT1               pFCFeatureMode             optional, //spare in V97(opt)
+  BIT6               extendedGEAbits            optional, //spare in V97(opt)
+  BIT1               lcsVAcapability            optional, //spare in V97(opt)
+  BIT1               pSInterRATHOtoUTRANIuModeCapability optional,
+  BIT1               pSInterRATHOtoEUTRANS1ModeCapability optional,//18
+  BIT1               eMMCombinedProceduresCapability optional,
+  BIT1               iSRSupport                  optional,
+  BIT1               sRVCCtoGERANUTRANCapability optional,
+  BIT1               epcCapability               optional, //22
+  BIT1               nFCapability                optional,
+  BIT1               gERANNwSharingCapability    optional,
+  BIT1               userPlaneIntegrityProtectionSupport  optional,
+  BIT1               gIA4                        optional,
+  BIT1               gIA5                        optional,
+  BIT1               gIA6                        optional,
+  BIT1               gIA7                        optional, //29
+  BIT1               ePCOIEIndicator             optional,
+  BIT1               restrictionOnUseOfEnhancedCoverageCapability optional,
+  BIT1               dualConnectivityOfEUTRANwithNRCapability optional,
+  octetstring        spare_octets length(0..6)   optional
+} with { variant "FIELDORDER(msb)" };
+
+//9.9.3.20a  10.5.1.15/24.008
+type record MS_NetworkFeatureSupportTV
+{
+  BIT1          extendedPeriodicTimers,
+  BIT3          spare,
+  BIT4          elementIdentifier
+}
+
+// 9.9.3.21
+type record NAS_KeySetIdentifierTV
+{
+  NAS_KeySetIdentifierV     nAS_KeySetIdentifiervalue,
+  BIT4                      elementIdentifier
+} with { variant "PRESENCE (elementIdentifier = '1011'B)"; }
+
+type record NAS_KeySetIdentifierV
+{
+  BIT3         identifier,
+  BIT1         tSC  // set to "native security context (for KSIASME)" is supported
+                    // set to "mapped security context (for KSISGSN)" is ignored if received
+}
+
+// 9.9.3.22
+type record NAS_MessageContainerTLV
+{
+  OCT1                   elementIdentifier,
+  NAS_MessageContainerLV nAS_MessageContainerLV
+}
+
+type record NAS_MessageContainerLV
+{
+  LIN1                      lengthIndicator,
+  NAS_MessageList           nAS_MessageContainerV
+} with {
+  variant (lengthIndicator) "LENGTHTO (nAS_MessageContainerV)"  
+}
+//     7.2/24.011
+type union NAS_MessageList
+{
+  CP_DATA   cP_DATA,
+  CP_ACK    cP_ACK,
+  CP_ERROR  cP_ERROR
+} with {
+  variant  "TAG
+  (
+   cP_DATA,   messageType = '01'O;
+   cP_ACK,    messageType = '04'O;
+   cP_ERROR,  messageType = '10'O;
+  )"
+}
+
+type record CP_DATA
+{
+  BIT4  protocolDiscriminator,
+  BIT4  transactionID,
+  OCT1  messageType,
+  CP_UserDataLV cp_UserDataLV
+}
+
+type record CP_UserDataLV
+{
+  LIN1          lengthIndicator,
+  octetstring   rPDU length (0..248)
+} with {
+  variant (lengthIndicator) "LENGTHTO (rPDU)"  
+}
+
+type record CP_ACK
+{
+  BIT4  protocolDiscriminator,
+  BIT4  transactionID,
+  OCT1  messageType
+}
+
+type record CP_ERROR
+{
+  BIT4  protocolDiscriminator,
+  BIT4  transactionID,
+  OCT1  messageType,
+  OCT1  cP_Cause
+}
+
+// 9.9.3.23
+type record NAS_SecurityAlgorithmsV
+{
+  BIT3         typeOfIntegrityProtection, //EIA1 is supported
+  BIT1         spare1,
+  BIT3         typeOfCiphering, //EEA1 and EEA0 are supported
+  BIT1         spare2
+} with { variant "" }
+
+// 9.9.3.24 - 10.5.3.5a/24.008
+type record NetworkNameTLV
+{
+  OCT1                      elementIdentifier,
+  NetworkNameLV             networkNameLV
+} 
+
+type record NetworkNameLV
+{
+  LIN1            lengthIndicator,
+  NetworkNameV    networkNameV
+} with {
+  variant (lengthIndicator) "LENGTHTO (networkNameV)"
+}
+
+type record NetworkNameV
+{
+  BIT3               nSpareBits,
+  BIT1               addCI,
+  BIT3               codingScheme,
+  BIT1               ext1, //'1'B
+  octetstring        textString
+  // actually the upper limit depends on the max size of the PDU, see 44.006
+};
+
+// 9.9.3.24A - 10.5.5.31/24.008
+type record NetworkResourceIdentifierContainerTLV
+{
+  OCT1            elementIdentifier,
+  NetworkResourceIdentifierContainerLV networkResourceIdentifierContainerLV
+} with { variant "PRESENCE (elementIdentifier = '10'O)"; }
+
+type record NetworkResourceIdentifierContainerLV
+{
+  LIN1            lengthIndicator,
+  NetworkResourceIdentifierContainerV networkResourceIdentifierContainerV
+} with {
+  variant (lengthIndicator) "LENGTHTO (networkResourceIdentifierContainerV)"
+}
+
+type record NetworkResourceIdentifierContainerV
+{
+  BIT10       nRIContainerValue,
+  BIT6        spare
+} with {
+  variant (nRIContainerValue) "BITORDER(msb)";
+  variant (nRIContainerValue,spare) "FIELDORDER(msb)"
+}
+
+// 9.9.3.25
+type record NonceTV
+{
+  OCT1            elementIdentifier,
+  OCT4            noncevalue 
+} // with { variant "PRESENCE (elementIdentifier = '55'O)"; }  
+
+// 9.9.3.25A
+type record PagingIdentityTV {
+  OCT1            elementIdentifier,
+  PagingIdentityV pagingIdentityValue
+} 
+
+type record PagingIdentityV {
+  BIT1           pagingIdentityValue,
+  BIT7           spare
+}
+
+// 9.9.3.26 - 10.5.5.8/24.008
+type record P_TMSISignatureTV
+{
+  OCT1               elementIdentifier,
+  OCT3               valueField
+} with { variant "PRESENCE (elementIdentifier = '19'O)"; }
+
+// 9.9.3.26A
+type record ExtendedEMM_CauseTV
+{
+  BIT1               eUTRANallowedValue,
+  BIT1               ePSoptimizationInfo,
+  BIT2               spare,
+  BIT4               elementIdentifier
+} with { variant "PRESENCE (elementIdentifier = '1010'B)"; }
+
+// 9.9.3.27
+// represented as BIT4 in message
+
+// 9.9.3.28 
+type record ShortMACTV //not used
+{
+  OCT1              elementIdentifier,
+  ShortMACV         shortMAC
+} with {
+  variant "PRESENCE (elementIdentifier = '00'O)" //??
+}
+
+type record ShortMACV //used
+{
+  OCT2               valueOfShortMAC
+} 
+
+// 9.9.3.29 - 10.5.3.8/24.008 
+type record TimeZoneTV
+{
+  OCT1 elementIdentifier,
+  OCT1 valueOfTimeZone
+} with {
+  variant "PRESENCE (elementIdentifier = '46'O)" //??
+}
+
+
+// 9.9.3.30 - 10.5.3.9/24.008 
+type record TimeZoneAndTimeTV
+{
+  OCT1                  elementIdentifier,
+  TimeZoneAndTimeV      timeZoneAndTimeV
+} with {
+  variant "PRESENCE (elementIdentifier = '47'O)" 
+}
+
+type record TimeZoneAndTimeV
+{
+  OCT1               year,
+  OCT1               month,
+  OCT1               day,
+  OCT1               hour,
+  OCT1               minute,
+  OCT1               second,
+  OCT1               timeZone
+};
+
+// 9.9.3.31 - 10.5.5.4/24.008 
+type record TMSIStatusTV
+{
+  TMSIStatusV        tmsiStatusV,
+  BIT4               elementIdentifier
+} with { variant "PRESENCE (elementIdentifier = '1001'B)" };
+
+type record TMSIStatusV
+{
+  BIT1               tmsiFlag,
+  BIT3               spare // '000'B
+};
+
+// 9.9.3.32
+type record TrackingAreaIdentityTV
+{
+  OCT1               elementIdentifier,
+  HEX1               mccDigit1,
+  HEX1               mccDigit2,
+  HEX1               mccDigit3,
+  HEX1               mncDigit3,
+  HEX1               mncDigit1,
+  HEX1               mncDigit2,
+  OCT2               tAC
+} with {
+  variant "PRESENCE (elementIdentifier = '52'O)"
+}
+
+// 9.9.3.33
+type record TrackingAreaIdentityListTLV
+{
+  OCT1                            elementIdentifier,
+  TrackingAreaIdentityListLV      trackingAreaIdentityListsLV
+} with {
+  variant "PRESENCE (elementIdentifier = '54'O)"
+} 
+
+type record TrackingAreaIdentityListLV
+{
+  LIN1         lengthIndicator,
+  TAI_Lists    trackingAreaIdentityLists
+} with {
+  variant (lengthIndicator) "LENGTHTO (trackingAreaIdentityLists)"
+}
+
+type record of TAI_List TAI_Lists; 
+
+type union TAI_List {
+  TAI_List000  list00,
+  TAI_List001  list01,
+  TAI_List010  list10     
+} with {
+  variant  "TAG
+  (
+   list00,   typeOfList = '00'B; 
+   list01,   typeOfList = '01'B;
+   list10,   typeOfList = '10'B;
+  )"
+} //only 00 is supported
+
+type record TAI_List000
+{
+  integer     nrOfElements,
+  BIT2        typeOfList,
+  BIT1        spare,  //0
+  HEX1        mccDigit1,
+  HEX1        mccDigit2,
+  HEX1        mccDigit3,
+  HEX1        mncDigit3,
+  HEX1        mncDigit1,
+  HEX1        mncDigit2,
+  OCT2        tAC1,
+  TAC_List    additional_TACs optional    
+} with {
+  variant (nrOfElements) "FIELDLENGTH(5)";
+  variant (nrOfElements) "LENGTHTO (additional_TACs)";
+  variant (nrOfElements) "UNIT (elements)";
+};
+
+type record of OCT2 TAC_List;
+
+type record TAI_List001
+{
+  integer     nrOfElements, //0
+  BIT2        typeOfList,
+  BIT1        spare,  //0
+  HEX1        mccDigit1,
+  HEX1        mccDigit2,
+  HEX1        mccDigit3,
+  HEX1        mncDigit3,
+  HEX1        mncDigit1,
+  HEX1        mncDigit2,  
+  OCT2        tAC1  
+} with {
+  variant (nrOfElements) "FIELDLENGTH(5)"     
+}
+
+type record TAI_List010
+{
+  integer           nrOfElements,
+  BIT2              typeOfList,
+  BIT1              spare,  //0
+  MCC_MNC_TAC       mCC_MNC_TAC1,     
+  MCC_MNC_TAC_List  additional_MCC_MNC_TACs optional
+} with {
+  variant (nrOfElements) "FIELDLENGTH(5)";
+  variant (nrOfElements) "LENGTHTO (additional_MCC_MNC_TACs)";
+  variant (nrOfElements) "UNIT (elements)"
+}
+
+type record of MCC_MNC_TAC MCC_MNC_TAC_List;
+
+type record MCC_MNC_TAC
+{
+  HEX1        mccDigit1,
+  HEX1        mccDigit2,
+  HEX1        mccDigit3,
+  HEX1        mncDigit3,
+  HEX1        mncDigit1,
+  HEX1        mncDigit2,  
+  OCT2        tAC  
+}
+
+// 9.9.3.34
+type record UENetworkCapabilityTLV
+{
+  OCT1                            elementIdentifier,
+  UENetworkCapabilityLV           uENetworkCapabilityLV
+}with {
+  variant "PRESENCE (elementIdentifier = '58'O)"
+} 
+
+type record UENetworkCapabilityLV
+{
+  LIN1                  lengthIndicator,    //2..13
+  UENetworkCapabilityV  uENetworkCapabilityV
+} with {
+  variant (lengthIndicator) "LENGTHTO (uENetworkCapabilityV)"
+}
+
+type record UENetworkCapabilityV    // Supported algorithms are EEA0, EEA1 and EIA1
+{
+  BIT8     eEA,
+  BIT8     eIA,  
+  BIT8     uEA         optional,  
+  BIT7     uIA         optional,
+  BIT1     uCS2        optional,//4. octet
+  BIT1     nF          optional,
+  BIT1     vCC         optional,
+  BIT1     lCS         optional,
+  BIT1     lPP         optional,
+  BIT1     aCC_CSFB    optional,
+  BIT1     h245_ASH    optional,
+  BIT1     proSe       optional,
+  BIT1     proSe_dd    optional,//5. octet
+  BIT1     proSe_dc    optional,
+  BIT1     proSe_relay optional,
+  BIT1     cP_CIoT     optional,
+  BIT1     uP_CIoT     optional,
+  BIT1     s1_Udata    optional,
+  BIT1     eRwoPDN     optional, 
+  BIT1     hC_CP_CIoT  optional,
+  BIT1     ePCO        optional,//6. octet //0
+  BIT1     multipleDRB optional,
+  BIT1     v2XPC5      optional,
+  BIT1     restrictEC  optional,
+  BIT1     cPbackoff   optional,
+  BIT1     dCNR        optional,
+  BIT1     n1Mode      optional,
+  BIT1     sGC         optional,
+  BIT1     spare1      optional,
+  octetstring spare length (0..6) optional //0
+}
+
+// 9.9.3.35
+type record UE_RadioCapabilityInfoUpdateNeededTV
+{
+  BIT1    uRC_upd,
+  BIT3    spare,
+  BIT4    elementIdentifier   
+} with{
+  variant "PRESENCE (elementIdentifier = '1010'B)"
+}
+
+// 9.9.3.36
+type record UESecurityCapabilityLV  // Supported algorithms are EEA0, EEA1 and EIA1
+{
+  LIN1              lengthIndicator,
+  BIT8              eEA,    
+  BIT8              eIA, 
+  BIT8              uEA    optional,
+  BIT7              uIA    optional,
+  BIT1              spare2 optional,
+  BIT7              gEA    optional,
+  BIT1              spare3 optional
+} with { 
+  variant (lengthIndicator) "LENGTHTO (eEA,eIA,uEA,uIA,spare2,gEA,spare3)"
+}
+
+// 9.9.3.37 - 10.5.3.13/24.008
+type record EmergencyNumber{
+  LIN1        lengthOfEmergencyNumber,
+  BIT5        emergencyServiceCategoryValue,
+  BIT3        spare,
+  octetstring emergencyNumberDigits  
+} with { 
+  variant (lengthOfEmergencyNumber) "LENGTHTO( emergencyServiceCategoryValue,spare,emergencyNumberDigits )"};
+
+type record of EmergencyNumber EmergencyNumberList with { variant "" }; 
+
+type record EmergencyNumberListTLV {
+  OCT1                elementIdentifier,
+  LIN1                lengthIndicator, //  
+  EmergencyNumberList emergencyNumberList 
+} with { 
+  variant "PRESENCE (elementIdentifier = '34'O)"
+  variant (lengthIndicator) "LENGTHTO( emergencyNumberList )"};
+
+// 9.9.3.37A The decode and details of this IE are FFS
+type record ExtendedEmergencyNumber{
+  LIN1        lengthOfExtendedEmergencyNumber,
+  octetstring extendedEmergencyNumber  
+} with { 
+  variant (lengthOfExtendedEmergencyNumber) "LENGTHTO( extendedEmergencyNumber )"};
+
+type record of ExtendedEmergencyNumber ExtendedEmergencyNumberList with { variant "" }; 
+
+type record ExtendedEmergencyNumberListTLV {
+  OCT1                        elementIdentifier,
+  LIN1                        lengthIndicator,
+  ExtendedEmergencyNumberList extendedEmergencyNumberList
+} with { 
+  variant (lengthIndicator) "LENGTHTO( extendedEmergencyNumberList )"
+};
+
+// 9.9.3.38
+type record CLITLV
+{
+  OCT1              elementIdentifier,
+  CLILV             cLILV
+
+} with { variant "PRESENCE (elementIdentifier = '60'O)"; };
+
+type record CLILV
+{
+  LIN1              lengthIndicator,
+  CLI_Value         cLI_Value
+} with {
+  variant (lengthIndicator) "LENGTHTO (cLI_Value)" 
+}
+
+type record CLI_Value  //10.5.4.9/24.008
+{
+  BIT4          numberingPlanId,
+  BIT3          typeOfNumber,
+  BIT1          extensionBit,
+  BIT2          screeningIndicator optional,
+  BIT3          spare optional, //'000'
+  BIT2          presentationIndicator optional,
+  BIT1          extensionBit2 optional,  //'1'B
+  hexstring     digits optional
+} with {
+  variant (screeningIndicator,spare,presentationIndicator,extensionBit2)"PRESENCE(extensionBit = '0'B)"; 
+  variant "PADDING(yes)";
+  variant "PADDING_PATTERN('1111'B)"
+}
+
+// 9.9.3.39
+type record SS_CodeTV
+{
+  OCT1        elementIdentifier,
+  OCT1        sS_CodeValue
+} with{
+  variant "PRESENCE (elementIdentifier = '61'O)"
+}
+
+// 9.9.3.40
+type record LCS_IndicatorTV
+{
+  OCT1         elementIdentifier,
+  OCT1         lCS_IndicatorValue    
+} with {
+  variant "PRESENCE (elementIdentifier = '62'O)"
+}; 
+
+// 9.9.3.41
+type record LCS_ClientIdentityTLV
+{
+  OCT1                      elementIdentifier,
+  LCS_ClientIdentityLV      lCS_ClientIdentityLV
+
+} with { variant "PRESENCE (elementIdentifier = '63'O)"; };
+
+type record LCS_ClientIdentityLV
+{
+  LIN1            lengthIndicator,
+  octetstring     LCS_ClientIdentity length (1..255)
+} with {
+  variant (lengthIndicator) "LENGTHTO (LCS_ClientIdentity)" 
+}
+
+// 9.9.3.42
+type OCT1 Generic_MessageContainerTypeV
+
+// 9.9.3.43
+type record Generic_MessageContainerLVE
+{
+  LIN2_BO_LAST      lengthIndicator,
+  octetstring       content length (1..65535)
+} with { 
+  variant (lengthIndicator) "LENGTHTO (content)"
+}
+
+// 9.9.3.44 - 10.5.5.28/24.008
+type record VoiceDomainPrefandUEsettingsTLV {
+  OCT1                elementIdentifier,
+  LIN1                lengthIndicator,  
+  BIT2                voiceDomainPrefforEUTRAN,
+  BIT1                uEsUsageSettings,
+  BIT5                spare 
+} with { 
+  variant "PRESENCE (elementIdentifier = '5D'O)"
+  variant (lengthIndicator) "LENGTHTO(voiceDomainPrefforEUTRAN,uEsUsageSettings,spare)"
+};
+
+// 9.9.3.45 
+type record GUTI_TypeTV
+{
+  BIT1      gUTI_Type,
+  BIT3      spare,
+  BIT4      elementIdentifier      
+} with{
+  variant "PRESENCE (elementIdentifier = '1110'B)"
+}
+
+// 9.9.3.46 - 10.5.5.32/24.008
+type record ExtendedDRXParametersTLV
+{
+  OCT1       elementIdentifier,
+  LIN1       lengthIndicator,
+  BIT4       eDRXvalue,
+  BIT4       pagingTimeWindow
+} with{
+  variant "PRESENCE (elementIdentifier = '6E'O)"
+  variant (lengthIndicator) "LENGTHTO (eDRXvalue,pagingTimeWindow)";
+}
+
+// 9.9.3.47
+type record ControlPlaneServiceTypeTV
+{
+  ControlPlaneServiceTypeV controlPlaneServiceType,
+  BIT4             elementIdentifier  //??
+}
+
+type record ControlPlaneServiceTypeV
+{
+  BIT3 controlPlaneServiceTypeValue,
+  BIT1 activeFlag
+}
+
+// 9.9.3.48 - 10.5.5.35/24.008
+type record DCNIDTLV
+{
+  OCT1       elementIdentifier,
+  LIN1       lengthIndicator,
+  OCT2       dCNIDvalue
+} with{
+  variant "PRESENCE (elementIdentifier = '65'O)"
+  variant (lengthIndicator) "LENGTHTO (dCNIDvalue)";
+}
+
+// 9.9.3.49- 10.5.5.37/24.008
+type record Non3GPP_NW_ProvidedPoliciesTV
+{
+  BIT1       n3EN_Indicator,
+  BIT3       spare,
+  BIT4       elementIdentifier
+} with{
+  variant "PRESENCE (elementIdentifier = '1101'B)"
+}
+
+// 9.9.3.50
+type record HashTLV
+{
+  OCT1       elementIdentifier,
+  LIN1       lengthIndicator,
+  OCT8       hashMMEvalue
+} with{
+  variant "PRESENCE (elementIdentifier = '4F'O)"
+  variant (lengthIndicator) "LENGTHTO (hashMMEvalue)";
+}
+
+// 9.9.3.51
+type record ReplayedNASMessageContainerTLVE
+{
+  OCT1        elementIdentifier,
+  LIN1        lengthIndicator,
+  octetstring contents length (1..65535)
+} with{
+  variant "PRESENCE (elementIdentifier = '79'O)"
+  variant (lengthIndicator) "LENGTHTO (contents)" 
+}
+
+// 9.9.3.52
+type record NetworkPolicyTV
+{
+  BIT1       redirPolicy,
+  BIT3       spare,
+  BIT4       elementIdentifier
+} with{
+  variant "PRESENCE (elementIdentifier = '1100'B)"
+}
+
+// 9.9.3.53
+type record UEAdditionalSecurityCapabilityTLV
+{
+  OCT1        elementIdentifier,
+  LIN1        lengthIndicator,
+  UEAdditionalSecurityCapabilityV uEAdditionalSecurityCapabilityV
+} with { 
+  variant "PRESENCE (elementIdentifier = '6F'O)"
+  variant (lengthIndicator) "LENGTHTO (uEAdditionalSecurityCapabilityV)"
+}
+
+type record UEAdditionalSecurityCapabilityV
+{
+  BIT1              fiveG_eA7,    
+  BIT1              fiveG_eA6,    
+  BIT1              fiveG_eA5,    
+  BIT1              fiveG_eA4,    
+  BIT1              fiveG_eA3_128,    
+  BIT1              fiveG_eA2_128,    
+  BIT1              fiveG_eA1_128,    
+  BIT1              fiveG_eA0,    
+  BIT1              fiveG_eA15,    
+  BIT1              fiveG_eA14,    
+  BIT1              fiveG_eA13,    
+  BIT1              fiveG_eA12,    
+  BIT1              fiveG_eA11,    
+  BIT1              fiveG_eA10,    
+  BIT1              fiveG_eA9,    
+  BIT1              fiveG_eA8,    
+  BIT1              fiveG_iA7,    
+  BIT1              fiveG_iA6,    
+  BIT1              fiveG_iA5,    
+  BIT1              fiveG_iA4,    
+  BIT1              fiveG_iA3_128,    
+  BIT1              fiveG_iA2_128,    
+  BIT1              fiveG_iA1_128,    
+  BIT1              fiveG_iA0,    
+  BIT1              fiveG_iA15,    
+  BIT1              fiveG_iA14,    
+  BIT1              fiveG_iA13,    
+  BIT1              fiveG_iA12,    
+  BIT1              fiveG_iA11,    
+  BIT1              fiveG_iA10,    
+  BIT1              fiveG_iA9,    
+  BIT1              fiveG_iA8    
+}
+
+// 9.9.3.54 3GPP TS 24.501 9.10.3.52
+type record UEStatusTLV
+{
+  OCT1        elementIdentifier,
+  LIN1        lengthIndicator,
+  UEStatusV   uEStatusV
+} with { 
+  variant "PRESENCE (elementIdentifier = '6D'O)"
+  variant (lengthIndicator) "LENGTHTO (uEStatusV)"
+}
+
+type record UEStatusV
+{
+  BIT1 s1ModeReg,
+  BIT1 n1ModeReg,
+  BIT5 spare
+}
+
+//=================================================================    
+// EPS Session Management (ESM) information elements - 9.9.4/24.301 
+//=================================================================
+
+
+// 9.9.4.1 - 10.5.6.1/24.008 
+type record AccessPointNameTLV 
+{
+  OCT1                      elementIdentifier,
+  AccessPointNameLV         accessPointNamevalue
+} with{
+  variant "PRESENCE (elementIdentifier = '28'O)"
+}
+
+type record AccessPointNameLV 
+{ 
+  LIN1               lengthIndicator,
+  octetstring        accessPointNameValue length (1..100)
+} with{ 
+  variant (lengthIndicator) "LENGTHTO (accessPointNameValue)";
+} 
+
+
+// 9.9.4.2
+type record APN_AggregateMaximumBitRateTLV
+{ 
+  OCT1                      elementIdentifier,
+  LIN1                      lengthIndicator,
+  AggregateMaximumBitRateV  aggregateMaximumBitRateV
+} with{ 
+  variant "PRESENCE (elementIdentifier = '5E'O)"
+  variant (lengthIndicator) "LENGTHTO (aggregateMaximumBitRateV)";
+} 
+
+type record AggregateMaximumBitRateV
+{
+  OCT1         aPN_AMBR_Downlink,
+  OCT1         aPN_AMBR_Uplink,
+  OCT1         aPN_AMBR_DownlinkExt  optional,
+  OCT1         aPN_AMBR_UplinkExt    optional,
+  OCT1         aPN_AMBR_DownlinkExt2 optional,
+  OCT1         aPN_AMBR_UplinkExt2   optional
+}
+
+// 9.9.4.2a 10.5.6.19/24.008
+type record ConnectivityTypeTV
+{
+  BIT4     connectivityTypeValue,
+  BIT4     elementIdentifier 
+} with{
+  variant "PRESENCE (elementIdentifier = '1011'B)"
+}
+
+// 9.9.4.3
+type record EPS_QualityOfServiceTLV
+{
+  OCT1                      elementIdentifier,
+  LIN1                      lengthIndicator,
+  EPS_QualityOfServiceV     ePS_QualityOfServiceV
+} with{ 
+  variant "PRESENCE (elementIdentifier = '5B'O)"
+  variant (lengthIndicator) "LENGTHTO (ePS_QualityOfServiceV)";
+}
+
+
+type record EPS_QualityOfServiceLV
+{
+  LIN1                      lengthIndicator,
+  EPS_QualityOfServiceV     ePS_QualityOfServiceV
+} with{ 
+  variant (lengthIndicator) "LENGTHTO (ePS_QualityOfServiceV)";
+}
+
+type record EPS_QualityOfServiceV 
+{ 
+  OCT1   qCI, 
+  OCT1   maxBitRateUplink              optional,  
+  OCT1   maxBitRateDownlink            optional, 
+  OCT1   guaranteedBitRateUplink       optional,
+  OCT1   guaranteedBitRateDownlink     optional, 
+  OCT1   maxBitRateUplinkExt           optional,
+  OCT1   maxBitRateDownlinkExt         optional,
+  OCT1   guaranteedBitRateUplinkExt    optional,
+  OCT1   guaranteedBitRateDownlinkExt  optional,
+  OCT1   maxBitRateUplinkExt2          optional,
+  OCT1   maxBitRateDownlinkExt2        optional,
+  OCT1   guaranteedBitRateUplinkExt2   optional,
+  OCT1   guaranteedBitRateDownlinkExt2 optional
+} 
+
+// 9.9.4.4
+type record ESM_CauseTV
+{
+  OCT1        elementIdentifier,
+  ESM_CauseV  causeValue
+} with{
+  variant "PRESENCE (elementIdentifier = '58'O)"
+}
+
+type record ESM_CauseV
+{
+  OCT1    causeValue
+}
+
+// 9.9.4.5
+type record ESM_InformationTransferFlagTV
+{
+  BIT1     eIT,
+  BIT3     spare,
+  BIT4     elementIdentifier
+} with{
+  variant "PRESENCE (elementIdentifier = '1101'B)"
+}
+
+// 9.9.4.6
+type record Linked_EPS_BearerIdentityV
+{
+  BIT4     linked_EPS_BearerIdentityValue  
+}
+
+// 9.9.4.7 - 10.5.6.9/24.008
+type record LLC_SAPITV
+{
+  OCT1               elementIdentifier,
+  LLC_SAPIV          valueField
+} with { variant "PRESENCE (elementIdentifier = '32'O)"; };
+
+
+type record  LLC_SAPIV
+{
+  BIT4               valueField,
+  BIT4               spare        //'0000'B
+};
+
+// 9.9.4.7A
+type record NotificationIndicatorLV
+{
+  LIN1               lengthIndicator,
+  BIT8               valueField
+} with {
+  variant (lengthIndicator) "LENGTHTO (valueField)"
+};
+
+// 9.9.4.8 - 10.5.6.11/24.008
+type record PacketFlowIDTLV
+{
+  OCT1               elementIdentifier,
+  LIN1               lengthIndicator,
+  PacketFlowIDV      valueField
+} with {
+  variant "PRESENCE (elementIdentifier = '34'O)";
+  variant (lengthIndicator) "LENGTHTO (valueField)"
+};
+
+
+type record PacketFlowIDV
+{
+  BIT7               valueField,
+  BIT1               spare   // '0'B
+};
+
+// 9.9.4.9
+type record PDN_AddressLV
+{  
+  LIN1                     lengthIndicator,
+  BIT3                     typeValue,
+  BIT5                     spare,
+  octetstring              addressInformation length (4..12)
+} with {
+  variant (lengthIndicator) "LENGTHTO (typeValue,spare,addressInformation)"
+}
+
+// 9.9.4.10
+type record PDN_TypeV
+{
+  BIT3                     pDN_TypeValue,
+  BIT1                     spare  //'0'B
+}
+
+// 9.9.4.11 - 10.5.6.3/24.008
+type record ProtocolConfigOptionsTLV
+{
+  OCT1                      elementIdentifier,
+  ProtocolConfigOptionsLV   protocolConfigOptions
+} with{
+  variant "PRESENCE (elementIdentifier = '27'O)"
+}
+
+type record ProtocolConfigOptionsLV
+{
+  LIN1                    lengthIndicator,
+  ProtocolConfigOptionsV  protocolConfigOptionsV
+} with {
+  variant (lengthIndicator) "LENGTHTO (protocolConfigOptionsV)"
+}
+
+type record ProtocolConfigOptionsV
+{
+  BIT3                          configProtocol,
+  BIT4                          spare,
+  BIT1                          extensionField,
+  ProtocolIDs_and_ContainerIDs  protocolIDs_and_ContainerIDs optional
+}
+
+type record length (1..250) of  ProtocolID_or_ContainerID  ProtocolIDs_and_ContainerIDs;
+
+type record ProtocolID_or_ContainerID
+{
+  OCT2         protocolID_or_ContainerID,
+  LIN1         lengthIndicator,
+  octetstring  protID_orContID_Contents
+} with {
+  variant (lengthIndicator) "LENGTHTO (protID_orContID_Contents)"
+}
+
+// 9.9.4.12 -10.5.6.5/24.008
+type record  QoSTLV
+{
+  OCT1               elementIdentifier,
+  QoSLV              qoSLV
+} with { variant "PRESENCE (elementIdentifier = '30'O)"; };
+
+
+type record  QoSLV
+{
+  LIN1               lengthIndicator,
+  QoSV               qoSV
+} with { variant (lengthIndicator) "LENGTHTO (qoSV)"};
+
+
+type record QoSV
+{
+  BIT3               reliabilityClass,
+  BIT3               delayClass,
+  BIT2               spare1,  // '00'B
+  BIT3               precedenceClass,
+  BIT1               spare2, //'0'B
+  BIT4               peakThroughput,
+  BIT5               meanThroughput,
+  BIT3               spare3, //'000'B
+  BIT3               deliverErroneusSDU            optional, //opt because of V97
+  BIT2               deliveryOrder                 optional, //opt because of V97
+  BIT3               trafficClass                  optional, //opt because of V97
+  OCT1               maxSDUSize                    optional, //opt because of V97
+  OCT1               maxBitrateUplink              optional, //opt because of V97
+  OCT1               maxBitrateDownlink            optional, //opt because of V97
+  BIT4               sduErrorRatio                 optional, //opt because of V97
+  BIT4               residualBER                   optional, //opt because of V97 //oct10
+  BIT2               trafficHandlingPriority       optional, //opt because of V97
+  BIT6               transferDelay                 optional, //opt because of V97
+  OCT1               guaranteedBitRateUplink       optional, //opt because of V97
+  OCT1               guaranteedBitRateDownlink     optional, //opt because of V97 //oct13
+  BIT4               sourceStatisticsDescriptor    optional, //opt because of V97
+  BIT1               signallingIndication          optional, //opt because of V97
+  BIT3               spare4                        optional, //opt because of V97 // '000'B //oct14
+  OCT1               maxBitrateDownlinkExt         optional, //opt because of V97
+  OCT1               guaranteedBitRateDownlinkExt  optional, //opt because of V97
+  OCT1               maxBitrateUplinkExt           optional, //opt because of V97
+  OCT1               guaranteedBitRateUplinkExt    optional, //opt because of V97 //oct 18
+  OCT1               maxBitrateDownlinkExt2        optional, 
+  OCT1               guaranteedBitRateDownlinkExt2 optional, 
+  OCT1               maxBitrateUplinkExt2          optional, 
+  OCT1               guaranteedBitRateUplinkExt2   optional   //oct 22
+
+};
+// 9.9.4.13 - 10.5.7.2/24.008
+type record RadioPriorityTV {
+  RadioPriorityV     valueField,
+  BIT4               elementIdentifier
+} with { variant "PRESENCE (elementIdentifier = '1000'B)"; };
+
+
+type record RadioPriorityV
+{
+  BIT3               priorityLevelValue,
+  BIT1               spare  // '0'B
+};
+
+// 9.9.4.13A
+type record ReAttemptIndicatorTLV
+{
+  OCT1                       elementIdentifier,
+  ReAttemptIndicatorLV       reAttemptIndicatorLV 
+} with {
+  variant "PRESENCE (elementIdentifier = '6B'O)"
+}
+
+type record ReAttemptIndicatorLV
+{
+  LIN1                       lengthIndicator,
+  ReAttemptIndicatorV        valueField
+} with { variant (lengthIndicator) "LENGTHTO(valueField)"};
+
+type record ReAttemptIndicatorV
+{
+  BIT1      rATC,
+  BIT1      ePLMNC,
+  BIT6      spare //O  
+}
+
+// 9.9.4.14 - 10.5.6.17/24.008
+type record RequestTypeV
+{
+  BIT3         requestTypeValue,
+  BIT1         spare  //'0'B
+}
+
+// 9.9.4.15
+type TrafficFlowTemplateLV TrafficFlowAggregateDescriptionLV
+
+// 9.9.4.16 - 10.5.6.12/24.008
+type record TrafficFlowTemplateLV
+{
+  LIN1                         lengthIndicator,
+  TrafficFlowTemplateV         valueField
+} with { variant (lengthIndicator) "LENGTHTO(valueField)"};
+
+type record TrafficFlowTemplateTLV
+{
+  OCT1                         elementIdentifier,
+  LIN1                         lengthIndicator,
+  TrafficFlowTemplateV         valueField
+} with {
+   variant (lengthIndicator) "LENGTHTO(valueField)"
+   variant  "PRESENCE (elementIdentifier = '36'O)" 
+};
+
+
+type union TrafficFlowTemplateV
+{
+  TrafficFlowTemplateV_CreateAddReplaceTFT
+  trafficFlowTemplateV_CreateAddReplaceTFT,
+  TrafficFlowTemplateV_DeletePacketFilter
+  trafficFlowTemplateV_DeletePacketFilter,
+  TrafficFlowTemplateV_Delete_Existing_TFT_or_No_TFT_Operation
+  trafficFlowTemplateV_Delete_Existing_TFT_or_No_TFT_Operation
+};
+
+type record TrafficFlowTemplateV_CreateAddReplaceTFT
+{
+  integer                                numberOfPacketFilters,
+  BIT1                                   eBIT,
+  BIT3                                   operationCodeTFT,  //'001'B or
+  PacketFilterList_CreateAddReplaceTFT   packetFilterList_CreateAddReplaceTFT,
+  ParametersList                         parametersList            optional
+} with {
+  variant "PRESENCE (operationCodeTFT  = '001'B, //  Create New TFT
+                     operationCodeTFT  = '011'B, //  Add packet filters to existing TFT
+                     operationCodeTFT  = '100'B  //  Replace packet filters in existing TFT
+  )";
+  variant(parametersList)       "PRESENCE(eBIT = '1'B)";
+  variant(numberOfPacketFilters)"FIELDLENGTH(4)";
+  variant(numberOfPacketFilters)"LENGTHTO(packetFilterList_CreateAddReplaceTFT)";
+  variant(numberOfPacketFilters)"UNIT(elements)";
+};
+
+type record TrafficFlowTemplateV_DeletePacketFilter
+{
+  integer                                numberOfPacketFilters,
+  BIT1                                   eBIT,
+  BIT3                                   operationCodeTFT,
+  PacketFilterList_DeletePacketFilter    packetFilterList_DeletePacketFilter,
+  ParametersList                         parametersList         optional
+} with {
+  variant "PRESENCE (operationCodeTFT = '101'B)"  // Delete packet filters from existing TFT
+  variant(parametersList) "PRESENCE(eBIT = '1'B)";
+  variant(numberOfPacketFilters)"FIELDLENGTH(4)";
+  variant(numberOfPacketFilters)"LENGTHTO(packetFilterList_DeletePacketFilter)";
+  variant  (numberOfPacketFilters)"UNIT(elements)";
+};
+
+
+type record TrafficFlowTemplateV_Delete_Existing_TFT_or_No_TFT_Operation
+{
+  BIT4                         numberOfPacketFilters, //'0000'B
+  // numberOfPacketFilters is meaningless here since there is no PacketFilterList
+  BIT1                         eBIT,
+  BIT3                         operationCodeTFT,      // '010'B  or '110'B
+  ParametersList               parametersList   optional
+} with {
+  variant "PRESENCE (operationCodeTFT = '000'B,  // ignore this IE
+                     operationCodeTFT = '010'B,  // delete existing TFT
+                     operationCodeTFT = '110'B   // No TFT Operation
+  )";
+  variant (parametersList) "PRESENCE(eBIT = '1'B)"
+};
+
+type record of PacketFilter PacketFilterList_CreateAddReplaceTFT;
+
+type record PacketFilter
+{
+  PacketFilterIdentifier       identifier,
+  OCT1                         evaluationPrecedence,
+  LIN1                         lengthIndicator,
+  octetstring                  contents
+} with { variant (lengthIndicator) "LENGTHTO (contents)"};
+
+
+type record of PacketFilterIdentifier  PacketFilterList_DeletePacketFilter;
+
+
+type OCT1  PacketFilterIdentifier;
+
+
+type record of Parameter ParametersList;
+
+
+type record Parameter
+{
+  OCT1               parameterIdentifier,
+  LIN1               lengthIndicator,
+  octetstring        contents
+} with { variant (lengthIndicator) "LENGTHTO (contents)"};
+
+// 9.9.4.17
+// 24.008 Linked TI - 10.5.6.7
+type record TransactionIdentifierTLV
+{
+  OCT1                            elementIdentifier,
+  TransactionIdentifierLV         transactionIdentifierLV
+} with {
+  variant "PRESENCE (elementIdentifier = '5D'O)"
+}
+
+type record TransactionIdentifierLV
+{
+  LIN1                     lengthIndicator,
+  TransactionIdentifierV   transactionIdentifierV
+} with { variant (lengthIndicator) "LENGTHTO (transactionIdentifierV)"};
+
+type record TransactionIdentifierV
+{
+  BIT4               spare,  //'0000'B
+  BIT3               tio,
+  BIT1               tiFlag,
+  TI_Extension       tIExtension  optional
+} with { variant (tIExtension)"PRESENCE(tio = '111'B)"}; //???
+
+type record        TI_Extension
+{
+  BIT7               tI_Value,
+  BIT1               tI_ExtBit         //'1'B
+};
+
+// 9.9.4.18
+// 24.008 - 10.5.6.20
+type record WLANOffloadAcceptabilityTV
+{
+  WLANOffloadAcceptabilityV valueField,
+  BIT4                      elementIdentifier
+} with { variant "PRESENCE (elementIdentifier = '1100'B)"; };
+
+type record WLANOffloadAcceptabilityV
+{
+  BIT1 eUTRAN_offloadAcceptabilityValue,
+  BIT1 uTRAN_offloadAcceptabilityValue,
+  BIT2 spare
+}
+
+// 9.9.4.19
+// 24.008 -  10.5.6.21 NBIFOM container
+type record NBIFOM_ContainerTLV
+{
+  OCT1                   elementIdentifier,
+  LIN1                   lengthIndicator,
+  NBIFOM_ParameterList   contents
+} with { variant "PRESENCE (elementIdentifier = '33'O)";
+  variant (lengthIndicator) "LENGTHTO (contents)" };
+
+// 6.1 - TS 24.161
+type record of NBIFOM_Parameter NBIFOM_ParameterList;
+
+type record NBIFOM_Parameter
+{
+  OCT1         parameterIdentifier,
+  LIN1         lengthIndicator,
+  NBIFOM_ParameterContents parameterContents
+} with {  variant (lengthIndicator) "LENGTHTO (parameterContents)";
+  variant (parameterContents) "CROSSTAG(
+    nBIFOM_Mode, parameterIdentifier = '01'O;
+    nBIFOM_DefaultAccess, parameterIdentifier = '02'O;
+    nBIFOM_Status, parameterIdentifier = '03'O;
+    nBIFOM_RoutingRules, parameterIdentifier = '04'O;
+    nBIFOM_IPFlowMapping, parameterIdentifier = '05'O;
+    nBIFOM_RANRulesHandling, parameterIdentifier = '06'O;
+    nBIFOM_RANRulesStatus, parameterIdentifier = '07'O;
+    nBIFOM_AccessUsabilityIndication, parameterIdentifier = '08'O;
+    unknownParameter, OTHERWISE)"};
+
+type union NBIFOM_ParameterContents
+{
+  OCT1 nBIFOM_Mode,
+  OCT1 nBIFOM_DefaultAccess,
+  OCT1 nBIFOM_Status,
+  NBIFOM_RoutingRules nBIFOM_RoutingRules,
+  NBIFOM_RoutingRules nBIFOM_IPFlowMapping,
+  OCT1 nBIFOM_RANRulesHandling,
+  OCT1 nBIFOM_RANRulesStatus,
+  NBIFOM_AccessUsabilityIndication nBIFOM_AccessUsabilityIndication,
+  octetstring unknownParameter
+};
+
+type record of NBIFOM_RoutingRule NBIFOM_RoutingRules
+type record NBIFOM_RoutingRule
+{
+  LIN1         lengthIndicator,
+  OCT1         routingRuleIdentifier,
+  BIT3         operationCode,
+  BIT3         spare,
+  BIT2         routingAccess,
+  OCT1         routingRulePrioroty,
+  RoutingFilter routingFilter
+} with {  variant (lengthIndicator) "LENGTHTO (routingRuleIdentifier,operationCode,
+  spare,routingAccess,routingRulePrioroty,routingFilter)";}
+
+type record RoutingFilter
+{
+  BIT1 flagA,
+  BIT1 flagB,
+  BIT1 flagC,
+  BIT1 flagD,
+  BIT1 flagE,
+  BIT1 flagF,
+  BIT1 flagG,
+  BIT1 flagH,
+  BIT1 flagI,
+  BIT1 flagJ,
+  BIT1 flagK,
+  BIT1 flagL,
+  BIT1 flagM,
+  BIT1 flagN,
+  bitstring flagsZ length(18),
+  OCT4  sourceIPv4Address optional,
+  OCT4  destinationIPv4Address optional,
+  OCT16 sourceIPv6Address optional,
+  OCT16 destinationIPv6Address optional,
+  OCT1  sourceAddressPrefixLength optional,
+  OCT1  destinationAddressPrefixLength optional,
+  OCT4  iPSecSecurityParameterIndex optional,
+  OCT1  protocolTypeNextHeader optional,
+  OCT4  startSourcePortRange optional,
+  OCT4  endSourcePortRange optional,
+  OCT4  startDestinationPortRange optional,
+  OCT4  endDestinationPortRange optional,
+  OCT1  typeOfService optional,
+  OCT4  flowLabel optional
+}  with { variant (sourceIPv4Address)  "PRESENCE(flagA = '1'B)";
+  variant (destinationIPv4Address)  "PRESENCE(flagB = '1'B)";
+  variant (sourceIPv6Address)  "PRESENCE(flagC = '1'B)";
+  variant (destinationIPv6Address)  "PRESENCE(flagD = '1'B)";
+  variant (sourceAddressPrefixLength)  "PRESENCE(flagE = '1'B)";
+  variant (destinationAddressPrefixLength)  "PRESENCE(flagF = '1'B)";
+  variant (iPSecSecurityParameterIndex)  "PRESENCE(flagG = '1'B)";
+  variant (protocolTypeNextHeader)  "PRESENCE(flagH = '1'B)";
+  variant (startSourcePortRange)  "PRESENCE(flagI = '1'B)";
+  variant (endSourcePortRange)  "PRESENCE(flagJ = '1'B)";
+  variant (startDestinationPortRange)  "PRESENCE(flagK = '1'B)";
+  variant (endDestinationPortRange)  "PRESENCE(flagL = '1'B)";
+  variant (typeOfService)  "PRESENCE(flagM = '1'B)";
+  variant (flowLabel)  "PRESENCE(flagN = '1'B)";
+}
+
+type record NBIFOM_AccessUsabilityIndication
+{
+  BIT2 threeGPPAccessUsableValue,
+  BIT2 wLANAccessUsableValue,
+  BIT4 spare
+}
+
+// 9.9.4.20
+type record RemoteUEContextListTLVE
+{
+  OCT1                   elementIdentifier,
+  LIN1                   lengthIndicator,
+  LIN1                   nrOfContents,
+  RemoteUEContextList    contents
+} with {
+  variant (lengthIndicator) "LENGTHTO (nrOfContents, contents)" 
+  variant (nrOfContents) "LENGTHTO (contents)";
+  variant (nrOfContents) "UNIT (elements)";
+};
+
+type record of RemoteUEContext RemoteUEContextList;
+
+type record RemoteUEContext
+{
+  LIN1               lengthIndicator,
+  LIN1               numberOfUserIDs,
+  RemoteUserIDList   userIDList,
+  BIT3               addressType optional,
+  BIT5               spare optional,
+  AddressInformation addressInformation optional
+} with {
+  variant (lengthIndicator) "LENGTHTO (numberOfUserIDs,userIDList,addressType,spare,addressInformation)";
+  variant (numberOfUserIDs)"LENGTHTO(userIDList)";
+  variant (numberOfUserIDs)"UNIT(elements)";
+  variant (addressInformation) "CROSSTAG(
+		ipv4, addressType = '001'B;
+		ipv6, addressType = '010'B)";
+  };
+
+type record of RemoteUserID RemoteUserIDList;
+
+type record RemoteUserID
+{
+  LIN1               lengthIndicator,
+  BIT3               typeOfUserInfo,
+  OddEvenInd_IdentityDigits   digits
+} with {
+  variant (lengthIndicator) "LENGTHTO (typeOfUserInfo,digits)";
+  variant (digits) "CROSSTAG(
+    encriptedIMSI, typeOfUserInfo = '001'B;
+    iMSI, typeOfUserInfo = '010'B;
+    mSISDN, typeOfUserInfo = '011'B;
+    iMEI, typeOfUserInfo = '100'B;
+    iMEI_SV, typeOfUserInfo = '101'B)";
+  };
+
+type union AddressInformation
+{
+  OCT6 ipv4,
+  OCT8 ipv6
+}
+
+type union OddEvenInd_IdentityDigits
+{
+  EncriptedIMSI encriptedIMSI,
+  IMSI iMSI,
+  MSISDN mSISDN,
+  IMEI iMEI,
+  IMEI_SV iMEI_SV
+}
+
+type record MSISDN
+{
+  BIT1               oddevenIndicator,       
+  hexstring          digits,
+  BIT4               fillerDigit  optional   // filler '1111'B 
+} with {
+  variant (fillerDigit) "PRESENCE (oddevenIndicator   = '0'B) "
+}
+
+type record EncriptedIMSI
+{
+  BIT1       oddevenIndicator,       
+  BIT4       spare,
+  bitstring  encriptedIMSI length(128)
+}
+
+// 9.9.4.21
+type record PKMF_AddressTLV
+{
+  OCT1               elementIdentifier,
+  LIN1               lengthIndicator,
+  BIT3               addressType,
+  BIT5               spare,
+  PKMF_Address       addressInformation optional
+} with {
+  variant (lengthIndicator) "LENGTHTO (addressType,spare,addressInformation)";
+  variant (addressInformation) "CROSSTAG(
+		ipv4, addressType = '001'B;
+		ipv6, addressType = '010'B)";
+}
+
+type union PKMF_Address
+{
+  OCT4  ipv4,
+  OCT16 ipv6
+}
+
+// 9.9.4.22
+type record HeaderCompressinConfigurationTLV
+{
+  OCT1               elementIdentifier,
+  LIN1               lengthIndicator,
+  HeaderCompressinConfigurationV headerCompressinConfiguration
+} with {
+  variant "PRESENCE (elementIdentifier = '66'O)";
+  variant (lengthIndicator) "LENGTHTO (headerCompressinConfiguration)"
+  };
+
+type record HeaderCompressinConfigurationV
+{
+  BIT1 p0x0002,
+  BIT1 p0x0003,
+  BIT1 p0x0004,
+  BIT1 p0x0006,
+  BIT1 p0x0102,
+  BIT1 p0x0103,
+  BIT1 p0x0104,
+  BIT1 spare,
+  OCT2 max_CID,
+  octetstring additionalHeaderCompression optional
+}
+
+// 9.9.4.23
+type record ControlPlaneOnlyIndicationTV
+{
+  BIT1 cPOI,
+  BIT3 spare,
+  BIT4 elementIdentifier
+} with { 
+  variant "PRESENCE (elementIdentifier = '1001'B)";
+}
+
+// 9.9.4.24
+type record UserDataContainerLVE
+{
+  LIN2_BO_LAST       lengthIndicator,
+  octetstring        contents
+} with { variant (lengthIndicator) "LENGTHTO(contents)"};
+
+// 9.9.4.25
+type record ReleaseAssistanceIndicationTV
+{
+  BIT2             dDX,
+  BIT2             spare,
+  BIT4             elementIdentifier
+} with { 
+  variant "PRESENCE (elementIdentifier = '1111'B)";
+}
+
+
+// 9.9.4.26 24.008 / 10.5.6.3A
+type record ExtendedProtocolConfigurationOptionsTLVE
+{
+  OCT1               elementIdentifier,
+  LIN2_BO_LAST       lengthIndicator,
+  octetstring        extendedProtocolConfigurationOptions length(1..65535)
+} with {
+  variant "PRESENCE (elementIdentifier = '7B'O)";
+  variant (lengthIndicator) "LENGTHTO (extendedProtocolConfigurationOptions)"
+  };
+
+// 9.9.4.27
+type record HeaderCompressionConfigurationStatusTLV
+{
+  OCT1               elementIdentifier,
+  LIN1               lengthIndicator,
+  HeaderCompressionConfigurationStatusV headerCompressionConfigurationStatus
+} with {
+  variant "PRESENCE (elementIdentifier = '68'O)";
+  variant (lengthIndicator) "LENGTHTO (headerCompressionConfigurationStatus)"
+};
+
+type record HeaderCompressionConfigurationStatusV
+{
+  BIT1              ebi0,
+  BIT1              ebi1,
+  BIT1              ebi2,
+  BIT1              ebi3,
+  BIT1              ebi4,
+  BIT1              ebi5,
+  BIT1              ebi6,
+  BIT1              ebi7,
+  BIT1              ebi8,
+  BIT1              ebi9,
+  BIT1              ebi10,
+  BIT1              ebi11,
+  BIT1              ebi12,
+  BIT1              ebi13,
+  BIT1              ebi14,
+  BIT1              ebi15
+}
+
+// 9.9.4.28
+type record ServingPLMNRateControlTLV
+{
+  OCT1               elementIdentifier,
+  LIN1               lengthIndicator,
+  LIN2_BO_LAST       servingPLMNRateControlValue
+} with {
+  variant "PRESENCE (elementIdentifier = '6E'O)";
+  variant (lengthIndicator) "LENGTHTO (servingPLMNRateControlValue)"
+};
+
+// 9.9.4.29
+type record Extended_APN_AMBR_TLV
+{
+  OCT1               elementIdentifier,
+  LIN1               lengthIndicator,
+  Extended_APN_AMBR_V  extended_APN_AMBR_Value
+} with {
+  variant "PRESENCE (elementIdentifier = '5F'O)";
+  variant (lengthIndicator) "LENGTHTO (extended_APN_AMBR_Value)"
+};
+
+type record Extended_APN_AMBR_V
+{
+  OCT1 unit_Extended_APN_AMBR_Downlink,
+  OCT2 extended_APN_AMBR_Downlink,
+  OCT1 unit_Extended_APN_AMBR_Uplink,
+  OCT2 extended_APN_AMBR_Uplink
+}
+
+// 9.9.4.30
+type record ExtendedEPSQoSTLV
+{
+  OCT1               elementIdentifier,
+  LIN1               lengthIndicator,
+  Extended_QoS_V     extended_QoS_Value
+} with {
+  variant "PRESENCE (elementIdentifier = '5C'O)";
+  variant (lengthIndicator) "LENGTHTO (extended_QoS_Value)"
+};
+
+type record Extended_QoS_V
+{
+  OCT1 unit_MaxBitRate,
+  OCT2 maxBitRate_Uplink,
+  OCT2 maxBitRate_Downlink,
+  OCT1 unit_GuaranteedBitRate,
+  OCT2 guaranteedBitRate_Uplink,
+  OCT2 guaranteedBitRate_Downlink
+}
+
+//=====================================
+// 8.2 EPS mobility management messages
+//=====================================
+
+// 8.2.1
+type record PDU_NAS_EPS_AttachAccept
+{
+  BIT4                           securityHeaderType,
+  BIT8                           messageType,
+  EPS_AttachResultV              ePS_AttachResult,
+  BIT4                           spare,
+  GPRSTimerV                     t3412,
+  TrackingAreaIdentityListLV     tAI_List,                 
+  ESM_MessageContainerLVE        eSM_MessageContainer,
+  EPS_MobileIdentityTLV          gUTI                        optional,
+  LocationAreaIdentificationTV   locationAreaIdentification  optional,
+  MobileIdentityTLV              msIdentity                  optional,
+  EMM_CauseTV                    eMMCause                    optional,
+  GPRSTimerTV                    t3402                       optional,
+  GPRSTimerTV                    t3423                       optional,
+  PLMN_ListTLV                   equivalentPLMNs             optional,
+  EmergencyNumberListTLV         emergencyNumberList         optional, 
+  EPS_NetworkFeatureSupportTLV   ePS_NetworkFeatureSupport   optional, 
+  AdditionalUpdateResultTV       additionalUpdateResult      optional,
+  GPRSTimer3TLV                  t3412_Extended              optional, 
+  GPRSTimer2TLV                  t3324                       optional,
+  ExtendedDRXParametersTLV       extendedDRXParameters       optional,
+  DCNIDTLV                       dNCID                       optional,
+  SMS_ServiceStatusTV            sMS_ServiceStatus           optional,
+  Non3GPP_NW_ProvidedPoliciesTV  non3GPP_NW_ProvidedPolicies optional,
+  GPRSTimer2TLV                  t3448                       optional,
+  NetworkPolicyTV                networkPolicy               optional,
+  GPRSTimer3TLV                  t3447                       optional,
+  ExtendedEmergencyNumberListTLV extendedEmergencyNumberList optional
+} with {
+  variant "TAG (t3402, elementIdentifier = '17'O;
+                t3423, elementIdentifier = '59'O;
+                t3412_Extended, elementIdentifier = '5E'O;
+                t3324, elementIdentifier = '6A'O;
+                t3448, elementIdentifier = '6B'O;
+                t3447, elementIdentifier = '6C'O; )";
+}
+
+// 8.2.2
+type record PDU_NAS_EPS_AttachComplete
+{
+  BIT4                             securityHeaderType,
+  BIT8                             messageType,
+  ESM_MessageContainerLVE          eSM_MessageContainer
+}
+
+// 8.2.3
+type record PDU_NAS_EPS_AttachReject
+{
+  BIT4                             securityHeaderType,
+  BIT8                             messageType,
+  EMM_CauseV                       emmCause,
+  ESM_MessageContainerTLVE         eSM_MessageContainer optional,
+  GPRSTimer2TLV                    t3346 optional,
+  GPRSTimer2TLV                    t3402 optional,
+  ExtendedEMM_CauseTV              extendedEmmCause optional
+} with {
+  variant "TAG (t3402, elementIdentifier = '16'O;
+                t3346, elementIdentifier = '5F'O;)";
+}
+
+// 8.2.4
+type record PDU_NAS_EPS_AttachRequest
+{
+  BIT4                           securityHeaderType,
+  BIT8                           messageType,
+  EPS_AttachTypeV                ePS_attachType,
+  NAS_KeySetIdentifierV          nasKeySetId,
+  EPS_MobileIdentityLV           ePSMobileId,
+  UENetworkCapabilityLV          uENetworkCapability,
+  ESM_MessageContainerLVE        eSM_MessageContainer,
+  P_TMSISignatureTV              old_P_TMSISignature           optional,
+  EPS_MobileIdentityTLV          additionalGUTI                optional,
+  TrackingAreaIdentityTV         lastVisitedRegisteredTAI      optional,
+  DRXParameterTV                 dRXParameter                  optional,
+  MSNetworkCapabilityTLV         mSNetworkCapability           optional,
+  LocationAreaIdentificationTV   oldLocationAreaIdentification optional,
+  TMSIStatusTV                   tMSIStatusTV                  optional,
+  MobileStationClassmark2_TLV    mobileStationClassmark2       optional,
+  MobileStationClassmark3_TLV    mobileStationClassmark3       optional,
+  SupportedCodecListTLV          supportedCodecList            optional, 
+  AdditionalUpdateTypeTV         additionalUpdateType          optional,
+  VoiceDomainPrefandUEsettingsTLV voiceDomainPrefandUEsettings optional,
+  DevicePropertiesTV             deviceProperties              optional,
+  GUTI_TypeTV                    oldGUTI_Type                  optional,
+  MS_NetworkFeatureSupportTV     mS_NetworkFeatureSupport      optional,
+  NetworkResourceIdentifierContainerTLV tMSIBasedNRIContainer  optional,
+  GPRSTimer2TLV                  t3324                         optional,
+  GPRSTimer3TLV                  t3412_Extended                optional,
+  ExtendedDRXParametersTLV       extendedDRXParameters         optional,
+  UEAdditionalSecurityCapabilityTLV uEAdditionalSecurityCapability optional
+} with {  
+  variant "TAG (mS_NetworkFeatureSupport, elementIdentifier = '1100'B;
+                deviceProperties, elementIdentifier = '1101'B; 
+                t3324, elementIdentifier = '6A'O;
+                t3412_Extended, elementIdentifier = '5E'O;)";
+}
+
+// 8.2.5
+type record PDU_NAS_EPS_AuthenticationFailure
+{
+  BIT4                           securityHeaderType,
+  BIT8                           messageType,
+  EMM_CauseV                     emmCause,
+  AuthenticationFailureParameterTLV authenticationFailureParameter  optional
+} with {
+  variant (authenticationFailureParameter) "PRESENCE (emmCause.causeValue ='15'O)"
+}
+
+
+// 8.2.6
+type record PDU_NAS_EPS_AuthenticationReject
+{
+  BIT4                           securityHeaderType,
+  BIT8                           messageType
+}
+
+// 8.2.7
+type record PDU_NAS_EPS_AuthenticationRequest
+{
+  BIT4                           securityHeaderType,
+  BIT8                           messageType,
+  NAS_KeySetIdentifierV          nasKeySetId,
+  BIT4                           spare,
+  AuthenticationParameterRANDV   authenticationParameterRAND,
+  AuthenticationParameterAUTNLV  authenticationParameterAUTN
+}
+
+// 8.2.8
+type record PDU_NAS_EPS_AuthenticationResponse
+{
+  BIT4                               securityHeaderType,
+  BIT8                               messageType,
+  AuthenticationResponseParameterLV  authenticationResponseParameter
+}
+
+// 8.2.9 PDU_NAS_EPS_CS_Service_Notification
+type record PDU_NAS_EPS_CS_ServiceNotification
+{
+  BIT4                             securityHeaderType,
+  BIT8                             messageType,
+  PagingIdentityV                  pagingIdentity,
+  CLITLV                           cLI optional,
+  SS_CodeTV                        sS_Code optional,
+  LCS_IndicatorTV                  lCS_Indicator optional,
+  LCS_ClientIdentityTLV            lCS_ClientIdentity optional
+}
+
+// 8.2.10.1 / 8.2.10.2
+type record PDU_NAS_EPS_DetachAccept
+{
+  BIT4                             securityHeaderType,
+  BIT8                             messageType
+}
+
+// Note: This PDU cannot be decoded
+// 8.2.11.1
+type record PDU_NAS_EPS_DetachRequest_UE_Orig
+{
+  BIT4                             securityHeaderType,
+  BIT8                             messageType,
+  DetachTypeV                      detachType,           
+  NAS_KeySetIdentifierV            nAS_KeySetIdentifier,
+  EPS_MobileIdentityLV             ePSMobileId
+}
+
+// 8.2.11.2
+type record PDU_NAS_EPS_DetachRequest_UE_Term
+{
+  BIT4                      securityHeaderType,
+  BIT8                      messageType,
+  DetachTypeV               detachType,
+  BIT4                      spareHalfOctet,
+  EMM_CauseTV               emmCause  optional
+}
+
+// 8.2.12 PDU_NAS_EPS_Downlink_NAS_Transport
+type record PDU_NAS_EPS_Downlink_NAS_Transport
+{
+  BIT4                      securityHeaderType,
+  BIT8                      messageType,
+  NAS_MessageContainerLV    nAS_MessageContainer
+}
+
+// 8.2.13 PDU_NAS_EPS_EMM_Information
+type record PDU_NAS_EPS_EMM_Information
+{
+  BIT4                      securityHeaderType,
+  BIT8                      messageType,
+  NetworkNameTLV            fullNameForNetwork optional,             
+  NetworkNameTLV            shortNameForNetwork optional, 
+  TimeZoneTV                localTimeZone optional,
+  TimeZoneAndTimeTV         universalTimeAndLocalTimeZone optional,
+  DaylightSavingTimeTLV     networkDaylightSavingTime optional  
+}  with { variant "TAG
+  ( 
+    fullNameForNetwork,                 elementIdentifier = '43'O;  
+    shortNameForNetwork,                elementIdentifier = '45'O;  
+  )"
+};
+
+// 8.2.14 PDU_NAS_EPS_EMM_Status
+type record PDU_NAS_EPS_EMM_Status
+{
+  BIT4                      securityHeaderType,
+  BIT8                      messageType,
+  EMM_CauseV                eMMCause
+}
+
+// 8.2.15 PDU_NAS_EPS_ExtendedServiceRequest
+type record PDU_NAS_EPS_ExtendedServiceRequest
+{
+  BIT4                      securityHeaderType,
+  BIT8                      messageType,
+  BIT4                      serviceType,
+  NAS_KeySetIdentifierV     nAS_KeySetIdentifier,
+  MobileIdentityLV          m_TMSI,
+  CSFB_ResponseTV           cSFB_Response optional,
+  EPS_BearerContextStatusTLV ePS_BearerContextStatus optional,
+  DevicePropertiesTV        deviceProperties optional
+}with {
+  variant "TAG (deviceProperties, elementIdentifier = '1101'B;)";
+}
+
+// 8.2.16 PDU_NAS_EPS_GUTI_ReallocationCommand
+type record PDU_NAS_EPS_GUTI_ReallocationCommand{
+  BIT4                      securityHeaderType,
+  BIT8                      messageType,
+  EPS_MobileIdentityLV      guti,
+  TrackingAreaIdentityListTLV tAI_list optional,
+  DCNIDTLV                  dNCID      optional
+}
+
+// 8.2.17 PDU_NAS_EPS_GUTI_ReallocationComplete
+type record PDU_NAS_EPS_GUTI_ReallocationComplete{
+  BIT4                      securityHeaderType,
+  BIT8                      messageType
+}
+
+// 8.2.18
+type record PDU_NAS_EPS_IdentityRequest
+{
+  BIT4                             securityHeaderType,
+  BIT8                             messageType, 
+  IdentityType2V                   identityType,
+  BIT4                             spareHalfOctet  
+}
+
+// 8.2.19
+type record PDU_NAS_EPS_IdentityResponse
+{
+  BIT4                             securityHeaderType,
+  BIT8                             messageType,
+  MobileIdentityLV                 mobileIdentity
+}  
+
+// 8.2.20 
+type record PDU_NAS_EPS_SecurityModeCommand
+{
+  BIT4                             securityHeaderType,
+  BIT8                             messageType,
+  NAS_SecurityAlgorithmsV          selected_NAS_SecurityAlgorithms, 
+  NAS_KeySetIdentifierV            nasKeySetId, 
+  BIT4                             spareHalfOctet, 
+  UESecurityCapabilityLV           replayed_UE_SecurityCapability,
+  IMEISV_RequestTV                 iMEISV_Request optional,
+  NonceTV                          replayedNonceUE optional,
+  NonceTV                          nonceMME optional,
+  HashTLV                          hashMME optional,
+  UEAdditionalSecurityCapabilityTLV uEAdditionalSecurityCapability optional
+} with {
+  variant "TAG(replayedNonceUE, elementIdentifier = '55'O;
+               nonceMME, elementIdentifier = '56'O;)";
+}
+
+// 8.2.21
+type record PDU_NAS_EPS_SecurityModeComplete
+{
+  BIT4                             securityHeaderType,
+  BIT8                             messageType,
+  MobileIdentityTLV                iMEISV optional,
+  ReplayedNASMessageContainerTLVE  replayedNASMessageContainer optional
+}
+
+// 8.2.22
+type record PDU_NAS_EPS_SecurityModeReject
+{
+  BIT4                             securityHeaderType,
+  BIT8                             messageType,
+  EMM_CauseV                       eMMCause 
+}
+
+// 8.2.23 
+type record PDU_NAS_EPS_SecurityProtectedNASMessage
+{
+  BIT4                             securityHeaderType,
+  OCT4                             messageAuthenticationCode,
+  integer                          sequenceNumber,
+  octetstring                      nAS_Message
+}
+
+// 8.2.24
+type record PDU_NAS_EPS_ServiceReject
+{
+  BIT4                             securityHeaderType,
+  BIT8                             messageType,
+  EMM_CauseV                       eMMCause,
+  GPRSTimerTV                      t3442 optional,
+  GPRSTimer2TLV                    t3346 optional,
+  GPRSTimer2TLV                    t3448 optional
+} with {
+  variant "TAG(t3442, elementIdentifier = '5B'O;
+               t3346, elementIdentifier = '5F'O;
+               t3448, elementIdentifier = '6B'O;)";
+}
+
+
+// 8.2.25
+type record PDU_NAS_EPS_ServiceRequest
+{
+  BIT4                             securityHeaderType, 
+  KSIandSequenceNumberV            ksiSequenceNumber, 
+  ShortMACV                        mAC 
+}
+
+// 8.2.26
+type record PDU_NAS_EPS_TrackingAreaUpdateAccept
+{
+  BIT4                             securityHeaderType,
+  BIT8                             messageType,
+  EPS_UpdateResultV                updateResult,
+  BIT4                             spareHalfOctet,  
+  GPRSTimerTV                      t3412                      optional,
+  EPS_MobileIdentityTLV            gUTI                       optional,
+  TrackingAreaIdentityListTLV      tAI_List                   optional,
+  EPS_BearerContextStatusTLV       ePSBearerContextStatus     optional,
+  LocationAreaIdentificationTV     locationAreaIdentification optional,
+  MobileIdentityTLV                msIdentity                 optional,
+  EMM_CauseTV                      eMMCause                   optional,
+  GPRSTimerTV                      t3402                      optional, 
+  GPRSTimerTV                      t3423                      optional,
+  PLMN_ListTLV                     equivalentPLMNs            optional,
+  EmergencyNumberListTLV           emergencyNumberList        optional,
+  EPS_NetworkFeatureSupportTLV     ePS_NetworkFeatureSupport  optional,
+  AdditionalUpdateResultTV         additionalUpdateResult     optional,
+  GPRSTimer3TLV                    t3412_Extended             optional,
+  GPRSTimer2TLV                    t3324                      optional,
+  ExtendedDRXParametersTLV         extendedDRXParameters      optional,
+  HeaderCompressionConfigurationStatusTLV headerCompressionConfigurationStatus optional,
+  DCNIDTLV                         dNCID                      optional,
+  SMS_ServiceStatusTV              sMS_ServiceStatus          optional,
+  Non3GPP_NW_ProvidedPoliciesTV    non3GPP_NW_ProvidedPolicies optional,
+  GPRSTimer2TLV                    t3448                       optional,
+  NetworkPolicyTV                  networkPolicy               optional,
+  GPRSTimer3TLV                    t3447                       optional,
+  ExtendedEmergencyNumberListTLV   extendedEmergencyNumberList optional
+} with {
+  variant "TAG (t3412, elementIdentifier = '5A'O;
+                t3402, elementIdentifier = '17'O;
+                t3423, elementIdentifier = '59'O;
+                t3412_Extended, elementIdentifier = '5E'O;
+                t3324, elementIdentifier = '6A'O;
+                t3448, elementIdentifier = '6B'O;
+                t3447, elementIdentifier = '6C'O;)";
+};
+
+// 8.2.27
+type record PDU_NAS_EPS_TrackingAreaUpdateComplete
+{
+  BIT4                             securityHeaderType,
+  BIT8                             messageType
+}
+
+// 8.2.28
+type record PDU_NAS_EPS_TrackingAreaUpdateReject
+{
+  BIT4                             securityHeaderType,
+  BIT8                             messageType,
+  EMM_CauseV                       emmCause,
+  GPRSTimer2TLV                    t3346 optional,
+  ExtendedEMM_CauseTV              extendedEmmCause optional
+} with {
+  variant "TAG(t3346, elementIdentifier = '5F'O;)";
+}
+
+
+// 8.2.29
+type record PDU_NAS_EPS_TrackingAreaUpdateRequest
+{ 
+  BIT4                             securityHeaderType,
+  BIT8                             messageType, 
+  EPS_UpdateTypeV                  ePSupdateType,
+  NAS_KeySetIdentifierV            nasKeySetId,
+  EPS_MobileIdentityLV             oldGUTI, 
+  NAS_KeySetIdentifierTV           nonCurrentNative_nasKeySetId   optional,
+  CipheringKeySequenceNumberTV     gprsCipheringKeySequenceNumber optional,
+  P_TMSISignatureTV                old_P_TMSISignature            optional,
+  EPS_MobileIdentityTLV            additionalGUTI                 optional,
+  NonceTV                          nonce                          optional,
+  UENetworkCapabilityTLV           uENetworkCapability            optional,
+  TrackingAreaIdentityTV           lastVisitedRegisteredTAI       optional,
+  DRXParameterTV                   dRXParameter                   optional,
+  UE_RadioCapabilityInfoUpdateNeededTV  uE_RadioCapabilityInfoUpdateNeeded optional,
+  EPS_BearerContextStatusTLV       ePSBearerContextStatus         optional,
+  MSNetworkCapabilityTLV           mSNetworkCapability            optional,
+  LocationAreaIdentificationTV     oldLocationAreaIdentification  optional,
+  TMSIStatusTV                     tMSIStatusTV                   optional,
+  MobileStationClassmark2_TLV      mobileStationClassmark2        optional,
+  MobileStationClassmark3_TLV      mobileStationClassmark3        optional, 
+  SupportedCodecListTLV            supportedCodecList             optional,
+  AdditionalUpdateTypeTV           additionalUpdateType           optional,
+  VoiceDomainPrefandUEsettingsTLV  voiceDomainPrefandUEsettings   optional,
+  GUTI_TypeTV                      oldGUTI_Type                   optional,
+  DevicePropertiesTV               deviceProperties               optional,
+  MS_NetworkFeatureSupportTV       mS_NetworkFeatureSupport       optional,  
+  NetworkResourceIdentifierContainerTLV tMSIBasedNRIContainer     optional,       
+  GPRSTimer2TLV                    t3324                          optional,
+  GPRSTimer3TLV                    t3412_Extended                 optional,
+  ExtendedDRXParametersTLV         extendedDRXParameters          optional,
+  UEAdditionalSecurityCapabilityTLV uEAdditionalSecurityCapability optional,
+  UEStatusTLV                      uEStatus                      optional
+  } with {
+  variant "TAG(nonce, elementIdentifier = '55'O;
+               deviceProperties, elementIdentifier = '1101'B;
+               mS_NetworkFeatureSupport, elementIdentifier = '1100'B;  
+               t3324, elementIdentifier = '6A'O;
+               t3412_Extended, elementIdentifier = '5E'O;)";
+}
+
+// 8.2.30 PDU_NAS_EPS_Uplink_NAS_Transport 
+type record PDU_NAS_EPS_Uplink_NAS_Transport
+{
+  BIT4                      securityHeaderType,
+  BIT8                      messageType,
+  NAS_MessageContainerLV    nAS_MessageContainer
+}
+
+// 8.2.31 PDU_NAS_EPS_Downlink_Generic_NAS_Transport
+type record PDU_NAS_EPS_Downlink_Generic_NAS_Transport
+{
+  BIT4                                  securityHeaderType,
+  BIT8                                  messageType,
+  BIT8                                  generic_MessageContainerType,
+  Generic_MessageContainerLVE           generic_MessageConatiner,
+  AdditionalInformationTLV              additionalInformation optional
+} with {
+  variant "PRESENCE(securityHeaderType='0000'B)"
+}
+
+// 8.2.32 PDU_NAS_EPS_Uplink_Generic_NAS_Transport
+type record PDU_NAS_EPS_Uplink_Generic_NAS_Transport
+{
+  BIT4                                  securityHeaderType,
+  BIT8                                  messageType,
+  BIT8                                  generic_MessageContainerType,
+  Generic_MessageContainerLVE           generic_MessageConatiner,
+  AdditionalInformationTLV              additionalInformation optional
+} with {
+  variant "PRESENCE(securityHeaderType='0000'B)"
+}
+
+// 8.2.33 PDU_NAS_EPS_ControlPlaneServiceRequest
+type record PDU_NAS_EPS_ControlPlaneServiceRequest
+{
+  BIT4                                  securityHeaderType,
+  BIT8                                  messageType,
+  ControlPlaneServiceTypeV              controlPlaneServiceType,
+  NAS_KeySetIdentifierV                 nASKeySetIdentifier,
+  ESM_MessageContainerTLVE              eSM_MessageContainer optional,
+  NAS_MessageContainerTLV               nAS_MessageContainer optional,
+  EPS_BearerContextStatusTLV            ePS_BearerContextStatus optional,
+  DevicePropertiesTV                    deviceProperties optional
+} with {  
+  variant "TAG (nAS_MessageContainer, elementIdentifier = '67'O;)";
+  variant "TAG (deviceProperties, elementIdentifier = '1101'B;)";
+}
+
+// 8.2.34 PDU_NAS_EPS_ServiceAccept
+type record PDU_NAS_EPS_ServiceAccept
+{
+  BIT4                             securityHeaderType,
+  BIT8                             messageType,
+  EPS_BearerContextStatusTLV       ePS_BearerContextStatus optional,
+  GPRSTimer2TLV                    t3448                   optional
+} with {
+  variant "TAG(t3448, elementIdentifier = '6B'O;)";
+}
+
+//==============================================
+// EPS session management messages - 8.3/24.301
+//==============================================
+
+// 8.3.1 
+type record PDU_NAS_EPS_ActDedEPSBearerContextAccept
+{
+  BIT4                             ePSBearerIdentity,
+  BIT8                             procedureTransactionIdentifier,
+  BIT8                             messageType, 
+  ProtocolConfigOptionsTLV         protocolConfigOptions optional,
+  NBIFOM_ContainerTLV              nBIFOMContainer optional,
+  ExtendedProtocolConfigurationOptionsTLVE extendedProtocolConfigurationOptions optional
+}
+
+// 8.3.2
+type record PDU_NAS_EPS_ActDedEPSBearerContextReject
+{
+  BIT4                             ePSBearerIdentity,
+  BIT8                             procedureTransactionIdentifier,
+  BIT8                             messageType,   
+  ESM_CauseV                       esmCause,  
+  ProtocolConfigOptionsTLV         protocolConfigOptions optional,  
+  NBIFOM_ContainerTLV              nBIFOMContainer optional,
+  ExtendedProtocolConfigurationOptionsTLVE extendedProtocolConfigurationOptions optional  
+}
+
+// 8.3.3
+type record PDU_NAS_EPS_ActDedEPSBearerContextRequest
+{
+  BIT4                             ePSBearerIdentity,
+  BIT8                             procedureTransactionIdentifier,
+  BIT8                             messageType,   
+  Linked_EPS_BearerIdentityV       linked_EPS_BearerIdentity,
+  BIT4                             spareHalfOctet,   
+  EPS_QualityOfServiceLV           ePS_QoS,
+  TrafficFlowTemplateLV            trafficFlowTemplate,
+  TransactionIdentifierTLV         transactionIdentifier optional, 
+  QoSTLV                           negotiatedQoS         optional,
+  LLC_SAPITV                       negotiated_LLC_SAPI   optional,
+  RadioPriorityTV                  radioPriority         optional,
+  PacketFlowIDTLV                  packetFlowID          optional,
+  ProtocolConfigOptionsTLV         protocolConfigOptions optional,
+  WLANOffloadAcceptabilityTV       wLANOffloadIndication optional,
+  NBIFOM_ContainerTLV              nBIFOMContainer       optional,
+  ExtendedProtocolConfigurationOptionsTLVE extendedProtocolConfigurationOptions optional,
+  ExtendedEPSQoSTLV                extendedQoS           optional
+}
+
+// 8.3.4
+type record PDU_NAS_EPS_ActDefEPSBearerContextAccept
+{
+  BIT4                            ePSBearerIdentity,
+  BIT8                            procedureTransactionIdentifier,
+  BIT8                            messageType,
+  ProtocolConfigOptionsTLV        protocolConfigOptions optional,
+  ExtendedProtocolConfigurationOptionsTLVE extendedProtocolConfigurationOptions optional    
+}
+
+// 8.3.5 PDU_NAS_EPS_ActDefEPSBearerContextReject
+type record PDU_NAS_EPS_ActDefEPSBearerContextReject
+{
+  BIT4                            ePSBearerIdentity,
+  BIT8                            procedureTransactionIdentifier,
+  BIT8                            messageType,
+  ESM_CauseV                      esmCause,  
+  ProtocolConfigOptionsTLV        protocolConfigOptions optional,
+  ExtendedProtocolConfigurationOptionsTLVE extendedProtocolConfigurationOptions optional
+}
+
+// 8.3.6
+type record PDU_NAS_EPS_ActDefEPSBearerContextRequest
+{
+  BIT4                                ePSBearerIdentity,
+  BIT8                                procedureTransactionIdentifier,
+  BIT8                                messageType,
+  EPS_QualityOfServiceLV              ePS_QoS,  
+  AccessPointNameLV                   accessPointName, 
+  PDN_AddressLV                       pDN_Address,
+  TransactionIdentifierTLV            transactionIdentifier optional,
+  QoSTLV                              negotiatedQoS         optional,
+  LLC_SAPITV                          negotiated_LLC_SAPI   optional,
+  RadioPriorityTV                     radioPriority         optional,
+  PacketFlowIDTLV                     packetFlowID          optional,
+  APN_AggregateMaximumBitRateTLV      aPN_AMBR              optional,
+  ESM_CauseTV                         esmCause              optional,
+  ProtocolConfigOptionsTLV            protocolConfigOptions optional,
+  ConnectivityTypeTV                  connectivityType      optional,
+  WLANOffloadAcceptabilityTV          wLANOffloadIndication optional,
+  NBIFOM_ContainerTLV                 nBIFOMContainer       optional,
+  HeaderCompressinConfigurationTLV    headerCompressinConfiguration optional,
+  ControlPlaneOnlyIndicationTV        controlPlaneOnlyIndication optional,
+  ExtendedProtocolConfigurationOptionsTLVE extendedProtocolConfigurationOptions optional,
+  ServingPLMNRateControlTLV           servingPLMNRateControl optional,
+  Extended_APN_AMBR_TLV               extended_APN_AMBR     optional,
+  ExtendedEPSQoSTLV                   extendedQoS           optional
+};
+
+// 8.3.7 PDU_NAS_EPS_BearerResourceAllocationReject
+type record PDU_NAS_EPS_BearerResourceAllocationReject
+{
+  BIT4                                ePSBearerIdentity,
+  BIT8                                procedureTransactionIdentifier,
+  BIT8                                messageType,
+  ESM_CauseV                          esmCause,
+  ProtocolConfigOptionsTLV            protocolConfigOptions optional,
+  GPRSTimer3TLV                       backOffTimer          optional,
+  ReAttemptIndicatorTLV               reAttemptIndicator    optional,
+  NBIFOM_ContainerTLV                 nBIFOMContainer       optional,
+  ExtendedProtocolConfigurationOptionsTLVE extendedProtocolConfigurationOptions optional
+}with { 
+  variant "TAG (backOffTimer, elementIdentifier = '37'O;)";
+};
+
+// 8.3.8
+type record PDU_NAS_EPS_BearerResourceAllocationRequest
+{
+  BIT4                                ePSBearerIdentity,
+  BIT8                                procedureTransactionIdentifier,
+  BIT8                                messageType,
+  Linked_EPS_BearerIdentityV          linked_EPS_BearerIdentity,
+  BIT4                                spareHalfOctet,   
+  TrafficFlowAggregateDescriptionLV   trafficFlowAggregate,
+  EPS_QualityOfServiceLV              requiredTrafficFlowQOS,
+  ProtocolConfigOptionsTLV            protocolConfigOptions optional,
+  DevicePropertiesTV                  deviceProperties      optional, 
+  NBIFOM_ContainerTLV                 nBIFOMContainer       optional,
+  ExtendedProtocolConfigurationOptionsTLVE extendedProtocolConfigurationOptions optional,
+  ExtendedEPSQoSTLV                   extendedQoS           optional
+} with { 
+  variant "TAG(deviceProperties, elementIdentifier = '1100'B;)";  
+}
+
+// 8.3.9
+type record PDU_NAS_EPS_BearerResourceModificationReject
+{
+  BIT4                                ePSBearerIdentity,
+  BIT8                                procedureTransactionIdentifier,
+  BIT8                                messageType,
+  ESM_CauseV                          esmCause,
+  ProtocolConfigOptionsTLV            protocolConfigOptions optional,
+  GPRSTimer3TLV                       backOffTimer          optional,
+  ReAttemptIndicatorTLV               reAttemptIndicator    optional,
+  NBIFOM_ContainerTLV                 nBIFOMContainer       optional,
+  ExtendedProtocolConfigurationOptionsTLVE extendedProtocolConfigurationOptions optional
+}with { 
+  variant "TAG (backOffTimer, elementIdentifier = '37'O;)";
+};
+
+// 8.3.10
+type record PDU_NAS_EPS_BearerResourceModificationRequest
+{
+  BIT4                                ePSBearerIdentity,
+  BIT8                                procedureTransactionIdentifier,
+  BIT8                                messageType,
+  Linked_EPS_BearerIdentityV          linked_EPS_BearerIdentity,
+  BIT4                                spareHalfOctet,   
+  TrafficFlowAggregateDescriptionLV   trafficFlowAggregate,
+  EPS_QualityOfServiceTLV             requiredTrafficFlowQOS optional,
+  ESM_CauseTV                         esmCause               optional,
+  ProtocolConfigOptionsTLV            protocolConfigOptions  optional,
+  DevicePropertiesTV                  deviceProperties       optional,
+  NBIFOM_ContainerTLV                 nBIFOMContainer        optional,
+  HeaderCompressinConfigurationTLV    headerCompressinConfiguration optional,
+  ExtendedProtocolConfigurationOptionsTLVE extendedProtocolConfigurationOptions optional,
+  ExtendedEPSQoSTLV                   extendedQoS            optional
+} with { 
+  variant "TAG(deviceProperties, elementIdentifier = '1100'B;)";  
+}
+
+// 8.3.11
+type record PDU_NAS_EPS_DeactEPSBearerContextAccept
+{
+  BIT4                                ePSBearerIdentity,
+  BIT8                                procedureTransactionIdentifier,
+  BIT8                                messageType,
+  ProtocolConfigOptionsTLV            protocolConfigOptions optional, 
+  ExtendedProtocolConfigurationOptionsTLVE extendedProtocolConfigurationOptions optional
+}
+
+// 8.3.12
+type record PDU_NAS_EPS_DeactEPSBearerContextRequest
+{
+  BIT4                                ePSBearerIdentity,
+  BIT8                                procedureTransactionIdentifier,
+  BIT8                                messageType,
+  ESM_CauseV                          esmCause,
+  ProtocolConfigOptionsTLV            protocolConfigOptions optional,
+  GPRSTimer3TLV                       t3396                 optional,
+  WLANOffloadAcceptabilityTV          wLANOffloadIndication optional,
+  NBIFOM_ContainerTLV                 nBIFOMContainer       optional,
+  ExtendedProtocolConfigurationOptionsTLVE extendedProtocolConfigurationOptions optional
+}with { 
+  variant "TAG (t3396, elementIdentifier = '37'O;)";
+};
+
+// 8.3.12A
+type record PDU_NAS_EPS_ESM_DummyMessage
+{
+  BIT4                                ePSBearerIdentity,
+  BIT8                                procedureTransactionIdentifier,
+  BIT8                                messageType
+}
+
+// 8.3.13 PDU_NAS_EPS_ESM_InformationRequest
+type record PDU_NAS_EPS_ESM_InformationRequest
+{
+  BIT4                                ePSBearerIdentity,
+  BIT8                                procedureTransactionIdentifier,
+  BIT8                                messageType 
+}
+
+// 8.3.14 PDU_NAS_EPS_ESM_InformationResponse 
+type record PDU_NAS_EPS_ESM_InformationResponse
+{
+  BIT4                                ePSBearerIdentity,
+  BIT8                                procedureTransactionIdentifier,
+  BIT8                                messageType, 
+  AccessPointNameTLV                  accessPointName optional,
+  ProtocolConfigOptionsTLV            protocolConfigOptions optional,
+  ExtendedProtocolConfigurationOptionsTLVE extendedProtocolConfigurationOptions optional
+}
+
+// 8.3.15 PDU_NAS_EPS_ESM_Status
+type record PDU_NAS_EPS_ESM_Status
+{
+  BIT4                                ePSBearerIdentity,
+  BIT8                                procedureTransactionIdentifier,
+  BIT8                                messageType, 
+  ESM_CauseV                          esmCause  
+}
+
+// 8.3.16 PDU_NAS_EPS_ModifyEPSBearerContextAccept
+type record PDU_NAS_EPS_ModifyEPSBearerContextAccept
+{
+  BIT4                                ePSBearerIdentity,
+  BIT8                                procedureTransactionIdentifier,
+  BIT8                                messageType,
+  ProtocolConfigOptionsTLV            protocolConfigOptions optional,
+  NBIFOM_ContainerTLV                 nBIFOMContainer       optional,
+  ExtendedProtocolConfigurationOptionsTLVE extendedProtocolConfigurationOptions optional
+}
+
+// 8.3.17 PDU_NAS_EPS_ModifyEPSBearerContextReject
+type record PDU_NAS_EPS_ModifyEPSBearerContextReject
+{
+  BIT4                                ePSBearerIdentity,
+  BIT8                                procedureTransactionIdentifier,
+  BIT8                                messageType,
+  ESM_CauseV                          esmCause,
+  ProtocolConfigOptionsTLV            protocolConfigOptions optional,
+  NBIFOM_ContainerTLV                 nBIFOMContainer       optional,
+  ExtendedProtocolConfigurationOptionsTLVE extendedProtocolConfigurationOptions optional
+}
+
+// 8.3.18 PDU_NAS_EPS_ModifyEPSBearerContextRequest
+type record PDU_NAS_EPS_ModifyEPSBearerContextRequest
+{
+  BIT4                             ePSBearerIdentity,
+  BIT8                             procedureTransactionIdentifier,
+  BIT8                             messageType,     
+  EPS_QualityOfServiceTLV          newEPS_QoS              optional,
+  TrafficFlowTemplateTLV           trafficFlowTemplate     optional,
+  QoSTLV                           new_QoS                 optional,
+  LLC_SAPITV                       negotiated_LLC_SAPI     optional,
+  RadioPriorityTV                  radioPriority           optional,
+  PacketFlowIDTLV                  packetFlowID            optional,
+  APN_AggregateMaximumBitRateTLV   aPN_AMBR                optional,    
+  ProtocolConfigOptionsTLV         protocolConfigOptions   optional,
+  WLANOffloadAcceptabilityTV       wLANOffloadIndication   optional,
+  NBIFOM_ContainerTLV              nBIFOMContainer         optional,
+  HeaderCompressinConfigurationTLV headerCompressinConfiguration optional,
+  ExtendedProtocolConfigurationOptionsTLVE extendedProtocolConfigurationOptions optional,
+  Extended_APN_AMBR_TLV            extended_APN_AMBR       optional,
+  ExtendedEPSQoSTLV                extendedQoS             optional
+}
+
+// 8.3.18A
+type record PDU_NAS_EPS_Notification
+{
+  BIT4                             ePSBearerIdentity,
+  BIT8                             procedureTransactionIdentifier,
+  BIT8                             messageType,
+  NotificationIndicatorLV          notificationIndicator
+}
+
+// 8.3.19
+type record PDU_NAS_EPS_PDN_ConnectivityReject
+{
+  BIT4                            ePSBearerIdentity,
+  BIT8                            procedureTransactionIdentifier,
+  BIT8                            messageType,
+  ESM_CauseV                      esmCause, 
+  ProtocolConfigOptionsTLV        protocolConfigOptions optional,
+  GPRSTimer3TLV                   backOffTimer optional,
+  ReAttemptIndicatorTLV           reAttemptIndicator optional,
+  NBIFOM_ContainerTLV             nBIFOMContainer         optional,
+  ExtendedProtocolConfigurationOptionsTLVE extendedProtocolConfigurationOptions optional
+} with { 
+  variant "TAG (backOffTimer, elementIdentifier = '37'O;)";
+};
+
+// 8.3.20
+type record PDU_NAS_EPS_PDN_ConnectivityRequest
+{
+  BIT4                            ePSBearerIdentity,
+  BIT8                            procedureTransactionIdentifier,
+  BIT8                            messageType,
+  RequestTypeV                    requestType,
+  PDN_TypeV                       pDN_Type,
+  ESM_InformationTransferFlagTV   eSM_InformationTransferFlag  optional,
+  AccessPointNameTLV              accessPointName              optional,
+  ProtocolConfigOptionsTLV        protocolConfigOptions        optional,
+  DevicePropertiesTV              deviceProperties             optional,
+  NBIFOM_ContainerTLV             nBIFOMContainer              optional,
+  HeaderCompressinConfigurationTLV headerCompressinConfiguration optional,
+  ExtendedProtocolConfigurationOptionsTLVE extendedProtocolConfigurationOptions optional
+} with { 
+  variant "TAG(deviceProperties, elementIdentifier = '1100'B;)";  
+}
+
+// 8.3.21 PDU_NAS_EPS_PDN_DisconnectReject
+type record PDU_NAS_EPS_PDN_DisconnectReject 
+{
+  BIT4                            ePSBearerIdentity,
+  BIT8                            procedureTransactionIdentifier,
+  BIT8                            messageType,
+  ESM_CauseV                      esmCause, 
+  ProtocolConfigOptionsTLV        protocolConfigOptions        optional,
+  ExtendedProtocolConfigurationOptionsTLVE extendedProtocolConfigurationOptions optional
+}
+
+// 8.3.22 PDU_NAS_EPS_PDN_DisconnectRequest
+type record PDU_NAS_EPS_PDN_DisconnectRequest
+{
+  BIT4                            ePSBearerIdentity,
+  BIT8                            procedureTransactionIdentifier,
+  BIT8                            messageType,
+  Linked_EPS_BearerIdentityV      linked_EPS_BearerIdentity,
+  BIT4                            spareHalfOctet,
+  ProtocolConfigOptionsTLV        protocolConfigOptions        optional,
+  ExtendedProtocolConfigurationOptionsTLVE extendedProtocolConfigurationOptions optional
+}
+
+// 8.3.23 PDU_NAS_EPS_RemoteUEReport
+type record PDU_NAS_EPS_RemoteUEReport
+{
+  BIT4                            ePSBearerIdentity,
+  BIT8                            procedureTransactionIdentifier,
+  BIT8                            messageType,
+  RemoteUEContextListTLVE         remoteUEContextConnected optional,
+  RemoteUEContextListTLVE         remoteUEContextDisconnected optional,
+  PKMF_AddressTLV                 proSeKeyManagementFunctionAddress optional
+} with { 
+  variant "TAG(remoteUEContextConnected, elementIdentifier = '79'O;  
+               remoteUEContextDisconnected, elementIdentifier = '7A'O;
+               proSeKeyManagementFunctionAddress, elementIdentifier = '6F'O)";  
+}
+
+// 8.3.24 PDU_NAS_EPS_RemoteUEReportResponse
+type record PDU_NAS_EPS_RemoteUEReportResponse
+{
+  BIT4                            ePSBearerIdentity,
+  BIT8                            procedureTransactionIdentifier,
+  BIT8                            messageType
+}
+
+// 8.3.25 PDU_NAS_EPS_ESMDataTransport
+type record PDU_NAS_EPS_ESMDataTransport
+{
+  BIT4                            ePSBearerIdentity,
+  BIT8                            procedureTransactionIdentifier,
+  BIT8                            messageType,
+  UserDataContainerLVE            userDataContainer,
+  ReleaseAssistanceIndicationTV   releaseAssistanceIndication optional
+}
+//see table 9.8.2/24.301:
+type union EPS_SessionManagement
+{  
+  PDU_NAS_EPS_ActDefEPSBearerContextRequest    pDU_NAS_EPS_ActDefEPSBearerContextRequest,
+  PDU_NAS_EPS_ActDefEPSBearerContextAccept     pDU_NAS_EPS_ActDefEPSBearerContextAccept,
+  PDU_NAS_EPS_ActDefEPSBearerContextReject     pDU_NAS_EPS_ActDefEPSBearerContextReject,
+
+  PDU_NAS_EPS_BearerResourceAllocationReject   pDU_NAS_EPS_BearerResourceAllocationReject,
+  PDU_NAS_EPS_BearerResourceAllocationRequest  pDU_NAS_EPS_BearerResourceAllocationRequest,
+
+  PDU_NAS_EPS_BearerResourceModificationReject   pDU_NAS_EPS_BearerResourceModificationReject,
+  PDU_NAS_EPS_BearerResourceModificationRequest  pDU_NAS_EPS_BearerResourceModificationRequest,
+
+
+  PDU_NAS_EPS_ActDedEPSBearerContextRequest    pDU_NAS_EPS_ActDedEPSBearerContextRequest,
+  PDU_NAS_EPS_ActDedEPSBearerContextAccept     pDU_NAS_EPS_ActDedEPSBearerContextAccept,
+  PDU_NAS_EPS_ActDedEPSBearerContextReject     pDU_NAS_EPS_ActDedEPSBearerContextReject,
+
+  PDU_NAS_EPS_ModifyEPSBearerContextRequest    pDU_NAS_EPS_ModifyEPSBearerContextRequest,  
+  PDU_NAS_EPS_ModifyEPSBearerContextAccept     pDU_NAS_EPS_ModifyEPSBearerContextAccept, 
+  PDU_NAS_EPS_ModifyEPSBearerContextReject     pDU_NAS_EPS_ModifyEPSBearerContextReject,
+
+  PDU_NAS_EPS_DeactEPSBearerContextRequest     pDU_NAS_EPS_DeactEPSBearerContextRequest,
+  PDU_NAS_EPS_DeactEPSBearerContextAccept      pDU_NAS_EPS_DeactEPSBearerContextAccept,
+
+  PDU_NAS_EPS_PDN_ConnectivityRequest          pDU_NAS_EPS_PDN_ConnectivityRequest,
+  PDU_NAS_EPS_PDN_ConnectivityReject           pDU_NAS_EPS_PDN_ConnectivityReject,
+
+  PDU_NAS_EPS_PDN_DisconnectRequest            pDU_NAS_EPS_PDN_DisconnectRequest,
+  PDU_NAS_EPS_PDN_DisconnectReject             pDU_NAS_EPS_PDN_DisconnectReject,
+
+  PDU_NAS_EPS_ESM_InformationRequest           pDU_NAS_EPS_ESM_InformationRequest, 
+  PDU_NAS_EPS_ESM_InformationResponse          pDU_NAS_EPS_ESM_InformationResponse, 
+
+  PDU_NAS_EPS_Notification                     pDU_NAS_EPS_Notification,
+
+  PDU_NAS_EPS_ESM_DummyMessage                 pDU_NAS_EPS_ESM_DummyMessage,
+
+  PDU_NAS_EPS_ESM_Status                       pDU_NAS_EPS_ESM_Status,
+
+  PDU_NAS_EPS_RemoteUEReport                   pDU_NAS_EPS_RemoteUEReport,
+  PDU_NAS_EPS_RemoteUEReportResponse           pDU_NAS_EPS_RemoteUEReportResponse,
+
+  PDU_NAS_EPS_ESMDataTransport                 pDU_NAS_EPS_ESMDataTransport
+} with {
+  variant "TAG (    
+  pDU_NAS_EPS_ActDefEPSBearerContextRequest,   messageType = '11000001'B;
+  pDU_NAS_EPS_ActDefEPSBearerContextAccept,    messageType = '11000010'B;
+  pDU_NAS_EPS_ActDefEPSBearerContextReject,    messageType = '11000011'B;
+
+  pDU_NAS_EPS_ActDedEPSBearerContextRequest,   messageType = '11000101'B;
+  pDU_NAS_EPS_ActDedEPSBearerContextAccept,    messageType = '11000110'B;
+  pDU_NAS_EPS_ActDedEPSBearerContextReject,    messageType = '11000111'B;
+  
+  pDU_NAS_EPS_BearerResourceAllocationReject,  messageType = '11010101'B;
+  pDU_NAS_EPS_BearerResourceAllocationRequest,  messageType = '11010100'B;
+  
+  pDU_NAS_EPS_BearerResourceModificationReject,  messageType = '11010111'B;
+  pDU_NAS_EPS_BearerResourceModificationRequest,  messageType = '11010110'B;
+    
+  pDU_NAS_EPS_ModifyEPSBearerContextRequest,   messageType = '11001001'B;
+  pDU_NAS_EPS_ModifyEPSBearerContextAccept,    messageType = '11001010'B;
+  pDU_NAS_EPS_ModifyEPSBearerContextReject,    messageType = '11001011'B;
+  
+  pDU_NAS_EPS_DeactEPSBearerContextRequest,    messageType = '11001101'B;
+  pDU_NAS_EPS_DeactEPSBearerContextAccept,     messageType = '11001110'B;
+  
+  pDU_NAS_EPS_PDN_ConnectivityRequest,         messageType = '11010000'B;
+  pDU_NAS_EPS_PDN_ConnectivityReject,          messageType = '11010001'B;
+  
+  pDU_NAS_EPS_PDN_DisconnectRequest,           messageType = '11010010'B;
+  pDU_NAS_EPS_PDN_DisconnectReject,            messageType = '11010011'B;
+  
+  pDU_NAS_EPS_ESM_InformationRequest,          messageType = '11011001'B;
+  pDU_NAS_EPS_ESM_InformationResponse,         messageType = '11011010'B;
+  
+  pDU_NAS_EPS_Notification,                    messageType = '11011011'B;
+  
+  pDU_NAS_EPS_ESM_DummyMessage,                messageType = '11011100'B;
+  
+  pDU_NAS_EPS_ESM_Status,                      messageType = '11101000'B;
+  
+  pDU_NAS_EPS_RemoteUEReport,                  messageType = '11101001'B;
+  pDU_NAS_EPS_RemoteUEReportResponse,          messageType = '11101010'B;
+  
+  pDU_NAS_EPS_ESMDataTransport,                messageType = '11101011'B;)"
+} 
+
+//see Table 9.8.1/24.301:
+type union EPS_MobilityManagement
+{
+  PDU_NAS_EPS_ServiceRequest              pDU_NAS_EPS_ServiceRequest,
+  PDU_NAS_EPS_SecurityProtectedNASMessage pDU_NAS_EPS_SecurityProtectedNASMessage,
+
+  PDU_NAS_EPS_AttachRequest               pDU_NAS_EPS_AttachRequest,
+  PDU_NAS_EPS_AttachAccept                pDU_NAS_EPS_AttachAccept,
+  PDU_NAS_EPS_AttachComplete              pDU_NAS_EPS_AttachComplete,
+  PDU_NAS_EPS_AttachReject                pDU_NAS_EPS_AttachReject,
+
+  PDU_NAS_EPS_DetachAccept                pDU_NAS_EPS_DetachAccept,
+  PDU_NAS_EPS_DetachRequest_UE_Term       pDU_NAS_EPS_DetachRequest_UE_Term,
+  PDU_NAS_EPS_DetachRequest_UE_Orig       pDU_NAS_EPS_DetachRequest_UE_Orig, // Note: This PDU cannot be decoded
+
+  PDU_NAS_EPS_TrackingAreaUpdateRequest   pDU_NAS_EPS_TrackingAreaUpdateRequest,
+  PDU_NAS_EPS_TrackingAreaUpdateAccept    pDU_NAS_EPS_TrackingAreaUpdateAccept,
+  PDU_NAS_EPS_TrackingAreaUpdateComplete  pDU_NAS_EPS_TrackingAreaUpdateComplete,
+  PDU_NAS_EPS_TrackingAreaUpdateReject    pDU_NAS_EPS_TrackingAreaUpdateReject,
+
+  PDU_NAS_EPS_ExtendedServiceRequest      pDU_NAS_EPS_ExtendedServiceRequest,
+  PDU_NAS_EPS_ControlPlaneServiceRequest  pDU_NAS_EPS_ControlPlaneServiceRequest,
+  PDU_NAS_EPS_ServiceReject               pDU_NAS_EPS_ServiceReject,
+  PDU_NAS_EPS_ServiceAccept               pDU_NAS_EPS_ServiceAccept,
+
+  PDU_NAS_EPS_GUTI_ReallocationCommand    pDU_NAS_EPS_GUTI_ReallocationCommand,  
+  PDU_NAS_EPS_GUTI_ReallocationComplete   pDU_NAS_EPS_GUTI_ReallocationComplete,  
+  PDU_NAS_EPS_AuthenticationRequest       pDU_NAS_EPS_AuthenticationRequest,
+  PDU_NAS_EPS_AuthenticationResponse      pDU_NAS_EPS_AuthenticationResponse,
+  PDU_NAS_EPS_AuthenticationReject        pDU_NAS_EPS_AuthenticationReject,
+  PDU_NAS_EPS_AuthenticationFailure       pDU_NAS_EPS_AuthenticationFailure,
+  PDU_NAS_EPS_IdentityRequest             pDU_NAS_EPS_IdentityRequest,
+  PDU_NAS_EPS_IdentityResponse            pDU_NAS_EPS_IdentityResponse,
+  PDU_NAS_EPS_SecurityModeCommand         pDU_NAS_EPS_SecurityModeCommand,
+  PDU_NAS_EPS_SecurityModeComplete        pDU_NAS_EPS_SecurityModeComplete,
+  PDU_NAS_EPS_SecurityModeReject          pDU_NAS_EPS_SecurityModeReject,
+
+  PDU_NAS_EPS_EMM_Status                  pDU_NAS_EPS_EMM_Status,
+  PDU_NAS_EPS_EMM_Information             pDU_NAS_EPS_EMM_Information,
+  PDU_NAS_EPS_Downlink_NAS_Transport      pDU_NAS_EPS_Downlink_NAS_Transport,
+  PDU_NAS_EPS_Uplink_NAS_Transport        pDU_NAS_EPS_Uplink_NAS_Transport,
+  PDU_NAS_EPS_CS_ServiceNotification      pDU_NAS_EPS_CS_ServiceNotification,
+
+  PDU_NAS_EPS_Downlink_Generic_NAS_Transport    pDU_NAS_EPS_Downlink_Generic_NAS_Transport,
+  PDU_NAS_EPS_Uplink_Generic_NAS_Transport      pDU_NAS_EPS_Uplink_Generic_NAS_Transport
+} with {
+  variant "TAG (
+  
+  pDU_NAS_EPS_ServiceRequest,                 securityHeaderType= '1100'B; 
+  pDU_NAS_EPS_ServiceRequest,                 securityHeaderType= '1101'B;  
+  pDU_NAS_EPS_ServiceRequest,                 securityHeaderType= '1110'B;  
+  pDU_NAS_EPS_ServiceRequest,                 securityHeaderType= '1111'B;  
+  
+  pDU_NAS_EPS_SecurityProtectedNASMessage,    securityHeaderType= '0001'B;
+  pDU_NAS_EPS_SecurityProtectedNASMessage,    securityHeaderType= '0010'B;
+  pDU_NAS_EPS_SecurityProtectedNASMessage,    securityHeaderType= '0011'B;
+  pDU_NAS_EPS_SecurityProtectedNASMessage,    securityHeaderType= '0100'B; 
+  pDU_NAS_EPS_SecurityProtectedNASMessage,    securityHeaderType= '0101'B;
+  
+  pDU_NAS_EPS_AttachRequest,                  messageType = '01000001'B;
+  pDU_NAS_EPS_AttachAccept,                   messageType = '01000010'B;
+  pDU_NAS_EPS_AttachComplete,                 messageType = '01000011'B;
+  pDU_NAS_EPS_AttachReject,                   messageType = '01000100'B;
+  pDU_NAS_EPS_DetachRequest_UE_Term,          messageType = '01000101'B;
+  pDU_NAS_EPS_DetachRequest_UE_Orig,          messageType = '01000101'B;
+  pDU_NAS_EPS_DetachAccept,                   messageType = '01000110'B;
+
+  pDU_NAS_EPS_TrackingAreaUpdateRequest,      messageType = '01001000'B;
+  pDU_NAS_EPS_TrackingAreaUpdateAccept,       messageType = '01001001'B;
+  pDU_NAS_EPS_TrackingAreaUpdateComplete,     messageType = '01001010'B;
+  pDU_NAS_EPS_TrackingAreaUpdateReject,       messageType = '01001011'B;
+
+  pDU_NAS_EPS_ExtendedServiceRequest,         messageType = '01001100'B;
+  pDU_NAS_EPS_ControlPlaneServiceRequest,     messageType = '01001101'B;
+  pDU_NAS_EPS_ServiceReject,                  messageType = '01001110'B;
+  pDU_NAS_EPS_ServiceAccept,                  messageType = '01001111'B;
+  
+  pDU_NAS_EPS_GUTI_ReallocationCommand,       messageType = '01010000'B; 
+  pDU_NAS_EPS_GUTI_ReallocationComplete,      messageType = '01010001'B; 
+  pDU_NAS_EPS_AuthenticationRequest,          messageType = '01010010'B;
+  pDU_NAS_EPS_AuthenticationResponse,         messageType = '01010011'B;
+  pDU_NAS_EPS_AuthenticationReject,           messageType = '01010100'B;
+  pDU_NAS_EPS_AuthenticationFailure,          messageType = '01011100'B;
+  pDU_NAS_EPS_IdentityRequest,                messageType = '01010101'B;
+  pDU_NAS_EPS_IdentityResponse,               messageType = '01010110'B;
+  pDU_NAS_EPS_SecurityModeCommand,            messageType = '01011101'B;
+  pDU_NAS_EPS_SecurityModeComplete,           messageType = '01011110'B;
+  pDU_NAS_EPS_SecurityModeReject,             messageType = '01011111'B;
+  
+  pDU_NAS_EPS_EMM_Status,                     messageType = '01100000'B;
+  pDU_NAS_EPS_EMM_Information,                messageType = '01100001'B;
+  pDU_NAS_EPS_Downlink_NAS_Transport,         messageType = '01100010'B;
+  pDU_NAS_EPS_Uplink_NAS_Transport,           messageType = '01100011'B;
+  pDU_NAS_EPS_CS_ServiceNotification,         messageType = '01100100'B;
+  
+  pDU_NAS_EPS_Downlink_Generic_NAS_Transport, messageType = '01101000'B;
+  pDU_NAS_EPS_Uplink_Generic_NAS_Transport,   messageType = '01101001'B;
+  )"
+};
+
+
+type union EPS_messages
+{
+  EPS_SessionManagement  ePS_SessionManagement,
+  EPS_MobilityManagement ePS_MobilityManagement 
+};
+
+//see 11.2.3.1.1/24.007
+type record PDU_NAS_EPS
+{
+  BIT4                 protocolDiscriminator,
+  EPS_messages         ePS_messages
+} with { variant (ePS_messages)"CROSSTAG(
+                          ePS_SessionManagement,  protocolDiscriminator='0010'B;
+                          ePS_MobilityManagement, protocolDiscriminator='0111'B;
+                          )"
+};
+
+
+} with { encode "RAW"} // End of module
diff --git a/test/NAS_EPS_Test.cfg b/test/NAS_EPS_Test.cfg
new file mode 100644
index 0000000..056161e
--- /dev/null
+++ b/test/NAS_EPS_Test.cfg
@@ -0,0 +1,5 @@
+[EXECUTE]
+NAS_EPS_Test.control
+
+[LOGGING]
+FileMask := LOG_ALL | MATCHING
diff --git a/test/NAS_EPS_Test.ttcn b/test/NAS_EPS_Test.ttcn
new file mode 100644
index 0000000..520dbf0
--- /dev/null
+++ b/test/NAS_EPS_Test.ttcn
@@ -0,0 +1,2071 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v2.0
+// which accompanies this distribution, and is available at
+// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+///////////////////////////////////////////////////////////////////////////////
+//
+//  File:               NAS_EPS_Test.ttcn
+//  Rev:                <RnXnn>
+//  Prodnr:             1/CNL 113 862
+//  Contact:            http://ttcn.ericsson.se
+//  Reference:          3GPP 24.301 v15.2.0 (24.008 v15.3.0, 24.011 v15.1.0, 24.161 v15.0.0 
+
+module NAS_EPS_Test
+{
+
+import from NAS_EPS_Types all;
+
+type component NAS_EPS_Test_CT { }
+
+
+const PDU_NAS_EPS c_PDU_NAS_EPS_AttachAccept :=
+{    
+  protocolDiscriminator := '0111'B,
+  ePS_messages := {
+    ePS_MobilityManagement :={
+      pDU_NAS_EPS_AttachAccept := {
+        securityHeaderType := '0000'B,
+        messageType := '01000010'B,
+        ePS_AttachResult := 
+        {
+          valueOfAttachResult := '111'B,
+          spare := '0'B
+        },
+        spare := '0000'B,
+        t3412 := {
+          timerValue := '01111'B,
+          unit := '001'B
+        },
+        tAI_List := 
+        {
+          lengthIndicator := 6,
+          trackingAreaIdentityLists :=
+          {
+            {
+              list01 :=
+              {
+                nrOfElements := 0, 
+                typeOfList := '01'B,
+                spare := '0'B,  //0
+                mccDigit1 := '1'H,
+                mccDigit2 := '2'H,
+                mccDigit3 := '3'H,
+                mncDigit3 := '4'H,
+                mncDigit1 := '5'H,
+                mncDigit2 := '6'H,  
+                tAC1 := 'FFFF'O 
+              }
+            }
+          }
+        },
+        eSM_MessageContainer :=
+        {
+          lengthIndicator := 10,
+          content := 'AABBCCDDEE0011223344'O 
+        },      
+        gUTI := 
+        { 
+          elementIdentifier := '50'O,
+          ePS_MobileIdentity := 
+          {
+            lengthIndicator := 11,
+            ePS_MobileIdentity := 
+            {
+              typeOfIdentity := '110'B,
+              oddEvenInd_identity := 
+              {
+                guti :=  
+               {
+                 oddevenIndicator := '0'B, 
+                  spare := '1111'B,
+                  mccDigit1 := '1'H,
+                  mccDigit2 := '2'H,
+                  mccDigit3 := '3'H,
+                  mncDigit3 := '4'H,
+                  mncDigit1 := '5'H,
+                  mncDigit2 := '6'H,
+                  mMEGI := 'AABB'O,
+                  mMEC := 'FF'O,
+                  mTMSI := 'AABBCCDD'O
+                }
+              }
+            }        
+          }
+        },
+        locationAreaIdentification := 
+        {
+          elementIdentifier := '13'O,
+          mcc_mnc := '112233'O, 
+          lac := 'BBBB'O
+        },
+        msIdentity := omit,
+        eMMCause := omit,
+        t3402 := omit,
+        t3423 := omit,
+        equivalentPLMNs := omit,
+        emergencyNumberList := omit,
+        ePS_NetworkFeatureSupport := omit,
+        additionalUpdateResult := 
+        {
+          additionalUpdateResultValue := '11'B,
+          spare := '00'B,
+          elementIdentifier := '1111'B
+        },
+        t3412_Extended :=  
+        {
+          elementIdentifier := '5E'O,
+          lengthIndicator := 1 , 
+          gprsTimer3 :=
+          {
+            timerValue := '00101'B,
+            unit := '011'B
+          }
+        }, 
+        t3324 :=
+        {
+          elementIdentifier := '6A'O,
+          lengthIndicator := 1 , 
+          gprsTimer2 :=
+          {
+            timerValue := '00101'B,
+            unit := '011'B
+          }
+        },
+        extendedDRXParameters :=
+        {
+          elementIdentifier := '6E'O,
+          lengthIndicator := 1,
+          eDRXvalue := '0101'B,
+          pagingTimeWindow := '0101'B
+        },
+        dNCID :=
+        {
+          elementIdentifier := '65'O,
+          lengthIndicator := 2,
+          dCNIDvalue := '1234'O
+        },
+        sMS_ServiceStatus :=
+        {
+          sMS_ServiceStatusValue := '001'B,
+          spare := '0'B,
+          elementIdentifier := '1110'B
+        },
+        non3GPP_NW_ProvidedPolicies :=
+        {
+          n3EN_Indicator := '1'B,
+          spare := '000'B,
+          elementIdentifier := '1101'B
+        },
+        t3448 := 
+        {
+          elementIdentifier := '6B'O,
+          lengthIndicator := 1 , 
+          gprsTimer2 :=
+          {
+            timerValue := '00101'B,
+            unit := '011'B
+          }
+        },
+        networkPolicy :=
+        {
+          redirPolicy := '1'B,
+          spare := '000'B,
+          elementIdentifier := '1100'B
+
+        },
+        t3447 := 
+        {
+          elementIdentifier := '6C'O, 
+          lengthIndicator := 1,
+          gprsTimer3 :={
+            timerValue := '00111'B,
+            unit := '000'B      
+          }    
+        },
+        extendedEmergencyNumberList :=
+        {
+          elementIdentifier := 'FF'O,
+          lengthIndicator := 4,
+          extendedEmergencyNumberList :=
+          {
+            {
+              lengthOfExtendedEmergencyNumber := 1,
+              extendedEmergencyNumber := '01'O
+            },
+            {
+              lengthOfExtendedEmergencyNumber := 1,
+              extendedEmergencyNumber := '02'O
+            }
+          }
+        }
+      }
+    }
+  }
+}
+
+const PDU_NAS_EPS c_PDU_NAS_EPS_AttachReject :=
+{    
+  protocolDiscriminator := '0111'B,
+  ePS_messages := {
+    ePS_MobilityManagement :={
+      pDU_NAS_EPS_AttachReject := {
+        securityHeaderType := '0000'B,
+        messageType := '01000100'B,
+        emmCause := 
+        {
+          causeValue := 'BB'O
+        },
+        eSM_MessageContainer := omit,
+        t3346  := 
+        {
+          elementIdentifier := '5F'O,
+          lengthIndicator := 1,
+          gprsTimer2 := 
+          {
+            timerValue := '00000'B,
+            unit := '011'B
+          }    
+        },
+        t3402 := 
+        {
+          elementIdentifier := '16'O,
+          lengthIndicator := 1,
+          gprsTimer2 := 
+          {
+            timerValue := '11111'B,
+            unit := '011'B            
+          }            
+        },
+        extendedEmmCause :=
+        {
+          eUTRANallowedValue := '1'B,
+          ePSoptimizationInfo := '0'B,
+          spare := '00'B,
+          elementIdentifier := '1010'B
+        }
+      }
+    }
+  }
+}  
+
+const PDU_NAS_EPS c_PDU_NAS_EPS_AttachRequest :=
+{    
+  protocolDiscriminator := '0111'B,
+  ePS_messages := {
+    ePS_MobilityManagement :={
+      pDU_NAS_EPS_AttachRequest := {
+      securityHeaderType := '0000'B,
+      messageType := '01000001'B,
+      ePS_attachType :=   
+        {
+          typeOfAttach := '000'B,
+          spare := '0'B
+        }, 
+        nasKeySetId :=
+        {
+          identifier := '111'B,
+          tSC := '0'B     
+        },
+        ePSMobileId :=
+        {
+          lengthIndicator := 11,
+          ePS_MobileIdentity :=
+          {
+            typeOfIdentity := '110'B,
+            oddEvenInd_identity := 
+            {
+              guti :=  
+              {
+                oddevenIndicator := '0'B, 
+                spare := '1111'B,
+                mccDigit1 := '1'H,
+                mccDigit2 := '2'H,
+                mccDigit3 := '3'H,
+                mncDigit3 := '4'H,
+                mncDigit1 := '5'H,
+                mncDigit2 := '6'H,
+                mMEGI := 'AABB'O,
+                mMEC := 'FF'O,
+                mTMSI := 'AABBCCDD'O
+              }
+            }      
+          }    
+        },
+        uENetworkCapability :=
+        {
+          lengthIndicator := 7,
+          uENetworkCapabilityV := 
+          {
+            eEA := '00001111'B,
+            eIA := '11110000'B,
+            uEA := '00110011'B,  
+            uIA := '0111110'B,  
+            uCS2 := '0'B,  
+            nF := '0'B,  
+            vCC := '0'B,  
+            lCS := '0'B,  
+            lPP := '0'B,  
+            aCC_CSFB := '0'B,
+            h245_ASH := '0'B,
+            proSe := '0'B,
+            proSe_dd := '0'B,
+            proSe_dc := '0'B,
+            proSe_relay := '0'B, 
+            cP_CIoT := '0'B,
+            uP_CIoT := '0'B,
+            s1_Udata := '0'B,
+            eRwoPDN := '0'B,
+            hC_CP_CIoT := '0'B,
+            ePCO := '0'B,
+            multipleDRB := '0'B,
+            v2XPC5 := '0'B,
+            restrictEC := '0'B,
+            cPbackoff := '0'B,
+            dCNR := '0'B,
+            n1Mode := '0'B,
+            sGC := '0'B,
+            spare1 := '0'B,
+            spare := omit
+          }
+        },
+        eSM_MessageContainer := 
+        {
+          lengthIndicator := 2,
+          content := 'FFFF'O    
+        },
+        old_P_TMSISignature := omit,
+        additionalGUTI := omit,
+        lastVisitedRegisteredTAI := omit,
+        dRXParameter := omit,
+        mSNetworkCapability := 
+        {
+          elementIdentifier := '31'O,
+          mSNetworkCapabilityLV := 
+          {
+            lengthIndicator := 4,
+            msNetworkCapabilityV :=
+            {
+              gea1bit := '0'B,
+              smCapabilitiesviaDedicatedChannels := '0'B,
+              smCapabilitiesviaGPRSChannels := '0'B,
+              ucs2Support := '0'B,
+              ssScreeningIndicator := '00'B,
+              solSACapability := '0'B,
+              revisionLevelIndicatior := '0'B,
+              pFCFeatureMode := '0'B,
+              extendedGEAbits := '000111'B,
+              lcsVAcapability := '0'B,
+              pSInterRATHOtoUTRANIuModeCapability := '0'B,
+              pSInterRATHOtoEUTRANS1ModeCapability := '0'B,
+              eMMCombinedProceduresCapability := '0'B,
+              iSRSupport := '0'B,
+              sRVCCtoGERANUTRANCapability := '0'B,
+              epcCapability := '0'B,
+              nFCapability := '0'B,
+              gERANNwSharingCapability := '0'B,
+              userPlaneIntegrityProtectionSupport := '0'B,
+              gIA4 := '0'B,
+              gIA5 := '0'B,
+              gIA6 := '0'B,
+              gIA7 := '0'B,
+              ePCOIEIndicator := '0'B,
+              restrictionOnUseOfEnhancedCoverageCapability := '0'B,
+              dualConnectivityOfEUTRANwithNRCapability := '0'B,
+              spare_octets := omit
+            }
+          }
+        },
+        oldLocationAreaIdentification := omit,
+        tMSIStatusTV := omit,
+        mobileStationClassmark2 := omit,
+        mobileStationClassmark3 := omit,
+        supportedCodecList := omit,
+        additionalUpdateType := omit,
+        voiceDomainPrefandUEsettings := omit,
+        deviceProperties := 
+        {
+          lowPriority := '1'B,
+          spare := '000'B,
+          elementIdentifier := '1101'B    
+        },
+        oldGUTI_Type := 
+        {
+          gUTI_Type := '0'B,
+          spare := '000'B,
+          elementIdentifier  := '1110'B    
+        },
+        mS_NetworkFeatureSupport :=
+        {
+          extendedPeriodicTimers := '1'B,
+          spare := '000'B,
+          elementIdentifier := '1100'B    
+        },
+        tMSIBasedNRIContainer :=
+        {
+          elementIdentifier := '10'O,
+          networkResourceIdentifierContainerLV := 
+          {
+            lengthIndicator := 2 , 
+            networkResourceIdentifierContainerV :=
+            {
+              nRIContainerValue := '1111111111'B,
+              spare := '000000'B
+            }
+          }
+        },
+        t3324 :=
+        {
+          elementIdentifier := '6A'O,
+          lengthIndicator := 1 , 
+          gprsTimer2 :=
+          {
+            timerValue := '00101'B,
+            unit := '011'B
+          }
+        },
+        t3412_Extended :=  
+        {
+          elementIdentifier := '5E'O,
+          lengthIndicator := 1 , 
+          gprsTimer3 :=
+          {
+            timerValue := '00101'B,
+            unit := '011'B
+          }
+        },
+        extendedDRXParameters :=
+        {
+          elementIdentifier := '6E'O,
+          lengthIndicator := 1,
+          eDRXvalue := '0101'B,
+          pagingTimeWindow := '0101'B
+        },
+        uEAdditionalSecurityCapability :=
+        {
+          elementIdentifier := '6F'O,
+          lengthIndicator := 4,
+          uEAdditionalSecurityCapabilityV :=
+          {
+            fiveG_eA7 := '0'B,    
+            fiveG_eA6 := '0'B,    
+            fiveG_eA5 := '0'B,    
+            fiveG_eA4 := '0'B,    
+            fiveG_eA3_128 := '0'B,    
+            fiveG_eA2_128 := '0'B,    
+            fiveG_eA1_128 := '0'B,    
+            fiveG_eA0 := '0'B,    
+            fiveG_eA15 := '0'B,    
+            fiveG_eA14 := '0'B,    
+            fiveG_eA13 := '0'B,    
+            fiveG_eA12 := '0'B,    
+            fiveG_eA11 := '0'B,    
+            fiveG_eA10 := '0'B,    
+            fiveG_eA9 := '0'B,    
+            fiveG_eA8 := '0'B,    
+            fiveG_iA7 := '0'B,    
+            fiveG_iA6 := '0'B,    
+            fiveG_iA5 := '0'B,    
+            fiveG_iA4 := '0'B,    
+            fiveG_iA3_128 := '0'B,    
+            fiveG_iA2_128 := '0'B,    
+            fiveG_iA1_128 := '0'B,    
+            fiveG_iA0 := '0'B,    
+            fiveG_iA15 := '0'B,    
+            fiveG_iA14 := '0'B,    
+            fiveG_iA13 := '0'B,    
+            fiveG_iA12 := '0'B,    
+            fiveG_iA11 := '0'B,    
+            fiveG_iA10 := '0'B,    
+            fiveG_iA9 := '0'B,    
+            fiveG_iA8 := '0'B 
+          }
+        }
+      }
+    }
+  }
+}  
+
+
+const PDU_NAS_EPS c_PDU_NAS_EPS_TrackingAreaUpdateAccept :=
+{    
+  protocolDiscriminator := '0111'B,
+  ePS_messages := {
+    ePS_MobilityManagement :={
+      pDU_NAS_EPS_TrackingAreaUpdateAccept := {
+        securityHeaderType := '0000'B,
+        messageType := '01001001'B,
+        updateResult := 
+        {
+          valueOfUpdateResult := '111'B,
+          spare := '0'B
+        },
+        spareHalfOctet := '0000'B,
+        t3412 := 
+        {
+          elementIdentifier := '5A'O,
+          gprsTimer := 
+          {
+            timerValue := '11111'B,
+            unit := '011'B            
+          }
+        },
+        gUTI := omit,         
+        tAI_List := omit,       
+        ePSBearerContextStatus  := omit,   
+        locationAreaIdentification := omit,
+        msIdentity := omit,       
+        eMMCause := omit,       
+        t3402 :=
+        {
+          elementIdentifier := '17'O,
+          gprsTimer :=
+          {
+            timerValue := '11111'B,
+            unit:= '011'B  
+          }
+        },        
+        t3423 :=
+        {
+          elementIdentifier := '59'O,
+          gprsTimer :=
+          {
+            timerValue := '11111'B,
+            unit:= '011'B  
+          }    
+        },        
+        equivalentPLMNs := omit,     
+        emergencyNumberList := omit,     
+        ePS_NetworkFeatureSupport := omit, 
+        additionalUpdateResult  := omit,    
+        t3412_Extended :=
+        {
+          elementIdentifier := '5E'O,
+          lengthIndicator := 1, 
+          gprsTimer3  :=   
+          {
+            timerValue := '00101'B,
+            unit := '011'B
+          }
+        },     
+        t3324 :=
+        {
+          elementIdentifier := '6A'O,
+          lengthIndicator := 1, 
+          gprsTimer2 :=
+          {
+            timerValue := '11111'B,
+            unit:= '011'B  
+          }    
+        },
+        extendedDRXParameters :=
+        {
+          elementIdentifier := '6E'O,
+          lengthIndicator := 1,
+          eDRXvalue := '0101'B,
+          pagingTimeWindow := '0101'B
+        },
+        headerCompressionConfigurationStatus :=
+        {
+          elementIdentifier := '68'O,
+          lengthIndicator := 2,
+          headerCompressionConfigurationStatus := 
+          {
+            ebi0 := '1'B,
+            ebi1 := '1'B,
+            ebi2 := '1'B,
+            ebi3 := '1'B,
+            ebi4 := '1'B,
+            ebi5 := '1'B,
+            ebi6 := '1'B,
+            ebi7 := '1'B,
+            ebi8 := '1'B,
+            ebi9 := '1'B,
+            ebi10 := '1'B,
+            ebi11 := '1'B,
+            ebi12 := '1'B,
+            ebi13 := '1'B,
+            ebi14 := '1'B,
+            ebi15 := '1'B
+          }
+        },
+        dNCID :=
+        {
+          elementIdentifier := '65'O,
+          lengthIndicator := 2,
+          dCNIDvalue := '1234'O
+        },
+        sMS_ServiceStatus :=
+        {
+          sMS_ServiceStatusValue := '001'B,
+          spare := '0'B,
+          elementIdentifier := '1110'B
+        },
+        non3GPP_NW_ProvidedPolicies :=
+        {
+          n3EN_Indicator := '1'B,
+          spare := '000'B,
+          elementIdentifier := '1101'B
+        },
+        t3448 := 
+        {
+          elementIdentifier := '6B'O,
+          lengthIndicator := 1 , 
+          gprsTimer2 :=
+          {
+            timerValue := '00101'B,
+            unit := '011'B
+          }
+        },
+        networkPolicy :=
+        {
+          redirPolicy := '1'B,
+          spare := '000'B,
+          elementIdentifier := '1100'B
+
+        },
+        t3447 := 
+        {
+          elementIdentifier := '6C'O, 
+          lengthIndicator := 1,
+          gprsTimer3 :={
+            timerValue := '00111'B,
+            unit := '000'B      
+          }    
+        },
+        extendedEmergencyNumberList :=
+        {
+          elementIdentifier := 'FF'O,
+          lengthIndicator := 4,
+          extendedEmergencyNumberList :=
+          {
+            {
+              lengthOfExtendedEmergencyNumber := 1,
+              extendedEmergencyNumber := '01'O
+            },
+            {
+              lengthOfExtendedEmergencyNumber := 1,
+              extendedEmergencyNumber := '02'O
+            }
+          }
+        }
+      }
+    }
+  }
+}    
+    
+    
+const PDU_NAS_EPS c_PDU_NAS_EPS_TrackingAreaUpdateReject :=
+{    
+  protocolDiscriminator := '0111'B,
+  ePS_messages := {
+    ePS_MobilityManagement :={
+      pDU_NAS_EPS_TrackingAreaUpdateReject := {
+        securityHeaderType := '0000'B,
+        messageType := '01001011'B,
+        emmCause:=
+        {
+          causeValue := '12'O
+        },
+        t3346 := {
+          elementIdentifier := '5F'O,
+          lengthIndicator := 1,
+          gprsTimer2 := 
+          {
+            timerValue := '11111'B,
+            unit := '011'B            
+          }            
+        },     
+        extendedEmmCause :=
+        {
+          eUTRANallowedValue := '1'B,
+          ePSoptimizationInfo := '0'B,
+          spare := '00'B,
+          elementIdentifier := '1010'B
+        }
+      }
+    }
+  } 
+}
+
+const PDU_NAS_EPS c_PDU_NAS_EPS_TrackingAreaUpdateRequest :=
+{    
+  protocolDiscriminator := '0111'B,
+  ePS_messages := {
+    ePS_MobilityManagement :={
+      pDU_NAS_EPS_TrackingAreaUpdateRequest := {
+        securityHeaderType := '0000'B,
+        messageType := '01001000'B,
+        ePSupdateType := 
+        {
+          typeOfUpdate := '111'B,
+          activeFlag := '0'B
+        },
+        nasKeySetId := {
+          identifier := '111'B,
+          tSC := '0'B    
+        },
+        oldGUTI := {
+          lengthIndicator := 11,
+          ePS_MobileIdentity  :=
+          {
+            typeOfIdentity := '110'B,
+            oddEvenInd_identity := 
+            {
+              guti :=  
+              {
+                oddevenIndicator := '0'B, 
+                spare := '1111'B,
+                mccDigit1 := '1'H,
+                mccDigit2 := '2'H,
+                mccDigit3 := '3'H,
+                mncDigit3 := '4'H,
+                mncDigit1 := '5'H,
+                mncDigit2 := '6'H,
+                mMEGI := 'AABB'O,
+                mMEC := 'FF'O,
+                mTMSI := 'AABBCCDD'O
+              }
+            }      
+          }  
+        },
+        nonCurrentNative_nasKeySetId := omit, 
+        gprsCipheringKeySequenceNumber := omit, 
+        old_P_TMSISignature := omit,          
+        additionalGUTI := omit,           
+        nonce := omit,              
+        uENetworkCapability := omit,          
+        lastVisitedRegisteredTAI  := omit,      
+        dRXParameter   := omit,          
+        uE_RadioCapabilityInfoUpdateNeeded := omit, 
+        ePSBearerContextStatus  := omit,          
+        mSNetworkCapability := omit,          
+        oldLocationAreaIdentification := omit,  
+        tMSIStatusTV   := omit,          
+        mobileStationClassmark2 := omit,        
+        mobileStationClassmark3  := omit,       
+        supportedCodecList := omit,          
+        additionalUpdateType   := omit,        
+        voiceDomainPrefandUEsettings := omit,   
+        oldGUTI_Type :=  {
+          gUTI_Type := '0'B,
+          spare := '000'B,
+          elementIdentifier  := '1110'B    
+        },        
+        deviceProperties := {
+          lowPriority := '1'B,
+          spare := '000'B,
+          elementIdentifier := '1101'B    
+        },        
+        mS_NetworkFeatureSupport := {
+          extendedPeriodicTimers := '1'B,
+          spare := '000'B,
+          elementIdentifier := '1100'B    
+        },     
+        tMSIBasedNRIContainer :=
+        {
+          elementIdentifier := '10'O,
+          networkResourceIdentifierContainerLV := 
+          {
+            lengthIndicator := 2 , 
+            networkResourceIdentifierContainerV :=
+            {
+              nRIContainerValue := '1111111111'B,
+              spare := '000000'B
+            }
+          }
+        },
+        t3324 :=
+        {
+          elementIdentifier := '6A'O,
+          lengthIndicator := 1 , 
+          gprsTimer2 :=
+          {
+            timerValue := '00101'B,
+            unit := '011'B
+          }
+        },
+        t3412_Extended :=  
+        {
+          elementIdentifier := '5E'O,
+          lengthIndicator := 1 , 
+          gprsTimer3 :=
+          {
+            timerValue := '00101'B,
+            unit := '011'B
+          }
+        },
+        extendedDRXParameters :=
+        {
+          elementIdentifier := '6E'O,
+          lengthIndicator := 1,
+          eDRXvalue := '0101'B,
+          pagingTimeWindow := '0101'B
+        }, 
+        uEAdditionalSecurityCapability :=
+        {
+          elementIdentifier := '6F'O,
+          lengthIndicator := 4,
+          uEAdditionalSecurityCapabilityV :=
+          {
+            fiveG_eA7 := '0'B,    
+            fiveG_eA6 := '0'B,    
+            fiveG_eA5 := '0'B,    
+            fiveG_eA4 := '0'B,    
+            fiveG_eA3_128 := '0'B,    
+            fiveG_eA2_128 := '0'B,    
+            fiveG_eA1_128 := '0'B,    
+            fiveG_eA0 := '0'B,    
+            fiveG_eA15 := '0'B,    
+            fiveG_eA14 := '0'B,    
+            fiveG_eA13 := '0'B,    
+            fiveG_eA12 := '0'B,    
+            fiveG_eA11 := '0'B,    
+            fiveG_eA10 := '0'B,    
+            fiveG_eA9 := '0'B,    
+            fiveG_eA8 := '0'B,    
+            fiveG_iA7 := '0'B,    
+            fiveG_iA6 := '0'B,    
+            fiveG_iA5 := '0'B,    
+            fiveG_iA4 := '0'B,    
+            fiveG_iA3_128 := '0'B,    
+            fiveG_iA2_128 := '0'B,    
+            fiveG_iA1_128 := '0'B,    
+            fiveG_iA0 := '0'B,    
+            fiveG_iA15 := '0'B,    
+            fiveG_iA14 := '0'B,    
+            fiveG_iA13 := '0'B,    
+            fiveG_iA12 := '0'B,    
+            fiveG_iA11 := '0'B,    
+            fiveG_iA10 := '0'B,    
+            fiveG_iA9 := '0'B,    
+            fiveG_iA8 := '0'B 
+          }
+        },
+        uEStatus :=
+        {
+          elementIdentifier := '6D'O,
+          lengthIndicator := 1,
+          uEStatusV :=
+          {
+            s1ModeReg := '0'B,
+            n1ModeReg := '0'B,
+            spare := '00000'B
+          }
+        }
+      }
+    }
+  }
+}
+
+const PDU_NAS_EPS c_PDU_NAS_EPS_ActDedEPSBearerContextRequest :=
+{    
+  protocolDiscriminator := '0010'B,
+  ePS_messages := {
+    ePS_SessionManagement :={
+      pDU_NAS_EPS_ActDedEPSBearerContextRequest := {
+        ePSBearerIdentity := '0000'B,
+        procedureTransactionIdentifier := '00000000'B,
+        messageType := '11000101'B,
+        linked_EPS_BearerIdentity := 
+        {
+          linked_EPS_BearerIdentityValue := '1111'B
+        },
+        spareHalfOctet := '0000'B,
+        ePS_QoS := {
+          lengthIndicator := 1,
+          ePS_QualityOfServiceV :=
+          {
+            qCI := 'AA'O, 
+            maxBitRateUplink := omit,      
+            maxBitRateDownlink := omit,      
+            guaranteedBitRateUplink := omit,     
+            guaranteedBitRateDownlink := omit,   
+            maxBitRateUplinkExt := omit,      
+            maxBitRateDownlinkExt := omit,      
+            guaranteedBitRateUplinkExt := omit,  
+            guaranteedBitRateDownlinkExt := omit,      
+            maxBitRateUplinkExt2 := omit,
+            maxBitRateDownlinkExt2 := omit,
+            guaranteedBitRateUplinkExt2 := omit,
+            guaranteedBitRateDownlinkExt2 := omit
+          }
+        },
+        trafficFlowTemplate := 
+        {
+          lengthIndicator := 1,
+          valueField :=
+          {
+            trafficFlowTemplateV_Delete_Existing_TFT_or_No_TFT_Operation :=
+            {
+              numberOfPacketFilters := '0000'B,
+              eBIT := '0'B,
+              operationCodeTFT := '010'B,
+              parametersList := omit  
+            }
+          }
+        },
+        transactionIdentifier := omit,
+        negotiatedQoS  :=   
+        {
+          elementIdentifier := '30'O,
+          qoSLV :=
+          {
+            lengthIndicator := 20,
+            qoSV :=
+            {
+              reliabilityClass := '010'B,
+              delayClass := '010'B,
+              spare1 := '00'B,
+              precedenceClass := '010'B,
+              spare2 := '0'B,
+              peakThroughput := '1010'B,
+              meanThroughput := '10101'B,
+              spare3 := '000'B,
+              deliverErroneusSDU  := '000'B,           
+              deliveryOrder := '00'B,                 
+              trafficClass := '000'B,                  
+              maxSDUSize := '00'O,                  
+              maxBitrateUplink := '00'O,               
+              maxBitrateDownlink  := '00'O,            
+              sduErrorRatio := '0000'B,                 
+              residualBER := '0000'B,                   
+              trafficHandlingPriority := '00'B,        
+              transferDelay := '000000'B,                 
+              guaranteedBitRateUplink := '00'O,        
+              guaranteedBitRateDownlink := '00'O,      
+              sourceStatisticsDescriptor := '0000'B,    
+              signallingIndication := '0'B,           
+              spare4 := '000'B,                        
+              maxBitrateDownlinkExt := '00'O,          
+              guaranteedBitRateDownlinkExt := '00'O,   
+              maxBitrateUplinkExt := '00'O,            
+              guaranteedBitRateUplinkExt := '00'O,     
+              maxBitrateDownlinkExt2 := '00'O,         
+              guaranteedBitRateDownlinkExt2 := '00'O,  
+              maxBitrateUplinkExt2 := '00'O,           
+              guaranteedBitRateUplinkExt2 := '00'O  
+            }
+          }
+        },
+        negotiated_LLC_SAPI := omit, 
+        radioPriority := omit,        
+        packetFlowID := omit,        
+        protocolConfigOptions := omit,
+        wLANOffloadIndication :=
+        {
+          valueField := 
+          {
+            eUTRAN_offloadAcceptabilityValue := '0'B,
+            uTRAN_offloadAcceptabilityValue := '1'B,
+            spare := '00'B 
+          },
+          elementIdentifier := '1100'B 
+        },
+        nBIFOMContainer := 
+        {
+          elementIdentifier := '33'O,
+          lengthIndicator := 3,
+          contents :=
+          {{
+            parameterIdentifier := '01'O,
+            lengthIndicator := 1,
+            parameterContents := 
+            {
+              nBIFOM_Mode := '11'O
+            }
+          }}           
+        },
+        extendedProtocolConfigurationOptions := omit,
+        extendedQoS :=
+        {
+          elementIdentifier := '5C'O, 
+          lengthIndicator := 10,
+          extended_QoS_Value :=
+          {
+            unit_MaxBitRate := '00'O,
+            maxBitRate_Uplink := '0002'O,
+            maxBitRate_Downlink := '0002'O,
+            unit_GuaranteedBitRate := '00'O,
+            guaranteedBitRate_Uplink := '0002'O,
+            guaranteedBitRate_Downlink := '0002'O
+          }
+        }
+      } 
+    }
+  }   
+}
+
+const PDU_NAS_EPS c_PDU_NAS_EPS_ActDefEPSBearerContextRequest :=
+{    
+  protocolDiscriminator := '0010'B,
+  ePS_messages := {
+    ePS_SessionManagement :={
+      pDU_NAS_EPS_ActDefEPSBearerContextRequest := {
+        ePSBearerIdentity := '0000'B,
+        procedureTransactionIdentifier := '00000000'B,
+        messageType := '11000001'B,
+        ePS_QoS := {
+          lengthIndicator := 1,
+          ePS_QualityOfServiceV :=
+          {
+            qCI := 'AA'O, 
+            maxBitRateUplink := omit,      
+            maxBitRateDownlink := omit,      
+            guaranteedBitRateUplink := omit,     
+            guaranteedBitRateDownlink := omit,   
+            maxBitRateUplinkExt := omit,      
+            maxBitRateDownlinkExt := omit,      
+            guaranteedBitRateUplinkExt := omit,  
+            guaranteedBitRateDownlinkExt := omit,
+            maxBitRateUplinkExt2 := omit,
+            maxBitRateDownlinkExt2 := omit,
+            guaranteedBitRateUplinkExt2 := omit,
+            guaranteedBitRateDownlinkExt2 := omit
+          }
+        },  
+        accessPointName :=
+        {
+          lengthIndicator := 3,
+          accessPointNameValue := 'AABBCC'O
+        },
+        pDN_Address :=
+        {
+          lengthIndicator := 5,
+          typeValue := '111'B,
+          spare := '00000'B,
+          addressInformation := '01010101'O
+        },
+        transactionIdentifier := omit,
+        negotiatedQoS  := omit,     
+        negotiated_LLC_SAPI := omit, 
+        radioPriority := omit,        
+        packetFlowID := omit,        
+        aPN_AMBR := omit,        
+        esmCause := omit,        
+        protocolConfigOptions := omit, 
+        connectivityType  := {
+          connectivityTypeValue := '0001'B,
+          elementIdentifier := '1011'B
+        },
+        wLANOffloadIndication :=
+        {
+          valueField := 
+          {
+            eUTRAN_offloadAcceptabilityValue := '0'B,
+            uTRAN_offloadAcceptabilityValue := '1'B,
+            spare := '00'B 
+          },
+          elementIdentifier := '1100'B 
+        },
+        nBIFOMContainer := 
+        {
+          elementIdentifier := '33'O,
+          lengthIndicator := 3,
+          contents :=
+          {{
+            parameterIdentifier := '01'O,
+            lengthIndicator := 1,
+            parameterContents := 
+            {
+              nBIFOM_Mode := '11'O
+            }
+          }}           
+        },
+        headerCompressinConfiguration := 
+        {
+          elementIdentifier := '66'O,
+          lengthIndicator := 3,
+          headerCompressinConfiguration := 
+          {
+            p0x0002 := '1'B,
+            p0x0003 := '1'B,
+            p0x0004 := '1'B,
+            p0x0006 := '1'B,
+            p0x0102 := '1'B,
+            p0x0103 := '1'B,
+            p0x0104 := '1'B,
+            spare := '0'B,
+            max_CID := '0001'O,
+            additionalHeaderCompression := omit
+          }
+        }, 
+        controlPlaneOnlyIndication := 
+        {
+          cPOI := '1'B,
+          spare := '000'B,
+          elementIdentifier := '1001'B
+        },
+        extendedProtocolConfigurationOptions := omit,
+        servingPLMNRateControl := 
+        {
+          elementIdentifier := '6E'O,
+          lengthIndicator := 2,
+          servingPLMNRateControlValue := 5
+        },
+        extended_APN_AMBR :=
+        {
+          elementIdentifier := '5F'O, 
+          lengthIndicator := 6,
+          extended_APN_AMBR_Value :=
+          {
+            unit_Extended_APN_AMBR_Downlink := '00'O,
+            extended_APN_AMBR_Downlink := '0001'O,
+            unit_Extended_APN_AMBR_Uplink := '00'O,
+            extended_APN_AMBR_Uplink := '0001'O
+          }
+        },
+        extendedQoS :=
+        {
+          elementIdentifier := '5C'O, 
+          lengthIndicator := 10,
+          extended_QoS_Value :=
+          {
+            unit_MaxBitRate := '00'O,
+            maxBitRate_Uplink := '0002'O,
+            maxBitRate_Downlink := '0002'O,
+            unit_GuaranteedBitRate := '00'O,
+            guaranteedBitRate_Uplink := '0002'O,
+            guaranteedBitRate_Downlink := '0002'O
+          }
+        }
+      } 
+    }
+  }   
+}
+
+const PDU_NAS_EPS c_PDU_NAS_EPS_BearerResourceAllocationReject :=
+{    
+  protocolDiscriminator := '0010'B,
+  ePS_messages := {
+    ePS_SessionManagement :={
+      pDU_NAS_EPS_BearerResourceAllocationReject := {
+        ePSBearerIdentity := '0000'B,
+        procedureTransactionIdentifier := '00000000'B,
+        messageType := '11010101'B,
+        esmCause :=
+        {
+          causeValue := '11'O
+        },
+        protocolConfigOptions := omit,
+        backOffTimer := {
+          elementIdentifier := '37'O, 
+          lengthIndicator := 1,
+          gprsTimer3 :={
+            timerValue := '00111'B,
+            unit := '000'B      
+          }    
+        },
+        reAttemptIndicator :=
+        {
+          elementIdentifier := '6B'O,
+          reAttemptIndicatorLV :=
+          {
+            lengthIndicator := 1,
+            valueField := 
+            {
+              rATC := '1'B,
+              ePLMNC := '1'B,
+              spare := '000000'B
+            }
+          }
+        }, 
+        nBIFOMContainer := 
+        {
+          elementIdentifier := '33'O,
+          lengthIndicator := 3,
+          contents :=
+          {{
+            parameterIdentifier := '01'O,
+            lengthIndicator := 1,
+            parameterContents := 
+            {
+              nBIFOM_Mode := '11'O
+            }
+          }}           
+        },
+        extendedProtocolConfigurationOptions := omit
+      } 
+    }
+  }   
+}
+
+const PDU_NAS_EPS c_PDU_NAS_EPS_BearerResourceModificationReject :=
+{    
+  protocolDiscriminator := '0010'B,
+  ePS_messages := {
+    ePS_SessionManagement :={
+      pDU_NAS_EPS_BearerResourceModificationReject := {
+        ePSBearerIdentity := '0000'B,
+        procedureTransactionIdentifier := '00000000'B,
+        messageType := '11010111'B,
+        esmCause := 
+        {
+          causeValue := '11'O
+        },
+        protocolConfigOptions := omit,
+        backOffTimer := {
+          elementIdentifier := '37'O, 
+          lengthIndicator := 1,
+          gprsTimer3 :={
+            timerValue := '00111'B,
+            unit := '000'B      
+          }    
+        },
+        reAttemptIndicator :=
+        {
+          elementIdentifier := '6B'O,
+          reAttemptIndicatorLV :=
+          {
+            lengthIndicator := 1,
+            valueField := 
+            {
+              rATC := '1'B,
+              ePLMNC := '1'B,
+              spare := '000000'B
+            }
+          }
+        }, 
+        nBIFOMContainer := 
+        {
+          elementIdentifier := '33'O,
+          lengthIndicator := 3,
+          contents :=
+          {{
+            parameterIdentifier := '01'O,
+            lengthIndicator := 1,
+            parameterContents := 
+            {
+              nBIFOM_Mode := '11'O
+            }
+          }}           
+        },
+        extendedProtocolConfigurationOptions := omit 
+      }
+    }
+  }
+}
+
+const PDU_NAS_EPS c_PDU_NAS_EPS_DeactEPSBearerContextRequest :=
+{    
+  protocolDiscriminator := '0010'B,
+  ePS_messages := {
+    ePS_SessionManagement :={
+      pDU_NAS_EPS_DeactEPSBearerContextRequest := {
+        ePSBearerIdentity := '0000'B,
+        procedureTransactionIdentifier := '00000000'B,
+        messageType := '11001101'B,
+        esmCause := 
+        {
+          causeValue := '11'O
+        },
+        protocolConfigOptions := omit,
+        t3396 := {
+          elementIdentifier := '37'O, 
+          lengthIndicator := 1,
+          gprsTimer3 :={
+            timerValue := '00111'B,
+            unit := '000'B      
+          }    
+        },
+        wLANOffloadIndication :=
+        {
+          valueField := 
+          {
+            eUTRAN_offloadAcceptabilityValue := '0'B,
+            uTRAN_offloadAcceptabilityValue := '1'B,
+            spare := '00'B 
+          },
+          elementIdentifier := '1100'B 
+        }, 
+        nBIFOMContainer := 
+        {
+          elementIdentifier := '33'O,
+          lengthIndicator := 3,
+          contents :=
+          {{
+            parameterIdentifier := '01'O,
+            lengthIndicator := 1,
+            parameterContents := 
+            {
+              nBIFOM_Mode := '11'O
+            }
+          }}           
+        },
+        extendedProtocolConfigurationOptions := omit 
+      }
+    }
+  }
+}
+
+const PDU_NAS_EPS c_PDU_NAS_EPS_ModifyEPSBearerContextRequest := {
+  protocolDiscriminator := '0010'B,
+  ePS_messages := {
+    ePS_SessionManagement := {
+      pDU_NAS_EPS_ModifyEPSBearerContextRequest := {
+        ePSBearerIdentity := '0001'B,
+        procedureTransactionIdentifier := '01010101'B,
+        messageType := '11001001'B,
+        newEPS_QoS := {
+          elementIdentifier := '5B'O,
+          lengthIndicator := 1,
+          ePS_QualityOfServiceV := {
+            qCI := 'AB'O,
+            maxBitRateUplink := omit,
+            maxBitRateDownlink := omit,
+            guaranteedBitRateUplink := omit,
+            guaranteedBitRateDownlink := omit,
+            maxBitRateUplinkExt := omit,
+            maxBitRateDownlinkExt := omit,
+            guaranteedBitRateUplinkExt := omit,
+            guaranteedBitRateDownlinkExt := omit,
+            maxBitRateUplinkExt2 := omit,
+            maxBitRateDownlinkExt2 := omit,
+            guaranteedBitRateUplinkExt2 := omit,
+            guaranteedBitRateDownlinkExt2 := omit
+          }
+        },
+        trafficFlowTemplate := omit,
+        new_QoS := omit,
+        negotiated_LLC_SAPI := omit,
+        radioPriority := omit,
+        packetFlowID := omit,
+        aPN_AMBR := omit,
+        protocolConfigOptions := omit,
+        wLANOffloadIndication :=
+        {
+          valueField := 
+          {
+            eUTRAN_offloadAcceptabilityValue := '0'B,
+            uTRAN_offloadAcceptabilityValue := '1'B,
+            spare := '00'B 
+          },
+          elementIdentifier := '1100'B 
+        }, 
+        nBIFOMContainer := 
+        {
+          elementIdentifier := '33'O,
+          lengthIndicator := 3,
+          contents :=
+          {{
+            parameterIdentifier := '01'O,
+            lengthIndicator := 1,
+            parameterContents := 
+            {
+              nBIFOM_Mode := '11'O
+            }
+          }}           
+        },
+        headerCompressinConfiguration := omit,
+        extendedProtocolConfigurationOptions := omit,
+        extended_APN_AMBR :=
+        {
+          elementIdentifier := '5F'O, 
+          lengthIndicator := 6,
+          extended_APN_AMBR_Value :=
+          {
+            unit_Extended_APN_AMBR_Downlink := '00'O,
+            extended_APN_AMBR_Downlink := '0001'O,
+            unit_Extended_APN_AMBR_Uplink := '00'O,
+            extended_APN_AMBR_Uplink := '0001'O
+          }
+        },
+        extendedQoS :=
+        {
+          elementIdentifier := '5C'O, 
+          lengthIndicator := 10,
+          extended_QoS_Value :=
+          {
+            unit_MaxBitRate := '00'O,
+            maxBitRate_Uplink := '0002'O,
+            maxBitRate_Downlink := '0002'O,
+            unit_GuaranteedBitRate := '00'O,
+            guaranteedBitRate_Uplink := '0002'O,
+            guaranteedBitRate_Downlink := '0002'O
+          }
+        }
+      }
+    } 
+  }
+};
+
+
+const PDU_NAS_EPS c_PDU_NAS_EPS_PDN_ConnectivityReject :=
+{    
+  protocolDiscriminator := '0010'B,
+  ePS_messages := {
+    ePS_SessionManagement :={
+      pDU_NAS_EPS_PDN_ConnectivityReject := {
+        ePSBearerIdentity := '0000'B,
+        procedureTransactionIdentifier := '00000000'B,
+        messageType := '11010001'B,
+        esmCause := 
+        {
+          causeValue := '11'O
+        },
+        protocolConfigOptions := omit,
+        backOffTimer := {
+          elementIdentifier := '37'O, 
+          lengthIndicator := 1,
+          gprsTimer3 :={
+            timerValue := '00111'B,
+            unit := '000'B      
+          }    
+        },
+        reAttemptIndicator :=
+        {
+          elementIdentifier := '6B'O,
+          reAttemptIndicatorLV :=
+          {
+            lengthIndicator := 1,
+            valueField := 
+            {
+              rATC := '1'B,
+              ePLMNC := '1'B,
+              spare := '000000'B
+            }
+          }
+        },
+        nBIFOMContainer := omit,
+        extendedProtocolConfigurationOptions := omit
+      }
+    }
+  }
+}
+
+const PDU_NAS_EPS c_PDU_NAS_EPS_RemoteUEReport :=
+{    
+  protocolDiscriminator := '0010'B,
+  ePS_messages := {
+    ePS_SessionManagement :={
+       pDU_NAS_EPS_RemoteUEReport := {
+        ePSBearerIdentity := '0000'B,
+        procedureTransactionIdentifier := '00000000'B,
+        messageType := '11101001'B,
+        remoteUEContextConnected :=
+        {
+          elementIdentifier := '79'O,
+          lengthIndicator := 8,
+          nrOfContents := 1,
+          contents :=
+          {{
+            lengthIndicator := 6,
+            numberOfUserIDs := 1,
+            userIDList :=
+            {
+              {
+                lengthIndicator := 4,
+                typeOfUserInfo := '011'B,
+                digits :=
+                {
+                  mSISDN :=
+                  {
+                    oddevenIndicator := '1'B,       
+                    digits := '00ABCDE'H,
+                    fillerDigit := omit
+                  }
+                }
+              }
+            },
+            addressType := omit,
+            spare := omit,
+            addressInformation := omit
+          }}
+        },
+        remoteUEContextDisconnected :=
+        {
+          elementIdentifier := '7A'O,
+          lengthIndicator := 8,
+          nrOfContents := 1,
+          contents :=
+          {{
+           lengthIndicator := 6,
+            numberOfUserIDs := 1,
+            userIDList :=
+            {
+              {
+                lengthIndicator := 4,
+                typeOfUserInfo := '010'B,
+                digits :=
+                {
+                  iMSI :=
+                  {
+                    oddevenIndicator := '1'B,       
+                    digits := '00ABCDE'H,
+                    fillerDigit := omit
+                  }
+                }
+              }
+            },
+            addressType := omit,
+            spare := omit,
+            addressInformation := omit
+          }}
+        },
+        proSeKeyManagementFunctionAddress :=
+        {
+          elementIdentifier := '6F'O,
+          lengthIndicator := 5,
+          addressType := '001'B,
+          spare := '00000'B,
+          addressInformation := 
+          {
+            ipv4 := '7F000001'O
+          }
+        }
+      } 
+    }
+  }   
+}
+
+const PDU_NAS_EPS c_PDU_NAS_EPS_RemoteUEReportResponse :=
+{    
+  protocolDiscriminator := '0010'B,
+  ePS_messages := {
+    ePS_SessionManagement :={
+       pDU_NAS_EPS_RemoteUEReportResponse := {
+         ePSBearerIdentity := '0000'B,
+         procedureTransactionIdentifier := '00000000'B,
+         messageType := '11101010'B
+      } 
+    }
+  }   
+}
+
+const PDU_NAS_EPS c_PDU_NAS_EPS_ESMDataTransport :=
+{    
+  protocolDiscriminator := '0010'B,
+  ePS_messages := {
+    ePS_SessionManagement :={
+      pDU_NAS_EPS_ESMDataTransport := {
+        ePSBearerIdentity := '0000'B,
+        procedureTransactionIdentifier := '00000000'B,
+        messageType := '11101011'B,
+        userDataContainer :=
+        {
+          lengthIndicator := 1,
+          contents := '00'O
+        },
+        releaseAssistanceIndication :=
+        {
+          dDX := '00'B,
+          spare := '00'B,
+          elementIdentifier := '1111'B
+        }
+      } 
+    }
+  }   
+}
+
+const PDU_NAS_EPS c_PDU_NAS_EPS_DataServiceRequest :=
+{    
+  protocolDiscriminator := '0111'B,
+  ePS_messages := {
+    ePS_MobilityManagement :={
+      pDU_NAS_EPS_ControlPlaneServiceRequest := {
+        securityHeaderType := '0000'B,
+        messageType := '01001101'B,
+        controlPlaneServiceType :=
+        {
+          controlPlaneServiceTypeValue := '001'B,
+          activeFlag := '0'B
+        },
+        nASKeySetIdentifier :=
+        {
+          identifier := '001'B,
+          tSC := '1'B
+        },
+        eSM_MessageContainer := 
+        {
+          elementIdentifier := '78'O,
+          eSM_MessageContainer :=
+          {
+            lengthIndicator := 2,
+            content := 'FFFF'O
+          }
+        },
+        nAS_MessageContainer := omit,
+        ePS_BearerContextStatus := omit,
+        deviceProperties := 
+        {
+          lowPriority := '1'B,
+          spare := '000'B,
+          elementIdentifier := '1101'B    
+        }
+      }
+    }
+  }
+}  
+
+const PDU_NAS_EPS c_PDU_NAS_EPS_ServiceAccept :=
+{    
+  protocolDiscriminator := '0111'B,
+  ePS_messages := {
+    ePS_MobilityManagement :={
+      pDU_NAS_EPS_ServiceAccept := {
+        securityHeaderType := '0000'B,
+        messageType := '01001111'B,
+        ePS_BearerContextStatus := 
+        {
+          elementIdentifier := '57'O,
+          lengthIndicator := 2,
+          ebi0 := '1'B,
+          ebi1 := '1'B,
+          ebi2 := '1'B,
+          ebi3 := '1'B,
+          ebi4 := '1'B,
+          ebi5 := '1'B,
+          ebi6 := '1'B,
+          ebi7 := '1'B,
+          ebi8 := '1'B,
+          ebi9 := '1'B,
+          ebi10 := '1'B,
+          ebi11 := '1'B,
+          ebi12 := '1'B,
+          ebi13 := '1'B,
+          ebi14 := '1'B,
+          ebi15 := '1'B
+        },
+        t3448 := 
+        {
+          elementIdentifier := '6B'O,
+          lengthIndicator := 1 , 
+          gprsTimer2 :=
+          {
+            timerValue := '00101'B,
+            unit := '011'B
+          }
+        }
+      }
+    }
+  }
+}  
+
+
+template  EPS_MobileIdentityV t_ePS_MobileIdentityV := 
+{
+  typeOfIdentity := '110'B,
+  oddEvenInd_identity := 
+  {
+    guti :=  
+    {
+      oddevenIndicator := '0'B, 
+      spare := '1111'B,
+      mccDigit1 := '1'H,
+      mccDigit2 := '2'H,
+      mccDigit3 := '3'H,
+      mncDigit3 := '4'H,
+      mncDigit1 := '5'H,
+      mncDigit2 := '6'H,
+      mMEGI := 'AABB'O,
+      mMEC := 'FF'O,
+      mTMSI := 'AABBCCDD'O
+    }
+  }
+}        
+
+template IMSI t_imsi :=
+{
+  oddevenIndicator := '1'B,       
+  digits := '1234567'H,
+  fillerDigit := omit 
+}
+
+template GUTI t_guti :=  
+{
+  oddevenIndicator := '0'B, 
+  spare := '1111'B,
+  mccDigit1 := '1'H,
+  mccDigit2 := '2'H,
+  mccDigit3 := '3'H,
+  mncDigit3 := '4'H,
+  mncDigit1 := '5'H,
+  mncDigit2 := '6'H,
+  mMEGI := 'AABB'O,
+  mMEC := 'FF'O,
+  mTMSI := 'AABBCCDD'O
+}
+
+template IMEI t_imei :=
+{
+  oddevenIndicator := '1'B,       
+  digits := '1234567'H,
+  fillerDigit := omit 
+}
+
+testcase tc_NAS_EPS_AttachAccept() runs on NAS_EPS_Test_CT
+{
+  var octetstring v_Encoded_msg;
+  log(c_PDU_NAS_EPS_AttachAccept);
+  v_Encoded_msg := enc_PDU_NAS_EPS( c_PDU_NAS_EPS_AttachAccept );
+  log("ENCODE: ",v_Encoded_msg);
+
+  var PDU_NAS_EPS v_EPSM_msg;
+  v_EPSM_msg := dec_PDU_NAS_EPS( v_Encoded_msg );
+  log("DECODE: ",v_EPSM_msg);
+  
+  if ( c_PDU_NAS_EPS_AttachAccept == v_EPSM_msg ) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase tc_NAS_EPS_AttachReject() runs on NAS_EPS_Test_CT
+{
+  var octetstring v_Encoded_msg;
+  log(c_PDU_NAS_EPS_AttachReject);
+  v_Encoded_msg := enc_PDU_NAS_EPS( c_PDU_NAS_EPS_AttachReject );
+  log("ENCODE: ",v_Encoded_msg);
+
+  var PDU_NAS_EPS v_EPSM_msg;
+  v_EPSM_msg := dec_PDU_NAS_EPS( v_Encoded_msg );
+  log("DECODE: ",v_EPSM_msg);
+  
+  if ( c_PDU_NAS_EPS_AttachReject == v_EPSM_msg ) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase tc_NAS_EPS_AttachRequest() runs on NAS_EPS_Test_CT
+{
+  var octetstring v_Encoded_msg;
+  log(c_PDU_NAS_EPS_AttachRequest);
+  v_Encoded_msg := enc_PDU_NAS_EPS( c_PDU_NAS_EPS_AttachRequest );
+  log("ENCODE: ",v_Encoded_msg);
+
+  var PDU_NAS_EPS v_EPSM_msg;
+  v_EPSM_msg := dec_PDU_NAS_EPS( v_Encoded_msg );
+  log("DECODE: ",v_EPSM_msg);
+
+  if ( c_PDU_NAS_EPS_AttachRequest == v_EPSM_msg ) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase tc_NAS_EPS_AttachRequest_withCodec() runs on NAS_EPS_Test_CT
+{
+  var octetstring v_Encoded_msg;
+  var PDU_NAS_EPS v_PDU_NAS_EPS_AttachRequest := c_PDU_NAS_EPS_AttachRequest;
+  v_PDU_NAS_EPS_AttachRequest.ePS_messages.ePS_MobilityManagement.pDU_NAS_EPS_AttachRequest.supportedCodecList := {
+    elementIdentifier := '40'O,
+    lengthIndicator := 3,
+    codecList := {
+      {
+        systemIdentification1 := '01'O,
+        lengthOfBitmap1 := 1,
+        codecBitmap1_bits1to8 := '01'O,
+        codecBitmap1_bits9to16 := omit,
+        additional_codecs := omit
+      }
+    }
+  };
+  log(c_PDU_NAS_EPS_AttachRequest);
+  v_Encoded_msg := enc_PDU_NAS_EPS( v_PDU_NAS_EPS_AttachRequest );
+  log("ENCODE: ",v_Encoded_msg);
+
+  var PDU_NAS_EPS v_EPSM_msg;
+  v_EPSM_msg := dec_PDU_NAS_EPS( v_Encoded_msg );
+  log("DECODE: ",v_EPSM_msg);
+
+  if ( v_PDU_NAS_EPS_AttachRequest == v_EPSM_msg ) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase tc_NAS_EPS_TrackingAreaUpdateAccept() runs on NAS_EPS_Test_CT
+{
+  var octetstring v_Encoded_msg;
+  log(c_PDU_NAS_EPS_TrackingAreaUpdateAccept);
+  v_Encoded_msg := enc_PDU_NAS_EPS( c_PDU_NAS_EPS_TrackingAreaUpdateAccept );
+  log("ENCODE: ",v_Encoded_msg);
+
+  var PDU_NAS_EPS v_EPSM_msg;
+  v_EPSM_msg := dec_PDU_NAS_EPS( v_Encoded_msg );
+  log("DECODE: ",v_EPSM_msg);
+  
+  if ( c_PDU_NAS_EPS_TrackingAreaUpdateAccept == v_EPSM_msg ) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase tc_NAS_EPS_TrackingAreaUpdateReject() runs on NAS_EPS_Test_CT
+{
+  var octetstring v_Encoded_msg;
+  log(c_PDU_NAS_EPS_TrackingAreaUpdateReject);
+  v_Encoded_msg := enc_PDU_NAS_EPS( c_PDU_NAS_EPS_TrackingAreaUpdateReject );
+  log("ENCODE: ",v_Encoded_msg);
+
+  var PDU_NAS_EPS v_EPSM_msg;
+  v_EPSM_msg := dec_PDU_NAS_EPS( v_Encoded_msg );
+  log("DECODE: ",v_EPSM_msg);
+  
+  if ( c_PDU_NAS_EPS_TrackingAreaUpdateReject == v_EPSM_msg ) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase tc_NAS_EPS_TrackingAreaUpdateRequest() runs on NAS_EPS_Test_CT
+{
+  var octetstring v_Encoded_msg;
+  log(c_PDU_NAS_EPS_TrackingAreaUpdateRequest);
+  v_Encoded_msg := enc_PDU_NAS_EPS( c_PDU_NAS_EPS_TrackingAreaUpdateRequest );
+  log("ENCODE: ",v_Encoded_msg);
+
+  var PDU_NAS_EPS v_EPSM_msg;
+  v_EPSM_msg := dec_PDU_NAS_EPS( v_Encoded_msg );
+  log("DECODE: ",v_EPSM_msg);
+  
+  if ( c_PDU_NAS_EPS_TrackingAreaUpdateRequest == v_EPSM_msg ) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase tc_NAS_EPS_ActDedEPSBearerContextRequest() runs on NAS_EPS_Test_CT
+{
+  var octetstring v_Encoded_msg;
+  log(c_PDU_NAS_EPS_ActDedEPSBearerContextRequest);
+  v_Encoded_msg := enc_PDU_NAS_EPS( c_PDU_NAS_EPS_ActDedEPSBearerContextRequest );
+  log("ENCODE: ",v_Encoded_msg);
+
+  var PDU_NAS_EPS v_EPSM_msg;
+  v_EPSM_msg := dec_PDU_NAS_EPS( v_Encoded_msg );
+  log("DECODE: ",v_EPSM_msg);
+
+  if ( c_PDU_NAS_EPS_ActDedEPSBearerContextRequest == v_EPSM_msg ) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase tc_NAS_EPS_ActDefEPSBearerContextRequest() runs on NAS_EPS_Test_CT
+{
+  var octetstring v_Encoded_msg;
+  log(c_PDU_NAS_EPS_ActDefEPSBearerContextRequest);
+  v_Encoded_msg := enc_PDU_NAS_EPS( c_PDU_NAS_EPS_ActDefEPSBearerContextRequest );
+  log("ENCODE: ",v_Encoded_msg);
+
+  var PDU_NAS_EPS v_EPSM_msg;
+  v_EPSM_msg := dec_PDU_NAS_EPS( v_Encoded_msg );
+  log("DECODE: ",v_EPSM_msg);
+  
+  if ( c_PDU_NAS_EPS_ActDefEPSBearerContextRequest == v_EPSM_msg ) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase tc_NAS_EPS_BearerResourceAllocationReject() runs on NAS_EPS_Test_CT
+{
+  var octetstring v_Encoded_msg;
+  log(c_PDU_NAS_EPS_BearerResourceAllocationReject);
+  v_Encoded_msg := enc_PDU_NAS_EPS( c_PDU_NAS_EPS_BearerResourceAllocationReject );
+  log("ENCODE: ",v_Encoded_msg);
+
+  var PDU_NAS_EPS v_EPSM_msg;
+  v_EPSM_msg := dec_PDU_NAS_EPS( v_Encoded_msg );
+  log("DECODE: ",v_EPSM_msg);
+  
+  if ( c_PDU_NAS_EPS_BearerResourceAllocationReject == v_EPSM_msg ) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase tc_NAS_EPS_BearerResourceModificationReject() runs on NAS_EPS_Test_CT
+{
+  var octetstring v_Encoded_msg;
+  log(c_PDU_NAS_EPS_BearerResourceModificationReject);
+  v_Encoded_msg := enc_PDU_NAS_EPS( c_PDU_NAS_EPS_BearerResourceModificationReject );
+  log("ENCODE: ",v_Encoded_msg);
+
+  var PDU_NAS_EPS v_EPSM_msg;
+  v_EPSM_msg := dec_PDU_NAS_EPS( v_Encoded_msg );
+  log("DECODE: ",v_EPSM_msg);
+  
+  if ( c_PDU_NAS_EPS_BearerResourceModificationReject == v_EPSM_msg ) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase tc_NAS_EPS_DeactEPSBearerContextRequest() runs on NAS_EPS_Test_CT
+{
+  var octetstring v_Encoded_msg;
+  log(c_PDU_NAS_EPS_DeactEPSBearerContextRequest);
+  v_Encoded_msg := enc_PDU_NAS_EPS( c_PDU_NAS_EPS_DeactEPSBearerContextRequest );
+  log("ENCODE: ",v_Encoded_msg);
+
+  var PDU_NAS_EPS v_EPSM_msg;
+  v_EPSM_msg := dec_PDU_NAS_EPS( v_Encoded_msg );
+  log("DECODE: ",v_EPSM_msg);
+
+  if ( c_PDU_NAS_EPS_DeactEPSBearerContextRequest == v_EPSM_msg ) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase tc_NAS_EPS_ModifyEPSBearerContextRequest() runs on NAS_EPS_Test_CT
+{
+  var octetstring v_Encoded_msg;
+  log(c_PDU_NAS_EPS_ModifyEPSBearerContextRequest);
+  v_Encoded_msg := enc_PDU_NAS_EPS( c_PDU_NAS_EPS_ModifyEPSBearerContextRequest );
+  log("ENCODE: ",v_Encoded_msg);
+
+  var PDU_NAS_EPS v_EPSM_msg;
+  v_EPSM_msg := dec_PDU_NAS_EPS( v_Encoded_msg );
+  log("DECODE: ",v_EPSM_msg);
+  
+  if ( c_PDU_NAS_EPS_ModifyEPSBearerContextRequest == v_EPSM_msg ) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase tc_NAS_EPS_PDN_ConnectivityReject() runs on NAS_EPS_Test_CT
+{
+  var octetstring v_Encoded_msg;
+  log(c_PDU_NAS_EPS_PDN_ConnectivityReject);
+  v_Encoded_msg := enc_PDU_NAS_EPS( c_PDU_NAS_EPS_PDN_ConnectivityReject );
+  log("ENCODE: ",v_Encoded_msg);
+
+  var PDU_NAS_EPS v_EPSM_msg;
+  v_EPSM_msg := dec_PDU_NAS_EPS( v_Encoded_msg );
+  log("DECODE: ",v_EPSM_msg);
+
+  if ( c_PDU_NAS_EPS_PDN_ConnectivityReject == v_EPSM_msg ) {setverdict(pass);}
+  else {setverdict(fail);}
+
+}
+
+testcase tc_NAS_EPS_encdec_EPS_MobileIdentityV() runs on NAS_EPS_Test_CT
+{
+  var octetstring v_ePS_MobileIdentityV_oct := enc_EPS_MobileIdentityV_NAS_EPS(valueof(t_ePS_MobileIdentityV));
+  log("ENCODE: ",v_ePS_MobileIdentityV_oct);
+
+  var EPS_MobileIdentityV v_ePS_MobileIdentityV;
+  var integer vl_int := dec_EPS_MobileIdentityV_NAS_EPS_backtrack(v_ePS_MobileIdentityV_oct,v_ePS_MobileIdentityV);
+  log("DECODE: ",v_ePS_MobileIdentityV);
+  if ( vl_int == 0 and match(v_ePS_MobileIdentityV,t_ePS_MobileIdentityV)) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase tc_NAS_EPS_encdec_IMSI() runs on NAS_EPS_Test_CT
+{
+  var octetstring v_imsi_oct := enc_IMSI_NAS_EPS(valueof(t_imsi));
+  log("ENCODE: ",v_imsi_oct);
+  var IMSI v_imsi;
+  var integer vl_int := dec_IMSI_NAS_EPS_backtrack(v_imsi_oct,v_imsi);
+  log("DECODE: ",v_imsi);
+  if ( vl_int == 0 and match(v_imsi,t_imsi)) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase tc_NAS_EPS_encdec_GUTI() runs on NAS_EPS_Test_CT
+{
+  var octetstring v_guti_oct := enc_GUTI_NAS_EPS(valueof(t_guti));
+  log("ENCODE: ",v_guti_oct);
+  var GUTI v_guti;
+  var integer vl_int := dec_GUTI_NAS_EPS_backtrack(v_guti_oct,v_guti);
+  log("DECODE: ",v_guti);
+  if ( vl_int == 0 and match(v_guti,t_guti)) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase tc_NAS_EPS_encdec_IMEI() runs on NAS_EPS_Test_CT
+{
+  var octetstring v_imei_oct := enc_IMEI_NAS_EPS(valueof(t_imei));
+  log("ENCODE: ",v_imei_oct);
+  var IMEI v_imei;
+  var integer vl_int := dec_IMEI_NAS_EPS_backtrack(v_imei_oct,v_imei);
+  log("DECODE: ",v_imei);
+  if ( vl_int == 0 and match(v_imei,t_imei)) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase tc_NAS_EPS_RemoteUEReport() runs on NAS_EPS_Test_CT
+{
+  var octetstring v_Encoded_msg;
+  log(c_PDU_NAS_EPS_RemoteUEReport);
+  v_Encoded_msg := enc_PDU_NAS_EPS( c_PDU_NAS_EPS_RemoteUEReport );
+  log("ENCODE: ",v_Encoded_msg);
+
+  var PDU_NAS_EPS v_EPSM_msg;
+  v_EPSM_msg := dec_PDU_NAS_EPS( v_Encoded_msg );
+  log("DECODE: ",v_EPSM_msg);
+
+  if ( c_PDU_NAS_EPS_RemoteUEReport == v_EPSM_msg ) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase tc_NAS_EPS_RemoteUEReportResponse() runs on NAS_EPS_Test_CT
+{
+  var octetstring v_Encoded_msg;
+  log(c_PDU_NAS_EPS_RemoteUEReportResponse);
+  v_Encoded_msg := enc_PDU_NAS_EPS( c_PDU_NAS_EPS_RemoteUEReportResponse );
+  log("ENCODE: ",v_Encoded_msg);
+
+  var PDU_NAS_EPS v_EPSM_msg;
+  v_EPSM_msg := dec_PDU_NAS_EPS( v_Encoded_msg );
+  log("DECODE: ",v_EPSM_msg);
+
+  if ( c_PDU_NAS_EPS_RemoteUEReportResponse == v_EPSM_msg ) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase tc_NAS_EPS_ESMDataTransport() runs on NAS_EPS_Test_CT
+{
+  var octetstring v_Encoded_msg;
+  log(c_PDU_NAS_EPS_ESMDataTransport);
+  v_Encoded_msg := enc_PDU_NAS_EPS( c_PDU_NAS_EPS_ESMDataTransport );
+  log("ENCODE: ",v_Encoded_msg);
+
+  var PDU_NAS_EPS v_EPSM_msg;
+  v_EPSM_msg := dec_PDU_NAS_EPS( v_Encoded_msg );
+  log("DECODE: ",v_EPSM_msg);
+
+  if ( c_PDU_NAS_EPS_ESMDataTransport == v_EPSM_msg ) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase tc_NAS_EPS_DataServiceRequest() runs on NAS_EPS_Test_CT
+{
+  var octetstring v_Encoded_msg;
+  log(c_PDU_NAS_EPS_DataServiceRequest);
+  v_Encoded_msg := enc_PDU_NAS_EPS( c_PDU_NAS_EPS_DataServiceRequest );
+  log("ENCODE: ",v_Encoded_msg);
+
+  var PDU_NAS_EPS v_EPSM_msg;
+  v_EPSM_msg := dec_PDU_NAS_EPS( v_Encoded_msg );
+  log("DECODE: ",v_EPSM_msg);
+
+  if ( c_PDU_NAS_EPS_DataServiceRequest == v_EPSM_msg ) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase tc_NAS_EPS_ServiceAccept() runs on NAS_EPS_Test_CT
+{
+  var octetstring v_Encoded_msg;
+  log(c_PDU_NAS_EPS_ServiceAccept);
+  v_Encoded_msg := enc_PDU_NAS_EPS( c_PDU_NAS_EPS_ServiceAccept );
+  log("ENCODE: ",v_Encoded_msg);
+
+  var PDU_NAS_EPS v_EPSM_msg;
+  v_EPSM_msg := dec_PDU_NAS_EPS( v_Encoded_msg );
+  log("DECODE: ",v_EPSM_msg);
+
+  if ( c_PDU_NAS_EPS_ServiceAccept == v_EPSM_msg ) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+control
+{ 
+  execute( tc_NAS_EPS_AttachAccept()); 
+  execute( tc_NAS_EPS_AttachReject()); 
+  execute( tc_NAS_EPS_AttachRequest());
+  execute( tc_NAS_EPS_AttachRequest_withCodec());
+  execute( tc_NAS_EPS_TrackingAreaUpdateAccept())  
+  execute( tc_NAS_EPS_TrackingAreaUpdateReject()) 
+  execute( tc_NAS_EPS_TrackingAreaUpdateRequest()) 
+  execute( tc_NAS_EPS_ActDedEPSBearerContextRequest()) 
+  execute( tc_NAS_EPS_ActDefEPSBearerContextRequest()) 
+  execute( tc_NAS_EPS_BearerResourceAllocationReject())  
+  execute( tc_NAS_EPS_BearerResourceModificationReject())          
+  execute( tc_NAS_EPS_DeactEPSBearerContextRequest())
+  execute( tc_NAS_EPS_ModifyEPSBearerContextRequest() );
+  execute( tc_NAS_EPS_PDN_ConnectivityReject() );
+  execute( tc_NAS_EPS_encdec_EPS_MobileIdentityV() );
+  execute( tc_NAS_EPS_encdec_IMSI() );
+  execute( tc_NAS_EPS_encdec_GUTI() );
+  execute( tc_NAS_EPS_encdec_IMEI() );
+  execute( tc_NAS_EPS_RemoteUEReport() );
+  execute( tc_NAS_EPS_RemoteUEReportResponse() );
+  execute( tc_NAS_EPS_ESMDataTransport() );
+  execute( tc_NAS_EPS_DataServiceRequest() );
+  execute( tc_NAS_EPS_ServiceAccept() );
+
+
+}
+
+} // end of module
diff --git a/test/NAS_EPS_TestResults.tgz b/test/NAS_EPS_TestResults.tgz
new file mode 100644
index 0000000..9448c0f
--- /dev/null
+++ b/test/NAS_EPS_TestResults.tgz
Binary files differ
diff --git a/test/NAS_EPS_v15.2.0_1_CNL113862_test.tpd b/test/NAS_EPS_v15.2.0_1_CNL113862_test.tpd
new file mode 100644
index 0000000..8a4e0f0
--- /dev/null
+++ b/test/NAS_EPS_v15.2.0_1_CNL113862_test.tpd
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TITAN_Project_File_Information version="1.0">
+  <ProjectName>NAS_EPS_v15.2.0_1_CNL113862_test</ProjectName>
+  <ReferencedProjects>
+    <ReferencedProject name="NAS_EPS_v15.2.0_1_CNL113862" projectLocationURI="../NAS_EPS_v15.2.0_1_CNL113862.tpd"/>
+  </ReferencedProjects>
+  <Files>
+    <FileResource projectRelativePath="NAS_EPS_Test.cfg" relativeURI="NAS_EPS_Test.cfg"/>
+    <FileResource projectRelativePath="NAS_EPS_Test.ttcn" relativeURI="NAS_EPS_Test.ttcn"/>
+  </Files>
+  <ActiveConfiguration>Default</ActiveConfiguration>
+  <Configurations>
+    <Configuration name="Default">
+      <ProjectProperties>
+        <MakefileSettings>
+          <generateInternalMakefile>true</generateInternalMakefile>
+          <GNUMake>true</GNUMake>
+          <incrementalDependencyRefresh>true</incrementalDependencyRefresh>
+          <targetExecutable>bin/NAS_EPS_v15.2.0_1_CNL113862_test</targetExecutable>
+        </MakefileSettings>
+        <LocalBuildSettings>
+          <workingDirectory>bin</workingDirectory>
+        </LocalBuildSettings>
+      </ProjectProperties>
+    </Configuration>
+  </Configurations>
+</TITAN_Project_File_Information>