// This C++ source file was generated by the TTCN-3 compiler
// of the TTCN-3 Test Executor version 11.1.0
// The generation of user and time information were disabled by the -D flag.

// Copyright (c) 2000-2025 Ericsson Telecom AB

// Do not edit this file unless you know what you are doing.

/* Including header files */

#include "MobileL3_GMM_SM_Types.hh"

namespace MobileL3__GMM__SM__Types {

/* Literal string constants */

const unsigned char bs_3_bits[] = { 0 },
bs_22_bits[] = { 128 },
bs_25_bits[] = { 64 },
bs_28_bits[] = { 192 },
bs_29_bits[] = { 32 },
bs_30_bits[] = { 160 },
bs_31_bits[] = { 96 },
bs_40_bits[] = { 16 },
bs_41_bits[] = { 144 },
bs_42_bits[] = { 80 },
bs_43_bits[] = { 208 },
bs_48_bits[] = { 48 },
bs_49_bits[] = { 176 },
bs_50_bits[] = { 112 },
bs_4_bits[] = { 8 },
bs_32_bits[] = { 8 },
bs_33_bits[] = { 136 },
bs_34_bits[] = { 72 },
bs_35_bits[] = { 200 },
bs_37_bits[] = { 40 },
bs_38_bits[] = { 168 },
bs_39_bits[] = { 104 },
bs_36_bits[] = { 56 },
bs_15_bits[] = { 4 },
bs_5_bits[] = { 4 },
bs_44_bits[] = { 4 },
bs_45_bits[] = { 132 },
bs_6_bits[] = { 12 },
bs_26_bits[] = { 12 },
bs_23_bits[] = { 44 },
bs_19_bits[] = { 2 },
bs_7_bits[] = { 2 },
bs_51_bits[] = { 130 },
bs_52_bits[] = { 66 },
bs_53_bits[] = { 194 },
bs_57_bits[] = { 34 },
bs_58_bits[] = { 162 },
bs_27_bits[] = { 98 },
bs_64_bits[] = { 98 },
bs_65_bits[] = { 226 },
bs_59_bits[] = { 18 },
bs_61_bits[] = { 146 },
bs_60_bits[] = { 82 },
bs_62_bits[] = { 210 },
bs_63_bits[] = { 50 },
bs_54_bits[] = { 178 },
bs_55_bits[] = { 114 },
bs_56_bits[] = { 242 },
bs_8_bits[] = { 10 },
bs_69_bits[] = { 170 },
bs_70_bits[] = { 106 },
bs_71_bits[] = { 234 },
bs_72_bits[] = { 26 },
bs_73_bits[] = { 154 },
bs_74_bits[] = { 90 },
bs_66_bits[] = { 218 },
bs_67_bits[] = { 58 },
bs_68_bits[] = { 186 },
bs_16_bits[] = { 6 },
bs_9_bits[] = { 6 },
bs_0_bits[] = { 14 },
bs_2_bits[] = { 1 },
bs_17_bits[] = { 1 },
bs_10_bits[] = { 1 },
bs_46_bits[] = { 97 },
bs_47_bits[] = { 81 },
bs_1_bits[] = { 9 },
bs_18_bits[] = { 5 },
bs_11_bits[] = { 5 },
bs_12_bits[] = { 13 },
bs_20_bits[] = { 3 },
bs_21_bits[] = { 3 },
bs_24_bits[] = { 11 },
bs_14_bits[] = { 7 },
bs_13_bits[] = { 15 };
extern const BITSTRING bs_3(4, bs_3_bits),
bs_22(8, bs_22_bits),
bs_25(8, bs_25_bits),
bs_28(8, bs_28_bits),
bs_29(8, bs_29_bits),
bs_30(8, bs_30_bits),
bs_31(8, bs_31_bits),
bs_40(8, bs_40_bits),
bs_41(8, bs_41_bits),
bs_42(8, bs_42_bits),
bs_43(8, bs_43_bits),
bs_48(8, bs_48_bits),
bs_49(8, bs_49_bits),
bs_50(8, bs_50_bits),
bs_4(4, bs_4_bits),
bs_32(8, bs_32_bits),
bs_33(8, bs_33_bits),
bs_34(8, bs_34_bits),
bs_35(8, bs_35_bits),
bs_37(8, bs_37_bits),
bs_38(8, bs_38_bits),
bs_39(8, bs_39_bits),
bs_36(8, bs_36_bits),
bs_15(3, bs_15_bits),
bs_5(4, bs_5_bits),
bs_44(8, bs_44_bits),
bs_45(8, bs_45_bits),
bs_6(4, bs_6_bits),
bs_26(7, bs_26_bits),
bs_23(7, bs_23_bits),
bs_19(3, bs_19_bits),
bs_7(4, bs_7_bits),
bs_51(8, bs_51_bits),
bs_52(8, bs_52_bits),
bs_53(8, bs_53_bits),
bs_57(8, bs_57_bits),
bs_58(8, bs_58_bits),
bs_27(7, bs_27_bits),
bs_64(8, bs_64_bits),
bs_65(8, bs_65_bits),
bs_59(8, bs_59_bits),
bs_61(8, bs_61_bits),
bs_60(8, bs_60_bits),
bs_62(8, bs_62_bits),
bs_63(8, bs_63_bits),
bs_54(8, bs_54_bits),
bs_55(8, bs_55_bits),
bs_56(8, bs_56_bits),
bs_8(4, bs_8_bits),
bs_69(8, bs_69_bits),
bs_70(8, bs_70_bits),
bs_71(8, bs_71_bits),
bs_72(8, bs_72_bits),
bs_73(8, bs_73_bits),
bs_74(8, bs_74_bits),
bs_66(8, bs_66_bits),
bs_67(8, bs_67_bits),
bs_68(8, bs_68_bits),
bs_16(3, bs_16_bits),
bs_9(4, bs_9_bits),
bs_0(4, bs_0_bits),
bs_2(1, bs_2_bits),
bs_17(3, bs_17_bits),
bs_10(4, bs_10_bits),
bs_46(7, bs_46_bits),
bs_47(7, bs_47_bits),
bs_1(4, bs_1_bits),
bs_18(3, bs_18_bits),
bs_11(4, bs_11_bits),
bs_12(4, bs_12_bits),
bs_20(3, bs_20_bits),
bs_21(4, bs_21_bits),
bs_24(4, bs_24_bits),
bs_14(3, bs_14_bits),
bs_13(4, bs_13_bits);
const unsigned char os_22_octets[] = { 1 },
os_23_octets[] = { 2 },
os_24_octets[] = { 3 },
os_25_octets[] = { 4 },
os_26_octets[] = { 5 },
os_27_octets[] = { 6 },
os_28_octets[] = { 7 },
os_29_octets[] = { 8 },
os_12_octets[] = { 16 },
os_11_octets[] = { 20 },
os_30_octets[] = { 23 },
os_1_octets[] = { 25 },
os_4_octets[] = { 37 },
os_2_octets[] = { 38 },
os_0_octets[] = { 39 },
os_14_octets[] = { 40 },
os_36_octets[] = { 41 },
os_32_octets[] = { 42 },
os_9_octets[] = { 43 },
os_15_octets[] = { 48 },
os_3_octets[] = { 49 },
os_18_octets[] = { 50 },
os_6_octets[] = { 51 },
os_19_octets[] = { 52 },
os_21_octets[] = { 53 },
os_20_octets[] = { 54 },
os_33_octets[] = { 55 },
os_34_octets[] = { 56 },
os_17_octets[] = { 57 },
os_35_octets[] = { 58 },
os_8_octets[] = { 88 },
os_10_octets[] = { 93 },
os_7_octets[] = { 102 },
os_16_octets[] = { 107 },
os_13_octets[] = { 110 },
os_31_octets[] = { 106 },
os_5_octets[] = { 140 };
extern const OCTETSTRING os_22(1, os_22_octets),
os_23(1, os_23_octets),
os_24(1, os_24_octets),
os_25(1, os_25_octets),
os_26(1, os_26_octets),
os_27(1, os_27_octets),
os_28(1, os_28_octets),
os_29(1, os_29_octets),
os_12(1, os_12_octets),
os_11(1, os_11_octets),
os_30(1, os_30_octets),
os_1(1, os_1_octets),
os_4(1, os_4_octets),
os_2(1, os_2_octets),
os_0(1, os_0_octets),
os_14(1, os_14_octets),
os_36(1, os_36_octets),
os_32(1, os_32_octets),
os_9(1, os_9_octets),
os_15(1, os_15_octets),
os_3(1, os_3_octets),
os_18(1, os_18_octets),
os_6(1, os_6_octets),
os_19(1, os_19_octets),
os_21(1, os_21_octets),
os_20(1, os_20_octets),
os_33(1, os_33_octets),
os_34(1, os_34_octets),
os_17(1, os_17_octets),
os_35(1, os_35_octets),
os_8(1, os_8_octets),
os_10(1, os_10_octets),
os_7(1, os_7_octets),
os_16(1, os_16_octets),
os_13(1, os_13_octets),
os_31(1, os_31_octets),
os_5(1, os_5_octets);
const unsigned char module_checksum[] = { 0xa7, 0xb7, 0x22, 0x0e, 0x0f, 0xaa, 0xa8, 0x84, 0x3d, 0xfd, 0x60, 0xb2, 0x8e, 0xe0, 0x09, 0x95 };

/* Global variable definitions */

const XERdescriptor_t       AdditionalUpdateTypeV_aUTV_xer_ = { {"aUTV>\n", "aUTV>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AdditionalUpdateTypeV_aUTV_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AdditionalUpdateTypeV_aUTV_descr_ = { "@MobileL3_GMM_SM_Types.AdditionalUpdateTypeV.aUTV", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &AdditionalUpdateTypeV_aUTV_xer_, &BITSTRING_json_, &AdditionalUpdateTypeV_aUTV_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AdditionalUpdateTypeV_aUTV_default_coding("RAW");
const XERdescriptor_t       AdditionalUpdateTypeV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AdditionalUpdateTypeV_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AdditionalUpdateTypeV_spare_descr_ = { "@MobileL3_GMM_SM_Types.AdditionalUpdateTypeV.spare", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &AdditionalUpdateTypeV_spare_xer_, &BITSTRING_json_, &AdditionalUpdateTypeV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AdditionalUpdateTypeV_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t AdditionalUpdateTypeV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AdditionalUpdateTypeV
const TTCN_Typedescriptor_t AdditionalUpdateTypeV_descr_ = { "@MobileL3_GMM_SM_Types.AdditionalUpdateTypeV", NULL, &AdditionalUpdateTypeV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AdditionalUpdateTypeV_default_coding("RAW");
UNIVERSAL_CHARSTRING AdditionalUpdateTypeTV_additionalUpdateType_default_coding("RAW");
const XERdescriptor_t       AdditionalUpdateTypeTV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AdditionalUpdateTypeTV_elementIdentifier_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AdditionalUpdateTypeTV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV.elementIdentifier", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &AdditionalUpdateTypeTV_elementIdentifier_xer_, &BITSTRING_json_, &AdditionalUpdateTypeTV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AdditionalUpdateTypeTV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t AdditionalUpdateTypeTV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AdditionalUpdateTypeTV
const TTCN_Typedescriptor_t AdditionalUpdateTypeTV_descr_ = { "@MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV", NULL, &AdditionalUpdateTypeTV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AdditionalUpdateTypeTV_default_coding("RAW");
const XERdescriptor_t       AttachResultV_resultOfAttach_xer_ = { {"resultOfAttach>\n", "resultOfAttach>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AttachResultV_resultOfAttach_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AttachResultV_resultOfAttach_descr_ = { "@MobileL3_GMM_SM_Types.AttachResultV.resultOfAttach", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &AttachResultV_resultOfAttach_xer_, &BITSTRING_json_, &AttachResultV_resultOfAttach_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AttachResultV_resultOfAttach_default_coding("RAW");
const XERdescriptor_t       AttachResultV_fop__l3_xer_ = { {"fop_l3>\n", "fop_l3>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AttachResultV_fop__l3_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AttachResultV_fop__l3_descr_ = { "@MobileL3_GMM_SM_Types.AttachResultV.fop_l3", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &AttachResultV_fop__l3_xer_, &BITSTRING_json_, &AttachResultV_fop__l3_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AttachResultV_fop__l3_default_coding("RAW");
const TTCN_RAWdescriptor_t AttachResultV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AttachResultV
const TTCN_Typedescriptor_t AttachResultV_descr_ = { "@MobileL3_GMM_SM_Types.AttachResultV", NULL, &AttachResultV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AttachResultV_default_coding("RAW");
const XERdescriptor_t       AttachTypeV_attachType_xer_ = { {"attachType>\n", "attachType>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AttachTypeV_attachType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AttachTypeV_attachType_descr_ = { "@MobileL3_GMM_SM_Types.AttachTypeV.attachType", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &AttachTypeV_attachType_xer_, &BITSTRING_json_, &AttachTypeV_attachType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AttachTypeV_attachType_default_coding("RAW");
const XERdescriptor_t       AttachTypeV_for__l3_xer_ = { {"for_l3>\n", "for_l3>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AttachTypeV_for__l3_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AttachTypeV_for__l3_descr_ = { "@MobileL3_GMM_SM_Types.AttachTypeV.for_l3", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &AttachTypeV_for__l3_xer_, &BITSTRING_json_, &AttachTypeV_for__l3_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AttachTypeV_for__l3_default_coding("RAW");
const TTCN_RAWdescriptor_t AttachTypeV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AttachTypeV
const TTCN_Typedescriptor_t AttachTypeV_descr_ = { "@MobileL3_GMM_SM_Types.AttachTypeV", NULL, &AttachTypeV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AttachTypeV_default_coding("RAW");
const XERdescriptor_t       CipheringAlgorithmV_valueField_xer_ = { {"valueField>\n", "valueField>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t CipheringAlgorithmV_valueField_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t CipheringAlgorithmV_valueField_descr_ = { "@MobileL3_GMM_SM_Types.CipheringAlgorithmV.valueField", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &CipheringAlgorithmV_valueField_xer_, &BITSTRING_json_, &CipheringAlgorithmV_valueField_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CipheringAlgorithmV_valueField_default_coding("RAW");
const XERdescriptor_t       CipheringAlgorithmV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t CipheringAlgorithmV_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t CipheringAlgorithmV_spare_descr_ = { "@MobileL3_GMM_SM_Types.CipheringAlgorithmV.spare", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &CipheringAlgorithmV_spare_xer_, &BITSTRING_json_, &CipheringAlgorithmV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CipheringAlgorithmV_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t CipheringAlgorithmV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for CipheringAlgorithmV
const TTCN_Typedescriptor_t CipheringAlgorithmV_descr_ = { "@MobileL3_GMM_SM_Types.CipheringAlgorithmV", NULL, &CipheringAlgorithmV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CipheringAlgorithmV_default_coding("RAW");
UNIVERSAL_CHARSTRING CipheringAlgorithmTV_cipheringAlgorithm_default_coding("RAW");
const XERdescriptor_t       CipheringAlgorithmTV_cipheringAlgorithmIEI_xer_ = { {"cipheringAlgorithmIEI>\n", "cipheringAlgorithmIEI>\n"}, {23, 23}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t CipheringAlgorithmTV_cipheringAlgorithmIEI_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t CipheringAlgorithmTV_cipheringAlgorithmIEI_descr_ = { "@MobileL3_GMM_SM_Types.CipheringAlgorithmTV.cipheringAlgorithmIEI", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &CipheringAlgorithmTV_cipheringAlgorithmIEI_xer_, &BITSTRING_json_, &CipheringAlgorithmTV_cipheringAlgorithmIEI_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CipheringAlgorithmTV_cipheringAlgorithmIEI_default_coding("RAW");
const TTCN_RAWdescriptor_t CipheringAlgorithmTV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for CipheringAlgorithmTV
const TTCN_Typedescriptor_t CipheringAlgorithmTV_descr_ = { "@MobileL3_GMM_SM_Types.CipheringAlgorithmTV", NULL, &CipheringAlgorithmTV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CipheringAlgorithmTV_default_coding("RAW");
const XERdescriptor_t       TMSIStatusV_tmsiFlag_xer_ = { {"tmsiFlag>\n", "tmsiFlag>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t TMSIStatusV_tmsiFlag_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t TMSIStatusV_tmsiFlag_descr_ = { "@MobileL3_GMM_SM_Types.TMSIStatusV.tmsiFlag", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &TMSIStatusV_tmsiFlag_xer_, &BITSTRING_json_, &TMSIStatusV_tmsiFlag_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TMSIStatusV_tmsiFlag_default_coding("RAW");
const XERdescriptor_t       TMSIStatusV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t TMSIStatusV_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t TMSIStatusV_spare_descr_ = { "@MobileL3_GMM_SM_Types.TMSIStatusV.spare", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &TMSIStatusV_spare_xer_, &BITSTRING_json_, &TMSIStatusV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TMSIStatusV_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t TMSIStatusV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for TMSIStatusV
const TTCN_Typedescriptor_t TMSIStatusV_descr_ = { "@MobileL3_GMM_SM_Types.TMSIStatusV", NULL, &TMSIStatusV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TMSIStatusV_default_coding("RAW");
UNIVERSAL_CHARSTRING TMSIStatusTV_tmsiStatusV_default_coding("RAW");
const XERdescriptor_t       TMSIStatusTV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t TMSIStatusTV_elementIdentifier_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t TMSIStatusTV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.TMSIStatusTV.elementIdentifier", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &TMSIStatusTV_elementIdentifier_xer_, &BITSTRING_json_, &TMSIStatusTV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TMSIStatusTV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t TMSIStatusTV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for TMSIStatusTV
const TTCN_Typedescriptor_t TMSIStatusTV_descr_ = { "@MobileL3_GMM_SM_Types.TMSIStatusTV", NULL, &TMSIStatusTV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TMSIStatusTV_default_coding("RAW");
const XERdescriptor_t       DetachTypeV_detachType_xer_ = { {"detachType>\n", "detachType>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t DetachTypeV_detachType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t DetachTypeV_detachType_descr_ = { "@MobileL3_GMM_SM_Types.DetachTypeV.detachType", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &DetachTypeV_detachType_xer_, &BITSTRING_json_, &DetachTypeV_detachType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DetachTypeV_detachType_default_coding("RAW");
const XERdescriptor_t       DetachTypeV_powerOffFlag_xer_ = { {"powerOffFlag>\n", "powerOffFlag>\n"}, {14, 14}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t DetachTypeV_powerOffFlag_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t DetachTypeV_powerOffFlag_descr_ = { "@MobileL3_GMM_SM_Types.DetachTypeV.powerOffFlag", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &DetachTypeV_powerOffFlag_xer_, &BITSTRING_json_, &DetachTypeV_powerOffFlag_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DetachTypeV_powerOffFlag_default_coding("RAW");
const TTCN_RAWdescriptor_t DetachTypeV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for DetachTypeV
const TTCN_Typedescriptor_t DetachTypeV_descr_ = { "@MobileL3_GMM_SM_Types.DetachTypeV", NULL, &DetachTypeV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DetachTypeV_default_coding("RAW");
UNIVERSAL_CHARSTRING DetachTypeTV_detachTypeV_default_coding("RAW");
const XERdescriptor_t       DetachTypeTV_detachTypeIEI_xer_ = { {"detachTypeIEI>\n", "detachTypeIEI>\n"}, {15, 15}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t DetachTypeTV_detachTypeIEI_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t DetachTypeTV_detachTypeIEI_descr_ = { "@MobileL3_GMM_SM_Types.DetachTypeTV.detachTypeIEI", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &DetachTypeTV_detachTypeIEI_xer_, &BITSTRING_json_, &DetachTypeTV_detachTypeIEI_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DetachTypeTV_detachTypeIEI_default_coding("RAW");
const TTCN_RAWdescriptor_t DetachTypeTV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for DetachTypeTV
const TTCN_Typedescriptor_t DetachTypeTV_descr_ = { "@MobileL3_GMM_SM_Types.DetachTypeTV", NULL, &DetachTypeTV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DetachTypeTV_default_coding("RAW");
const XERdescriptor_t       DRXParameterTV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int DRXParameterTV_elementIdentifier_oer_ext_arr_[0] = {};
const int DRXParameterTV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t DRXParameterTV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, DRXParameterTV_elementIdentifier_oer_ext_arr_, 0, DRXParameterTV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t DRXParameterTV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.DRXParameterTV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &DRXParameterTV_elementIdentifier_xer_, &OCTETSTRING_json_, &DRXParameterTV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DRXParameterTV_elementIdentifier_default_coding("RAW");
const XERdescriptor_t       DRXParameterV_splitPGCycleCode_xer_ = { {"splitPGCycleCode>\n", "splitPGCycleCode>\n"}, {18, 18}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int DRXParameterV_splitPGCycleCode_oer_ext_arr_[0] = {};
const int DRXParameterV_splitPGCycleCode_oer_p_[0] = {};
const TTCN_OERdescriptor_t DRXParameterV_splitPGCycleCode_oer_ = { -1, TRUE, 1, FALSE, 0, 0, DRXParameterV_splitPGCycleCode_oer_ext_arr_, 0, DRXParameterV_splitPGCycleCode_oer_p_};
const TTCN_Typedescriptor_t DRXParameterV_splitPGCycleCode_descr_ = { "@MobileL3_GMM_SM_Types.DRXParameterV.splitPGCycleCode", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &DRXParameterV_splitPGCycleCode_xer_, &OCTETSTRING_json_, &DRXParameterV_splitPGCycleCode_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DRXParameterV_splitPGCycleCode_default_coding("RAW");
const XERdescriptor_t       DRXParameterV_nonDRXTimer_xer_ = { {"nonDRXTimer>\n", "nonDRXTimer>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t DRXParameterV_nonDRXTimer_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t DRXParameterV_nonDRXTimer_descr_ = { "@MobileL3_GMM_SM_Types.DRXParameterV.nonDRXTimer", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &DRXParameterV_nonDRXTimer_xer_, &BITSTRING_json_, &DRXParameterV_nonDRXTimer_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DRXParameterV_nonDRXTimer_default_coding("RAW");
const XERdescriptor_t       DRXParameterV_splitOnCCCH_xer_ = { {"splitOnCCCH>\n", "splitOnCCCH>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t DRXParameterV_splitOnCCCH_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t DRXParameterV_splitOnCCCH_descr_ = { "@MobileL3_GMM_SM_Types.DRXParameterV.splitOnCCCH", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &DRXParameterV_splitOnCCCH_xer_, &BITSTRING_json_, &DRXParameterV_splitOnCCCH_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DRXParameterV_splitOnCCCH_default_coding("RAW");
const XERdescriptor_t       DRXParameterV_cnSpecificDRXCycleLength_xer_ = { {"cnSpecificDRXCycleLength>\n", "cnSpecificDRXCycleLength>\n"}, {26, 26}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t DRXParameterV_cnSpecificDRXCycleLength_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t DRXParameterV_cnSpecificDRXCycleLength_descr_ = { "@MobileL3_GMM_SM_Types.DRXParameterV.cnSpecificDRXCycleLength", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &DRXParameterV_cnSpecificDRXCycleLength_xer_, &BITSTRING_json_, &DRXParameterV_cnSpecificDRXCycleLength_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DRXParameterV_cnSpecificDRXCycleLength_default_coding("RAW");
const TTCN_RAWdescriptor_t DRXParameterV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for DRXParameterV
const TTCN_Typedescriptor_t DRXParameterV_descr_ = { "@MobileL3_GMM_SM_Types.DRXParameterV", NULL, &DRXParameterV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DRXParameterV_default_coding("RAW");
UNIVERSAL_CHARSTRING DRXParameterTV_drxParameter_default_coding("RAW");
const TTCN_RAWdescriptor_t DRXParameterTV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for DRXParameterTV
const TTCN_Typedescriptor_t DRXParameterTV_descr_ = { "@MobileL3_GMM_SM_Types.DRXParameterTV", NULL, &DRXParameterTV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DRXParameterTV_default_coding("RAW");
const XERdescriptor_t       ForceToStandbyV_forceToStandbyValue_xer_ = { {"forceToStandbyValue>\n", "forceToStandbyValue>\n"}, {21, 21}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ForceToStandbyV_forceToStandbyValue_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ForceToStandbyV_forceToStandbyValue_descr_ = { "@MobileL3_GMM_SM_Types.ForceToStandbyV.forceToStandbyValue", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &ForceToStandbyV_forceToStandbyValue_xer_, &BITSTRING_json_, &ForceToStandbyV_forceToStandbyValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ForceToStandbyV_forceToStandbyValue_default_coding("RAW");
const XERdescriptor_t       ForceToStandbyV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ForceToStandbyV_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ForceToStandbyV_spare_descr_ = { "@MobileL3_GMM_SM_Types.ForceToStandbyV.spare", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &ForceToStandbyV_spare_xer_, &BITSTRING_json_, &ForceToStandbyV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ForceToStandbyV_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t ForceToStandbyV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ForceToStandbyV
const TTCN_Typedescriptor_t ForceToStandbyV_descr_ = { "@MobileL3_GMM_SM_Types.ForceToStandbyV", NULL, &ForceToStandbyV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ForceToStandbyV_default_coding("RAW");
UNIVERSAL_CHARSTRING ForceToStandbyTV_valueField_default_coding("RAW");
const XERdescriptor_t       ForceToStandbyTV_forceToStandbyIEI_xer_ = { {"forceToStandbyIEI>\n", "forceToStandbyIEI>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ForceToStandbyTV_forceToStandbyIEI_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ForceToStandbyTV_forceToStandbyIEI_descr_ = { "@MobileL3_GMM_SM_Types.ForceToStandbyTV.forceToStandbyIEI", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &ForceToStandbyTV_forceToStandbyIEI_xer_, &BITSTRING_json_, &ForceToStandbyTV_forceToStandbyIEI_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ForceToStandbyTV_forceToStandbyIEI_default_coding("RAW");
const TTCN_RAWdescriptor_t ForceToStandbyTV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ForceToStandbyTV
const TTCN_Typedescriptor_t ForceToStandbyTV_descr_ = { "@MobileL3_GMM_SM_Types.ForceToStandbyTV", NULL, &ForceToStandbyTV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ForceToStandbyTV_default_coding("RAW");
const XERdescriptor_t       P__TMSISignatureTV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int P__TMSISignatureTV_elementIdentifier_oer_ext_arr_[0] = {};
const int P__TMSISignatureTV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t P__TMSISignatureTV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, P__TMSISignatureTV_elementIdentifier_oer_ext_arr_, 0, P__TMSISignatureTV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t P__TMSISignatureTV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.P_TMSISignatureTV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &P__TMSISignatureTV_elementIdentifier_xer_, &OCTETSTRING_json_, &P__TMSISignatureTV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING P__TMSISignatureTV_elementIdentifier_default_coding("RAW");
const XERdescriptor_t       P__TMSISignatureTV_valueField_xer_ = { {"valueField>\n", "valueField>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int P__TMSISignatureTV_valueField_oer_ext_arr_[0] = {};
const int P__TMSISignatureTV_valueField_oer_p_[0] = {};
const TTCN_OERdescriptor_t P__TMSISignatureTV_valueField_oer_ = { -1, TRUE, 3, FALSE, 0, 0, P__TMSISignatureTV_valueField_oer_ext_arr_, 0, P__TMSISignatureTV_valueField_oer_p_};
const TTCN_Typedescriptor_t P__TMSISignatureTV_valueField_descr_ = { "@MobileL3_GMM_SM_Types.P_TMSISignatureTV.valueField", &OCTETSTRING_ber_, &General__Types::OCT3_raw_, &OCTETSTRING_text_, &P__TMSISignatureTV_valueField_xer_, &OCTETSTRING_json_, &P__TMSISignatureTV_valueField_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING P__TMSISignatureTV_valueField_default_coding("RAW");
const TTCN_RAWdescriptor_t P__TMSISignatureTV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for P__TMSISignatureTV
const TTCN_Typedescriptor_t P__TMSISignatureTV_descr_ = { "@MobileL3_GMM_SM_Types.P_TMSISignatureTV", NULL, &P__TMSISignatureTV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING P__TMSISignatureTV_default_coding("RAW");
const XERdescriptor_t       IdentityType2V_valueField_xer_ = { {"valueField>\n", "valueField>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t IdentityType2V_valueField_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t IdentityType2V_valueField_descr_ = { "@MobileL3_GMM_SM_Types.IdentityType2V.valueField", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &IdentityType2V_valueField_xer_, &BITSTRING_json_, &IdentityType2V_valueField_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING IdentityType2V_valueField_default_coding("RAW");
const XERdescriptor_t       IdentityType2V_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t IdentityType2V_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t IdentityType2V_spare_descr_ = { "@MobileL3_GMM_SM_Types.IdentityType2V.spare", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &IdentityType2V_spare_xer_, &BITSTRING_json_, &IdentityType2V_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING IdentityType2V_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t IdentityType2V_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for IdentityType2V
const TTCN_Typedescriptor_t IdentityType2V_descr_ = { "@MobileL3_GMM_SM_Types.IdentityType2V", NULL, &IdentityType2V_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING IdentityType2V_default_coding("RAW");
UNIVERSAL_CHARSTRING IdentityType2TV_valueField_default_coding("RAW");
const XERdescriptor_t       IdentityType2TV_identityType2IEI_xer_ = { {"identityType2IEI>\n", "identityType2IEI>\n"}, {18, 18}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t IdentityType2TV_identityType2IEI_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t IdentityType2TV_identityType2IEI_descr_ = { "@MobileL3_GMM_SM_Types.IdentityType2TV.identityType2IEI", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &IdentityType2TV_identityType2IEI_xer_, &BITSTRING_json_, &IdentityType2TV_identityType2IEI_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING IdentityType2TV_identityType2IEI_default_coding("RAW");
const TTCN_RAWdescriptor_t IdentityType2TV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for IdentityType2TV
const TTCN_Typedescriptor_t IdentityType2TV_descr_ = { "@MobileL3_GMM_SM_Types.IdentityType2TV", NULL, &IdentityType2TV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING IdentityType2TV_default_coding("RAW");
const XERdescriptor_t       IMEISVRequestV_valueField_xer_ = { {"valueField>\n", "valueField>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t IMEISVRequestV_valueField_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t IMEISVRequestV_valueField_descr_ = { "@MobileL3_GMM_SM_Types.IMEISVRequestV.valueField", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &IMEISVRequestV_valueField_xer_, &BITSTRING_json_, &IMEISVRequestV_valueField_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING IMEISVRequestV_valueField_default_coding("RAW");
const XERdescriptor_t       IMEISVRequestV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t IMEISVRequestV_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t IMEISVRequestV_spare_descr_ = { "@MobileL3_GMM_SM_Types.IMEISVRequestV.spare", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &IMEISVRequestV_spare_xer_, &BITSTRING_json_, &IMEISVRequestV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING IMEISVRequestV_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t IMEISVRequestV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for IMEISVRequestV
const TTCN_Typedescriptor_t IMEISVRequestV_descr_ = { "@MobileL3_GMM_SM_Types.IMEISVRequestV", NULL, &IMEISVRequestV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING IMEISVRequestV_default_coding("RAW");
UNIVERSAL_CHARSTRING IMEISVRequestTV_imeisvRequest_default_coding("RAW");
const XERdescriptor_t       IMEISVRequestTV_imeisvRequestIEI_xer_ = { {"imeisvRequestIEI>\n", "imeisvRequestIEI>\n"}, {18, 18}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t IMEISVRequestTV_imeisvRequestIEI_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t IMEISVRequestTV_imeisvRequestIEI_descr_ = { "@MobileL3_GMM_SM_Types.IMEISVRequestTV.imeisvRequestIEI", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &IMEISVRequestTV_imeisvRequestIEI_xer_, &BITSTRING_json_, &IMEISVRequestTV_imeisvRequestIEI_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING IMEISVRequestTV_imeisvRequestIEI_default_coding("RAW");
const TTCN_RAWdescriptor_t IMEISVRequestTV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for IMEISVRequestTV
const TTCN_Typedescriptor_t IMEISVRequestTV_descr_ = { "@MobileL3_GMM_SM_Types.IMEISVRequestTV", NULL, &IMEISVRequestTV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING IMEISVRequestTV_default_coding("RAW");
const XERdescriptor_t       ReceiveNPDUNumbersListTLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int ReceiveNPDUNumbersListTLV_elementIdentifier_oer_ext_arr_[0] = {};
const int ReceiveNPDUNumbersListTLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t ReceiveNPDUNumbersListTLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ReceiveNPDUNumbersListTLV_elementIdentifier_oer_ext_arr_, 0, ReceiveNPDUNumbersListTLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t ReceiveNPDUNumbersListTLV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &ReceiveNPDUNumbersListTLV_elementIdentifier_xer_, &OCTETSTRING_json_, &ReceiveNPDUNumbersListTLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ReceiveNPDUNumbersListTLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t ReceiveNPDUNumbersListTLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       ReceiveNPDUNumbersListTLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ReceiveNPDUNumbersListTLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ReceiveNPDUNumbersListTLV_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV.lengthIndicator", &INTEGER_ber_, &ReceiveNPDUNumbersListTLV_lengthIndicator_raw_, &INTEGER_text_, &ReceiveNPDUNumbersListTLV_lengthIndicator_xer_, &INTEGER_json_, &ReceiveNPDUNumbersListTLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ReceiveNPDUNumbersListTLV_lengthIndicator_default_coding("RAW");
const TTCN_RAWdescriptor_t ReceiveNPDUNumbersListV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ReceiveNPDUNumbersListV
const TTCN_Typedescriptor_t ReceiveNPDUNumbersListV_descr_ = { "@MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV", NULL, &ReceiveNPDUNumbersListV_raw_, NULL, NULL, NULL, NULL, NULL, &ReceiveNPDUNumber_descr_, TTCN_Typedescriptor_t::DONTCARE };
const TTCN_RAWdescriptor_t ReceiveNPDUNumber_sapi_raw_ = {4,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,4,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       ReceiveNPDUNumber_sapi_xer_ = { {"sapi>\n", "sapi>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ReceiveNPDUNumber_sapi_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ReceiveNPDUNumber_sapi_descr_ = { "@MobileL3_GMM_SM_Types.ReceiveNPDUNumber.sapi", &BITSTRING_ber_, &ReceiveNPDUNumber_sapi_raw_, NULL, &ReceiveNPDUNumber_sapi_xer_, &BITSTRING_json_, &ReceiveNPDUNumber_sapi_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ReceiveNPDUNumber_sapi_default_coding("RAW");
const TTCN_RAWdescriptor_t ReceiveNPDUNumber_numberValue_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,8,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       ReceiveNPDUNumber_numberValue_xer_ = { {"numberValue>\n", "numberValue>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ReceiveNPDUNumber_numberValue_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ReceiveNPDUNumber_numberValue_descr_ = { "@MobileL3_GMM_SM_Types.ReceiveNPDUNumber.numberValue", &BITSTRING_ber_, &ReceiveNPDUNumber_numberValue_raw_, NULL, &ReceiveNPDUNumber_numberValue_xer_, &BITSTRING_json_, &ReceiveNPDUNumber_numberValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ReceiveNPDUNumber_numberValue_default_coding("RAW");
const TTCN_RAWdescriptor_t ReceiveNPDUNumber_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ReceiveNPDUNumber
const TTCN_Typedescriptor_t ReceiveNPDUNumber_descr_ = { "@MobileL3_GMM_SM_Types.ReceiveNPDUNumber", NULL, &ReceiveNPDUNumber_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ReceiveNPDUNumber_default_coding("RAW");
UNIVERSAL_CHARSTRING ReceiveNPDUNumbersListV_0_default_coding("RAW");
UNIVERSAL_CHARSTRING ReceiveNPDUNumbersListV_default_coding("RAW");
const TTCN_RAWdescriptor_t ReceiveNPDUNumbersListTLV_numberList_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,8,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ReceiveNPDUNumbersListTLV_numberList
const TTCN_Typedescriptor_t ReceiveNPDUNumbersListTLV_numberList_descr_ = { "@MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV.numberList", NULL, &ReceiveNPDUNumbersListTLV_numberList_raw_, NULL, NULL, NULL, NULL, NULL, &ReceiveNPDUNumber_descr_, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ReceiveNPDUNumbersListTLV_numberList_default_coding("RAW");
const TTCN_RAWdescriptor_t ReceiveNPDUNumbersListTLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ReceiveNPDUNumbersListTLV
const TTCN_Typedescriptor_t ReceiveNPDUNumbersListTLV_descr_ = { "@MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV", NULL, &ReceiveNPDUNumbersListTLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ReceiveNPDUNumbersListTLV_default_coding("RAW");
const XERdescriptor_t       MSNetworkCapabilityTLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int MSNetworkCapabilityTLV_elementIdentifier_oer_ext_arr_[0] = {};
const int MSNetworkCapabilityTLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t MSNetworkCapabilityTLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, MSNetworkCapabilityTLV_elementIdentifier_oer_ext_arr_, 0, MSNetworkCapabilityTLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t MSNetworkCapabilityTLV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.MSNetworkCapabilityTLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &MSNetworkCapabilityTLV_elementIdentifier_xer_, &OCTETSTRING_json_, &MSNetworkCapabilityTLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSNetworkCapabilityTLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t MSNetworkCapabilityLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MSNetworkCapabilityLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MSNetworkCapabilityLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MSNetworkCapabilityLV_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.MSNetworkCapabilityLV.lengthIndicator", &INTEGER_ber_, &MSNetworkCapabilityLV_lengthIndicator_raw_, &INTEGER_text_, &MSNetworkCapabilityLV_lengthIndicator_xer_, &INTEGER_json_, &MSNetworkCapabilityLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSNetworkCapabilityLV_lengthIndicator_default_coding("RAW");
const TTCN_RAWdescriptor_t MSNetworkCapabilityV_gea1bit_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MSNetworkCapabilityV_gea1bit_xer_ = { {"gea1bit>\n", "gea1bit>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MSNetworkCapabilityV_gea1bit_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MSNetworkCapabilityV_gea1bit_descr_ = { "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV.gea1bit", &BITSTRING_ber_, &MSNetworkCapabilityV_gea1bit_raw_, NULL, &MSNetworkCapabilityV_gea1bit_xer_, &BITSTRING_json_, &MSNetworkCapabilityV_gea1bit_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSNetworkCapabilityV_gea1bit_default_coding("RAW");
const TTCN_RAWdescriptor_t MSNetworkCapabilityV_smCapabilitiesviaDedicatedChannels_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MSNetworkCapabilityV_smCapabilitiesviaDedicatedChannels_xer_ = { {"smCapabilitiesviaDedicatedChannels>\n", "smCapabilitiesviaDedicatedChannels>\n"}, {36, 36}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MSNetworkCapabilityV_smCapabilitiesviaDedicatedChannels_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MSNetworkCapabilityV_smCapabilitiesviaDedicatedChannels_descr_ = { "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV.smCapabilitiesviaDedicatedChannels", &BITSTRING_ber_, &MSNetworkCapabilityV_smCapabilitiesviaDedicatedChannels_raw_, NULL, &MSNetworkCapabilityV_smCapabilitiesviaDedicatedChannels_xer_, &BITSTRING_json_, &MSNetworkCapabilityV_smCapabilitiesviaDedicatedChannels_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSNetworkCapabilityV_smCapabilitiesviaDedicatedChannels_default_coding("RAW");
const TTCN_RAWdescriptor_t MSNetworkCapabilityV_smCapabilitiesviaGPRSChannels_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MSNetworkCapabilityV_smCapabilitiesviaGPRSChannels_xer_ = { {"smCapabilitiesviaGPRSChannels>\n", "smCapabilitiesviaGPRSChannels>\n"}, {31, 31}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MSNetworkCapabilityV_smCapabilitiesviaGPRSChannels_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MSNetworkCapabilityV_smCapabilitiesviaGPRSChannels_descr_ = { "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV.smCapabilitiesviaGPRSChannels", &BITSTRING_ber_, &MSNetworkCapabilityV_smCapabilitiesviaGPRSChannels_raw_, NULL, &MSNetworkCapabilityV_smCapabilitiesviaGPRSChannels_xer_, &BITSTRING_json_, &MSNetworkCapabilityV_smCapabilitiesviaGPRSChannels_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSNetworkCapabilityV_smCapabilitiesviaGPRSChannels_default_coding("RAW");
const TTCN_RAWdescriptor_t MSNetworkCapabilityV_ucs2Support_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MSNetworkCapabilityV_ucs2Support_xer_ = { {"ucs2Support>\n", "ucs2Support>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MSNetworkCapabilityV_ucs2Support_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MSNetworkCapabilityV_ucs2Support_descr_ = { "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV.ucs2Support", &BITSTRING_ber_, &MSNetworkCapabilityV_ucs2Support_raw_, NULL, &MSNetworkCapabilityV_ucs2Support_xer_, &BITSTRING_json_, &MSNetworkCapabilityV_ucs2Support_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSNetworkCapabilityV_ucs2Support_default_coding("RAW");
const TTCN_RAWdescriptor_t MSNetworkCapabilityV_ssScreeningIndicator_raw_ = {2,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,2,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MSNetworkCapabilityV_ssScreeningIndicator_xer_ = { {"ssScreeningIndicator>\n", "ssScreeningIndicator>\n"}, {22, 22}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MSNetworkCapabilityV_ssScreeningIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MSNetworkCapabilityV_ssScreeningIndicator_descr_ = { "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV.ssScreeningIndicator", &BITSTRING_ber_, &MSNetworkCapabilityV_ssScreeningIndicator_raw_, NULL, &MSNetworkCapabilityV_ssScreeningIndicator_xer_, &BITSTRING_json_, &MSNetworkCapabilityV_ssScreeningIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSNetworkCapabilityV_ssScreeningIndicator_default_coding("RAW");
const TTCN_RAWdescriptor_t MSNetworkCapabilityV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MSNetworkCapabilityV
const TTCN_Typedescriptor_t MSNetworkCapabilityV_descr_ = { "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV", NULL, &MSNetworkCapabilityV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const TTCN_RAWdescriptor_t MSNetworkCapabilityV_solSACapability_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MSNetworkCapabilityV_solSACapability_xer_ = { {"solSACapability>\n", "solSACapability>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MSNetworkCapabilityV_solSACapability_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MSNetworkCapabilityV_solSACapability_descr_ = { "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV.solSACapability", &BITSTRING_ber_, &MSNetworkCapabilityV_solSACapability_raw_, NULL, &MSNetworkCapabilityV_solSACapability_xer_, &BITSTRING_json_, &MSNetworkCapabilityV_solSACapability_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSNetworkCapabilityV_solSACapability_default_coding("RAW");
const TTCN_RAWdescriptor_t MSNetworkCapabilityV_revisionLevelIndicatior_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MSNetworkCapabilityV_revisionLevelIndicatior_xer_ = { {"revisionLevelIndicatior>\n", "revisionLevelIndicatior>\n"}, {25, 25}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MSNetworkCapabilityV_revisionLevelIndicatior_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MSNetworkCapabilityV_revisionLevelIndicatior_descr_ = { "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV.revisionLevelIndicatior", &BITSTRING_ber_, &MSNetworkCapabilityV_revisionLevelIndicatior_raw_, NULL, &MSNetworkCapabilityV_revisionLevelIndicatior_xer_, &BITSTRING_json_, &MSNetworkCapabilityV_revisionLevelIndicatior_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSNetworkCapabilityV_revisionLevelIndicatior_default_coding("RAW");
const TTCN_RAWdescriptor_t MSNetworkCapabilityV_pFCFeatureMode_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MSNetworkCapabilityV_pFCFeatureMode_xer_ = { {"pFCFeatureMode>\n", "pFCFeatureMode>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MSNetworkCapabilityV_pFCFeatureMode_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MSNetworkCapabilityV_pFCFeatureMode_descr_ = { "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV.pFCFeatureMode", &BITSTRING_ber_, &MSNetworkCapabilityV_pFCFeatureMode_raw_, NULL, &MSNetworkCapabilityV_pFCFeatureMode_xer_, &BITSTRING_json_, &MSNetworkCapabilityV_pFCFeatureMode_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSNetworkCapabilityV_pFCFeatureMode_default_coding("RAW");
const TTCN_RAWdescriptor_t MSNetworkCapabilityV_extendedGEAbits_raw_ = {6,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,6,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MSNetworkCapabilityV_extendedGEAbits_xer_ = { {"extendedGEAbits>\n", "extendedGEAbits>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MSNetworkCapabilityV_extendedGEAbits_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MSNetworkCapabilityV_extendedGEAbits_descr_ = { "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV.extendedGEAbits", &BITSTRING_ber_, &MSNetworkCapabilityV_extendedGEAbits_raw_, NULL, &MSNetworkCapabilityV_extendedGEAbits_xer_, &BITSTRING_json_, &MSNetworkCapabilityV_extendedGEAbits_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSNetworkCapabilityV_extendedGEAbits_default_coding("RAW");
const TTCN_RAWdescriptor_t MSNetworkCapabilityV_lcsVAcapability_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MSNetworkCapabilityV_lcsVAcapability_xer_ = { {"lcsVAcapability>\n", "lcsVAcapability>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MSNetworkCapabilityV_lcsVAcapability_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MSNetworkCapabilityV_lcsVAcapability_descr_ = { "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV.lcsVAcapability", &BITSTRING_ber_, &MSNetworkCapabilityV_lcsVAcapability_raw_, NULL, &MSNetworkCapabilityV_lcsVAcapability_xer_, &BITSTRING_json_, &MSNetworkCapabilityV_lcsVAcapability_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSNetworkCapabilityV_lcsVAcapability_default_coding("RAW");
const TTCN_RAWdescriptor_t MSNetworkCapabilityV_pSInterRATHOtoUTRANIuModeCapability_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MSNetworkCapabilityV_pSInterRATHOtoUTRANIuModeCapability_xer_ = { {"pSInterRATHOtoUTRANIuModeCapability>\n", "pSInterRATHOtoUTRANIuModeCapability>\n"}, {37, 37}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MSNetworkCapabilityV_pSInterRATHOtoUTRANIuModeCapability_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MSNetworkCapabilityV_pSInterRATHOtoUTRANIuModeCapability_descr_ = { "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV.pSInterRATHOtoUTRANIuModeCapability", &BITSTRING_ber_, &MSNetworkCapabilityV_pSInterRATHOtoUTRANIuModeCapability_raw_, NULL, &MSNetworkCapabilityV_pSInterRATHOtoUTRANIuModeCapability_xer_, &BITSTRING_json_, &MSNetworkCapabilityV_pSInterRATHOtoUTRANIuModeCapability_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSNetworkCapabilityV_pSInterRATHOtoUTRANIuModeCapability_default_coding("RAW");
const TTCN_RAWdescriptor_t MSNetworkCapabilityV_pSInterRATHOtoEUTRANS1ModeCapability_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MSNetworkCapabilityV_pSInterRATHOtoEUTRANS1ModeCapability_xer_ = { {"pSInterRATHOtoEUTRANS1ModeCapability>\n", "pSInterRATHOtoEUTRANS1ModeCapability>\n"}, {38, 38}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MSNetworkCapabilityV_pSInterRATHOtoEUTRANS1ModeCapability_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MSNetworkCapabilityV_pSInterRATHOtoEUTRANS1ModeCapability_descr_ = { "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV.pSInterRATHOtoEUTRANS1ModeCapability", &BITSTRING_ber_, &MSNetworkCapabilityV_pSInterRATHOtoEUTRANS1ModeCapability_raw_, NULL, &MSNetworkCapabilityV_pSInterRATHOtoEUTRANS1ModeCapability_xer_, &BITSTRING_json_, &MSNetworkCapabilityV_pSInterRATHOtoEUTRANS1ModeCapability_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSNetworkCapabilityV_pSInterRATHOtoEUTRANS1ModeCapability_default_coding("RAW");
const TTCN_RAWdescriptor_t MSNetworkCapabilityV_eMMCombinedProceduresCapability_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MSNetworkCapabilityV_eMMCombinedProceduresCapability_xer_ = { {"eMMCombinedProceduresCapability>\n", "eMMCombinedProceduresCapability>\n"}, {33, 33}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MSNetworkCapabilityV_eMMCombinedProceduresCapability_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MSNetworkCapabilityV_eMMCombinedProceduresCapability_descr_ = { "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV.eMMCombinedProceduresCapability", &BITSTRING_ber_, &MSNetworkCapabilityV_eMMCombinedProceduresCapability_raw_, NULL, &MSNetworkCapabilityV_eMMCombinedProceduresCapability_xer_, &BITSTRING_json_, &MSNetworkCapabilityV_eMMCombinedProceduresCapability_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSNetworkCapabilityV_eMMCombinedProceduresCapability_default_coding("RAW");
const TTCN_RAWdescriptor_t MSNetworkCapabilityV_iSRSupport_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MSNetworkCapabilityV_iSRSupport_xer_ = { {"iSRSupport>\n", "iSRSupport>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MSNetworkCapabilityV_iSRSupport_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MSNetworkCapabilityV_iSRSupport_descr_ = { "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV.iSRSupport", &BITSTRING_ber_, &MSNetworkCapabilityV_iSRSupport_raw_, NULL, &MSNetworkCapabilityV_iSRSupport_xer_, &BITSTRING_json_, &MSNetworkCapabilityV_iSRSupport_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSNetworkCapabilityV_iSRSupport_default_coding("RAW");
const TTCN_RAWdescriptor_t MSNetworkCapabilityV_sRVCCtoGERANUTRANCapability_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MSNetworkCapabilityV_sRVCCtoGERANUTRANCapability_xer_ = { {"sRVCCtoGERANUTRANCapability>\n", "sRVCCtoGERANUTRANCapability>\n"}, {29, 29}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MSNetworkCapabilityV_sRVCCtoGERANUTRANCapability_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MSNetworkCapabilityV_sRVCCtoGERANUTRANCapability_descr_ = { "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV.sRVCCtoGERANUTRANCapability", &BITSTRING_ber_, &MSNetworkCapabilityV_sRVCCtoGERANUTRANCapability_raw_, NULL, &MSNetworkCapabilityV_sRVCCtoGERANUTRANCapability_xer_, &BITSTRING_json_, &MSNetworkCapabilityV_sRVCCtoGERANUTRANCapability_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSNetworkCapabilityV_sRVCCtoGERANUTRANCapability_default_coding("RAW");
const TTCN_RAWdescriptor_t MSNetworkCapabilityV_ePCCapability_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MSNetworkCapabilityV_ePCCapability_xer_ = { {"ePCCapability>\n", "ePCCapability>\n"}, {15, 15}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MSNetworkCapabilityV_ePCCapability_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MSNetworkCapabilityV_ePCCapability_descr_ = { "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV.ePCCapability", &BITSTRING_ber_, &MSNetworkCapabilityV_ePCCapability_raw_, NULL, &MSNetworkCapabilityV_ePCCapability_xer_, &BITSTRING_json_, &MSNetworkCapabilityV_ePCCapability_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSNetworkCapabilityV_ePCCapability_default_coding("RAW");
const TTCN_RAWdescriptor_t MSNetworkCapabilityV_nFCapability_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MSNetworkCapabilityV_nFCapability_xer_ = { {"nFCapability>\n", "nFCapability>\n"}, {14, 14}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MSNetworkCapabilityV_nFCapability_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MSNetworkCapabilityV_nFCapability_descr_ = { "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV.nFCapability", &BITSTRING_ber_, &MSNetworkCapabilityV_nFCapability_raw_, NULL, &MSNetworkCapabilityV_nFCapability_xer_, &BITSTRING_json_, &MSNetworkCapabilityV_nFCapability_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSNetworkCapabilityV_nFCapability_default_coding("RAW");
const TTCN_RAWdescriptor_t MSNetworkCapabilityV_gERANNertworkSharingCapability_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MSNetworkCapabilityV_gERANNertworkSharingCapability_xer_ = { {"gERANNertworkSharingCapability>\n", "gERANNertworkSharingCapability>\n"}, {32, 32}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MSNetworkCapabilityV_gERANNertworkSharingCapability_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MSNetworkCapabilityV_gERANNertworkSharingCapability_descr_ = { "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV.gERANNertworkSharingCapability", &BITSTRING_ber_, &MSNetworkCapabilityV_gERANNertworkSharingCapability_raw_, NULL, &MSNetworkCapabilityV_gERANNertworkSharingCapability_xer_, &BITSTRING_json_, &MSNetworkCapabilityV_gERANNertworkSharingCapability_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSNetworkCapabilityV_gERANNertworkSharingCapability_default_coding("RAW");
const TTCN_RAWdescriptor_t MSNetworkCapabilityV_spare__octets_raw_ = {0,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MSNetworkCapabilityV_spare__octets_xer_ = { {"spare_octets>\n", "spare_octets>\n"}, {14, 14}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int MSNetworkCapabilityV_spare__octets_oer_ext_arr_[0] = {};
const int MSNetworkCapabilityV_spare__octets_oer_p_[0] = {};
const TTCN_OERdescriptor_t MSNetworkCapabilityV_spare__octets_oer_ = { -1, TRUE, -1, FALSE, 0, 0, MSNetworkCapabilityV_spare__octets_oer_ext_arr_, 0, MSNetworkCapabilityV_spare__octets_oer_p_};
const TTCN_Typedescriptor_t MSNetworkCapabilityV_spare__octets_descr_ = { "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV.spare_octets", &OCTETSTRING_ber_, &MSNetworkCapabilityV_spare__octets_raw_, &OCTETSTRING_text_, &MSNetworkCapabilityV_spare__octets_xer_, &OCTETSTRING_json_, &MSNetworkCapabilityV_spare__octets_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSNetworkCapabilityV_spare__octets_default_coding("RAW");
UNIVERSAL_CHARSTRING MSNetworkCapabilityV_default_coding("RAW");
const TTCN_RAWdescriptor_t MSNetworkCapabilityLV_msNetworkCapabilityV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,8,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MSNetworkCapabilityLV_msNetworkCapabilityV
const TTCN_Typedescriptor_t MSNetworkCapabilityLV_msNetworkCapabilityV_descr_ = { "@MobileL3_GMM_SM_Types.MSNetworkCapabilityLV.msNetworkCapabilityV", NULL, &MSNetworkCapabilityLV_msNetworkCapabilityV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSNetworkCapabilityLV_msNetworkCapabilityV_default_coding("RAW");
const TTCN_RAWdescriptor_t MSNetworkCapabilityLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MSNetworkCapabilityLV
const TTCN_Typedescriptor_t MSNetworkCapabilityLV_descr_ = { "@MobileL3_GMM_SM_Types.MSNetworkCapabilityLV", NULL, &MSNetworkCapabilityLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSNetworkCapabilityLV_default_coding("RAW");
UNIVERSAL_CHARSTRING MSNetworkCapabilityTLV_mSNetworkCapabilityLV_default_coding("RAW");
const TTCN_RAWdescriptor_t MSNetworkCapabilityTLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MSNetworkCapabilityTLV
const TTCN_Typedescriptor_t MSNetworkCapabilityTLV_descr_ = { "@MobileL3_GMM_SM_Types.MSNetworkCapabilityTLV", NULL, &MSNetworkCapabilityTLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSNetworkCapabilityTLV_default_coding("RAW");
const TTCN_RAWdescriptor_t MSRadioAccessCapabilityLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MSRadioAccessCapabilityLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MSRadioAccessCapabilityLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MSRadioAccessCapabilityLV_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.MSRadioAccessCapabilityLV.lengthIndicator", &INTEGER_ber_, &MSRadioAccessCapabilityLV_lengthIndicator_raw_, &INTEGER_text_, &MSRadioAccessCapabilityLV_lengthIndicator_xer_, &INTEGER_json_, &MSRadioAccessCapabilityLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSRadioAccessCapabilityLV_lengthIndicator_default_coding("RAW");
const TTCN_RAWdescriptor_t MSRadioAccessCapabilityV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_REVERSE,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MSRadioAccessCapabilityV
const TTCN_Typedescriptor_t MSRadioAccessCapabilityV_descr_ = { "@MobileL3_GMM_SM_Types.MSRadioAccessCapabilityV", NULL, &MSRadioAccessCapabilityV_raw_, NULL, NULL, NULL, NULL, NULL, &MSRACapabilityValuesRecord_descr_, TTCN_Typedescriptor_t::DONTCARE };
const TTCN_RAWdescriptor_t MSRACapabilityValues_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MSRACapabilityValues
const TTCN_Typedescriptor_t MSRACapabilityValues_descr_ = { "@MobileL3_GMM_SM_Types.MSRACapabilityValues", NULL, &MSRACapabilityValues_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const TTCN_RAWdescriptor_t MSRACapabilityValuesExclude1111_accessTechnType_raw_ = {4,SG_NO,ORDER_MSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,4,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MSRACapabilityValuesExclude1111_accessTechnType_xer_ = { {"accessTechnType>\n", "accessTechnType>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MSRACapabilityValuesExclude1111_accessTechnType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MSRACapabilityValuesExclude1111_accessTechnType_descr_ = { "@MobileL3_GMM_SM_Types.MSRACapabilityValuesExclude1111.accessTechnType", &BITSTRING_ber_, &MSRACapabilityValuesExclude1111_accessTechnType_raw_, NULL, &MSRACapabilityValuesExclude1111_accessTechnType_xer_, &BITSTRING_json_, &MSRACapabilityValuesExclude1111_accessTechnType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSRACapabilityValuesExclude1111_accessTechnType_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapabilitiesStruct_lengthIndicator_raw_ = {7,SG_NO,ORDER_MSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,1,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapabilitiesStruct_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_Typedescriptor_t AccessCapabilitiesStruct_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapabilitiesStruct.lengthIndicator", &INTEGER_ber_, &AccessCapabilitiesStruct_lengthIndicator_raw_, &INTEGER_text_, &AccessCapabilitiesStruct_lengthIndicator_xer_, &INTEGER_json_, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapabilitiesStruct_lengthIndicator_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapabilities_rfPowerCapability_raw_ = {3,SG_NO,ORDER_MSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,3,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapabilities_rfPowerCapability_xer_ = { {"rfPowerCapability>\n", "rfPowerCapability>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapabilities_rfPowerCapability_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapabilities_rfPowerCapability_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapabilities.rfPowerCapability", &BITSTRING_ber_, &AccessCapabilities_rfPowerCapability_raw_, NULL, &AccessCapabilities_rfPowerCapability_xer_, &BITSTRING_json_, &AccessCapabilities_rfPowerCapability_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapabilities_rfPowerCapability_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapabilities_presenceBitA5_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapabilities_presenceBitA5_xer_ = { {"presenceBitA5>\n", "presenceBitA5>\n"}, {15, 15}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapabilities_presenceBitA5_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapabilities_presenceBitA5_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapabilities.presenceBitA5", &BITSTRING_ber_, &AccessCapabilities_presenceBitA5_raw_, NULL, &AccessCapabilities_presenceBitA5_xer_, &BITSTRING_json_, &AccessCapabilities_presenceBitA5_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapabilities_presenceBitA5_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapabilities_esind_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapabilities_esind_xer_ = { {"esind>\n", "esind>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapabilities_esind_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapabilities_esind_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapabilities.esind", &BITSTRING_ber_, &AccessCapabilities_esind_raw_, NULL, &AccessCapabilities_esind_xer_, &BITSTRING_json_, &AccessCapabilities_esind_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapabilities_esind_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapabilities_psbit_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapabilities_psbit_xer_ = { {"psbit>\n", "psbit>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapabilities_psbit_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapabilities_psbit_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapabilities.psbit", &BITSTRING_ber_, &AccessCapabilities_psbit_raw_, NULL, &AccessCapabilities_psbit_xer_, &BITSTRING_json_, &AccessCapabilities_psbit_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapabilities_psbit_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapabilities_vgcs_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapabilities_vgcs_xer_ = { {"vgcs>\n", "vgcs>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapabilities_vgcs_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapabilities_vgcs_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapabilities.vgcs", &BITSTRING_ber_, &AccessCapabilities_vgcs_raw_, NULL, &AccessCapabilities_vgcs_xer_, &BITSTRING_json_, &AccessCapabilities_vgcs_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapabilities_vgcs_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapabilities_vbs_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapabilities_vbs_xer_ = { {"vbs>\n", "vbs>\n"}, {5, 5}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapabilities_vbs_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapabilities_vbs_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapabilities.vbs", &BITSTRING_ber_, &AccessCapabilities_vbs_raw_, NULL, &AccessCapabilities_vbs_xer_, &BITSTRING_json_, &AccessCapabilities_vbs_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapabilities_vbs_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapabilities_presenceBitMultislot_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapabilities_presenceBitMultislot_xer_ = { {"presenceBitMultislot>\n", "presenceBitMultislot>\n"}, {22, 22}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapabilities_presenceBitMultislot_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapabilities_presenceBitMultislot_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapabilities.presenceBitMultislot", &BITSTRING_ber_, &AccessCapabilities_presenceBitMultislot_raw_, NULL, &AccessCapabilities_presenceBitMultislot_xer_, &BITSTRING_json_, &AccessCapabilities_presenceBitMultislot_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapabilities_presenceBitMultislot_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapabilities_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapabilities
const TTCN_Typedescriptor_t AccessCapabilities_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapabilities", NULL, &AccessCapabilities_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const TTCN_RAWdescriptor_t A5BITS_a51_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       A5BITS_a51_xer_ = { {"a51>\n", "a51>\n"}, {5, 5}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t A5BITS_a51_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t A5BITS_a51_descr_ = { "@MobileL3_GMM_SM_Types.A5BITS.a51", &BITSTRING_ber_, &A5BITS_a51_raw_, NULL, &A5BITS_a51_xer_, &BITSTRING_json_, &A5BITS_a51_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING A5BITS_a51_default_coding("RAW");
const TTCN_RAWdescriptor_t A5BITS_a52_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       A5BITS_a52_xer_ = { {"a52>\n", "a52>\n"}, {5, 5}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t A5BITS_a52_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t A5BITS_a52_descr_ = { "@MobileL3_GMM_SM_Types.A5BITS.a52", &BITSTRING_ber_, &A5BITS_a52_raw_, NULL, &A5BITS_a52_xer_, &BITSTRING_json_, &A5BITS_a52_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING A5BITS_a52_default_coding("RAW");
const TTCN_RAWdescriptor_t A5BITS_a53_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       A5BITS_a53_xer_ = { {"a53>\n", "a53>\n"}, {5, 5}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t A5BITS_a53_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t A5BITS_a53_descr_ = { "@MobileL3_GMM_SM_Types.A5BITS.a53", &BITSTRING_ber_, &A5BITS_a53_raw_, NULL, &A5BITS_a53_xer_, &BITSTRING_json_, &A5BITS_a53_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING A5BITS_a53_default_coding("RAW");
const TTCN_RAWdescriptor_t A5BITS_a54_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       A5BITS_a54_xer_ = { {"a54>\n", "a54>\n"}, {5, 5}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t A5BITS_a54_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t A5BITS_a54_descr_ = { "@MobileL3_GMM_SM_Types.A5BITS.a54", &BITSTRING_ber_, &A5BITS_a54_raw_, NULL, &A5BITS_a54_xer_, &BITSTRING_json_, &A5BITS_a54_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING A5BITS_a54_default_coding("RAW");
const TTCN_RAWdescriptor_t A5BITS_a55_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       A5BITS_a55_xer_ = { {"a55>\n", "a55>\n"}, {5, 5}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t A5BITS_a55_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t A5BITS_a55_descr_ = { "@MobileL3_GMM_SM_Types.A5BITS.a55", &BITSTRING_ber_, &A5BITS_a55_raw_, NULL, &A5BITS_a55_xer_, &BITSTRING_json_, &A5BITS_a55_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING A5BITS_a55_default_coding("RAW");
const TTCN_RAWdescriptor_t A5BITS_a56_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       A5BITS_a56_xer_ = { {"a56>\n", "a56>\n"}, {5, 5}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t A5BITS_a56_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t A5BITS_a56_descr_ = { "@MobileL3_GMM_SM_Types.A5BITS.a56", &BITSTRING_ber_, &A5BITS_a56_raw_, NULL, &A5BITS_a56_xer_, &BITSTRING_json_, &A5BITS_a56_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING A5BITS_a56_default_coding("RAW");
const TTCN_RAWdescriptor_t A5BITS_a57_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       A5BITS_a57_xer_ = { {"a57>\n", "a57>\n"}, {5, 5}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t A5BITS_a57_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t A5BITS_a57_descr_ = { "@MobileL3_GMM_SM_Types.A5BITS.a57", &BITSTRING_ber_, &A5BITS_a57_raw_, NULL, &A5BITS_a57_xer_, &BITSTRING_json_, &A5BITS_a57_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING A5BITS_a57_default_coding("RAW");
const TTCN_RAWdescriptor_t A5BITS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for A5BITS
const TTCN_Typedescriptor_t A5BITS_descr_ = { "@MobileL3_GMM_SM_Types.A5BITS", NULL, &A5BITS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING A5BITS_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapabilities_a5bits_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapabilities_a5bits
const TTCN_Typedescriptor_t AccessCapabilities_a5bits_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapabilities.a5bits", NULL, &AccessCapabilities_a5bits_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapabilities_a5bits_default_coding("RAW");
const TTCN_RAWdescriptor_t MultislotCap_presenceBitHscsd_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MultislotCap_presenceBitHscsd_xer_ = { {"presenceBitHscsd>\n", "presenceBitHscsd>\n"}, {18, 18}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MultislotCap_presenceBitHscsd_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MultislotCap_presenceBitHscsd_descr_ = { "@MobileL3_GMM_SM_Types.MultislotCap.presenceBitHscsd", &BITSTRING_ber_, &MultislotCap_presenceBitHscsd_raw_, NULL, &MultislotCap_presenceBitHscsd_xer_, &BITSTRING_json_, &MultislotCap_presenceBitHscsd_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotCap_presenceBitHscsd_default_coding("RAW");
const TTCN_RAWdescriptor_t MultislotCap_presenceBitGprs_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MultislotCap_presenceBitGprs_xer_ = { {"presenceBitGprs>\n", "presenceBitGprs>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MultislotCap_presenceBitGprs_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MultislotCap_presenceBitGprs_descr_ = { "@MobileL3_GMM_SM_Types.MultislotCap.presenceBitGprs", &BITSTRING_ber_, &MultislotCap_presenceBitGprs_raw_, NULL, &MultislotCap_presenceBitGprs_xer_, &BITSTRING_json_, &MultislotCap_presenceBitGprs_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotCap_presenceBitGprs_default_coding("RAW");
const TTCN_RAWdescriptor_t MultislotCap_presenceBitSms_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MultislotCap_presenceBitSms_xer_ = { {"presenceBitSms>\n", "presenceBitSms>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MultislotCap_presenceBitSms_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MultislotCap_presenceBitSms_descr_ = { "@MobileL3_GMM_SM_Types.MultislotCap.presenceBitSms", &BITSTRING_ber_, &MultislotCap_presenceBitSms_raw_, NULL, &MultislotCap_presenceBitSms_xer_, &BITSTRING_json_, &MultislotCap_presenceBitSms_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotCap_presenceBitSms_default_coding("RAW");
const TTCN_RAWdescriptor_t MultislotCap_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MultislotCap
const TTCN_Typedescriptor_t MultislotCap_descr_ = { "@MobileL3_GMM_SM_Types.MultislotCap", NULL, &MultislotCap_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const TTCN_RAWdescriptor_t MultislotCap_hscsdmultislotclass_raw_ = {5,SG_NO,ORDER_MSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,5,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MultislotCap_hscsdmultislotclass_xer_ = { {"hscsdmultislotclass>\n", "hscsdmultislotclass>\n"}, {21, 21}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MultislotCap_hscsdmultislotclass_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MultislotCap_hscsdmultislotclass_descr_ = { "@MobileL3_GMM_SM_Types.MultislotCap.hscsdmultislotclass", &BITSTRING_ber_, &MultislotCap_hscsdmultislotclass_raw_, NULL, &MultislotCap_hscsdmultislotclass_xer_, &BITSTRING_json_, &MultislotCap_hscsdmultislotclass_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotCap_hscsdmultislotclass_default_coding("RAW");
const TTCN_RAWdescriptor_t MultislotCap__GPRS_gprsmultislotclass_raw_ = {5,SG_NO,ORDER_MSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,5,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MultislotCap__GPRS_gprsmultislotclass_xer_ = { {"gprsmultislotclass>\n", "gprsmultislotclass>\n"}, {20, 20}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MultislotCap__GPRS_gprsmultislotclass_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MultislotCap__GPRS_gprsmultislotclass_descr_ = { "@MobileL3_GMM_SM_Types.MultislotCap_GPRS.gprsmultislotclass", &BITSTRING_ber_, &MultislotCap__GPRS_gprsmultislotclass_raw_, NULL, &MultislotCap__GPRS_gprsmultislotclass_xer_, &BITSTRING_json_, &MultislotCap__GPRS_gprsmultislotclass_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotCap__GPRS_gprsmultislotclass_default_coding("RAW");
const TTCN_RAWdescriptor_t MultislotCap__GPRS_gprsextendeddynalloccap_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MultislotCap__GPRS_gprsextendeddynalloccap_xer_ = { {"gprsextendeddynalloccap>\n", "gprsextendeddynalloccap>\n"}, {25, 25}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MultislotCap__GPRS_gprsextendeddynalloccap_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MultislotCap__GPRS_gprsextendeddynalloccap_descr_ = { "@MobileL3_GMM_SM_Types.MultislotCap_GPRS.gprsextendeddynalloccap", &BITSTRING_ber_, &MultislotCap__GPRS_gprsextendeddynalloccap_raw_, NULL, &MultislotCap__GPRS_gprsextendeddynalloccap_xer_, &BITSTRING_json_, &MultislotCap__GPRS_gprsextendeddynalloccap_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotCap__GPRS_gprsextendeddynalloccap_default_coding("RAW");
const TTCN_RAWdescriptor_t MultislotCap__GPRS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MultislotCap__GPRS
const TTCN_Typedescriptor_t MultislotCap__GPRS_descr_ = { "@MobileL3_GMM_SM_Types.MultislotCap_GPRS", NULL, &MultislotCap__GPRS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotCap__GPRS_default_coding("RAW");
const TTCN_RAWdescriptor_t MultislotCap_gprsmultislot_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MultislotCap_gprsmultislot
const TTCN_Typedescriptor_t MultislotCap_gprsmultislot_descr_ = { "@MobileL3_GMM_SM_Types.MultislotCap.gprsmultislot", NULL, &MultislotCap_gprsmultislot_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotCap_gprsmultislot_default_coding("RAW");
const TTCN_RAWdescriptor_t MultislotCap__SMS_smsValue_raw_ = {4,SG_NO,ORDER_MSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,4,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MultislotCap__SMS_smsValue_xer_ = { {"smsValue>\n", "smsValue>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MultislotCap__SMS_smsValue_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MultislotCap__SMS_smsValue_descr_ = { "@MobileL3_GMM_SM_Types.MultislotCap_SMS.smsValue", &BITSTRING_ber_, &MultislotCap__SMS_smsValue_raw_, NULL, &MultislotCap__SMS_smsValue_xer_, &BITSTRING_json_, &MultislotCap__SMS_smsValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotCap__SMS_smsValue_default_coding("RAW");
const TTCN_RAWdescriptor_t MultislotCap__SMS_smValue_raw_ = {4,SG_NO,ORDER_MSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,4,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MultislotCap__SMS_smValue_xer_ = { {"smValue>\n", "smValue>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MultislotCap__SMS_smValue_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MultislotCap__SMS_smValue_descr_ = { "@MobileL3_GMM_SM_Types.MultislotCap_SMS.smValue", &BITSTRING_ber_, &MultislotCap__SMS_smValue_raw_, NULL, &MultislotCap__SMS_smValue_xer_, &BITSTRING_json_, &MultislotCap__SMS_smValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotCap__SMS_smValue_default_coding("RAW");
const TTCN_RAWdescriptor_t MultislotCap__SMS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MultislotCap__SMS
const TTCN_Typedescriptor_t MultislotCap__SMS_descr_ = { "@MobileL3_GMM_SM_Types.MultislotCap_SMS", NULL, &MultislotCap__SMS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotCap__SMS_default_coding("RAW");
const TTCN_RAWdescriptor_t MultislotCap_multislotCap__SMS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MultislotCap_multislotCap__SMS
const TTCN_Typedescriptor_t MultislotCap_multislotCap__SMS_descr_ = { "@MobileL3_GMM_SM_Types.MultislotCap.multislotCap_SMS", NULL, &MultislotCap_multislotCap__SMS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotCap_multislotCap__SMS_default_coding("RAW");
const TTCN_RAWdescriptor_t MultislotCapAdditionsAfterRel97_presenceBitEcsdmulti_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MultislotCapAdditionsAfterRel97_presenceBitEcsdmulti_xer_ = { {"presenceBitEcsdmulti>\n", "presenceBitEcsdmulti>\n"}, {22, 22}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MultislotCapAdditionsAfterRel97_presenceBitEcsdmulti_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MultislotCapAdditionsAfterRel97_presenceBitEcsdmulti_descr_ = { "@MobileL3_GMM_SM_Types.MultislotCapAdditionsAfterRel97.presenceBitEcsdmulti", &BITSTRING_ber_, &MultislotCapAdditionsAfterRel97_presenceBitEcsdmulti_raw_, NULL, &MultislotCapAdditionsAfterRel97_presenceBitEcsdmulti_xer_, &BITSTRING_json_, &MultislotCapAdditionsAfterRel97_presenceBitEcsdmulti_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotCapAdditionsAfterRel97_presenceBitEcsdmulti_default_coding("RAW");
const TTCN_RAWdescriptor_t MultislotCapAdditionsAfterRel97_presenceBitEgprsmulti_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MultislotCapAdditionsAfterRel97_presenceBitEgprsmulti_xer_ = { {"presenceBitEgprsmulti>\n", "presenceBitEgprsmulti>\n"}, {23, 23}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MultislotCapAdditionsAfterRel97_presenceBitEgprsmulti_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MultislotCapAdditionsAfterRel97_presenceBitEgprsmulti_descr_ = { "@MobileL3_GMM_SM_Types.MultislotCapAdditionsAfterRel97.presenceBitEgprsmulti", &BITSTRING_ber_, &MultislotCapAdditionsAfterRel97_presenceBitEgprsmulti_raw_, NULL, &MultislotCapAdditionsAfterRel97_presenceBitEgprsmulti_xer_, &BITSTRING_json_, &MultislotCapAdditionsAfterRel97_presenceBitEgprsmulti_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotCapAdditionsAfterRel97_presenceBitEgprsmulti_default_coding("RAW");
const TTCN_RAWdescriptor_t MultislotCapAdditionsAfterRel97_presenceBitDtmGprsmulti_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MultislotCapAdditionsAfterRel97_presenceBitDtmGprsmulti_xer_ = { {"presenceBitDtmGprsmulti>\n", "presenceBitDtmGprsmulti>\n"}, {25, 25}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MultislotCapAdditionsAfterRel97_presenceBitDtmGprsmulti_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MultislotCapAdditionsAfterRel97_presenceBitDtmGprsmulti_descr_ = { "@MobileL3_GMM_SM_Types.MultislotCapAdditionsAfterRel97.presenceBitDtmGprsmulti", &BITSTRING_ber_, &MultislotCapAdditionsAfterRel97_presenceBitDtmGprsmulti_raw_, NULL, &MultislotCapAdditionsAfterRel97_presenceBitDtmGprsmulti_xer_, &BITSTRING_json_, &MultislotCapAdditionsAfterRel97_presenceBitDtmGprsmulti_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotCapAdditionsAfterRel97_presenceBitDtmGprsmulti_default_coding("RAW");
const TTCN_RAWdescriptor_t MultislotCapAdditionsAfterRel97_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MultislotCapAdditionsAfterRel97
const TTCN_Typedescriptor_t MultislotCapAdditionsAfterRel97_descr_ = { "@MobileL3_GMM_SM_Types.MultislotCapAdditionsAfterRel97", NULL, &MultislotCapAdditionsAfterRel97_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const TTCN_RAWdescriptor_t MultislotCapAdditionsAfterRel97_ecsdmultislotclass_raw_ = {5,SG_NO,ORDER_MSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,5,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MultislotCapAdditionsAfterRel97_ecsdmultislotclass_xer_ = { {"ecsdmultislotclass>\n", "ecsdmultislotclass>\n"}, {20, 20}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MultislotCapAdditionsAfterRel97_ecsdmultislotclass_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MultislotCapAdditionsAfterRel97_ecsdmultislotclass_descr_ = { "@MobileL3_GMM_SM_Types.MultislotCapAdditionsAfterRel97.ecsdmultislotclass", &BITSTRING_ber_, &MultislotCapAdditionsAfterRel97_ecsdmultislotclass_raw_, NULL, &MultislotCapAdditionsAfterRel97_ecsdmultislotclass_xer_, &BITSTRING_json_, &MultislotCapAdditionsAfterRel97_ecsdmultislotclass_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotCapAdditionsAfterRel97_ecsdmultislotclass_default_coding("RAW");
const TTCN_RAWdescriptor_t MultislotCap__EGPRS_egprsmultislotclass_raw_ = {5,SG_NO,ORDER_MSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,5,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MultislotCap__EGPRS_egprsmultislotclass_xer_ = { {"egprsmultislotclass>\n", "egprsmultislotclass>\n"}, {21, 21}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MultislotCap__EGPRS_egprsmultislotclass_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MultislotCap__EGPRS_egprsmultislotclass_descr_ = { "@MobileL3_GMM_SM_Types.MultislotCap_EGPRS.egprsmultislotclass", &BITSTRING_ber_, &MultislotCap__EGPRS_egprsmultislotclass_raw_, NULL, &MultislotCap__EGPRS_egprsmultislotclass_xer_, &BITSTRING_json_, &MultislotCap__EGPRS_egprsmultislotclass_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotCap__EGPRS_egprsmultislotclass_default_coding("RAW");
const TTCN_RAWdescriptor_t MultislotCap__EGPRS_egprsextendeddynalloccap_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MultislotCap__EGPRS_egprsextendeddynalloccap_xer_ = { {"egprsextendeddynalloccap>\n", "egprsextendeddynalloccap>\n"}, {26, 26}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MultislotCap__EGPRS_egprsextendeddynalloccap_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MultislotCap__EGPRS_egprsextendeddynalloccap_descr_ = { "@MobileL3_GMM_SM_Types.MultislotCap_EGPRS.egprsextendeddynalloccap", &BITSTRING_ber_, &MultislotCap__EGPRS_egprsextendeddynalloccap_raw_, NULL, &MultislotCap__EGPRS_egprsextendeddynalloccap_xer_, &BITSTRING_json_, &MultislotCap__EGPRS_egprsextendeddynalloccap_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotCap__EGPRS_egprsextendeddynalloccap_default_coding("RAW");
const TTCN_RAWdescriptor_t MultislotCap__EGPRS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MultislotCap__EGPRS
const TTCN_Typedescriptor_t MultislotCap__EGPRS_descr_ = { "@MobileL3_GMM_SM_Types.MultislotCap_EGPRS", NULL, &MultislotCap__EGPRS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotCap__EGPRS_default_coding("RAW");
const TTCN_RAWdescriptor_t MultislotCapAdditionsAfterRel97_multislotCap__EGPRS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MultislotCapAdditionsAfterRel97_multislotCap__EGPRS
const TTCN_Typedescriptor_t MultislotCapAdditionsAfterRel97_multislotCap__EGPRS_descr_ = { "@MobileL3_GMM_SM_Types.MultislotCapAdditionsAfterRel97.multislotCap_EGPRS", NULL, &MultislotCapAdditionsAfterRel97_multislotCap__EGPRS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotCapAdditionsAfterRel97_multislotCap__EGPRS_default_coding("RAW");
const TTCN_RAWdescriptor_t MultislotCap__dtmgprsmultislotsubclass_dtmgprsmultislotsubclass_raw_ = {2,SG_NO,ORDER_MSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,2,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MultislotCap__dtmgprsmultislotsubclass_dtmgprsmultislotsubclass_xer_ = { {"dtmgprsmultislotsubclass>\n", "dtmgprsmultislotsubclass>\n"}, {26, 26}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MultislotCap__dtmgprsmultislotsubclass_dtmgprsmultislotsubclass_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MultislotCap__dtmgprsmultislotsubclass_dtmgprsmultislotsubclass_descr_ = { "@MobileL3_GMM_SM_Types.MultislotCap_dtmgprsmultislotsubclass.dtmgprsmultislotsubclass", &BITSTRING_ber_, &MultislotCap__dtmgprsmultislotsubclass_dtmgprsmultislotsubclass_raw_, NULL, &MultislotCap__dtmgprsmultislotsubclass_dtmgprsmultislotsubclass_xer_, &BITSTRING_json_, &MultislotCap__dtmgprsmultislotsubclass_dtmgprsmultislotsubclass_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotCap__dtmgprsmultislotsubclass_dtmgprsmultislotsubclass_default_coding("RAW");
const TTCN_RAWdescriptor_t MultislotCap__dtmgprsmultislotsubclass_singleSlotDTM_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MultislotCap__dtmgprsmultislotsubclass_singleSlotDTM_xer_ = { {"singleSlotDTM>\n", "singleSlotDTM>\n"}, {15, 15}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MultislotCap__dtmgprsmultislotsubclass_singleSlotDTM_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MultislotCap__dtmgprsmultislotsubclass_singleSlotDTM_descr_ = { "@MobileL3_GMM_SM_Types.MultislotCap_dtmgprsmultislotsubclass.singleSlotDTM", &BITSTRING_ber_, &MultislotCap__dtmgprsmultislotsubclass_singleSlotDTM_raw_, NULL, &MultislotCap__dtmgprsmultislotsubclass_singleSlotDTM_xer_, &BITSTRING_json_, &MultislotCap__dtmgprsmultislotsubclass_singleSlotDTM_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotCap__dtmgprsmultislotsubclass_singleSlotDTM_default_coding("RAW");
const TTCN_RAWdescriptor_t MultislotCap__dtmgprsmultislotsubclass_presenceBitDTM__EGPRSMultiSlot_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MultislotCap__dtmgprsmultislotsubclass_presenceBitDTM__EGPRSMultiSlot_xer_ = { {"presenceBitDTM_EGPRSMultiSlot>\n", "presenceBitDTM_EGPRSMultiSlot>\n"}, {31, 31}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MultislotCap__dtmgprsmultislotsubclass_presenceBitDTM__EGPRSMultiSlot_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MultislotCap__dtmgprsmultislotsubclass_presenceBitDTM__EGPRSMultiSlot_descr_ = { "@MobileL3_GMM_SM_Types.MultislotCap_dtmgprsmultislotsubclass.presenceBitDTM_EGPRSMultiSlot", &BITSTRING_ber_, &MultislotCap__dtmgprsmultislotsubclass_presenceBitDTM__EGPRSMultiSlot_raw_, NULL, &MultislotCap__dtmgprsmultislotsubclass_presenceBitDTM__EGPRSMultiSlot_xer_, &BITSTRING_json_, &MultislotCap__dtmgprsmultislotsubclass_presenceBitDTM__EGPRSMultiSlot_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotCap__dtmgprsmultislotsubclass_presenceBitDTM__EGPRSMultiSlot_default_coding("RAW");
const TTCN_RAWdescriptor_t MultislotCap__dtmgprsmultislotsubclass_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MultislotCap__dtmgprsmultislotsubclass
const TTCN_Typedescriptor_t MultislotCap__dtmgprsmultislotsubclass_descr_ = { "@MobileL3_GMM_SM_Types.MultislotCap_dtmgprsmultislotsubclass", NULL, &MultislotCap__dtmgprsmultislotsubclass_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const TTCN_RAWdescriptor_t MultislotCap__dtmgprsmultislotsubclass_dTM__EGPRSMultiSlot_raw_ = {2,SG_NO,ORDER_MSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,2,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MultislotCap__dtmgprsmultislotsubclass_dTM__EGPRSMultiSlot_xer_ = { {"dTM_EGPRSMultiSlot>\n", "dTM_EGPRSMultiSlot>\n"}, {20, 20}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MultislotCap__dtmgprsmultislotsubclass_dTM__EGPRSMultiSlot_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MultislotCap__dtmgprsmultislotsubclass_dTM__EGPRSMultiSlot_descr_ = { "@MobileL3_GMM_SM_Types.MultislotCap_dtmgprsmultislotsubclass.dTM_EGPRSMultiSlot", &BITSTRING_ber_, &MultislotCap__dtmgprsmultislotsubclass_dTM__EGPRSMultiSlot_raw_, NULL, &MultislotCap__dtmgprsmultislotsubclass_dTM__EGPRSMultiSlot_xer_, &BITSTRING_json_, &MultislotCap__dtmgprsmultislotsubclass_dTM__EGPRSMultiSlot_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotCap__dtmgprsmultislotsubclass_dTM__EGPRSMultiSlot_default_coding("RAW");
UNIVERSAL_CHARSTRING MultislotCap__dtmgprsmultislotsubclass_default_coding("RAW");
const TTCN_RAWdescriptor_t MultislotCapAdditionsAfterRel97_multislotCapdtmgprsmultislotsubclass_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MultislotCapAdditionsAfterRel97_multislotCapdtmgprsmultislotsubclass
const TTCN_Typedescriptor_t MultislotCapAdditionsAfterRel97_multislotCapdtmgprsmultislotsubclass_descr_ = { "@MobileL3_GMM_SM_Types.MultislotCapAdditionsAfterRel97.multislotCapdtmgprsmultislotsubclass", NULL, &MultislotCapAdditionsAfterRel97_multislotCapdtmgprsmultislotsubclass_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotCapAdditionsAfterRel97_multislotCapdtmgprsmultislotsubclass_default_coding("RAW");
UNIVERSAL_CHARSTRING MultislotCapAdditionsAfterRel97_default_coding("RAW");
const TTCN_RAWdescriptor_t MultislotCap_multislotCapAdditionsAfterRel97_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MultislotCap_multislotCapAdditionsAfterRel97
const TTCN_Typedescriptor_t MultislotCap_multislotCapAdditionsAfterRel97_descr_ = { "@MobileL3_GMM_SM_Types.MultislotCap.multislotCapAdditionsAfterRel97", NULL, &MultislotCap_multislotCapAdditionsAfterRel97_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotCap_multislotCapAdditionsAfterRel97_default_coding("RAW");
UNIVERSAL_CHARSTRING MultislotCap_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapabilities_multislotcap_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapabilities_multislotcap
const TTCN_Typedescriptor_t AccessCapabilities_multislotcap_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapabilities.multislotcap", NULL, &AccessCapabilities_multislotcap_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapabilities_multislotcap_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel99_presenceBitPskpow_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel99_presenceBitPskpow_xer_ = { {"presenceBitPskpow>\n", "presenceBitPskpow>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel99_presenceBitPskpow_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel99_presenceBitPskpow_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel99.presenceBitPskpow", &BITSTRING_ber_, &AccessCapAdditionsRel99_presenceBitPskpow_raw_, NULL, &AccessCapAdditionsRel99_presenceBitPskpow_xer_, &BITSTRING_json_, &AccessCapAdditionsRel99_presenceBitPskpow_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel99_presenceBitPskpow_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel99_compactIntMeasurCap_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel99_compactIntMeasurCap_xer_ = { {"compactIntMeasurCap>\n", "compactIntMeasurCap>\n"}, {21, 21}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel99_compactIntMeasurCap_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel99_compactIntMeasurCap_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel99.compactIntMeasurCap", &BITSTRING_ber_, &AccessCapAdditionsRel99_compactIntMeasurCap_raw_, NULL, &AccessCapAdditionsRel99_compactIntMeasurCap_xer_, &BITSTRING_json_, &AccessCapAdditionsRel99_compactIntMeasurCap_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel99_compactIntMeasurCap_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel99_revisionLevelInd_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel99_revisionLevelInd_xer_ = { {"revisionLevelInd>\n", "revisionLevelInd>\n"}, {18, 18}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel99_revisionLevelInd_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel99_revisionLevelInd_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel99.revisionLevelInd", &BITSTRING_ber_, &AccessCapAdditionsRel99_revisionLevelInd_raw_, NULL, &AccessCapAdditionsRel99_revisionLevelInd_xer_, &BITSTRING_json_, &AccessCapAdditionsRel99_revisionLevelInd_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel99_revisionLevelInd_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel99_umtsfddRadAccTechCap_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel99_umtsfddRadAccTechCap_xer_ = { {"umtsfddRadAccTechCap>\n", "umtsfddRadAccTechCap>\n"}, {22, 22}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel99_umtsfddRadAccTechCap_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel99_umtsfddRadAccTechCap_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel99.umtsfddRadAccTechCap", &BITSTRING_ber_, &AccessCapAdditionsRel99_umtsfddRadAccTechCap_raw_, NULL, &AccessCapAdditionsRel99_umtsfddRadAccTechCap_xer_, &BITSTRING_json_, &AccessCapAdditionsRel99_umtsfddRadAccTechCap_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel99_umtsfddRadAccTechCap_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel99_umtstddRadAccTechCap_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel99_umtstddRadAccTechCap_xer_ = { {"umtstddRadAccTechCap>\n", "umtstddRadAccTechCap>\n"}, {22, 22}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel99_umtstddRadAccTechCap_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel99_umtstddRadAccTechCap_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel99.umtstddRadAccTechCap", &BITSTRING_ber_, &AccessCapAdditionsRel99_umtstddRadAccTechCap_raw_, NULL, &AccessCapAdditionsRel99_umtstddRadAccTechCap_xer_, &BITSTRING_json_, &AccessCapAdditionsRel99_umtstddRadAccTechCap_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel99_umtstddRadAccTechCap_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel99_cdma2kRadAccTechCap_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel99_cdma2kRadAccTechCap_xer_ = { {"cdma2kRadAccTechCap>\n", "cdma2kRadAccTechCap>\n"}, {21, 21}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel99_cdma2kRadAccTechCap_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel99_cdma2kRadAccTechCap_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel99.cdma2kRadAccTechCap", &BITSTRING_ber_, &AccessCapAdditionsRel99_cdma2kRadAccTechCap_raw_, NULL, &AccessCapAdditionsRel99_cdma2kRadAccTechCap_xer_, &BITSTRING_json_, &AccessCapAdditionsRel99_cdma2kRadAccTechCap_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel99_cdma2kRadAccTechCap_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel99_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsRel99
const TTCN_Typedescriptor_t AccessCapAdditionsRel99_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel99", NULL, &AccessCapAdditionsRel99_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const TTCN_RAWdescriptor_t AccessCapAdditionsRel99_pskpowercap_raw_ = {2,SG_NO,ORDER_MSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,2,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel99_pskpowercap_xer_ = { {"pskpowercap>\n", "pskpowercap>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel99_pskpowercap_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel99_pskpowercap_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel99.pskpowercap", &BITSTRING_ber_, &AccessCapAdditionsRel99_pskpowercap_raw_, NULL, &AccessCapAdditionsRel99_pskpowercap_xer_, &BITSTRING_json_, &AccessCapAdditionsRel99_pskpowercap_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel99_pskpowercap_default_coding("RAW");
UNIVERSAL_CHARSTRING AccessCapAdditionsRel99_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsAfterRel97_accessCapAdditionsRel99_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsAfterRel97_accessCapAdditionsRel99
const TTCN_Typedescriptor_t AccessCapAdditionsAfterRel97_accessCapAdditionsRel99_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsAfterRel97.accessCapAdditionsRel99", NULL, &AccessCapAdditionsAfterRel97_accessCapAdditionsRel99_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsAfterRel97_accessCapAdditionsRel99_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsAfterRel97_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsAfterRel97
const TTCN_Typedescriptor_t AccessCapAdditionsAfterRel97_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsAfterRel97", NULL, &AccessCapAdditionsAfterRel97_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const TTCN_RAWdescriptor_t AccessCapAdditionsRel4_umts128RadAccTechCap_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel4_umts128RadAccTechCap_xer_ = { {"umts128RadAccTechCap>\n", "umts128RadAccTechCap>\n"}, {22, 22}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel4_umts128RadAccTechCap_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel4_umts128RadAccTechCap_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel4.umts128RadAccTechCap", &BITSTRING_ber_, &AccessCapAdditionsRel4_umts128RadAccTechCap_raw_, NULL, &AccessCapAdditionsRel4_umts128RadAccTechCap_xer_, &BITSTRING_json_, &AccessCapAdditionsRel4_umts128RadAccTechCap_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel4_umts128RadAccTechCap_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel4_geranFeaturePackage_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel4_geranFeaturePackage_xer_ = { {"geranFeaturePackage>\n", "geranFeaturePackage>\n"}, {21, 21}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel4_geranFeaturePackage_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel4_geranFeaturePackage_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel4.geranFeaturePackage", &BITSTRING_ber_, &AccessCapAdditionsRel4_geranFeaturePackage_raw_, NULL, &AccessCapAdditionsRel4_geranFeaturePackage_xer_, &BITSTRING_json_, &AccessCapAdditionsRel4_geranFeaturePackage_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel4_geranFeaturePackage_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel4_presenceBitExtendedDTM_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel4_presenceBitExtendedDTM_xer_ = { {"presenceBitExtendedDTM>\n", "presenceBitExtendedDTM>\n"}, {24, 24}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel4_presenceBitExtendedDTM_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel4_presenceBitExtendedDTM_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel4.presenceBitExtendedDTM", &BITSTRING_ber_, &AccessCapAdditionsRel4_presenceBitExtendedDTM_raw_, NULL, &AccessCapAdditionsRel4_presenceBitExtendedDTM_xer_, &BITSTRING_json_, &AccessCapAdditionsRel4_presenceBitExtendedDTM_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel4_presenceBitExtendedDTM_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel4_modulationBasedMultislotClass_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel4_modulationBasedMultislotClass_xer_ = { {"modulationBasedMultislotClass>\n", "modulationBasedMultislotClass>\n"}, {31, 31}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel4_modulationBasedMultislotClass_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel4_modulationBasedMultislotClass_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel4.modulationBasedMultislotClass", &BITSTRING_ber_, &AccessCapAdditionsRel4_modulationBasedMultislotClass_raw_, NULL, &AccessCapAdditionsRel4_modulationBasedMultislotClass_xer_, &BITSTRING_json_, &AccessCapAdditionsRel4_modulationBasedMultislotClass_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel4_modulationBasedMultislotClass_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel4_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsRel4
const TTCN_Typedescriptor_t AccessCapAdditionsRel4_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel4", NULL, &AccessCapAdditionsRel4_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const TTCN_RAWdescriptor_t ExtendedDTM_ExtendedDTM__GPRSMultislot_raw_ = {2,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,2,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       ExtendedDTM_ExtendedDTM__GPRSMultislot_xer_ = { {"ExtendedDTM_GPRSMultislot>\n", "ExtendedDTM_GPRSMultislot>\n"}, {27, 27}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ExtendedDTM_ExtendedDTM__GPRSMultislot_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ExtendedDTM_ExtendedDTM__GPRSMultislot_descr_ = { "@MobileL3_GMM_SM_Types.ExtendedDTM.ExtendedDTM_GPRSMultislot", &BITSTRING_ber_, &ExtendedDTM_ExtendedDTM__GPRSMultislot_raw_, NULL, &ExtendedDTM_ExtendedDTM__GPRSMultislot_xer_, &BITSTRING_json_, &ExtendedDTM_ExtendedDTM__GPRSMultislot_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ExtendedDTM_ExtendedDTM__GPRSMultislot_default_coding("RAW");
const TTCN_RAWdescriptor_t ExtendedDTM_ExtendedDTM__EGPRSMultislot_raw_ = {2,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,2,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       ExtendedDTM_ExtendedDTM__EGPRSMultislot_xer_ = { {"ExtendedDTM_EGPRSMultislot>\n", "ExtendedDTM_EGPRSMultislot>\n"}, {28, 28}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ExtendedDTM_ExtendedDTM__EGPRSMultislot_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ExtendedDTM_ExtendedDTM__EGPRSMultislot_descr_ = { "@MobileL3_GMM_SM_Types.ExtendedDTM.ExtendedDTM_EGPRSMultislot", &BITSTRING_ber_, &ExtendedDTM_ExtendedDTM__EGPRSMultislot_raw_, NULL, &ExtendedDTM_ExtendedDTM__EGPRSMultislot_xer_, &BITSTRING_json_, &ExtendedDTM_ExtendedDTM__EGPRSMultislot_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ExtendedDTM_ExtendedDTM__EGPRSMultislot_default_coding("RAW");
const TTCN_RAWdescriptor_t ExtendedDTM_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ExtendedDTM
const TTCN_Typedescriptor_t ExtendedDTM_descr_ = { "@MobileL3_GMM_SM_Types.ExtendedDTM", NULL, &ExtendedDTM_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ExtendedDTM_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel4_extendedDTM_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsRel4_extendedDTM
const TTCN_Typedescriptor_t AccessCapAdditionsRel4_extendedDTM_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel4.extendedDTM", NULL, &AccessCapAdditionsRel4_extendedDTM_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel4_extendedDTM_default_coding("RAW");
UNIVERSAL_CHARSTRING AccessCapAdditionsRel4_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsAfterRel99_accessCapAdditionsRel4_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsAfterRel99_accessCapAdditionsRel4
const TTCN_Typedescriptor_t AccessCapAdditionsAfterRel99_accessCapAdditionsRel4_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsAfterRel99.accessCapAdditionsRel4", NULL, &AccessCapAdditionsAfterRel99_accessCapAdditionsRel4_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsAfterRel99_accessCapAdditionsRel4_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsAfterRel99_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsAfterRel99
const TTCN_Typedescriptor_t AccessCapAdditionsAfterRel99_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsAfterRel99", NULL, &AccessCapAdditionsAfterRel99_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const TTCN_RAWdescriptor_t AccessCapAdditionsRel5_presenceBitHighMultislotCapability_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel5_presenceBitHighMultislotCapability_xer_ = { {"presenceBitHighMultislotCapability>\n", "presenceBitHighMultislotCapability>\n"}, {36, 36}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel5_presenceBitHighMultislotCapability_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel5_presenceBitHighMultislotCapability_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel5.presenceBitHighMultislotCapability", &BITSTRING_ber_, &AccessCapAdditionsRel5_presenceBitHighMultislotCapability_raw_, NULL, &AccessCapAdditionsRel5_presenceBitHighMultislotCapability_xer_, &BITSTRING_json_, &AccessCapAdditionsRel5_presenceBitHighMultislotCapability_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel5_presenceBitHighMultislotCapability_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel5_presenceBitGeranIuModeCapability_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel5_presenceBitGeranIuModeCapability_xer_ = { {"presenceBitGeranIuModeCapability>\n", "presenceBitGeranIuModeCapability>\n"}, {34, 34}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel5_presenceBitGeranIuModeCapability_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel5_presenceBitGeranIuModeCapability_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel5.presenceBitGeranIuModeCapability", &BITSTRING_ber_, &AccessCapAdditionsRel5_presenceBitGeranIuModeCapability_raw_, NULL, &AccessCapAdditionsRel5_presenceBitGeranIuModeCapability_xer_, &BITSTRING_json_, &AccessCapAdditionsRel5_presenceBitGeranIuModeCapability_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel5_presenceBitGeranIuModeCapability_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel5_gMSKMultislotPowerProfile_raw_ = {2,SG_NO,ORDER_MSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,2,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel5_gMSKMultislotPowerProfile_xer_ = { {"gMSKMultislotPowerProfile>\n", "gMSKMultislotPowerProfile>\n"}, {27, 27}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel5_gMSKMultislotPowerProfile_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel5_gMSKMultislotPowerProfile_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel5.gMSKMultislotPowerProfile", &BITSTRING_ber_, &AccessCapAdditionsRel5_gMSKMultislotPowerProfile_raw_, NULL, &AccessCapAdditionsRel5_gMSKMultislotPowerProfile_xer_, &BITSTRING_json_, &AccessCapAdditionsRel5_gMSKMultislotPowerProfile_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel5_gMSKMultislotPowerProfile_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel5_eightPSKMultislotPowerProfile_raw_ = {2,SG_NO,ORDER_MSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,2,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel5_eightPSKMultislotPowerProfile_xer_ = { {"eightPSKMultislotPowerProfile>\n", "eightPSKMultislotPowerProfile>\n"}, {31, 31}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel5_eightPSKMultislotPowerProfile_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel5_eightPSKMultislotPowerProfile_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel5.eightPSKMultislotPowerProfile", &BITSTRING_ber_, &AccessCapAdditionsRel5_eightPSKMultislotPowerProfile_raw_, NULL, &AccessCapAdditionsRel5_eightPSKMultislotPowerProfile_xer_, &BITSTRING_json_, &AccessCapAdditionsRel5_eightPSKMultislotPowerProfile_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel5_eightPSKMultislotPowerProfile_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel5_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsRel5
const TTCN_Typedescriptor_t AccessCapAdditionsRel5_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel5", NULL, &AccessCapAdditionsRel5_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const TTCN_RAWdescriptor_t AccessCapAdditionsRel5_highMultislotCapability_raw_ = {2,SG_NO,ORDER_MSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,2,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel5_highMultislotCapability_xer_ = { {"highMultislotCapability>\n", "highMultislotCapability>\n"}, {25, 25}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel5_highMultislotCapability_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel5_highMultislotCapability_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel5.highMultislotCapability", &BITSTRING_ber_, &AccessCapAdditionsRel5_highMultislotCapability_raw_, NULL, &AccessCapAdditionsRel5_highMultislotCapability_xer_, &BITSTRING_json_, &AccessCapAdditionsRel5_highMultislotCapability_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel5_highMultislotCapability_default_coding("RAW");
UNIVERSAL_CHARSTRING AccessCapAdditionsRel5_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsAfterRel4_accessCapAdditionsRel5_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsAfterRel4_accessCapAdditionsRel5
const TTCN_Typedescriptor_t AccessCapAdditionsAfterRel4_accessCapAdditionsRel5_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsAfterRel4.accessCapAdditionsRel5", NULL, &AccessCapAdditionsAfterRel4_accessCapAdditionsRel5_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsAfterRel4_accessCapAdditionsRel5_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsAfterRel4_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsAfterRel4
const TTCN_Typedescriptor_t AccessCapAdditionsAfterRel4_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsAfterRel4", NULL, &AccessCapAdditionsAfterRel4_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const TTCN_RAWdescriptor_t AccessCapAdditionsRel6_multipleTBFCapability_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel6_multipleTBFCapability_xer_ = { {"multipleTBFCapability>\n", "multipleTBFCapability>\n"}, {23, 23}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel6_multipleTBFCapability_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel6_multipleTBFCapability_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel6.multipleTBFCapability", &BITSTRING_ber_, &AccessCapAdditionsRel6_multipleTBFCapability_raw_, NULL, &AccessCapAdditionsRel6_multipleTBFCapability_xer_, &BITSTRING_json_, &AccessCapAdditionsRel6_multipleTBFCapability_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel6_multipleTBFCapability_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel6_downlinkAdvancedReceiverPerformance_raw_ = {2,SG_NO,ORDER_MSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,2,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel6_downlinkAdvancedReceiverPerformance_xer_ = { {"downlinkAdvancedReceiverPerformance>\n", "downlinkAdvancedReceiverPerformance>\n"}, {37, 37}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel6_downlinkAdvancedReceiverPerformance_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel6_downlinkAdvancedReceiverPerformance_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel6.downlinkAdvancedReceiverPerformance", &BITSTRING_ber_, &AccessCapAdditionsRel6_downlinkAdvancedReceiverPerformance_raw_, NULL, &AccessCapAdditionsRel6_downlinkAdvancedReceiverPerformance_xer_, &BITSTRING_json_, &AccessCapAdditionsRel6_downlinkAdvancedReceiverPerformance_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel6_downlinkAdvancedReceiverPerformance_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel6_extendedRLCMACCtrlMsgSegmentationCap_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel6_extendedRLCMACCtrlMsgSegmentationCap_xer_ = { {"extendedRLCMACCtrlMsgSegmentationCap>\n", "extendedRLCMACCtrlMsgSegmentationCap>\n"}, {38, 38}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel6_extendedRLCMACCtrlMsgSegmentationCap_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel6_extendedRLCMACCtrlMsgSegmentationCap_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel6.extendedRLCMACCtrlMsgSegmentationCap", &BITSTRING_ber_, &AccessCapAdditionsRel6_extendedRLCMACCtrlMsgSegmentationCap_raw_, NULL, &AccessCapAdditionsRel6_extendedRLCMACCtrlMsgSegmentationCap_xer_, &BITSTRING_json_, &AccessCapAdditionsRel6_extendedRLCMACCtrlMsgSegmentationCap_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel6_extendedRLCMACCtrlMsgSegmentationCap_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel6_dTMEnhancementsCapability_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel6_dTMEnhancementsCapability_xer_ = { {"dTMEnhancementsCapability>\n", "dTMEnhancementsCapability>\n"}, {27, 27}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel6_dTMEnhancementsCapability_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel6_dTMEnhancementsCapability_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel6.dTMEnhancementsCapability", &BITSTRING_ber_, &AccessCapAdditionsRel6_dTMEnhancementsCapability_raw_, NULL, &AccessCapAdditionsRel6_dTMEnhancementsCapability_xer_, &BITSTRING_json_, &AccessCapAdditionsRel6_dTMEnhancementsCapability_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel6_dTMEnhancementsCapability_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel6_presenceBitDTMGPRSHighMultiSlotClass_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel6_presenceBitDTMGPRSHighMultiSlotClass_xer_ = { {"presenceBitDTMGPRSHighMultiSlotClass>\n", "presenceBitDTMGPRSHighMultiSlotClass>\n"}, {38, 38}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel6_presenceBitDTMGPRSHighMultiSlotClass_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel6_presenceBitDTMGPRSHighMultiSlotClass_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel6.presenceBitDTMGPRSHighMultiSlotClass", &BITSTRING_ber_, &AccessCapAdditionsRel6_presenceBitDTMGPRSHighMultiSlotClass_raw_, NULL, &AccessCapAdditionsRel6_presenceBitDTMGPRSHighMultiSlotClass_xer_, &BITSTRING_json_, &AccessCapAdditionsRel6_presenceBitDTMGPRSHighMultiSlotClass_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel6_presenceBitDTMGPRSHighMultiSlotClass_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel6_pSHandoverCapability_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel6_pSHandoverCapability_xer_ = { {"pSHandoverCapability>\n", "pSHandoverCapability>\n"}, {22, 22}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel6_pSHandoverCapability_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel6_pSHandoverCapability_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel6.pSHandoverCapability", &BITSTRING_ber_, &AccessCapAdditionsRel6_pSHandoverCapability_raw_, NULL, &AccessCapAdditionsRel6_pSHandoverCapability_xer_, &BITSTRING_json_, &AccessCapAdditionsRel6_pSHandoverCapability_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel6_pSHandoverCapability_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel6_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsRel6
const TTCN_Typedescriptor_t AccessCapAdditionsRel6_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel6", NULL, &AccessCapAdditionsRel6_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const TTCN_RAWdescriptor_t DTMGPRSHighMultiSlotClass_dTMGPRSHighMultiSlotClassValue_raw_ = {3,SG_NO,ORDER_MSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,3,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       DTMGPRSHighMultiSlotClass_dTMGPRSHighMultiSlotClassValue_xer_ = { {"dTMGPRSHighMultiSlotClassValue>\n", "dTMGPRSHighMultiSlotClassValue>\n"}, {32, 32}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t DTMGPRSHighMultiSlotClass_dTMGPRSHighMultiSlotClassValue_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t DTMGPRSHighMultiSlotClass_dTMGPRSHighMultiSlotClassValue_descr_ = { "@MobileL3_GMM_SM_Types.DTMGPRSHighMultiSlotClass.dTMGPRSHighMultiSlotClassValue", &BITSTRING_ber_, &DTMGPRSHighMultiSlotClass_dTMGPRSHighMultiSlotClassValue_raw_, NULL, &DTMGPRSHighMultiSlotClass_dTMGPRSHighMultiSlotClassValue_xer_, &BITSTRING_json_, &DTMGPRSHighMultiSlotClass_dTMGPRSHighMultiSlotClassValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DTMGPRSHighMultiSlotClass_dTMGPRSHighMultiSlotClassValue_default_coding("RAW");
const TTCN_RAWdescriptor_t DTMGPRSHighMultiSlotClass_presenceBitDTMEGPRSHighMultiSlotClass_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       DTMGPRSHighMultiSlotClass_presenceBitDTMEGPRSHighMultiSlotClass_xer_ = { {"presenceBitDTMEGPRSHighMultiSlotClass>\n", "presenceBitDTMEGPRSHighMultiSlotClass>\n"}, {39, 39}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t DTMGPRSHighMultiSlotClass_presenceBitDTMEGPRSHighMultiSlotClass_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t DTMGPRSHighMultiSlotClass_presenceBitDTMEGPRSHighMultiSlotClass_descr_ = { "@MobileL3_GMM_SM_Types.DTMGPRSHighMultiSlotClass.presenceBitDTMEGPRSHighMultiSlotClass", &BITSTRING_ber_, &DTMGPRSHighMultiSlotClass_presenceBitDTMEGPRSHighMultiSlotClass_raw_, NULL, &DTMGPRSHighMultiSlotClass_presenceBitDTMEGPRSHighMultiSlotClass_xer_, &BITSTRING_json_, &DTMGPRSHighMultiSlotClass_presenceBitDTMEGPRSHighMultiSlotClass_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DTMGPRSHighMultiSlotClass_presenceBitDTMEGPRSHighMultiSlotClass_default_coding("RAW");
const TTCN_RAWdescriptor_t DTMGPRSHighMultiSlotClass_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for DTMGPRSHighMultiSlotClass
const TTCN_Typedescriptor_t DTMGPRSHighMultiSlotClass_descr_ = { "@MobileL3_GMM_SM_Types.DTMGPRSHighMultiSlotClass", NULL, &DTMGPRSHighMultiSlotClass_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const TTCN_RAWdescriptor_t DTMGPRSHighMultiSlotClass_dTMEGPRSHighMultiSlotClassValue_raw_ = {3,SG_NO,ORDER_MSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,3,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       DTMGPRSHighMultiSlotClass_dTMEGPRSHighMultiSlotClassValue_xer_ = { {"dTMEGPRSHighMultiSlotClassValue>\n", "dTMEGPRSHighMultiSlotClassValue>\n"}, {33, 33}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t DTMGPRSHighMultiSlotClass_dTMEGPRSHighMultiSlotClassValue_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t DTMGPRSHighMultiSlotClass_dTMEGPRSHighMultiSlotClassValue_descr_ = { "@MobileL3_GMM_SM_Types.DTMGPRSHighMultiSlotClass.dTMEGPRSHighMultiSlotClassValue", &BITSTRING_ber_, &DTMGPRSHighMultiSlotClass_dTMEGPRSHighMultiSlotClassValue_raw_, NULL, &DTMGPRSHighMultiSlotClass_dTMEGPRSHighMultiSlotClassValue_xer_, &BITSTRING_json_, &DTMGPRSHighMultiSlotClass_dTMEGPRSHighMultiSlotClassValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DTMGPRSHighMultiSlotClass_dTMEGPRSHighMultiSlotClassValue_default_coding("RAW");
UNIVERSAL_CHARSTRING DTMGPRSHighMultiSlotClass_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel6_dTMGPRSHighMultiSlotClass_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsRel6_dTMGPRSHighMultiSlotClass
const TTCN_Typedescriptor_t AccessCapAdditionsRel6_dTMGPRSHighMultiSlotClass_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel6.dTMGPRSHighMultiSlotClass", NULL, &AccessCapAdditionsRel6_dTMGPRSHighMultiSlotClass_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel6_dTMGPRSHighMultiSlotClass_default_coding("RAW");
UNIVERSAL_CHARSTRING AccessCapAdditionsRel6_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsAfterRel5_accessCapAdditionsRel6_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsAfterRel5_accessCapAdditionsRel6
const TTCN_Typedescriptor_t AccessCapAdditionsAfterRel5_accessCapAdditionsRel6_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsAfterRel5.accessCapAdditionsRel6", NULL, &AccessCapAdditionsAfterRel5_accessCapAdditionsRel6_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsAfterRel5_accessCapAdditionsRel6_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsAfterRel5_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsAfterRel5
const TTCN_Typedescriptor_t AccessCapAdditionsAfterRel5_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsAfterRel5", NULL, &AccessCapAdditionsAfterRel5_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const TTCN_RAWdescriptor_t AccessCapAdditionsRel7_dTMHandoverCapability_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel7_dTMHandoverCapability_xer_ = { {"dTMHandoverCapability>\n", "dTMHandoverCapability>\n"}, {23, 23}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel7_dTMHandoverCapability_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel7_dTMHandoverCapability_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel7.dTMHandoverCapability", &BITSTRING_ber_, &AccessCapAdditionsRel7_dTMHandoverCapability_raw_, NULL, &AccessCapAdditionsRel7_dTMHandoverCapability_xer_, &BITSTRING_json_, &AccessCapAdditionsRel7_dTMHandoverCapability_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel7_dTMHandoverCapability_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel7_presenceBitDownlinkDualCarrier_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel7_presenceBitDownlinkDualCarrier_xer_ = { {"presenceBitDownlinkDualCarrier>\n", "presenceBitDownlinkDualCarrier>\n"}, {32, 32}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel7_presenceBitDownlinkDualCarrier_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel7_presenceBitDownlinkDualCarrier_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel7.presenceBitDownlinkDualCarrier", &BITSTRING_ber_, &AccessCapAdditionsRel7_presenceBitDownlinkDualCarrier_raw_, NULL, &AccessCapAdditionsRel7_presenceBitDownlinkDualCarrier_xer_, &BITSTRING_json_, &AccessCapAdditionsRel7_presenceBitDownlinkDualCarrier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel7_presenceBitDownlinkDualCarrier_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel7_flexibleTimeslotAssignment_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel7_flexibleTimeslotAssignment_xer_ = { {"flexibleTimeslotAssignment>\n", "flexibleTimeslotAssignment>\n"}, {28, 28}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel7_flexibleTimeslotAssignment_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel7_flexibleTimeslotAssignment_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel7.flexibleTimeslotAssignment", &BITSTRING_ber_, &AccessCapAdditionsRel7_flexibleTimeslotAssignment_raw_, NULL, &AccessCapAdditionsRel7_flexibleTimeslotAssignment_xer_, &BITSTRING_json_, &AccessCapAdditionsRel7_flexibleTimeslotAssignment_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel7_flexibleTimeslotAssignment_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel7_gANPSHandoverCapability_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel7_gANPSHandoverCapability_xer_ = { {"gANPSHandoverCapability>\n", "gANPSHandoverCapability>\n"}, {25, 25}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel7_gANPSHandoverCapability_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel7_gANPSHandoverCapability_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel7.gANPSHandoverCapability", &BITSTRING_ber_, &AccessCapAdditionsRel7_gANPSHandoverCapability_raw_, NULL, &AccessCapAdditionsRel7_gANPSHandoverCapability_xer_, &BITSTRING_json_, &AccessCapAdditionsRel7_gANPSHandoverCapability_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel7_gANPSHandoverCapability_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel7_rLCNonPersistentMode_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel7_rLCNonPersistentMode_xer_ = { {"rLCNonPersistentMode>\n", "rLCNonPersistentMode>\n"}, {22, 22}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel7_rLCNonPersistentMode_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel7_rLCNonPersistentMode_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel7.rLCNonPersistentMode", &BITSTRING_ber_, &AccessCapAdditionsRel7_rLCNonPersistentMode_raw_, NULL, &AccessCapAdditionsRel7_rLCNonPersistentMode_xer_, &BITSTRING_json_, &AccessCapAdditionsRel7_rLCNonPersistentMode_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel7_rLCNonPersistentMode_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel7_reducedLatencyCapability_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel7_reducedLatencyCapability_xer_ = { {"reducedLatencyCapability>\n", "reducedLatencyCapability>\n"}, {26, 26}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel7_reducedLatencyCapability_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel7_reducedLatencyCapability_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel7.reducedLatencyCapability", &BITSTRING_ber_, &AccessCapAdditionsRel7_reducedLatencyCapability_raw_, NULL, &AccessCapAdditionsRel7_reducedLatencyCapability_xer_, &BITSTRING_json_, &AccessCapAdditionsRel7_reducedLatencyCapability_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel7_reducedLatencyCapability_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel7_uplinkEGPRS2_raw_ = {2,SG_NO,ORDER_MSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,2,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel7_uplinkEGPRS2_xer_ = { {"uplinkEGPRS2>\n", "uplinkEGPRS2>\n"}, {14, 14}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel7_uplinkEGPRS2_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel7_uplinkEGPRS2_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel7.uplinkEGPRS2", &BITSTRING_ber_, &AccessCapAdditionsRel7_uplinkEGPRS2_raw_, NULL, &AccessCapAdditionsRel7_uplinkEGPRS2_xer_, &BITSTRING_json_, &AccessCapAdditionsRel7_uplinkEGPRS2_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel7_uplinkEGPRS2_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel7_downlinkEGPRS2_raw_ = {2,SG_NO,ORDER_MSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,2,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel7_downlinkEGPRS2_xer_ = { {"downlinkEGPRS2>\n", "downlinkEGPRS2>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel7_downlinkEGPRS2_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel7_downlinkEGPRS2_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel7.downlinkEGPRS2", &BITSTRING_ber_, &AccessCapAdditionsRel7_downlinkEGPRS2_raw_, NULL, &AccessCapAdditionsRel7_downlinkEGPRS2_xer_, &BITSTRING_json_, &AccessCapAdditionsRel7_downlinkEGPRS2_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel7_downlinkEGPRS2_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel7_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsRel7
const TTCN_Typedescriptor_t AccessCapAdditionsRel7_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel7", NULL, &AccessCapAdditionsRel7_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const TTCN_RAWdescriptor_t DownlinkDualCarrier_multislotCapReductionforDownLinkDualCarrier_raw_ = {3,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,3,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       DownlinkDualCarrier_multislotCapReductionforDownLinkDualCarrier_xer_ = { {"multislotCapReductionforDownLinkDualCarrier>\n", "multislotCapReductionforDownLinkDualCarrier>\n"}, {45, 45}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t DownlinkDualCarrier_multislotCapReductionforDownLinkDualCarrier_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t DownlinkDualCarrier_multislotCapReductionforDownLinkDualCarrier_descr_ = { "@MobileL3_GMM_SM_Types.DownlinkDualCarrier.multislotCapReductionforDownLinkDualCarrier", &BITSTRING_ber_, &DownlinkDualCarrier_multislotCapReductionforDownLinkDualCarrier_raw_, NULL, &DownlinkDualCarrier_multislotCapReductionforDownLinkDualCarrier_xer_, &BITSTRING_json_, &DownlinkDualCarrier_multislotCapReductionforDownLinkDualCarrier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DownlinkDualCarrier_multislotCapReductionforDownLinkDualCarrier_default_coding("RAW");
const TTCN_RAWdescriptor_t DownlinkDualCarrier_downlinkDualCarrierforDTMCapability_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       DownlinkDualCarrier_downlinkDualCarrierforDTMCapability_xer_ = { {"downlinkDualCarrierforDTMCapability>\n", "downlinkDualCarrierforDTMCapability>\n"}, {37, 37}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t DownlinkDualCarrier_downlinkDualCarrierforDTMCapability_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t DownlinkDualCarrier_downlinkDualCarrierforDTMCapability_descr_ = { "@MobileL3_GMM_SM_Types.DownlinkDualCarrier.downlinkDualCarrierforDTMCapability", &BITSTRING_ber_, &DownlinkDualCarrier_downlinkDualCarrierforDTMCapability_raw_, NULL, &DownlinkDualCarrier_downlinkDualCarrierforDTMCapability_xer_, &BITSTRING_json_, &DownlinkDualCarrier_downlinkDualCarrierforDTMCapability_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DownlinkDualCarrier_downlinkDualCarrierforDTMCapability_default_coding("RAW");
const TTCN_RAWdescriptor_t DownlinkDualCarrier_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for DownlinkDualCarrier
const TTCN_Typedescriptor_t DownlinkDualCarrier_descr_ = { "@MobileL3_GMM_SM_Types.DownlinkDualCarrier", NULL, &DownlinkDualCarrier_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DownlinkDualCarrier_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel7_downlinkDualCarrier_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsRel7_downlinkDualCarrier
const TTCN_Typedescriptor_t AccessCapAdditionsRel7_downlinkDualCarrier_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel7.downlinkDualCarrier", NULL, &AccessCapAdditionsRel7_downlinkDualCarrier_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel7_downlinkDualCarrier_default_coding("RAW");
UNIVERSAL_CHARSTRING AccessCapAdditionsRel7_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsAfterRel6_accessCapAdditionsRel7_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsAfterRel6_accessCapAdditionsRel7
const TTCN_Typedescriptor_t AccessCapAdditionsAfterRel6_accessCapAdditionsRel7_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsAfterRel6.accessCapAdditionsRel7", NULL, &AccessCapAdditionsAfterRel6_accessCapAdditionsRel7_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsAfterRel6_accessCapAdditionsRel7_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsAfterRel6_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsAfterRel6
const TTCN_Typedescriptor_t AccessCapAdditionsAfterRel6_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsAfterRel6", NULL, &AccessCapAdditionsAfterRel6_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const TTCN_RAWdescriptor_t AccessCapAdditionsRel8_eUTRAFDDsupport_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel8_eUTRAFDDsupport_xer_ = { {"eUTRAFDDsupport>\n", "eUTRAFDDsupport>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel8_eUTRAFDDsupport_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel8_eUTRAFDDsupport_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel8.eUTRAFDDsupport", &BITSTRING_ber_, &AccessCapAdditionsRel8_eUTRAFDDsupport_raw_, NULL, &AccessCapAdditionsRel8_eUTRAFDDsupport_xer_, &BITSTRING_json_, &AccessCapAdditionsRel8_eUTRAFDDsupport_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel8_eUTRAFDDsupport_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel8_eUTRATDDsupport_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel8_eUTRATDDsupport_xer_ = { {"eUTRATDDsupport>\n", "eUTRATDDsupport>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel8_eUTRATDDsupport_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel8_eUTRATDDsupport_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel8.eUTRATDDsupport", &BITSTRING_ber_, &AccessCapAdditionsRel8_eUTRATDDsupport_raw_, NULL, &AccessCapAdditionsRel8_eUTRATDDsupport_xer_, &BITSTRING_json_, &AccessCapAdditionsRel8_eUTRATDDsupport_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel8_eUTRATDDsupport_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel8_gERANToEUTRASupportInGERANPacketTransferMode_raw_ = {2,SG_NO,ORDER_MSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,2,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel8_gERANToEUTRASupportInGERANPacketTransferMode_xer_ = { {"gERANToEUTRASupportInGERANPacketTransferMode>\n", "gERANToEUTRASupportInGERANPacketTransferMode>\n"}, {46, 46}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel8_gERANToEUTRASupportInGERANPacketTransferMode_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel8_gERANToEUTRASupportInGERANPacketTransferMode_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel8.gERANToEUTRASupportInGERANPacketTransferMode", &BITSTRING_ber_, &AccessCapAdditionsRel8_gERANToEUTRASupportInGERANPacketTransferMode_raw_, NULL, &AccessCapAdditionsRel8_gERANToEUTRASupportInGERANPacketTransferMode_xer_, &BITSTRING_json_, &AccessCapAdditionsRel8_gERANToEUTRASupportInGERANPacketTransferMode_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel8_gERANToEUTRASupportInGERANPacketTransferMode_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel8_priorityBasedReselectionSupport_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel8_priorityBasedReselectionSupport_xer_ = { {"priorityBasedReselectionSupport>\n", "priorityBasedReselectionSupport>\n"}, {33, 33}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel8_priorityBasedReselectionSupport_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel8_priorityBasedReselectionSupport_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel8.priorityBasedReselectionSupport", &BITSTRING_ber_, &AccessCapAdditionsRel8_priorityBasedReselectionSupport_raw_, NULL, &AccessCapAdditionsRel8_priorityBasedReselectionSupport_xer_, &BITSTRING_json_, &AccessCapAdditionsRel8_priorityBasedReselectionSupport_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel8_priorityBasedReselectionSupport_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel8_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsRel8
const TTCN_Typedescriptor_t AccessCapAdditionsRel8_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel8", NULL, &AccessCapAdditionsRel8_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel8_default_coding("RAW");
UNIVERSAL_CHARSTRING AccessCapAdditionsAfterRel7_accessCapAdditionsRel8_default_coding("RAW");
const TTCN_RAWdescriptor_t EnhancedFlexTimeslotAssignment_presenceBitalternativeEFTAMultislotClass_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       EnhancedFlexTimeslotAssignment_presenceBitalternativeEFTAMultislotClass_xer_ = { {"presenceBitalternativeEFTAMultislotClass>\n", "presenceBitalternativeEFTAMultislotClass>\n"}, {42, 42}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t EnhancedFlexTimeslotAssignment_presenceBitalternativeEFTAMultislotClass_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t EnhancedFlexTimeslotAssignment_presenceBitalternativeEFTAMultislotClass_descr_ = { "@MobileL3_GMM_SM_Types.EnhancedFlexTimeslotAssignment.presenceBitalternativeEFTAMultislotClass", &BITSTRING_ber_, &EnhancedFlexTimeslotAssignment_presenceBitalternativeEFTAMultislotClass_raw_, NULL, &EnhancedFlexTimeslotAssignment_presenceBitalternativeEFTAMultislotClass_xer_, &BITSTRING_json_, &EnhancedFlexTimeslotAssignment_presenceBitalternativeEFTAMultislotClass_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING EnhancedFlexTimeslotAssignment_presenceBitalternativeEFTAMultislotClass_default_coding("RAW");
const TTCN_RAWdescriptor_t EnhancedFlexTimeslotAssignment_alternativeEFTAMultislotClass_raw_ = {4,SG_NO,ORDER_MSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,4,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       EnhancedFlexTimeslotAssignment_alternativeEFTAMultislotClass_xer_ = { {"alternativeEFTAMultislotClass>\n", "alternativeEFTAMultislotClass>\n"}, {31, 31}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t EnhancedFlexTimeslotAssignment_alternativeEFTAMultislotClass_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t EnhancedFlexTimeslotAssignment_alternativeEFTAMultislotClass_descr_ = { "@MobileL3_GMM_SM_Types.EnhancedFlexTimeslotAssignment.alternativeEFTAMultislotClass", &BITSTRING_ber_, &EnhancedFlexTimeslotAssignment_alternativeEFTAMultislotClass_raw_, NULL, &EnhancedFlexTimeslotAssignment_alternativeEFTAMultislotClass_xer_, &BITSTRING_json_, &EnhancedFlexTimeslotAssignment_alternativeEFTAMultislotClass_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING EnhancedFlexTimeslotAssignment_alternativeEFTAMultislotClass_default_coding("RAW");
const TTCN_RAWdescriptor_t EnhancedFlexTimeslotAssignment_eFTAMultislotCapabilityReductionforDownlinkDualCarrier_raw_ = {3,SG_NO,ORDER_MSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,3,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       EnhancedFlexTimeslotAssignment_eFTAMultislotCapabilityReductionforDownlinkDualCarrier_xer_ = { {"eFTAMultislotCapabilityReductionforDownlinkDualCarrier>\n", "eFTAMultislotCapabilityReductionforDownlinkDualCarrier>\n"}, {56, 56}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t EnhancedFlexTimeslotAssignment_eFTAMultislotCapabilityReductionforDownlinkDualCarrier_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t EnhancedFlexTimeslotAssignment_eFTAMultislotCapabilityReductionforDownlinkDualCarrier_descr_ = { "@MobileL3_GMM_SM_Types.EnhancedFlexTimeslotAssignment.eFTAMultislotCapabilityReductionforDownlinkDualCarrier", &BITSTRING_ber_, &EnhancedFlexTimeslotAssignment_eFTAMultislotCapabilityReductionforDownlinkDualCarrier_raw_, NULL, &EnhancedFlexTimeslotAssignment_eFTAMultislotCapabilityReductionforDownlinkDualCarrier_xer_, &BITSTRING_json_, &EnhancedFlexTimeslotAssignment_eFTAMultislotCapabilityReductionforDownlinkDualCarrier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING EnhancedFlexTimeslotAssignment_eFTAMultislotCapabilityReductionforDownlinkDualCarrier_default_coding("RAW");
const TTCN_RAWdescriptor_t EnhancedFlexTimeslotAssignment_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for EnhancedFlexTimeslotAssignment
const TTCN_Typedescriptor_t EnhancedFlexTimeslotAssignment_descr_ = { "@MobileL3_GMM_SM_Types.EnhancedFlexTimeslotAssignment", NULL, &EnhancedFlexTimeslotAssignment_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING EnhancedFlexTimeslotAssignment_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel9_enhancedFlexTimeslotAssignment_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsRel9_enhancedFlexTimeslotAssignment
const TTCN_Typedescriptor_t AccessCapAdditionsRel9_enhancedFlexTimeslotAssignment_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel9.enhancedFlexTimeslotAssignment", NULL, &AccessCapAdditionsRel9_enhancedFlexTimeslotAssignment_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel9_enhancedFlexTimeslotAssignment_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel9_indicationofUpperLayerPDUStartCapabilityforRLCUM_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel9_indicationofUpperLayerPDUStartCapabilityforRLCUM_xer_ = { {"indicationofUpperLayerPDUStartCapabilityforRLCUM>\n", "indicationofUpperLayerPDUStartCapabilityforRLCUM>\n"}, {50, 50}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel9_indicationofUpperLayerPDUStartCapabilityforRLCUM_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel9_indicationofUpperLayerPDUStartCapabilityforRLCUM_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel9.indicationofUpperLayerPDUStartCapabilityforRLCUM", &BITSTRING_ber_, &AccessCapAdditionsRel9_indicationofUpperLayerPDUStartCapabilityforRLCUM_raw_, NULL, &AccessCapAdditionsRel9_indicationofUpperLayerPDUStartCapabilityforRLCUM_xer_, &BITSTRING_json_, &AccessCapAdditionsRel9_indicationofUpperLayerPDUStartCapabilityforRLCUM_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel9_indicationofUpperLayerPDUStartCapabilityforRLCUM_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel9_eMSTCapability_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel9_eMSTCapability_xer_ = { {"eMSTCapability>\n", "eMSTCapability>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel9_eMSTCapability_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel9_eMSTCapability_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel9.eMSTCapability", &BITSTRING_ber_, &AccessCapAdditionsRel9_eMSTCapability_raw_, NULL, &AccessCapAdditionsRel9_eMSTCapability_xer_, &BITSTRING_json_, &AccessCapAdditionsRel9_eMSTCapability_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel9_eMSTCapability_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel9_mTTICapability_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel9_mTTICapability_xer_ = { {"mTTICapability>\n", "mTTICapability>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel9_mTTICapability_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel9_mTTICapability_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel9.mTTICapability", &BITSTRING_ber_, &AccessCapAdditionsRel9_mTTICapability_raw_, NULL, &AccessCapAdditionsRel9_mTTICapability_xer_, &BITSTRING_json_, &AccessCapAdditionsRel9_mTTICapability_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel9_mTTICapability_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel9_uTRACSGCellsReporting_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel9_uTRACSGCellsReporting_xer_ = { {"uTRACSGCellsReporting>\n", "uTRACSGCellsReporting>\n"}, {23, 23}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel9_uTRACSGCellsReporting_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel9_uTRACSGCellsReporting_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel9.uTRACSGCellsReporting", &BITSTRING_ber_, &AccessCapAdditionsRel9_uTRACSGCellsReporting_raw_, NULL, &AccessCapAdditionsRel9_uTRACSGCellsReporting_xer_, &BITSTRING_json_, &AccessCapAdditionsRel9_uTRACSGCellsReporting_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel9_uTRACSGCellsReporting_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel9_eUTRACSGCellsReporting_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel9_eUTRACSGCellsReporting_xer_ = { {"eUTRACSGCellsReporting>\n", "eUTRACSGCellsReporting>\n"}, {24, 24}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel9_eUTRACSGCellsReporting_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel9_eUTRACSGCellsReporting_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel9.eUTRACSGCellsReporting", &BITSTRING_ber_, &AccessCapAdditionsRel9_eUTRACSGCellsReporting_raw_, NULL, &AccessCapAdditionsRel9_eUTRACSGCellsReporting_xer_, &BITSTRING_json_, &AccessCapAdditionsRel9_eUTRACSGCellsReporting_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel9_eUTRACSGCellsReporting_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel9_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsRel9
const TTCN_Typedescriptor_t AccessCapAdditionsRel9_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel9", NULL, &AccessCapAdditionsRel9_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel9_default_coding("RAW");
UNIVERSAL_CHARSTRING AccessCapAdditionsAfterRel8_accessCapAdditionsRel9_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel10_dTRCapability_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel10_dTRCapability_xer_ = { {"dTRCapability>\n", "dTRCapability>\n"}, {15, 15}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel10_dTRCapability_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel10_dTRCapability_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel10.dTRCapability", &BITSTRING_ber_, &AccessCapAdditionsRel10_dTRCapability_raw_, NULL, &AccessCapAdditionsRel10_dTRCapability_xer_, &BITSTRING_json_, &AccessCapAdditionsRel10_dTRCapability_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel10_dTRCapability_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel10_eMSRCapability_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel10_eMSRCapability_xer_ = { {"eMSRCapability>\n", "eMSRCapability>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel10_eMSRCapability_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel10_eMSRCapability_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel10.eMSRCapability", &BITSTRING_ber_, &AccessCapAdditionsRel10_eMSRCapability_raw_, NULL, &AccessCapAdditionsRel10_eMSRCapability_xer_, &BITSTRING_json_, &AccessCapAdditionsRel10_eMSRCapability_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel10_eMSRCapability_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel10_fastDownlinkFrequencySwitchingCapability_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel10_fastDownlinkFrequencySwitchingCapability_xer_ = { {"fastDownlinkFrequencySwitchingCapability>\n", "fastDownlinkFrequencySwitchingCapability>\n"}, {42, 42}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel10_fastDownlinkFrequencySwitchingCapability_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel10_fastDownlinkFrequencySwitchingCapability_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel10.fastDownlinkFrequencySwitchingCapability", &BITSTRING_ber_, &AccessCapAdditionsRel10_fastDownlinkFrequencySwitchingCapability_raw_, NULL, &AccessCapAdditionsRel10_fastDownlinkFrequencySwitchingCapability_xer_, &BITSTRING_json_, &AccessCapAdditionsRel10_fastDownlinkFrequencySwitchingCapability_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel10_fastDownlinkFrequencySwitchingCapability_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel10_tIGHTER__Capability_raw_ = {2,SG_NO,ORDER_MSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,2,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel10_tIGHTER__Capability_xer_ = { {"tIGHTER_Capability>\n", "tIGHTER_Capability>\n"}, {20, 20}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel10_tIGHTER__Capability_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel10_tIGHTER__Capability_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel10.tIGHTER_Capability", &BITSTRING_ber_, &AccessCapAdditionsRel10_tIGHTER__Capability_raw_, NULL, &AccessCapAdditionsRel10_tIGHTER__Capability_xer_, &BITSTRING_json_, &AccessCapAdditionsRel10_tIGHTER__Capability_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel10_tIGHTER__Capability_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel10_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsRel10
const TTCN_Typedescriptor_t AccessCapAdditionsRel10_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel10", NULL, &AccessCapAdditionsRel10_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel10_default_coding("RAW");
UNIVERSAL_CHARSTRING AccessCapAdditionsAfterRel9_accessCapAdditionsRel10_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel11_fANRCapability_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel11_fANRCapability_xer_ = { {"fANRCapability>\n", "fANRCapability>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel11_fANRCapability_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel11_fANRCapability_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel11.fANRCapability", &BITSTRING_ber_, &AccessCapAdditionsRel11_fANRCapability_raw_, NULL, &AccessCapAdditionsRel11_fANRCapability_xer_, &BITSTRING_json_, &AccessCapAdditionsRel11_fANRCapability_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel11_fANRCapability_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel11_iPACapability_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel11_iPACapability_xer_ = { {"iPACapability>\n", "iPACapability>\n"}, {15, 15}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel11_iPACapability_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel11_iPACapability_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel11.iPACapability", &BITSTRING_ber_, &AccessCapAdditionsRel11_iPACapability_raw_, NULL, &AccessCapAdditionsRel11_iPACapability_xer_, &BITSTRING_json_, &AccessCapAdditionsRel11_iPACapability_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel11_iPACapability_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel11_gERANNetworkSharingSupport_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel11_gERANNetworkSharingSupport_xer_ = { {"gERANNetworkSharingSupport>\n", "gERANNetworkSharingSupport>\n"}, {28, 28}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel11_gERANNetworkSharingSupport_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel11_gERANNetworkSharingSupport_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel11.gERANNetworkSharingSupport", &BITSTRING_ber_, &AccessCapAdditionsRel11_gERANNetworkSharingSupport_raw_, NULL, &AccessCapAdditionsRel11_gERANNetworkSharingSupport_xer_, &BITSTRING_json_, &AccessCapAdditionsRel11_gERANNetworkSharingSupport_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel11_gERANNetworkSharingSupport_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel11_eUTRAWidebandRSRQMeasurementsSupport_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel11_eUTRAWidebandRSRQMeasurementsSupport_xer_ = { {"eUTRAWidebandRSRQMeasurementsSupport>\n", "eUTRAWidebandRSRQMeasurementsSupport>\n"}, {38, 38}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel11_eUTRAWidebandRSRQMeasurementsSupport_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel11_eUTRAWidebandRSRQMeasurementsSupport_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel11.eUTRAWidebandRSRQMeasurementsSupport", &BITSTRING_ber_, &AccessCapAdditionsRel11_eUTRAWidebandRSRQMeasurementsSupport_raw_, NULL, &AccessCapAdditionsRel11_eUTRAWidebandRSRQMeasurementsSupport_xer_, &BITSTRING_json_, &AccessCapAdditionsRel11_eUTRAWidebandRSRQMeasurementsSupport_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel11_eUTRAWidebandRSRQMeasurementsSupport_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel11_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsRel11
const TTCN_Typedescriptor_t AccessCapAdditionsRel11_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel11", NULL, &AccessCapAdditionsRel11_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel11_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsAfterRel10_accessCapAdditionsRel11_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsAfterRel10_accessCapAdditionsRel11
const TTCN_Typedescriptor_t AccessCapAdditionsAfterRel10_accessCapAdditionsRel11_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsAfterRel10.accessCapAdditionsRel11", NULL, &AccessCapAdditionsAfterRel10_accessCapAdditionsRel11_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsAfterRel10_accessCapAdditionsRel11_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel12_uTRAMultipleFrequencyBandIndicatorsSupport_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel12_uTRAMultipleFrequencyBandIndicatorsSupport_xer_ = { {"uTRAMultipleFrequencyBandIndicatorsSupport>\n", "uTRAMultipleFrequencyBandIndicatorsSupport>\n"}, {44, 44}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel12_uTRAMultipleFrequencyBandIndicatorsSupport_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel12_uTRAMultipleFrequencyBandIndicatorsSupport_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel12.uTRAMultipleFrequencyBandIndicatorsSupport", &BITSTRING_ber_, &AccessCapAdditionsRel12_uTRAMultipleFrequencyBandIndicatorsSupport_raw_, NULL, &AccessCapAdditionsRel12_uTRAMultipleFrequencyBandIndicatorsSupport_xer_, &BITSTRING_json_, &AccessCapAdditionsRel12_uTRAMultipleFrequencyBandIndicatorsSupport_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel12_uTRAMultipleFrequencyBandIndicatorsSupport_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel12_eUTRAMultipleFrequencyBandIndicatorsSupport_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel12_eUTRAMultipleFrequencyBandIndicatorsSupport_xer_ = { {"eUTRAMultipleFrequencyBandIndicatorsSupport>\n", "eUTRAMultipleFrequencyBandIndicatorsSupport>\n"}, {45, 45}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel12_eUTRAMultipleFrequencyBandIndicatorsSupport_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel12_eUTRAMultipleFrequencyBandIndicatorsSupport_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel12.eUTRAMultipleFrequencyBandIndicatorsSupport", &BITSTRING_ber_, &AccessCapAdditionsRel12_eUTRAMultipleFrequencyBandIndicatorsSupport_raw_, NULL, &AccessCapAdditionsRel12_eUTRAMultipleFrequencyBandIndicatorsSupport_xer_, &BITSTRING_json_, &AccessCapAdditionsRel12_eUTRAMultipleFrequencyBandIndicatorsSupport_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel12_eUTRAMultipleFrequencyBandIndicatorsSupport_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel12_presenceBitDLMCCapability_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel12_presenceBitDLMCCapability_xer_ = { {"presenceBitDLMCCapability>\n", "presenceBitDLMCCapability>\n"}, {27, 27}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel12_presenceBitDLMCCapability_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel12_presenceBitDLMCCapability_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel12.presenceBitDLMCCapability", &BITSTRING_ber_, &AccessCapAdditionsRel12_presenceBitDLMCCapability_raw_, NULL, &AccessCapAdditionsRel12_presenceBitDLMCCapability_xer_, &BITSTRING_json_, &AccessCapAdditionsRel12_presenceBitDLMCCapability_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel12_presenceBitDLMCCapability_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel12_extendedTSCSetCapabilitySupport_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsRel12_extendedTSCSetCapabilitySupport_xer_ = { {"extendedTSCSetCapabilitySupport>\n", "extendedTSCSetCapabilitySupport>\n"}, {33, 33}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapAdditionsRel12_extendedTSCSetCapabilitySupport_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapAdditionsRel12_extendedTSCSetCapabilitySupport_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel12.extendedTSCSetCapabilitySupport", &BITSTRING_ber_, &AccessCapAdditionsRel12_extendedTSCSetCapabilitySupport_raw_, NULL, &AccessCapAdditionsRel12_extendedTSCSetCapabilitySupport_xer_, &BITSTRING_json_, &AccessCapAdditionsRel12_extendedTSCSetCapabilitySupport_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel12_extendedTSCSetCapabilitySupport_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel12_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsRel12
const TTCN_Typedescriptor_t AccessCapAdditionsRel12_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel12", NULL, &AccessCapAdditionsRel12_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const TTCN_RAWdescriptor_t DLMCCapability_presenceDLMC_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       DLMCCapability_presenceDLMC_xer_ = { {"presenceDLMC>\n", "presenceDLMC>\n"}, {14, 14}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t DLMCCapability_presenceDLMC_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t DLMCCapability_presenceDLMC_descr_ = { "@MobileL3_GMM_SM_Types.DLMCCapability.presenceDLMC", &BITSTRING_ber_, &DLMCCapability_presenceDLMC_raw_, NULL, &DLMCCapability_presenceDLMC_xer_, &BITSTRING_json_, &DLMCCapability_presenceDLMC_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DLMCCapability_presenceDLMC_default_coding("RAW");
const TTCN_RAWdescriptor_t DLMCCapability_dLMCMaxBandwidth_raw_ = {2,SG_NO,ORDER_MSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,2,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       DLMCCapability_dLMCMaxBandwidth_xer_ = { {"dLMCMaxBandwidth>\n", "dLMCMaxBandwidth>\n"}, {18, 18}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t DLMCCapability_dLMCMaxBandwidth_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t DLMCCapability_dLMCMaxBandwidth_descr_ = { "@MobileL3_GMM_SM_Types.DLMCCapability.dLMCMaxBandwidth", &BITSTRING_ber_, &DLMCCapability_dLMCMaxBandwidth_raw_, NULL, &DLMCCapability_dLMCMaxBandwidth_xer_, &BITSTRING_json_, &DLMCCapability_dLMCMaxBandwidth_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DLMCCapability_dLMCMaxBandwidth_default_coding("RAW");
const TTCN_RAWdescriptor_t DLMCCapability_dLMCMaxNumOfDownlinkTimeslots_raw_ = {6,SG_NO,ORDER_MSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,6,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       DLMCCapability_dLMCMaxNumOfDownlinkTimeslots_xer_ = { {"dLMCMaxNumOfDownlinkTimeslots>\n", "dLMCMaxNumOfDownlinkTimeslots>\n"}, {31, 31}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t DLMCCapability_dLMCMaxNumOfDownlinkTimeslots_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t DLMCCapability_dLMCMaxNumOfDownlinkTimeslots_descr_ = { "@MobileL3_GMM_SM_Types.DLMCCapability.dLMCMaxNumOfDownlinkTimeslots", &BITSTRING_ber_, &DLMCCapability_dLMCMaxNumOfDownlinkTimeslots_raw_, NULL, &DLMCCapability_dLMCMaxNumOfDownlinkTimeslots_xer_, &BITSTRING_json_, &DLMCCapability_dLMCMaxNumOfDownlinkTimeslots_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DLMCCapability_dLMCMaxNumOfDownlinkTimeslots_default_coding("RAW");
const TTCN_RAWdescriptor_t DLMCCapability_dLMCMaxNumOfDownlinkCarriers_raw_ = {3,SG_NO,ORDER_MSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,3,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       DLMCCapability_dLMCMaxNumOfDownlinkCarriers_xer_ = { {"dLMCMaxNumOfDownlinkCarriers>\n", "dLMCMaxNumOfDownlinkCarriers>\n"}, {30, 30}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t DLMCCapability_dLMCMaxNumOfDownlinkCarriers_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t DLMCCapability_dLMCMaxNumOfDownlinkCarriers_descr_ = { "@MobileL3_GMM_SM_Types.DLMCCapability.dLMCMaxNumOfDownlinkCarriers", &BITSTRING_ber_, &DLMCCapability_dLMCMaxNumOfDownlinkCarriers_raw_, NULL, &DLMCCapability_dLMCMaxNumOfDownlinkCarriers_xer_, &BITSTRING_json_, &DLMCCapability_dLMCMaxNumOfDownlinkCarriers_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DLMCCapability_dLMCMaxNumOfDownlinkCarriers_default_coding("RAW");
const TTCN_RAWdescriptor_t DLMCCapability_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for DLMCCapability
const TTCN_Typedescriptor_t DLMCCapability_descr_ = { "@MobileL3_GMM_SM_Types.DLMCCapability", NULL, &DLMCCapability_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const TTCN_RAWdescriptor_t DLMCBandReception_dLMCNonContiguousIntraBandReception_raw_ = {2,SG_NO,ORDER_MSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,2,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       DLMCBandReception_dLMCNonContiguousIntraBandReception_xer_ = { {"dLMCNonContiguousIntraBandReception>\n", "dLMCNonContiguousIntraBandReception>\n"}, {37, 37}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t DLMCBandReception_dLMCNonContiguousIntraBandReception_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t DLMCBandReception_dLMCNonContiguousIntraBandReception_descr_ = { "@MobileL3_GMM_SM_Types.DLMCBandReception.dLMCNonContiguousIntraBandReception", &BITSTRING_ber_, &DLMCBandReception_dLMCNonContiguousIntraBandReception_raw_, NULL, &DLMCBandReception_dLMCNonContiguousIntraBandReception_xer_, &BITSTRING_json_, &DLMCBandReception_dLMCNonContiguousIntraBandReception_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DLMCBandReception_dLMCNonContiguousIntraBandReception_default_coding("RAW");
const TTCN_RAWdescriptor_t DLMCBandReception_dLMCInterBandReception_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       DLMCBandReception_dLMCInterBandReception_xer_ = { {"dLMCInterBandReception>\n", "dLMCInterBandReception>\n"}, {24, 24}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t DLMCBandReception_dLMCInterBandReception_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t DLMCBandReception_dLMCInterBandReception_descr_ = { "@MobileL3_GMM_SM_Types.DLMCBandReception.dLMCInterBandReception", &BITSTRING_ber_, &DLMCBandReception_dLMCInterBandReception_raw_, NULL, &DLMCBandReception_dLMCInterBandReception_xer_, &BITSTRING_json_, &DLMCBandReception_dLMCInterBandReception_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DLMCBandReception_dLMCInterBandReception_default_coding("RAW");
const TTCN_RAWdescriptor_t DLMCBandReception_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for DLMCBandReception
const TTCN_Typedescriptor_t DLMCBandReception_descr_ = { "@MobileL3_GMM_SM_Types.DLMCBandReception", NULL, &DLMCBandReception_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DLMCBandReception_default_coding("RAW");
const TTCN_RAWdescriptor_t DLMCCapability_dLMCBandReception_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for DLMCCapability_dLMCBandReception
const TTCN_Typedescriptor_t DLMCCapability_dLMCBandReception_descr_ = { "@MobileL3_GMM_SM_Types.DLMCCapability.dLMCBandReception", NULL, &DLMCCapability_dLMCBandReception_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DLMCCapability_dLMCBandReception_default_coding("RAW");
UNIVERSAL_CHARSTRING DLMCCapability_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsRel12_dLMCCapability_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsRel12_dLMCCapability
const TTCN_Typedescriptor_t AccessCapAdditionsRel12_dLMCCapability_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsRel12.dLMCCapability", NULL, &AccessCapAdditionsRel12_dLMCCapability_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsRel12_dLMCCapability_default_coding("RAW");
UNIVERSAL_CHARSTRING AccessCapAdditionsRel12_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsAfterRel11_accessCapAdditionsRel12_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsAfterRel11_accessCapAdditionsRel12
const TTCN_Typedescriptor_t AccessCapAdditionsAfterRel11_accessCapAdditionsRel12_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsAfterRel11.accessCapAdditionsRel12", NULL, &AccessCapAdditionsAfterRel11_accessCapAdditionsRel12_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsAfterRel11_accessCapAdditionsRel12_default_coding("RAW");
const XERdescriptor_t       AccessCapLateAdditionsRel11_extendedEARFCNValueRange_xer_ = { {"extendedEARFCNValueRange>\n", "extendedEARFCNValueRange>\n"}, {26, 26}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessCapLateAdditionsRel11_extendedEARFCNValueRange_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessCapLateAdditionsRel11_extendedEARFCNValueRange_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapLateAdditionsRel11.extendedEARFCNValueRange", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &AccessCapLateAdditionsRel11_extendedEARFCNValueRange_xer_, &BITSTRING_json_, &AccessCapLateAdditionsRel11_extendedEARFCNValueRange_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapLateAdditionsRel11_extendedEARFCNValueRange_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapLateAdditionsRel11_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapLateAdditionsRel11
const TTCN_Typedescriptor_t AccessCapLateAdditionsRel11_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapLateAdditionsRel11", NULL, &AccessCapLateAdditionsRel11_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapLateAdditionsRel11_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsAfterRel12_accessCapLateAdditionsRel11_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsAfterRel12_accessCapLateAdditionsRel11
const TTCN_Typedescriptor_t AccessCapAdditionsAfterRel12_accessCapLateAdditionsRel11_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsAfterRel12.accessCapLateAdditionsRel11", NULL, &AccessCapAdditionsAfterRel12_accessCapLateAdditionsRel11_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsAfterRel12_accessCapLateAdditionsRel11_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsAfterRel12_accessCapLateAdditionsAfterRel11_raw_ = {0,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapAdditionsAfterRel12_accessCapLateAdditionsAfterRel11_xer_ = { {"accessCapLateAdditionsAfterRel11>\n", "accessCapLateAdditionsAfterRel11>\n"}, {34, 34}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int AccessCapAdditionsAfterRel12_accessCapLateAdditionsAfterRel11_oer_ext_arr_[0] = {};
const int AccessCapAdditionsAfterRel12_accessCapLateAdditionsAfterRel11_oer_p_[0] = {};
const TTCN_OERdescriptor_t AccessCapAdditionsAfterRel12_accessCapLateAdditionsAfterRel11_oer_ = { -1, TRUE, -1, FALSE, 0, 0, AccessCapAdditionsAfterRel12_accessCapLateAdditionsAfterRel11_oer_ext_arr_, 0, AccessCapAdditionsAfterRel12_accessCapLateAdditionsAfterRel11_oer_p_};
const TTCN_Typedescriptor_t AccessCapAdditionsAfterRel12_accessCapLateAdditionsAfterRel11_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsAfterRel12.accessCapLateAdditionsAfterRel11", &OCTETSTRING_ber_, &AccessCapAdditionsAfterRel12_accessCapLateAdditionsAfterRel11_raw_, &OCTETSTRING_text_, &AccessCapAdditionsAfterRel12_accessCapLateAdditionsAfterRel11_xer_, &OCTETSTRING_json_, &AccessCapAdditionsAfterRel12_accessCapLateAdditionsAfterRel11_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsAfterRel12_accessCapLateAdditionsAfterRel11_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsAfterRel12_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsAfterRel12
const TTCN_Typedescriptor_t AccessCapAdditionsAfterRel12_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsAfterRel12", NULL, &AccessCapAdditionsAfterRel12_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsAfterRel12_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsAfterRel11_accessCapAdditionsAfterRel12_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsAfterRel11_accessCapAdditionsAfterRel12
const TTCN_Typedescriptor_t AccessCapAdditionsAfterRel11_accessCapAdditionsAfterRel12_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsAfterRel11.accessCapAdditionsAfterRel12", NULL, &AccessCapAdditionsAfterRel11_accessCapAdditionsAfterRel12_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsAfterRel11_accessCapAdditionsAfterRel12_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsAfterRel11_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsAfterRel11
const TTCN_Typedescriptor_t AccessCapAdditionsAfterRel11_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsAfterRel11", NULL, &AccessCapAdditionsAfterRel11_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsAfterRel11_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsAfterRel10_accessCapAdditionsAfterRel11_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsAfterRel10_accessCapAdditionsAfterRel11
const TTCN_Typedescriptor_t AccessCapAdditionsAfterRel10_accessCapAdditionsAfterRel11_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsAfterRel10.accessCapAdditionsAfterRel11", NULL, &AccessCapAdditionsAfterRel10_accessCapAdditionsAfterRel11_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsAfterRel10_accessCapAdditionsAfterRel11_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsAfterRel10_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsAfterRel10
const TTCN_Typedescriptor_t AccessCapAdditionsAfterRel10_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsAfterRel10", NULL, &AccessCapAdditionsAfterRel10_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsAfterRel10_default_coding("RAW");
UNIVERSAL_CHARSTRING AccessCapAdditionsAfterRel9_accessCapAdditionsAfterRel10_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsAfterRel9_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsAfterRel9
const TTCN_Typedescriptor_t AccessCapAdditionsAfterRel9_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsAfterRel9", NULL, &AccessCapAdditionsAfterRel9_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsAfterRel9_default_coding("RAW");
UNIVERSAL_CHARSTRING AccessCapAdditionsAfterRel8_accessCapAdditionsAfterRel9_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsAfterRel8_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsAfterRel8
const TTCN_Typedescriptor_t AccessCapAdditionsAfterRel8_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsAfterRel8", NULL, &AccessCapAdditionsAfterRel8_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsAfterRel8_default_coding("RAW");
UNIVERSAL_CHARSTRING AccessCapAdditionsAfterRel7_accessCapAdditionsAfterRel8_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsAfterRel7_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsAfterRel7
const TTCN_Typedescriptor_t AccessCapAdditionsAfterRel7_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsAfterRel7", NULL, &AccessCapAdditionsAfterRel7_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsAfterRel7_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsAfterRel6_accessCapAdditionsAfterRel7_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsAfterRel6_accessCapAdditionsAfterRel7
const TTCN_Typedescriptor_t AccessCapAdditionsAfterRel6_accessCapAdditionsAfterRel7_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsAfterRel6.accessCapAdditionsAfterRel7", NULL, &AccessCapAdditionsAfterRel6_accessCapAdditionsAfterRel7_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsAfterRel6_accessCapAdditionsAfterRel7_default_coding("RAW");
UNIVERSAL_CHARSTRING AccessCapAdditionsAfterRel6_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsAfterRel5_accessCapAdditionsAfterRel6_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsAfterRel5_accessCapAdditionsAfterRel6
const TTCN_Typedescriptor_t AccessCapAdditionsAfterRel5_accessCapAdditionsAfterRel6_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsAfterRel5.accessCapAdditionsAfterRel6", NULL, &AccessCapAdditionsAfterRel5_accessCapAdditionsAfterRel6_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsAfterRel5_accessCapAdditionsAfterRel6_default_coding("RAW");
UNIVERSAL_CHARSTRING AccessCapAdditionsAfterRel5_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsAfterRel4_accessCapAdditionsAfterRel5_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsAfterRel4_accessCapAdditionsAfterRel5
const TTCN_Typedescriptor_t AccessCapAdditionsAfterRel4_accessCapAdditionsAfterRel5_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsAfterRel4.accessCapAdditionsAfterRel5", NULL, &AccessCapAdditionsAfterRel4_accessCapAdditionsAfterRel5_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsAfterRel4_accessCapAdditionsAfterRel5_default_coding("RAW");
UNIVERSAL_CHARSTRING AccessCapAdditionsAfterRel4_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsAfterRel99_accessCapAdditionsAfterRel4_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsAfterRel99_accessCapAdditionsAfterRel4
const TTCN_Typedescriptor_t AccessCapAdditionsAfterRel99_accessCapAdditionsAfterRel4_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsAfterRel99.accessCapAdditionsAfterRel4", NULL, &AccessCapAdditionsAfterRel99_accessCapAdditionsAfterRel4_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsAfterRel99_accessCapAdditionsAfterRel4_default_coding("RAW");
UNIVERSAL_CHARSTRING AccessCapAdditionsAfterRel99_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapAdditionsAfterRel97_accessCapAdditionsAfterRel99_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapAdditionsAfterRel97_accessCapAdditionsAfterRel99
const TTCN_Typedescriptor_t AccessCapAdditionsAfterRel97_accessCapAdditionsAfterRel99_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapAdditionsAfterRel97.accessCapAdditionsAfterRel99", NULL, &AccessCapAdditionsAfterRel97_accessCapAdditionsAfterRel99_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapAdditionsAfterRel97_accessCapAdditionsAfterRel99_default_coding("RAW");
UNIVERSAL_CHARSTRING AccessCapAdditionsAfterRel97_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapabilities_accessCapAdditionsAfterRel97_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapabilities_accessCapAdditionsAfterRel97
const TTCN_Typedescriptor_t AccessCapabilities_accessCapAdditionsAfterRel97_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapabilities.accessCapAdditionsAfterRel97", NULL, &AccessCapabilities_accessCapAdditionsAfterRel97_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapabilities_accessCapAdditionsAfterRel97_default_coding("RAW");
UNIVERSAL_CHARSTRING AccessCapabilities_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapabilitiesStruct_accessCapabilities_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapabilitiesStruct_accessCapabilities
const TTCN_Typedescriptor_t AccessCapabilitiesStruct_accessCapabilities_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapabilitiesStruct.accessCapabilities", NULL, &AccessCapabilitiesStruct_accessCapabilities_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapabilitiesStruct_accessCapabilities_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessCapabilitiesStruct_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessCapabilitiesStruct
const TTCN_Typedescriptor_t AccessCapabilitiesStruct_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapabilitiesStruct", NULL, &AccessCapabilitiesStruct_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const TTCN_RAWdescriptor_t AccessCapabilitiesStruct_spare__bits_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessCapabilitiesStruct_spare__bits_xer_ = { {"spare_bits>\n", "spare_bits>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_Typedescriptor_t AccessCapabilitiesStruct_spare__bits_descr_ = { "@MobileL3_GMM_SM_Types.AccessCapabilitiesStruct.spare_bits", &BITSTRING_ber_, &AccessCapabilitiesStruct_spare__bits_raw_, NULL, &AccessCapabilitiesStruct_spare__bits_xer_, &BITSTRING_json_, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessCapabilitiesStruct_spare__bits_default_coding("RAW");
UNIVERSAL_CHARSTRING AccessCapabilitiesStruct_default_coding("RAW");
const TTCN_RAWdescriptor_t MSRACapabilityValuesExclude1111_accessCapabilities_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MSRACapabilityValuesExclude1111_accessCapabilities
const TTCN_Typedescriptor_t MSRACapabilityValuesExclude1111_accessCapabilities_descr_ = { "@MobileL3_GMM_SM_Types.MSRACapabilityValuesExclude1111.accessCapabilities", NULL, &MSRACapabilityValuesExclude1111_accessCapabilities_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSRACapabilityValuesExclude1111_accessCapabilities_default_coding("RAW");
const TTCN_RAWdescriptor_t MSRACapabilityValuesExclude1111_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MSRACapabilityValuesExclude1111
const TTCN_Typedescriptor_t MSRACapabilityValuesExclude1111_descr_ = { "@MobileL3_GMM_SM_Types.MSRACapabilityValuesExclude1111", NULL, &MSRACapabilityValuesExclude1111_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSRACapabilityValuesExclude1111_default_coding("RAW");
UNIVERSAL_CHARSTRING MSRACapabilityValues_mSRACapabilityValuesExclude1111_default_coding("RAW");
const TTCN_RAWdescriptor_t MSRACapabilityValues1111_accessTechnType_raw_ = {4,SG_NO,ORDER_MSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,4,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MSRACapabilityValues1111_accessTechnType_xer_ = { {"accessTechnType>\n", "accessTechnType>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MSRACapabilityValues1111_accessTechnType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MSRACapabilityValues1111_accessTechnType_descr_ = { "@MobileL3_GMM_SM_Types.MSRACapabilityValues1111.accessTechnType", &BITSTRING_ber_, &MSRACapabilityValues1111_accessTechnType_raw_, NULL, &MSRACapabilityValues1111_accessTechnType_xer_, &BITSTRING_json_, &MSRACapabilityValues1111_accessTechnType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSRACapabilityValues1111_accessTechnType_default_coding("RAW");
const TTCN_RAWdescriptor_t MSRACapabilityValues1111_lengthIndicator_raw_ = {7,SG_NO,ORDER_MSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,1,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MSRACapabilityValues1111_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_Typedescriptor_t MSRACapabilityValues1111_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.MSRACapabilityValues1111.lengthIndicator", &INTEGER_ber_, &MSRACapabilityValues1111_lengthIndicator_raw_, &INTEGER_text_, &MSRACapabilityValues1111_lengthIndicator_xer_, &INTEGER_json_, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSRACapabilityValues1111_lengthIndicator_default_coding("RAW");
const TTCN_RAWdescriptor_t MSRACapabilityValues1111_presenceIndicator__AdditionalAccessTechnologiesRepetition_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MSRACapabilityValues1111_presenceIndicator__AdditionalAccessTechnologiesRepetition_xer_ = { {"presenceIndicator_AdditionalAccessTechnologiesRepetition>\n", "presenceIndicator_AdditionalAccessTechnologiesRepetition>\n"}, {58, 58}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MSRACapabilityValues1111_presenceIndicator__AdditionalAccessTechnologiesRepetition_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MSRACapabilityValues1111_presenceIndicator__AdditionalAccessTechnologiesRepetition_descr_ = { "@MobileL3_GMM_SM_Types.MSRACapabilityValues1111.presenceIndicator_AdditionalAccessTechnologiesRepetition", &BITSTRING_ber_, &MSRACapabilityValues1111_presenceIndicator__AdditionalAccessTechnologiesRepetition_raw_, NULL, &MSRACapabilityValues1111_presenceIndicator__AdditionalAccessTechnologiesRepetition_xer_, &BITSTRING_json_, &MSRACapabilityValues1111_presenceIndicator__AdditionalAccessTechnologiesRepetition_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSRACapabilityValues1111_presenceIndicator__AdditionalAccessTechnologiesRepetition_default_coding("RAW");
const TTCN_RAWdescriptor_t MSRACapabilityValues1111_spare__bits_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MSRACapabilityValues1111_spare__bits_xer_ = { {"spare_bits>\n", "spare_bits>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_Typedescriptor_t MSRACapabilityValues1111_spare__bits_descr_ = { "@MobileL3_GMM_SM_Types.MSRACapabilityValues1111.spare_bits", &BITSTRING_ber_, &MSRACapabilityValues1111_spare__bits_raw_, NULL, &MSRACapabilityValues1111_spare__bits_xer_, &BITSTRING_json_, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSRACapabilityValues1111_spare__bits_default_coding("RAW");
const TTCN_RAWdescriptor_t MSRACapabilityValues1111_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MSRACapabilityValues1111
const TTCN_Typedescriptor_t MSRACapabilityValues1111_descr_ = { "@MobileL3_GMM_SM_Types.MSRACapabilityValues1111", NULL, &MSRACapabilityValues1111_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const TTCN_RAWdescriptor_t AdditionalAccessTechnologiesRepetition_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_REVERSE,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AdditionalAccessTechnologiesRepetition
const TTCN_Typedescriptor_t AdditionalAccessTechnologiesRepetition_descr_ = { "@MobileL3_GMM_SM_Types.AdditionalAccessTechnologiesRepetition", NULL, &AdditionalAccessTechnologiesRepetition_raw_, NULL, NULL, NULL, NULL, NULL, &AdditionalAccessTechnologiesRecord_descr_, TTCN_Typedescriptor_t::DONTCARE };
const TTCN_RAWdescriptor_t AdditionalAccessTechnologies_accessTechnType_raw_ = {4,SG_NO,ORDER_MSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,4,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AdditionalAccessTechnologies_accessTechnType_xer_ = { {"accessTechnType>\n", "accessTechnType>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AdditionalAccessTechnologies_accessTechnType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AdditionalAccessTechnologies_accessTechnType_descr_ = { "@MobileL3_GMM_SM_Types.AdditionalAccessTechnologies.accessTechnType", &BITSTRING_ber_, &AdditionalAccessTechnologies_accessTechnType_raw_, NULL, &AdditionalAccessTechnologies_accessTechnType_xer_, &BITSTRING_json_, &AdditionalAccessTechnologies_accessTechnType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AdditionalAccessTechnologies_accessTechnType_default_coding("RAW");
const TTCN_RAWdescriptor_t AdditionalAccessTechnologies_gMSKPowerClass_raw_ = {3,SG_NO,ORDER_MSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,3,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AdditionalAccessTechnologies_gMSKPowerClass_xer_ = { {"gMSKPowerClass>\n", "gMSKPowerClass>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AdditionalAccessTechnologies_gMSKPowerClass_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AdditionalAccessTechnologies_gMSKPowerClass_descr_ = { "@MobileL3_GMM_SM_Types.AdditionalAccessTechnologies.gMSKPowerClass", &BITSTRING_ber_, &AdditionalAccessTechnologies_gMSKPowerClass_raw_, NULL, &AdditionalAccessTechnologies_gMSKPowerClass_xer_, &BITSTRING_json_, &AdditionalAccessTechnologies_gMSKPowerClass_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AdditionalAccessTechnologies_gMSKPowerClass_default_coding("RAW");
const TTCN_RAWdescriptor_t AdditionalAccessTechnologies_psk8PowerClass_raw_ = {2,SG_NO,ORDER_MSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,2,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AdditionalAccessTechnologies_psk8PowerClass_xer_ = { {"psk8PowerClass>\n", "psk8PowerClass>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AdditionalAccessTechnologies_psk8PowerClass_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AdditionalAccessTechnologies_psk8PowerClass_descr_ = { "@MobileL3_GMM_SM_Types.AdditionalAccessTechnologies.psk8PowerClass", &BITSTRING_ber_, &AdditionalAccessTechnologies_psk8PowerClass_raw_, NULL, &AdditionalAccessTechnologies_psk8PowerClass_xer_, &BITSTRING_json_, &AdditionalAccessTechnologies_psk8PowerClass_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AdditionalAccessTechnologies_psk8PowerClass_default_coding("RAW");
const TTCN_RAWdescriptor_t AdditionalAccessTechnologies_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AdditionalAccessTechnologies
const TTCN_Typedescriptor_t AdditionalAccessTechnologies_descr_ = { "@MobileL3_GMM_SM_Types.AdditionalAccessTechnologies", NULL, &AdditionalAccessTechnologies_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AdditionalAccessTechnologies_default_coding("RAW");
const TTCN_RAWdescriptor_t AdditionalAccessTechnologiesRecord_additionalAccessTechnologies_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AdditionalAccessTechnologiesRecord_additionalAccessTechnologies
const TTCN_Typedescriptor_t AdditionalAccessTechnologiesRecord_additionalAccessTechnologies_descr_ = { "@MobileL3_GMM_SM_Types.AdditionalAccessTechnologiesRecord.additionalAccessTechnologies", NULL, &AdditionalAccessTechnologiesRecord_additionalAccessTechnologies_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AdditionalAccessTechnologiesRecord_additionalAccessTechnologies_default_coding("RAW");
const TTCN_RAWdescriptor_t AdditionalAccessTechnologiesRecord_extensionBit_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AdditionalAccessTechnologiesRecord_extensionBit_xer_ = { {"extensionBit>\n", "extensionBit>\n"}, {14, 14}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AdditionalAccessTechnologiesRecord_extensionBit_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AdditionalAccessTechnologiesRecord_extensionBit_descr_ = { "@MobileL3_GMM_SM_Types.AdditionalAccessTechnologiesRecord.extensionBit", &BITSTRING_ber_, &AdditionalAccessTechnologiesRecord_extensionBit_raw_, NULL, &AdditionalAccessTechnologiesRecord_extensionBit_xer_, &BITSTRING_json_, &AdditionalAccessTechnologiesRecord_extensionBit_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AdditionalAccessTechnologiesRecord_extensionBit_default_coding("RAW");
const TTCN_RAWdescriptor_t AdditionalAccessTechnologiesRecord_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AdditionalAccessTechnologiesRecord
const TTCN_Typedescriptor_t AdditionalAccessTechnologiesRecord_descr_ = { "@MobileL3_GMM_SM_Types.AdditionalAccessTechnologiesRecord", NULL, &AdditionalAccessTechnologiesRecord_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AdditionalAccessTechnologiesRecord_default_coding("RAW");
UNIVERSAL_CHARSTRING AdditionalAccessTechnologiesRepetition_0_default_coding("RAW");
UNIVERSAL_CHARSTRING AdditionalAccessTechnologiesRepetition_default_coding("RAW");
const TTCN_RAWdescriptor_t MSRACapabilityValues1111_additionalAccessTechnologiesRepetition_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_REVERSE,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MSRACapabilityValues1111_additionalAccessTechnologiesRepetition
const TTCN_Typedescriptor_t MSRACapabilityValues1111_additionalAccessTechnologiesRepetition_descr_ = { "@MobileL3_GMM_SM_Types.MSRACapabilityValues1111.additionalAccessTechnologiesRepetition", NULL, &MSRACapabilityValues1111_additionalAccessTechnologiesRepetition_raw_, NULL, NULL, NULL, NULL, NULL, &AdditionalAccessTechnologiesRecord_descr_, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSRACapabilityValues1111_additionalAccessTechnologiesRepetition_default_coding("RAW");
UNIVERSAL_CHARSTRING MSRACapabilityValues1111_default_coding("RAW");
UNIVERSAL_CHARSTRING MSRACapabilityValues_mSRACapabilityValues1111_default_coding("RAW");
UNIVERSAL_CHARSTRING MSRACapabilityValues_default_coding("RAW");
const TTCN_RAWdescriptor_t MSRACapabilityValuesRecord_mSRACapabilityValues_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MSRACapabilityValuesRecord_mSRACapabilityValues
const TTCN_Typedescriptor_t MSRACapabilityValuesRecord_mSRACapabilityValues_descr_ = { "@MobileL3_GMM_SM_Types.MSRACapabilityValuesRecord.mSRACapabilityValues", NULL, &MSRACapabilityValuesRecord_mSRACapabilityValues_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSRACapabilityValuesRecord_mSRACapabilityValues_default_coding("RAW");
const TTCN_RAWdescriptor_t MSRACapabilityValuesRecord_presenceBitMSRACap_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MSRACapabilityValuesRecord_presenceBitMSRACap_xer_ = { {"presenceBitMSRACap>\n", "presenceBitMSRACap>\n"}, {20, 20}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MSRACapabilityValuesRecord_presenceBitMSRACap_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MSRACapabilityValuesRecord_presenceBitMSRACap_descr_ = { "@MobileL3_GMM_SM_Types.MSRACapabilityValuesRecord.presenceBitMSRACap", &BITSTRING_ber_, &MSRACapabilityValuesRecord_presenceBitMSRACap_raw_, NULL, &MSRACapabilityValuesRecord_presenceBitMSRACap_xer_, &BITSTRING_json_, &MSRACapabilityValuesRecord_presenceBitMSRACap_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSRACapabilityValuesRecord_presenceBitMSRACap_default_coding("RAW");
const TTCN_RAWdescriptor_t MSRACapabilityValuesRecord_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MSRACapabilityValuesRecord
const TTCN_Typedescriptor_t MSRACapabilityValuesRecord_descr_ = { "@MobileL3_GMM_SM_Types.MSRACapabilityValuesRecord", NULL, &MSRACapabilityValuesRecord_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSRACapabilityValuesRecord_default_coding("RAW");
UNIVERSAL_CHARSTRING MSRadioAccessCapabilityV_0_default_coding("RAW");
UNIVERSAL_CHARSTRING MSRadioAccessCapabilityV_default_coding("RAW");
const TTCN_RAWdescriptor_t MSRadioAccessCapabilityLV_msRadioAccessCapabilityV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_REVERSE,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MSRadioAccessCapabilityLV_msRadioAccessCapabilityV
const TTCN_Typedescriptor_t MSRadioAccessCapabilityLV_msRadioAccessCapabilityV_descr_ = { "@MobileL3_GMM_SM_Types.MSRadioAccessCapabilityLV.msRadioAccessCapabilityV", NULL, &MSRadioAccessCapabilityLV_msRadioAccessCapabilityV_raw_, NULL, NULL, NULL, NULL, NULL, &MSRACapabilityValuesRecord_descr_, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSRadioAccessCapabilityLV_msRadioAccessCapabilityV_default_coding("RAW");
const TTCN_RAWdescriptor_t MSRadioAccessCapabilityLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,8,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MSRadioAccessCapabilityLV
const TTCN_Typedescriptor_t MSRadioAccessCapabilityLV_descr_ = { "@MobileL3_GMM_SM_Types.MSRadioAccessCapabilityLV", NULL, &MSRadioAccessCapabilityLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MSRadioAccessCapabilityLV_default_coding("RAW");
const XERdescriptor_t       GMM__CauseTV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int GMM__CauseTV_elementIdentifier_oer_ext_arr_[0] = {};
const int GMM__CauseTV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t GMM__CauseTV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, GMM__CauseTV_elementIdentifier_oer_ext_arr_, 0, GMM__CauseTV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t GMM__CauseTV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.GMM_CauseTV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &GMM__CauseTV_elementIdentifier_xer_, &OCTETSTRING_json_, &GMM__CauseTV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING GMM__CauseTV_elementIdentifier_default_coding("RAW");
const XERdescriptor_t       GMM__CauseV_causeValue_xer_ = { {"causeValue>\n", "causeValue>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int GMM__CauseV_causeValue_oer_ext_arr_[0] = {};
const int GMM__CauseV_causeValue_oer_p_[0] = {};
const TTCN_OERdescriptor_t GMM__CauseV_causeValue_oer_ = { -1, TRUE, 1, FALSE, 0, 0, GMM__CauseV_causeValue_oer_ext_arr_, 0, GMM__CauseV_causeValue_oer_p_};
const TTCN_Typedescriptor_t GMM__CauseV_causeValue_descr_ = { "@MobileL3_GMM_SM_Types.GMM_CauseV.causeValue", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &GMM__CauseV_causeValue_xer_, &OCTETSTRING_json_, &GMM__CauseV_causeValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING GMM__CauseV_causeValue_default_coding("RAW");
const TTCN_RAWdescriptor_t GMM__CauseV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for GMM__CauseV
const TTCN_Typedescriptor_t GMM__CauseV_descr_ = { "@MobileL3_GMM_SM_Types.GMM_CauseV", NULL, &GMM__CauseV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING GMM__CauseV_default_coding("RAW");
UNIVERSAL_CHARSTRING GMM__CauseTV_causeValue_default_coding("RAW");
const TTCN_RAWdescriptor_t GMM__CauseTV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for GMM__CauseTV
const TTCN_Typedescriptor_t GMM__CauseTV_descr_ = { "@MobileL3_GMM_SM_Types.GMM_CauseTV", NULL, &GMM__CauseTV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING GMM__CauseTV_default_coding("RAW");
const XERdescriptor_t       RoutingAreaIdentificationV_mccDigit1_xer_ = { {"mccDigit1>\n", "mccDigit1>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_Typedescriptor_t RoutingAreaIdentificationV_mccDigit1_descr_ = { "@MobileL3_GMM_SM_Types.RoutingAreaIdentificationV.mccDigit1", NULL, &General__Types::HEX1_raw_, NULL, &RoutingAreaIdentificationV_mccDigit1_xer_, &HEXSTRING_json_, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingAreaIdentificationV_mccDigit1_default_coding("RAW");
const XERdescriptor_t       RoutingAreaIdentificationV_mccDigit2_xer_ = { {"mccDigit2>\n", "mccDigit2>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_Typedescriptor_t RoutingAreaIdentificationV_mccDigit2_descr_ = { "@MobileL3_GMM_SM_Types.RoutingAreaIdentificationV.mccDigit2", NULL, &General__Types::HEX1_raw_, NULL, &RoutingAreaIdentificationV_mccDigit2_xer_, &HEXSTRING_json_, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingAreaIdentificationV_mccDigit2_default_coding("RAW");
const XERdescriptor_t       RoutingAreaIdentificationV_mccDigit3_xer_ = { {"mccDigit3>\n", "mccDigit3>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_Typedescriptor_t RoutingAreaIdentificationV_mccDigit3_descr_ = { "@MobileL3_GMM_SM_Types.RoutingAreaIdentificationV.mccDigit3", NULL, &General__Types::HEX1_raw_, NULL, &RoutingAreaIdentificationV_mccDigit3_xer_, &HEXSTRING_json_, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingAreaIdentificationV_mccDigit3_default_coding("RAW");
const XERdescriptor_t       RoutingAreaIdentificationV_mncDigit3_xer_ = { {"mncDigit3>\n", "mncDigit3>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_Typedescriptor_t RoutingAreaIdentificationV_mncDigit3_descr_ = { "@MobileL3_GMM_SM_Types.RoutingAreaIdentificationV.mncDigit3", NULL, &General__Types::HEX1_raw_, NULL, &RoutingAreaIdentificationV_mncDigit3_xer_, &HEXSTRING_json_, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingAreaIdentificationV_mncDigit3_default_coding("RAW");
const XERdescriptor_t       RoutingAreaIdentificationV_mncDigit1_xer_ = { {"mncDigit1>\n", "mncDigit1>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_Typedescriptor_t RoutingAreaIdentificationV_mncDigit1_descr_ = { "@MobileL3_GMM_SM_Types.RoutingAreaIdentificationV.mncDigit1", NULL, &General__Types::HEX1_raw_, NULL, &RoutingAreaIdentificationV_mncDigit1_xer_, &HEXSTRING_json_, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingAreaIdentificationV_mncDigit1_default_coding("RAW");
const XERdescriptor_t       RoutingAreaIdentificationV_mncDigit2_xer_ = { {"mncDigit2>\n", "mncDigit2>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_Typedescriptor_t RoutingAreaIdentificationV_mncDigit2_descr_ = { "@MobileL3_GMM_SM_Types.RoutingAreaIdentificationV.mncDigit2", NULL, &General__Types::HEX1_raw_, NULL, &RoutingAreaIdentificationV_mncDigit2_xer_, &HEXSTRING_json_, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingAreaIdentificationV_mncDigit2_default_coding("RAW");
const XERdescriptor_t       RoutingAreaIdentificationV_lac_xer_ = { {"lac>\n", "lac>\n"}, {5, 5}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int RoutingAreaIdentificationV_lac_oer_ext_arr_[0] = {};
const int RoutingAreaIdentificationV_lac_oer_p_[0] = {};
const TTCN_OERdescriptor_t RoutingAreaIdentificationV_lac_oer_ = { -1, TRUE, 2, FALSE, 0, 0, RoutingAreaIdentificationV_lac_oer_ext_arr_, 0, RoutingAreaIdentificationV_lac_oer_p_};
const TTCN_Typedescriptor_t RoutingAreaIdentificationV_lac_descr_ = { "@MobileL3_GMM_SM_Types.RoutingAreaIdentificationV.lac", &OCTETSTRING_ber_, &General__Types::OCT2_raw_, &OCTETSTRING_text_, &RoutingAreaIdentificationV_lac_xer_, &OCTETSTRING_json_, &RoutingAreaIdentificationV_lac_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingAreaIdentificationV_lac_default_coding("RAW");
const XERdescriptor_t       RoutingAreaIdentificationV_rac_xer_ = { {"rac>\n", "rac>\n"}, {5, 5}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int RoutingAreaIdentificationV_rac_oer_ext_arr_[0] = {};
const int RoutingAreaIdentificationV_rac_oer_p_[0] = {};
const TTCN_OERdescriptor_t RoutingAreaIdentificationV_rac_oer_ = { -1, TRUE, 1, FALSE, 0, 0, RoutingAreaIdentificationV_rac_oer_ext_arr_, 0, RoutingAreaIdentificationV_rac_oer_p_};
const TTCN_Typedescriptor_t RoutingAreaIdentificationV_rac_descr_ = { "@MobileL3_GMM_SM_Types.RoutingAreaIdentificationV.rac", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &RoutingAreaIdentificationV_rac_xer_, &OCTETSTRING_json_, &RoutingAreaIdentificationV_rac_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingAreaIdentificationV_rac_default_coding("RAW");
const TTCN_RAWdescriptor_t RoutingAreaIdentificationV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for RoutingAreaIdentificationV
const TTCN_Typedescriptor_t RoutingAreaIdentificationV_descr_ = { "@MobileL3_GMM_SM_Types.RoutingAreaIdentificationV", NULL, &RoutingAreaIdentificationV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingAreaIdentificationV_default_coding("RAW");
const XERdescriptor_t       UpdateResultV_valueField_xer_ = { {"valueField>\n", "valueField>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t UpdateResultV_valueField_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t UpdateResultV_valueField_descr_ = { "@MobileL3_GMM_SM_Types.UpdateResultV.valueField", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &UpdateResultV_valueField_xer_, &BITSTRING_json_, &UpdateResultV_valueField_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UpdateResultV_valueField_default_coding("RAW");
const XERdescriptor_t       UpdateResultV_fOP__l3_xer_ = { {"fOP_l3>\n", "fOP_l3>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t UpdateResultV_fOP__l3_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t UpdateResultV_fOP__l3_descr_ = { "@MobileL3_GMM_SM_Types.UpdateResultV.fOP_l3", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &UpdateResultV_fOP__l3_xer_, &BITSTRING_json_, &UpdateResultV_fOP__l3_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UpdateResultV_fOP__l3_default_coding("RAW");
const TTCN_RAWdescriptor_t UpdateResultV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for UpdateResultV
const TTCN_Typedescriptor_t UpdateResultV_descr_ = { "@MobileL3_GMM_SM_Types.UpdateResultV", NULL, &UpdateResultV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UpdateResultV_default_coding("RAW");
UNIVERSAL_CHARSTRING UpdateResultTV_valueField_default_coding("RAW");
const XERdescriptor_t       UpdateResultTV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t UpdateResultTV_elementIdentifier_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t UpdateResultTV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.UpdateResultTV.elementIdentifier", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &UpdateResultTV_elementIdentifier_xer_, &BITSTRING_json_, &UpdateResultTV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UpdateResultTV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t UpdateResultTV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for UpdateResultTV
const TTCN_Typedescriptor_t UpdateResultTV_descr_ = { "@MobileL3_GMM_SM_Types.UpdateResultTV", NULL, &UpdateResultTV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UpdateResultTV_default_coding("RAW");
const XERdescriptor_t       UpdateTypeV_valueField_xer_ = { {"valueField>\n", "valueField>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t UpdateTypeV_valueField_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t UpdateTypeV_valueField_descr_ = { "@MobileL3_GMM_SM_Types.UpdateTypeV.valueField", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &UpdateTypeV_valueField_xer_, &BITSTRING_json_, &UpdateTypeV_valueField_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UpdateTypeV_valueField_default_coding("RAW");
const XERdescriptor_t       UpdateTypeV_for__l3_xer_ = { {"for_l3>\n", "for_l3>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t UpdateTypeV_for__l3_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t UpdateTypeV_for__l3_descr_ = { "@MobileL3_GMM_SM_Types.UpdateTypeV.for_l3", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &UpdateTypeV_for__l3_xer_, &BITSTRING_json_, &UpdateTypeV_for__l3_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UpdateTypeV_for__l3_default_coding("RAW");
const TTCN_RAWdescriptor_t UpdateTypeV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for UpdateTypeV
const TTCN_Typedescriptor_t UpdateTypeV_descr_ = { "@MobileL3_GMM_SM_Types.UpdateTypeV", NULL, &UpdateTypeV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UpdateTypeV_default_coding("RAW");
UNIVERSAL_CHARSTRING UpdateTypeTV_valueField_default_coding("RAW");
const XERdescriptor_t       UpdateTypeTV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t UpdateTypeTV_elementIdentifier_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t UpdateTypeTV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.UpdateTypeTV.elementIdentifier", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &UpdateTypeTV_elementIdentifier_xer_, &BITSTRING_json_, &UpdateTypeTV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UpdateTypeTV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t UpdateTypeTV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for UpdateTypeTV
const TTCN_Typedescriptor_t UpdateTypeTV_descr_ = { "@MobileL3_GMM_SM_Types.UpdateTypeTV", NULL, &UpdateTypeTV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UpdateTypeTV_default_coding("RAW");
const XERdescriptor_t       ACReferenceNumberV_valueField_xer_ = { {"valueField>\n", "valueField>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ACReferenceNumberV_valueField_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ACReferenceNumberV_valueField_descr_ = { "@MobileL3_GMM_SM_Types.ACReferenceNumberV.valueField", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &ACReferenceNumberV_valueField_xer_, &BITSTRING_json_, &ACReferenceNumberV_valueField_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ACReferenceNumberV_valueField_default_coding("RAW");
const TTCN_RAWdescriptor_t ACReferenceNumberV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ACReferenceNumberV
const TTCN_Typedescriptor_t ACReferenceNumberV_descr_ = { "@MobileL3_GMM_SM_Types.ACReferenceNumberV", NULL, &ACReferenceNumberV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ACReferenceNumberV_default_coding("RAW");
UNIVERSAL_CHARSTRING ACReferenceNumberTV_acReferenceNumber_default_coding("RAW");
const XERdescriptor_t       ACReferenceNumberTV_acReferenceNumberIEI_xer_ = { {"acReferenceNumberIEI>\n", "acReferenceNumberIEI>\n"}, {22, 22}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ACReferenceNumberTV_acReferenceNumberIEI_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ACReferenceNumberTV_acReferenceNumberIEI_descr_ = { "@MobileL3_GMM_SM_Types.ACReferenceNumberTV.acReferenceNumberIEI", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &ACReferenceNumberTV_acReferenceNumberIEI_xer_, &BITSTRING_json_, &ACReferenceNumberTV_acReferenceNumberIEI_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ACReferenceNumberTV_acReferenceNumberIEI_default_coding("RAW");
const TTCN_RAWdescriptor_t ACReferenceNumberTV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ACReferenceNumberTV
const TTCN_Typedescriptor_t ACReferenceNumberTV_descr_ = { "@MobileL3_GMM_SM_Types.ACReferenceNumberTV", NULL, &ACReferenceNumberTV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ACReferenceNumberTV_default_coding("RAW");
const XERdescriptor_t       ServiceTypeV_serviceType_xer_ = { {"serviceType>\n", "serviceType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ServiceTypeV_serviceType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ServiceTypeV_serviceType_descr_ = { "@MobileL3_GMM_SM_Types.ServiceTypeV.serviceType", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &ServiceTypeV_serviceType_xer_, &BITSTRING_json_, &ServiceTypeV_serviceType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ServiceTypeV_serviceType_default_coding("RAW");
const XERdescriptor_t       ServiceTypeV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ServiceTypeV_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ServiceTypeV_spare_descr_ = { "@MobileL3_GMM_SM_Types.ServiceTypeV.spare", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &ServiceTypeV_spare_xer_, &BITSTRING_json_, &ServiceTypeV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ServiceTypeV_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t ServiceTypeV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ServiceTypeV
const TTCN_Typedescriptor_t ServiceTypeV_descr_ = { "@MobileL3_GMM_SM_Types.ServiceTypeV", NULL, &ServiceTypeV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ServiceTypeV_default_coding("RAW");
const XERdescriptor_t       CellNotificationT_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int CellNotificationT_elementIdentifier_oer_ext_arr_[0] = {};
const int CellNotificationT_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t CellNotificationT_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, CellNotificationT_elementIdentifier_oer_ext_arr_, 0, CellNotificationT_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t CellNotificationT_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.CellNotificationT.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &CellNotificationT_elementIdentifier_xer_, &OCTETSTRING_json_, &CellNotificationT_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CellNotificationT_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t CellNotificationT_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for CellNotificationT
const TTCN_Typedescriptor_t CellNotificationT_descr_ = { "@MobileL3_GMM_SM_Types.CellNotificationT", NULL, &CellNotificationT_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CellNotificationT_default_coding("RAW");
const XERdescriptor_t       PC__LCSCapability_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PC__LCSCapability_elementIdentifier_oer_ext_arr_[0] = {};
const int PC__LCSCapability_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t PC__LCSCapability_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, PC__LCSCapability_elementIdentifier_oer_ext_arr_, 0, PC__LCSCapability_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t PC__LCSCapability_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.PC_LCSCapability.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &PC__LCSCapability_elementIdentifier_xer_, &OCTETSTRING_json_, &PC__LCSCapability_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PC__LCSCapability_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t PC__LCSCapabilityLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       PC__LCSCapabilityLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PC__LCSCapabilityLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PC__LCSCapabilityLV_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.PC_LCSCapabilityLV.lengthIndicator", &INTEGER_ber_, &PC__LCSCapabilityLV_lengthIndicator_raw_, &INTEGER_text_, &PC__LCSCapabilityLV_lengthIndicator_xer_, &INTEGER_json_, &PC__LCSCapabilityLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PC__LCSCapabilityLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       PC__LCSCapabilityV_gPS__C_xer_ = { {"gPS_C>\n", "gPS_C>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PC__LCSCapabilityV_gPS__C_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PC__LCSCapabilityV_gPS__C_descr_ = { "@MobileL3_GMM_SM_Types.PC_LCSCapabilityV.gPS_C", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &PC__LCSCapabilityV_gPS__C_xer_, &BITSTRING_json_, &PC__LCSCapabilityV_gPS__C_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PC__LCSCapabilityV_gPS__C_default_coding("RAW");
const XERdescriptor_t       PC__LCSCapabilityV_gPS__B_xer_ = { {"gPS_B>\n", "gPS_B>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PC__LCSCapabilityV_gPS__B_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PC__LCSCapabilityV_gPS__B_descr_ = { "@MobileL3_GMM_SM_Types.PC_LCSCapabilityV.gPS_B", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &PC__LCSCapabilityV_gPS__B_xer_, &BITSTRING_json_, &PC__LCSCapabilityV_gPS__B_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PC__LCSCapabilityV_gPS__B_default_coding("RAW");
const XERdescriptor_t       PC__LCSCapabilityV_gPS__A_xer_ = { {"gPS_A>\n", "gPS_A>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PC__LCSCapabilityV_gPS__A_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PC__LCSCapabilityV_gPS__A_descr_ = { "@MobileL3_GMM_SM_Types.PC_LCSCapabilityV.gPS_A", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &PC__LCSCapabilityV_gPS__A_xer_, &BITSTRING_json_, &PC__LCSCapabilityV_gPS__A_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PC__LCSCapabilityV_gPS__A_default_coding("RAW");
const XERdescriptor_t       PC__LCSCapabilityV_oTD__B_xer_ = { {"oTD_B>\n", "oTD_B>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PC__LCSCapabilityV_oTD__B_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PC__LCSCapabilityV_oTD__B_descr_ = { "@MobileL3_GMM_SM_Types.PC_LCSCapabilityV.oTD_B", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &PC__LCSCapabilityV_oTD__B_xer_, &BITSTRING_json_, &PC__LCSCapabilityV_oTD__B_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PC__LCSCapabilityV_oTD__B_default_coding("RAW");
const XERdescriptor_t       PC__LCSCapabilityV_oTD__A_xer_ = { {"oTD_A>\n", "oTD_A>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PC__LCSCapabilityV_oTD__A_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PC__LCSCapabilityV_oTD__A_descr_ = { "@MobileL3_GMM_SM_Types.PC_LCSCapabilityV.oTD_A", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &PC__LCSCapabilityV_oTD__A_xer_, &BITSTRING_json_, &PC__LCSCapabilityV_oTD__A_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PC__LCSCapabilityV_oTD__A_default_coding("RAW");
const XERdescriptor_t       PC__LCSCapabilityV_aPC_xer_ = { {"aPC>\n", "aPC>\n"}, {5, 5}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PC__LCSCapabilityV_aPC_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PC__LCSCapabilityV_aPC_descr_ = { "@MobileL3_GMM_SM_Types.PC_LCSCapabilityV.aPC", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &PC__LCSCapabilityV_aPC_xer_, &BITSTRING_json_, &PC__LCSCapabilityV_aPC_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PC__LCSCapabilityV_aPC_default_coding("RAW");
const XERdescriptor_t       PC__LCSCapabilityV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PC__LCSCapabilityV_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PC__LCSCapabilityV_spare_descr_ = { "@MobileL3_GMM_SM_Types.PC_LCSCapabilityV.spare", &BITSTRING_ber_, &General__Types::BIT2_raw_, NULL, &PC__LCSCapabilityV_spare_xer_, &BITSTRING_json_, &PC__LCSCapabilityV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PC__LCSCapabilityV_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t PC__LCSCapabilityV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PC__LCSCapabilityV
const TTCN_Typedescriptor_t PC__LCSCapabilityV_descr_ = { "@MobileL3_GMM_SM_Types.PC_LCSCapabilityV", NULL, &PC__LCSCapabilityV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PC__LCSCapabilityV_default_coding("RAW");
UNIVERSAL_CHARSTRING PC__LCSCapabilityLV_pC__LCSCapabilityV_default_coding("RAW");
const TTCN_RAWdescriptor_t PC__LCSCapabilityLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PC__LCSCapabilityLV
const TTCN_Typedescriptor_t PC__LCSCapabilityLV_descr_ = { "@MobileL3_GMM_SM_Types.PC_LCSCapabilityLV", NULL, &PC__LCSCapabilityLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PC__LCSCapabilityLV_default_coding("RAW");
UNIVERSAL_CHARSTRING PC__LCSCapability_pC__LCSCapabilityLV_default_coding("RAW");
const TTCN_RAWdescriptor_t PC__LCSCapability_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PC__LCSCapability
const TTCN_Typedescriptor_t PC__LCSCapability_descr_ = { "@MobileL3_GMM_SM_Types.PC_LCSCapability", NULL, &PC__LCSCapability_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PC__LCSCapability_default_coding("RAW");
const XERdescriptor_t       NetworkFeatureSupportV_eMCBS_xer_ = { {"eMCBS>\n", "eMCBS>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t NetworkFeatureSupportV_eMCBS_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t NetworkFeatureSupportV_eMCBS_descr_ = { "@MobileL3_GMM_SM_Types.NetworkFeatureSupportV.eMCBS", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &NetworkFeatureSupportV_eMCBS_xer_, &BITSTRING_json_, &NetworkFeatureSupportV_eMCBS_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NetworkFeatureSupportV_eMCBS_default_coding("RAW");
const XERdescriptor_t       NetworkFeatureSupportV_iMSVoPS_xer_ = { {"iMSVoPS>\n", "iMSVoPS>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t NetworkFeatureSupportV_iMSVoPS_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t NetworkFeatureSupportV_iMSVoPS_descr_ = { "@MobileL3_GMM_SM_Types.NetworkFeatureSupportV.iMSVoPS", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &NetworkFeatureSupportV_iMSVoPS_xer_, &BITSTRING_json_, &NetworkFeatureSupportV_iMSVoPS_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NetworkFeatureSupportV_iMSVoPS_default_coding("RAW");
const XERdescriptor_t       NetworkFeatureSupportV_mBMS_xer_ = { {"mBMS>\n", "mBMS>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t NetworkFeatureSupportV_mBMS_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t NetworkFeatureSupportV_mBMS_descr_ = { "@MobileL3_GMM_SM_Types.NetworkFeatureSupportV.mBMS", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &NetworkFeatureSupportV_mBMS_xer_, &BITSTRING_json_, &NetworkFeatureSupportV_mBMS_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NetworkFeatureSupportV_mBMS_default_coding("RAW");
const XERdescriptor_t       NetworkFeatureSupportV_lCS__MOLR_xer_ = { {"lCS_MOLR>\n", "lCS_MOLR>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t NetworkFeatureSupportV_lCS__MOLR_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t NetworkFeatureSupportV_lCS__MOLR_descr_ = { "@MobileL3_GMM_SM_Types.NetworkFeatureSupportV.lCS_MOLR", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &NetworkFeatureSupportV_lCS__MOLR_xer_, &BITSTRING_json_, &NetworkFeatureSupportV_lCS__MOLR_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NetworkFeatureSupportV_lCS__MOLR_default_coding("RAW");
const TTCN_RAWdescriptor_t NetworkFeatureSupportV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for NetworkFeatureSupportV
const TTCN_Typedescriptor_t NetworkFeatureSupportV_descr_ = { "@MobileL3_GMM_SM_Types.NetworkFeatureSupportV", NULL, &NetworkFeatureSupportV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NetworkFeatureSupportV_default_coding("RAW");
UNIVERSAL_CHARSTRING NetworkFeatureSupportTV_networkFeatureSupportV_default_coding("RAW");
const XERdescriptor_t       NetworkFeatureSupportTV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t NetworkFeatureSupportTV_elementIdentifier_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t NetworkFeatureSupportTV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.NetworkFeatureSupportTV.elementIdentifier", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &NetworkFeatureSupportTV_elementIdentifier_xer_, &BITSTRING_json_, &NetworkFeatureSupportTV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NetworkFeatureSupportTV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t NetworkFeatureSupportTV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for NetworkFeatureSupportTV
const TTCN_Typedescriptor_t NetworkFeatureSupportTV_descr_ = { "@MobileL3_GMM_SM_Types.NetworkFeatureSupportTV", NULL, &NetworkFeatureSupportTV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NetworkFeatureSupportTV_default_coding("RAW");
const XERdescriptor_t       AdditionalNetworkFeatureSupportTLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int AdditionalNetworkFeatureSupportTLV_elementIdentifier_oer_ext_arr_[0] = {};
const int AdditionalNetworkFeatureSupportTLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t AdditionalNetworkFeatureSupportTLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, AdditionalNetworkFeatureSupportTLV_elementIdentifier_oer_ext_arr_, 0, AdditionalNetworkFeatureSupportTLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t AdditionalNetworkFeatureSupportTLV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.AdditionalNetworkFeatureSupportTLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &AdditionalNetworkFeatureSupportTLV_elementIdentifier_xer_, &OCTETSTRING_json_, &AdditionalNetworkFeatureSupportTLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AdditionalNetworkFeatureSupportTLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t AdditionalNetworkFeatureSupportTLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AdditionalNetworkFeatureSupportTLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AdditionalNetworkFeatureSupportTLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AdditionalNetworkFeatureSupportTLV_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.AdditionalNetworkFeatureSupportTLV.lengthIndicator", &INTEGER_ber_, &AdditionalNetworkFeatureSupportTLV_lengthIndicator_raw_, &INTEGER_text_, &AdditionalNetworkFeatureSupportTLV_lengthIndicator_xer_, &INTEGER_json_, &AdditionalNetworkFeatureSupportTLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AdditionalNetworkFeatureSupportTLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       AdditionalNetworkFeatureSupportV_gPRS__SMS_xer_ = { {"gPRS_SMS>\n", "gPRS_SMS>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AdditionalNetworkFeatureSupportV_gPRS__SMS_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AdditionalNetworkFeatureSupportV_gPRS__SMS_descr_ = { "@MobileL3_GMM_SM_Types.AdditionalNetworkFeatureSupportV.gPRS_SMS", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &AdditionalNetworkFeatureSupportV_gPRS__SMS_xer_, &BITSTRING_json_, &AdditionalNetworkFeatureSupportV_gPRS__SMS_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AdditionalNetworkFeatureSupportV_gPRS__SMS_default_coding("RAW");
const XERdescriptor_t       AdditionalNetworkFeatureSupportV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AdditionalNetworkFeatureSupportV_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AdditionalNetworkFeatureSupportV_spare_descr_ = { "@MobileL3_GMM_SM_Types.AdditionalNetworkFeatureSupportV.spare", &BITSTRING_ber_, &General__Types::BIT7_raw_, NULL, &AdditionalNetworkFeatureSupportV_spare_xer_, &BITSTRING_json_, &AdditionalNetworkFeatureSupportV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AdditionalNetworkFeatureSupportV_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t AdditionalNetworkFeatureSupportV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AdditionalNetworkFeatureSupportV
const TTCN_Typedescriptor_t AdditionalNetworkFeatureSupportV_descr_ = { "@MobileL3_GMM_SM_Types.AdditionalNetworkFeatureSupportV", NULL, &AdditionalNetworkFeatureSupportV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AdditionalNetworkFeatureSupportV_default_coding("RAW");
UNIVERSAL_CHARSTRING AdditionalNetworkFeatureSupportTLV_additionalNetworkFeatureSupportV_default_coding("RAW");
const TTCN_RAWdescriptor_t AdditionalNetworkFeatureSupportTLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AdditionalNetworkFeatureSupportTLV
const TTCN_Typedescriptor_t AdditionalNetworkFeatureSupportTLV_descr_ = { "@MobileL3_GMM_SM_Types.AdditionalNetworkFeatureSupportTLV", NULL, &AdditionalNetworkFeatureSupportTLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AdditionalNetworkFeatureSupportTLV_default_coding("RAW");
const XERdescriptor_t       InterRATInformationContainerTLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int InterRATInformationContainerTLV_elementIdentifier_oer_ext_arr_[0] = {};
const int InterRATInformationContainerTLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t InterRATInformationContainerTLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, InterRATInformationContainerTLV_elementIdentifier_oer_ext_arr_, 0, InterRATInformationContainerTLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t InterRATInformationContainerTLV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.InterRATInformationContainerTLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &InterRATInformationContainerTLV_elementIdentifier_xer_, &OCTETSTRING_json_, &InterRATInformationContainerTLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING InterRATInformationContainerTLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t InterRATInformationContainerTLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       InterRATInformationContainerTLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t InterRATInformationContainerTLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t InterRATInformationContainerTLV_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.InterRATInformationContainerTLV.lengthIndicator", &INTEGER_ber_, &InterRATInformationContainerTLV_lengthIndicator_raw_, &INTEGER_text_, &InterRATInformationContainerTLV_lengthIndicator_xer_, &INTEGER_json_, &InterRATInformationContainerTLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING InterRATInformationContainerTLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       InterRATInformationContainerTLV_interRATInformationContainerV_xer_ = { {"interRATInformationContainerV>\n", "interRATInformationContainerV>\n"}, {31, 31}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int InterRATInformationContainerTLV_interRATInformationContainerV_oer_ext_arr_[0] = {};
const int InterRATInformationContainerTLV_interRATInformationContainerV_oer_p_[0] = {};
const TTCN_OERdescriptor_t InterRATInformationContainerTLV_interRATInformationContainerV_oer_ = { -1, TRUE, -1, FALSE, 0, 0, InterRATInformationContainerTLV_interRATInformationContainerV_oer_ext_arr_, 0, InterRATInformationContainerTLV_interRATInformationContainerV_oer_p_};
const TTCN_Typedescriptor_t InterRATInformationContainerTLV_interRATInformationContainerV_descr_ = { "@MobileL3_GMM_SM_Types.InterRATInformationContainerTLV.interRATInformationContainerV", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &InterRATInformationContainerTLV_interRATInformationContainerV_xer_, &OCTETSTRING_json_, &InterRATInformationContainerTLV_interRATInformationContainerV_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING InterRATInformationContainerTLV_interRATInformationContainerV_default_coding("RAW");
const TTCN_RAWdescriptor_t InterRATInformationContainerTLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for InterRATInformationContainerTLV
const TTCN_Typedescriptor_t InterRATInformationContainerTLV_descr_ = { "@MobileL3_GMM_SM_Types.InterRATInformationContainerTLV", NULL, &InterRATInformationContainerTLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING InterRATInformationContainerTLV_default_coding("RAW");
const XERdescriptor_t       RequestedMSInformationTV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RequestedMSInformationTV_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RequestedMSInformationTV_spare_descr_ = { "@MobileL3_GMM_SM_Types.RequestedMSInformationTV.spare", &BITSTRING_ber_, &General__Types::BIT2_raw_, NULL, &RequestedMSInformationTV_spare_xer_, &BITSTRING_json_, &RequestedMSInformationTV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RequestedMSInformationTV_spare_default_coding("RAW");
const XERdescriptor_t       RequestedMSInformationTV_i__RAT2_xer_ = { {"i_RAT2>\n", "i_RAT2>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RequestedMSInformationTV_i__RAT2_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RequestedMSInformationTV_i__RAT2_descr_ = { "@MobileL3_GMM_SM_Types.RequestedMSInformationTV.i_RAT2", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &RequestedMSInformationTV_i__RAT2_xer_, &BITSTRING_json_, &RequestedMSInformationTV_i__RAT2_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RequestedMSInformationTV_i__RAT2_default_coding("RAW");
const XERdescriptor_t       RequestedMSInformationTV_i__RAT_xer_ = { {"i_RAT>\n", "i_RAT>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RequestedMSInformationTV_i__RAT_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RequestedMSInformationTV_i__RAT_descr_ = { "@MobileL3_GMM_SM_Types.RequestedMSInformationTV.i_RAT", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &RequestedMSInformationTV_i__RAT_xer_, &BITSTRING_json_, &RequestedMSInformationTV_i__RAT_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RequestedMSInformationTV_i__RAT_default_coding("RAW");
const XERdescriptor_t       RequestedMSInformationTV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RequestedMSInformationTV_elementIdentifier_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RequestedMSInformationTV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.RequestedMSInformationTV.elementIdentifier", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &RequestedMSInformationTV_elementIdentifier_xer_, &BITSTRING_json_, &RequestedMSInformationTV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RequestedMSInformationTV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t RequestedMSInformationTV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for RequestedMSInformationTV
const TTCN_Typedescriptor_t RequestedMSInformationTV_descr_ = { "@MobileL3_GMM_SM_Types.RequestedMSInformationTV", NULL, &RequestedMSInformationTV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RequestedMSInformationTV_default_coding("RAW");
const XERdescriptor_t       UENetworkCapabilityTLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int UENetworkCapabilityTLV_elementIdentifier_oer_ext_arr_[0] = {};
const int UENetworkCapabilityTLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t UENetworkCapabilityTLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, UENetworkCapabilityTLV_elementIdentifier_oer_ext_arr_, 0, UENetworkCapabilityTLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t UENetworkCapabilityTLV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.UENetworkCapabilityTLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &UENetworkCapabilityTLV_elementIdentifier_xer_, &OCTETSTRING_json_, &UENetworkCapabilityTLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UENetworkCapabilityTLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t UENetworkCapabilityLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       UENetworkCapabilityLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t UENetworkCapabilityLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t UENetworkCapabilityLV_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.UENetworkCapabilityLV.lengthIndicator", &INTEGER_ber_, &UENetworkCapabilityLV_lengthIndicator_raw_, &INTEGER_text_, &UENetworkCapabilityLV_lengthIndicator_xer_, &INTEGER_json_, &UENetworkCapabilityLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UENetworkCapabilityLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       UENetworkCapabilityV_eEA_xer_ = { {"eEA>\n", "eEA>\n"}, {5, 5}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t UENetworkCapabilityV_eEA_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t UENetworkCapabilityV_eEA_descr_ = { "@MobileL3_GMM_SM_Types.UENetworkCapabilityV.eEA", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &UENetworkCapabilityV_eEA_xer_, &BITSTRING_json_, &UENetworkCapabilityV_eEA_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UENetworkCapabilityV_eEA_default_coding("RAW");
const XERdescriptor_t       UENetworkCapabilityV_eIA_xer_ = { {"eIA>\n", "eIA>\n"}, {5, 5}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t UENetworkCapabilityV_eIA_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t UENetworkCapabilityV_eIA_descr_ = { "@MobileL3_GMM_SM_Types.UENetworkCapabilityV.eIA", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &UENetworkCapabilityV_eIA_xer_, &BITSTRING_json_, &UENetworkCapabilityV_eIA_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UENetworkCapabilityV_eIA_default_coding("RAW");
const TTCN_RAWdescriptor_t UENetworkCapabilityV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for UENetworkCapabilityV
const TTCN_Typedescriptor_t UENetworkCapabilityV_descr_ = { "@MobileL3_GMM_SM_Types.UENetworkCapabilityV", NULL, &UENetworkCapabilityV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const XERdescriptor_t       UENetworkCapabilityV_uEA_xer_ = { {"uEA>\n", "uEA>\n"}, {5, 5}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t UENetworkCapabilityV_uEA_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t UENetworkCapabilityV_uEA_descr_ = { "@MobileL3_GMM_SM_Types.UENetworkCapabilityV.uEA", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &UENetworkCapabilityV_uEA_xer_, &BITSTRING_json_, &UENetworkCapabilityV_uEA_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UENetworkCapabilityV_uEA_default_coding("RAW");
const XERdescriptor_t       UENetworkCapabilityV_uIA_xer_ = { {"uIA>\n", "uIA>\n"}, {5, 5}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t UENetworkCapabilityV_uIA_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t UENetworkCapabilityV_uIA_descr_ = { "@MobileL3_GMM_SM_Types.UENetworkCapabilityV.uIA", &BITSTRING_ber_, &General__Types::BIT7_raw_, NULL, &UENetworkCapabilityV_uIA_xer_, &BITSTRING_json_, &UENetworkCapabilityV_uIA_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UENetworkCapabilityV_uIA_default_coding("RAW");
const XERdescriptor_t       UENetworkCapabilityV_uCS2_xer_ = { {"uCS2>\n", "uCS2>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t UENetworkCapabilityV_uCS2_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t UENetworkCapabilityV_uCS2_descr_ = { "@MobileL3_GMM_SM_Types.UENetworkCapabilityV.uCS2", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &UENetworkCapabilityV_uCS2_xer_, &BITSTRING_json_, &UENetworkCapabilityV_uCS2_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UENetworkCapabilityV_uCS2_default_coding("RAW");
const XERdescriptor_t       UENetworkCapabilityV_nF_xer_ = { {"nF>\n", "nF>\n"}, {4, 4}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t UENetworkCapabilityV_nF_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t UENetworkCapabilityV_nF_descr_ = { "@MobileL3_GMM_SM_Types.UENetworkCapabilityV.nF", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &UENetworkCapabilityV_nF_xer_, &BITSTRING_json_, &UENetworkCapabilityV_nF_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UENetworkCapabilityV_nF_default_coding("RAW");
const XERdescriptor_t       UENetworkCapabilityV_sRVCC_xer_ = { {"sRVCC>\n", "sRVCC>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t UENetworkCapabilityV_sRVCC_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t UENetworkCapabilityV_sRVCC_descr_ = { "@MobileL3_GMM_SM_Types.UENetworkCapabilityV.sRVCC", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &UENetworkCapabilityV_sRVCC_xer_, &BITSTRING_json_, &UENetworkCapabilityV_sRVCC_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UENetworkCapabilityV_sRVCC_default_coding("RAW");
const XERdescriptor_t       UENetworkCapabilityV_lCS_xer_ = { {"lCS>\n", "lCS>\n"}, {5, 5}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t UENetworkCapabilityV_lCS_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t UENetworkCapabilityV_lCS_descr_ = { "@MobileL3_GMM_SM_Types.UENetworkCapabilityV.lCS", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &UENetworkCapabilityV_lCS_xer_, &BITSTRING_json_, &UENetworkCapabilityV_lCS_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UENetworkCapabilityV_lCS_default_coding("RAW");
const XERdescriptor_t       UENetworkCapabilityV_lPP_xer_ = { {"lPP>\n", "lPP>\n"}, {5, 5}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t UENetworkCapabilityV_lPP_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t UENetworkCapabilityV_lPP_descr_ = { "@MobileL3_GMM_SM_Types.UENetworkCapabilityV.lPP", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &UENetworkCapabilityV_lPP_xer_, &BITSTRING_json_, &UENetworkCapabilityV_lPP_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UENetworkCapabilityV_lPP_default_coding("RAW");
const XERdescriptor_t       UENetworkCapabilityV_aCC__CSFB_xer_ = { {"aCC_CSFB>\n", "aCC_CSFB>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t UENetworkCapabilityV_aCC__CSFB_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t UENetworkCapabilityV_aCC__CSFB_descr_ = { "@MobileL3_GMM_SM_Types.UENetworkCapabilityV.aCC_CSFB", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &UENetworkCapabilityV_aCC__CSFB_xer_, &BITSTRING_json_, &UENetworkCapabilityV_aCC__CSFB_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UENetworkCapabilityV_aCC__CSFB_default_coding("RAW");
const XERdescriptor_t       UENetworkCapabilityV_h245__ASH_xer_ = { {"h245_ASH>\n", "h245_ASH>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t UENetworkCapabilityV_h245__ASH_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t UENetworkCapabilityV_h245__ASH_descr_ = { "@MobileL3_GMM_SM_Types.UENetworkCapabilityV.h245_ASH", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &UENetworkCapabilityV_h245__ASH_xer_, &BITSTRING_json_, &UENetworkCapabilityV_h245__ASH_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UENetworkCapabilityV_h245__ASH_default_coding("RAW");
const XERdescriptor_t       UENetworkCapabilityV_proSe_xer_ = { {"proSe>\n", "proSe>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t UENetworkCapabilityV_proSe_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t UENetworkCapabilityV_proSe_descr_ = { "@MobileL3_GMM_SM_Types.UENetworkCapabilityV.proSe", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &UENetworkCapabilityV_proSe_xer_, &BITSTRING_json_, &UENetworkCapabilityV_proSe_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UENetworkCapabilityV_proSe_default_coding("RAW");
const XERdescriptor_t       UENetworkCapabilityV_proSe__dd_xer_ = { {"proSe_dd>\n", "proSe_dd>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t UENetworkCapabilityV_proSe__dd_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t UENetworkCapabilityV_proSe__dd_descr_ = { "@MobileL3_GMM_SM_Types.UENetworkCapabilityV.proSe_dd", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &UENetworkCapabilityV_proSe__dd_xer_, &BITSTRING_json_, &UENetworkCapabilityV_proSe__dd_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UENetworkCapabilityV_proSe__dd_default_coding("RAW");
const XERdescriptor_t       UENetworkCapabilityV_proSe__dc_xer_ = { {"proSe_dc>\n", "proSe_dc>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t UENetworkCapabilityV_proSe__dc_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t UENetworkCapabilityV_proSe__dc_descr_ = { "@MobileL3_GMM_SM_Types.UENetworkCapabilityV.proSe_dc", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &UENetworkCapabilityV_proSe__dc_xer_, &BITSTRING_json_, &UENetworkCapabilityV_proSe__dc_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UENetworkCapabilityV_proSe__dc_default_coding("RAW");
const XERdescriptor_t       UENetworkCapabilityV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t UENetworkCapabilityV_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t UENetworkCapabilityV_spare_descr_ = { "@MobileL3_GMM_SM_Types.UENetworkCapabilityV.spare", &BITSTRING_ber_, &General__Types::BIT7_raw_, NULL, &UENetworkCapabilityV_spare_xer_, &BITSTRING_json_, &UENetworkCapabilityV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UENetworkCapabilityV_spare_default_coding("RAW");
const XERdescriptor_t       UENetworkCapabilityV_spare4_xer_ = { {"spare4>\n", "spare4>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int UENetworkCapabilityV_spare4_oer_ext_arr_[0] = {};
const int UENetworkCapabilityV_spare4_oer_p_[0] = {};
const TTCN_OERdescriptor_t UENetworkCapabilityV_spare4_oer_ = { -1, TRUE, -1, FALSE, 0, 0, UENetworkCapabilityV_spare4_oer_ext_arr_, 0, UENetworkCapabilityV_spare4_oer_p_};
const TTCN_Typedescriptor_t UENetworkCapabilityV_spare4_descr_ = { "@MobileL3_GMM_SM_Types.UENetworkCapabilityV.spare4", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &UENetworkCapabilityV_spare4_xer_, &OCTETSTRING_json_, &UENetworkCapabilityV_spare4_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UENetworkCapabilityV_spare4_default_coding("RAW");
UNIVERSAL_CHARSTRING UENetworkCapabilityV_default_coding("RAW");
UNIVERSAL_CHARSTRING UENetworkCapabilityLV_uENetworkCapabilityV_default_coding("RAW");
const TTCN_RAWdescriptor_t UENetworkCapabilityLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for UENetworkCapabilityLV
const TTCN_Typedescriptor_t UENetworkCapabilityLV_descr_ = { "@MobileL3_GMM_SM_Types.UENetworkCapabilityLV", NULL, &UENetworkCapabilityLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UENetworkCapabilityLV_default_coding("RAW");
UNIVERSAL_CHARSTRING UENetworkCapabilityTLV_uENetworkCapabilityLV_default_coding("RAW");
const TTCN_RAWdescriptor_t UENetworkCapabilityTLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for UENetworkCapabilityTLV
const TTCN_Typedescriptor_t UENetworkCapabilityTLV_descr_ = { "@MobileL3_GMM_SM_Types.UENetworkCapabilityTLV", NULL, &UENetworkCapabilityTLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UENetworkCapabilityTLV_default_coding("RAW");
const XERdescriptor_t       EUTRANinterRATInformationContainerTLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int EUTRANinterRATInformationContainerTLV_elementIdentifier_oer_ext_arr_[0] = {};
const int EUTRANinterRATInformationContainerTLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t EUTRANinterRATInformationContainerTLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, EUTRANinterRATInformationContainerTLV_elementIdentifier_oer_ext_arr_, 0, EUTRANinterRATInformationContainerTLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t EUTRANinterRATInformationContainerTLV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.EUTRANinterRATInformationContainerTLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &EUTRANinterRATInformationContainerTLV_elementIdentifier_xer_, &OCTETSTRING_json_, &EUTRANinterRATInformationContainerTLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING EUTRANinterRATInformationContainerTLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t EUTRANinterRATInformationContainerTLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       EUTRANinterRATInformationContainerTLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t EUTRANinterRATInformationContainerTLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t EUTRANinterRATInformationContainerTLV_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.EUTRANinterRATInformationContainerTLV.lengthIndicator", &INTEGER_ber_, &EUTRANinterRATInformationContainerTLV_lengthIndicator_raw_, &INTEGER_text_, &EUTRANinterRATInformationContainerTLV_lengthIndicator_xer_, &INTEGER_json_, &EUTRANinterRATInformationContainerTLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING EUTRANinterRATInformationContainerTLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       EUTRANinterRATInformationContainerTLV_eUTRANinterRATInformationContainerV_xer_ = { {"eUTRANinterRATInformationContainerV>\n", "eUTRANinterRATInformationContainerV>\n"}, {37, 37}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int EUTRANinterRATInformationContainerTLV_eUTRANinterRATInformationContainerV_oer_ext_arr_[0] = {};
const int EUTRANinterRATInformationContainerTLV_eUTRANinterRATInformationContainerV_oer_p_[0] = {};
const TTCN_OERdescriptor_t EUTRANinterRATInformationContainerTLV_eUTRANinterRATInformationContainerV_oer_ = { -1, TRUE, -1, FALSE, 0, 0, EUTRANinterRATInformationContainerTLV_eUTRANinterRATInformationContainerV_oer_ext_arr_, 0, EUTRANinterRATInformationContainerTLV_eUTRANinterRATInformationContainerV_oer_p_};
const TTCN_Typedescriptor_t EUTRANinterRATInformationContainerTLV_eUTRANinterRATInformationContainerV_descr_ = { "@MobileL3_GMM_SM_Types.EUTRANinterRATInformationContainerTLV.eUTRANinterRATInformationContainerV", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &EUTRANinterRATInformationContainerTLV_eUTRANinterRATInformationContainerV_xer_, &OCTETSTRING_json_, &EUTRANinterRATInformationContainerTLV_eUTRANinterRATInformationContainerV_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING EUTRANinterRATInformationContainerTLV_eUTRANinterRATInformationContainerV_default_coding("RAW");
const TTCN_RAWdescriptor_t EUTRANinterRATInformationContainerTLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for EUTRANinterRATInformationContainerTLV
const TTCN_Typedescriptor_t EUTRANinterRATInformationContainerTLV_descr_ = { "@MobileL3_GMM_SM_Types.EUTRANinterRATInformationContainerTLV", NULL, &EUTRANinterRATInformationContainerTLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING EUTRANinterRATInformationContainerTLV_default_coding("RAW");
const XERdescriptor_t       VoiceDomainPreferenceandUEsUsageSettingTLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int VoiceDomainPreferenceandUEsUsageSettingTLV_elementIdentifier_oer_ext_arr_[0] = {};
const int VoiceDomainPreferenceandUEsUsageSettingTLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t VoiceDomainPreferenceandUEsUsageSettingTLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, VoiceDomainPreferenceandUEsUsageSettingTLV_elementIdentifier_oer_ext_arr_, 0, VoiceDomainPreferenceandUEsUsageSettingTLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t VoiceDomainPreferenceandUEsUsageSettingTLV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.VoiceDomainPreferenceandUEsUsageSettingTLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &VoiceDomainPreferenceandUEsUsageSettingTLV_elementIdentifier_xer_, &OCTETSTRING_json_, &VoiceDomainPreferenceandUEsUsageSettingTLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VoiceDomainPreferenceandUEsUsageSettingTLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t VoiceDomainPreferenceandUEsUsageSettingTLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       VoiceDomainPreferenceandUEsUsageSettingTLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t VoiceDomainPreferenceandUEsUsageSettingTLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t VoiceDomainPreferenceandUEsUsageSettingTLV_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.VoiceDomainPreferenceandUEsUsageSettingTLV.lengthIndicator", &INTEGER_ber_, &VoiceDomainPreferenceandUEsUsageSettingTLV_lengthIndicator_raw_, &INTEGER_text_, &VoiceDomainPreferenceandUEsUsageSettingTLV_lengthIndicator_xer_, &INTEGER_json_, &VoiceDomainPreferenceandUEsUsageSettingTLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VoiceDomainPreferenceandUEsUsageSettingTLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       VDPaUEsUS__V_voiceDomainPreferenceforEUTRAN_xer_ = { {"voiceDomainPreferenceforEUTRAN>\n", "voiceDomainPreferenceforEUTRAN>\n"}, {32, 32}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t VDPaUEsUS__V_voiceDomainPreferenceforEUTRAN_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t VDPaUEsUS__V_voiceDomainPreferenceforEUTRAN_descr_ = { "@MobileL3_GMM_SM_Types.VDPaUEsUS_V.voiceDomainPreferenceforEUTRAN", &BITSTRING_ber_, &General__Types::BIT2_raw_, NULL, &VDPaUEsUS__V_voiceDomainPreferenceforEUTRAN_xer_, &BITSTRING_json_, &VDPaUEsUS__V_voiceDomainPreferenceforEUTRAN_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VDPaUEsUS__V_voiceDomainPreferenceforEUTRAN_default_coding("RAW");
const XERdescriptor_t       VDPaUEsUS__V_uEsUsageSetting_xer_ = { {"uEsUsageSetting>\n", "uEsUsageSetting>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t VDPaUEsUS__V_uEsUsageSetting_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t VDPaUEsUS__V_uEsUsageSetting_descr_ = { "@MobileL3_GMM_SM_Types.VDPaUEsUS_V.uEsUsageSetting", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &VDPaUEsUS__V_uEsUsageSetting_xer_, &BITSTRING_json_, &VDPaUEsUS__V_uEsUsageSetting_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VDPaUEsUS__V_uEsUsageSetting_default_coding("RAW");
const XERdescriptor_t       VDPaUEsUS__V_spare1_xer_ = { {"spare1>\n", "spare1>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t VDPaUEsUS__V_spare1_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t VDPaUEsUS__V_spare1_descr_ = { "@MobileL3_GMM_SM_Types.VDPaUEsUS_V.spare1", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &VDPaUEsUS__V_spare1_xer_, &BITSTRING_json_, &VDPaUEsUS__V_spare1_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VDPaUEsUS__V_spare1_default_coding("RAW");
const XERdescriptor_t       VDPaUEsUS__V_spare2_xer_ = { {"spare2>\n", "spare2>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t VDPaUEsUS__V_spare2_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t VDPaUEsUS__V_spare2_descr_ = { "@MobileL3_GMM_SM_Types.VDPaUEsUS_V.spare2", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &VDPaUEsUS__V_spare2_xer_, &BITSTRING_json_, &VDPaUEsUS__V_spare2_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VDPaUEsUS__V_spare2_default_coding("RAW");
const XERdescriptor_t       VDPaUEsUS__V_spare3_xer_ = { {"spare3>\n", "spare3>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t VDPaUEsUS__V_spare3_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t VDPaUEsUS__V_spare3_descr_ = { "@MobileL3_GMM_SM_Types.VDPaUEsUS_V.spare3", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &VDPaUEsUS__V_spare3_xer_, &BITSTRING_json_, &VDPaUEsUS__V_spare3_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VDPaUEsUS__V_spare3_default_coding("RAW");
const XERdescriptor_t       VDPaUEsUS__V_spare4_xer_ = { {"spare4>\n", "spare4>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t VDPaUEsUS__V_spare4_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t VDPaUEsUS__V_spare4_descr_ = { "@MobileL3_GMM_SM_Types.VDPaUEsUS_V.spare4", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &VDPaUEsUS__V_spare4_xer_, &BITSTRING_json_, &VDPaUEsUS__V_spare4_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VDPaUEsUS__V_spare4_default_coding("RAW");
const XERdescriptor_t       VDPaUEsUS__V_spare5_xer_ = { {"spare5>\n", "spare5>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t VDPaUEsUS__V_spare5_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t VDPaUEsUS__V_spare5_descr_ = { "@MobileL3_GMM_SM_Types.VDPaUEsUS_V.spare5", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &VDPaUEsUS__V_spare5_xer_, &BITSTRING_json_, &VDPaUEsUS__V_spare5_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VDPaUEsUS__V_spare5_default_coding("RAW");
const TTCN_RAWdescriptor_t VDPaUEsUS__V_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for VDPaUEsUS__V
const TTCN_Typedescriptor_t VDPaUEsUS__V_descr_ = { "@MobileL3_GMM_SM_Types.VDPaUEsUS_V", NULL, &VDPaUEsUS__V_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VDPaUEsUS__V_default_coding("RAW");
UNIVERSAL_CHARSTRING VoiceDomainPreferenceandUEsUsageSettingTLV_informationElement_default_coding("RAW");
const TTCN_RAWdescriptor_t VoiceDomainPreferenceandUEsUsageSettingTLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for VoiceDomainPreferenceandUEsUsageSettingTLV
const TTCN_Typedescriptor_t VoiceDomainPreferenceandUEsUsageSettingTLV_descr_ = { "@MobileL3_GMM_SM_Types.VoiceDomainPreferenceandUEsUsageSettingTLV", NULL, &VoiceDomainPreferenceandUEsUsageSettingTLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VoiceDomainPreferenceandUEsUsageSettingTLV_default_coding("RAW");
const XERdescriptor_t       LocationAreaIdentification2__TLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int LocationAreaIdentification2__TLV_elementIdentifier_oer_ext_arr_[0] = {};
const int LocationAreaIdentification2__TLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t LocationAreaIdentification2__TLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, LocationAreaIdentification2__TLV_elementIdentifier_oer_ext_arr_, 0, LocationAreaIdentification2__TLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t LocationAreaIdentification2__TLV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.LocationAreaIdentification2_TLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &LocationAreaIdentification2__TLV_elementIdentifier_xer_, &OCTETSTRING_json_, &LocationAreaIdentification2__TLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING LocationAreaIdentification2__TLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t LocationAreaIdentification2__TLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       LocationAreaIdentification2__TLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t LocationAreaIdentification2__TLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t LocationAreaIdentification2__TLV_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.LocationAreaIdentification2_TLV.lengthIndicator", &INTEGER_ber_, &LocationAreaIdentification2__TLV_lengthIndicator_raw_, &INTEGER_text_, &LocationAreaIdentification2__TLV_lengthIndicator_xer_, &INTEGER_json_, &LocationAreaIdentification2__TLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING LocationAreaIdentification2__TLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       LocationAreaIdentification2__TLV_locationAreaIdentificationValue_xer_ = { {"locationAreaIdentificationValue>\n", "locationAreaIdentificationValue>\n"}, {33, 33}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int LocationAreaIdentification2__TLV_locationAreaIdentificationValue_oer_ext_arr_[0] = {};
const int LocationAreaIdentification2__TLV_locationAreaIdentificationValue_oer_p_[0] = {};
const TTCN_OERdescriptor_t LocationAreaIdentification2__TLV_locationAreaIdentificationValue_oer_ = { -1, TRUE, 5, FALSE, 0, 0, LocationAreaIdentification2__TLV_locationAreaIdentificationValue_oer_ext_arr_, 0, LocationAreaIdentification2__TLV_locationAreaIdentificationValue_oer_p_};
const TTCN_Typedescriptor_t LocationAreaIdentification2__TLV_locationAreaIdentificationValue_descr_ = { "@MobileL3_GMM_SM_Types.LocationAreaIdentification2_TLV.locationAreaIdentificationValue", &OCTETSTRING_ber_, &General__Types::OCT5_raw_, &OCTETSTRING_text_, &LocationAreaIdentification2__TLV_locationAreaIdentificationValue_xer_, &OCTETSTRING_json_, &LocationAreaIdentification2__TLV_locationAreaIdentificationValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING LocationAreaIdentification2__TLV_locationAreaIdentificationValue_default_coding("RAW");
const TTCN_RAWdescriptor_t LocationAreaIdentification2__TLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for LocationAreaIdentification2__TLV
const TTCN_Typedescriptor_t LocationAreaIdentification2__TLV_descr_ = { "@MobileL3_GMM_SM_Types.LocationAreaIdentification2_TLV", NULL, &LocationAreaIdentification2__TLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING LocationAreaIdentification2__TLV_default_coding("RAW");
const XERdescriptor_t       NetworkResourceIdentifierContainerTLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int NetworkResourceIdentifierContainerTLV_elementIdentifier_oer_ext_arr_[0] = {};
const int NetworkResourceIdentifierContainerTLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t NetworkResourceIdentifierContainerTLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, NetworkResourceIdentifierContainerTLV_elementIdentifier_oer_ext_arr_, 0, NetworkResourceIdentifierContainerTLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t NetworkResourceIdentifierContainerTLV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.NetworkResourceIdentifierContainerTLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &NetworkResourceIdentifierContainerTLV_elementIdentifier_xer_, &OCTETSTRING_json_, &NetworkResourceIdentifierContainerTLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NetworkResourceIdentifierContainerTLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t NetworkResourceIdentifierContainerLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       NetworkResourceIdentifierContainerLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t NetworkResourceIdentifierContainerLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t NetworkResourceIdentifierContainerLV_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.NetworkResourceIdentifierContainerLV.lengthIndicator", &INTEGER_ber_, &NetworkResourceIdentifierContainerLV_lengthIndicator_raw_, &INTEGER_text_, &NetworkResourceIdentifierContainerLV_lengthIndicator_xer_, &INTEGER_json_, &NetworkResourceIdentifierContainerLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NetworkResourceIdentifierContainerLV_lengthIndicator_default_coding("RAW");
const TTCN_RAWdescriptor_t NetworkResourceIdentifierContainerV_nRIContainerValue_raw_ = {10,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_MSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,10,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       NetworkResourceIdentifierContainerV_nRIContainerValue_xer_ = { {"nRIContainerValue>\n", "nRIContainerValue>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t NetworkResourceIdentifierContainerV_nRIContainerValue_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t NetworkResourceIdentifierContainerV_nRIContainerValue_descr_ = { "@MobileL3_GMM_SM_Types.NetworkResourceIdentifierContainerV.nRIContainerValue", &BITSTRING_ber_, &NetworkResourceIdentifierContainerV_nRIContainerValue_raw_, NULL, &NetworkResourceIdentifierContainerV_nRIContainerValue_xer_, &BITSTRING_json_, &NetworkResourceIdentifierContainerV_nRIContainerValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NetworkResourceIdentifierContainerV_nRIContainerValue_default_coding("RAW");
const TTCN_RAWdescriptor_t NetworkResourceIdentifierContainerV_spare_raw_ = {6,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,6,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       NetworkResourceIdentifierContainerV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t NetworkResourceIdentifierContainerV_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t NetworkResourceIdentifierContainerV_spare_descr_ = { "@MobileL3_GMM_SM_Types.NetworkResourceIdentifierContainerV.spare", &BITSTRING_ber_, &NetworkResourceIdentifierContainerV_spare_raw_, NULL, &NetworkResourceIdentifierContainerV_spare_xer_, &BITSTRING_json_, &NetworkResourceIdentifierContainerV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NetworkResourceIdentifierContainerV_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t NetworkResourceIdentifierContainerV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for NetworkResourceIdentifierContainerV
const TTCN_Typedescriptor_t NetworkResourceIdentifierContainerV_descr_ = { "@MobileL3_GMM_SM_Types.NetworkResourceIdentifierContainerV", NULL, &NetworkResourceIdentifierContainerV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NetworkResourceIdentifierContainerV_default_coding("RAW");
UNIVERSAL_CHARSTRING NetworkResourceIdentifierContainerLV_networkResourceIdentifierContainerV_default_coding("RAW");
const TTCN_RAWdescriptor_t NetworkResourceIdentifierContainerLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for NetworkResourceIdentifierContainerLV
const TTCN_Typedescriptor_t NetworkResourceIdentifierContainerLV_descr_ = { "@MobileL3_GMM_SM_Types.NetworkResourceIdentifierContainerLV", NULL, &NetworkResourceIdentifierContainerLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NetworkResourceIdentifierContainerLV_default_coding("RAW");
UNIVERSAL_CHARSTRING NetworkResourceIdentifierContainerTLV_networkResourceIdentifierContainerLV_default_coding("RAW");
const TTCN_RAWdescriptor_t NetworkResourceIdentifierContainerTLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for NetworkResourceIdentifierContainerTLV
const TTCN_Typedescriptor_t NetworkResourceIdentifierContainerTLV_descr_ = { "@MobileL3_GMM_SM_Types.NetworkResourceIdentifierContainerTLV", NULL, &NetworkResourceIdentifierContainerTLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NetworkResourceIdentifierContainerTLV_default_coding("RAW");
const XERdescriptor_t       ExtendedDRXParametersTLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int ExtendedDRXParametersTLV_elementIdentifier_oer_ext_arr_[0] = {};
const int ExtendedDRXParametersTLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t ExtendedDRXParametersTLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ExtendedDRXParametersTLV_elementIdentifier_oer_ext_arr_, 0, ExtendedDRXParametersTLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t ExtendedDRXParametersTLV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.ExtendedDRXParametersTLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &ExtendedDRXParametersTLV_elementIdentifier_xer_, &OCTETSTRING_json_, &ExtendedDRXParametersTLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ExtendedDRXParametersTLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t ExtendedDRXParametersTLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       ExtendedDRXParametersTLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ExtendedDRXParametersTLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ExtendedDRXParametersTLV_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.ExtendedDRXParametersTLV.lengthIndicator", &INTEGER_ber_, &ExtendedDRXParametersTLV_lengthIndicator_raw_, &INTEGER_text_, &ExtendedDRXParametersTLV_lengthIndicator_xer_, &INTEGER_json_, &ExtendedDRXParametersTLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ExtendedDRXParametersTLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       ExtendedDRXParametersTLV_eDRXValue_xer_ = { {"eDRXValue>\n", "eDRXValue>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ExtendedDRXParametersTLV_eDRXValue_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ExtendedDRXParametersTLV_eDRXValue_descr_ = { "@MobileL3_GMM_SM_Types.ExtendedDRXParametersTLV.eDRXValue", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &ExtendedDRXParametersTLV_eDRXValue_xer_, &BITSTRING_json_, &ExtendedDRXParametersTLV_eDRXValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ExtendedDRXParametersTLV_eDRXValue_default_coding("RAW");
const XERdescriptor_t       ExtendedDRXParametersTLV_pagingTimeWindow_xer_ = { {"pagingTimeWindow>\n", "pagingTimeWindow>\n"}, {18, 18}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ExtendedDRXParametersTLV_pagingTimeWindow_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ExtendedDRXParametersTLV_pagingTimeWindow_descr_ = { "@MobileL3_GMM_SM_Types.ExtendedDRXParametersTLV.pagingTimeWindow", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &ExtendedDRXParametersTLV_pagingTimeWindow_xer_, &BITSTRING_json_, &ExtendedDRXParametersTLV_pagingTimeWindow_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ExtendedDRXParametersTLV_pagingTimeWindow_default_coding("RAW");
const TTCN_RAWdescriptor_t ExtendedDRXParametersTLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ExtendedDRXParametersTLV
const TTCN_Typedescriptor_t ExtendedDRXParametersTLV_descr_ = { "@MobileL3_GMM_SM_Types.ExtendedDRXParametersTLV", NULL, &ExtendedDRXParametersTLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ExtendedDRXParametersTLV_default_coding("RAW");
const XERdescriptor_t       AccessPointNameTLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int AccessPointNameTLV_elementIdentifier_oer_ext_arr_[0] = {};
const int AccessPointNameTLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t AccessPointNameTLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, AccessPointNameTLV_elementIdentifier_oer_ext_arr_, 0, AccessPointNameTLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t AccessPointNameTLV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.AccessPointNameTLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &AccessPointNameTLV_elementIdentifier_xer_, &OCTETSTRING_json_, &AccessPointNameTLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessPointNameTLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessPointNameTLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessPointNameTLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessPointNameTLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessPointNameTLV_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.AccessPointNameTLV.lengthIndicator", &INTEGER_ber_, &AccessPointNameTLV_lengthIndicator_raw_, &INTEGER_text_, &AccessPointNameTLV_lengthIndicator_xer_, &INTEGER_json_, &AccessPointNameTLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessPointNameTLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       AccessPointNameV_xer_ = { {"AccessPointNameV>\n", "AccessPointNameV>\n"}, {18, 18}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int AccessPointNameV_oer_ext_arr_[0] = {};
const int AccessPointNameV_oer_p_[0] = {};
const TTCN_OERdescriptor_t AccessPointNameV_oer_ = { -1, TRUE, -1, FALSE, 0, 0, AccessPointNameV_oer_ext_arr_, 0, AccessPointNameV_oer_p_};
const TTCN_Typedescriptor_t AccessPointNameV_descr_ = { "@MobileL3_GMM_SM_Types.AccessPointNameV", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &AccessPointNameV_xer_, &OCTETSTRING_json_, &AccessPointNameV_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessPointNameV_default_coding("RAW");
const XERdescriptor_t       AccessPointNameTLV_accessPointNameValue_xer_ = { {"accessPointNameValue>\n", "accessPointNameValue>\n"}, {22, 22}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int AccessPointNameTLV_accessPointNameValue_oer_ext_arr_[0] = {};
const int AccessPointNameTLV_accessPointNameValue_oer_p_[0] = {};
const TTCN_OERdescriptor_t AccessPointNameTLV_accessPointNameValue_oer_ = { -1, TRUE, -1, FALSE, 0, 0, AccessPointNameTLV_accessPointNameValue_oer_ext_arr_, 0, AccessPointNameTLV_accessPointNameValue_oer_p_};
const TTCN_Typedescriptor_t AccessPointNameTLV_accessPointNameValue_descr_ = { "@MobileL3_GMM_SM_Types.AccessPointNameTLV.accessPointNameValue", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &AccessPointNameTLV_accessPointNameValue_xer_, &OCTETSTRING_json_, &AccessPointNameTLV_accessPointNameValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessPointNameTLV_accessPointNameValue_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessPointNameTLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessPointNameTLV
const TTCN_Typedescriptor_t AccessPointNameTLV_descr_ = { "@MobileL3_GMM_SM_Types.AccessPointNameTLV", NULL, &AccessPointNameTLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessPointNameTLV_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessPointNameLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       AccessPointNameLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t AccessPointNameLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t AccessPointNameLV_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.AccessPointNameLV.lengthIndicator", &INTEGER_ber_, &AccessPointNameLV_lengthIndicator_raw_, &INTEGER_text_, &AccessPointNameLV_lengthIndicator_xer_, &INTEGER_json_, &AccessPointNameLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessPointNameLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       AccessPointNameLV_accessPointNameValue_xer_ = { {"accessPointNameValue>\n", "accessPointNameValue>\n"}, {22, 22}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int AccessPointNameLV_accessPointNameValue_oer_ext_arr_[0] = {};
const int AccessPointNameLV_accessPointNameValue_oer_p_[0] = {};
const TTCN_OERdescriptor_t AccessPointNameLV_accessPointNameValue_oer_ = { -1, TRUE, -1, FALSE, 0, 0, AccessPointNameLV_accessPointNameValue_oer_ext_arr_, 0, AccessPointNameLV_accessPointNameValue_oer_p_};
const TTCN_Typedescriptor_t AccessPointNameLV_accessPointNameValue_descr_ = { "@MobileL3_GMM_SM_Types.AccessPointNameLV.accessPointNameValue", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &AccessPointNameLV_accessPointNameValue_xer_, &OCTETSTRING_json_, &AccessPointNameLV_accessPointNameValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessPointNameLV_accessPointNameValue_default_coding("RAW");
const TTCN_RAWdescriptor_t AccessPointNameLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for AccessPointNameLV
const TTCN_Typedescriptor_t AccessPointNameLV_descr_ = { "@MobileL3_GMM_SM_Types.AccessPointNameLV", NULL, &AccessPointNameLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING AccessPointNameLV_default_coding("RAW");
const XERdescriptor_t       NSAPITV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int NSAPITV_elementIdentifier_oer_ext_arr_[0] = {};
const int NSAPITV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t NSAPITV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, NSAPITV_elementIdentifier_oer_ext_arr_, 0, NSAPITV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t NSAPITV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.NSAPITV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &NSAPITV_elementIdentifier_xer_, &OCTETSTRING_json_, &NSAPITV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NSAPITV_elementIdentifier_default_coding("RAW");
const XERdescriptor_t       NSAPIV_valueField_xer_ = { {"valueField>\n", "valueField>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t NSAPIV_valueField_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t NSAPIV_valueField_descr_ = { "@MobileL3_GMM_SM_Types.NSAPIV.valueField", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &NSAPIV_valueField_xer_, &BITSTRING_json_, &NSAPIV_valueField_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NSAPIV_valueField_default_coding("RAW");
const XERdescriptor_t       NSAPIV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t NSAPIV_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t NSAPIV_spare_descr_ = { "@MobileL3_GMM_SM_Types.NSAPIV.spare", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &NSAPIV_spare_xer_, &BITSTRING_json_, &NSAPIV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NSAPIV_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t NSAPIV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for NSAPIV
const TTCN_Typedescriptor_t NSAPIV_descr_ = { "@MobileL3_GMM_SM_Types.NSAPIV", NULL, &NSAPIV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NSAPIV_default_coding("RAW");
UNIVERSAL_CHARSTRING NSAPITV_valueField_default_coding("RAW");
const TTCN_RAWdescriptor_t NSAPITV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for NSAPITV
const TTCN_Typedescriptor_t NSAPITV_descr_ = { "@MobileL3_GMM_SM_Types.NSAPITV", NULL, &NSAPITV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NSAPITV_default_coding("RAW");
const XERdescriptor_t       ProtocolConfigOptionsTLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int ProtocolConfigOptionsTLV_elementIdentifier_oer_ext_arr_[0] = {};
const int ProtocolConfigOptionsTLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t ProtocolConfigOptionsTLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ProtocolConfigOptionsTLV_elementIdentifier_oer_ext_arr_, 0, ProtocolConfigOptionsTLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t ProtocolConfigOptionsTLV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.ProtocolConfigOptionsTLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &ProtocolConfigOptionsTLV_elementIdentifier_xer_, &OCTETSTRING_json_, &ProtocolConfigOptionsTLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ProtocolConfigOptionsTLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t ProtocolConfigOptionsTLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       ProtocolConfigOptionsTLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ProtocolConfigOptionsTLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ProtocolConfigOptionsTLV_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.ProtocolConfigOptionsTLV.lengthIndicator", &INTEGER_ber_, &ProtocolConfigOptionsTLV_lengthIndicator_raw_, &INTEGER_text_, &ProtocolConfigOptionsTLV_lengthIndicator_xer_, &INTEGER_json_, &ProtocolConfigOptionsTLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ProtocolConfigOptionsTLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       ProtocolConfigOptionsV_configProtocol_xer_ = { {"configProtocol>\n", "configProtocol>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ProtocolConfigOptionsV_configProtocol_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ProtocolConfigOptionsV_configProtocol_descr_ = { "@MobileL3_GMM_SM_Types.ProtocolConfigOptionsV.configProtocol", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &ProtocolConfigOptionsV_configProtocol_xer_, &BITSTRING_json_, &ProtocolConfigOptionsV_configProtocol_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ProtocolConfigOptionsV_configProtocol_default_coding("RAW");
const XERdescriptor_t       ProtocolConfigOptionsV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ProtocolConfigOptionsV_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ProtocolConfigOptionsV_spare_descr_ = { "@MobileL3_GMM_SM_Types.ProtocolConfigOptionsV.spare", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &ProtocolConfigOptionsV_spare_xer_, &BITSTRING_json_, &ProtocolConfigOptionsV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ProtocolConfigOptionsV_spare_default_coding("RAW");
const XERdescriptor_t       ProtocolConfigOptionsV_extensionField_xer_ = { {"extensionField>\n", "extensionField>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ProtocolConfigOptionsV_extensionField_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ProtocolConfigOptionsV_extensionField_descr_ = { "@MobileL3_GMM_SM_Types.ProtocolConfigOptionsV.extensionField", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &ProtocolConfigOptionsV_extensionField_xer_, &BITSTRING_json_, &ProtocolConfigOptionsV_extensionField_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ProtocolConfigOptionsV_extensionField_default_coding("RAW");
const TTCN_RAWdescriptor_t ProtocolConfigOptionsV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ProtocolConfigOptionsV
const TTCN_Typedescriptor_t ProtocolConfigOptionsV_descr_ = { "@MobileL3_GMM_SM_Types.ProtocolConfigOptionsV", NULL, &ProtocolConfigOptionsV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const TTCN_RAWdescriptor_t ProtocolIDs__and__ContainerIDs_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ProtocolIDs__and__ContainerIDs
const TTCN_Typedescriptor_t ProtocolIDs__and__ContainerIDs_descr_ = { "@MobileL3_GMM_SM_Types.ProtocolIDs_and_ContainerIDs", NULL, &ProtocolIDs__and__ContainerIDs_raw_, NULL, NULL, NULL, NULL, NULL, &ProtocolID__or__ContainerID_descr_, TTCN_Typedescriptor_t::DONTCARE };
const XERdescriptor_t       ProtocolID__or__ContainerID_protocolID__or__ContainerID_xer_ = { {"protocolID_or_ContainerID>\n", "protocolID_or_ContainerID>\n"}, {27, 27}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int ProtocolID__or__ContainerID_protocolID__or__ContainerID_oer_ext_arr_[0] = {};
const int ProtocolID__or__ContainerID_protocolID__or__ContainerID_oer_p_[0] = {};
const TTCN_OERdescriptor_t ProtocolID__or__ContainerID_protocolID__or__ContainerID_oer_ = { -1, TRUE, 2, FALSE, 0, 0, ProtocolID__or__ContainerID_protocolID__or__ContainerID_oer_ext_arr_, 0, ProtocolID__or__ContainerID_protocolID__or__ContainerID_oer_p_};
const TTCN_Typedescriptor_t ProtocolID__or__ContainerID_protocolID__or__ContainerID_descr_ = { "@MobileL3_GMM_SM_Types.ProtocolID_or_ContainerID.protocolID_or_ContainerID", &OCTETSTRING_ber_, &General__Types::OCT2_raw_, &OCTETSTRING_text_, &ProtocolID__or__ContainerID_protocolID__or__ContainerID_xer_, &OCTETSTRING_json_, &ProtocolID__or__ContainerID_protocolID__or__ContainerID_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ProtocolID__or__ContainerID_protocolID__or__ContainerID_default_coding("RAW");
const TTCN_RAWdescriptor_t ProtocolID__or__ContainerID_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       ProtocolID__or__ContainerID_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ProtocolID__or__ContainerID_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ProtocolID__or__ContainerID_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.ProtocolID_or_ContainerID.lengthIndicator", &INTEGER_ber_, &ProtocolID__or__ContainerID_lengthIndicator_raw_, &INTEGER_text_, &ProtocolID__or__ContainerID_lengthIndicator_xer_, &INTEGER_json_, &ProtocolID__or__ContainerID_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ProtocolID__or__ContainerID_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       ProtocolID__or__ContainerID_protID__orContID__Contents_xer_ = { {"protID_orContID_Contents>\n", "protID_orContID_Contents>\n"}, {26, 26}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int ProtocolID__or__ContainerID_protID__orContID__Contents_oer_ext_arr_[0] = {};
const int ProtocolID__or__ContainerID_protID__orContID__Contents_oer_p_[0] = {};
const TTCN_OERdescriptor_t ProtocolID__or__ContainerID_protID__orContID__Contents_oer_ = { -1, TRUE, -1, FALSE, 0, 0, ProtocolID__or__ContainerID_protID__orContID__Contents_oer_ext_arr_, 0, ProtocolID__or__ContainerID_protID__orContID__Contents_oer_p_};
const TTCN_Typedescriptor_t ProtocolID__or__ContainerID_protID__orContID__Contents_descr_ = { "@MobileL3_GMM_SM_Types.ProtocolID_or_ContainerID.protID_orContID_Contents", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &ProtocolID__or__ContainerID_protID__orContID__Contents_xer_, &OCTETSTRING_json_, &ProtocolID__or__ContainerID_protID__orContID__Contents_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ProtocolID__or__ContainerID_protID__orContID__Contents_default_coding("RAW");
const TTCN_RAWdescriptor_t ProtocolID__or__ContainerID_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ProtocolID__or__ContainerID
const TTCN_Typedescriptor_t ProtocolID__or__ContainerID_descr_ = { "@MobileL3_GMM_SM_Types.ProtocolID_or_ContainerID", NULL, &ProtocolID__or__ContainerID_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ProtocolID__or__ContainerID_default_coding("RAW");
UNIVERSAL_CHARSTRING ProtocolIDs__and__ContainerIDs_0_default_coding("RAW");
UNIVERSAL_CHARSTRING ProtocolIDs__and__ContainerIDs_default_coding("RAW");
UNIVERSAL_CHARSTRING ProtocolConfigOptionsV_protocolIDs__and__ContainerIDs_default_coding("RAW");
UNIVERSAL_CHARSTRING ProtocolConfigOptionsV_default_coding("RAW");
UNIVERSAL_CHARSTRING ProtocolConfigOptionsTLV_protocolConfigOptionsV_default_coding("RAW");
const TTCN_RAWdescriptor_t ProtocolConfigOptionsTLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ProtocolConfigOptionsTLV
const TTCN_Typedescriptor_t ProtocolConfigOptionsTLV_descr_ = { "@MobileL3_GMM_SM_Types.ProtocolConfigOptionsTLV", NULL, &ProtocolConfigOptionsTLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ProtocolConfigOptionsTLV_default_coding("RAW");
const XERdescriptor_t       PDPAddressTLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDPAddressTLV_elementIdentifier_oer_ext_arr_[0] = {};
const int PDPAddressTLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDPAddressTLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, PDPAddressTLV_elementIdentifier_oer_ext_arr_, 0, PDPAddressTLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t PDPAddressTLV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.PDPAddressTLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &PDPAddressTLV_elementIdentifier_xer_, &OCTETSTRING_json_, &PDPAddressTLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDPAddressTLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t PDPAddressLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       PDPAddressLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDPAddressLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDPAddressLV_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.PDPAddressLV.lengthIndicator", &INTEGER_ber_, &PDPAddressLV_lengthIndicator_raw_, &INTEGER_text_, &PDPAddressLV_lengthIndicator_xer_, &INTEGER_json_, &PDPAddressLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDPAddressLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       PDPAddressV_pdpTypeOrg_xer_ = { {"pdpTypeOrg>\n", "pdpTypeOrg>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDPAddressV_pdpTypeOrg_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDPAddressV_pdpTypeOrg_descr_ = { "@MobileL3_GMM_SM_Types.PDPAddressV.pdpTypeOrg", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &PDPAddressV_pdpTypeOrg_xer_, &BITSTRING_json_, &PDPAddressV_pdpTypeOrg_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDPAddressV_pdpTypeOrg_default_coding("RAW");
const XERdescriptor_t       PDPAddressV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDPAddressV_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDPAddressV_spare_descr_ = { "@MobileL3_GMM_SM_Types.PDPAddressV.spare", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &PDPAddressV_spare_xer_, &BITSTRING_json_, &PDPAddressV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDPAddressV_spare_default_coding("RAW");
const XERdescriptor_t       PDPAddressV_pdpTypeNum_xer_ = { {"pdpTypeNum>\n", "pdpTypeNum>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDPAddressV_pdpTypeNum_oer_ext_arr_[0] = {};
const int PDPAddressV_pdpTypeNum_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDPAddressV_pdpTypeNum_oer_ = { -1, TRUE, 1, FALSE, 0, 0, PDPAddressV_pdpTypeNum_oer_ext_arr_, 0, PDPAddressV_pdpTypeNum_oer_p_};
const TTCN_Typedescriptor_t PDPAddressV_pdpTypeNum_descr_ = { "@MobileL3_GMM_SM_Types.PDPAddressV.pdpTypeNum", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &PDPAddressV_pdpTypeNum_xer_, &OCTETSTRING_json_, &PDPAddressV_pdpTypeNum_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDPAddressV_pdpTypeNum_default_coding("RAW");
const TTCN_RAWdescriptor_t PDPAddressV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDPAddressV
const TTCN_Typedescriptor_t PDPAddressV_descr_ = { "@MobileL3_GMM_SM_Types.PDPAddressV", NULL, &PDPAddressV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const XERdescriptor_t       PDPAddressV_addressInfo_xer_ = { {"addressInfo>\n", "addressInfo>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDPAddressV_addressInfo_oer_ext_arr_[0] = {};
const int PDPAddressV_addressInfo_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDPAddressV_addressInfo_oer_ = { -1, TRUE, -1, FALSE, 0, 0, PDPAddressV_addressInfo_oer_ext_arr_, 0, PDPAddressV_addressInfo_oer_p_};
const TTCN_Typedescriptor_t PDPAddressV_addressInfo_descr_ = { "@MobileL3_GMM_SM_Types.PDPAddressV.addressInfo", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &PDPAddressV_addressInfo_xer_, &OCTETSTRING_json_, &PDPAddressV_addressInfo_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDPAddressV_addressInfo_default_coding("RAW");
UNIVERSAL_CHARSTRING PDPAddressV_default_coding("RAW");
UNIVERSAL_CHARSTRING PDPAddressLV_pdpAddressV_default_coding("RAW");
const TTCN_RAWdescriptor_t PDPAddressLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDPAddressLV
const TTCN_Typedescriptor_t PDPAddressLV_descr_ = { "@MobileL3_GMM_SM_Types.PDPAddressLV", NULL, &PDPAddressLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDPAddressLV_default_coding("RAW");
UNIVERSAL_CHARSTRING PDPAddressTLV_pDPAddressLV_default_coding("RAW");
const TTCN_RAWdescriptor_t PDPAddressTLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDPAddressTLV
const TTCN_Typedescriptor_t PDPAddressTLV_descr_ = { "@MobileL3_GMM_SM_Types.PDPAddressTLV", NULL, &PDPAddressTLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDPAddressTLV_default_coding("RAW");
const XERdescriptor_t       QoSTLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int QoSTLV_elementIdentifier_oer_ext_arr_[0] = {};
const int QoSTLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t QoSTLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, QoSTLV_elementIdentifier_oer_ext_arr_, 0, QoSTLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t QoSTLV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.QoSTLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &QoSTLV_elementIdentifier_xer_, &OCTETSTRING_json_, &QoSTLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSTLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t QoSLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       QoSLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t QoSLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t QoSLV_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.QoSLV.lengthIndicator", &INTEGER_ber_, &QoSLV_lengthIndicator_raw_, &INTEGER_text_, &QoSLV_lengthIndicator_xer_, &INTEGER_json_, &QoSLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       QoSV_reliabilityClass_xer_ = { {"reliabilityClass>\n", "reliabilityClass>\n"}, {18, 18}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t QoSV_reliabilityClass_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t QoSV_reliabilityClass_descr_ = { "@MobileL3_GMM_SM_Types.QoSV.reliabilityClass", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &QoSV_reliabilityClass_xer_, &BITSTRING_json_, &QoSV_reliabilityClass_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSV_reliabilityClass_default_coding("RAW");
const XERdescriptor_t       QoSV_delayClass_xer_ = { {"delayClass>\n", "delayClass>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t QoSV_delayClass_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t QoSV_delayClass_descr_ = { "@MobileL3_GMM_SM_Types.QoSV.delayClass", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &QoSV_delayClass_xer_, &BITSTRING_json_, &QoSV_delayClass_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSV_delayClass_default_coding("RAW");
const XERdescriptor_t       QoSV_spare1_xer_ = { {"spare1>\n", "spare1>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t QoSV_spare1_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t QoSV_spare1_descr_ = { "@MobileL3_GMM_SM_Types.QoSV.spare1", &BITSTRING_ber_, &General__Types::BIT2_raw_, NULL, &QoSV_spare1_xer_, &BITSTRING_json_, &QoSV_spare1_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSV_spare1_default_coding("RAW");
const XERdescriptor_t       QoSV_precedenceClass_xer_ = { {"precedenceClass>\n", "precedenceClass>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t QoSV_precedenceClass_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t QoSV_precedenceClass_descr_ = { "@MobileL3_GMM_SM_Types.QoSV.precedenceClass", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &QoSV_precedenceClass_xer_, &BITSTRING_json_, &QoSV_precedenceClass_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSV_precedenceClass_default_coding("RAW");
const XERdescriptor_t       QoSV_spare2_xer_ = { {"spare2>\n", "spare2>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t QoSV_spare2_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t QoSV_spare2_descr_ = { "@MobileL3_GMM_SM_Types.QoSV.spare2", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &QoSV_spare2_xer_, &BITSTRING_json_, &QoSV_spare2_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSV_spare2_default_coding("RAW");
const XERdescriptor_t       QoSV_peakThroughput_xer_ = { {"peakThroughput>\n", "peakThroughput>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t QoSV_peakThroughput_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t QoSV_peakThroughput_descr_ = { "@MobileL3_GMM_SM_Types.QoSV.peakThroughput", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &QoSV_peakThroughput_xer_, &BITSTRING_json_, &QoSV_peakThroughput_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSV_peakThroughput_default_coding("RAW");
const XERdescriptor_t       QoSV_meanThroughput_xer_ = { {"meanThroughput>\n", "meanThroughput>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t QoSV_meanThroughput_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t QoSV_meanThroughput_descr_ = { "@MobileL3_GMM_SM_Types.QoSV.meanThroughput", &BITSTRING_ber_, &General__Types::BIT5_raw_, NULL, &QoSV_meanThroughput_xer_, &BITSTRING_json_, &QoSV_meanThroughput_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSV_meanThroughput_default_coding("RAW");
const XERdescriptor_t       QoSV_spare3_xer_ = { {"spare3>\n", "spare3>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t QoSV_spare3_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t QoSV_spare3_descr_ = { "@MobileL3_GMM_SM_Types.QoSV.spare3", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &QoSV_spare3_xer_, &BITSTRING_json_, &QoSV_spare3_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSV_spare3_default_coding("RAW");
const TTCN_RAWdescriptor_t QoSV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for QoSV
const TTCN_Typedescriptor_t QoSV_descr_ = { "@MobileL3_GMM_SM_Types.QoSV", NULL, &QoSV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const XERdescriptor_t       QoSV_deliverErroneusSDU_xer_ = { {"deliverErroneusSDU>\n", "deliverErroneusSDU>\n"}, {20, 20}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t QoSV_deliverErroneusSDU_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t QoSV_deliverErroneusSDU_descr_ = { "@MobileL3_GMM_SM_Types.QoSV.deliverErroneusSDU", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &QoSV_deliverErroneusSDU_xer_, &BITSTRING_json_, &QoSV_deliverErroneusSDU_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSV_deliverErroneusSDU_default_coding("RAW");
const XERdescriptor_t       QoSV_deliveryOrder_xer_ = { {"deliveryOrder>\n", "deliveryOrder>\n"}, {15, 15}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t QoSV_deliveryOrder_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t QoSV_deliveryOrder_descr_ = { "@MobileL3_GMM_SM_Types.QoSV.deliveryOrder", &BITSTRING_ber_, &General__Types::BIT2_raw_, NULL, &QoSV_deliveryOrder_xer_, &BITSTRING_json_, &QoSV_deliveryOrder_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSV_deliveryOrder_default_coding("RAW");
const XERdescriptor_t       QoSV_trafficClass_xer_ = { {"trafficClass>\n", "trafficClass>\n"}, {14, 14}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t QoSV_trafficClass_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t QoSV_trafficClass_descr_ = { "@MobileL3_GMM_SM_Types.QoSV.trafficClass", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &QoSV_trafficClass_xer_, &BITSTRING_json_, &QoSV_trafficClass_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSV_trafficClass_default_coding("RAW");
const XERdescriptor_t       QoSV_maxSDUSize_xer_ = { {"maxSDUSize>\n", "maxSDUSize>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int QoSV_maxSDUSize_oer_ext_arr_[0] = {};
const int QoSV_maxSDUSize_oer_p_[0] = {};
const TTCN_OERdescriptor_t QoSV_maxSDUSize_oer_ = { -1, TRUE, 1, FALSE, 0, 0, QoSV_maxSDUSize_oer_ext_arr_, 0, QoSV_maxSDUSize_oer_p_};
const TTCN_Typedescriptor_t QoSV_maxSDUSize_descr_ = { "@MobileL3_GMM_SM_Types.QoSV.maxSDUSize", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &QoSV_maxSDUSize_xer_, &OCTETSTRING_json_, &QoSV_maxSDUSize_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSV_maxSDUSize_default_coding("RAW");
const XERdescriptor_t       QoSV_maxBitrateUplink_xer_ = { {"maxBitrateUplink>\n", "maxBitrateUplink>\n"}, {18, 18}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int QoSV_maxBitrateUplink_oer_ext_arr_[0] = {};
const int QoSV_maxBitrateUplink_oer_p_[0] = {};
const TTCN_OERdescriptor_t QoSV_maxBitrateUplink_oer_ = { -1, TRUE, 1, FALSE, 0, 0, QoSV_maxBitrateUplink_oer_ext_arr_, 0, QoSV_maxBitrateUplink_oer_p_};
const TTCN_Typedescriptor_t QoSV_maxBitrateUplink_descr_ = { "@MobileL3_GMM_SM_Types.QoSV.maxBitrateUplink", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &QoSV_maxBitrateUplink_xer_, &OCTETSTRING_json_, &QoSV_maxBitrateUplink_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSV_maxBitrateUplink_default_coding("RAW");
const XERdescriptor_t       QoSV_maxBitrateDownlink_xer_ = { {"maxBitrateDownlink>\n", "maxBitrateDownlink>\n"}, {20, 20}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int QoSV_maxBitrateDownlink_oer_ext_arr_[0] = {};
const int QoSV_maxBitrateDownlink_oer_p_[0] = {};
const TTCN_OERdescriptor_t QoSV_maxBitrateDownlink_oer_ = { -1, TRUE, 1, FALSE, 0, 0, QoSV_maxBitrateDownlink_oer_ext_arr_, 0, QoSV_maxBitrateDownlink_oer_p_};
const TTCN_Typedescriptor_t QoSV_maxBitrateDownlink_descr_ = { "@MobileL3_GMM_SM_Types.QoSV.maxBitrateDownlink", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &QoSV_maxBitrateDownlink_xer_, &OCTETSTRING_json_, &QoSV_maxBitrateDownlink_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSV_maxBitrateDownlink_default_coding("RAW");
const XERdescriptor_t       QoSV_sduErrorRatio_xer_ = { {"sduErrorRatio>\n", "sduErrorRatio>\n"}, {15, 15}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t QoSV_sduErrorRatio_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t QoSV_sduErrorRatio_descr_ = { "@MobileL3_GMM_SM_Types.QoSV.sduErrorRatio", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &QoSV_sduErrorRatio_xer_, &BITSTRING_json_, &QoSV_sduErrorRatio_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSV_sduErrorRatio_default_coding("RAW");
const XERdescriptor_t       QoSV_residualBER_xer_ = { {"residualBER>\n", "residualBER>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t QoSV_residualBER_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t QoSV_residualBER_descr_ = { "@MobileL3_GMM_SM_Types.QoSV.residualBER", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &QoSV_residualBER_xer_, &BITSTRING_json_, &QoSV_residualBER_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSV_residualBER_default_coding("RAW");
const XERdescriptor_t       QoSV_trafficHandlingPriority_xer_ = { {"trafficHandlingPriority>\n", "trafficHandlingPriority>\n"}, {25, 25}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t QoSV_trafficHandlingPriority_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t QoSV_trafficHandlingPriority_descr_ = { "@MobileL3_GMM_SM_Types.QoSV.trafficHandlingPriority", &BITSTRING_ber_, &General__Types::BIT2_raw_, NULL, &QoSV_trafficHandlingPriority_xer_, &BITSTRING_json_, &QoSV_trafficHandlingPriority_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSV_trafficHandlingPriority_default_coding("RAW");
const XERdescriptor_t       QoSV_transferDelay_xer_ = { {"transferDelay>\n", "transferDelay>\n"}, {15, 15}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t QoSV_transferDelay_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t QoSV_transferDelay_descr_ = { "@MobileL3_GMM_SM_Types.QoSV.transferDelay", &BITSTRING_ber_, &General__Types::BIT6_raw_, NULL, &QoSV_transferDelay_xer_, &BITSTRING_json_, &QoSV_transferDelay_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSV_transferDelay_default_coding("RAW");
const XERdescriptor_t       QoSV_guaranteedBitRateUplink_xer_ = { {"guaranteedBitRateUplink>\n", "guaranteedBitRateUplink>\n"}, {25, 25}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int QoSV_guaranteedBitRateUplink_oer_ext_arr_[0] = {};
const int QoSV_guaranteedBitRateUplink_oer_p_[0] = {};
const TTCN_OERdescriptor_t QoSV_guaranteedBitRateUplink_oer_ = { -1, TRUE, 1, FALSE, 0, 0, QoSV_guaranteedBitRateUplink_oer_ext_arr_, 0, QoSV_guaranteedBitRateUplink_oer_p_};
const TTCN_Typedescriptor_t QoSV_guaranteedBitRateUplink_descr_ = { "@MobileL3_GMM_SM_Types.QoSV.guaranteedBitRateUplink", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &QoSV_guaranteedBitRateUplink_xer_, &OCTETSTRING_json_, &QoSV_guaranteedBitRateUplink_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSV_guaranteedBitRateUplink_default_coding("RAW");
const XERdescriptor_t       QoSV_guaranteedBitRateDownlink_xer_ = { {"guaranteedBitRateDownlink>\n", "guaranteedBitRateDownlink>\n"}, {27, 27}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int QoSV_guaranteedBitRateDownlink_oer_ext_arr_[0] = {};
const int QoSV_guaranteedBitRateDownlink_oer_p_[0] = {};
const TTCN_OERdescriptor_t QoSV_guaranteedBitRateDownlink_oer_ = { -1, TRUE, 1, FALSE, 0, 0, QoSV_guaranteedBitRateDownlink_oer_ext_arr_, 0, QoSV_guaranteedBitRateDownlink_oer_p_};
const TTCN_Typedescriptor_t QoSV_guaranteedBitRateDownlink_descr_ = { "@MobileL3_GMM_SM_Types.QoSV.guaranteedBitRateDownlink", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &QoSV_guaranteedBitRateDownlink_xer_, &OCTETSTRING_json_, &QoSV_guaranteedBitRateDownlink_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSV_guaranteedBitRateDownlink_default_coding("RAW");
const XERdescriptor_t       QoSV_sourceStatisticsDescriptor_xer_ = { {"sourceStatisticsDescriptor>\n", "sourceStatisticsDescriptor>\n"}, {28, 28}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t QoSV_sourceStatisticsDescriptor_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t QoSV_sourceStatisticsDescriptor_descr_ = { "@MobileL3_GMM_SM_Types.QoSV.sourceStatisticsDescriptor", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &QoSV_sourceStatisticsDescriptor_xer_, &BITSTRING_json_, &QoSV_sourceStatisticsDescriptor_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSV_sourceStatisticsDescriptor_default_coding("RAW");
const XERdescriptor_t       QoSV_signallingIndication_xer_ = { {"signallingIndication>\n", "signallingIndication>\n"}, {22, 22}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t QoSV_signallingIndication_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t QoSV_signallingIndication_descr_ = { "@MobileL3_GMM_SM_Types.QoSV.signallingIndication", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &QoSV_signallingIndication_xer_, &BITSTRING_json_, &QoSV_signallingIndication_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSV_signallingIndication_default_coding("RAW");
const XERdescriptor_t       QoSV_spare4_xer_ = { {"spare4>\n", "spare4>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t QoSV_spare4_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t QoSV_spare4_descr_ = { "@MobileL3_GMM_SM_Types.QoSV.spare4", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &QoSV_spare4_xer_, &BITSTRING_json_, &QoSV_spare4_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSV_spare4_default_coding("RAW");
const XERdescriptor_t       QoSV_maxBitrateDownlinkExt_xer_ = { {"maxBitrateDownlinkExt>\n", "maxBitrateDownlinkExt>\n"}, {23, 23}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int QoSV_maxBitrateDownlinkExt_oer_ext_arr_[0] = {};
const int QoSV_maxBitrateDownlinkExt_oer_p_[0] = {};
const TTCN_OERdescriptor_t QoSV_maxBitrateDownlinkExt_oer_ = { -1, TRUE, 1, FALSE, 0, 0, QoSV_maxBitrateDownlinkExt_oer_ext_arr_, 0, QoSV_maxBitrateDownlinkExt_oer_p_};
const TTCN_Typedescriptor_t QoSV_maxBitrateDownlinkExt_descr_ = { "@MobileL3_GMM_SM_Types.QoSV.maxBitrateDownlinkExt", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &QoSV_maxBitrateDownlinkExt_xer_, &OCTETSTRING_json_, &QoSV_maxBitrateDownlinkExt_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSV_maxBitrateDownlinkExt_default_coding("RAW");
const XERdescriptor_t       QoSV_guaranteedBitRateDownlinkExt_xer_ = { {"guaranteedBitRateDownlinkExt>\n", "guaranteedBitRateDownlinkExt>\n"}, {30, 30}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int QoSV_guaranteedBitRateDownlinkExt_oer_ext_arr_[0] = {};
const int QoSV_guaranteedBitRateDownlinkExt_oer_p_[0] = {};
const TTCN_OERdescriptor_t QoSV_guaranteedBitRateDownlinkExt_oer_ = { -1, TRUE, 1, FALSE, 0, 0, QoSV_guaranteedBitRateDownlinkExt_oer_ext_arr_, 0, QoSV_guaranteedBitRateDownlinkExt_oer_p_};
const TTCN_Typedescriptor_t QoSV_guaranteedBitRateDownlinkExt_descr_ = { "@MobileL3_GMM_SM_Types.QoSV.guaranteedBitRateDownlinkExt", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &QoSV_guaranteedBitRateDownlinkExt_xer_, &OCTETSTRING_json_, &QoSV_guaranteedBitRateDownlinkExt_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSV_guaranteedBitRateDownlinkExt_default_coding("RAW");
const XERdescriptor_t       QoSV_maxBitrateUplinkExt_xer_ = { {"maxBitrateUplinkExt>\n", "maxBitrateUplinkExt>\n"}, {21, 21}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int QoSV_maxBitrateUplinkExt_oer_ext_arr_[0] = {};
const int QoSV_maxBitrateUplinkExt_oer_p_[0] = {};
const TTCN_OERdescriptor_t QoSV_maxBitrateUplinkExt_oer_ = { -1, TRUE, 1, FALSE, 0, 0, QoSV_maxBitrateUplinkExt_oer_ext_arr_, 0, QoSV_maxBitrateUplinkExt_oer_p_};
const TTCN_Typedescriptor_t QoSV_maxBitrateUplinkExt_descr_ = { "@MobileL3_GMM_SM_Types.QoSV.maxBitrateUplinkExt", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &QoSV_maxBitrateUplinkExt_xer_, &OCTETSTRING_json_, &QoSV_maxBitrateUplinkExt_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSV_maxBitrateUplinkExt_default_coding("RAW");
const XERdescriptor_t       QoSV_guaranteedBitRateUplinkExt_xer_ = { {"guaranteedBitRateUplinkExt>\n", "guaranteedBitRateUplinkExt>\n"}, {28, 28}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int QoSV_guaranteedBitRateUplinkExt_oer_ext_arr_[0] = {};
const int QoSV_guaranteedBitRateUplinkExt_oer_p_[0] = {};
const TTCN_OERdescriptor_t QoSV_guaranteedBitRateUplinkExt_oer_ = { -1, TRUE, 1, FALSE, 0, 0, QoSV_guaranteedBitRateUplinkExt_oer_ext_arr_, 0, QoSV_guaranteedBitRateUplinkExt_oer_p_};
const TTCN_Typedescriptor_t QoSV_guaranteedBitRateUplinkExt_descr_ = { "@MobileL3_GMM_SM_Types.QoSV.guaranteedBitRateUplinkExt", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &QoSV_guaranteedBitRateUplinkExt_xer_, &OCTETSTRING_json_, &QoSV_guaranteedBitRateUplinkExt_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSV_guaranteedBitRateUplinkExt_default_coding("RAW");
const XERdescriptor_t       QoSV_maxBitrateDownlinkExt2_xer_ = { {"maxBitrateDownlinkExt2>\n", "maxBitrateDownlinkExt2>\n"}, {24, 24}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int QoSV_maxBitrateDownlinkExt2_oer_ext_arr_[0] = {};
const int QoSV_maxBitrateDownlinkExt2_oer_p_[0] = {};
const TTCN_OERdescriptor_t QoSV_maxBitrateDownlinkExt2_oer_ = { -1, TRUE, 1, FALSE, 0, 0, QoSV_maxBitrateDownlinkExt2_oer_ext_arr_, 0, QoSV_maxBitrateDownlinkExt2_oer_p_};
const TTCN_Typedescriptor_t QoSV_maxBitrateDownlinkExt2_descr_ = { "@MobileL3_GMM_SM_Types.QoSV.maxBitrateDownlinkExt2", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &QoSV_maxBitrateDownlinkExt2_xer_, &OCTETSTRING_json_, &QoSV_maxBitrateDownlinkExt2_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSV_maxBitrateDownlinkExt2_default_coding("RAW");
const XERdescriptor_t       QoSV_guaranteedBitRateDownlinkExt2_xer_ = { {"guaranteedBitRateDownlinkExt2>\n", "guaranteedBitRateDownlinkExt2>\n"}, {31, 31}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int QoSV_guaranteedBitRateDownlinkExt2_oer_ext_arr_[0] = {};
const int QoSV_guaranteedBitRateDownlinkExt2_oer_p_[0] = {};
const TTCN_OERdescriptor_t QoSV_guaranteedBitRateDownlinkExt2_oer_ = { -1, TRUE, 1, FALSE, 0, 0, QoSV_guaranteedBitRateDownlinkExt2_oer_ext_arr_, 0, QoSV_guaranteedBitRateDownlinkExt2_oer_p_};
const TTCN_Typedescriptor_t QoSV_guaranteedBitRateDownlinkExt2_descr_ = { "@MobileL3_GMM_SM_Types.QoSV.guaranteedBitRateDownlinkExt2", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &QoSV_guaranteedBitRateDownlinkExt2_xer_, &OCTETSTRING_json_, &QoSV_guaranteedBitRateDownlinkExt2_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSV_guaranteedBitRateDownlinkExt2_default_coding("RAW");
const XERdescriptor_t       QoSV_maxBitrateUplinkExt2_xer_ = { {"maxBitrateUplinkExt2>\n", "maxBitrateUplinkExt2>\n"}, {22, 22}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int QoSV_maxBitrateUplinkExt2_oer_ext_arr_[0] = {};
const int QoSV_maxBitrateUplinkExt2_oer_p_[0] = {};
const TTCN_OERdescriptor_t QoSV_maxBitrateUplinkExt2_oer_ = { -1, TRUE, 1, FALSE, 0, 0, QoSV_maxBitrateUplinkExt2_oer_ext_arr_, 0, QoSV_maxBitrateUplinkExt2_oer_p_};
const TTCN_Typedescriptor_t QoSV_maxBitrateUplinkExt2_descr_ = { "@MobileL3_GMM_SM_Types.QoSV.maxBitrateUplinkExt2", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &QoSV_maxBitrateUplinkExt2_xer_, &OCTETSTRING_json_, &QoSV_maxBitrateUplinkExt2_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSV_maxBitrateUplinkExt2_default_coding("RAW");
const XERdescriptor_t       QoSV_guaranteedBitRateUplinkExt2_xer_ = { {"guaranteedBitRateUplinkExt2>\n", "guaranteedBitRateUplinkExt2>\n"}, {29, 29}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int QoSV_guaranteedBitRateUplinkExt2_oer_ext_arr_[0] = {};
const int QoSV_guaranteedBitRateUplinkExt2_oer_p_[0] = {};
const TTCN_OERdescriptor_t QoSV_guaranteedBitRateUplinkExt2_oer_ = { -1, TRUE, 1, FALSE, 0, 0, QoSV_guaranteedBitRateUplinkExt2_oer_ext_arr_, 0, QoSV_guaranteedBitRateUplinkExt2_oer_p_};
const TTCN_Typedescriptor_t QoSV_guaranteedBitRateUplinkExt2_descr_ = { "@MobileL3_GMM_SM_Types.QoSV.guaranteedBitRateUplinkExt2", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &QoSV_guaranteedBitRateUplinkExt2_xer_, &OCTETSTRING_json_, &QoSV_guaranteedBitRateUplinkExt2_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSV_guaranteedBitRateUplinkExt2_default_coding("RAW");
UNIVERSAL_CHARSTRING QoSV_default_coding("RAW");
UNIVERSAL_CHARSTRING QoSLV_qoSV_default_coding("RAW");
const TTCN_RAWdescriptor_t QoSLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for QoSLV
const TTCN_Typedescriptor_t QoSLV_descr_ = { "@MobileL3_GMM_SM_Types.QoSLV", NULL, &QoSLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSLV_default_coding("RAW");
UNIVERSAL_CHARSTRING QoSTLV_qoSLV_default_coding("RAW");
const TTCN_RAWdescriptor_t QoSTLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for QoSTLV
const TTCN_Typedescriptor_t QoSTLV_descr_ = { "@MobileL3_GMM_SM_Types.QoSTLV", NULL, &QoSTLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING QoSTLV_default_coding("RAW");
const XERdescriptor_t       ReAttemptIndicatorTLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int ReAttemptIndicatorTLV_elementIdentifier_oer_ext_arr_[0] = {};
const int ReAttemptIndicatorTLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t ReAttemptIndicatorTLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ReAttemptIndicatorTLV_elementIdentifier_oer_ext_arr_, 0, ReAttemptIndicatorTLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t ReAttemptIndicatorTLV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.ReAttemptIndicatorTLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &ReAttemptIndicatorTLV_elementIdentifier_xer_, &OCTETSTRING_json_, &ReAttemptIndicatorTLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ReAttemptIndicatorTLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t ReAttemptIndicatorLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       ReAttemptIndicatorLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ReAttemptIndicatorLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ReAttemptIndicatorLV_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.ReAttemptIndicatorLV.lengthIndicator", &INTEGER_ber_, &ReAttemptIndicatorLV_lengthIndicator_raw_, &INTEGER_text_, &ReAttemptIndicatorLV_lengthIndicator_xer_, &INTEGER_json_, &ReAttemptIndicatorLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ReAttemptIndicatorLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       ReAttemptIndicatorV_rATCValue_xer_ = { {"rATCValue>\n", "rATCValue>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ReAttemptIndicatorV_rATCValue_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ReAttemptIndicatorV_rATCValue_descr_ = { "@MobileL3_GMM_SM_Types.ReAttemptIndicatorV.rATCValue", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &ReAttemptIndicatorV_rATCValue_xer_, &BITSTRING_json_, &ReAttemptIndicatorV_rATCValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ReAttemptIndicatorV_rATCValue_default_coding("RAW");
const XERdescriptor_t       ReAttemptIndicatorV_ePLMNCValue_xer_ = { {"ePLMNCValue>\n", "ePLMNCValue>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ReAttemptIndicatorV_ePLMNCValue_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ReAttemptIndicatorV_ePLMNCValue_descr_ = { "@MobileL3_GMM_SM_Types.ReAttemptIndicatorV.ePLMNCValue", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &ReAttemptIndicatorV_ePLMNCValue_xer_, &BITSTRING_json_, &ReAttemptIndicatorV_ePLMNCValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ReAttemptIndicatorV_ePLMNCValue_default_coding("RAW");
const XERdescriptor_t       ReAttemptIndicatorV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ReAttemptIndicatorV_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ReAttemptIndicatorV_spare_descr_ = { "@MobileL3_GMM_SM_Types.ReAttemptIndicatorV.spare", &BITSTRING_ber_, &General__Types::BIT6_raw_, NULL, &ReAttemptIndicatorV_spare_xer_, &BITSTRING_json_, &ReAttemptIndicatorV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ReAttemptIndicatorV_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t ReAttemptIndicatorV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ReAttemptIndicatorV
const TTCN_Typedescriptor_t ReAttemptIndicatorV_descr_ = { "@MobileL3_GMM_SM_Types.ReAttemptIndicatorV", NULL, &ReAttemptIndicatorV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ReAttemptIndicatorV_default_coding("RAW");
UNIVERSAL_CHARSTRING ReAttemptIndicatorLV_reAttemptIndicatorV_default_coding("RAW");
const TTCN_RAWdescriptor_t ReAttemptIndicatorLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ReAttemptIndicatorLV
const TTCN_Typedescriptor_t ReAttemptIndicatorLV_descr_ = { "@MobileL3_GMM_SM_Types.ReAttemptIndicatorLV", NULL, &ReAttemptIndicatorLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ReAttemptIndicatorLV_default_coding("RAW");
UNIVERSAL_CHARSTRING ReAttemptIndicatorTLV_reAttemptIndicatorLV_default_coding("RAW");
const TTCN_RAWdescriptor_t ReAttemptIndicatorTLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ReAttemptIndicatorTLV
const TTCN_Typedescriptor_t ReAttemptIndicatorTLV_descr_ = { "@MobileL3_GMM_SM_Types.ReAttemptIndicatorTLV", NULL, &ReAttemptIndicatorTLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ReAttemptIndicatorTLV_default_coding("RAW");
const XERdescriptor_t       SMCauseV_xer_ = { {"SMCauseV>\n", "SMCauseV>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int SMCauseV_oer_ext_arr_[0] = {};
const int SMCauseV_oer_p_[0] = {};
const TTCN_OERdescriptor_t SMCauseV_oer_ = { -1, TRUE, 1, FALSE, 0, 0, SMCauseV_oer_ext_arr_, 0, SMCauseV_oer_p_};
const TTCN_Typedescriptor_t SMCauseV_descr_ = { "@MobileL3_GMM_SM_Types.SMCauseV", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &SMCauseV_xer_, &OCTETSTRING_json_, &SMCauseV_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING SMCauseV_default_coding("RAW");
const XERdescriptor_t       SMCause2TLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int SMCause2TLV_elementIdentifier_oer_ext_arr_[0] = {};
const int SMCause2TLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t SMCause2TLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, SMCause2TLV_elementIdentifier_oer_ext_arr_, 0, SMCause2TLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t SMCause2TLV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.SMCause2TLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &SMCause2TLV_elementIdentifier_xer_, &OCTETSTRING_json_, &SMCause2TLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING SMCause2TLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t SMCause2LV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       SMCause2LV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t SMCause2LV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t SMCause2LV_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.SMCause2LV.lengthIndicator", &INTEGER_ber_, &SMCause2LV_lengthIndicator_raw_, &INTEGER_text_, &SMCause2LV_lengthIndicator_xer_, &INTEGER_json_, &SMCause2LV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING SMCause2LV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       SMCause2LV_sMCause2V_xer_ = { {"sMCause2V>\n", "sMCause2V>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int SMCause2LV_sMCause2V_oer_ext_arr_[0] = {};
const int SMCause2LV_sMCause2V_oer_p_[0] = {};
const TTCN_OERdescriptor_t SMCause2LV_sMCause2V_oer_ = { -1, TRUE, 1, FALSE, 0, 0, SMCause2LV_sMCause2V_oer_ext_arr_, 0, SMCause2LV_sMCause2V_oer_p_};
const TTCN_Typedescriptor_t SMCause2LV_sMCause2V_descr_ = { "@MobileL3_GMM_SM_Types.SMCause2LV.sMCause2V", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &SMCause2LV_sMCause2V_xer_, &OCTETSTRING_json_, &SMCause2LV_sMCause2V_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING SMCause2LV_sMCause2V_default_coding("RAW");
const TTCN_RAWdescriptor_t SMCause2LV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for SMCause2LV
const TTCN_Typedescriptor_t SMCause2LV_descr_ = { "@MobileL3_GMM_SM_Types.SMCause2LV", NULL, &SMCause2LV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING SMCause2LV_default_coding("RAW");
UNIVERSAL_CHARSTRING SMCause2TLV_sMCause2LV_default_coding("RAW");
const TTCN_RAWdescriptor_t SMCause2TLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for SMCause2TLV
const TTCN_Typedescriptor_t SMCause2TLV_descr_ = { "@MobileL3_GMM_SM_Types.SMCause2TLV", NULL, &SMCause2TLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING SMCause2TLV_default_coding("RAW");
const XERdescriptor_t       LinkedTITLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int LinkedTITLV_elementIdentifier_oer_ext_arr_[0] = {};
const int LinkedTITLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t LinkedTITLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, LinkedTITLV_elementIdentifier_oer_ext_arr_, 0, LinkedTITLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t LinkedTITLV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.LinkedTITLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &LinkedTITLV_elementIdentifier_xer_, &OCTETSTRING_json_, &LinkedTITLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING LinkedTITLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t LinkedTILV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       LinkedTILV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t LinkedTILV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t LinkedTILV_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.LinkedTILV.lengthIndicator", &INTEGER_ber_, &LinkedTILV_lengthIndicator_raw_, &INTEGER_text_, &LinkedTILV_lengthIndicator_xer_, &INTEGER_json_, &LinkedTILV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING LinkedTILV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       LinkedTIV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t LinkedTIV_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t LinkedTIV_spare_descr_ = { "@MobileL3_GMM_SM_Types.LinkedTIV.spare", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &LinkedTIV_spare_xer_, &BITSTRING_json_, &LinkedTIV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING LinkedTIV_spare_default_coding("RAW");
const XERdescriptor_t       LinkedTIV_tio_xer_ = { {"tio>\n", "tio>\n"}, {5, 5}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t LinkedTIV_tio_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t LinkedTIV_tio_descr_ = { "@MobileL3_GMM_SM_Types.LinkedTIV.tio", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &LinkedTIV_tio_xer_, &BITSTRING_json_, &LinkedTIV_tio_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING LinkedTIV_tio_default_coding("RAW");
const XERdescriptor_t       LinkedTIV_tiFlag_xer_ = { {"tiFlag>\n", "tiFlag>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t LinkedTIV_tiFlag_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t LinkedTIV_tiFlag_descr_ = { "@MobileL3_GMM_SM_Types.LinkedTIV.tiFlag", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &LinkedTIV_tiFlag_xer_, &BITSTRING_json_, &LinkedTIV_tiFlag_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING LinkedTIV_tiFlag_default_coding("RAW");
const TTCN_RAWdescriptor_t LinkedTIV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for LinkedTIV
const TTCN_Typedescriptor_t LinkedTIV_descr_ = { "@MobileL3_GMM_SM_Types.LinkedTIV", NULL, &LinkedTIV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const XERdescriptor_t       TI__Extension_tI__Value_xer_ = { {"tI_Value>\n", "tI_Value>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t TI__Extension_tI__Value_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t TI__Extension_tI__Value_descr_ = { "@MobileL3_GMM_SM_Types.TI_Extension.tI_Value", &BITSTRING_ber_, &General__Types::BIT7_raw_, NULL, &TI__Extension_tI__Value_xer_, &BITSTRING_json_, &TI__Extension_tI__Value_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TI__Extension_tI__Value_default_coding("RAW");
const XERdescriptor_t       TI__Extension_tI__ExtBit_xer_ = { {"tI_ExtBit>\n", "tI_ExtBit>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t TI__Extension_tI__ExtBit_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t TI__Extension_tI__ExtBit_descr_ = { "@MobileL3_GMM_SM_Types.TI_Extension.tI_ExtBit", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &TI__Extension_tI__ExtBit_xer_, &BITSTRING_json_, &TI__Extension_tI__ExtBit_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TI__Extension_tI__ExtBit_default_coding("RAW");
const TTCN_RAWdescriptor_t TI__Extension_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for TI__Extension
const TTCN_Typedescriptor_t TI__Extension_descr_ = { "@MobileL3_GMM_SM_Types.TI_Extension", NULL, &TI__Extension_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TI__Extension_default_coding("RAW");
const TTCN_RAWdescriptor_t LinkedTIV_tIExtension_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for LinkedTIV_tIExtension
const TTCN_Typedescriptor_t LinkedTIV_tIExtension_descr_ = { "@MobileL3_GMM_SM_Types.LinkedTIV.tIExtension", NULL, &LinkedTIV_tIExtension_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING LinkedTIV_tIExtension_default_coding("RAW");
UNIVERSAL_CHARSTRING LinkedTIV_default_coding("RAW");
UNIVERSAL_CHARSTRING LinkedTILV_valueField_default_coding("RAW");
const TTCN_RAWdescriptor_t LinkedTILV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for LinkedTILV
const TTCN_Typedescriptor_t LinkedTILV_descr_ = { "@MobileL3_GMM_SM_Types.LinkedTILV", NULL, &LinkedTILV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING LinkedTILV_default_coding("RAW");
UNIVERSAL_CHARSTRING LinkedTITLV_linkedTILV_default_coding("RAW");
const TTCN_RAWdescriptor_t LinkedTITLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for LinkedTITLV
const TTCN_Typedescriptor_t LinkedTITLV_descr_ = { "@MobileL3_GMM_SM_Types.LinkedTITLV", NULL, &LinkedTITLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING LinkedTITLV_default_coding("RAW");
const XERdescriptor_t       LLC__SAPITV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int LLC__SAPITV_elementIdentifier_oer_ext_arr_[0] = {};
const int LLC__SAPITV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t LLC__SAPITV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, LLC__SAPITV_elementIdentifier_oer_ext_arr_, 0, LLC__SAPITV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t LLC__SAPITV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.LLC_SAPITV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &LLC__SAPITV_elementIdentifier_xer_, &OCTETSTRING_json_, &LLC__SAPITV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING LLC__SAPITV_elementIdentifier_default_coding("RAW");
const XERdescriptor_t       LLC__SAPIV_valueField_xer_ = { {"valueField>\n", "valueField>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t LLC__SAPIV_valueField_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t LLC__SAPIV_valueField_descr_ = { "@MobileL3_GMM_SM_Types.LLC_SAPIV.valueField", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &LLC__SAPIV_valueField_xer_, &BITSTRING_json_, &LLC__SAPIV_valueField_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING LLC__SAPIV_valueField_default_coding("RAW");
const XERdescriptor_t       LLC__SAPIV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t LLC__SAPIV_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t LLC__SAPIV_spare_descr_ = { "@MobileL3_GMM_SM_Types.LLC_SAPIV.spare", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &LLC__SAPIV_spare_xer_, &BITSTRING_json_, &LLC__SAPIV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING LLC__SAPIV_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t LLC__SAPIV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for LLC__SAPIV
const TTCN_Typedescriptor_t LLC__SAPIV_descr_ = { "@MobileL3_GMM_SM_Types.LLC_SAPIV", NULL, &LLC__SAPIV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING LLC__SAPIV_default_coding("RAW");
UNIVERSAL_CHARSTRING LLC__SAPITV_valueField_default_coding("RAW");
const TTCN_RAWdescriptor_t LLC__SAPITV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for LLC__SAPITV
const TTCN_Typedescriptor_t LLC__SAPITV_descr_ = { "@MobileL3_GMM_SM_Types.LLC_SAPITV", NULL, &LLC__SAPITV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING LLC__SAPITV_default_coding("RAW");
const XERdescriptor_t       TearDownIndicatorV_tdi__flag_xer_ = { {"tdi_flag>\n", "tdi_flag>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t TearDownIndicatorV_tdi__flag_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t TearDownIndicatorV_tdi__flag_descr_ = { "@MobileL3_GMM_SM_Types.TearDownIndicatorV.tdi_flag", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &TearDownIndicatorV_tdi__flag_xer_, &BITSTRING_json_, &TearDownIndicatorV_tdi__flag_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TearDownIndicatorV_tdi__flag_default_coding("RAW");
const XERdescriptor_t       TearDownIndicatorV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t TearDownIndicatorV_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t TearDownIndicatorV_spare_descr_ = { "@MobileL3_GMM_SM_Types.TearDownIndicatorV.spare", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &TearDownIndicatorV_spare_xer_, &BITSTRING_json_, &TearDownIndicatorV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TearDownIndicatorV_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t TearDownIndicatorV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for TearDownIndicatorV
const TTCN_Typedescriptor_t TearDownIndicatorV_descr_ = { "@MobileL3_GMM_SM_Types.TearDownIndicatorV", NULL, &TearDownIndicatorV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TearDownIndicatorV_default_coding("RAW");
UNIVERSAL_CHARSTRING TearDownIndicatorTV_tearDownIndicatorV_default_coding("RAW");
const XERdescriptor_t       TearDownIndicatorTV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t TearDownIndicatorTV_elementIdentifier_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t TearDownIndicatorTV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.TearDownIndicatorTV.elementIdentifier", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &TearDownIndicatorTV_elementIdentifier_xer_, &BITSTRING_json_, &TearDownIndicatorTV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TearDownIndicatorTV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t TearDownIndicatorTV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for TearDownIndicatorTV
const TTCN_Typedescriptor_t TearDownIndicatorTV_descr_ = { "@MobileL3_GMM_SM_Types.TearDownIndicatorTV", NULL, &TearDownIndicatorTV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TearDownIndicatorTV_default_coding("RAW");
const XERdescriptor_t       PacketFlowIDTLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PacketFlowIDTLV_elementIdentifier_oer_ext_arr_[0] = {};
const int PacketFlowIDTLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t PacketFlowIDTLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, PacketFlowIDTLV_elementIdentifier_oer_ext_arr_, 0, PacketFlowIDTLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t PacketFlowIDTLV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.PacketFlowIDTLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &PacketFlowIDTLV_elementIdentifier_xer_, &OCTETSTRING_json_, &PacketFlowIDTLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PacketFlowIDTLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t PacketFlowIDTLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       PacketFlowIDTLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PacketFlowIDTLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PacketFlowIDTLV_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.PacketFlowIDTLV.lengthIndicator", &INTEGER_ber_, &PacketFlowIDTLV_lengthIndicator_raw_, &INTEGER_text_, &PacketFlowIDTLV_lengthIndicator_xer_, &INTEGER_json_, &PacketFlowIDTLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PacketFlowIDTLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       PacketFlowIDV_valueField_xer_ = { {"valueField>\n", "valueField>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PacketFlowIDV_valueField_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PacketFlowIDV_valueField_descr_ = { "@MobileL3_GMM_SM_Types.PacketFlowIDV.valueField", &BITSTRING_ber_, &General__Types::BIT7_raw_, NULL, &PacketFlowIDV_valueField_xer_, &BITSTRING_json_, &PacketFlowIDV_valueField_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PacketFlowIDV_valueField_default_coding("RAW");
const XERdescriptor_t       PacketFlowIDV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PacketFlowIDV_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PacketFlowIDV_spare_descr_ = { "@MobileL3_GMM_SM_Types.PacketFlowIDV.spare", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &PacketFlowIDV_spare_xer_, &BITSTRING_json_, &PacketFlowIDV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PacketFlowIDV_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t PacketFlowIDV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PacketFlowIDV
const TTCN_Typedescriptor_t PacketFlowIDV_descr_ = { "@MobileL3_GMM_SM_Types.PacketFlowIDV", NULL, &PacketFlowIDV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PacketFlowIDV_default_coding("RAW");
UNIVERSAL_CHARSTRING PacketFlowIDTLV_valueField_default_coding("RAW");
const TTCN_RAWdescriptor_t PacketFlowIDTLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PacketFlowIDTLV
const TTCN_Typedescriptor_t PacketFlowIDTLV_descr_ = { "@MobileL3_GMM_SM_Types.PacketFlowIDTLV", NULL, &PacketFlowIDTLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PacketFlowIDTLV_default_coding("RAW");
const XERdescriptor_t       TrafficFlowTemplateTLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int TrafficFlowTemplateTLV_elementIdentifier_oer_ext_arr_[0] = {};
const int TrafficFlowTemplateTLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t TrafficFlowTemplateTLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, TrafficFlowTemplateTLV_elementIdentifier_oer_ext_arr_, 0, TrafficFlowTemplateTLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t TrafficFlowTemplateTLV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.TrafficFlowTemplateTLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &TrafficFlowTemplateTLV_elementIdentifier_xer_, &OCTETSTRING_json_, &TrafficFlowTemplateTLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TrafficFlowTemplateTLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t TrafficFlowTemplateLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       TrafficFlowTemplateLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t TrafficFlowTemplateLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t TrafficFlowTemplateLV_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.TrafficFlowTemplateLV.lengthIndicator", &INTEGER_ber_, &TrafficFlowTemplateLV_lengthIndicator_raw_, &INTEGER_text_, &TrafficFlowTemplateLV_lengthIndicator_xer_, &INTEGER_json_, &TrafficFlowTemplateLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TrafficFlowTemplateLV_lengthIndicator_default_coding("RAW");
const TTCN_RAWdescriptor_t TrafficFlowTemplateV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for TrafficFlowTemplateV
const TTCN_Typedescriptor_t TrafficFlowTemplateV_descr_ = { "@MobileL3_GMM_SM_Types.TrafficFlowTemplateV", NULL, &TrafficFlowTemplateV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const TTCN_RAWdescriptor_t TrafficFlowTemplateV__CreateAddReplaceTFT_numberOfPacketFilters_raw_ = {4,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,-1,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       TrafficFlowTemplateV__CreateAddReplaceTFT_numberOfPacketFilters_xer_ = { {"numberOfPacketFilters>\n", "numberOfPacketFilters>\n"}, {23, 23}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_Typedescriptor_t TrafficFlowTemplateV__CreateAddReplaceTFT_numberOfPacketFilters_descr_ = { "@MobileL3_GMM_SM_Types.TrafficFlowTemplateV_CreateAddReplaceTFT.numberOfPacketFilters", &INTEGER_ber_, &TrafficFlowTemplateV__CreateAddReplaceTFT_numberOfPacketFilters_raw_, &INTEGER_text_, &TrafficFlowTemplateV__CreateAddReplaceTFT_numberOfPacketFilters_xer_, &INTEGER_json_, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TrafficFlowTemplateV__CreateAddReplaceTFT_numberOfPacketFilters_default_coding("RAW");
const XERdescriptor_t       TrafficFlowTemplateV__CreateAddReplaceTFT_eBIT_xer_ = { {"eBIT>\n", "eBIT>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t TrafficFlowTemplateV__CreateAddReplaceTFT_eBIT_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t TrafficFlowTemplateV__CreateAddReplaceTFT_eBIT_descr_ = { "@MobileL3_GMM_SM_Types.TrafficFlowTemplateV_CreateAddReplaceTFT.eBIT", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &TrafficFlowTemplateV__CreateAddReplaceTFT_eBIT_xer_, &BITSTRING_json_, &TrafficFlowTemplateV__CreateAddReplaceTFT_eBIT_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TrafficFlowTemplateV__CreateAddReplaceTFT_eBIT_default_coding("RAW");
const XERdescriptor_t       TrafficFlowTemplateV__CreateAddReplaceTFT_operationCodeTFT_xer_ = { {"operationCodeTFT>\n", "operationCodeTFT>\n"}, {18, 18}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t TrafficFlowTemplateV__CreateAddReplaceTFT_operationCodeTFT_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t TrafficFlowTemplateV__CreateAddReplaceTFT_operationCodeTFT_descr_ = { "@MobileL3_GMM_SM_Types.TrafficFlowTemplateV_CreateAddReplaceTFT.operationCodeTFT", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &TrafficFlowTemplateV__CreateAddReplaceTFT_operationCodeTFT_xer_, &BITSTRING_json_, &TrafficFlowTemplateV__CreateAddReplaceTFT_operationCodeTFT_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TrafficFlowTemplateV__CreateAddReplaceTFT_operationCodeTFT_default_coding("RAW");
const TTCN_RAWdescriptor_t PacketFilterList__CreateAddReplaceTFT_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PacketFilterList__CreateAddReplaceTFT
const TTCN_Typedescriptor_t PacketFilterList__CreateAddReplaceTFT_descr_ = { "@MobileL3_GMM_SM_Types.PacketFilterList_CreateAddReplaceTFT", NULL, &PacketFilterList__CreateAddReplaceTFT_raw_, NULL, NULL, NULL, NULL, NULL, &PacketFilter_descr_, TTCN_Typedescriptor_t::DONTCARE };
const XERdescriptor_t       PacketFilterIdentifier__CreateAddReplaceTFT_packetFilterIdentifier_xer_ = { {"packetFilterIdentifier>\n", "packetFilterIdentifier>\n"}, {24, 24}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PacketFilterIdentifier__CreateAddReplaceTFT_packetFilterIdentifier_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PacketFilterIdentifier__CreateAddReplaceTFT_packetFilterIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.PacketFilterIdentifier_CreateAddReplaceTFT.packetFilterIdentifier", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &PacketFilterIdentifier__CreateAddReplaceTFT_packetFilterIdentifier_xer_, &BITSTRING_json_, &PacketFilterIdentifier__CreateAddReplaceTFT_packetFilterIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PacketFilterIdentifier__CreateAddReplaceTFT_packetFilterIdentifier_default_coding("RAW");
const XERdescriptor_t       PacketFilterIdentifier__CreateAddReplaceTFT_packetFilterDirection_xer_ = { {"packetFilterDirection>\n", "packetFilterDirection>\n"}, {23, 23}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PacketFilterIdentifier__CreateAddReplaceTFT_packetFilterDirection_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PacketFilterIdentifier__CreateAddReplaceTFT_packetFilterDirection_descr_ = { "@MobileL3_GMM_SM_Types.PacketFilterIdentifier_CreateAddReplaceTFT.packetFilterDirection", &BITSTRING_ber_, &General__Types::BIT2_raw_, NULL, &PacketFilterIdentifier__CreateAddReplaceTFT_packetFilterDirection_xer_, &BITSTRING_json_, &PacketFilterIdentifier__CreateAddReplaceTFT_packetFilterDirection_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PacketFilterIdentifier__CreateAddReplaceTFT_packetFilterDirection_default_coding("RAW");
const XERdescriptor_t       PacketFilterIdentifier__CreateAddReplaceTFT_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PacketFilterIdentifier__CreateAddReplaceTFT_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PacketFilterIdentifier__CreateAddReplaceTFT_spare_descr_ = { "@MobileL3_GMM_SM_Types.PacketFilterIdentifier_CreateAddReplaceTFT.spare", &BITSTRING_ber_, &General__Types::BIT2_raw_, NULL, &PacketFilterIdentifier__CreateAddReplaceTFT_spare_xer_, &BITSTRING_json_, &PacketFilterIdentifier__CreateAddReplaceTFT_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PacketFilterIdentifier__CreateAddReplaceTFT_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t PacketFilterIdentifier__CreateAddReplaceTFT_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PacketFilterIdentifier__CreateAddReplaceTFT
const TTCN_Typedescriptor_t PacketFilterIdentifier__CreateAddReplaceTFT_descr_ = { "@MobileL3_GMM_SM_Types.PacketFilterIdentifier_CreateAddReplaceTFT", NULL, &PacketFilterIdentifier__CreateAddReplaceTFT_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PacketFilterIdentifier__CreateAddReplaceTFT_default_coding("RAW");
UNIVERSAL_CHARSTRING PacketFilter_identifier_default_coding("RAW");
const XERdescriptor_t       PacketFilter_evaluationPrecedence_xer_ = { {"evaluationPrecedence>\n", "evaluationPrecedence>\n"}, {22, 22}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PacketFilter_evaluationPrecedence_oer_ext_arr_[0] = {};
const int PacketFilter_evaluationPrecedence_oer_p_[0] = {};
const TTCN_OERdescriptor_t PacketFilter_evaluationPrecedence_oer_ = { -1, TRUE, 1, FALSE, 0, 0, PacketFilter_evaluationPrecedence_oer_ext_arr_, 0, PacketFilter_evaluationPrecedence_oer_p_};
const TTCN_Typedescriptor_t PacketFilter_evaluationPrecedence_descr_ = { "@MobileL3_GMM_SM_Types.PacketFilter.evaluationPrecedence", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &PacketFilter_evaluationPrecedence_xer_, &OCTETSTRING_json_, &PacketFilter_evaluationPrecedence_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PacketFilter_evaluationPrecedence_default_coding("RAW");
const TTCN_RAWdescriptor_t PacketFilter_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       PacketFilter_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PacketFilter_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PacketFilter_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.PacketFilter.lengthIndicator", &INTEGER_ber_, &PacketFilter_lengthIndicator_raw_, &INTEGER_text_, &PacketFilter_lengthIndicator_xer_, &INTEGER_json_, &PacketFilter_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PacketFilter_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       PacketFilter_contents_xer_ = { {"contents>\n", "contents>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PacketFilter_contents_oer_ext_arr_[0] = {};
const int PacketFilter_contents_oer_p_[0] = {};
const TTCN_OERdescriptor_t PacketFilter_contents_oer_ = { -1, TRUE, -1, FALSE, 0, 0, PacketFilter_contents_oer_ext_arr_, 0, PacketFilter_contents_oer_p_};
const TTCN_Typedescriptor_t PacketFilter_contents_descr_ = { "@MobileL3_GMM_SM_Types.PacketFilter.contents", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &PacketFilter_contents_xer_, &OCTETSTRING_json_, &PacketFilter_contents_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PacketFilter_contents_default_coding("RAW");
const TTCN_RAWdescriptor_t PacketFilter_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PacketFilter
const TTCN_Typedescriptor_t PacketFilter_descr_ = { "@MobileL3_GMM_SM_Types.PacketFilter", NULL, &PacketFilter_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PacketFilter_default_coding("RAW");
UNIVERSAL_CHARSTRING PacketFilterList__CreateAddReplaceTFT_0_default_coding("RAW");
UNIVERSAL_CHARSTRING PacketFilterList__CreateAddReplaceTFT_default_coding("RAW");
UNIVERSAL_CHARSTRING TrafficFlowTemplateV__CreateAddReplaceTFT_packetFilterList__CreateAddReplaceTFT_default_coding("RAW");
const TTCN_RAWdescriptor_t TrafficFlowTemplateV__CreateAddReplaceTFT_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for TrafficFlowTemplateV__CreateAddReplaceTFT
const TTCN_Typedescriptor_t TrafficFlowTemplateV__CreateAddReplaceTFT_descr_ = { "@MobileL3_GMM_SM_Types.TrafficFlowTemplateV_CreateAddReplaceTFT", NULL, &TrafficFlowTemplateV__CreateAddReplaceTFT_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const TTCN_RAWdescriptor_t ParametersList_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ParametersList
const TTCN_Typedescriptor_t ParametersList_descr_ = { "@MobileL3_GMM_SM_Types.ParametersList", NULL, &ParametersList_raw_, NULL, NULL, NULL, NULL, NULL, &Parameter_descr_, TTCN_Typedescriptor_t::DONTCARE };
const XERdescriptor_t       Parameter_parameterIdentifier_xer_ = { {"parameterIdentifier>\n", "parameterIdentifier>\n"}, {21, 21}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int Parameter_parameterIdentifier_oer_ext_arr_[0] = {};
const int Parameter_parameterIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t Parameter_parameterIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, Parameter_parameterIdentifier_oer_ext_arr_, 0, Parameter_parameterIdentifier_oer_p_};
const TTCN_Typedescriptor_t Parameter_parameterIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.Parameter.parameterIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &Parameter_parameterIdentifier_xer_, &OCTETSTRING_json_, &Parameter_parameterIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING Parameter_parameterIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t Parameter_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       Parameter_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t Parameter_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t Parameter_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.Parameter.lengthIndicator", &INTEGER_ber_, &Parameter_lengthIndicator_raw_, &INTEGER_text_, &Parameter_lengthIndicator_xer_, &INTEGER_json_, &Parameter_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING Parameter_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       Parameter_contents_xer_ = { {"contents>\n", "contents>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int Parameter_contents_oer_ext_arr_[0] = {};
const int Parameter_contents_oer_p_[0] = {};
const TTCN_OERdescriptor_t Parameter_contents_oer_ = { -1, TRUE, -1, FALSE, 0, 0, Parameter_contents_oer_ext_arr_, 0, Parameter_contents_oer_p_};
const TTCN_Typedescriptor_t Parameter_contents_descr_ = { "@MobileL3_GMM_SM_Types.Parameter.contents", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &Parameter_contents_xer_, &OCTETSTRING_json_, &Parameter_contents_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING Parameter_contents_default_coding("RAW");
const TTCN_RAWdescriptor_t Parameter_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for Parameter
const TTCN_Typedescriptor_t Parameter_descr_ = { "@MobileL3_GMM_SM_Types.Parameter", NULL, &Parameter_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING Parameter_default_coding("RAW");
UNIVERSAL_CHARSTRING ParametersList_0_default_coding("RAW");
UNIVERSAL_CHARSTRING ParametersList_default_coding("RAW");
const TTCN_RAWdescriptor_t TrafficFlowTemplateV__CreateAddReplaceTFT_parametersList_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for TrafficFlowTemplateV__CreateAddReplaceTFT_parametersList
const TTCN_Typedescriptor_t TrafficFlowTemplateV__CreateAddReplaceTFT_parametersList_descr_ = { "@MobileL3_GMM_SM_Types.TrafficFlowTemplateV_CreateAddReplaceTFT.parametersList", NULL, &TrafficFlowTemplateV__CreateAddReplaceTFT_parametersList_raw_, NULL, NULL, NULL, NULL, NULL, &Parameter_descr_, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TrafficFlowTemplateV__CreateAddReplaceTFT_parametersList_default_coding("RAW");
UNIVERSAL_CHARSTRING TrafficFlowTemplateV__CreateAddReplaceTFT_default_coding("RAW");
UNIVERSAL_CHARSTRING TrafficFlowTemplateV_trafficFlowTemplateV__CreateAddReplaceTFT_default_coding("RAW");
const TTCN_RAWdescriptor_t TrafficFlowTemplateV__DeletePacketFilter_numberOfPacketFilters_raw_ = {4,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,-1,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       TrafficFlowTemplateV__DeletePacketFilter_numberOfPacketFilters_xer_ = { {"numberOfPacketFilters>\n", "numberOfPacketFilters>\n"}, {23, 23}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_Typedescriptor_t TrafficFlowTemplateV__DeletePacketFilter_numberOfPacketFilters_descr_ = { "@MobileL3_GMM_SM_Types.TrafficFlowTemplateV_DeletePacketFilter.numberOfPacketFilters", &INTEGER_ber_, &TrafficFlowTemplateV__DeletePacketFilter_numberOfPacketFilters_raw_, &INTEGER_text_, &TrafficFlowTemplateV__DeletePacketFilter_numberOfPacketFilters_xer_, &INTEGER_json_, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TrafficFlowTemplateV__DeletePacketFilter_numberOfPacketFilters_default_coding("RAW");
const XERdescriptor_t       TrafficFlowTemplateV__DeletePacketFilter_eBIT_xer_ = { {"eBIT>\n", "eBIT>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t TrafficFlowTemplateV__DeletePacketFilter_eBIT_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t TrafficFlowTemplateV__DeletePacketFilter_eBIT_descr_ = { "@MobileL3_GMM_SM_Types.TrafficFlowTemplateV_DeletePacketFilter.eBIT", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &TrafficFlowTemplateV__DeletePacketFilter_eBIT_xer_, &BITSTRING_json_, &TrafficFlowTemplateV__DeletePacketFilter_eBIT_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TrafficFlowTemplateV__DeletePacketFilter_eBIT_default_coding("RAW");
const XERdescriptor_t       TrafficFlowTemplateV__DeletePacketFilter_operationCodeTFT_xer_ = { {"operationCodeTFT>\n", "operationCodeTFT>\n"}, {18, 18}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t TrafficFlowTemplateV__DeletePacketFilter_operationCodeTFT_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t TrafficFlowTemplateV__DeletePacketFilter_operationCodeTFT_descr_ = { "@MobileL3_GMM_SM_Types.TrafficFlowTemplateV_DeletePacketFilter.operationCodeTFT", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &TrafficFlowTemplateV__DeletePacketFilter_operationCodeTFT_xer_, &BITSTRING_json_, &TrafficFlowTemplateV__DeletePacketFilter_operationCodeTFT_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TrafficFlowTemplateV__DeletePacketFilter_operationCodeTFT_default_coding("RAW");
const TTCN_RAWdescriptor_t PacketFilterList__DeletePacketFilter_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PacketFilterList__DeletePacketFilter
const TTCN_Typedescriptor_t PacketFilterList__DeletePacketFilter_descr_ = { "@MobileL3_GMM_SM_Types.PacketFilterList_DeletePacketFilter", NULL, &PacketFilterList__DeletePacketFilter_raw_, NULL, NULL, NULL, NULL, NULL, &PacketFilterIdentifier_descr_, TTCN_Typedescriptor_t::DONTCARE };
const XERdescriptor_t       PacketFilterIdentifier_packetFilterIdentifier_xer_ = { {"packetFilterIdentifier>\n", "packetFilterIdentifier>\n"}, {24, 24}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PacketFilterIdentifier_packetFilterIdentifier_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PacketFilterIdentifier_packetFilterIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.PacketFilterIdentifier.packetFilterIdentifier", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &PacketFilterIdentifier_packetFilterIdentifier_xer_, &BITSTRING_json_, &PacketFilterIdentifier_packetFilterIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PacketFilterIdentifier_packetFilterIdentifier_default_coding("RAW");
const XERdescriptor_t       PacketFilterIdentifier_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PacketFilterIdentifier_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PacketFilterIdentifier_spare_descr_ = { "@MobileL3_GMM_SM_Types.PacketFilterIdentifier.spare", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &PacketFilterIdentifier_spare_xer_, &BITSTRING_json_, &PacketFilterIdentifier_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PacketFilterIdentifier_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t PacketFilterIdentifier_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PacketFilterIdentifier
const TTCN_Typedescriptor_t PacketFilterIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.PacketFilterIdentifier", NULL, &PacketFilterIdentifier_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PacketFilterIdentifier_default_coding("RAW");
UNIVERSAL_CHARSTRING PacketFilterList__DeletePacketFilter_0_default_coding("RAW");
UNIVERSAL_CHARSTRING PacketFilterList__DeletePacketFilter_default_coding("RAW");
UNIVERSAL_CHARSTRING TrafficFlowTemplateV__DeletePacketFilter_packetFilterList__DeletePacketFilter_default_coding("RAW");
const TTCN_RAWdescriptor_t TrafficFlowTemplateV__DeletePacketFilter_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for TrafficFlowTemplateV__DeletePacketFilter
const TTCN_Typedescriptor_t TrafficFlowTemplateV__DeletePacketFilter_descr_ = { "@MobileL3_GMM_SM_Types.TrafficFlowTemplateV_DeletePacketFilter", NULL, &TrafficFlowTemplateV__DeletePacketFilter_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const TTCN_RAWdescriptor_t TrafficFlowTemplateV__DeletePacketFilter_parametersList_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for TrafficFlowTemplateV__DeletePacketFilter_parametersList
const TTCN_Typedescriptor_t TrafficFlowTemplateV__DeletePacketFilter_parametersList_descr_ = { "@MobileL3_GMM_SM_Types.TrafficFlowTemplateV_DeletePacketFilter.parametersList", NULL, &TrafficFlowTemplateV__DeletePacketFilter_parametersList_raw_, NULL, NULL, NULL, NULL, NULL, &Parameter_descr_, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TrafficFlowTemplateV__DeletePacketFilter_parametersList_default_coding("RAW");
UNIVERSAL_CHARSTRING TrafficFlowTemplateV__DeletePacketFilter_default_coding("RAW");
UNIVERSAL_CHARSTRING TrafficFlowTemplateV_trafficFlowTemplateV__DeletePacketFilter_default_coding("RAW");
const XERdescriptor_t       TrafficFlowTemplateV__Delete__Existing__TFT__or__No__TFT__Operation_numberOfPacketFilters_xer_ = { {"numberOfPacketFilters>\n", "numberOfPacketFilters>\n"}, {23, 23}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t TrafficFlowTemplateV__Delete__Existing__TFT__or__No__TFT__Operation_numberOfPacketFilters_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t TrafficFlowTemplateV__Delete__Existing__TFT__or__No__TFT__Operation_numberOfPacketFilters_descr_ = { "@MobileL3_GMM_SM_Types.TrafficFlowTemplateV_Delete_Existing_TFT_or_No_TFT_Operation.numberOfPacketFilters", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &TrafficFlowTemplateV__Delete__Existing__TFT__or__No__TFT__Operation_numberOfPacketFilters_xer_, &BITSTRING_json_, &TrafficFlowTemplateV__Delete__Existing__TFT__or__No__TFT__Operation_numberOfPacketFilters_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TrafficFlowTemplateV__Delete__Existing__TFT__or__No__TFT__Operation_numberOfPacketFilters_default_coding("RAW");
const XERdescriptor_t       TrafficFlowTemplateV__Delete__Existing__TFT__or__No__TFT__Operation_eBIT_xer_ = { {"eBIT>\n", "eBIT>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t TrafficFlowTemplateV__Delete__Existing__TFT__or__No__TFT__Operation_eBIT_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t TrafficFlowTemplateV__Delete__Existing__TFT__or__No__TFT__Operation_eBIT_descr_ = { "@MobileL3_GMM_SM_Types.TrafficFlowTemplateV_Delete_Existing_TFT_or_No_TFT_Operation.eBIT", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &TrafficFlowTemplateV__Delete__Existing__TFT__or__No__TFT__Operation_eBIT_xer_, &BITSTRING_json_, &TrafficFlowTemplateV__Delete__Existing__TFT__or__No__TFT__Operation_eBIT_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TrafficFlowTemplateV__Delete__Existing__TFT__or__No__TFT__Operation_eBIT_default_coding("RAW");
const XERdescriptor_t       TrafficFlowTemplateV__Delete__Existing__TFT__or__No__TFT__Operation_operationCodeTFT_xer_ = { {"operationCodeTFT>\n", "operationCodeTFT>\n"}, {18, 18}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t TrafficFlowTemplateV__Delete__Existing__TFT__or__No__TFT__Operation_operationCodeTFT_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t TrafficFlowTemplateV__Delete__Existing__TFT__or__No__TFT__Operation_operationCodeTFT_descr_ = { "@MobileL3_GMM_SM_Types.TrafficFlowTemplateV_Delete_Existing_TFT_or_No_TFT_Operation.operationCodeTFT", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &TrafficFlowTemplateV__Delete__Existing__TFT__or__No__TFT__Operation_operationCodeTFT_xer_, &BITSTRING_json_, &TrafficFlowTemplateV__Delete__Existing__TFT__or__No__TFT__Operation_operationCodeTFT_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TrafficFlowTemplateV__Delete__Existing__TFT__or__No__TFT__Operation_operationCodeTFT_default_coding("RAW");
const TTCN_RAWdescriptor_t TrafficFlowTemplateV__Delete__Existing__TFT__or__No__TFT__Operation_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for TrafficFlowTemplateV__Delete__Existing__TFT__or__No__TFT__Operation
const TTCN_Typedescriptor_t TrafficFlowTemplateV__Delete__Existing__TFT__or__No__TFT__Operation_descr_ = { "@MobileL3_GMM_SM_Types.TrafficFlowTemplateV_Delete_Existing_TFT_or_No_TFT_Operation", NULL, &TrafficFlowTemplateV__Delete__Existing__TFT__or__No__TFT__Operation_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const TTCN_RAWdescriptor_t TrafficFlowTemplateV__Delete__Existing__TFT__or__No__TFT__Operation_parametersList_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for TrafficFlowTemplateV__Delete__Existing__TFT__or__No__TFT__Operation_parametersList
const TTCN_Typedescriptor_t TrafficFlowTemplateV__Delete__Existing__TFT__or__No__TFT__Operation_parametersList_descr_ = { "@MobileL3_GMM_SM_Types.TrafficFlowTemplateV_Delete_Existing_TFT_or_No_TFT_Operation.parametersList", NULL, &TrafficFlowTemplateV__Delete__Existing__TFT__or__No__TFT__Operation_parametersList_raw_, NULL, NULL, NULL, NULL, NULL, &Parameter_descr_, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TrafficFlowTemplateV__Delete__Existing__TFT__or__No__TFT__Operation_parametersList_default_coding("RAW");
UNIVERSAL_CHARSTRING TrafficFlowTemplateV__Delete__Existing__TFT__or__No__TFT__Operation_default_coding("RAW");
UNIVERSAL_CHARSTRING TrafficFlowTemplateV_trafficFlowTemplateV__Delete__Existing__TFT__or__No__TFT__Operation_default_coding("RAW");
UNIVERSAL_CHARSTRING TrafficFlowTemplateV_default_coding("RAW");
UNIVERSAL_CHARSTRING TrafficFlowTemplateLV_valueField_default_coding("RAW");
const TTCN_RAWdescriptor_t TrafficFlowTemplateLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for TrafficFlowTemplateLV
const TTCN_Typedescriptor_t TrafficFlowTemplateLV_descr_ = { "@MobileL3_GMM_SM_Types.TrafficFlowTemplateLV", NULL, &TrafficFlowTemplateLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TrafficFlowTemplateLV_default_coding("RAW");
UNIVERSAL_CHARSTRING TrafficFlowTemplateTLV_trafficFlowTemplateLV_default_coding("RAW");
const TTCN_RAWdescriptor_t TrafficFlowTemplateTLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for TrafficFlowTemplateTLV
const TTCN_Typedescriptor_t TrafficFlowTemplateTLV_descr_ = { "@MobileL3_GMM_SM_Types.TrafficFlowTemplateTLV", NULL, &TrafficFlowTemplateTLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TrafficFlowTemplateTLV_default_coding("RAW");
const TTCN_RAWdescriptor_t TemporaryMobileGroupIDLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       TemporaryMobileGroupIDLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t TemporaryMobileGroupIDLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t TemporaryMobileGroupIDLV_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.TemporaryMobileGroupIDLV.lengthIndicator", &INTEGER_ber_, &TemporaryMobileGroupIDLV_lengthIndicator_raw_, &INTEGER_text_, &TemporaryMobileGroupIDLV_lengthIndicator_xer_, &INTEGER_json_, &TemporaryMobileGroupIDLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TemporaryMobileGroupIDLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       TemporaryMobileGroupIDLV_mBMSServiceID_xer_ = { {"mBMSServiceID>\n", "mBMSServiceID>\n"}, {15, 15}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int TemporaryMobileGroupIDLV_mBMSServiceID_oer_ext_arr_[0] = {};
const int TemporaryMobileGroupIDLV_mBMSServiceID_oer_p_[0] = {};
const TTCN_OERdescriptor_t TemporaryMobileGroupIDLV_mBMSServiceID_oer_ = { -1, TRUE, 3, FALSE, 0, 0, TemporaryMobileGroupIDLV_mBMSServiceID_oer_ext_arr_, 0, TemporaryMobileGroupIDLV_mBMSServiceID_oer_p_};
const TTCN_Typedescriptor_t TemporaryMobileGroupIDLV_mBMSServiceID_descr_ = { "@MobileL3_GMM_SM_Types.TemporaryMobileGroupIDLV.mBMSServiceID", &OCTETSTRING_ber_, &General__Types::OCT3_raw_, &OCTETSTRING_text_, &TemporaryMobileGroupIDLV_mBMSServiceID_xer_, &OCTETSTRING_json_, &TemporaryMobileGroupIDLV_mBMSServiceID_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TemporaryMobileGroupIDLV_mBMSServiceID_default_coding("RAW");
const XERdescriptor_t       TemporaryMobileGroupIDLV_mccDigit1_xer_ = { {"mccDigit1>\n", "mccDigit1>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_Typedescriptor_t TemporaryMobileGroupIDLV_mccDigit1_descr_ = { "@MobileL3_GMM_SM_Types.TemporaryMobileGroupIDLV.mccDigit1", NULL, &General__Types::HEX1_raw_, NULL, &TemporaryMobileGroupIDLV_mccDigit1_xer_, &HEXSTRING_json_, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TemporaryMobileGroupIDLV_mccDigit1_default_coding("RAW");
const XERdescriptor_t       TemporaryMobileGroupIDLV_mccDigit2_xer_ = { {"mccDigit2>\n", "mccDigit2>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_Typedescriptor_t TemporaryMobileGroupIDLV_mccDigit2_descr_ = { "@MobileL3_GMM_SM_Types.TemporaryMobileGroupIDLV.mccDigit2", NULL, &General__Types::HEX1_raw_, NULL, &TemporaryMobileGroupIDLV_mccDigit2_xer_, &HEXSTRING_json_, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TemporaryMobileGroupIDLV_mccDigit2_default_coding("RAW");
const XERdescriptor_t       TemporaryMobileGroupIDLV_mccDigit3_xer_ = { {"mccDigit3>\n", "mccDigit3>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_Typedescriptor_t TemporaryMobileGroupIDLV_mccDigit3_descr_ = { "@MobileL3_GMM_SM_Types.TemporaryMobileGroupIDLV.mccDigit3", NULL, &General__Types::HEX1_raw_, NULL, &TemporaryMobileGroupIDLV_mccDigit3_xer_, &HEXSTRING_json_, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TemporaryMobileGroupIDLV_mccDigit3_default_coding("RAW");
const XERdescriptor_t       TemporaryMobileGroupIDLV_mncDigit3_xer_ = { {"mncDigit3>\n", "mncDigit3>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_Typedescriptor_t TemporaryMobileGroupIDLV_mncDigit3_descr_ = { "@MobileL3_GMM_SM_Types.TemporaryMobileGroupIDLV.mncDigit3", NULL, &General__Types::HEX1_raw_, NULL, &TemporaryMobileGroupIDLV_mncDigit3_xer_, &HEXSTRING_json_, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TemporaryMobileGroupIDLV_mncDigit3_default_coding("RAW");
const XERdescriptor_t       TemporaryMobileGroupIDLV_mncDigit1_xer_ = { {"mncDigit1>\n", "mncDigit1>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_Typedescriptor_t TemporaryMobileGroupIDLV_mncDigit1_descr_ = { "@MobileL3_GMM_SM_Types.TemporaryMobileGroupIDLV.mncDigit1", NULL, &General__Types::HEX1_raw_, NULL, &TemporaryMobileGroupIDLV_mncDigit1_xer_, &HEXSTRING_json_, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TemporaryMobileGroupIDLV_mncDigit1_default_coding("RAW");
const XERdescriptor_t       TemporaryMobileGroupIDLV_mncDigit2_xer_ = { {"mncDigit2>\n", "mncDigit2>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_Typedescriptor_t TemporaryMobileGroupIDLV_mncDigit2_descr_ = { "@MobileL3_GMM_SM_Types.TemporaryMobileGroupIDLV.mncDigit2", NULL, &General__Types::HEX1_raw_, NULL, &TemporaryMobileGroupIDLV_mncDigit2_xer_, &HEXSTRING_json_, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TemporaryMobileGroupIDLV_mncDigit2_default_coding("RAW");
const TTCN_RAWdescriptor_t TemporaryMobileGroupIDLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for TemporaryMobileGroupIDLV
const TTCN_Typedescriptor_t TemporaryMobileGroupIDLV_descr_ = { "@MobileL3_GMM_SM_Types.TemporaryMobileGroupIDLV", NULL, &TemporaryMobileGroupIDLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TemporaryMobileGroupIDLV_default_coding("RAW");
const TTCN_RAWdescriptor_t MBMSBearerCapabilitiesLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MBMSBearerCapabilitiesLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MBMSBearerCapabilitiesLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MBMSBearerCapabilitiesLV_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.MBMSBearerCapabilitiesLV.lengthIndicator", &INTEGER_ber_, &MBMSBearerCapabilitiesLV_lengthIndicator_raw_, &INTEGER_text_, &MBMSBearerCapabilitiesLV_lengthIndicator_xer_, &INTEGER_json_, &MBMSBearerCapabilitiesLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MBMSBearerCapabilitiesLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       MBMSBearerCapabilitiesLV_maxBitrateDownlink_xer_ = { {"maxBitrateDownlink>\n", "maxBitrateDownlink>\n"}, {20, 20}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int MBMSBearerCapabilitiesLV_maxBitrateDownlink_oer_ext_arr_[0] = {};
const int MBMSBearerCapabilitiesLV_maxBitrateDownlink_oer_p_[0] = {};
const TTCN_OERdescriptor_t MBMSBearerCapabilitiesLV_maxBitrateDownlink_oer_ = { -1, TRUE, 1, FALSE, 0, 0, MBMSBearerCapabilitiesLV_maxBitrateDownlink_oer_ext_arr_, 0, MBMSBearerCapabilitiesLV_maxBitrateDownlink_oer_p_};
const TTCN_Typedescriptor_t MBMSBearerCapabilitiesLV_maxBitrateDownlink_descr_ = { "@MobileL3_GMM_SM_Types.MBMSBearerCapabilitiesLV.maxBitrateDownlink", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &MBMSBearerCapabilitiesLV_maxBitrateDownlink_xer_, &OCTETSTRING_json_, &MBMSBearerCapabilitiesLV_maxBitrateDownlink_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MBMSBearerCapabilitiesLV_maxBitrateDownlink_default_coding("RAW");
const TTCN_RAWdescriptor_t MBMSBearerCapabilitiesLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MBMSBearerCapabilitiesLV
const TTCN_Typedescriptor_t MBMSBearerCapabilitiesLV_descr_ = { "@MobileL3_GMM_SM_Types.MBMSBearerCapabilitiesLV", NULL, &MBMSBearerCapabilitiesLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const XERdescriptor_t       MBMSBearerCapabilitiesLV_maxBitrateDownlinkExtended_xer_ = { {"maxBitrateDownlinkExtended>\n", "maxBitrateDownlinkExtended>\n"}, {28, 28}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int MBMSBearerCapabilitiesLV_maxBitrateDownlinkExtended_oer_ext_arr_[0] = {};
const int MBMSBearerCapabilitiesLV_maxBitrateDownlinkExtended_oer_p_[0] = {};
const TTCN_OERdescriptor_t MBMSBearerCapabilitiesLV_maxBitrateDownlinkExtended_oer_ = { -1, TRUE, 1, FALSE, 0, 0, MBMSBearerCapabilitiesLV_maxBitrateDownlinkExtended_oer_ext_arr_, 0, MBMSBearerCapabilitiesLV_maxBitrateDownlinkExtended_oer_p_};
const TTCN_Typedescriptor_t MBMSBearerCapabilitiesLV_maxBitrateDownlinkExtended_descr_ = { "@MobileL3_GMM_SM_Types.MBMSBearerCapabilitiesLV.maxBitrateDownlinkExtended", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &MBMSBearerCapabilitiesLV_maxBitrateDownlinkExtended_xer_, &OCTETSTRING_json_, &MBMSBearerCapabilitiesLV_maxBitrateDownlinkExtended_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MBMSBearerCapabilitiesLV_maxBitrateDownlinkExtended_default_coding("RAW");
UNIVERSAL_CHARSTRING MBMSBearerCapabilitiesLV_default_coding("RAW");
const XERdescriptor_t       MBMSProtocolConfigOptionsTLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int MBMSProtocolConfigOptionsTLV_elementIdentifier_oer_ext_arr_[0] = {};
const int MBMSProtocolConfigOptionsTLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t MBMSProtocolConfigOptionsTLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, MBMSProtocolConfigOptionsTLV_elementIdentifier_oer_ext_arr_, 0, MBMSProtocolConfigOptionsTLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t MBMSProtocolConfigOptionsTLV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.MBMSProtocolConfigOptionsTLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &MBMSProtocolConfigOptionsTLV_elementIdentifier_xer_, &OCTETSTRING_json_, &MBMSProtocolConfigOptionsTLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MBMSProtocolConfigOptionsTLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t MBMSProtocolConfigOptionsTLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MBMSProtocolConfigOptionsTLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MBMSProtocolConfigOptionsTLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MBMSProtocolConfigOptionsTLV_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.MBMSProtocolConfigOptionsTLV.lengthIndicator", &INTEGER_ber_, &MBMSProtocolConfigOptionsTLV_lengthIndicator_raw_, &INTEGER_text_, &MBMSProtocolConfigOptionsTLV_lengthIndicator_xer_, &INTEGER_json_, &MBMSProtocolConfigOptionsTLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MBMSProtocolConfigOptionsTLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       MBMSProtocolConfigOptionsTLV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int MBMSProtocolConfigOptionsTLV_spare_oer_ext_arr_[0] = {};
const int MBMSProtocolConfigOptionsTLV_spare_oer_p_[0] = {};
const TTCN_OERdescriptor_t MBMSProtocolConfigOptionsTLV_spare_oer_ = { -1, TRUE, 1, FALSE, 0, 0, MBMSProtocolConfigOptionsTLV_spare_oer_ext_arr_, 0, MBMSProtocolConfigOptionsTLV_spare_oer_p_};
const TTCN_Typedescriptor_t MBMSProtocolConfigOptionsTLV_spare_descr_ = { "@MobileL3_GMM_SM_Types.MBMSProtocolConfigOptionsTLV.spare", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &MBMSProtocolConfigOptionsTLV_spare_xer_, &OCTETSTRING_json_, &MBMSProtocolConfigOptionsTLV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MBMSProtocolConfigOptionsTLV_spare_default_coding("RAW");
const XERdescriptor_t       MBMSProtocolConfigOptionsTLV_valueField_xer_ = { {"valueField>\n", "valueField>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int MBMSProtocolConfigOptionsTLV_valueField_oer_ext_arr_[0] = {};
const int MBMSProtocolConfigOptionsTLV_valueField_oer_p_[0] = {};
const TTCN_OERdescriptor_t MBMSProtocolConfigOptionsTLV_valueField_oer_ = { -1, TRUE, -1, FALSE, 0, 0, MBMSProtocolConfigOptionsTLV_valueField_oer_ext_arr_, 0, MBMSProtocolConfigOptionsTLV_valueField_oer_p_};
const TTCN_Typedescriptor_t MBMSProtocolConfigOptionsTLV_valueField_descr_ = { "@MobileL3_GMM_SM_Types.MBMSProtocolConfigOptionsTLV.valueField", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &MBMSProtocolConfigOptionsTLV_valueField_xer_, &OCTETSTRING_json_, &MBMSProtocolConfigOptionsTLV_valueField_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MBMSProtocolConfigOptionsTLV_valueField_default_coding("RAW");
const TTCN_RAWdescriptor_t MBMSProtocolConfigOptionsTLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MBMSProtocolConfigOptionsTLV
const TTCN_Typedescriptor_t MBMSProtocolConfigOptionsTLV_descr_ = { "@MobileL3_GMM_SM_Types.MBMSProtocolConfigOptionsTLV", NULL, &MBMSProtocolConfigOptionsTLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MBMSProtocolConfigOptionsTLV_default_coding("RAW");
const XERdescriptor_t       EnhancedNetworkSeviveAccessPointIDV_enhancedNetworkSeviveAccessPointIDValue_xer_ = { {"enhancedNetworkSeviveAccessPointIDValue>\n", "enhancedNetworkSeviveAccessPointIDValue>\n"}, {41, 41}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int EnhancedNetworkSeviveAccessPointIDV_enhancedNetworkSeviveAccessPointIDValue_oer_ext_arr_[0] = {};
const int EnhancedNetworkSeviveAccessPointIDV_enhancedNetworkSeviveAccessPointIDValue_oer_p_[0] = {};
const TTCN_OERdescriptor_t EnhancedNetworkSeviveAccessPointIDV_enhancedNetworkSeviveAccessPointIDValue_oer_ = { -1, TRUE, 1, FALSE, 0, 0, EnhancedNetworkSeviveAccessPointIDV_enhancedNetworkSeviveAccessPointIDValue_oer_ext_arr_, 0, EnhancedNetworkSeviveAccessPointIDV_enhancedNetworkSeviveAccessPointIDValue_oer_p_};
const TTCN_Typedescriptor_t EnhancedNetworkSeviveAccessPointIDV_enhancedNetworkSeviveAccessPointIDValue_descr_ = { "@MobileL3_GMM_SM_Types.EnhancedNetworkSeviveAccessPointIDV.enhancedNetworkSeviveAccessPointIDValue", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &EnhancedNetworkSeviveAccessPointIDV_enhancedNetworkSeviveAccessPointIDValue_xer_, &OCTETSTRING_json_, &EnhancedNetworkSeviveAccessPointIDV_enhancedNetworkSeviveAccessPointIDValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING EnhancedNetworkSeviveAccessPointIDV_enhancedNetworkSeviveAccessPointIDValue_default_coding("RAW");
const TTCN_RAWdescriptor_t EnhancedNetworkSeviveAccessPointIDV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for EnhancedNetworkSeviveAccessPointIDV
const TTCN_Typedescriptor_t EnhancedNetworkSeviveAccessPointIDV_descr_ = { "@MobileL3_GMM_SM_Types.EnhancedNetworkSeviveAccessPointIDV", NULL, &EnhancedNetworkSeviveAccessPointIDV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING EnhancedNetworkSeviveAccessPointIDV_default_coding("RAW");
const XERdescriptor_t       RequestTypeV_xer_ = { {"RequestTypeV>\n", "RequestTypeV>\n"}, {14, 14}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RequestTypeV_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RequestTypeV_descr_ = { "@MobileL3_GMM_SM_Types.RequestTypeV", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &RequestTypeV_xer_, &BITSTRING_json_, &RequestTypeV_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RequestTypeV_default_coding("RAW");
const XERdescriptor_t       RequestTypeTV_requestTypeV_xer_ = { {"requestTypeV>\n", "requestTypeV>\n"}, {14, 14}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RequestTypeTV_requestTypeV_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RequestTypeTV_requestTypeV_descr_ = { "@MobileL3_GMM_SM_Types.RequestTypeTV.requestTypeV", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &RequestTypeTV_requestTypeV_xer_, &BITSTRING_json_, &RequestTypeTV_requestTypeV_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RequestTypeTV_requestTypeV_default_coding("RAW");
const XERdescriptor_t       RequestTypeTV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RequestTypeTV_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RequestTypeTV_spare_descr_ = { "@MobileL3_GMM_SM_Types.RequestTypeTV.spare", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &RequestTypeTV_spare_xer_, &BITSTRING_json_, &RequestTypeTV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RequestTypeTV_spare_default_coding("RAW");
const XERdescriptor_t       RequestTypeTV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RequestTypeTV_elementIdentifier_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RequestTypeTV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.RequestTypeTV.elementIdentifier", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &RequestTypeTV_elementIdentifier_xer_, &BITSTRING_json_, &RequestTypeTV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RequestTypeTV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t RequestTypeTV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for RequestTypeTV
const TTCN_Typedescriptor_t RequestTypeTV_descr_ = { "@MobileL3_GMM_SM_Types.RequestTypeTV", NULL, &RequestTypeTV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RequestTypeTV_default_coding("RAW");
const TTCN_RAWdescriptor_t NotificationIndicatorLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       NotificationIndicatorLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t NotificationIndicatorLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t NotificationIndicatorLV_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.NotificationIndicatorLV.lengthIndicator", &INTEGER_ber_, &NotificationIndicatorLV_lengthIndicator_raw_, &INTEGER_text_, &NotificationIndicatorLV_lengthIndicator_xer_, &INTEGER_json_, &NotificationIndicatorLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NotificationIndicatorLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       NotificationIndicatorLV_valueField_xer_ = { {"valueField>\n", "valueField>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int NotificationIndicatorLV_valueField_oer_ext_arr_[0] = {};
const int NotificationIndicatorLV_valueField_oer_p_[0] = {};
const TTCN_OERdescriptor_t NotificationIndicatorLV_valueField_oer_ = { -1, TRUE, 1, FALSE, 0, 0, NotificationIndicatorLV_valueField_oer_ext_arr_, 0, NotificationIndicatorLV_valueField_oer_p_};
const TTCN_Typedescriptor_t NotificationIndicatorLV_valueField_descr_ = { "@MobileL3_GMM_SM_Types.NotificationIndicatorLV.valueField", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &NotificationIndicatorLV_valueField_xer_, &OCTETSTRING_json_, &NotificationIndicatorLV_valueField_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NotificationIndicatorLV_valueField_default_coding("RAW");
const TTCN_RAWdescriptor_t NotificationIndicatorLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for NotificationIndicatorLV
const TTCN_Typedescriptor_t NotificationIndicatorLV_descr_ = { "@MobileL3_GMM_SM_Types.NotificationIndicatorLV", NULL, &NotificationIndicatorLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NotificationIndicatorLV_default_coding("RAW");
const XERdescriptor_t       ConnectivityTypeTV_connectivityTypeValue_xer_ = { {"connectivityTypeValue>\n", "connectivityTypeValue>\n"}, {23, 23}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ConnectivityTypeTV_connectivityTypeValue_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ConnectivityTypeTV_connectivityTypeValue_descr_ = { "@MobileL3_GMM_SM_Types.ConnectivityTypeTV.connectivityTypeValue", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &ConnectivityTypeTV_connectivityTypeValue_xer_, &BITSTRING_json_, &ConnectivityTypeTV_connectivityTypeValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ConnectivityTypeTV_connectivityTypeValue_default_coding("RAW");
const XERdescriptor_t       ConnectivityTypeTV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ConnectivityTypeTV_elementIdentifier_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ConnectivityTypeTV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.ConnectivityTypeTV.elementIdentifier", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &ConnectivityTypeTV_elementIdentifier_xer_, &BITSTRING_json_, &ConnectivityTypeTV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ConnectivityTypeTV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t ConnectivityTypeTV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ConnectivityTypeTV
const TTCN_Typedescriptor_t ConnectivityTypeTV_descr_ = { "@MobileL3_GMM_SM_Types.ConnectivityTypeTV", NULL, &ConnectivityTypeTV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ConnectivityTypeTV_default_coding("RAW");
const XERdescriptor_t       WLANOffloadAcceptabilityTV_eUTRANOffloadAcceptabilityValue_xer_ = { {"eUTRANOffloadAcceptabilityValue>\n", "eUTRANOffloadAcceptabilityValue>\n"}, {33, 33}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t WLANOffloadAcceptabilityTV_eUTRANOffloadAcceptabilityValue_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t WLANOffloadAcceptabilityTV_eUTRANOffloadAcceptabilityValue_descr_ = { "@MobileL3_GMM_SM_Types.WLANOffloadAcceptabilityTV.eUTRANOffloadAcceptabilityValue", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &WLANOffloadAcceptabilityTV_eUTRANOffloadAcceptabilityValue_xer_, &BITSTRING_json_, &WLANOffloadAcceptabilityTV_eUTRANOffloadAcceptabilityValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING WLANOffloadAcceptabilityTV_eUTRANOffloadAcceptabilityValue_default_coding("RAW");
const XERdescriptor_t       WLANOffloadAcceptabilityTV_uTRANOffloadAcceptabilityValue_xer_ = { {"uTRANOffloadAcceptabilityValue>\n", "uTRANOffloadAcceptabilityValue>\n"}, {32, 32}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t WLANOffloadAcceptabilityTV_uTRANOffloadAcceptabilityValue_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t WLANOffloadAcceptabilityTV_uTRANOffloadAcceptabilityValue_descr_ = { "@MobileL3_GMM_SM_Types.WLANOffloadAcceptabilityTV.uTRANOffloadAcceptabilityValue", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &WLANOffloadAcceptabilityTV_uTRANOffloadAcceptabilityValue_xer_, &BITSTRING_json_, &WLANOffloadAcceptabilityTV_uTRANOffloadAcceptabilityValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING WLANOffloadAcceptabilityTV_uTRANOffloadAcceptabilityValue_default_coding("RAW");
const XERdescriptor_t       WLANOffloadAcceptabilityTV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t WLANOffloadAcceptabilityTV_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t WLANOffloadAcceptabilityTV_spare_descr_ = { "@MobileL3_GMM_SM_Types.WLANOffloadAcceptabilityTV.spare", &BITSTRING_ber_, &General__Types::BIT2_raw_, NULL, &WLANOffloadAcceptabilityTV_spare_xer_, &BITSTRING_json_, &WLANOffloadAcceptabilityTV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING WLANOffloadAcceptabilityTV_spare_default_coding("RAW");
const XERdescriptor_t       WLANOffloadAcceptabilityTV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t WLANOffloadAcceptabilityTV_elementIdentifier_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t WLANOffloadAcceptabilityTV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.WLANOffloadAcceptabilityTV.elementIdentifier", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &WLANOffloadAcceptabilityTV_elementIdentifier_xer_, &BITSTRING_json_, &WLANOffloadAcceptabilityTV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING WLANOffloadAcceptabilityTV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t WLANOffloadAcceptabilityTV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for WLANOffloadAcceptabilityTV
const TTCN_Typedescriptor_t WLANOffloadAcceptabilityTV_descr_ = { "@MobileL3_GMM_SM_Types.WLANOffloadAcceptabilityTV", NULL, &WLANOffloadAcceptabilityTV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING WLANOffloadAcceptabilityTV_default_coding("RAW");
const XERdescriptor_t       NBIFOM__ContainerTLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int NBIFOM__ContainerTLV_elementIdentifier_oer_ext_arr_[0] = {};
const int NBIFOM__ContainerTLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t NBIFOM__ContainerTLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, NBIFOM__ContainerTLV_elementIdentifier_oer_ext_arr_, 0, NBIFOM__ContainerTLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t NBIFOM__ContainerTLV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.NBIFOM_ContainerTLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &NBIFOM__ContainerTLV_elementIdentifier_xer_, &OCTETSTRING_json_, &NBIFOM__ContainerTLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NBIFOM__ContainerTLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t NBIFOM__ContainerTLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       NBIFOM__ContainerTLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t NBIFOM__ContainerTLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t NBIFOM__ContainerTLV_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.NBIFOM_ContainerTLV.lengthIndicator", &INTEGER_ber_, &NBIFOM__ContainerTLV_lengthIndicator_raw_, &INTEGER_text_, &NBIFOM__ContainerTLV_lengthIndicator_xer_, &INTEGER_json_, &NBIFOM__ContainerTLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NBIFOM__ContainerTLV_lengthIndicator_default_coding("RAW");
const TTCN_RAWdescriptor_t NBIFOM__ParameterList_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for NBIFOM__ParameterList
const TTCN_Typedescriptor_t NBIFOM__ParameterList_descr_ = { "@MobileL3_GMM_SM_Types.NBIFOM_ParameterList", NULL, &NBIFOM__ParameterList_raw_, NULL, NULL, NULL, NULL, NULL, &NBIFOM__Parameter_descr_, TTCN_Typedescriptor_t::DONTCARE };
const XERdescriptor_t       NBIFOM__Parameter_parameterIdentifier_xer_ = { {"parameterIdentifier>\n", "parameterIdentifier>\n"}, {21, 21}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int NBIFOM__Parameter_parameterIdentifier_oer_ext_arr_[0] = {};
const int NBIFOM__Parameter_parameterIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t NBIFOM__Parameter_parameterIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, NBIFOM__Parameter_parameterIdentifier_oer_ext_arr_, 0, NBIFOM__Parameter_parameterIdentifier_oer_p_};
const TTCN_Typedescriptor_t NBIFOM__Parameter_parameterIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.NBIFOM_Parameter.parameterIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &NBIFOM__Parameter_parameterIdentifier_xer_, &OCTETSTRING_json_, &NBIFOM__Parameter_parameterIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NBIFOM__Parameter_parameterIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t NBIFOM__Parameter_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       NBIFOM__Parameter_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t NBIFOM__Parameter_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t NBIFOM__Parameter_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.NBIFOM_Parameter.lengthIndicator", &INTEGER_ber_, &NBIFOM__Parameter_lengthIndicator_raw_, &INTEGER_text_, &NBIFOM__Parameter_lengthIndicator_xer_, &INTEGER_json_, &NBIFOM__Parameter_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NBIFOM__Parameter_lengthIndicator_default_coding("RAW");
const TTCN_RAWdescriptor_t NBIFOM__ParameterContents_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for NBIFOM__ParameterContents
const TTCN_Typedescriptor_t NBIFOM__ParameterContents_descr_ = { "@MobileL3_GMM_SM_Types.NBIFOM_ParameterContents", NULL, &NBIFOM__ParameterContents_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const XERdescriptor_t       NBIFOM__ParameterContents_nBIFOM__Mode_xer_ = { {"nBIFOM_Mode>\n", "nBIFOM_Mode>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int NBIFOM__ParameterContents_nBIFOM__Mode_oer_ext_arr_[0] = {};
const int NBIFOM__ParameterContents_nBIFOM__Mode_oer_p_[0] = {};
const TTCN_OERdescriptor_t NBIFOM__ParameterContents_nBIFOM__Mode_oer_ = { -1, TRUE, 1, FALSE, 0, 0, NBIFOM__ParameterContents_nBIFOM__Mode_oer_ext_arr_, 0, NBIFOM__ParameterContents_nBIFOM__Mode_oer_p_};
const TTCN_Typedescriptor_t NBIFOM__ParameterContents_nBIFOM__Mode_descr_ = { "@MobileL3_GMM_SM_Types.NBIFOM_ParameterContents.nBIFOM_Mode", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &NBIFOM__ParameterContents_nBIFOM__Mode_xer_, &OCTETSTRING_json_, &NBIFOM__ParameterContents_nBIFOM__Mode_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NBIFOM__ParameterContents_nBIFOM__Mode_default_coding("RAW");
const XERdescriptor_t       NBIFOM__ParameterContents_nBIFOM__DefaultAccess_xer_ = { {"nBIFOM_DefaultAccess>\n", "nBIFOM_DefaultAccess>\n"}, {22, 22}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int NBIFOM__ParameterContents_nBIFOM__DefaultAccess_oer_ext_arr_[0] = {};
const int NBIFOM__ParameterContents_nBIFOM__DefaultAccess_oer_p_[0] = {};
const TTCN_OERdescriptor_t NBIFOM__ParameterContents_nBIFOM__DefaultAccess_oer_ = { -1, TRUE, 1, FALSE, 0, 0, NBIFOM__ParameterContents_nBIFOM__DefaultAccess_oer_ext_arr_, 0, NBIFOM__ParameterContents_nBIFOM__DefaultAccess_oer_p_};
const TTCN_Typedescriptor_t NBIFOM__ParameterContents_nBIFOM__DefaultAccess_descr_ = { "@MobileL3_GMM_SM_Types.NBIFOM_ParameterContents.nBIFOM_DefaultAccess", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &NBIFOM__ParameterContents_nBIFOM__DefaultAccess_xer_, &OCTETSTRING_json_, &NBIFOM__ParameterContents_nBIFOM__DefaultAccess_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NBIFOM__ParameterContents_nBIFOM__DefaultAccess_default_coding("RAW");
const XERdescriptor_t       NBIFOM__ParameterContents_nBIFOM__Status_xer_ = { {"nBIFOM_Status>\n", "nBIFOM_Status>\n"}, {15, 15}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int NBIFOM__ParameterContents_nBIFOM__Status_oer_ext_arr_[0] = {};
const int NBIFOM__ParameterContents_nBIFOM__Status_oer_p_[0] = {};
const TTCN_OERdescriptor_t NBIFOM__ParameterContents_nBIFOM__Status_oer_ = { -1, TRUE, 1, FALSE, 0, 0, NBIFOM__ParameterContents_nBIFOM__Status_oer_ext_arr_, 0, NBIFOM__ParameterContents_nBIFOM__Status_oer_p_};
const TTCN_Typedescriptor_t NBIFOM__ParameterContents_nBIFOM__Status_descr_ = { "@MobileL3_GMM_SM_Types.NBIFOM_ParameterContents.nBIFOM_Status", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &NBIFOM__ParameterContents_nBIFOM__Status_xer_, &OCTETSTRING_json_, &NBIFOM__ParameterContents_nBIFOM__Status_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NBIFOM__ParameterContents_nBIFOM__Status_default_coding("RAW");
const TTCN_RAWdescriptor_t NBIFOM__RoutingRules_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for NBIFOM__RoutingRules
const TTCN_Typedescriptor_t NBIFOM__RoutingRules_descr_ = { "@MobileL3_GMM_SM_Types.NBIFOM_RoutingRules", NULL, &NBIFOM__RoutingRules_raw_, NULL, NULL, NULL, NULL, NULL, &NBIFOM__RoutingRule_descr_, TTCN_Typedescriptor_t::DONTCARE };
const TTCN_RAWdescriptor_t NBIFOM__RoutingRule_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       NBIFOM__RoutingRule_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t NBIFOM__RoutingRule_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t NBIFOM__RoutingRule_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.NBIFOM_RoutingRule.lengthIndicator", &INTEGER_ber_, &NBIFOM__RoutingRule_lengthIndicator_raw_, &INTEGER_text_, &NBIFOM__RoutingRule_lengthIndicator_xer_, &INTEGER_json_, &NBIFOM__RoutingRule_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NBIFOM__RoutingRule_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       NBIFOM__RoutingRule_routingRuleIdentifier_xer_ = { {"routingRuleIdentifier>\n", "routingRuleIdentifier>\n"}, {23, 23}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int NBIFOM__RoutingRule_routingRuleIdentifier_oer_ext_arr_[0] = {};
const int NBIFOM__RoutingRule_routingRuleIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t NBIFOM__RoutingRule_routingRuleIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, NBIFOM__RoutingRule_routingRuleIdentifier_oer_ext_arr_, 0, NBIFOM__RoutingRule_routingRuleIdentifier_oer_p_};
const TTCN_Typedescriptor_t NBIFOM__RoutingRule_routingRuleIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.NBIFOM_RoutingRule.routingRuleIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &NBIFOM__RoutingRule_routingRuleIdentifier_xer_, &OCTETSTRING_json_, &NBIFOM__RoutingRule_routingRuleIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NBIFOM__RoutingRule_routingRuleIdentifier_default_coding("RAW");
const XERdescriptor_t       NBIFOM__RoutingRule_operationCode_xer_ = { {"operationCode>\n", "operationCode>\n"}, {15, 15}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t NBIFOM__RoutingRule_operationCode_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t NBIFOM__RoutingRule_operationCode_descr_ = { "@MobileL3_GMM_SM_Types.NBIFOM_RoutingRule.operationCode", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &NBIFOM__RoutingRule_operationCode_xer_, &BITSTRING_json_, &NBIFOM__RoutingRule_operationCode_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NBIFOM__RoutingRule_operationCode_default_coding("RAW");
const XERdescriptor_t       NBIFOM__RoutingRule_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t NBIFOM__RoutingRule_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t NBIFOM__RoutingRule_spare_descr_ = { "@MobileL3_GMM_SM_Types.NBIFOM_RoutingRule.spare", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &NBIFOM__RoutingRule_spare_xer_, &BITSTRING_json_, &NBIFOM__RoutingRule_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NBIFOM__RoutingRule_spare_default_coding("RAW");
const XERdescriptor_t       NBIFOM__RoutingRule_routingAccess_xer_ = { {"routingAccess>\n", "routingAccess>\n"}, {15, 15}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t NBIFOM__RoutingRule_routingAccess_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t NBIFOM__RoutingRule_routingAccess_descr_ = { "@MobileL3_GMM_SM_Types.NBIFOM_RoutingRule.routingAccess", &BITSTRING_ber_, &General__Types::BIT2_raw_, NULL, &NBIFOM__RoutingRule_routingAccess_xer_, &BITSTRING_json_, &NBIFOM__RoutingRule_routingAccess_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NBIFOM__RoutingRule_routingAccess_default_coding("RAW");
const XERdescriptor_t       NBIFOM__RoutingRule_routingRulePrioroty_xer_ = { {"routingRulePrioroty>\n", "routingRulePrioroty>\n"}, {21, 21}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int NBIFOM__RoutingRule_routingRulePrioroty_oer_ext_arr_[0] = {};
const int NBIFOM__RoutingRule_routingRulePrioroty_oer_p_[0] = {};
const TTCN_OERdescriptor_t NBIFOM__RoutingRule_routingRulePrioroty_oer_ = { -1, TRUE, 1, FALSE, 0, 0, NBIFOM__RoutingRule_routingRulePrioroty_oer_ext_arr_, 0, NBIFOM__RoutingRule_routingRulePrioroty_oer_p_};
const TTCN_Typedescriptor_t NBIFOM__RoutingRule_routingRulePrioroty_descr_ = { "@MobileL3_GMM_SM_Types.NBIFOM_RoutingRule.routingRulePrioroty", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &NBIFOM__RoutingRule_routingRulePrioroty_xer_, &OCTETSTRING_json_, &NBIFOM__RoutingRule_routingRulePrioroty_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NBIFOM__RoutingRule_routingRulePrioroty_default_coding("RAW");
const XERdescriptor_t       RoutingFilter_flagA_xer_ = { {"flagA>\n", "flagA>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RoutingFilter_flagA_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RoutingFilter_flagA_descr_ = { "@MobileL3_GMM_SM_Types.RoutingFilter.flagA", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &RoutingFilter_flagA_xer_, &BITSTRING_json_, &RoutingFilter_flagA_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingFilter_flagA_default_coding("RAW");
const XERdescriptor_t       RoutingFilter_flagB_xer_ = { {"flagB>\n", "flagB>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RoutingFilter_flagB_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RoutingFilter_flagB_descr_ = { "@MobileL3_GMM_SM_Types.RoutingFilter.flagB", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &RoutingFilter_flagB_xer_, &BITSTRING_json_, &RoutingFilter_flagB_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingFilter_flagB_default_coding("RAW");
const XERdescriptor_t       RoutingFilter_flagC_xer_ = { {"flagC>\n", "flagC>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RoutingFilter_flagC_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RoutingFilter_flagC_descr_ = { "@MobileL3_GMM_SM_Types.RoutingFilter.flagC", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &RoutingFilter_flagC_xer_, &BITSTRING_json_, &RoutingFilter_flagC_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingFilter_flagC_default_coding("RAW");
const XERdescriptor_t       RoutingFilter_flagD_xer_ = { {"flagD>\n", "flagD>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RoutingFilter_flagD_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RoutingFilter_flagD_descr_ = { "@MobileL3_GMM_SM_Types.RoutingFilter.flagD", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &RoutingFilter_flagD_xer_, &BITSTRING_json_, &RoutingFilter_flagD_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingFilter_flagD_default_coding("RAW");
const XERdescriptor_t       RoutingFilter_flagE_xer_ = { {"flagE>\n", "flagE>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RoutingFilter_flagE_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RoutingFilter_flagE_descr_ = { "@MobileL3_GMM_SM_Types.RoutingFilter.flagE", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &RoutingFilter_flagE_xer_, &BITSTRING_json_, &RoutingFilter_flagE_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingFilter_flagE_default_coding("RAW");
const XERdescriptor_t       RoutingFilter_flagF_xer_ = { {"flagF>\n", "flagF>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RoutingFilter_flagF_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RoutingFilter_flagF_descr_ = { "@MobileL3_GMM_SM_Types.RoutingFilter.flagF", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &RoutingFilter_flagF_xer_, &BITSTRING_json_, &RoutingFilter_flagF_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingFilter_flagF_default_coding("RAW");
const XERdescriptor_t       RoutingFilter_flagG_xer_ = { {"flagG>\n", "flagG>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RoutingFilter_flagG_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RoutingFilter_flagG_descr_ = { "@MobileL3_GMM_SM_Types.RoutingFilter.flagG", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &RoutingFilter_flagG_xer_, &BITSTRING_json_, &RoutingFilter_flagG_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingFilter_flagG_default_coding("RAW");
const XERdescriptor_t       RoutingFilter_flagH_xer_ = { {"flagH>\n", "flagH>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RoutingFilter_flagH_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RoutingFilter_flagH_descr_ = { "@MobileL3_GMM_SM_Types.RoutingFilter.flagH", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &RoutingFilter_flagH_xer_, &BITSTRING_json_, &RoutingFilter_flagH_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingFilter_flagH_default_coding("RAW");
const XERdescriptor_t       RoutingFilter_flagI_xer_ = { {"flagI>\n", "flagI>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RoutingFilter_flagI_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RoutingFilter_flagI_descr_ = { "@MobileL3_GMM_SM_Types.RoutingFilter.flagI", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &RoutingFilter_flagI_xer_, &BITSTRING_json_, &RoutingFilter_flagI_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingFilter_flagI_default_coding("RAW");
const XERdescriptor_t       RoutingFilter_flagJ_xer_ = { {"flagJ>\n", "flagJ>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RoutingFilter_flagJ_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RoutingFilter_flagJ_descr_ = { "@MobileL3_GMM_SM_Types.RoutingFilter.flagJ", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &RoutingFilter_flagJ_xer_, &BITSTRING_json_, &RoutingFilter_flagJ_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingFilter_flagJ_default_coding("RAW");
const XERdescriptor_t       RoutingFilter_flagK_xer_ = { {"flagK>\n", "flagK>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RoutingFilter_flagK_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RoutingFilter_flagK_descr_ = { "@MobileL3_GMM_SM_Types.RoutingFilter.flagK", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &RoutingFilter_flagK_xer_, &BITSTRING_json_, &RoutingFilter_flagK_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingFilter_flagK_default_coding("RAW");
const XERdescriptor_t       RoutingFilter_flagL_xer_ = { {"flagL>\n", "flagL>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RoutingFilter_flagL_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RoutingFilter_flagL_descr_ = { "@MobileL3_GMM_SM_Types.RoutingFilter.flagL", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &RoutingFilter_flagL_xer_, &BITSTRING_json_, &RoutingFilter_flagL_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingFilter_flagL_default_coding("RAW");
const XERdescriptor_t       RoutingFilter_flagM_xer_ = { {"flagM>\n", "flagM>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RoutingFilter_flagM_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RoutingFilter_flagM_descr_ = { "@MobileL3_GMM_SM_Types.RoutingFilter.flagM", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &RoutingFilter_flagM_xer_, &BITSTRING_json_, &RoutingFilter_flagM_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingFilter_flagM_default_coding("RAW");
const XERdescriptor_t       RoutingFilter_flagN_xer_ = { {"flagN>\n", "flagN>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RoutingFilter_flagN_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RoutingFilter_flagN_descr_ = { "@MobileL3_GMM_SM_Types.RoutingFilter.flagN", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &RoutingFilter_flagN_xer_, &BITSTRING_json_, &RoutingFilter_flagN_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingFilter_flagN_default_coding("RAW");
const TTCN_RAWdescriptor_t RoutingFilter_flagsZ_raw_ = {18,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       RoutingFilter_flagsZ_xer_ = { {"flagsZ>\n", "flagsZ>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_Typedescriptor_t RoutingFilter_flagsZ_descr_ = { "@MobileL3_GMM_SM_Types.RoutingFilter.flagsZ", &BITSTRING_ber_, &RoutingFilter_flagsZ_raw_, NULL, &RoutingFilter_flagsZ_xer_, &BITSTRING_json_, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingFilter_flagsZ_default_coding("RAW");
const TTCN_RAWdescriptor_t RoutingFilter_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for RoutingFilter
const TTCN_Typedescriptor_t RoutingFilter_descr_ = { "@MobileL3_GMM_SM_Types.RoutingFilter", NULL, &RoutingFilter_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const TTCN_RAWdescriptor_t RoutingFilter_sourceIPv4Address_raw_ = {32,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,4,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       RoutingFilter_sourceIPv4Address_xer_ = { {"sourceIPv4Address>\n", "sourceIPv4Address>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int RoutingFilter_sourceIPv4Address_oer_ext_arr_[0] = {};
const int RoutingFilter_sourceIPv4Address_oer_p_[0] = {};
const TTCN_OERdescriptor_t RoutingFilter_sourceIPv4Address_oer_ = { -1, TRUE, 4, FALSE, 0, 0, RoutingFilter_sourceIPv4Address_oer_ext_arr_, 0, RoutingFilter_sourceIPv4Address_oer_p_};
const TTCN_Typedescriptor_t RoutingFilter_sourceIPv4Address_descr_ = { "@MobileL3_GMM_SM_Types.RoutingFilter.sourceIPv4Address", &OCTETSTRING_ber_, &RoutingFilter_sourceIPv4Address_raw_, &OCTETSTRING_text_, &RoutingFilter_sourceIPv4Address_xer_, &OCTETSTRING_json_, &RoutingFilter_sourceIPv4Address_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingFilter_sourceIPv4Address_default_coding("RAW");
const TTCN_RAWdescriptor_t RoutingFilter_destinationIPv4Address_raw_ = {32,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,4,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       RoutingFilter_destinationIPv4Address_xer_ = { {"destinationIPv4Address>\n", "destinationIPv4Address>\n"}, {24, 24}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int RoutingFilter_destinationIPv4Address_oer_ext_arr_[0] = {};
const int RoutingFilter_destinationIPv4Address_oer_p_[0] = {};
const TTCN_OERdescriptor_t RoutingFilter_destinationIPv4Address_oer_ = { -1, TRUE, 4, FALSE, 0, 0, RoutingFilter_destinationIPv4Address_oer_ext_arr_, 0, RoutingFilter_destinationIPv4Address_oer_p_};
const TTCN_Typedescriptor_t RoutingFilter_destinationIPv4Address_descr_ = { "@MobileL3_GMM_SM_Types.RoutingFilter.destinationIPv4Address", &OCTETSTRING_ber_, &RoutingFilter_destinationIPv4Address_raw_, &OCTETSTRING_text_, &RoutingFilter_destinationIPv4Address_xer_, &OCTETSTRING_json_, &RoutingFilter_destinationIPv4Address_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingFilter_destinationIPv4Address_default_coding("RAW");
const TTCN_RAWdescriptor_t RoutingFilter_sourceIPv6Address_raw_ = {128,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,16,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       RoutingFilter_sourceIPv6Address_xer_ = { {"sourceIPv6Address>\n", "sourceIPv6Address>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int RoutingFilter_sourceIPv6Address_oer_ext_arr_[0] = {};
const int RoutingFilter_sourceIPv6Address_oer_p_[0] = {};
const TTCN_OERdescriptor_t RoutingFilter_sourceIPv6Address_oer_ = { -1, TRUE, 16, FALSE, 0, 0, RoutingFilter_sourceIPv6Address_oer_ext_arr_, 0, RoutingFilter_sourceIPv6Address_oer_p_};
const TTCN_Typedescriptor_t RoutingFilter_sourceIPv6Address_descr_ = { "@MobileL3_GMM_SM_Types.RoutingFilter.sourceIPv6Address", &OCTETSTRING_ber_, &RoutingFilter_sourceIPv6Address_raw_, &OCTETSTRING_text_, &RoutingFilter_sourceIPv6Address_xer_, &OCTETSTRING_json_, &RoutingFilter_sourceIPv6Address_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingFilter_sourceIPv6Address_default_coding("RAW");
const TTCN_RAWdescriptor_t RoutingFilter_destinationIPv6Address_raw_ = {128,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,16,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       RoutingFilter_destinationIPv6Address_xer_ = { {"destinationIPv6Address>\n", "destinationIPv6Address>\n"}, {24, 24}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int RoutingFilter_destinationIPv6Address_oer_ext_arr_[0] = {};
const int RoutingFilter_destinationIPv6Address_oer_p_[0] = {};
const TTCN_OERdescriptor_t RoutingFilter_destinationIPv6Address_oer_ = { -1, TRUE, 16, FALSE, 0, 0, RoutingFilter_destinationIPv6Address_oer_ext_arr_, 0, RoutingFilter_destinationIPv6Address_oer_p_};
const TTCN_Typedescriptor_t RoutingFilter_destinationIPv6Address_descr_ = { "@MobileL3_GMM_SM_Types.RoutingFilter.destinationIPv6Address", &OCTETSTRING_ber_, &RoutingFilter_destinationIPv6Address_raw_, &OCTETSTRING_text_, &RoutingFilter_destinationIPv6Address_xer_, &OCTETSTRING_json_, &RoutingFilter_destinationIPv6Address_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingFilter_destinationIPv6Address_default_coding("RAW");
const TTCN_RAWdescriptor_t RoutingFilter_sourceAddressPrefixLength_raw_ = {8,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       RoutingFilter_sourceAddressPrefixLength_xer_ = { {"sourceAddressPrefixLength>\n", "sourceAddressPrefixLength>\n"}, {27, 27}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int RoutingFilter_sourceAddressPrefixLength_oer_ext_arr_[0] = {};
const int RoutingFilter_sourceAddressPrefixLength_oer_p_[0] = {};
const TTCN_OERdescriptor_t RoutingFilter_sourceAddressPrefixLength_oer_ = { -1, TRUE, 1, FALSE, 0, 0, RoutingFilter_sourceAddressPrefixLength_oer_ext_arr_, 0, RoutingFilter_sourceAddressPrefixLength_oer_p_};
const TTCN_Typedescriptor_t RoutingFilter_sourceAddressPrefixLength_descr_ = { "@MobileL3_GMM_SM_Types.RoutingFilter.sourceAddressPrefixLength", &OCTETSTRING_ber_, &RoutingFilter_sourceAddressPrefixLength_raw_, &OCTETSTRING_text_, &RoutingFilter_sourceAddressPrefixLength_xer_, &OCTETSTRING_json_, &RoutingFilter_sourceAddressPrefixLength_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingFilter_sourceAddressPrefixLength_default_coding("RAW");
const TTCN_RAWdescriptor_t RoutingFilter_destinationAddressPrefixLength_raw_ = {8,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       RoutingFilter_destinationAddressPrefixLength_xer_ = { {"destinationAddressPrefixLength>\n", "destinationAddressPrefixLength>\n"}, {32, 32}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int RoutingFilter_destinationAddressPrefixLength_oer_ext_arr_[0] = {};
const int RoutingFilter_destinationAddressPrefixLength_oer_p_[0] = {};
const TTCN_OERdescriptor_t RoutingFilter_destinationAddressPrefixLength_oer_ = { -1, TRUE, 1, FALSE, 0, 0, RoutingFilter_destinationAddressPrefixLength_oer_ext_arr_, 0, RoutingFilter_destinationAddressPrefixLength_oer_p_};
const TTCN_Typedescriptor_t RoutingFilter_destinationAddressPrefixLength_descr_ = { "@MobileL3_GMM_SM_Types.RoutingFilter.destinationAddressPrefixLength", &OCTETSTRING_ber_, &RoutingFilter_destinationAddressPrefixLength_raw_, &OCTETSTRING_text_, &RoutingFilter_destinationAddressPrefixLength_xer_, &OCTETSTRING_json_, &RoutingFilter_destinationAddressPrefixLength_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingFilter_destinationAddressPrefixLength_default_coding("RAW");
const TTCN_RAWdescriptor_t RoutingFilter_iPSecSecurityParameterIndex_raw_ = {32,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,4,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       RoutingFilter_iPSecSecurityParameterIndex_xer_ = { {"iPSecSecurityParameterIndex>\n", "iPSecSecurityParameterIndex>\n"}, {29, 29}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int RoutingFilter_iPSecSecurityParameterIndex_oer_ext_arr_[0] = {};
const int RoutingFilter_iPSecSecurityParameterIndex_oer_p_[0] = {};
const TTCN_OERdescriptor_t RoutingFilter_iPSecSecurityParameterIndex_oer_ = { -1, TRUE, 4, FALSE, 0, 0, RoutingFilter_iPSecSecurityParameterIndex_oer_ext_arr_, 0, RoutingFilter_iPSecSecurityParameterIndex_oer_p_};
const TTCN_Typedescriptor_t RoutingFilter_iPSecSecurityParameterIndex_descr_ = { "@MobileL3_GMM_SM_Types.RoutingFilter.iPSecSecurityParameterIndex", &OCTETSTRING_ber_, &RoutingFilter_iPSecSecurityParameterIndex_raw_, &OCTETSTRING_text_, &RoutingFilter_iPSecSecurityParameterIndex_xer_, &OCTETSTRING_json_, &RoutingFilter_iPSecSecurityParameterIndex_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingFilter_iPSecSecurityParameterIndex_default_coding("RAW");
const TTCN_RAWdescriptor_t RoutingFilter_protocolTypeNextHeader_raw_ = {8,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       RoutingFilter_protocolTypeNextHeader_xer_ = { {"protocolTypeNextHeader>\n", "protocolTypeNextHeader>\n"}, {24, 24}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int RoutingFilter_protocolTypeNextHeader_oer_ext_arr_[0] = {};
const int RoutingFilter_protocolTypeNextHeader_oer_p_[0] = {};
const TTCN_OERdescriptor_t RoutingFilter_protocolTypeNextHeader_oer_ = { -1, TRUE, 1, FALSE, 0, 0, RoutingFilter_protocolTypeNextHeader_oer_ext_arr_, 0, RoutingFilter_protocolTypeNextHeader_oer_p_};
const TTCN_Typedescriptor_t RoutingFilter_protocolTypeNextHeader_descr_ = { "@MobileL3_GMM_SM_Types.RoutingFilter.protocolTypeNextHeader", &OCTETSTRING_ber_, &RoutingFilter_protocolTypeNextHeader_raw_, &OCTETSTRING_text_, &RoutingFilter_protocolTypeNextHeader_xer_, &OCTETSTRING_json_, &RoutingFilter_protocolTypeNextHeader_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingFilter_protocolTypeNextHeader_default_coding("RAW");
const TTCN_RAWdescriptor_t RoutingFilter_startSourcePortRange_raw_ = {32,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,4,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       RoutingFilter_startSourcePortRange_xer_ = { {"startSourcePortRange>\n", "startSourcePortRange>\n"}, {22, 22}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int RoutingFilter_startSourcePortRange_oer_ext_arr_[0] = {};
const int RoutingFilter_startSourcePortRange_oer_p_[0] = {};
const TTCN_OERdescriptor_t RoutingFilter_startSourcePortRange_oer_ = { -1, TRUE, 4, FALSE, 0, 0, RoutingFilter_startSourcePortRange_oer_ext_arr_, 0, RoutingFilter_startSourcePortRange_oer_p_};
const TTCN_Typedescriptor_t RoutingFilter_startSourcePortRange_descr_ = { "@MobileL3_GMM_SM_Types.RoutingFilter.startSourcePortRange", &OCTETSTRING_ber_, &RoutingFilter_startSourcePortRange_raw_, &OCTETSTRING_text_, &RoutingFilter_startSourcePortRange_xer_, &OCTETSTRING_json_, &RoutingFilter_startSourcePortRange_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingFilter_startSourcePortRange_default_coding("RAW");
const TTCN_RAWdescriptor_t RoutingFilter_endSourcePortRange_raw_ = {32,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,4,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       RoutingFilter_endSourcePortRange_xer_ = { {"endSourcePortRange>\n", "endSourcePortRange>\n"}, {20, 20}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int RoutingFilter_endSourcePortRange_oer_ext_arr_[0] = {};
const int RoutingFilter_endSourcePortRange_oer_p_[0] = {};
const TTCN_OERdescriptor_t RoutingFilter_endSourcePortRange_oer_ = { -1, TRUE, 4, FALSE, 0, 0, RoutingFilter_endSourcePortRange_oer_ext_arr_, 0, RoutingFilter_endSourcePortRange_oer_p_};
const TTCN_Typedescriptor_t RoutingFilter_endSourcePortRange_descr_ = { "@MobileL3_GMM_SM_Types.RoutingFilter.endSourcePortRange", &OCTETSTRING_ber_, &RoutingFilter_endSourcePortRange_raw_, &OCTETSTRING_text_, &RoutingFilter_endSourcePortRange_xer_, &OCTETSTRING_json_, &RoutingFilter_endSourcePortRange_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingFilter_endSourcePortRange_default_coding("RAW");
const TTCN_RAWdescriptor_t RoutingFilter_startDestinationPortRange_raw_ = {32,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,4,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       RoutingFilter_startDestinationPortRange_xer_ = { {"startDestinationPortRange>\n", "startDestinationPortRange>\n"}, {27, 27}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int RoutingFilter_startDestinationPortRange_oer_ext_arr_[0] = {};
const int RoutingFilter_startDestinationPortRange_oer_p_[0] = {};
const TTCN_OERdescriptor_t RoutingFilter_startDestinationPortRange_oer_ = { -1, TRUE, 4, FALSE, 0, 0, RoutingFilter_startDestinationPortRange_oer_ext_arr_, 0, RoutingFilter_startDestinationPortRange_oer_p_};
const TTCN_Typedescriptor_t RoutingFilter_startDestinationPortRange_descr_ = { "@MobileL3_GMM_SM_Types.RoutingFilter.startDestinationPortRange", &OCTETSTRING_ber_, &RoutingFilter_startDestinationPortRange_raw_, &OCTETSTRING_text_, &RoutingFilter_startDestinationPortRange_xer_, &OCTETSTRING_json_, &RoutingFilter_startDestinationPortRange_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingFilter_startDestinationPortRange_default_coding("RAW");
const TTCN_RAWdescriptor_t RoutingFilter_endDestinationPortRange_raw_ = {32,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,4,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       RoutingFilter_endDestinationPortRange_xer_ = { {"endDestinationPortRange>\n", "endDestinationPortRange>\n"}, {25, 25}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int RoutingFilter_endDestinationPortRange_oer_ext_arr_[0] = {};
const int RoutingFilter_endDestinationPortRange_oer_p_[0] = {};
const TTCN_OERdescriptor_t RoutingFilter_endDestinationPortRange_oer_ = { -1, TRUE, 4, FALSE, 0, 0, RoutingFilter_endDestinationPortRange_oer_ext_arr_, 0, RoutingFilter_endDestinationPortRange_oer_p_};
const TTCN_Typedescriptor_t RoutingFilter_endDestinationPortRange_descr_ = { "@MobileL3_GMM_SM_Types.RoutingFilter.endDestinationPortRange", &OCTETSTRING_ber_, &RoutingFilter_endDestinationPortRange_raw_, &OCTETSTRING_text_, &RoutingFilter_endDestinationPortRange_xer_, &OCTETSTRING_json_, &RoutingFilter_endDestinationPortRange_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingFilter_endDestinationPortRange_default_coding("RAW");
const TTCN_RAWdescriptor_t RoutingFilter_typeOfService_raw_ = {8,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       RoutingFilter_typeOfService_xer_ = { {"typeOfService>\n", "typeOfService>\n"}, {15, 15}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int RoutingFilter_typeOfService_oer_ext_arr_[0] = {};
const int RoutingFilter_typeOfService_oer_p_[0] = {};
const TTCN_OERdescriptor_t RoutingFilter_typeOfService_oer_ = { -1, TRUE, 1, FALSE, 0, 0, RoutingFilter_typeOfService_oer_ext_arr_, 0, RoutingFilter_typeOfService_oer_p_};
const TTCN_Typedescriptor_t RoutingFilter_typeOfService_descr_ = { "@MobileL3_GMM_SM_Types.RoutingFilter.typeOfService", &OCTETSTRING_ber_, &RoutingFilter_typeOfService_raw_, &OCTETSTRING_text_, &RoutingFilter_typeOfService_xer_, &OCTETSTRING_json_, &RoutingFilter_typeOfService_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingFilter_typeOfService_default_coding("RAW");
const TTCN_RAWdescriptor_t RoutingFilter_flowLabel_raw_ = {32,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,4,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       RoutingFilter_flowLabel_xer_ = { {"flowLabel>\n", "flowLabel>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int RoutingFilter_flowLabel_oer_ext_arr_[0] = {};
const int RoutingFilter_flowLabel_oer_p_[0] = {};
const TTCN_OERdescriptor_t RoutingFilter_flowLabel_oer_ = { -1, TRUE, 4, FALSE, 0, 0, RoutingFilter_flowLabel_oer_ext_arr_, 0, RoutingFilter_flowLabel_oer_p_};
const TTCN_Typedescriptor_t RoutingFilter_flowLabel_descr_ = { "@MobileL3_GMM_SM_Types.RoutingFilter.flowLabel", &OCTETSTRING_ber_, &RoutingFilter_flowLabel_raw_, &OCTETSTRING_text_, &RoutingFilter_flowLabel_xer_, &OCTETSTRING_json_, &RoutingFilter_flowLabel_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RoutingFilter_flowLabel_default_coding("RAW");
UNIVERSAL_CHARSTRING RoutingFilter_default_coding("RAW");
UNIVERSAL_CHARSTRING NBIFOM__RoutingRule_routingFilter_default_coding("RAW");
const TTCN_RAWdescriptor_t NBIFOM__RoutingRule_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for NBIFOM__RoutingRule
const TTCN_Typedescriptor_t NBIFOM__RoutingRule_descr_ = { "@MobileL3_GMM_SM_Types.NBIFOM_RoutingRule", NULL, &NBIFOM__RoutingRule_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NBIFOM__RoutingRule_default_coding("RAW");
UNIVERSAL_CHARSTRING NBIFOM__RoutingRules_0_default_coding("RAW");
UNIVERSAL_CHARSTRING NBIFOM__RoutingRules_default_coding("RAW");
UNIVERSAL_CHARSTRING NBIFOM__ParameterContents_nBIFOM__RoutingRules_default_coding("RAW");
UNIVERSAL_CHARSTRING NBIFOM__ParameterContents_nBIFOM__IPFlowMapping_default_coding("RAW");
const XERdescriptor_t       NBIFOM__ParameterContents_nBIFOM__RANRulesHandling_xer_ = { {"nBIFOM_RANRulesHandling>\n", "nBIFOM_RANRulesHandling>\n"}, {25, 25}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int NBIFOM__ParameterContents_nBIFOM__RANRulesHandling_oer_ext_arr_[0] = {};
const int NBIFOM__ParameterContents_nBIFOM__RANRulesHandling_oer_p_[0] = {};
const TTCN_OERdescriptor_t NBIFOM__ParameterContents_nBIFOM__RANRulesHandling_oer_ = { -1, TRUE, 1, FALSE, 0, 0, NBIFOM__ParameterContents_nBIFOM__RANRulesHandling_oer_ext_arr_, 0, NBIFOM__ParameterContents_nBIFOM__RANRulesHandling_oer_p_};
const TTCN_Typedescriptor_t NBIFOM__ParameterContents_nBIFOM__RANRulesHandling_descr_ = { "@MobileL3_GMM_SM_Types.NBIFOM_ParameterContents.nBIFOM_RANRulesHandling", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &NBIFOM__ParameterContents_nBIFOM__RANRulesHandling_xer_, &OCTETSTRING_json_, &NBIFOM__ParameterContents_nBIFOM__RANRulesHandling_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NBIFOM__ParameterContents_nBIFOM__RANRulesHandling_default_coding("RAW");
const XERdescriptor_t       NBIFOM__ParameterContents_nBIFOM__RANRulesStatus_xer_ = { {"nBIFOM_RANRulesStatus>\n", "nBIFOM_RANRulesStatus>\n"}, {23, 23}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int NBIFOM__ParameterContents_nBIFOM__RANRulesStatus_oer_ext_arr_[0] = {};
const int NBIFOM__ParameterContents_nBIFOM__RANRulesStatus_oer_p_[0] = {};
const TTCN_OERdescriptor_t NBIFOM__ParameterContents_nBIFOM__RANRulesStatus_oer_ = { -1, TRUE, 1, FALSE, 0, 0, NBIFOM__ParameterContents_nBIFOM__RANRulesStatus_oer_ext_arr_, 0, NBIFOM__ParameterContents_nBIFOM__RANRulesStatus_oer_p_};
const TTCN_Typedescriptor_t NBIFOM__ParameterContents_nBIFOM__RANRulesStatus_descr_ = { "@MobileL3_GMM_SM_Types.NBIFOM_ParameterContents.nBIFOM_RANRulesStatus", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &NBIFOM__ParameterContents_nBIFOM__RANRulesStatus_xer_, &OCTETSTRING_json_, &NBIFOM__ParameterContents_nBIFOM__RANRulesStatus_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NBIFOM__ParameterContents_nBIFOM__RANRulesStatus_default_coding("RAW");
const XERdescriptor_t       NBIFOM__AccessUsabilityIndication_threeGPPAccessUsableValue_xer_ = { {"threeGPPAccessUsableValue>\n", "threeGPPAccessUsableValue>\n"}, {27, 27}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t NBIFOM__AccessUsabilityIndication_threeGPPAccessUsableValue_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t NBIFOM__AccessUsabilityIndication_threeGPPAccessUsableValue_descr_ = { "@MobileL3_GMM_SM_Types.NBIFOM_AccessUsabilityIndication.threeGPPAccessUsableValue", &BITSTRING_ber_, &General__Types::BIT2_raw_, NULL, &NBIFOM__AccessUsabilityIndication_threeGPPAccessUsableValue_xer_, &BITSTRING_json_, &NBIFOM__AccessUsabilityIndication_threeGPPAccessUsableValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NBIFOM__AccessUsabilityIndication_threeGPPAccessUsableValue_default_coding("RAW");
const XERdescriptor_t       NBIFOM__AccessUsabilityIndication_wLANAccessUsableValue_xer_ = { {"wLANAccessUsableValue>\n", "wLANAccessUsableValue>\n"}, {23, 23}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t NBIFOM__AccessUsabilityIndication_wLANAccessUsableValue_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t NBIFOM__AccessUsabilityIndication_wLANAccessUsableValue_descr_ = { "@MobileL3_GMM_SM_Types.NBIFOM_AccessUsabilityIndication.wLANAccessUsableValue", &BITSTRING_ber_, &General__Types::BIT2_raw_, NULL, &NBIFOM__AccessUsabilityIndication_wLANAccessUsableValue_xer_, &BITSTRING_json_, &NBIFOM__AccessUsabilityIndication_wLANAccessUsableValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NBIFOM__AccessUsabilityIndication_wLANAccessUsableValue_default_coding("RAW");
const XERdescriptor_t       NBIFOM__AccessUsabilityIndication_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t NBIFOM__AccessUsabilityIndication_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t NBIFOM__AccessUsabilityIndication_spare_descr_ = { "@MobileL3_GMM_SM_Types.NBIFOM_AccessUsabilityIndication.spare", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &NBIFOM__AccessUsabilityIndication_spare_xer_, &BITSTRING_json_, &NBIFOM__AccessUsabilityIndication_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NBIFOM__AccessUsabilityIndication_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t NBIFOM__AccessUsabilityIndication_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for NBIFOM__AccessUsabilityIndication
const TTCN_Typedescriptor_t NBIFOM__AccessUsabilityIndication_descr_ = { "@MobileL3_GMM_SM_Types.NBIFOM_AccessUsabilityIndication", NULL, &NBIFOM__AccessUsabilityIndication_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NBIFOM__AccessUsabilityIndication_default_coding("RAW");
UNIVERSAL_CHARSTRING NBIFOM__ParameterContents_nBIFOM__AccessUsabilityIndication_default_coding("RAW");
const XERdescriptor_t       NBIFOM__ParameterContents_unknownParameter_xer_ = { {"unknownParameter>\n", "unknownParameter>\n"}, {18, 18}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int NBIFOM__ParameterContents_unknownParameter_oer_ext_arr_[0] = {};
const int NBIFOM__ParameterContents_unknownParameter_oer_p_[0] = {};
const TTCN_OERdescriptor_t NBIFOM__ParameterContents_unknownParameter_oer_ = { -1, TRUE, -1, FALSE, 0, 0, NBIFOM__ParameterContents_unknownParameter_oer_ext_arr_, 0, NBIFOM__ParameterContents_unknownParameter_oer_p_};
const TTCN_Typedescriptor_t NBIFOM__ParameterContents_unknownParameter_descr_ = { "@MobileL3_GMM_SM_Types.NBIFOM_ParameterContents.unknownParameter", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &NBIFOM__ParameterContents_unknownParameter_xer_, &OCTETSTRING_json_, &NBIFOM__ParameterContents_unknownParameter_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NBIFOM__ParameterContents_unknownParameter_default_coding("RAW");
UNIVERSAL_CHARSTRING NBIFOM__ParameterContents_default_coding("RAW");
const TTCN_RAWdescriptor_t NBIFOM__Parameter_parameterContents_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for NBIFOM__Parameter_parameterContents
const TTCN_Typedescriptor_t NBIFOM__Parameter_parameterContents_descr_ = { "@MobileL3_GMM_SM_Types.NBIFOM_Parameter.parameterContents", NULL, &NBIFOM__Parameter_parameterContents_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NBIFOM__Parameter_parameterContents_default_coding("RAW");
const TTCN_RAWdescriptor_t NBIFOM__Parameter_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for NBIFOM__Parameter
const TTCN_Typedescriptor_t NBIFOM__Parameter_descr_ = { "@MobileL3_GMM_SM_Types.NBIFOM_Parameter", NULL, &NBIFOM__Parameter_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NBIFOM__Parameter_default_coding("RAW");
UNIVERSAL_CHARSTRING NBIFOM__ParameterList_0_default_coding("RAW");
UNIVERSAL_CHARSTRING NBIFOM__ParameterList_default_coding("RAW");
UNIVERSAL_CHARSTRING NBIFOM__ContainerTLV_contents_default_coding("RAW");
const TTCN_RAWdescriptor_t NBIFOM__ContainerTLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for NBIFOM__ContainerTLV
const TTCN_Typedescriptor_t NBIFOM__ContainerTLV_descr_ = { "@MobileL3_GMM_SM_Types.NBIFOM_ContainerTLV", NULL, &NBIFOM__ContainerTLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING NBIFOM__ContainerTLV_default_coding("RAW");
const XERdescriptor_t       PDPContextStatusTLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDPContextStatusTLV_elementIdentifier_oer_ext_arr_[0] = {};
const int PDPContextStatusTLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDPContextStatusTLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, PDPContextStatusTLV_elementIdentifier_oer_ext_arr_, 0, PDPContextStatusTLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t PDPContextStatusTLV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.PDPContextStatusTLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &PDPContextStatusTLV_elementIdentifier_xer_, &OCTETSTRING_json_, &PDPContextStatusTLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDPContextStatusTLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t PDPContextStatusTLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       PDPContextStatusTLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDPContextStatusTLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDPContextStatusTLV_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.PDPContextStatusTLV.lengthIndicator", &INTEGER_ber_, &PDPContextStatusTLV_lengthIndicator_raw_, &INTEGER_text_, &PDPContextStatusTLV_lengthIndicator_xer_, &INTEGER_json_, &PDPContextStatusTLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDPContextStatusTLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       PDPContextStatusTLV_valueField_xer_ = { {"valueField>\n", "valueField>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDPContextStatusTLV_valueField_oer_ext_arr_[0] = {};
const int PDPContextStatusTLV_valueField_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDPContextStatusTLV_valueField_oer_ = { -1, TRUE, 2, FALSE, 0, 0, PDPContextStatusTLV_valueField_oer_ext_arr_, 0, PDPContextStatusTLV_valueField_oer_p_};
const TTCN_Typedescriptor_t PDPContextStatusTLV_valueField_descr_ = { "@MobileL3_GMM_SM_Types.PDPContextStatusTLV.valueField", &OCTETSTRING_ber_, &General__Types::OCT2_raw_, &OCTETSTRING_text_, &PDPContextStatusTLV_valueField_xer_, &OCTETSTRING_json_, &PDPContextStatusTLV_valueField_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDPContextStatusTLV_valueField_default_coding("RAW");
const TTCN_RAWdescriptor_t PDPContextStatusTLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDPContextStatusTLV
const TTCN_Typedescriptor_t PDPContextStatusTLV_descr_ = { "@MobileL3_GMM_SM_Types.PDPContextStatusTLV", NULL, &PDPContextStatusTLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDPContextStatusTLV_default_coding("RAW");
const XERdescriptor_t       RadioPriorityV_priorityLevelValue_xer_ = { {"priorityLevelValue>\n", "priorityLevelValue>\n"}, {20, 20}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RadioPriorityV_priorityLevelValue_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RadioPriorityV_priorityLevelValue_descr_ = { "@MobileL3_GMM_SM_Types.RadioPriorityV.priorityLevelValue", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &RadioPriorityV_priorityLevelValue_xer_, &BITSTRING_json_, &RadioPriorityV_priorityLevelValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RadioPriorityV_priorityLevelValue_default_coding("RAW");
const XERdescriptor_t       RadioPriorityV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RadioPriorityV_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RadioPriorityV_spare_descr_ = { "@MobileL3_GMM_SM_Types.RadioPriorityV.spare", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &RadioPriorityV_spare_xer_, &BITSTRING_json_, &RadioPriorityV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RadioPriorityV_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t RadioPriorityV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for RadioPriorityV
const TTCN_Typedescriptor_t RadioPriorityV_descr_ = { "@MobileL3_GMM_SM_Types.RadioPriorityV", NULL, &RadioPriorityV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RadioPriorityV_default_coding("RAW");
UNIVERSAL_CHARSTRING RadioPriorityTV_valueField_default_coding("RAW");
const XERdescriptor_t       RadioPriorityTV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RadioPriorityTV_elementIdentifier_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RadioPriorityTV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.RadioPriorityTV.elementIdentifier", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &RadioPriorityTV_elementIdentifier_xer_, &BITSTRING_json_, &RadioPriorityTV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RadioPriorityTV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t RadioPriorityTV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for RadioPriorityTV
const TTCN_Typedescriptor_t RadioPriorityTV_descr_ = { "@MobileL3_GMM_SM_Types.RadioPriorityTV", NULL, &RadioPriorityTV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RadioPriorityTV_default_coding("RAW");
const XERdescriptor_t       GPRSTimerTV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int GPRSTimerTV_elementIdentifier_oer_ext_arr_[0] = {};
const int GPRSTimerTV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t GPRSTimerTV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, GPRSTimerTV_elementIdentifier_oer_ext_arr_, 0, GPRSTimerTV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t GPRSTimerTV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.GPRSTimerTV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &GPRSTimerTV_elementIdentifier_xer_, &OCTETSTRING_json_, &GPRSTimerTV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING GPRSTimerTV_elementIdentifier_default_coding("RAW");
const XERdescriptor_t       GPRSTimerV_timerValue_xer_ = { {"timerValue>\n", "timerValue>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t GPRSTimerV_timerValue_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t GPRSTimerV_timerValue_descr_ = { "@MobileL3_GMM_SM_Types.GPRSTimerV.timerValue", &BITSTRING_ber_, &General__Types::BIT5_raw_, NULL, &GPRSTimerV_timerValue_xer_, &BITSTRING_json_, &GPRSTimerV_timerValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING GPRSTimerV_timerValue_default_coding("RAW");
const XERdescriptor_t       GPRSTimerV_unit_xer_ = { {"unit>\n", "unit>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t GPRSTimerV_unit_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t GPRSTimerV_unit_descr_ = { "@MobileL3_GMM_SM_Types.GPRSTimerV.unit", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &GPRSTimerV_unit_xer_, &BITSTRING_json_, &GPRSTimerV_unit_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING GPRSTimerV_unit_default_coding("RAW");
const TTCN_RAWdescriptor_t GPRSTimerV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for GPRSTimerV
const TTCN_Typedescriptor_t GPRSTimerV_descr_ = { "@MobileL3_GMM_SM_Types.GPRSTimerV", NULL, &GPRSTimerV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING GPRSTimerV_default_coding("RAW");
UNIVERSAL_CHARSTRING GPRSTimerTV_gprsTimerV_default_coding("RAW");
const TTCN_RAWdescriptor_t GPRSTimerTV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for GPRSTimerTV
const TTCN_Typedescriptor_t GPRSTimerTV_descr_ = { "@MobileL3_GMM_SM_Types.GPRSTimerTV", NULL, &GPRSTimerTV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING GPRSTimerTV_default_coding("RAW");
const XERdescriptor_t       GPRSTimer2TLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int GPRSTimer2TLV_elementIdentifier_oer_ext_arr_[0] = {};
const int GPRSTimer2TLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t GPRSTimer2TLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, GPRSTimer2TLV_elementIdentifier_oer_ext_arr_, 0, GPRSTimer2TLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t GPRSTimer2TLV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.GPRSTimer2TLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &GPRSTimer2TLV_elementIdentifier_xer_, &OCTETSTRING_json_, &GPRSTimer2TLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING GPRSTimer2TLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t GPRSTimer2TLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       GPRSTimer2TLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t GPRSTimer2TLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t GPRSTimer2TLV_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.GPRSTimer2TLV.lengthIndicator", &INTEGER_ber_, &GPRSTimer2TLV_lengthIndicator_raw_, &INTEGER_text_, &GPRSTimer2TLV_lengthIndicator_xer_, &INTEGER_json_, &GPRSTimer2TLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING GPRSTimer2TLV_lengthIndicator_default_coding("RAW");
UNIVERSAL_CHARSTRING GPRSTimer2TLV_gprsTimer2V_default_coding("RAW");
const TTCN_RAWdescriptor_t GPRSTimer2TLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for GPRSTimer2TLV
const TTCN_Typedescriptor_t GPRSTimer2TLV_descr_ = { "@MobileL3_GMM_SM_Types.GPRSTimer2TLV", NULL, &GPRSTimer2TLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING GPRSTimer2TLV_default_coding("RAW");
const XERdescriptor_t       RadioPriority2V_priorityLevelValue_xer_ = { {"priorityLevelValue>\n", "priorityLevelValue>\n"}, {20, 20}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RadioPriority2V_priorityLevelValue_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RadioPriority2V_priorityLevelValue_descr_ = { "@MobileL3_GMM_SM_Types.RadioPriority2V.priorityLevelValue", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &RadioPriority2V_priorityLevelValue_xer_, &BITSTRING_json_, &RadioPriority2V_priorityLevelValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RadioPriority2V_priorityLevelValue_default_coding("RAW");
const XERdescriptor_t       RadioPriority2V_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RadioPriority2V_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RadioPriority2V_spare_descr_ = { "@MobileL3_GMM_SM_Types.RadioPriority2V.spare", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &RadioPriority2V_spare_xer_, &BITSTRING_json_, &RadioPriority2V_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RadioPriority2V_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t RadioPriority2V_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for RadioPriority2V
const TTCN_Typedescriptor_t RadioPriority2V_descr_ = { "@MobileL3_GMM_SM_Types.RadioPriority2V", NULL, &RadioPriority2V_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RadioPriority2V_default_coding("RAW");
UNIVERSAL_CHARSTRING RadioPriority2TV_valueField_default_coding("RAW");
const XERdescriptor_t       RadioPriority2TV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RadioPriority2TV_elementIdentifier_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RadioPriority2TV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.RadioPriority2TV.elementIdentifier", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &RadioPriority2TV_elementIdentifier_xer_, &BITSTRING_json_, &RadioPriority2TV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RadioPriority2TV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t RadioPriority2TV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for RadioPriority2TV
const TTCN_Typedescriptor_t RadioPriority2TV_descr_ = { "@MobileL3_GMM_SM_Types.RadioPriority2TV", NULL, &RadioPriority2TV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RadioPriority2TV_default_coding("RAW");
const XERdescriptor_t       MBMS__ContextStatusTLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int MBMS__ContextStatusTLV_elementIdentifier_oer_ext_arr_[0] = {};
const int MBMS__ContextStatusTLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t MBMS__ContextStatusTLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, MBMS__ContextStatusTLV_elementIdentifier_oer_ext_arr_, 0, MBMS__ContextStatusTLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t MBMS__ContextStatusTLV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.MBMS_ContextStatusTLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &MBMS__ContextStatusTLV_elementIdentifier_xer_, &OCTETSTRING_json_, &MBMS__ContextStatusTLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MBMS__ContextStatusTLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t MBMS__ContextStatusTLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MBMS__ContextStatusTLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MBMS__ContextStatusTLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MBMS__ContextStatusTLV_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.MBMS_ContextStatusTLV.lengthIndicator", &INTEGER_ber_, &MBMS__ContextStatusTLV_lengthIndicator_raw_, &INTEGER_text_, &MBMS__ContextStatusTLV_lengthIndicator_xer_, &INTEGER_json_, &MBMS__ContextStatusTLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MBMS__ContextStatusTLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       MBMS__ContextStatusTLV_mBMSContextStatusInformation_xer_ = { {"mBMSContextStatusInformation>\n", "mBMSContextStatusInformation>\n"}, {30, 30}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int MBMS__ContextStatusTLV_mBMSContextStatusInformation_oer_ext_arr_[0] = {};
const int MBMS__ContextStatusTLV_mBMSContextStatusInformation_oer_p_[0] = {};
const TTCN_OERdescriptor_t MBMS__ContextStatusTLV_mBMSContextStatusInformation_oer_ = { -1, TRUE, -1, FALSE, 0, 0, MBMS__ContextStatusTLV_mBMSContextStatusInformation_oer_ext_arr_, 0, MBMS__ContextStatusTLV_mBMSContextStatusInformation_oer_p_};
const TTCN_Typedescriptor_t MBMS__ContextStatusTLV_mBMSContextStatusInformation_descr_ = { "@MobileL3_GMM_SM_Types.MBMS_ContextStatusTLV.mBMSContextStatusInformation", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &MBMS__ContextStatusTLV_mBMSContextStatusInformation_xer_, &OCTETSTRING_json_, &MBMS__ContextStatusTLV_mBMSContextStatusInformation_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MBMS__ContextStatusTLV_mBMSContextStatusInformation_default_coding("RAW");
const TTCN_RAWdescriptor_t MBMS__ContextStatusTLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MBMS__ContextStatusTLV
const TTCN_Typedescriptor_t MBMS__ContextStatusTLV_descr_ = { "@MobileL3_GMM_SM_Types.MBMS_ContextStatusTLV", NULL, &MBMS__ContextStatusTLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MBMS__ContextStatusTLV_default_coding("RAW");
const XERdescriptor_t       UplinkDataStatusTLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int UplinkDataStatusTLV_elementIdentifier_oer_ext_arr_[0] = {};
const int UplinkDataStatusTLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t UplinkDataStatusTLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, UplinkDataStatusTLV_elementIdentifier_oer_ext_arr_, 0, UplinkDataStatusTLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t UplinkDataStatusTLV_elementIdentifier_descr_ = { "@MobileL3_GMM_SM_Types.UplinkDataStatusTLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &UplinkDataStatusTLV_elementIdentifier_xer_, &OCTETSTRING_json_, &UplinkDataStatusTLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UplinkDataStatusTLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t UplinkDataStatusTLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       UplinkDataStatusTLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t UplinkDataStatusTLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t UplinkDataStatusTLV_lengthIndicator_descr_ = { "@MobileL3_GMM_SM_Types.UplinkDataStatusTLV.lengthIndicator", &INTEGER_ber_, &UplinkDataStatusTLV_lengthIndicator_raw_, &INTEGER_text_, &UplinkDataStatusTLV_lengthIndicator_xer_, &INTEGER_json_, &UplinkDataStatusTLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UplinkDataStatusTLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       UplinkDataStatusV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t UplinkDataStatusV_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t UplinkDataStatusV_spare_descr_ = { "@MobileL3_GMM_SM_Types.UplinkDataStatusV.spare", &BITSTRING_ber_, &General__Types::BIT5_raw_, NULL, &UplinkDataStatusV_spare_xer_, &BITSTRING_json_, &UplinkDataStatusV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UplinkDataStatusV_spare_default_coding("RAW");
const XERdescriptor_t       UplinkDataStatusV_nSAPI__5__to__7_xer_ = { {"nSAPI_5_to_7>\n", "nSAPI_5_to_7>\n"}, {14, 14}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t UplinkDataStatusV_nSAPI__5__to__7_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t UplinkDataStatusV_nSAPI__5__to__7_descr_ = { "@MobileL3_GMM_SM_Types.UplinkDataStatusV.nSAPI_5_to_7", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &UplinkDataStatusV_nSAPI__5__to__7_xer_, &BITSTRING_json_, &UplinkDataStatusV_nSAPI__5__to__7_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UplinkDataStatusV_nSAPI__5__to__7_default_coding("RAW");
const XERdescriptor_t       UplinkDataStatusV_nSAPI__8__to__15_xer_ = { {"nSAPI_8_to_15>\n", "nSAPI_8_to_15>\n"}, {15, 15}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t UplinkDataStatusV_nSAPI__8__to__15_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t UplinkDataStatusV_nSAPI__8__to__15_descr_ = { "@MobileL3_GMM_SM_Types.UplinkDataStatusV.nSAPI_8_to_15", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &UplinkDataStatusV_nSAPI__8__to__15_xer_, &BITSTRING_json_, &UplinkDataStatusV_nSAPI__8__to__15_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UplinkDataStatusV_nSAPI__8__to__15_default_coding("RAW");
const TTCN_RAWdescriptor_t UplinkDataStatusV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for UplinkDataStatusV
const TTCN_Typedescriptor_t UplinkDataStatusV_descr_ = { "@MobileL3_GMM_SM_Types.UplinkDataStatusV", NULL, &UplinkDataStatusV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UplinkDataStatusV_default_coding("RAW");
UNIVERSAL_CHARSTRING UplinkDataStatusTLV_valueField_default_coding("RAW");
const TTCN_RAWdescriptor_t UplinkDataStatusTLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for UplinkDataStatusTLV
const TTCN_Typedescriptor_t UplinkDataStatusTLV_descr_ = { "@MobileL3_GMM_SM_Types.UplinkDataStatusTLV", NULL, &UplinkDataStatusTLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UplinkDataStatusTLV_default_coding("RAW");
const XERdescriptor_t       PDU__GMM__AttachRequest_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__GMM__AttachRequest_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__GMM__AttachRequest_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_AttachRequest.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__GMM__AttachRequest_messageType_xer_, &BITSTRING_json_, &PDU__GMM__AttachRequest_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__AttachRequest_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachRequest_msNetworkCapability_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachRequest_attachType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachRequest_gprsCKSN_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachRequest_drxParam_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachRequest_mobileIdentity_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachRequest_oldRoutingAreaID_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachRequest_msRACap_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__GMM__AttachRequest_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__GMM__AttachRequest
const TTCN_Typedescriptor_t PDU__GMM__AttachRequest_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_AttachRequest", NULL, &PDU__GMM__AttachRequest_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__AttachRequest_ptmsiSignature_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachRequest_reqGPRStimer_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachRequest_tmsiStatus_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachRequest_pC__LCSCapability_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachRequest_mobileStationClassmark2_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachRequest_mobileStationClassmark3_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachRequest_supportedCodecs_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachRequest_uENetworkCapability_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachRequest_additionalMobileIdentity_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachRequest_routingAreaIdentification2_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachRequest_voiceDomainandUEsUsageSetting_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachRequest_deviceProperties_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachRequest_p__TMSI__Type_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachRequest_mS__NetworkFeatureSupport_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachRequest_oldLocationAreaIdentification_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachRequest_additionalUpdateType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachRequest_tMSIBasedNRIcontainer_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachRequest_t3324_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachRequest_t3312__ExtendedValue_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachRequest_extendedDRXParameters_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachRequest_default_coding("RAW");
const XERdescriptor_t       PDU__GMM__AttachAccept_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__GMM__AttachAccept_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__GMM__AttachAccept_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_AttachAccept.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__GMM__AttachAccept_messageType_xer_, &BITSTRING_json_, &PDU__GMM__AttachAccept_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__AttachAccept_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachAccept_attachResult_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachAccept_forceToStandby_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachAccept_updateTimer_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachAccept_radioPriority_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachAccept_radioPriorityTOM8_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachAccept_routingAreaIdentification_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__GMM__AttachAccept_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__GMM__AttachAccept
const TTCN_Typedescriptor_t PDU__GMM__AttachAccept_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_AttachAccept", NULL, &PDU__GMM__AttachAccept_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__AttachAccept_ptmsiSignature_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachAccept_readyTimer_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachAccept_allocatedPTMSI_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachAccept_msIdentity_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachAccept_gmmCause_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachAccept_t3302_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachAccept_cellNotification_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachAccept_equivalentPLMNs_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachAccept_networkFeatureSupport_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachAccept_emergencyNumberList_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachAccept_requestedMSInformation_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachAccept_t3319_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachAccept_t3323_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachAccept_t3312__ExtendedValue_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachAccept_additionalNetworkFeatureSupport_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachAccept_t3324_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachAccept_extendedDRXParameters_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachAccept_default_coding("RAW");
const XERdescriptor_t       PDU__GMM__AttachComplete_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__GMM__AttachComplete_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__GMM__AttachComplete_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_AttachComplete.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__GMM__AttachComplete_messageType_xer_, &BITSTRING_json_, &PDU__GMM__AttachComplete_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__AttachComplete_messageType_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__GMM__AttachComplete_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__GMM__AttachComplete
const TTCN_Typedescriptor_t PDU__GMM__AttachComplete_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_AttachComplete", NULL, &PDU__GMM__AttachComplete_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__AttachComplete_interRATHandoverInformation_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachComplete_eUTRANinterRATHandoverInformation_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachComplete_default_coding("RAW");
const XERdescriptor_t       PDU__GMM__AttachReject_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__GMM__AttachReject_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__GMM__AttachReject_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_AttachReject.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__GMM__AttachReject_messageType_xer_, &BITSTRING_json_, &PDU__GMM__AttachReject_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__AttachReject_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachReject_gmmCause_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__GMM__AttachReject_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__GMM__AttachReject
const TTCN_Typedescriptor_t PDU__GMM__AttachReject_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_AttachReject", NULL, &PDU__GMM__AttachReject_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__AttachReject_t3302_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachReject_t3346_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AttachReject_default_coding("RAW");
const XERdescriptor_t       PDU__GMM__DetachRequest__SGSN__MS_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__GMM__DetachRequest__SGSN__MS_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__GMM__DetachRequest__SGSN__MS_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_DetachRequest_SGSN_MS.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__GMM__DetachRequest__SGSN__MS_messageType_xer_, &BITSTRING_json_, &PDU__GMM__DetachRequest__SGSN__MS_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__DetachRequest__SGSN__MS_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__DetachRequest__SGSN__MS_detachType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__DetachRequest__SGSN__MS_forceToStandby_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__GMM__DetachRequest__SGSN__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__GMM__DetachRequest__SGSN__MS
const TTCN_Typedescriptor_t PDU__GMM__DetachRequest__SGSN__MS_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_DetachRequest_SGSN_MS", NULL, &PDU__GMM__DetachRequest__SGSN__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__DetachRequest__SGSN__MS_gmmCause_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__DetachRequest__SGSN__MS_default_coding("RAW");
const XERdescriptor_t       PDU__GMM__DetachRequest__MS__SGSN_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__GMM__DetachRequest__MS__SGSN_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__GMM__DetachRequest__MS__SGSN_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_DetachRequest_MS_SGSN.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__GMM__DetachRequest__MS__SGSN_messageType_xer_, &BITSTRING_json_, &PDU__GMM__DetachRequest__MS__SGSN_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__DetachRequest__MS__SGSN_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__DetachRequest__MS__SGSN_detachType_default_coding("RAW");
const XERdescriptor_t       PDU__GMM__DetachRequest__MS__SGSN_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__GMM__DetachRequest__MS__SGSN_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__GMM__DetachRequest__MS__SGSN_spare_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_DetachRequest_MS_SGSN.spare", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &PDU__GMM__DetachRequest__MS__SGSN_spare_xer_, &BITSTRING_json_, &PDU__GMM__DetachRequest__MS__SGSN_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__DetachRequest__MS__SGSN_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__GMM__DetachRequest__MS__SGSN_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__GMM__DetachRequest__MS__SGSN
const TTCN_Typedescriptor_t PDU__GMM__DetachRequest__MS__SGSN_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_DetachRequest_MS_SGSN", NULL, &PDU__GMM__DetachRequest__MS__SGSN_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__DetachRequest__MS__SGSN_ptmsi_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__DetachRequest__MS__SGSN_ptmsiSignature_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__DetachRequest__MS__SGSN_default_coding("RAW");
const XERdescriptor_t       PDU__GMM__DetachAccept__MS__SGSN_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__GMM__DetachAccept__MS__SGSN_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__GMM__DetachAccept__MS__SGSN_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_DetachAccept_MS_SGSN.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__GMM__DetachAccept__MS__SGSN_messageType_xer_, &BITSTRING_json_, &PDU__GMM__DetachAccept__MS__SGSN_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__DetachAccept__MS__SGSN_messageType_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__GMM__DetachAccept__MS__SGSN_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__GMM__DetachAccept__MS__SGSN
const TTCN_Typedescriptor_t PDU__GMM__DetachAccept__MS__SGSN_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_DetachAccept_MS_SGSN", NULL, &PDU__GMM__DetachAccept__MS__SGSN_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__DetachAccept__MS__SGSN_default_coding("RAW");
const XERdescriptor_t       PDU__GMM__DetachAccept__SGSN__MS_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__GMM__DetachAccept__SGSN__MS_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__GMM__DetachAccept__SGSN__MS_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_DetachAccept_SGSN_MS.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__GMM__DetachAccept__SGSN__MS_messageType_xer_, &BITSTRING_json_, &PDU__GMM__DetachAccept__SGSN__MS_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__DetachAccept__SGSN__MS_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__DetachAccept__SGSN__MS_forceToStandby_default_coding("RAW");
const XERdescriptor_t       PDU__GMM__DetachAccept__SGSN__MS_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__GMM__DetachAccept__SGSN__MS_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__GMM__DetachAccept__SGSN__MS_spare_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_DetachAccept_SGSN_MS.spare", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &PDU__GMM__DetachAccept__SGSN__MS_spare_xer_, &BITSTRING_json_, &PDU__GMM__DetachAccept__SGSN__MS_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__DetachAccept__SGSN__MS_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__GMM__DetachAccept__SGSN__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__GMM__DetachAccept__SGSN__MS
const TTCN_Typedescriptor_t PDU__GMM__DetachAccept__SGSN__MS_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_DetachAccept_SGSN_MS", NULL, &PDU__GMM__DetachAccept__SGSN__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__DetachAccept__SGSN__MS_default_coding("RAW");
const XERdescriptor_t       PDU__GMM__P__TMSIReallocationCommand_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__GMM__P__TMSIReallocationCommand_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__GMM__P__TMSIReallocationCommand_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_P_TMSIReallocationCommand.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__GMM__P__TMSIReallocationCommand_messageType_xer_, &BITSTRING_json_, &PDU__GMM__P__TMSIReallocationCommand_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__P__TMSIReallocationCommand_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__P__TMSIReallocationCommand_allocatedPTMSI_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__P__TMSIReallocationCommand_routingAreaIdentification_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__P__TMSIReallocationCommand_forceToStandby_default_coding("RAW");
const XERdescriptor_t       PDU__GMM__P__TMSIReallocationCommand_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__GMM__P__TMSIReallocationCommand_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__GMM__P__TMSIReallocationCommand_spare_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_P_TMSIReallocationCommand.spare", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &PDU__GMM__P__TMSIReallocationCommand_spare_xer_, &BITSTRING_json_, &PDU__GMM__P__TMSIReallocationCommand_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__P__TMSIReallocationCommand_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__GMM__P__TMSIReallocationCommand_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__GMM__P__TMSIReallocationCommand
const TTCN_Typedescriptor_t PDU__GMM__P__TMSIReallocationCommand_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_P_TMSIReallocationCommand", NULL, &PDU__GMM__P__TMSIReallocationCommand_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__P__TMSIReallocationCommand_ptmsiSignature_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__P__TMSIReallocationCommand_default_coding("RAW");
const XERdescriptor_t       PDU__GMM__P__TMSIReallocationComplete_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__GMM__P__TMSIReallocationComplete_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__GMM__P__TMSIReallocationComplete_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_P_TMSIReallocationComplete.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__GMM__P__TMSIReallocationComplete_messageType_xer_, &BITSTRING_json_, &PDU__GMM__P__TMSIReallocationComplete_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__P__TMSIReallocationComplete_messageType_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__GMM__P__TMSIReallocationComplete_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__GMM__P__TMSIReallocationComplete
const TTCN_Typedescriptor_t PDU__GMM__P__TMSIReallocationComplete_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_P_TMSIReallocationComplete", NULL, &PDU__GMM__P__TMSIReallocationComplete_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__P__TMSIReallocationComplete_default_coding("RAW");
const XERdescriptor_t       PDU__GMM__AuthenticationAndCipheringRequest_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__GMM__AuthenticationAndCipheringRequest_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__GMM__AuthenticationAndCipheringRequest_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_AuthenticationAndCipheringRequest.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__GMM__AuthenticationAndCipheringRequest_messageType_xer_, &BITSTRING_json_, &PDU__GMM__AuthenticationAndCipheringRequest_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__AuthenticationAndCipheringRequest_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AuthenticationAndCipheringRequest_cipheringAlgorithm_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AuthenticationAndCipheringRequest_imeisvRequest_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AuthenticationAndCipheringRequest_forceToStandby_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AuthenticationAndCipheringRequest_acReferenceNumber_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__GMM__AuthenticationAndCipheringRequest_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__GMM__AuthenticationAndCipheringRequest
const TTCN_Typedescriptor_t PDU__GMM__AuthenticationAndCipheringRequest_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_AuthenticationAndCipheringRequest", NULL, &PDU__GMM__AuthenticationAndCipheringRequest_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__AuthenticationAndCipheringRequest_authenticationParameterRAND_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AuthenticationAndCipheringRequest_cipheringKeySequenceNumber_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AuthenticationAndCipheringRequest_authenticationParameterAUTN_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AuthenticationAndCipheringRequest_default_coding("RAW");
const XERdescriptor_t       PDU__GMM__AuthenticationAndCipheringResponse_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__GMM__AuthenticationAndCipheringResponse_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__GMM__AuthenticationAndCipheringResponse_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_AuthenticationAndCipheringResponse.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__GMM__AuthenticationAndCipheringResponse_messageType_xer_, &BITSTRING_json_, &PDU__GMM__AuthenticationAndCipheringResponse_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__AuthenticationAndCipheringResponse_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AuthenticationAndCipheringResponse_acReferenceNumber_default_coding("RAW");
const XERdescriptor_t       PDU__GMM__AuthenticationAndCipheringResponse_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__GMM__AuthenticationAndCipheringResponse_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__GMM__AuthenticationAndCipheringResponse_spare_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_AuthenticationAndCipheringResponse.spare", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &PDU__GMM__AuthenticationAndCipheringResponse_spare_xer_, &BITSTRING_json_, &PDU__GMM__AuthenticationAndCipheringResponse_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__AuthenticationAndCipheringResponse_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__GMM__AuthenticationAndCipheringResponse_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__GMM__AuthenticationAndCipheringResponse
const TTCN_Typedescriptor_t PDU__GMM__AuthenticationAndCipheringResponse_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_AuthenticationAndCipheringResponse", NULL, &PDU__GMM__AuthenticationAndCipheringResponse_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__AuthenticationAndCipheringResponse_authenticationParResp_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AuthenticationAndCipheringResponse_imeisv_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AuthenticationAndCipheringResponse_authenticationRespParExt_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AuthenticationAndCipheringResponse_default_coding("RAW");
const XERdescriptor_t       PDU__GMM__AuthenticationAndCipheringFailure_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__GMM__AuthenticationAndCipheringFailure_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__GMM__AuthenticationAndCipheringFailure_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_AuthenticationAndCipheringFailure.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__GMM__AuthenticationAndCipheringFailure_messageType_xer_, &BITSTRING_json_, &PDU__GMM__AuthenticationAndCipheringFailure_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__AuthenticationAndCipheringFailure_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AuthenticationAndCipheringFailure_gmmCause_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__GMM__AuthenticationAndCipheringFailure_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__GMM__AuthenticationAndCipheringFailure
const TTCN_Typedescriptor_t PDU__GMM__AuthenticationAndCipheringFailure_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_AuthenticationAndCipheringFailure", NULL, &PDU__GMM__AuthenticationAndCipheringFailure_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__AuthenticationAndCipheringFailure_authenticationFailureParam_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__AuthenticationAndCipheringFailure_default_coding("RAW");
const XERdescriptor_t       PDU__GMM__AuthenticationAndCipheringReject_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__GMM__AuthenticationAndCipheringReject_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__GMM__AuthenticationAndCipheringReject_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_AuthenticationAndCipheringReject.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__GMM__AuthenticationAndCipheringReject_messageType_xer_, &BITSTRING_json_, &PDU__GMM__AuthenticationAndCipheringReject_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__AuthenticationAndCipheringReject_messageType_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__GMM__AuthenticationAndCipheringReject_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__GMM__AuthenticationAndCipheringReject
const TTCN_Typedescriptor_t PDU__GMM__AuthenticationAndCipheringReject_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_AuthenticationAndCipheringReject", NULL, &PDU__GMM__AuthenticationAndCipheringReject_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__AuthenticationAndCipheringReject_default_coding("RAW");
const XERdescriptor_t       PDU__GMM__IdentityRequest_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__GMM__IdentityRequest_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__GMM__IdentityRequest_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_IdentityRequest.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__GMM__IdentityRequest_messageType_xer_, &BITSTRING_json_, &PDU__GMM__IdentityRequest_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__IdentityRequest_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__IdentityRequest_identityType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__IdentityRequest_forceToStandby_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__GMM__IdentityRequest_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__GMM__IdentityRequest
const TTCN_Typedescriptor_t PDU__GMM__IdentityRequest_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_IdentityRequest", NULL, &PDU__GMM__IdentityRequest_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__IdentityRequest_default_coding("RAW");
const XERdescriptor_t       PDU__GMM__IdentityResponse_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__GMM__IdentityResponse_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__GMM__IdentityResponse_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_IdentityResponse.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__GMM__IdentityResponse_messageType_xer_, &BITSTRING_json_, &PDU__GMM__IdentityResponse_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__IdentityResponse_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__IdentityResponse_mobileIdentity_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__GMM__IdentityResponse_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__GMM__IdentityResponse
const TTCN_Typedescriptor_t PDU__GMM__IdentityResponse_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_IdentityResponse", NULL, &PDU__GMM__IdentityResponse_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__IdentityResponse_default_coding("RAW");
const XERdescriptor_t       PDU__GMM__RoutingAreaUpdateRequest_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__GMM__RoutingAreaUpdateRequest_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__GMM__RoutingAreaUpdateRequest_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_RoutingAreaUpdateRequest.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__GMM__RoutingAreaUpdateRequest_messageType_xer_, &BITSTRING_json_, &PDU__GMM__RoutingAreaUpdateRequest_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateRequest_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateRequest_updateType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateRequest_gprsCKSN_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateRequest_oldRoutingAreaId_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateRequest_msRACap_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__GMM__RoutingAreaUpdateRequest_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__GMM__RoutingAreaUpdateRequest
const TTCN_Typedescriptor_t PDU__GMM__RoutingAreaUpdateRequest_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_RoutingAreaUpdateRequest", NULL, &PDU__GMM__RoutingAreaUpdateRequest_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateRequest_oldPTMSISignature_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateRequest_readyTimerValue_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateRequest_drxParameter_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateRequest_tmsiStatus_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateRequest_ptmsi_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateRequest_mSNetworkCapability_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateRequest_pdpContextStatus_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateRequest_pC__LCSCapability_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateRequest_mBMS__ContextStatus_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateRequest_uENetworkCapability_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateRequest_additionalMobileIdentity_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateRequest_oldRoutingAreaIdentification2_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateRequest_mobileStationClassmark2_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateRequest_mobileStationClassmark3_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateRequest_supportedCodecs_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateRequest_voiceDomainUEUsageSetting_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateRequest_p__TMSI__Type_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateRequest_deviceProperties_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateRequest_mS__NetworkFeatureSupport_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateRequest_oldLocationAreaIdentification_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateRequest_additionalUpdateType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateRequest_tMSIBasedNRIcontainer_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateRequest_t3324_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateRequest_t3312__ExtendedValue_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateRequest_extendedDRXParameters_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateRequest_default_coding("RAW");
const XERdescriptor_t       PDU__GMM__RoutingAreaUpdateAccept_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__GMM__RoutingAreaUpdateAccept_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__GMM__RoutingAreaUpdateAccept_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_RoutingAreaUpdateAccept.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__GMM__RoutingAreaUpdateAccept_messageType_xer_, &BITSTRING_json_, &PDU__GMM__RoutingAreaUpdateAccept_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateAccept_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateAccept_forceToStandby_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateAccept_updateResult_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateAccept_raUpdateTimer_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateAccept_routingAreaId_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__GMM__RoutingAreaUpdateAccept_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__GMM__RoutingAreaUpdateAccept
const TTCN_Typedescriptor_t PDU__GMM__RoutingAreaUpdateAccept_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_RoutingAreaUpdateAccept", NULL, &PDU__GMM__RoutingAreaUpdateAccept_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateAccept_ptmsiSignature_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateAccept_allocatedPTMSI_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateAccept_msIdentity_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateAccept_receiveNPDUNumbers_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateAccept_readyTimer_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateAccept_gmmCause_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateAccept_t3302_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateAccept_cellNotification_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateAccept_equivalentPLMNs_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateAccept_pdpContextStatus_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateAccept_networkFeatureSupport_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateAccept_emergencyNumberList_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateAccept_mBMS__ContextStatus_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateAccept_requestedMSInformation_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateAccept_t3319_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateAccept_t3323_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateAccept_t3312__ExtendedValue_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateAccept_additionalNetworkFeatureSupport_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateAccept_t3324_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateAccept_extendedDRXParameters_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateAccept_default_coding("RAW");
const XERdescriptor_t       PDU__GMM__RoutingAreaUpdateComplete_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__GMM__RoutingAreaUpdateComplete_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__GMM__RoutingAreaUpdateComplete_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_RoutingAreaUpdateComplete.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__GMM__RoutingAreaUpdateComplete_messageType_xer_, &BITSTRING_json_, &PDU__GMM__RoutingAreaUpdateComplete_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateComplete_messageType_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__GMM__RoutingAreaUpdateComplete_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__GMM__RoutingAreaUpdateComplete
const TTCN_Typedescriptor_t PDU__GMM__RoutingAreaUpdateComplete_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_RoutingAreaUpdateComplete", NULL, &PDU__GMM__RoutingAreaUpdateComplete_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateComplete_receiveNPDUNumbers_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateComplete_interRATHandoverInformation_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateComplete_eUTRANinterRATHandoverInformation_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateComplete_default_coding("RAW");
const XERdescriptor_t       PDU__GMM__RoutingAreaUpdateReject_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__GMM__RoutingAreaUpdateReject_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__GMM__RoutingAreaUpdateReject_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_RoutingAreaUpdateReject.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__GMM__RoutingAreaUpdateReject_messageType_xer_, &BITSTRING_json_, &PDU__GMM__RoutingAreaUpdateReject_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateReject_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateReject_gmmCause_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateReject_forceToStandby_default_coding("RAW");
const XERdescriptor_t       PDU__GMM__RoutingAreaUpdateReject_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__GMM__RoutingAreaUpdateReject_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__GMM__RoutingAreaUpdateReject_spare_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_RoutingAreaUpdateReject.spare", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &PDU__GMM__RoutingAreaUpdateReject_spare_xer_, &BITSTRING_json_, &PDU__GMM__RoutingAreaUpdateReject_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateReject_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__GMM__RoutingAreaUpdateReject_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__GMM__RoutingAreaUpdateReject
const TTCN_Typedescriptor_t PDU__GMM__RoutingAreaUpdateReject_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_RoutingAreaUpdateReject", NULL, &PDU__GMM__RoutingAreaUpdateReject_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateReject_t3302_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateReject_t3346_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__RoutingAreaUpdateReject_default_coding("RAW");
const XERdescriptor_t       PDU__GMM__GMM__Status_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__GMM__GMM__Status_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__GMM__GMM__Status_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_GMM_Status.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__GMM__GMM__Status_messageType_xer_, &BITSTRING_json_, &PDU__GMM__GMM__Status_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__GMM__Status_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__GMM__Status_gmmCause_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__GMM__GMM__Status_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__GMM__GMM__Status
const TTCN_Typedescriptor_t PDU__GMM__GMM__Status_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_GMM_Status", NULL, &PDU__GMM__GMM__Status_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__GMM__Status_default_coding("RAW");
const XERdescriptor_t       PDU__GMM__GMM__Information_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__GMM__GMM__Information_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__GMM__GMM__Information_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_GMM_Information.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__GMM__GMM__Information_messageType_xer_, &BITSTRING_json_, &PDU__GMM__GMM__Information_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__GMM__Information_messageType_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__GMM__GMM__Information_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__GMM__GMM__Information
const TTCN_Typedescriptor_t PDU__GMM__GMM__Information_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_GMM_Information", NULL, &PDU__GMM__GMM__Information_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__GMM__Information_fullNetworkName_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__GMM__Information_shortNetworkName_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__GMM__Information_networkTimeZone_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__GMM__Information_networkTimeAndTimeZone_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__GMM__Information_lsaIdentity_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__GMM__Information_networkDaylightSavingTime_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__GMM__Information_default_coding("RAW");
const XERdescriptor_t       PDU__GMM__ServiceRequest_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__GMM__ServiceRequest_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__GMM__ServiceRequest_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_ServiceRequest.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__GMM__ServiceRequest_messageType_xer_, &BITSTRING_json_, &PDU__GMM__ServiceRequest_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__ServiceRequest_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__ServiceRequest_cipheringKeySeqNum_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__ServiceRequest_serviceType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__ServiceRequest_ptmsi_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__GMM__ServiceRequest_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__GMM__ServiceRequest
const TTCN_Typedescriptor_t PDU__GMM__ServiceRequest_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_ServiceRequest", NULL, &PDU__GMM__ServiceRequest_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__ServiceRequest_pdpContextStatus_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__ServiceRequest_mBMS__ContextStatus_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__ServiceRequest_uplinkDataStatus_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__ServiceRequest_deviceProperties_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__ServiceRequest_default_coding("RAW");
const XERdescriptor_t       PDU__GMM__ServiceAccept_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__GMM__ServiceAccept_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__GMM__ServiceAccept_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_ServiceAccept.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__GMM__ServiceAccept_messageType_xer_, &BITSTRING_json_, &PDU__GMM__ServiceAccept_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__ServiceAccept_messageType_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__GMM__ServiceAccept_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__GMM__ServiceAccept
const TTCN_Typedescriptor_t PDU__GMM__ServiceAccept_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_ServiceAccept", NULL, &PDU__GMM__ServiceAccept_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__ServiceAccept_pdpContextStatus_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__ServiceAccept_mBMS__ContextStatus_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__ServiceAccept_default_coding("RAW");
const XERdescriptor_t       PDU__GMM__ServiceReject_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__GMM__ServiceReject_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__GMM__ServiceReject_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_ServiceReject.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__GMM__ServiceReject_messageType_xer_, &BITSTRING_json_, &PDU__GMM__ServiceReject_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__ServiceReject_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__ServiceReject_gmmCause_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__GMM__ServiceReject_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__GMM__ServiceReject
const TTCN_Typedescriptor_t PDU__GMM__ServiceReject_descr_ = { "@MobileL3_GMM_SM_Types.PDU_GMM_ServiceReject", NULL, &PDU__GMM__ServiceReject_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__GMM__ServiceReject_t3346_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__GMM__ServiceReject_default_coding("RAW");
const XERdescriptor_t       PDU__SM__ActivatePDPContextRequest_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__SM__ActivatePDPContextRequest_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__SM__ActivatePDPContextRequest_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ActivatePDPContextRequest.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__SM__ActivatePDPContextRequest_messageType_xer_, &BITSTRING_json_, &PDU__SM__ActivatePDPContextRequest_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ActivatePDPContextRequest_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivatePDPContextRequest_requestedNSAPI_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivatePDPContextRequest_requestedLLCSAPI_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivatePDPContextRequest_requestedQoS_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivatePDPContextRequest_requestedPDPaddress_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__SM__ActivatePDPContextRequest_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__SM__ActivatePDPContextRequest
const TTCN_Typedescriptor_t PDU__SM__ActivatePDPContextRequest_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ActivatePDPContextRequest", NULL, &PDU__SM__ActivatePDPContextRequest_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ActivatePDPContextRequest_accessPointName_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivatePDPContextRequest_protocolConfigOpts_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivatePDPContextRequest_requestType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivatePDPContextRequest_deviceProperties_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivatePDPContextRequest_nBIFOM__Container_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivatePDPContextRequest_default_coding("RAW");
const XERdescriptor_t       PDU__SM__ActivatePDPContextAccept_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__SM__ActivatePDPContextAccept_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__SM__ActivatePDPContextAccept_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ActivatePDPContextAccept.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__SM__ActivatePDPContextAccept_messageType_xer_, &BITSTRING_json_, &PDU__SM__ActivatePDPContextAccept_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ActivatePDPContextAccept_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivatePDPContextAccept_negotiatedLLCSAPI_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivatePDPContextAccept_negotiatedQoS_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivatePDPContextAccept_radioPriority_default_coding("RAW");
const XERdescriptor_t       PDU__SM__ActivatePDPContextAccept_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__SM__ActivatePDPContextAccept_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__SM__ActivatePDPContextAccept_spare_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ActivatePDPContextAccept.spare", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &PDU__SM__ActivatePDPContextAccept_spare_xer_, &BITSTRING_json_, &PDU__SM__ActivatePDPContextAccept_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ActivatePDPContextAccept_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__SM__ActivatePDPContextAccept_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__SM__ActivatePDPContextAccept
const TTCN_Typedescriptor_t PDU__SM__ActivatePDPContextAccept_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ActivatePDPContextAccept", NULL, &PDU__SM__ActivatePDPContextAccept_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ActivatePDPContextAccept_pdpAddress_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivatePDPContextAccept_protocolConfigOpts_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivatePDPContextAccept_packetFlowID_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivatePDPContextAccept_sMCause2_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivatePDPContextAccept_connectivityType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivatePDPContextAccept_wLANOffloadIndication_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivatePDPContextAccept_nBIFOM__Container_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivatePDPContextAccept_default_coding("RAW");
const XERdescriptor_t       PDU__SM__ActivatePDPContextReject_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__SM__ActivatePDPContextReject_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__SM__ActivatePDPContextReject_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ActivatePDPContextReject.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__SM__ActivatePDPContextReject_messageType_xer_, &BITSTRING_json_, &PDU__SM__ActivatePDPContextReject_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ActivatePDPContextReject_messageType_default_coding("RAW");
const XERdescriptor_t       PDU__SM__ActivatePDPContextReject_smCause_xer_ = { {"smCause>\n", "smCause>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDU__SM__ActivatePDPContextReject_smCause_oer_ext_arr_[0] = {};
const int PDU__SM__ActivatePDPContextReject_smCause_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDU__SM__ActivatePDPContextReject_smCause_oer_ = { -1, TRUE, 1, FALSE, 0, 0, PDU__SM__ActivatePDPContextReject_smCause_oer_ext_arr_, 0, PDU__SM__ActivatePDPContextReject_smCause_oer_p_};
const TTCN_Typedescriptor_t PDU__SM__ActivatePDPContextReject_smCause_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ActivatePDPContextReject.smCause", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &PDU__SM__ActivatePDPContextReject_smCause_xer_, &OCTETSTRING_json_, &PDU__SM__ActivatePDPContextReject_smCause_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ActivatePDPContextReject_smCause_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__SM__ActivatePDPContextReject_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__SM__ActivatePDPContextReject
const TTCN_Typedescriptor_t PDU__SM__ActivatePDPContextReject_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ActivatePDPContextReject", NULL, &PDU__SM__ActivatePDPContextReject_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ActivatePDPContextReject_protocolConfigOpts_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivatePDPContextReject_backOffTimer_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivatePDPContextReject_reAttemptIndicator_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivatePDPContextReject_nBIFOM__Container_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivatePDPContextReject_default_coding("RAW");
const XERdescriptor_t       PDU__SM__ActivateSecondaryPDPContextRequest_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__SM__ActivateSecondaryPDPContextRequest_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__SM__ActivateSecondaryPDPContextRequest_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ActivateSecondaryPDPContextRequest.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__SM__ActivateSecondaryPDPContextRequest_messageType_xer_, &BITSTRING_json_, &PDU__SM__ActivateSecondaryPDPContextRequest_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ActivateSecondaryPDPContextRequest_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivateSecondaryPDPContextRequest_requestedNSAPI_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivateSecondaryPDPContextRequest_requestedLLC__SAPI_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivateSecondaryPDPContextRequest_requestedQoS_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivateSecondaryPDPContextRequest_linkedTI_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__SM__ActivateSecondaryPDPContextRequest_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__SM__ActivateSecondaryPDPContextRequest
const TTCN_Typedescriptor_t PDU__SM__ActivateSecondaryPDPContextRequest_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ActivateSecondaryPDPContextRequest", NULL, &PDU__SM__ActivateSecondaryPDPContextRequest_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ActivateSecondaryPDPContextRequest_tft_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivateSecondaryPDPContextRequest_protocolConfigOpts_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivateSecondaryPDPContextRequest_deviceProperties_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivateSecondaryPDPContextRequest_nBIFOM__Container_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivateSecondaryPDPContextRequest_default_coding("RAW");
const XERdescriptor_t       PDU__SM__ActivateSecondaryPDPContextAccept_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__SM__ActivateSecondaryPDPContextAccept_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__SM__ActivateSecondaryPDPContextAccept_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ActivateSecondaryPDPContextAccept.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__SM__ActivateSecondaryPDPContextAccept_messageType_xer_, &BITSTRING_json_, &PDU__SM__ActivateSecondaryPDPContextAccept_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ActivateSecondaryPDPContextAccept_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivateSecondaryPDPContextAccept_negotiatedLLC__SAPI_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivateSecondaryPDPContextAccept_negotiatedQoS_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivateSecondaryPDPContextAccept_radioPriority_default_coding("RAW");
const XERdescriptor_t       PDU__SM__ActivateSecondaryPDPContextAccept_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__SM__ActivateSecondaryPDPContextAccept_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__SM__ActivateSecondaryPDPContextAccept_spare_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ActivateSecondaryPDPContextAccept.spare", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &PDU__SM__ActivateSecondaryPDPContextAccept_spare_xer_, &BITSTRING_json_, &PDU__SM__ActivateSecondaryPDPContextAccept_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ActivateSecondaryPDPContextAccept_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__SM__ActivateSecondaryPDPContextAccept_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__SM__ActivateSecondaryPDPContextAccept
const TTCN_Typedescriptor_t PDU__SM__ActivateSecondaryPDPContextAccept_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ActivateSecondaryPDPContextAccept", NULL, &PDU__SM__ActivateSecondaryPDPContextAccept_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ActivateSecondaryPDPContextAccept_packetFlowIdentifier_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivateSecondaryPDPContextAccept_protocolConfigOpts_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivateSecondaryPDPContextAccept_wLANOffloadIndication_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivateSecondaryPDPContextAccept_nBIFOM__Container_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivateSecondaryPDPContextAccept_default_coding("RAW");
const XERdescriptor_t       PDU__SM__ActivateSecondaryPDPContextReject_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__SM__ActivateSecondaryPDPContextReject_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__SM__ActivateSecondaryPDPContextReject_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ActivateSecondaryPDPContextReject.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__SM__ActivateSecondaryPDPContextReject_messageType_xer_, &BITSTRING_json_, &PDU__SM__ActivateSecondaryPDPContextReject_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ActivateSecondaryPDPContextReject_messageType_default_coding("RAW");
const XERdescriptor_t       PDU__SM__ActivateSecondaryPDPContextReject_smCause_xer_ = { {"smCause>\n", "smCause>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDU__SM__ActivateSecondaryPDPContextReject_smCause_oer_ext_arr_[0] = {};
const int PDU__SM__ActivateSecondaryPDPContextReject_smCause_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDU__SM__ActivateSecondaryPDPContextReject_smCause_oer_ = { -1, TRUE, 1, FALSE, 0, 0, PDU__SM__ActivateSecondaryPDPContextReject_smCause_oer_ext_arr_, 0, PDU__SM__ActivateSecondaryPDPContextReject_smCause_oer_p_};
const TTCN_Typedescriptor_t PDU__SM__ActivateSecondaryPDPContextReject_smCause_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ActivateSecondaryPDPContextReject.smCause", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &PDU__SM__ActivateSecondaryPDPContextReject_smCause_xer_, &OCTETSTRING_json_, &PDU__SM__ActivateSecondaryPDPContextReject_smCause_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ActivateSecondaryPDPContextReject_smCause_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__SM__ActivateSecondaryPDPContextReject_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__SM__ActivateSecondaryPDPContextReject
const TTCN_Typedescriptor_t PDU__SM__ActivateSecondaryPDPContextReject_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ActivateSecondaryPDPContextReject", NULL, &PDU__SM__ActivateSecondaryPDPContextReject_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ActivateSecondaryPDPContextReject_protocolConfigOpts_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivateSecondaryPDPContextReject_backOffTimer_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivateSecondaryPDPContextReject_reAttemptIndicator_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivateSecondaryPDPContextReject_nBIFOM__Container_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivateSecondaryPDPContextReject_default_coding("RAW");
const XERdescriptor_t       PDU__SM__RequestPDPContextActivation_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__SM__RequestPDPContextActivation_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__SM__RequestPDPContextActivation_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_RequestPDPContextActivation.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__SM__RequestPDPContextActivation_messageType_xer_, &BITSTRING_json_, &PDU__SM__RequestPDPContextActivation_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__RequestPDPContextActivation_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__RequestPDPContextActivation_offeredPDPAdress_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__SM__RequestPDPContextActivation_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__SM__RequestPDPContextActivation
const TTCN_Typedescriptor_t PDU__SM__RequestPDPContextActivation_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_RequestPDPContextActivation", NULL, &PDU__SM__RequestPDPContextActivation_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__RequestPDPContextActivation_accessPointName_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__RequestPDPContextActivation_protocolConfigOpts_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__RequestPDPContextActivation_nBIFOM__Container_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__RequestPDPContextActivation_default_coding("RAW");
const XERdescriptor_t       PDU__SM__RequestPDPContextActivationReject_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__SM__RequestPDPContextActivationReject_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__SM__RequestPDPContextActivationReject_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_RequestPDPContextActivationReject.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__SM__RequestPDPContextActivationReject_messageType_xer_, &BITSTRING_json_, &PDU__SM__RequestPDPContextActivationReject_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__RequestPDPContextActivationReject_messageType_default_coding("RAW");
const XERdescriptor_t       PDU__SM__RequestPDPContextActivationReject_smCause_xer_ = { {"smCause>\n", "smCause>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDU__SM__RequestPDPContextActivationReject_smCause_oer_ext_arr_[0] = {};
const int PDU__SM__RequestPDPContextActivationReject_smCause_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDU__SM__RequestPDPContextActivationReject_smCause_oer_ = { -1, TRUE, 1, FALSE, 0, 0, PDU__SM__RequestPDPContextActivationReject_smCause_oer_ext_arr_, 0, PDU__SM__RequestPDPContextActivationReject_smCause_oer_p_};
const TTCN_Typedescriptor_t PDU__SM__RequestPDPContextActivationReject_smCause_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_RequestPDPContextActivationReject.smCause", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &PDU__SM__RequestPDPContextActivationReject_smCause_xer_, &OCTETSTRING_json_, &PDU__SM__RequestPDPContextActivationReject_smCause_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__RequestPDPContextActivationReject_smCause_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__SM__RequestPDPContextActivationReject_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__SM__RequestPDPContextActivationReject
const TTCN_Typedescriptor_t PDU__SM__RequestPDPContextActivationReject_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_RequestPDPContextActivationReject", NULL, &PDU__SM__RequestPDPContextActivationReject_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__RequestPDPContextActivationReject_protocolConfigOpts_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__RequestPDPContextActivationReject_nBIFOM__Container_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__RequestPDPContextActivationReject_default_coding("RAW");
const XERdescriptor_t       PDU__SM__ModifyPDPContextRequest__SGSN__MS_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__SM__ModifyPDPContextRequest__SGSN__MS_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__SM__ModifyPDPContextRequest__SGSN__MS_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ModifyPDPContextRequest_SGSN_MS.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__SM__ModifyPDPContextRequest__SGSN__MS_messageType_xer_, &BITSTRING_json_, &PDU__SM__ModifyPDPContextRequest__SGSN__MS_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextRequest__SGSN__MS_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextRequest__SGSN__MS_radioPriority_default_coding("RAW");
const XERdescriptor_t       PDU__SM__ModifyPDPContextRequest__SGSN__MS_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__SM__ModifyPDPContextRequest__SGSN__MS_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__SM__ModifyPDPContextRequest__SGSN__MS_spare_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ModifyPDPContextRequest_SGSN_MS.spare", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &PDU__SM__ModifyPDPContextRequest__SGSN__MS_spare_xer_, &BITSTRING_json_, &PDU__SM__ModifyPDPContextRequest__SGSN__MS_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextRequest__SGSN__MS_spare_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextRequest__SGSN__MS_requestedLLC__SAPI_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextRequest__SGSN__MS_newQoS_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__SM__ModifyPDPContextRequest__SGSN__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__SM__ModifyPDPContextRequest__SGSN__MS
const TTCN_Typedescriptor_t PDU__SM__ModifyPDPContextRequest__SGSN__MS_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ModifyPDPContextRequest_SGSN_MS", NULL, &PDU__SM__ModifyPDPContextRequest__SGSN__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextRequest__SGSN__MS_pdpAddress_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextRequest__SGSN__MS_packetFlowIdentifier_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextRequest__SGSN__MS_protocolConfigOpts_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextRequest__SGSN__MS_tFT_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextRequest__SGSN__MS_wLANOffloadIndication_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextRequest__SGSN__MS_nBIFOM__Container_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextRequest__SGSN__MS_default_coding("RAW");
const XERdescriptor_t       PDU__SM__ModifyPDPContextRequest__MS__SGSN_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__SM__ModifyPDPContextRequest__MS__SGSN_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__SM__ModifyPDPContextRequest__MS__SGSN_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ModifyPDPContextRequest_MS_SGSN.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__SM__ModifyPDPContextRequest__MS__SGSN_messageType_xer_, &BITSTRING_json_, &PDU__SM__ModifyPDPContextRequest__MS__SGSN_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextRequest__MS__SGSN_messageType_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__SM__ModifyPDPContextRequest__MS__SGSN_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__SM__ModifyPDPContextRequest__MS__SGSN
const TTCN_Typedescriptor_t PDU__SM__ModifyPDPContextRequest__MS__SGSN_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ModifyPDPContextRequest_MS_SGSN", NULL, &PDU__SM__ModifyPDPContextRequest__MS__SGSN_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextRequest__MS__SGSN_requestedLLC__SAPI_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextRequest__MS__SGSN_requestedNewQoS_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextRequest__MS__SGSN_newTFT_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextRequest__MS__SGSN_protocolConfigOpts_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextRequest__MS__SGSN_deviceProperties_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextRequest__MS__SGSN_nBIFOM__Container_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextRequest__MS__SGSN_default_coding("RAW");
const XERdescriptor_t       PDU__SM__ModifyPDPContextAccept__MS__SGSN_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__SM__ModifyPDPContextAccept__MS__SGSN_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__SM__ModifyPDPContextAccept__MS__SGSN_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ModifyPDPContextAccept_MS_SGSN.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__SM__ModifyPDPContextAccept__MS__SGSN_messageType_xer_, &BITSTRING_json_, &PDU__SM__ModifyPDPContextAccept__MS__SGSN_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextAccept__MS__SGSN_messageType_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__SM__ModifyPDPContextAccept__MS__SGSN_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__SM__ModifyPDPContextAccept__MS__SGSN
const TTCN_Typedescriptor_t PDU__SM__ModifyPDPContextAccept__MS__SGSN_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ModifyPDPContextAccept_MS_SGSN", NULL, &PDU__SM__ModifyPDPContextAccept__MS__SGSN_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextAccept__MS__SGSN_protocolConfigOpts_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextAccept__MS__SGSN_nBIFOM__Container_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextAccept__MS__SGSN_default_coding("RAW");
const XERdescriptor_t       PDU__SM__ModifyPDPContextAccept__SGSN__MS_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__SM__ModifyPDPContextAccept__SGSN__MS_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__SM__ModifyPDPContextAccept__SGSN__MS_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ModifyPDPContextAccept_SGSN_MS.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__SM__ModifyPDPContextAccept__SGSN__MS_messageType_xer_, &BITSTRING_json_, &PDU__SM__ModifyPDPContextAccept__SGSN__MS_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextAccept__SGSN__MS_messageType_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__SM__ModifyPDPContextAccept__SGSN__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__SM__ModifyPDPContextAccept__SGSN__MS
const TTCN_Typedescriptor_t PDU__SM__ModifyPDPContextAccept__SGSN__MS_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ModifyPDPContextAccept_SGSN_MS", NULL, &PDU__SM__ModifyPDPContextAccept__SGSN__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextAccept__SGSN__MS_negotiatedQoS_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextAccept__SGSN__MS_negotiatedLLC__SAPI_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextAccept__SGSN__MS_newRadioPriority_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextAccept__SGSN__MS_packetFlowIdentifier_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextAccept__SGSN__MS_protocolConfigOpts_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextAccept__SGSN__MS_wLANOffloadIndication_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextAccept__SGSN__MS_nBIFOM__Container_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextAccept__SGSN__MS_default_coding("RAW");
const XERdescriptor_t       PDU__SM__ModifyPDPContextReject_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__SM__ModifyPDPContextReject_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__SM__ModifyPDPContextReject_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ModifyPDPContextReject.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__SM__ModifyPDPContextReject_messageType_xer_, &BITSTRING_json_, &PDU__SM__ModifyPDPContextReject_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextReject_messageType_default_coding("RAW");
const XERdescriptor_t       PDU__SM__ModifyPDPContextReject_smCause_xer_ = { {"smCause>\n", "smCause>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDU__SM__ModifyPDPContextReject_smCause_oer_ext_arr_[0] = {};
const int PDU__SM__ModifyPDPContextReject_smCause_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDU__SM__ModifyPDPContextReject_smCause_oer_ = { -1, TRUE, 1, FALSE, 0, 0, PDU__SM__ModifyPDPContextReject_smCause_oer_ext_arr_, 0, PDU__SM__ModifyPDPContextReject_smCause_oer_p_};
const TTCN_Typedescriptor_t PDU__SM__ModifyPDPContextReject_smCause_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ModifyPDPContextReject.smCause", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &PDU__SM__ModifyPDPContextReject_smCause_xer_, &OCTETSTRING_json_, &PDU__SM__ModifyPDPContextReject_smCause_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextReject_smCause_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__SM__ModifyPDPContextReject_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__SM__ModifyPDPContextReject
const TTCN_Typedescriptor_t PDU__SM__ModifyPDPContextReject_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ModifyPDPContextReject", NULL, &PDU__SM__ModifyPDPContextReject_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextReject_protocolConfigOpts_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextReject_backOffTimer_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextReject_reAttemptIndicator_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextReject_nBIFOM__Container_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ModifyPDPContextReject_default_coding("RAW");
const XERdescriptor_t       PDU__SM__DeactivatePDPContextRequest_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__SM__DeactivatePDPContextRequest_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__SM__DeactivatePDPContextRequest_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_DeactivatePDPContextRequest.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__SM__DeactivatePDPContextRequest_messageType_xer_, &BITSTRING_json_, &PDU__SM__DeactivatePDPContextRequest_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__DeactivatePDPContextRequest_messageType_default_coding("RAW");
const XERdescriptor_t       PDU__SM__DeactivatePDPContextRequest_smCause_xer_ = { {"smCause>\n", "smCause>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDU__SM__DeactivatePDPContextRequest_smCause_oer_ext_arr_[0] = {};
const int PDU__SM__DeactivatePDPContextRequest_smCause_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDU__SM__DeactivatePDPContextRequest_smCause_oer_ = { -1, TRUE, 1, FALSE, 0, 0, PDU__SM__DeactivatePDPContextRequest_smCause_oer_ext_arr_, 0, PDU__SM__DeactivatePDPContextRequest_smCause_oer_p_};
const TTCN_Typedescriptor_t PDU__SM__DeactivatePDPContextRequest_smCause_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_DeactivatePDPContextRequest.smCause", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &PDU__SM__DeactivatePDPContextRequest_smCause_xer_, &OCTETSTRING_json_, &PDU__SM__DeactivatePDPContextRequest_smCause_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__DeactivatePDPContextRequest_smCause_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__SM__DeactivatePDPContextRequest_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__SM__DeactivatePDPContextRequest
const TTCN_Typedescriptor_t PDU__SM__DeactivatePDPContextRequest_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_DeactivatePDPContextRequest", NULL, &PDU__SM__DeactivatePDPContextRequest_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__DeactivatePDPContextRequest_tearDownIndicator_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__DeactivatePDPContextRequest_protocolConfigOpts_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__DeactivatePDPContextRequest_mBMSprotocolConfigOptions_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__DeactivatePDPContextRequest_t3396_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__DeactivatePDPContextRequest_wLANOffloadIndication_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__DeactivatePDPContextRequest_nBIFOM__Container_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__DeactivatePDPContextRequest_default_coding("RAW");
const XERdescriptor_t       PDU__SM__DeactivatePDPContextAccept_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__SM__DeactivatePDPContextAccept_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__SM__DeactivatePDPContextAccept_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_DeactivatePDPContextAccept.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__SM__DeactivatePDPContextAccept_messageType_xer_, &BITSTRING_json_, &PDU__SM__DeactivatePDPContextAccept_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__DeactivatePDPContextAccept_messageType_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__SM__DeactivatePDPContextAccept_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__SM__DeactivatePDPContextAccept
const TTCN_Typedescriptor_t PDU__SM__DeactivatePDPContextAccept_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_DeactivatePDPContextAccept", NULL, &PDU__SM__DeactivatePDPContextAccept_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__DeactivatePDPContextAccept_protocolConfigOpts_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__DeactivatePDPContextAccept_mBMSprotocolConfigOptions_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__DeactivatePDPContextAccept_nBIFOM__Container_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__DeactivatePDPContextAccept_default_coding("RAW");
const XERdescriptor_t       PDU__SM__RequestSecondaryPDPContextActivation_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__SM__RequestSecondaryPDPContextActivation_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__SM__RequestSecondaryPDPContextActivation_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_RequestSecondaryPDPContextActivation.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__SM__RequestSecondaryPDPContextActivation_messageType_xer_, &BITSTRING_json_, &PDU__SM__RequestSecondaryPDPContextActivation_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__RequestSecondaryPDPContextActivation_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__RequestSecondaryPDPContextActivation_requiredQoS_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__RequestSecondaryPDPContextActivation_linkedTI_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__SM__RequestSecondaryPDPContextActivation_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__SM__RequestSecondaryPDPContextActivation
const TTCN_Typedescriptor_t PDU__SM__RequestSecondaryPDPContextActivation_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_RequestSecondaryPDPContextActivation", NULL, &PDU__SM__RequestSecondaryPDPContextActivation_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__RequestSecondaryPDPContextActivation_tFT_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__RequestSecondaryPDPContextActivation_protocolConfigOpts_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__RequestSecondaryPDPContextActivation_wLANOffloadIndication_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__RequestSecondaryPDPContextActivation_nBIFOM__Container_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__RequestSecondaryPDPContextActivation_default_coding("RAW");
const XERdescriptor_t       PDU__SM__RequestSecondaryPDPContextActivationReject_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__SM__RequestSecondaryPDPContextActivationReject_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__SM__RequestSecondaryPDPContextActivationReject_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_RequestSecondaryPDPContextActivationReject.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__SM__RequestSecondaryPDPContextActivationReject_messageType_xer_, &BITSTRING_json_, &PDU__SM__RequestSecondaryPDPContextActivationReject_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__RequestSecondaryPDPContextActivationReject_messageType_default_coding("RAW");
const XERdescriptor_t       PDU__SM__RequestSecondaryPDPContextActivationReject_smCause_xer_ = { {"smCause>\n", "smCause>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDU__SM__RequestSecondaryPDPContextActivationReject_smCause_oer_ext_arr_[0] = {};
const int PDU__SM__RequestSecondaryPDPContextActivationReject_smCause_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDU__SM__RequestSecondaryPDPContextActivationReject_smCause_oer_ = { -1, TRUE, 1, FALSE, 0, 0, PDU__SM__RequestSecondaryPDPContextActivationReject_smCause_oer_ext_arr_, 0, PDU__SM__RequestSecondaryPDPContextActivationReject_smCause_oer_p_};
const TTCN_Typedescriptor_t PDU__SM__RequestSecondaryPDPContextActivationReject_smCause_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_RequestSecondaryPDPContextActivationReject.smCause", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &PDU__SM__RequestSecondaryPDPContextActivationReject_smCause_xer_, &OCTETSTRING_json_, &PDU__SM__RequestSecondaryPDPContextActivationReject_smCause_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__RequestSecondaryPDPContextActivationReject_smCause_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__SM__RequestSecondaryPDPContextActivationReject_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__SM__RequestSecondaryPDPContextActivationReject
const TTCN_Typedescriptor_t PDU__SM__RequestSecondaryPDPContextActivationReject_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_RequestSecondaryPDPContextActivationReject", NULL, &PDU__SM__RequestSecondaryPDPContextActivationReject_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__RequestSecondaryPDPContextActivationReject_protocolConfigOpts_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__RequestSecondaryPDPContextActivationReject_nBIFOM__Container_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__RequestSecondaryPDPContextActivationReject_default_coding("RAW");
const XERdescriptor_t       PDU__SM__Notification_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__SM__Notification_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__SM__Notification_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_Notification.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__SM__Notification_messageType_xer_, &BITSTRING_json_, &PDU__SM__Notification_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__Notification_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__Notification_notificationIndicator_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__SM__Notification_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__SM__Notification
const TTCN_Typedescriptor_t PDU__SM__Notification_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_Notification", NULL, &PDU__SM__Notification_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__Notification_default_coding("RAW");
const XERdescriptor_t       PDU__SM__SM__Status_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__SM__SM__Status_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__SM__SM__Status_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_SM_Status.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__SM__SM__Status_messageType_xer_, &BITSTRING_json_, &PDU__SM__SM__Status_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__SM__Status_messageType_default_coding("RAW");
const XERdescriptor_t       PDU__SM__SM__Status_smCause_xer_ = { {"smCause>\n", "smCause>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDU__SM__SM__Status_smCause_oer_ext_arr_[0] = {};
const int PDU__SM__SM__Status_smCause_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDU__SM__SM__Status_smCause_oer_ = { -1, TRUE, 1, FALSE, 0, 0, PDU__SM__SM__Status_smCause_oer_ext_arr_, 0, PDU__SM__SM__Status_smCause_oer_p_};
const TTCN_Typedescriptor_t PDU__SM__SM__Status_smCause_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_SM_Status.smCause", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &PDU__SM__SM__Status_smCause_xer_, &OCTETSTRING_json_, &PDU__SM__SM__Status_smCause_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__SM__Status_smCause_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__SM__SM__Status_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__SM__SM__Status
const TTCN_Typedescriptor_t PDU__SM__SM__Status_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_SM_Status", NULL, &PDU__SM__SM__Status_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__SM__Status_default_coding("RAW");
const XERdescriptor_t       PDU__SM__ActivateMBMSContextRequest_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__SM__ActivateMBMSContextRequest_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__SM__ActivateMBMSContextRequest_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ActivateMBMSContextRequest.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__SM__ActivateMBMSContextRequest_messageType_xer_, &BITSTRING_json_, &PDU__SM__ActivateMBMSContextRequest_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ActivateMBMSContextRequest_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivateMBMSContextRequest_requestedMBMS__NSAPI_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivateMBMSContextRequest_requestedLLCSAPI_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivateMBMSContextRequest_supportdMBMSBearerCapabilities_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivateMBMSContextRequest_requestedMulticastAddress_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivateMBMSContextRequest_accessPointName_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__SM__ActivateMBMSContextRequest_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__SM__ActivateMBMSContextRequest
const TTCN_Typedescriptor_t PDU__SM__ActivateMBMSContextRequest_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ActivateMBMSContextRequest", NULL, &PDU__SM__ActivateMBMSContextRequest_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ActivateMBMSContextRequest_mBMSprotocolConfigOptions_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivateMBMSContextRequest_deviceProperties_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivateMBMSContextRequest_default_coding("RAW");
const XERdescriptor_t       PDU__SM__ActivateMBMSContextAccept_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__SM__ActivateMBMSContextAccept_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__SM__ActivateMBMSContextAccept_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ActivateMBMSContextAccept.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__SM__ActivateMBMSContextAccept_messageType_xer_, &BITSTRING_json_, &PDU__SM__ActivateMBMSContextAccept_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ActivateMBMSContextAccept_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivateMBMSContextAccept_temporaryMobileGroupIDLV_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivateMBMSContextAccept_negotiatedLLCSAPI_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__SM__ActivateMBMSContextAccept_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__SM__ActivateMBMSContextAccept
const TTCN_Typedescriptor_t PDU__SM__ActivateMBMSContextAccept_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ActivateMBMSContextAccept", NULL, &PDU__SM__ActivateMBMSContextAccept_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ActivateMBMSContextAccept_mBMSprotocolConfigOptions_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivateMBMSContextAccept_default_coding("RAW");
const XERdescriptor_t       PDU__SM__ActivateMBMSContextReject_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__SM__ActivateMBMSContextReject_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__SM__ActivateMBMSContextReject_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ActivateMBMSContextReject.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__SM__ActivateMBMSContextReject_messageType_xer_, &BITSTRING_json_, &PDU__SM__ActivateMBMSContextReject_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ActivateMBMSContextReject_messageType_default_coding("RAW");
const XERdescriptor_t       PDU__SM__ActivateMBMSContextReject_smCause_xer_ = { {"smCause>\n", "smCause>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDU__SM__ActivateMBMSContextReject_smCause_oer_ext_arr_[0] = {};
const int PDU__SM__ActivateMBMSContextReject_smCause_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDU__SM__ActivateMBMSContextReject_smCause_oer_ = { -1, TRUE, 1, FALSE, 0, 0, PDU__SM__ActivateMBMSContextReject_smCause_oer_ext_arr_, 0, PDU__SM__ActivateMBMSContextReject_smCause_oer_p_};
const TTCN_Typedescriptor_t PDU__SM__ActivateMBMSContextReject_smCause_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ActivateMBMSContextReject.smCause", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &PDU__SM__ActivateMBMSContextReject_smCause_xer_, &OCTETSTRING_json_, &PDU__SM__ActivateMBMSContextReject_smCause_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ActivateMBMSContextReject_smCause_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__SM__ActivateMBMSContextReject_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__SM__ActivateMBMSContextReject
const TTCN_Typedescriptor_t PDU__SM__ActivateMBMSContextReject_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_ActivateMBMSContextReject", NULL, &PDU__SM__ActivateMBMSContextReject_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__ActivateMBMSContextReject_mBMSprotocolConfigOptions_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivateMBMSContextReject_backOffTimer_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivateMBMSContextReject_reAttemptIndicator_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__ActivateMBMSContextReject_default_coding("RAW");
const XERdescriptor_t       PDU__SM__RequestMBMSContextActivation_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__SM__RequestMBMSContextActivation_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__SM__RequestMBMSContextActivation_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_RequestMBMSContextActivation.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__SM__RequestMBMSContextActivation_messageType_xer_, &BITSTRING_json_, &PDU__SM__RequestMBMSContextActivation_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__RequestMBMSContextActivation_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__RequestMBMSContextActivation_linkedNSAPI_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__RequestMBMSContextActivation_offeredMulticastAddress_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__RequestMBMSContextActivation_accessPointName_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__SM__RequestMBMSContextActivation_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__SM__RequestMBMSContextActivation
const TTCN_Typedescriptor_t PDU__SM__RequestMBMSContextActivation_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_RequestMBMSContextActivation", NULL, &PDU__SM__RequestMBMSContextActivation_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__RequestMBMSContextActivation_mBMSprotocolConfigOptions_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__RequestMBMSContextActivation_default_coding("RAW");
const XERdescriptor_t       PDU__SM__RequestMBMSContextActivationReject_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__SM__RequestMBMSContextActivationReject_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__SM__RequestMBMSContextActivationReject_messageType_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_RequestMBMSContextActivationReject.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__SM__RequestMBMSContextActivationReject_messageType_xer_, &BITSTRING_json_, &PDU__SM__RequestMBMSContextActivationReject_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__RequestMBMSContextActivationReject_messageType_default_coding("RAW");
const XERdescriptor_t       PDU__SM__RequestMBMSContextActivationReject_smCause_xer_ = { {"smCause>\n", "smCause>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDU__SM__RequestMBMSContextActivationReject_smCause_oer_ext_arr_[0] = {};
const int PDU__SM__RequestMBMSContextActivationReject_smCause_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDU__SM__RequestMBMSContextActivationReject_smCause_oer_ = { -1, TRUE, 1, FALSE, 0, 0, PDU__SM__RequestMBMSContextActivationReject_smCause_oer_ext_arr_, 0, PDU__SM__RequestMBMSContextActivationReject_smCause_oer_p_};
const TTCN_Typedescriptor_t PDU__SM__RequestMBMSContextActivationReject_smCause_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_RequestMBMSContextActivationReject.smCause", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &PDU__SM__RequestMBMSContextActivationReject_smCause_xer_, &OCTETSTRING_json_, &PDU__SM__RequestMBMSContextActivationReject_smCause_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__RequestMBMSContextActivationReject_smCause_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__SM__RequestMBMSContextActivationReject_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__SM__RequestMBMSContextActivationReject
const TTCN_Typedescriptor_t PDU__SM__RequestMBMSContextActivationReject_descr_ = { "@MobileL3_GMM_SM_Types.PDU_SM_RequestMBMSContextActivationReject", NULL, &PDU__SM__RequestMBMSContextActivationReject_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__SM__RequestMBMSContextActivationReject_mBMSprotocolConfigOptions_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__SM__RequestMBMSContextActivationReject_default_coding("RAW");
const TTCN_RAWdescriptor_t L3__GSM__MS__SGSN_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for L3__GSM__MS__SGSN
const TTCN_Typedescriptor_t L3__GSM__MS__SGSN_descr_ = { "@MobileL3_GMM_SM_Types.L3_GSM_MS_SGSN", NULL, &L3__GSM__MS__SGSN_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING L3__GSM__MS__SGSN_activatePDPContextRequest_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GSM__MS__SGSN_activateSecondaryPDPContextRequest_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GSM__MS__SGSN_requestPDPContextActivationReject_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GSM__MS__SGSN_modifyPDPContextRequest__MS__SGSN_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GSM__MS__SGSN_modifyPDPContextAccept__MS__SGSN_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GSM__MS__SGSN_deactivatePDPContextRequest_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GSM__MS__SGSN_deactivatePDPContextAccept_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GSM__MS__SGSN_sM__Status_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GSM__MS__SGSN_activateMBMSContextRequest_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GSM__MS__SGSN_requestMBMSContextActivationReject_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GSM__MS__SGSN_requestSecondaryPDPContextActivationReject_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GSM__MS__SGSN_notification_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GSM__MS__SGSN_default_coding("RAW");
const TTCN_RAWdescriptor_t L3__GSM__SGSN__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for L3__GSM__SGSN__MS
const TTCN_Typedescriptor_t L3__GSM__SGSN__MS_descr_ = { "@MobileL3_GMM_SM_Types.L3_GSM_SGSN_MS", NULL, &L3__GSM__SGSN__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING L3__GSM__SGSN__MS_activatePDPContextAccept_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GSM__SGSN__MS_activatePDPContextReject_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GSM__SGSN__MS_activateSecondaryPDPContextAccept_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GSM__SGSN__MS_activateSecondaryPDPContextReject_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GSM__SGSN__MS_requestPDPContextActivation_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GSM__SGSN__MS_modifyPDPContextRequest__SGSN__MS_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GSM__SGSN__MS_modifyPDPContextAccept__SGSN__MS_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GSM__SGSN__MS_modifyPDPContextReject_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GSM__SGSN__MS_deactivatePDPContextRequest_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GSM__SGSN__MS_deactivatePDPContextAccept_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GSM__SGSN__MS_sM__Status_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GSM__SGSN__MS_activateMBMSContextAccept_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GSM__SGSN__MS_activateMBMSContextReject_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GSM__SGSN__MS_requestMBMSContextActivation_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GSM__SGSN__MS_requestSecondaryPDPContextActivation_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GSM__SGSN__MS_default_coding("RAW");
const TTCN_RAWdescriptor_t L3__GMM__MS__SGSN_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for L3__GMM__MS__SGSN
const TTCN_Typedescriptor_t L3__GMM__MS__SGSN_descr_ = { "@MobileL3_GMM_SM_Types.L3_GMM_MS_SGSN", NULL, &L3__GMM__MS__SGSN_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING L3__GMM__MS__SGSN_attachRequest_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GMM__MS__SGSN_attachComplete_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GMM__MS__SGSN_detachRequest__MS__SGSN_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GMM__MS__SGSN_detachAccept__MS__SGSN_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GMM__MS__SGSN_p__TMSIReallocationComplete_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GMM__MS__SGSN_authenticationAndCipheringResponse_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GMM__MS__SGSN_authenticationAndCipheringFailure_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GMM__MS__SGSN_identityResponse_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GMM__MS__SGSN_routingAreaUpdateRequest_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GMM__MS__SGSN_routingAreaUpdateComplete_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GMM__MS__SGSN_gMM__Status_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GMM__MS__SGSN_serviceRequest_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GMM__MS__SGSN_default_coding("RAW");
const TTCN_RAWdescriptor_t L3__GMM__SGSN__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for L3__GMM__SGSN__MS
const TTCN_Typedescriptor_t L3__GMM__SGSN__MS_descr_ = { "@MobileL3_GMM_SM_Types.L3_GMM_SGSN_MS", NULL, &L3__GMM__SGSN__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING L3__GMM__SGSN__MS_attachAccept_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GMM__SGSN__MS_attachReject_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GMM__SGSN__MS_detachRequest__SGSN__MS_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GMM__SGSN__MS_detachAccept__SGSN__MS_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GMM__SGSN__MS_p__TMSIReallocationCommand_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GMM__SGSN__MS_authenticationAndCipheringRequest_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GMM__SGSN__MS_authenticationAndCipheringReject_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GMM__SGSN__MS_identityRequest_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GMM__SGSN__MS_routingAreaUpdateAccept_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GMM__SGSN__MS_routingAreaUpdateReject_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GMM__SGSN__MS_gMM__Status_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GMM__SGSN__MS_gMM__Information_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GMM__SGSN__MS_serviceAccept_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GMM__SGSN__MS_serviceReject_default_coding("RAW");
UNIVERSAL_CHARSTRING L3__GMM__SGSN__MS_default_coding("RAW");
TTCN_Module module_object("MobileL3_GMM_SM_Types", __DATE__, __TIME__, module_checksum, pre_init_module, "", 0U, 2U, 0U, 99U, "", 0LU, 0, post_init_module, NULL, NULL, NULL, NULL, NULL, NULL, NULL);

const RuntimeVersionChecker ver_checker(  current_runtime_version.requires_major_version_11,
  current_runtime_version.requires_minor_version_1,
  current_runtime_version.requires_patch_level_0,  current_runtime_version.requires_runtime_1);

/* Member functions of C++ classes */

AdditionalUpdateTypeV::AdditionalUpdateTypeV()
{
}

AdditionalUpdateTypeV::AdditionalUpdateTypeV(const BITSTRING& par_aUTV,
    const BITSTRING& par_spare)
  :   field_aUTV(par_aUTV),
  field_spare(par_spare)
{
}

AdditionalUpdateTypeV::AdditionalUpdateTypeV(const AdditionalUpdateTypeV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeV.");
if (other_value.aUTV().is_bound()) field_aUTV = other_value.aUTV();
else field_aUTV.clean_up();
if (other_value.spare().is_bound()) field_spare = other_value.spare();
else field_spare.clean_up();
}

void AdditionalUpdateTypeV::clean_up()
{
field_aUTV.clean_up();
field_spare.clean_up();
}

const TTCN_Typedescriptor_t* AdditionalUpdateTypeV::get_descriptor() const { return &AdditionalUpdateTypeV_descr_; }
AdditionalUpdateTypeV& AdditionalUpdateTypeV::operator=(const AdditionalUpdateTypeV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeV.");
  if (other_value.aUTV().is_bound()) field_aUTV = other_value.aUTV();
  else field_aUTV.clean_up();
  if (other_value.spare().is_bound()) field_spare = other_value.spare();
  else field_spare.clean_up();
}
return *this;
}

boolean AdditionalUpdateTypeV::operator==(const AdditionalUpdateTypeV& other_value) const
{
return field_aUTV==other_value.field_aUTV
  && field_spare==other_value.field_spare;
}

boolean AdditionalUpdateTypeV::is_bound() const
{
return (field_aUTV.is_bound())
  || (field_spare.is_bound());
}
boolean AdditionalUpdateTypeV::is_value() const
{
return field_aUTV.is_value()
  && field_spare.is_value();
}
void AdditionalUpdateTypeV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ aUTV := ");
field_aUTV.log();
TTCN_Logger::log_event_str(", spare := ");
field_spare.log();
TTCN_Logger::log_event_str(" }");
}

void AdditionalUpdateTypeV::set_implicit_omit()
{
if (aUTV().is_bound()) aUTV().set_implicit_omit();
if (spare().is_bound()) spare().set_implicit_omit();
}

void AdditionalUpdateTypeV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record value of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) aUTV().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) spare().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "aUTV")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          aUTV().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "spare")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          spare().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_GMM_SM_Types.AdditionalUpdateTypeV");
  }
}

void AdditionalUpdateTypeV::encode_text(Text_Buf& text_buf) const
{
field_aUTV.encode_text(text_buf);
field_spare.encode_text(text_buf);
}

void AdditionalUpdateTypeV::decode_text(Text_Buf& text_buf)
{
field_aUTV.decode_text(text_buf);
field_spare.decode_text(text_buf);
}

void AdditionalUpdateTypeV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void AdditionalUpdateTypeV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int AdditionalUpdateTypeV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::BIT1_descr_.raw->forceomit);
  decoded_field_length = field_aUTV.RAW_decode(General__Types::BIT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::BIT3_descr_.raw->forceomit);
  decoded_field_length = field_spare.RAW_decode(General__Types::BIT3_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int AdditionalUpdateTypeV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 2;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(2);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::BIT1_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::BIT3_descr_.raw);
  encoded_length += field_aUTV.RAW_encode(General__Types::BIT1_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_spare.RAW_encode(General__Types::BIT3_descr_, *myleaf.body.node.nodes[1]);
  return myleaf.length = encoded_length;
}

struct AdditionalUpdateTypeV_template::single_value_struct {
BITSTRING_template field_aUTV;
BITSTRING_template field_spare;
};

void AdditionalUpdateTypeV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_aUTV = ANY_VALUE;
single_value->field_spare = ANY_VALUE;
}
}
}

void AdditionalUpdateTypeV_template::copy_value(const AdditionalUpdateTypeV& other_value)
{
single_value = new single_value_struct;
if (other_value.aUTV().is_bound()) {
  single_value->field_aUTV = other_value.aUTV();
} else {
  single_value->field_aUTV.clean_up();
}
if (other_value.spare().is_bound()) {
  single_value->field_spare = other_value.spare();
} else {
  single_value->field_spare.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void AdditionalUpdateTypeV_template::copy_template(const AdditionalUpdateTypeV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.aUTV().get_selection()) {
single_value->field_aUTV = other_value.aUTV();
} else {
single_value->field_aUTV.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.spare().get_selection()) {
single_value->field_spare = other_value.spare();
} else {
single_value->field_spare.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new AdditionalUpdateTypeV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new AdditionalUpdateTypeV_template(*other_value.implication_.precondition);
implication_.implied_template = new AdditionalUpdateTypeV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeV.");
break;
}
set_selection(other_value);
}

AdditionalUpdateTypeV_template::AdditionalUpdateTypeV_template()
{
}

AdditionalUpdateTypeV_template::AdditionalUpdateTypeV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

AdditionalUpdateTypeV_template::AdditionalUpdateTypeV_template(const AdditionalUpdateTypeV& other_value)
{
copy_value(other_value);
}

AdditionalUpdateTypeV_template::AdditionalUpdateTypeV_template(const OPTIONAL<AdditionalUpdateTypeV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const AdditionalUpdateTypeV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeV from an unbound optional field.");
}
}

AdditionalUpdateTypeV_template::AdditionalUpdateTypeV_template(AdditionalUpdateTypeV_template* p_precondition, AdditionalUpdateTypeV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

AdditionalUpdateTypeV_template::AdditionalUpdateTypeV_template(Dynamic_Match_Interface<AdditionalUpdateTypeV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<AdditionalUpdateTypeV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

AdditionalUpdateTypeV_template::AdditionalUpdateTypeV_template(const AdditionalUpdateTypeV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

AdditionalUpdateTypeV_template::~AdditionalUpdateTypeV_template()
{
clean_up();
}

AdditionalUpdateTypeV_template& AdditionalUpdateTypeV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

AdditionalUpdateTypeV_template& AdditionalUpdateTypeV_template::operator=(const AdditionalUpdateTypeV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

AdditionalUpdateTypeV_template& AdditionalUpdateTypeV_template::operator=(const OPTIONAL<AdditionalUpdateTypeV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const AdditionalUpdateTypeV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeV.");
}
return *this;
}

AdditionalUpdateTypeV_template& AdditionalUpdateTypeV_template::operator=(const AdditionalUpdateTypeV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean AdditionalUpdateTypeV_template::match(const AdditionalUpdateTypeV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.aUTV().is_bound()) return FALSE;
if(!single_value->field_aUTV.match(other_value.aUTV(), legacy))return FALSE;
if(!other_value.spare().is_bound()) return FALSE;
if(!single_value->field_spare.match(other_value.spare(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeV.");
}
return FALSE;
}

boolean AdditionalUpdateTypeV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_aUTV.is_bound()
 || single_value->field_spare.is_bound();
}

boolean AdditionalUpdateTypeV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_aUTV.is_value()
 && single_value->field_spare.is_value();
}

void AdditionalUpdateTypeV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

AdditionalUpdateTypeV AdditionalUpdateTypeV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeV.");
AdditionalUpdateTypeV ret_val;
if (single_value->field_aUTV.is_bound()) {
ret_val.aUTV() = single_value->field_aUTV.valueof();
}
if (single_value->field_spare.is_bound()) {
ret_val.spare() = single_value->field_spare.valueof();
}
return ret_val;
}

void AdditionalUpdateTypeV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new AdditionalUpdateTypeV_template[list_length];
}

AdditionalUpdateTypeV_template& AdditionalUpdateTypeV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeV.");
return value_list.list_value[list_index];
}

BITSTRING_template& AdditionalUpdateTypeV_template::aUTV()
{
set_specific();
return single_value->field_aUTV;
}

const BITSTRING_template& AdditionalUpdateTypeV_template::aUTV() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field aUTV of a non-specific template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeV.");
return single_value->field_aUTV;
}

BITSTRING_template& AdditionalUpdateTypeV_template::spare()
{
set_specific();
return single_value->field_spare;
}

const BITSTRING_template& AdditionalUpdateTypeV_template::spare() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field spare of a non-specific template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeV.");
return single_value->field_spare;
}

int AdditionalUpdateTypeV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 2;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeV.");
  }
  return 0;
}

void AdditionalUpdateTypeV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ aUTV := ");
single_value->field_aUTV.log();
TTCN_Logger::log_event_str(", spare := ");
single_value->field_spare.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void AdditionalUpdateTypeV_template::log_match(const AdditionalUpdateTypeV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_aUTV.match(match_value.aUTV(), legacy)){
TTCN_Logger::log_logmatch_info(".aUTV");
single_value->field_aUTV.log_match(match_value.aUTV(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_spare.match(match_value.spare(), legacy)){
TTCN_Logger::log_logmatch_info(".spare");
single_value->field_spare.log_match(match_value.spare(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ aUTV := ");
single_value->field_aUTV.log_match(match_value.aUTV(), legacy);
TTCN_Logger::log_event_str(", spare := ");
single_value->field_spare.log_match(match_value.spare(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void AdditionalUpdateTypeV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (aUTV().is_bound()) aUTV().set_implicit_omit();
if (spare().is_bound()) spare().set_implicit_omit();
}

void AdditionalUpdateTypeV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_aUTV.encode_text(text_buf);
single_value->field_spare.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeV.");
}
}

void AdditionalUpdateTypeV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_aUTV.decode_text(text_buf);
single_value->field_spare.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new AdditionalUpdateTypeV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeV.");
}
}

void AdditionalUpdateTypeV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    AdditionalUpdateTypeV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) aUTV().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) spare().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "aUTV")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          aUTV().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "spare")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          spare().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    AdditionalUpdateTypeV_template* precondition = new AdditionalUpdateTypeV_template;
    precondition->set_param(*param.get_elem(0));
    AdditionalUpdateTypeV_template* implied_template = new AdditionalUpdateTypeV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = AdditionalUpdateTypeV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_GMM_SM_Types.AdditionalUpdateTypeV");
  }
  is_ifpresent = param.get_ifpresent();
}

void AdditionalUpdateTypeV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_aUTV.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.AdditionalUpdateTypeV");
single_value->field_spare.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.AdditionalUpdateTypeV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_GMM_SM_Types.AdditionalUpdateTypeV");
}

boolean AdditionalUpdateTypeV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean AdditionalUpdateTypeV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

AdditionalUpdateTypeTV::AdditionalUpdateTypeTV()
{
}

AdditionalUpdateTypeTV::AdditionalUpdateTypeTV(const AdditionalUpdateTypeV& par_additionalUpdateType,
    const BITSTRING& par_elementIdentifier)
  :   field_additionalUpdateType(par_additionalUpdateType),
  field_elementIdentifier(par_elementIdentifier)
{
}

AdditionalUpdateTypeTV::AdditionalUpdateTypeTV(const AdditionalUpdateTypeTV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV.");
if (other_value.additionalUpdateType().is_bound()) field_additionalUpdateType = other_value.additionalUpdateType();
else field_additionalUpdateType.clean_up();
if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
else field_elementIdentifier.clean_up();
}

void AdditionalUpdateTypeTV::clean_up()
{
field_additionalUpdateType.clean_up();
field_elementIdentifier.clean_up();
}

const TTCN_Typedescriptor_t* AdditionalUpdateTypeTV::get_descriptor() const { return &AdditionalUpdateTypeTV_descr_; }
AdditionalUpdateTypeTV& AdditionalUpdateTypeTV::operator=(const AdditionalUpdateTypeTV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV.");
  if (other_value.additionalUpdateType().is_bound()) field_additionalUpdateType = other_value.additionalUpdateType();
  else field_additionalUpdateType.clean_up();
  if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
  else field_elementIdentifier.clean_up();
}
return *this;
}

boolean AdditionalUpdateTypeTV::operator==(const AdditionalUpdateTypeTV& other_value) const
{
return field_additionalUpdateType==other_value.field_additionalUpdateType
  && field_elementIdentifier==other_value.field_elementIdentifier;
}

boolean AdditionalUpdateTypeTV::is_bound() const
{
return (field_additionalUpdateType.is_bound())
  || (field_elementIdentifier.is_bound());
}
boolean AdditionalUpdateTypeTV::is_value() const
{
return field_additionalUpdateType.is_value()
  && field_elementIdentifier.is_value();
}
void AdditionalUpdateTypeTV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ additionalUpdateType := ");
field_additionalUpdateType.log();
TTCN_Logger::log_event_str(", elementIdentifier := ");
field_elementIdentifier.log();
TTCN_Logger::log_event_str(" }");
}

void AdditionalUpdateTypeTV::set_implicit_omit()
{
if (additionalUpdateType().is_bound()) additionalUpdateType().set_implicit_omit();
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
}

void AdditionalUpdateTypeTV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record value of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) additionalUpdateType().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "additionalUpdateType")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          additionalUpdateType().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV");
  }
}

void AdditionalUpdateTypeTV::encode_text(Text_Buf& text_buf) const
{
field_additionalUpdateType.encode_text(text_buf);
field_elementIdentifier.encode_text(text_buf);
}

void AdditionalUpdateTypeTV::decode_text(Text_Buf& text_buf)
{
field_additionalUpdateType.decode_text(text_buf);
field_elementIdentifier.decode_text(text_buf);
}

void AdditionalUpdateTypeTV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void AdditionalUpdateTypeTV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int AdditionalUpdateTypeTV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, AdditionalUpdateTypeV_descr_.raw->forceomit);
  decoded_field_length = field_additionalUpdateType.RAW_decode(AdditionalUpdateTypeV_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::BIT4_descr_.raw->forceomit);
  decoded_field_length = field_elementIdentifier.RAW_decode(General__Types::BIT4_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  if (field_elementIdentifier !=  bs_0) return -1;
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int AdditionalUpdateTypeTV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 2;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(2);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, AdditionalUpdateTypeV_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::BIT4_descr_.raw);
  encoded_length += field_additionalUpdateType.RAW_encode(AdditionalUpdateTypeV_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_elementIdentifier.RAW_encode(General__Types::BIT4_descr_, *myleaf.body.node.nodes[1]);
  if (field_elementIdentifier !=  bs_0) {
  RAW_enc_tree* temp_leaf;
  {
  RAW_enc_tr_pos pr_pos0;
  pr_pos0.level=myleaf.curr_pos.level+1;
  int new_pos0[]={1};
  pr_pos0.pos=init_new_tree_pos(myleaf.curr_pos,1,new_pos0);
  temp_leaf = myleaf.get_node(pr_pos0);
  if(temp_leaf != NULL){
   bs_0.RAW_encode(General__Types::BIT4_descr_,*temp_leaf);
  } else {
    TTCN_EncDec_ErrorContext::error
      (TTCN_EncDec::ET_OMITTED_TAG, "Encoding a tagged, but omitted value.");
  }
  free_tree_pos(pr_pos0.pos);
  }
  }
  return myleaf.length = encoded_length;
}

struct AdditionalUpdateTypeTV_template::single_value_struct {
AdditionalUpdateTypeV_template field_additionalUpdateType;
BITSTRING_template field_elementIdentifier;
};

void AdditionalUpdateTypeTV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_additionalUpdateType = ANY_VALUE;
single_value->field_elementIdentifier = ANY_VALUE;
}
}
}

void AdditionalUpdateTypeTV_template::copy_value(const AdditionalUpdateTypeTV& other_value)
{
single_value = new single_value_struct;
if (other_value.additionalUpdateType().is_bound()) {
  single_value->field_additionalUpdateType = other_value.additionalUpdateType();
} else {
  single_value->field_additionalUpdateType.clean_up();
}
if (other_value.elementIdentifier().is_bound()) {
  single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
  single_value->field_elementIdentifier.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void AdditionalUpdateTypeTV_template::copy_template(const AdditionalUpdateTypeTV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.additionalUpdateType().get_selection()) {
single_value->field_additionalUpdateType = other_value.additionalUpdateType();
} else {
single_value->field_additionalUpdateType.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.elementIdentifier().get_selection()) {
single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
single_value->field_elementIdentifier.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new AdditionalUpdateTypeTV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new AdditionalUpdateTypeTV_template(*other_value.implication_.precondition);
implication_.implied_template = new AdditionalUpdateTypeTV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV.");
break;
}
set_selection(other_value);
}

AdditionalUpdateTypeTV_template::AdditionalUpdateTypeTV_template()
{
}

AdditionalUpdateTypeTV_template::AdditionalUpdateTypeTV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

AdditionalUpdateTypeTV_template::AdditionalUpdateTypeTV_template(const AdditionalUpdateTypeTV& other_value)
{
copy_value(other_value);
}

AdditionalUpdateTypeTV_template::AdditionalUpdateTypeTV_template(const OPTIONAL<AdditionalUpdateTypeTV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const AdditionalUpdateTypeTV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV from an unbound optional field.");
}
}

AdditionalUpdateTypeTV_template::AdditionalUpdateTypeTV_template(AdditionalUpdateTypeTV_template* p_precondition, AdditionalUpdateTypeTV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

AdditionalUpdateTypeTV_template::AdditionalUpdateTypeTV_template(Dynamic_Match_Interface<AdditionalUpdateTypeTV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<AdditionalUpdateTypeTV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

AdditionalUpdateTypeTV_template::AdditionalUpdateTypeTV_template(const AdditionalUpdateTypeTV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

AdditionalUpdateTypeTV_template::~AdditionalUpdateTypeTV_template()
{
clean_up();
}

AdditionalUpdateTypeTV_template& AdditionalUpdateTypeTV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

AdditionalUpdateTypeTV_template& AdditionalUpdateTypeTV_template::operator=(const AdditionalUpdateTypeTV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

AdditionalUpdateTypeTV_template& AdditionalUpdateTypeTV_template::operator=(const OPTIONAL<AdditionalUpdateTypeTV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const AdditionalUpdateTypeTV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV.");
}
return *this;
}

AdditionalUpdateTypeTV_template& AdditionalUpdateTypeTV_template::operator=(const AdditionalUpdateTypeTV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean AdditionalUpdateTypeTV_template::match(const AdditionalUpdateTypeTV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.additionalUpdateType().is_bound()) return FALSE;
if(!single_value->field_additionalUpdateType.match(other_value.additionalUpdateType(), legacy))return FALSE;
if(!other_value.elementIdentifier().is_bound()) return FALSE;
if(!single_value->field_elementIdentifier.match(other_value.elementIdentifier(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV.");
}
return FALSE;
}

boolean AdditionalUpdateTypeTV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_additionalUpdateType.is_bound()
 || single_value->field_elementIdentifier.is_bound();
}

boolean AdditionalUpdateTypeTV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_additionalUpdateType.is_value()
 && single_value->field_elementIdentifier.is_value();
}

void AdditionalUpdateTypeTV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

AdditionalUpdateTypeTV AdditionalUpdateTypeTV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV.");
AdditionalUpdateTypeTV ret_val;
if (single_value->field_additionalUpdateType.is_bound()) {
ret_val.additionalUpdateType() = single_value->field_additionalUpdateType.valueof();
}
if (single_value->field_elementIdentifier.is_bound()) {
ret_val.elementIdentifier() = single_value->field_elementIdentifier.valueof();
}
return ret_val;
}

void AdditionalUpdateTypeTV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new AdditionalUpdateTypeTV_template[list_length];
}

AdditionalUpdateTypeTV_template& AdditionalUpdateTypeTV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV.");
return value_list.list_value[list_index];
}

AdditionalUpdateTypeV_template& AdditionalUpdateTypeTV_template::additionalUpdateType()
{
set_specific();
return single_value->field_additionalUpdateType;
}

const AdditionalUpdateTypeV_template& AdditionalUpdateTypeTV_template::additionalUpdateType() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field additionalUpdateType of a non-specific template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV.");
return single_value->field_additionalUpdateType;
}

BITSTRING_template& AdditionalUpdateTypeTV_template::elementIdentifier()
{
set_specific();
return single_value->field_elementIdentifier;
}

const BITSTRING_template& AdditionalUpdateTypeTV_template::elementIdentifier() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field elementIdentifier of a non-specific template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV.");
return single_value->field_elementIdentifier;
}

int AdditionalUpdateTypeTV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 2;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV.");
  }
  return 0;
}

void AdditionalUpdateTypeTV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ additionalUpdateType := ");
single_value->field_additionalUpdateType.log();
TTCN_Logger::log_event_str(", elementIdentifier := ");
single_value->field_elementIdentifier.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void AdditionalUpdateTypeTV_template::log_match(const AdditionalUpdateTypeTV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_additionalUpdateType.match(match_value.additionalUpdateType(), legacy)){
TTCN_Logger::log_logmatch_info(".additionalUpdateType");
single_value->field_additionalUpdateType.log_match(match_value.additionalUpdateType(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_elementIdentifier.match(match_value.elementIdentifier(), legacy)){
TTCN_Logger::log_logmatch_info(".elementIdentifier");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ additionalUpdateType := ");
single_value->field_additionalUpdateType.log_match(match_value.additionalUpdateType(), legacy);
TTCN_Logger::log_event_str(", elementIdentifier := ");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void AdditionalUpdateTypeTV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (additionalUpdateType().is_bound()) additionalUpdateType().set_implicit_omit();
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
}

void AdditionalUpdateTypeTV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_additionalUpdateType.encode_text(text_buf);
single_value->field_elementIdentifier.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV.");
}
}

void AdditionalUpdateTypeTV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_additionalUpdateType.decode_text(text_buf);
single_value->field_elementIdentifier.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new AdditionalUpdateTypeTV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV.");
}
}

void AdditionalUpdateTypeTV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    AdditionalUpdateTypeTV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record template of type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) additionalUpdateType().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "additionalUpdateType")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          additionalUpdateType().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    AdditionalUpdateTypeTV_template* precondition = new AdditionalUpdateTypeTV_template;
    precondition->set_param(*param.get_elem(0));
    AdditionalUpdateTypeTV_template* implied_template = new AdditionalUpdateTypeTV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = AdditionalUpdateTypeTV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV");
  }
  is_ifpresent = param.get_ifpresent();
}

void AdditionalUpdateTypeTV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_additionalUpdateType.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV");
single_value->field_elementIdentifier.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_GMM_SM_Types.AdditionalUpdateTypeTV");
}

boolean AdditionalUpdateTypeTV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean AdditionalUpdateTypeTV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

AttachResultV::AttachResultV()
{
}

AttachResultV::AttachResultV(const BITSTRING& par_resultOfAttach,
    const BITSTRING& par_fop__l3)
  :   field_resultOfAttach(par_resultOfAttach),
  field_fop__l3(par_fop__l3)
{
}

AttachResultV::AttachResultV(const AttachResultV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_GMM_SM_Types.AttachResultV.");
if (other_value.resultOfAttach().is_bound()) field_resultOfAttach = other_value.resultOfAttach();
else field_resultOfAttach.clean_up();
if (other_value.fop__l3().is_bound()) field_fop__l3 = other_value.fop__l3();
else field_fop__l3.clean_up();
}

void AttachResultV::clean_up()
{
field_resultOfAttach.clean_up();
field_fop__l3.clean_up();
}

const TTCN_Typedescriptor_t* AttachResultV::get_descriptor() const { return &AttachResultV_descr_; }
AttachResultV& AttachResultV::operator=(const AttachResultV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_GMM_SM_Types.AttachResultV.");
  if (other_value.resultOfAttach().is_bound()) field_resultOfAttach = other_value.resultOfAttach();
  else field_resultOfAttach.clean_up();
  if (other_value.fop__l3().is_bound()) field_fop__l3 = other_value.fop__l3();
  else field_fop__l3.clean_up();
}
return *this;
}

boolean AttachResultV::operator==(const AttachResultV& other_value) const
{
return field_resultOfAttach==other_value.field_resultOfAttach
  && field_fop__l3==other_value.field_fop__l3;
}

boolean AttachResultV::is_bound() const
{
return (field_resultOfAttach.is_bound())
  || (field_fop__l3.is_bound());
}
boolean AttachResultV::is_value() const
{
return field_resultOfAttach.is_value()
  && field_fop__l3.is_value();
}
void AttachResultV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ resultOfAttach := ");
field_resultOfAttach.log();
TTCN_Logger::log_event_str(", fop_l3 := ");
field_fop__l3.log();
TTCN_Logger::log_event_str(" }");
}

void AttachResultV::set_implicit_omit()
{
if (resultOfAttach().is_bound()) resultOfAttach().set_implicit_omit();
if (fop__l3().is_bound()) fop__l3().set_implicit_omit();
}

void AttachResultV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record value of type @MobileL3_GMM_SM_Types.AttachResultV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) resultOfAttach().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) fop__l3().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "resultOfAttach")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          resultOfAttach().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "fop_l3")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          fop__l3().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.AttachResultV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_GMM_SM_Types.AttachResultV");
  }
}

void AttachResultV::encode_text(Text_Buf& text_buf) const
{
field_resultOfAttach.encode_text(text_buf);
field_fop__l3.encode_text(text_buf);
}

void AttachResultV::decode_text(Text_Buf& text_buf)
{
field_resultOfAttach.decode_text(text_buf);
field_fop__l3.decode_text(text_buf);
}

void AttachResultV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void AttachResultV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int AttachResultV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::BIT3_descr_.raw->forceomit);
  decoded_field_length = field_resultOfAttach.RAW_decode(General__Types::BIT3_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::BIT1_descr_.raw->forceomit);
  decoded_field_length = field_fop__l3.RAW_decode(General__Types::BIT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int AttachResultV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 2;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(2);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::BIT3_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::BIT1_descr_.raw);
  encoded_length += field_resultOfAttach.RAW_encode(General__Types::BIT3_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_fop__l3.RAW_encode(General__Types::BIT1_descr_, *myleaf.body.node.nodes[1]);
  return myleaf.length = encoded_length;
}

struct AttachResultV_template::single_value_struct {
BITSTRING_template field_resultOfAttach;
BITSTRING_template field_fop__l3;
};

void AttachResultV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_resultOfAttach = ANY_VALUE;
single_value->field_fop__l3 = ANY_VALUE;
}
}
}

void AttachResultV_template::copy_value(const AttachResultV& other_value)
{
single_value = new single_value_struct;
if (other_value.resultOfAttach().is_bound()) {
  single_value->field_resultOfAttach = other_value.resultOfAttach();
} else {
  single_value->field_resultOfAttach.clean_up();
}
if (other_value.fop__l3().is_bound()) {
  single_value->field_fop__l3 = other_value.fop__l3();
} else {
  single_value->field_fop__l3.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void AttachResultV_template::copy_template(const AttachResultV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.resultOfAttach().get_selection()) {
single_value->field_resultOfAttach = other_value.resultOfAttach();
} else {
single_value->field_resultOfAttach.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.fop__l3().get_selection()) {
single_value->field_fop__l3 = other_value.fop__l3();
} else {
single_value->field_fop__l3.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new AttachResultV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new AttachResultV_template(*other_value.implication_.precondition);
implication_.implied_template = new AttachResultV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.AttachResultV.");
break;
}
set_selection(other_value);
}

AttachResultV_template::AttachResultV_template()
{
}

AttachResultV_template::AttachResultV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

AttachResultV_template::AttachResultV_template(const AttachResultV& other_value)
{
copy_value(other_value);
}

AttachResultV_template::AttachResultV_template(const OPTIONAL<AttachResultV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const AttachResultV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_GMM_SM_Types.AttachResultV from an unbound optional field.");
}
}

AttachResultV_template::AttachResultV_template(AttachResultV_template* p_precondition, AttachResultV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

AttachResultV_template::AttachResultV_template(Dynamic_Match_Interface<AttachResultV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<AttachResultV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

AttachResultV_template::AttachResultV_template(const AttachResultV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

AttachResultV_template::~AttachResultV_template()
{
clean_up();
}

AttachResultV_template& AttachResultV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

AttachResultV_template& AttachResultV_template::operator=(const AttachResultV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

AttachResultV_template& AttachResultV_template::operator=(const OPTIONAL<AttachResultV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const AttachResultV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_GMM_SM_Types.AttachResultV.");
}
return *this;
}

AttachResultV_template& AttachResultV_template::operator=(const AttachResultV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean AttachResultV_template::match(const AttachResultV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.resultOfAttach().is_bound()) return FALSE;
if(!single_value->field_resultOfAttach.match(other_value.resultOfAttach(), legacy))return FALSE;
if(!other_value.fop__l3().is_bound()) return FALSE;
if(!single_value->field_fop__l3.match(other_value.fop__l3(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.AttachResultV.");
}
return FALSE;
}

boolean AttachResultV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_resultOfAttach.is_bound()
 || single_value->field_fop__l3.is_bound();
}

boolean AttachResultV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_resultOfAttach.is_value()
 && single_value->field_fop__l3.is_value();
}

void AttachResultV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

AttachResultV AttachResultV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_GMM_SM_Types.AttachResultV.");
AttachResultV ret_val;
if (single_value->field_resultOfAttach.is_bound()) {
ret_val.resultOfAttach() = single_value->field_resultOfAttach.valueof();
}
if (single_value->field_fop__l3.is_bound()) {
ret_val.fop__l3() = single_value->field_fop__l3.valueof();
}
return ret_val;
}

void AttachResultV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_GMM_SM_Types.AttachResultV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new AttachResultV_template[list_length];
}

AttachResultV_template& AttachResultV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_GMM_SM_Types.AttachResultV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_GMM_SM_Types.AttachResultV.");
return value_list.list_value[list_index];
}

BITSTRING_template& AttachResultV_template::resultOfAttach()
{
set_specific();
return single_value->field_resultOfAttach;
}

const BITSTRING_template& AttachResultV_template::resultOfAttach() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field resultOfAttach of a non-specific template of type @MobileL3_GMM_SM_Types.AttachResultV.");
return single_value->field_resultOfAttach;
}

BITSTRING_template& AttachResultV_template::fop__l3()
{
set_specific();
return single_value->field_fop__l3;
}

const BITSTRING_template& AttachResultV_template::fop__l3() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field fop_l3 of a non-specific template of type @MobileL3_GMM_SM_Types.AttachResultV.");
return single_value->field_fop__l3;
}

int AttachResultV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AttachResultV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 2;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AttachResultV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AttachResultV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AttachResultV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AttachResultV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AttachResultV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AttachResultV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AttachResultV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AttachResultV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.AttachResultV.");
  }
  return 0;
}

void AttachResultV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ resultOfAttach := ");
single_value->field_resultOfAttach.log();
TTCN_Logger::log_event_str(", fop_l3 := ");
single_value->field_fop__l3.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void AttachResultV_template::log_match(const AttachResultV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_resultOfAttach.match(match_value.resultOfAttach(), legacy)){
TTCN_Logger::log_logmatch_info(".resultOfAttach");
single_value->field_resultOfAttach.log_match(match_value.resultOfAttach(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_fop__l3.match(match_value.fop__l3(), legacy)){
TTCN_Logger::log_logmatch_info(".fop_l3");
single_value->field_fop__l3.log_match(match_value.fop__l3(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ resultOfAttach := ");
single_value->field_resultOfAttach.log_match(match_value.resultOfAttach(), legacy);
TTCN_Logger::log_event_str(", fop_l3 := ");
single_value->field_fop__l3.log_match(match_value.fop__l3(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void AttachResultV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (resultOfAttach().is_bound()) resultOfAttach().set_implicit_omit();
if (fop__l3().is_bound()) fop__l3().set_implicit_omit();
}

void AttachResultV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_resultOfAttach.encode_text(text_buf);
single_value->field_fop__l3.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.AttachResultV.");
}
}

void AttachResultV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_resultOfAttach.decode_text(text_buf);
single_value->field_fop__l3.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new AttachResultV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_GMM_SM_Types.AttachResultV.");
}
}

void AttachResultV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    AttachResultV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record template of type @MobileL3_GMM_SM_Types.AttachResultV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) resultOfAttach().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) fop__l3().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "resultOfAttach")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          resultOfAttach().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "fop_l3")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          fop__l3().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.AttachResultV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    AttachResultV_template* precondition = new AttachResultV_template;
    precondition->set_param(*param.get_elem(0));
    AttachResultV_template* implied_template = new AttachResultV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = AttachResultV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_GMM_SM_Types.AttachResultV");
  }
  is_ifpresent = param.get_ifpresent();
}

void AttachResultV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_resultOfAttach.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.AttachResultV");
single_value->field_fop__l3.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.AttachResultV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_GMM_SM_Types.AttachResultV");
}

boolean AttachResultV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean AttachResultV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

AttachTypeV::AttachTypeV()
{
}

AttachTypeV::AttachTypeV(const BITSTRING& par_attachType,
    const BITSTRING& par_for__l3)
  :   field_attachType(par_attachType),
  field_for__l3(par_for__l3)
{
}

AttachTypeV::AttachTypeV(const AttachTypeV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_GMM_SM_Types.AttachTypeV.");
if (other_value.attachType().is_bound()) field_attachType = other_value.attachType();
else field_attachType.clean_up();
if (other_value.for__l3().is_bound()) field_for__l3 = other_value.for__l3();
else field_for__l3.clean_up();
}

void AttachTypeV::clean_up()
{
field_attachType.clean_up();
field_for__l3.clean_up();
}

const TTCN_Typedescriptor_t* AttachTypeV::get_descriptor() const { return &AttachTypeV_descr_; }
AttachTypeV& AttachTypeV::operator=(const AttachTypeV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_GMM_SM_Types.AttachTypeV.");
  if (other_value.attachType().is_bound()) field_attachType = other_value.attachType();
  else field_attachType.clean_up();
  if (other_value.for__l3().is_bound()) field_for__l3 = other_value.for__l3();
  else field_for__l3.clean_up();
}
return *this;
}

boolean AttachTypeV::operator==(const AttachTypeV& other_value) const
{
return field_attachType==other_value.field_attachType
  && field_for__l3==other_value.field_for__l3;
}

boolean AttachTypeV::is_bound() const
{
return (field_attachType.is_bound())
  || (field_for__l3.is_bound());
}
boolean AttachTypeV::is_value() const
{
return field_attachType.is_value()
  && field_for__l3.is_value();
}
void AttachTypeV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ attachType := ");
field_attachType.log();
TTCN_Logger::log_event_str(", for_l3 := ");
field_for__l3.log();
TTCN_Logger::log_event_str(" }");
}

void AttachTypeV::set_implicit_omit()
{
if (attachType().is_bound()) attachType().set_implicit_omit();
if (for__l3().is_bound()) for__l3().set_implicit_omit();
}

void AttachTypeV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record value of type @MobileL3_GMM_SM_Types.AttachTypeV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) attachType().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) for__l3().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "attachType")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          attachType().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "for_l3")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          for__l3().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.AttachTypeV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_GMM_SM_Types.AttachTypeV");
  }
}

void AttachTypeV::encode_text(Text_Buf& text_buf) const
{
field_attachType.encode_text(text_buf);
field_for__l3.encode_text(text_buf);
}

void AttachTypeV::decode_text(Text_Buf& text_buf)
{
field_attachType.decode_text(text_buf);
field_for__l3.decode_text(text_buf);
}

void AttachTypeV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void AttachTypeV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int AttachTypeV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::BIT3_descr_.raw->forceomit);
  decoded_field_length = field_attachType.RAW_decode(General__Types::BIT3_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::BIT1_descr_.raw->forceomit);
  decoded_field_length = field_for__l3.RAW_decode(General__Types::BIT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int AttachTypeV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 2;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(2);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::BIT3_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::BIT1_descr_.raw);
  encoded_length += field_attachType.RAW_encode(General__Types::BIT3_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_for__l3.RAW_encode(General__Types::BIT1_descr_, *myleaf.body.node.nodes[1]);
  return myleaf.length = encoded_length;
}

struct AttachTypeV_template::single_value_struct {
BITSTRING_template field_attachType;
BITSTRING_template field_for__l3;
};

void AttachTypeV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_attachType = ANY_VALUE;
single_value->field_for__l3 = ANY_VALUE;
}
}
}

void AttachTypeV_template::copy_value(const AttachTypeV& other_value)
{
single_value = new single_value_struct;
if (other_value.attachType().is_bound()) {
  single_value->field_attachType = other_value.attachType();
} else {
  single_value->field_attachType.clean_up();
}
if (other_value.for__l3().is_bound()) {
  single_value->field_for__l3 = other_value.for__l3();
} else {
  single_value->field_for__l3.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void AttachTypeV_template::copy_template(const AttachTypeV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.attachType().get_selection()) {
single_value->field_attachType = other_value.attachType();
} else {
single_value->field_attachType.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.for__l3().get_selection()) {
single_value->field_for__l3 = other_value.for__l3();
} else {
single_value->field_for__l3.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new AttachTypeV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new AttachTypeV_template(*other_value.implication_.precondition);
implication_.implied_template = new AttachTypeV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.AttachTypeV.");
break;
}
set_selection(other_value);
}

AttachTypeV_template::AttachTypeV_template()
{
}

AttachTypeV_template::AttachTypeV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

AttachTypeV_template::AttachTypeV_template(const AttachTypeV& other_value)
{
copy_value(other_value);
}

AttachTypeV_template::AttachTypeV_template(const OPTIONAL<AttachTypeV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const AttachTypeV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_GMM_SM_Types.AttachTypeV from an unbound optional field.");
}
}

AttachTypeV_template::AttachTypeV_template(AttachTypeV_template* p_precondition, AttachTypeV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

AttachTypeV_template::AttachTypeV_template(Dynamic_Match_Interface<AttachTypeV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<AttachTypeV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

AttachTypeV_template::AttachTypeV_template(const AttachTypeV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

AttachTypeV_template::~AttachTypeV_template()
{
clean_up();
}

AttachTypeV_template& AttachTypeV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

AttachTypeV_template& AttachTypeV_template::operator=(const AttachTypeV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

AttachTypeV_template& AttachTypeV_template::operator=(const OPTIONAL<AttachTypeV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const AttachTypeV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_GMM_SM_Types.AttachTypeV.");
}
return *this;
}

AttachTypeV_template& AttachTypeV_template::operator=(const AttachTypeV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean AttachTypeV_template::match(const AttachTypeV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.attachType().is_bound()) return FALSE;
if(!single_value->field_attachType.match(other_value.attachType(), legacy))return FALSE;
if(!other_value.for__l3().is_bound()) return FALSE;
if(!single_value->field_for__l3.match(other_value.for__l3(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.AttachTypeV.");
}
return FALSE;
}

boolean AttachTypeV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_attachType.is_bound()
 || single_value->field_for__l3.is_bound();
}

boolean AttachTypeV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_attachType.is_value()
 && single_value->field_for__l3.is_value();
}

void AttachTypeV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

AttachTypeV AttachTypeV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_GMM_SM_Types.AttachTypeV.");
AttachTypeV ret_val;
if (single_value->field_attachType.is_bound()) {
ret_val.attachType() = single_value->field_attachType.valueof();
}
if (single_value->field_for__l3.is_bound()) {
ret_val.for__l3() = single_value->field_for__l3.valueof();
}
return ret_val;
}

void AttachTypeV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_GMM_SM_Types.AttachTypeV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new AttachTypeV_template[list_length];
}

AttachTypeV_template& AttachTypeV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_GMM_SM_Types.AttachTypeV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_GMM_SM_Types.AttachTypeV.");
return value_list.list_value[list_index];
}

BITSTRING_template& AttachTypeV_template::attachType()
{
set_specific();
return single_value->field_attachType;
}

const BITSTRING_template& AttachTypeV_template::attachType() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field attachType of a non-specific template of type @MobileL3_GMM_SM_Types.AttachTypeV.");
return single_value->field_attachType;
}

BITSTRING_template& AttachTypeV_template::for__l3()
{
set_specific();
return single_value->field_for__l3;
}

const BITSTRING_template& AttachTypeV_template::for__l3() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field for_l3 of a non-specific template of type @MobileL3_GMM_SM_Types.AttachTypeV.");
return single_value->field_for__l3;
}

int AttachTypeV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AttachTypeV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 2;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AttachTypeV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AttachTypeV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AttachTypeV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AttachTypeV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AttachTypeV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AttachTypeV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AttachTypeV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.AttachTypeV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.AttachTypeV.");
  }
  return 0;
}

void AttachTypeV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ attachType := ");
single_value->field_attachType.log();
TTCN_Logger::log_event_str(", for_l3 := ");
single_value->field_for__l3.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void AttachTypeV_template::log_match(const AttachTypeV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_attachType.match(match_value.attachType(), legacy)){
TTCN_Logger::log_logmatch_info(".attachType");
single_value->field_attachType.log_match(match_value.attachType(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_for__l3.match(match_value.for__l3(), legacy)){
TTCN_Logger::log_logmatch_info(".for_l3");
single_value->field_for__l3.log_match(match_value.for__l3(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ attachType := ");
single_value->field_attachType.log_match(match_value.attachType(), legacy);
TTCN_Logger::log_event_str(", for_l3 := ");
single_value->field_for__l3.log_match(match_value.for__l3(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void AttachTypeV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (attachType().is_bound()) attachType().set_implicit_omit();
if (for__l3().is_bound()) for__l3().set_implicit_omit();
}

void AttachTypeV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_attachType.encode_text(text_buf);
single_value->field_for__l3.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.AttachTypeV.");
}
}

void AttachTypeV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_attachType.decode_text(text_buf);
single_value->field_for__l3.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new AttachTypeV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_GMM_SM_Types.AttachTypeV.");
}
}

void AttachTypeV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    AttachTypeV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record template of type @MobileL3_GMM_SM_Types.AttachTypeV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) attachType().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) for__l3().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "attachType")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          attachType().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "for_l3")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          for__l3().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.AttachTypeV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    AttachTypeV_template* precondition = new AttachTypeV_template;
    precondition->set_param(*param.get_elem(0));
    AttachTypeV_template* implied_template = new AttachTypeV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = AttachTypeV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_GMM_SM_Types.AttachTypeV");
  }
  is_ifpresent = param.get_ifpresent();
}

void AttachTypeV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_attachType.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.AttachTypeV");
single_value->field_for__l3.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.AttachTypeV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_GMM_SM_Types.AttachTypeV");
}

boolean AttachTypeV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean AttachTypeV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

CipheringAlgorithmV::CipheringAlgorithmV()
{
}

CipheringAlgorithmV::CipheringAlgorithmV(const BITSTRING& par_valueField,
    const BITSTRING& par_spare)
  :   field_valueField(par_valueField),
  field_spare(par_spare)
{
}

CipheringAlgorithmV::CipheringAlgorithmV(const CipheringAlgorithmV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_GMM_SM_Types.CipheringAlgorithmV.");
if (other_value.valueField().is_bound()) field_valueField = other_value.valueField();
else field_valueField.clean_up();
if (other_value.spare().is_bound()) field_spare = other_value.spare();
else field_spare.clean_up();
}

void CipheringAlgorithmV::clean_up()
{
field_valueField.clean_up();
field_spare.clean_up();
}

const TTCN_Typedescriptor_t* CipheringAlgorithmV::get_descriptor() const { return &CipheringAlgorithmV_descr_; }
CipheringAlgorithmV& CipheringAlgorithmV::operator=(const CipheringAlgorithmV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_GMM_SM_Types.CipheringAlgorithmV.");
  if (other_value.valueField().is_bound()) field_valueField = other_value.valueField();
  else field_valueField.clean_up();
  if (other_value.spare().is_bound()) field_spare = other_value.spare();
  else field_spare.clean_up();
}
return *this;
}

boolean CipheringAlgorithmV::operator==(const CipheringAlgorithmV& other_value) const
{
return field_valueField==other_value.field_valueField
  && field_spare==other_value.field_spare;
}

boolean CipheringAlgorithmV::is_bound() const
{
return (field_valueField.is_bound())
  || (field_spare.is_bound());
}
boolean CipheringAlgorithmV::is_value() const
{
return field_valueField.is_value()
  && field_spare.is_value();
}
void CipheringAlgorithmV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ valueField := ");
field_valueField.log();
TTCN_Logger::log_event_str(", spare := ");
field_spare.log();
TTCN_Logger::log_event_str(" }");
}

void CipheringAlgorithmV::set_implicit_omit()
{
if (valueField().is_bound()) valueField().set_implicit_omit();
if (spare().is_bound()) spare().set_implicit_omit();
}

void CipheringAlgorithmV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record value of type @MobileL3_GMM_SM_Types.CipheringAlgorithmV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) valueField().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) spare().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "valueField")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          valueField().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "spare")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          spare().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.CipheringAlgorithmV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_GMM_SM_Types.CipheringAlgorithmV");
  }
}

void CipheringAlgorithmV::encode_text(Text_Buf& text_buf) const
{
field_valueField.encode_text(text_buf);
field_spare.encode_text(text_buf);
}

void CipheringAlgorithmV::decode_text(Text_Buf& text_buf)
{
field_valueField.decode_text(text_buf);
field_spare.decode_text(text_buf);
}

void CipheringAlgorithmV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void CipheringAlgorithmV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int CipheringAlgorithmV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::BIT3_descr_.raw->forceomit);
  decoded_field_length = field_valueField.RAW_decode(General__Types::BIT3_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::BIT1_descr_.raw->forceomit);
  decoded_field_length = field_spare.RAW_decode(General__Types::BIT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int CipheringAlgorithmV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 2;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(2);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::BIT3_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::BIT1_descr_.raw);
  encoded_length += field_valueField.RAW_encode(General__Types::BIT3_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_spare.RAW_encode(General__Types::BIT1_descr_, *myleaf.body.node.nodes[1]);
  return myleaf.length = encoded_length;
}

struct CipheringAlgorithmV_template::single_value_struct {
BITSTRING_template field_valueField;
BITSTRING_template field_spare;
};

void CipheringAlgorithmV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_valueField = ANY_VALUE;
single_value->field_spare = ANY_VALUE;
}
}
}

void CipheringAlgorithmV_template::copy_value(const CipheringAlgorithmV& other_value)
{
single_value = new single_value_struct;
if (other_value.valueField().is_bound()) {
  single_value->field_valueField = other_value.valueField();
} else {
  single_value->field_valueField.clean_up();
}
if (other_value.spare().is_bound()) {
  single_value->field_spare = other_value.spare();
} else {
  single_value->field_spare.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void CipheringAlgorithmV_template::copy_template(const CipheringAlgorithmV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.valueField().get_selection()) {
single_value->field_valueField = other_value.valueField();
} else {
single_value->field_valueField.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.spare().get_selection()) {
single_value->field_spare = other_value.spare();
} else {
single_value->field_spare.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new CipheringAlgorithmV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new CipheringAlgorithmV_template(*other_value.implication_.precondition);
implication_.implied_template = new CipheringAlgorithmV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmV.");
break;
}
set_selection(other_value);
}

CipheringAlgorithmV_template::CipheringAlgorithmV_template()
{
}

CipheringAlgorithmV_template::CipheringAlgorithmV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

CipheringAlgorithmV_template::CipheringAlgorithmV_template(const CipheringAlgorithmV& other_value)
{
copy_value(other_value);
}

CipheringAlgorithmV_template::CipheringAlgorithmV_template(const OPTIONAL<CipheringAlgorithmV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const CipheringAlgorithmV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmV from an unbound optional field.");
}
}

CipheringAlgorithmV_template::CipheringAlgorithmV_template(CipheringAlgorithmV_template* p_precondition, CipheringAlgorithmV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

CipheringAlgorithmV_template::CipheringAlgorithmV_template(Dynamic_Match_Interface<CipheringAlgorithmV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<CipheringAlgorithmV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

CipheringAlgorithmV_template::CipheringAlgorithmV_template(const CipheringAlgorithmV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

CipheringAlgorithmV_template::~CipheringAlgorithmV_template()
{
clean_up();
}

CipheringAlgorithmV_template& CipheringAlgorithmV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

CipheringAlgorithmV_template& CipheringAlgorithmV_template::operator=(const CipheringAlgorithmV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

CipheringAlgorithmV_template& CipheringAlgorithmV_template::operator=(const OPTIONAL<CipheringAlgorithmV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const CipheringAlgorithmV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmV.");
}
return *this;
}

CipheringAlgorithmV_template& CipheringAlgorithmV_template::operator=(const CipheringAlgorithmV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean CipheringAlgorithmV_template::match(const CipheringAlgorithmV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.valueField().is_bound()) return FALSE;
if(!single_value->field_valueField.match(other_value.valueField(), legacy))return FALSE;
if(!other_value.spare().is_bound()) return FALSE;
if(!single_value->field_spare.match(other_value.spare(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmV.");
}
return FALSE;
}

boolean CipheringAlgorithmV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_valueField.is_bound()
 || single_value->field_spare.is_bound();
}

boolean CipheringAlgorithmV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_valueField.is_value()
 && single_value->field_spare.is_value();
}

void CipheringAlgorithmV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

CipheringAlgorithmV CipheringAlgorithmV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmV.");
CipheringAlgorithmV ret_val;
if (single_value->field_valueField.is_bound()) {
ret_val.valueField() = single_value->field_valueField.valueof();
}
if (single_value->field_spare.is_bound()) {
ret_val.spare() = single_value->field_spare.valueof();
}
return ret_val;
}

void CipheringAlgorithmV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new CipheringAlgorithmV_template[list_length];
}

CipheringAlgorithmV_template& CipheringAlgorithmV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmV.");
return value_list.list_value[list_index];
}

BITSTRING_template& CipheringAlgorithmV_template::valueField()
{
set_specific();
return single_value->field_valueField;
}

const BITSTRING_template& CipheringAlgorithmV_template::valueField() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field valueField of a non-specific template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmV.");
return single_value->field_valueField;
}

BITSTRING_template& CipheringAlgorithmV_template::spare()
{
set_specific();
return single_value->field_spare;
}

const BITSTRING_template& CipheringAlgorithmV_template::spare() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field spare of a non-specific template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmV.");
return single_value->field_spare;
}

int CipheringAlgorithmV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 2;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmV.");
  }
  return 0;
}

void CipheringAlgorithmV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ valueField := ");
single_value->field_valueField.log();
TTCN_Logger::log_event_str(", spare := ");
single_value->field_spare.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void CipheringAlgorithmV_template::log_match(const CipheringAlgorithmV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_valueField.match(match_value.valueField(), legacy)){
TTCN_Logger::log_logmatch_info(".valueField");
single_value->field_valueField.log_match(match_value.valueField(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_spare.match(match_value.spare(), legacy)){
TTCN_Logger::log_logmatch_info(".spare");
single_value->field_spare.log_match(match_value.spare(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ valueField := ");
single_value->field_valueField.log_match(match_value.valueField(), legacy);
TTCN_Logger::log_event_str(", spare := ");
single_value->field_spare.log_match(match_value.spare(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void CipheringAlgorithmV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (valueField().is_bound()) valueField().set_implicit_omit();
if (spare().is_bound()) spare().set_implicit_omit();
}

void CipheringAlgorithmV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_valueField.encode_text(text_buf);
single_value->field_spare.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmV.");
}
}

void CipheringAlgorithmV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_valueField.decode_text(text_buf);
single_value->field_spare.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new CipheringAlgorithmV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmV.");
}
}

void CipheringAlgorithmV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    CipheringAlgorithmV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) valueField().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) spare().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "valueField")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          valueField().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "spare")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          spare().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.CipheringAlgorithmV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    CipheringAlgorithmV_template* precondition = new CipheringAlgorithmV_template;
    precondition->set_param(*param.get_elem(0));
    CipheringAlgorithmV_template* implied_template = new CipheringAlgorithmV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = CipheringAlgorithmV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_GMM_SM_Types.CipheringAlgorithmV");
  }
  is_ifpresent = param.get_ifpresent();
}

void CipheringAlgorithmV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_valueField.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.CipheringAlgorithmV");
single_value->field_spare.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.CipheringAlgorithmV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_GMM_SM_Types.CipheringAlgorithmV");
}

boolean CipheringAlgorithmV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean CipheringAlgorithmV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

CipheringAlgorithmTV::CipheringAlgorithmTV()
{
}

CipheringAlgorithmTV::CipheringAlgorithmTV(const CipheringAlgorithmV& par_cipheringAlgorithm,
    const BITSTRING& par_cipheringAlgorithmIEI)
  :   field_cipheringAlgorithm(par_cipheringAlgorithm),
  field_cipheringAlgorithmIEI(par_cipheringAlgorithmIEI)
{
}

CipheringAlgorithmTV::CipheringAlgorithmTV(const CipheringAlgorithmTV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_GMM_SM_Types.CipheringAlgorithmTV.");
if (other_value.cipheringAlgorithm().is_bound()) field_cipheringAlgorithm = other_value.cipheringAlgorithm();
else field_cipheringAlgorithm.clean_up();
if (other_value.cipheringAlgorithmIEI().is_bound()) field_cipheringAlgorithmIEI = other_value.cipheringAlgorithmIEI();
else field_cipheringAlgorithmIEI.clean_up();
}

void CipheringAlgorithmTV::clean_up()
{
field_cipheringAlgorithm.clean_up();
field_cipheringAlgorithmIEI.clean_up();
}

const TTCN_Typedescriptor_t* CipheringAlgorithmTV::get_descriptor() const { return &CipheringAlgorithmTV_descr_; }
CipheringAlgorithmTV& CipheringAlgorithmTV::operator=(const CipheringAlgorithmTV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_GMM_SM_Types.CipheringAlgorithmTV.");
  if (other_value.cipheringAlgorithm().is_bound()) field_cipheringAlgorithm = other_value.cipheringAlgorithm();
  else field_cipheringAlgorithm.clean_up();
  if (other_value.cipheringAlgorithmIEI().is_bound()) field_cipheringAlgorithmIEI = other_value.cipheringAlgorithmIEI();
  else field_cipheringAlgorithmIEI.clean_up();
}
return *this;
}

boolean CipheringAlgorithmTV::operator==(const CipheringAlgorithmTV& other_value) const
{
return field_cipheringAlgorithm==other_value.field_cipheringAlgorithm
  && field_cipheringAlgorithmIEI==other_value.field_cipheringAlgorithmIEI;
}

boolean CipheringAlgorithmTV::is_bound() const
{
return (field_cipheringAlgorithm.is_bound())
  || (field_cipheringAlgorithmIEI.is_bound());
}
boolean CipheringAlgorithmTV::is_value() const
{
return field_cipheringAlgorithm.is_value()
  && field_cipheringAlgorithmIEI.is_value();
}
void CipheringAlgorithmTV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ cipheringAlgorithm := ");
field_cipheringAlgorithm.log();
TTCN_Logger::log_event_str(", cipheringAlgorithmIEI := ");
field_cipheringAlgorithmIEI.log();
TTCN_Logger::log_event_str(" }");
}

void CipheringAlgorithmTV::set_implicit_omit()
{
if (cipheringAlgorithm().is_bound()) cipheringAlgorithm().set_implicit_omit();
if (cipheringAlgorithmIEI().is_bound()) cipheringAlgorithmIEI().set_implicit_omit();
}

void CipheringAlgorithmTV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record value of type @MobileL3_GMM_SM_Types.CipheringAlgorithmTV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) cipheringAlgorithm().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) cipheringAlgorithmIEI().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "cipheringAlgorithm")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          cipheringAlgorithm().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "cipheringAlgorithmIEI")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          cipheringAlgorithmIEI().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.CipheringAlgorithmTV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_GMM_SM_Types.CipheringAlgorithmTV");
  }
}

void CipheringAlgorithmTV::encode_text(Text_Buf& text_buf) const
{
field_cipheringAlgorithm.encode_text(text_buf);
field_cipheringAlgorithmIEI.encode_text(text_buf);
}

void CipheringAlgorithmTV::decode_text(Text_Buf& text_buf)
{
field_cipheringAlgorithm.decode_text(text_buf);
field_cipheringAlgorithmIEI.decode_text(text_buf);
}

void CipheringAlgorithmTV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void CipheringAlgorithmTV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int CipheringAlgorithmTV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, CipheringAlgorithmV_descr_.raw->forceomit);
  decoded_field_length = field_cipheringAlgorithm.RAW_decode(CipheringAlgorithmV_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::BIT4_descr_.raw->forceomit);
  decoded_field_length = field_cipheringAlgorithmIEI.RAW_decode(General__Types::BIT4_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int CipheringAlgorithmTV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 2;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(2);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, CipheringAlgorithmV_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::BIT4_descr_.raw);
  encoded_length += field_cipheringAlgorithm.RAW_encode(CipheringAlgorithmV_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_cipheringAlgorithmIEI.RAW_encode(General__Types::BIT4_descr_, *myleaf.body.node.nodes[1]);
  return myleaf.length = encoded_length;
}

struct CipheringAlgorithmTV_template::single_value_struct {
CipheringAlgorithmV_template field_cipheringAlgorithm;
BITSTRING_template field_cipheringAlgorithmIEI;
};

void CipheringAlgorithmTV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_cipheringAlgorithm = ANY_VALUE;
single_value->field_cipheringAlgorithmIEI = ANY_VALUE;
}
}
}

void CipheringAlgorithmTV_template::copy_value(const CipheringAlgorithmTV& other_value)
{
single_value = new single_value_struct;
if (other_value.cipheringAlgorithm().is_bound()) {
  single_value->field_cipheringAlgorithm = other_value.cipheringAlgorithm();
} else {
  single_value->field_cipheringAlgorithm.clean_up();
}
if (other_value.cipheringAlgorithmIEI().is_bound()) {
  single_value->field_cipheringAlgorithmIEI = other_value.cipheringAlgorithmIEI();
} else {
  single_value->field_cipheringAlgorithmIEI.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void CipheringAlgorithmTV_template::copy_template(const CipheringAlgorithmTV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.cipheringAlgorithm().get_selection()) {
single_value->field_cipheringAlgorithm = other_value.cipheringAlgorithm();
} else {
single_value->field_cipheringAlgorithm.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.cipheringAlgorithmIEI().get_selection()) {
single_value->field_cipheringAlgorithmIEI = other_value.cipheringAlgorithmIEI();
} else {
single_value->field_cipheringAlgorithmIEI.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new CipheringAlgorithmTV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new CipheringAlgorithmTV_template(*other_value.implication_.precondition);
implication_.implied_template = new CipheringAlgorithmTV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmTV.");
break;
}
set_selection(other_value);
}

CipheringAlgorithmTV_template::CipheringAlgorithmTV_template()
{
}

CipheringAlgorithmTV_template::CipheringAlgorithmTV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

CipheringAlgorithmTV_template::CipheringAlgorithmTV_template(const CipheringAlgorithmTV& other_value)
{
copy_value(other_value);
}

CipheringAlgorithmTV_template::CipheringAlgorithmTV_template(const OPTIONAL<CipheringAlgorithmTV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const CipheringAlgorithmTV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmTV from an unbound optional field.");
}
}

CipheringAlgorithmTV_template::CipheringAlgorithmTV_template(CipheringAlgorithmTV_template* p_precondition, CipheringAlgorithmTV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

CipheringAlgorithmTV_template::CipheringAlgorithmTV_template(Dynamic_Match_Interface<CipheringAlgorithmTV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<CipheringAlgorithmTV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

CipheringAlgorithmTV_template::CipheringAlgorithmTV_template(const CipheringAlgorithmTV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

CipheringAlgorithmTV_template::~CipheringAlgorithmTV_template()
{
clean_up();
}

CipheringAlgorithmTV_template& CipheringAlgorithmTV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

CipheringAlgorithmTV_template& CipheringAlgorithmTV_template::operator=(const CipheringAlgorithmTV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

CipheringAlgorithmTV_template& CipheringAlgorithmTV_template::operator=(const OPTIONAL<CipheringAlgorithmTV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const CipheringAlgorithmTV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmTV.");
}
return *this;
}

CipheringAlgorithmTV_template& CipheringAlgorithmTV_template::operator=(const CipheringAlgorithmTV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean CipheringAlgorithmTV_template::match(const CipheringAlgorithmTV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.cipheringAlgorithm().is_bound()) return FALSE;
if(!single_value->field_cipheringAlgorithm.match(other_value.cipheringAlgorithm(), legacy))return FALSE;
if(!other_value.cipheringAlgorithmIEI().is_bound()) return FALSE;
if(!single_value->field_cipheringAlgorithmIEI.match(other_value.cipheringAlgorithmIEI(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmTV.");
}
return FALSE;
}

boolean CipheringAlgorithmTV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_cipheringAlgorithm.is_bound()
 || single_value->field_cipheringAlgorithmIEI.is_bound();
}

boolean CipheringAlgorithmTV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_cipheringAlgorithm.is_value()
 && single_value->field_cipheringAlgorithmIEI.is_value();
}

void CipheringAlgorithmTV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

CipheringAlgorithmTV CipheringAlgorithmTV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmTV.");
CipheringAlgorithmTV ret_val;
if (single_value->field_cipheringAlgorithm.is_bound()) {
ret_val.cipheringAlgorithm() = single_value->field_cipheringAlgorithm.valueof();
}
if (single_value->field_cipheringAlgorithmIEI.is_bound()) {
ret_val.cipheringAlgorithmIEI() = single_value->field_cipheringAlgorithmIEI.valueof();
}
return ret_val;
}

void CipheringAlgorithmTV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmTV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new CipheringAlgorithmTV_template[list_length];
}

CipheringAlgorithmTV_template& CipheringAlgorithmTV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmTV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmTV.");
return value_list.list_value[list_index];
}

CipheringAlgorithmV_template& CipheringAlgorithmTV_template::cipheringAlgorithm()
{
set_specific();
return single_value->field_cipheringAlgorithm;
}

const CipheringAlgorithmV_template& CipheringAlgorithmTV_template::cipheringAlgorithm() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field cipheringAlgorithm of a non-specific template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmTV.");
return single_value->field_cipheringAlgorithm;
}

BITSTRING_template& CipheringAlgorithmTV_template::cipheringAlgorithmIEI()
{
set_specific();
return single_value->field_cipheringAlgorithmIEI;
}

const BITSTRING_template& CipheringAlgorithmTV_template::cipheringAlgorithmIEI() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field cipheringAlgorithmIEI of a non-specific template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmTV.");
return single_value->field_cipheringAlgorithmIEI;
}

int CipheringAlgorithmTV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmTV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 2;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmTV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmTV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmTV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmTV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmTV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmTV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmTV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmTV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmTV.");
  }
  return 0;
}

void CipheringAlgorithmTV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ cipheringAlgorithm := ");
single_value->field_cipheringAlgorithm.log();
TTCN_Logger::log_event_str(", cipheringAlgorithmIEI := ");
single_value->field_cipheringAlgorithmIEI.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void CipheringAlgorithmTV_template::log_match(const CipheringAlgorithmTV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_cipheringAlgorithm.match(match_value.cipheringAlgorithm(), legacy)){
TTCN_Logger::log_logmatch_info(".cipheringAlgorithm");
single_value->field_cipheringAlgorithm.log_match(match_value.cipheringAlgorithm(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_cipheringAlgorithmIEI.match(match_value.cipheringAlgorithmIEI(), legacy)){
TTCN_Logger::log_logmatch_info(".cipheringAlgorithmIEI");
single_value->field_cipheringAlgorithmIEI.log_match(match_value.cipheringAlgorithmIEI(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ cipheringAlgorithm := ");
single_value->field_cipheringAlgorithm.log_match(match_value.cipheringAlgorithm(), legacy);
TTCN_Logger::log_event_str(", cipheringAlgorithmIEI := ");
single_value->field_cipheringAlgorithmIEI.log_match(match_value.cipheringAlgorithmIEI(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void CipheringAlgorithmTV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (cipheringAlgorithm().is_bound()) cipheringAlgorithm().set_implicit_omit();
if (cipheringAlgorithmIEI().is_bound()) cipheringAlgorithmIEI().set_implicit_omit();
}

void CipheringAlgorithmTV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_cipheringAlgorithm.encode_text(text_buf);
single_value->field_cipheringAlgorithmIEI.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmTV.");
}
}

void CipheringAlgorithmTV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_cipheringAlgorithm.decode_text(text_buf);
single_value->field_cipheringAlgorithmIEI.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new CipheringAlgorithmTV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmTV.");
}
}

void CipheringAlgorithmTV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    CipheringAlgorithmTV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record template of type @MobileL3_GMM_SM_Types.CipheringAlgorithmTV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) cipheringAlgorithm().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) cipheringAlgorithmIEI().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "cipheringAlgorithm")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          cipheringAlgorithm().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "cipheringAlgorithmIEI")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          cipheringAlgorithmIEI().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.CipheringAlgorithmTV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    CipheringAlgorithmTV_template* precondition = new CipheringAlgorithmTV_template;
    precondition->set_param(*param.get_elem(0));
    CipheringAlgorithmTV_template* implied_template = new CipheringAlgorithmTV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = CipheringAlgorithmTV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_GMM_SM_Types.CipheringAlgorithmTV");
  }
  is_ifpresent = param.get_ifpresent();
}

void CipheringAlgorithmTV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_cipheringAlgorithm.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.CipheringAlgorithmTV");
single_value->field_cipheringAlgorithmIEI.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.CipheringAlgorithmTV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_GMM_SM_Types.CipheringAlgorithmTV");
}

boolean CipheringAlgorithmTV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean CipheringAlgorithmTV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

TMSIStatusV::TMSIStatusV()
{
}

TMSIStatusV::TMSIStatusV(const BITSTRING& par_tmsiFlag,
    const BITSTRING& par_spare)
  :   field_tmsiFlag(par_tmsiFlag),
  field_spare(par_spare)
{
}

TMSIStatusV::TMSIStatusV(const TMSIStatusV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_GMM_SM_Types.TMSIStatusV.");
if (other_value.tmsiFlag().is_bound()) field_tmsiFlag = other_value.tmsiFlag();
else field_tmsiFlag.clean_up();
if (other_value.spare().is_bound()) field_spare = other_value.spare();
else field_spare.clean_up();
}

void TMSIStatusV::clean_up()
{
field_tmsiFlag.clean_up();
field_spare.clean_up();
}

const TTCN_Typedescriptor_t* TMSIStatusV::get_descriptor() const { return &TMSIStatusV_descr_; }
TMSIStatusV& TMSIStatusV::operator=(const TMSIStatusV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_GMM_SM_Types.TMSIStatusV.");
  if (other_value.tmsiFlag().is_bound()) field_tmsiFlag = other_value.tmsiFlag();
  else field_tmsiFlag.clean_up();
  if (other_value.spare().is_bound()) field_spare = other_value.spare();
  else field_spare.clean_up();
}
return *this;
}

boolean TMSIStatusV::operator==(const TMSIStatusV& other_value) const
{
return field_tmsiFlag==other_value.field_tmsiFlag
  && field_spare==other_value.field_spare;
}

boolean TMSIStatusV::is_bound() const
{
return (field_tmsiFlag.is_bound())
  || (field_spare.is_bound());
}
boolean TMSIStatusV::is_value() const
{
return field_tmsiFlag.is_value()
  && field_spare.is_value();
}
void TMSIStatusV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ tmsiFlag := ");
field_tmsiFlag.log();
TTCN_Logger::log_event_str(", spare := ");
field_spare.log();
TTCN_Logger::log_event_str(" }");
}

void TMSIStatusV::set_implicit_omit()
{
if (tmsiFlag().is_bound()) tmsiFlag().set_implicit_omit();
if (spare().is_bound()) spare().set_implicit_omit();
}

void TMSIStatusV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record value of type @MobileL3_GMM_SM_Types.TMSIStatusV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) tmsiFlag().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) spare().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "tmsiFlag")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          tmsiFlag().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "spare")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          spare().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.TMSIStatusV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_GMM_SM_Types.TMSIStatusV");
  }
}

void TMSIStatusV::encode_text(Text_Buf& text_buf) const
{
field_tmsiFlag.encode_text(text_buf);
field_spare.encode_text(text_buf);
}

void TMSIStatusV::decode_text(Text_Buf& text_buf)
{
field_tmsiFlag.decode_text(text_buf);
field_spare.decode_text(text_buf);
}

void TMSIStatusV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void TMSIStatusV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int TMSIStatusV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::BIT1_descr_.raw->forceomit);
  decoded_field_length = field_tmsiFlag.RAW_decode(General__Types::BIT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::BIT3_descr_.raw->forceomit);
  decoded_field_length = field_spare.RAW_decode(General__Types::BIT3_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int TMSIStatusV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 2;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(2);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::BIT1_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::BIT3_descr_.raw);
  encoded_length += field_tmsiFlag.RAW_encode(General__Types::BIT1_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_spare.RAW_encode(General__Types::BIT3_descr_, *myleaf.body.node.nodes[1]);
  return myleaf.length = encoded_length;
}

struct TMSIStatusV_template::single_value_struct {
BITSTRING_template field_tmsiFlag;
BITSTRING_template field_spare;
};

void TMSIStatusV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_tmsiFlag = ANY_VALUE;
single_value->field_spare = ANY_VALUE;
}
}
}

void TMSIStatusV_template::copy_value(const TMSIStatusV& other_value)
{
single_value = new single_value_struct;
if (other_value.tmsiFlag().is_bound()) {
  single_value->field_tmsiFlag = other_value.tmsiFlag();
} else {
  single_value->field_tmsiFlag.clean_up();
}
if (other_value.spare().is_bound()) {
  single_value->field_spare = other_value.spare();
} else {
  single_value->field_spare.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void TMSIStatusV_template::copy_template(const TMSIStatusV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.tmsiFlag().get_selection()) {
single_value->field_tmsiFlag = other_value.tmsiFlag();
} else {
single_value->field_tmsiFlag.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.spare().get_selection()) {
single_value->field_spare = other_value.spare();
} else {
single_value->field_spare.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new TMSIStatusV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new TMSIStatusV_template(*other_value.implication_.precondition);
implication_.implied_template = new TMSIStatusV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.TMSIStatusV.");
break;
}
set_selection(other_value);
}

TMSIStatusV_template::TMSIStatusV_template()
{
}

TMSIStatusV_template::TMSIStatusV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

TMSIStatusV_template::TMSIStatusV_template(const TMSIStatusV& other_value)
{
copy_value(other_value);
}

TMSIStatusV_template::TMSIStatusV_template(const OPTIONAL<TMSIStatusV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const TMSIStatusV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_GMM_SM_Types.TMSIStatusV from an unbound optional field.");
}
}

TMSIStatusV_template::TMSIStatusV_template(TMSIStatusV_template* p_precondition, TMSIStatusV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

TMSIStatusV_template::TMSIStatusV_template(Dynamic_Match_Interface<TMSIStatusV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<TMSIStatusV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

TMSIStatusV_template::TMSIStatusV_template(const TMSIStatusV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

TMSIStatusV_template::~TMSIStatusV_template()
{
clean_up();
}

TMSIStatusV_template& TMSIStatusV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

TMSIStatusV_template& TMSIStatusV_template::operator=(const TMSIStatusV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

TMSIStatusV_template& TMSIStatusV_template::operator=(const OPTIONAL<TMSIStatusV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const TMSIStatusV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_GMM_SM_Types.TMSIStatusV.");
}
return *this;
}

TMSIStatusV_template& TMSIStatusV_template::operator=(const TMSIStatusV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean TMSIStatusV_template::match(const TMSIStatusV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.tmsiFlag().is_bound()) return FALSE;
if(!single_value->field_tmsiFlag.match(other_value.tmsiFlag(), legacy))return FALSE;
if(!other_value.spare().is_bound()) return FALSE;
if(!single_value->field_spare.match(other_value.spare(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.TMSIStatusV.");
}
return FALSE;
}

boolean TMSIStatusV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_tmsiFlag.is_bound()
 || single_value->field_spare.is_bound();
}

boolean TMSIStatusV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_tmsiFlag.is_value()
 && single_value->field_spare.is_value();
}

void TMSIStatusV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

TMSIStatusV TMSIStatusV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_GMM_SM_Types.TMSIStatusV.");
TMSIStatusV ret_val;
if (single_value->field_tmsiFlag.is_bound()) {
ret_val.tmsiFlag() = single_value->field_tmsiFlag.valueof();
}
if (single_value->field_spare.is_bound()) {
ret_val.spare() = single_value->field_spare.valueof();
}
return ret_val;
}

void TMSIStatusV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_GMM_SM_Types.TMSIStatusV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new TMSIStatusV_template[list_length];
}

TMSIStatusV_template& TMSIStatusV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_GMM_SM_Types.TMSIStatusV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_GMM_SM_Types.TMSIStatusV.");
return value_list.list_value[list_index];
}

BITSTRING_template& TMSIStatusV_template::tmsiFlag()
{
set_specific();
return single_value->field_tmsiFlag;
}

const BITSTRING_template& TMSIStatusV_template::tmsiFlag() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field tmsiFlag of a non-specific template of type @MobileL3_GMM_SM_Types.TMSIStatusV.");
return single_value->field_tmsiFlag;
}

BITSTRING_template& TMSIStatusV_template::spare()
{
set_specific();
return single_value->field_spare;
}

const BITSTRING_template& TMSIStatusV_template::spare() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field spare of a non-specific template of type @MobileL3_GMM_SM_Types.TMSIStatusV.");
return single_value->field_spare;
}

int TMSIStatusV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.TMSIStatusV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 2;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.TMSIStatusV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.TMSIStatusV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.TMSIStatusV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.TMSIStatusV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.TMSIStatusV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.TMSIStatusV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.TMSIStatusV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.TMSIStatusV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.TMSIStatusV.");
  }
  return 0;
}

void TMSIStatusV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ tmsiFlag := ");
single_value->field_tmsiFlag.log();
TTCN_Logger::log_event_str(", spare := ");
single_value->field_spare.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void TMSIStatusV_template::log_match(const TMSIStatusV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_tmsiFlag.match(match_value.tmsiFlag(), legacy)){
TTCN_Logger::log_logmatch_info(".tmsiFlag");
single_value->field_tmsiFlag.log_match(match_value.tmsiFlag(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_spare.match(match_value.spare(), legacy)){
TTCN_Logger::log_logmatch_info(".spare");
single_value->field_spare.log_match(match_value.spare(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ tmsiFlag := ");
single_value->field_tmsiFlag.log_match(match_value.tmsiFlag(), legacy);
TTCN_Logger::log_event_str(", spare := ");
single_value->field_spare.log_match(match_value.spare(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void TMSIStatusV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (tmsiFlag().is_bound()) tmsiFlag().set_implicit_omit();
if (spare().is_bound()) spare().set_implicit_omit();
}

void TMSIStatusV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_tmsiFlag.encode_text(text_buf);
single_value->field_spare.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.TMSIStatusV.");
}
}

void TMSIStatusV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_tmsiFlag.decode_text(text_buf);
single_value->field_spare.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new TMSIStatusV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_GMM_SM_Types.TMSIStatusV.");
}
}

void TMSIStatusV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    TMSIStatusV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record template of type @MobileL3_GMM_SM_Types.TMSIStatusV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) tmsiFlag().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) spare().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "tmsiFlag")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          tmsiFlag().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "spare")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          spare().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.TMSIStatusV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    TMSIStatusV_template* precondition = new TMSIStatusV_template;
    precondition->set_param(*param.get_elem(0));
    TMSIStatusV_template* implied_template = new TMSIStatusV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = TMSIStatusV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_GMM_SM_Types.TMSIStatusV");
  }
  is_ifpresent = param.get_ifpresent();
}

void TMSIStatusV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_tmsiFlag.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.TMSIStatusV");
single_value->field_spare.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.TMSIStatusV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_GMM_SM_Types.TMSIStatusV");
}

boolean TMSIStatusV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean TMSIStatusV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

TMSIStatusTV::TMSIStatusTV()
{
}

TMSIStatusTV::TMSIStatusTV(const TMSIStatusV& par_tmsiStatusV,
    const BITSTRING& par_elementIdentifier)
  :   field_tmsiStatusV(par_tmsiStatusV),
  field_elementIdentifier(par_elementIdentifier)
{
}

TMSIStatusTV::TMSIStatusTV(const TMSIStatusTV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_GMM_SM_Types.TMSIStatusTV.");
if (other_value.tmsiStatusV().is_bound()) field_tmsiStatusV = other_value.tmsiStatusV();
else field_tmsiStatusV.clean_up();
if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
else field_elementIdentifier.clean_up();
}

void TMSIStatusTV::clean_up()
{
field_tmsiStatusV.clean_up();
field_elementIdentifier.clean_up();
}

const TTCN_Typedescriptor_t* TMSIStatusTV::get_descriptor() const { return &TMSIStatusTV_descr_; }
TMSIStatusTV& TMSIStatusTV::operator=(const TMSIStatusTV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_GMM_SM_Types.TMSIStatusTV.");
  if (other_value.tmsiStatusV().is_bound()) field_tmsiStatusV = other_value.tmsiStatusV();
  else field_tmsiStatusV.clean_up();
  if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
  else field_elementIdentifier.clean_up();
}
return *this;
}

boolean TMSIStatusTV::operator==(const TMSIStatusTV& other_value) const
{
return field_tmsiStatusV==other_value.field_tmsiStatusV
  && field_elementIdentifier==other_value.field_elementIdentifier;
}

boolean TMSIStatusTV::is_bound() const
{
return (field_tmsiStatusV.is_bound())
  || (field_elementIdentifier.is_bound());
}
boolean TMSIStatusTV::is_value() const
{
return field_tmsiStatusV.is_value()
  && field_elementIdentifier.is_value();
}
void TMSIStatusTV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ tmsiStatusV := ");
field_tmsiStatusV.log();
TTCN_Logger::log_event_str(", elementIdentifier := ");
field_elementIdentifier.log();
TTCN_Logger::log_event_str(" }");
}

void TMSIStatusTV::set_implicit_omit()
{
if (tmsiStatusV().is_bound()) tmsiStatusV().set_implicit_omit();
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
}

void TMSIStatusTV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record value of type @MobileL3_GMM_SM_Types.TMSIStatusTV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) tmsiStatusV().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "tmsiStatusV")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          tmsiStatusV().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.TMSIStatusTV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_GMM_SM_Types.TMSIStatusTV");
  }
}

void TMSIStatusTV::encode_text(Text_Buf& text_buf) const
{
field_tmsiStatusV.encode_text(text_buf);
field_elementIdentifier.encode_text(text_buf);
}

void TMSIStatusTV::decode_text(Text_Buf& text_buf)
{
field_tmsiStatusV.decode_text(text_buf);
field_elementIdentifier.decode_text(text_buf);
}

void TMSIStatusTV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void TMSIStatusTV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int TMSIStatusTV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, TMSIStatusV_descr_.raw->forceomit);
  decoded_field_length = field_tmsiStatusV.RAW_decode(TMSIStatusV_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::BIT4_descr_.raw->forceomit);
  decoded_field_length = field_elementIdentifier.RAW_decode(General__Types::BIT4_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  if (field_elementIdentifier !=  bs_1) return -1;
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int TMSIStatusTV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 2;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(2);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, TMSIStatusV_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::BIT4_descr_.raw);
  encoded_length += field_tmsiStatusV.RAW_encode(TMSIStatusV_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_elementIdentifier.RAW_encode(General__Types::BIT4_descr_, *myleaf.body.node.nodes[1]);
  if (field_elementIdentifier !=  bs_1) {
  RAW_enc_tree* temp_leaf;
  {
  RAW_enc_tr_pos pr_pos0;
  pr_pos0.level=myleaf.curr_pos.level+1;
  int new_pos0[]={1};
  pr_pos0.pos=init_new_tree_pos(myleaf.curr_pos,1,new_pos0);
  temp_leaf = myleaf.get_node(pr_pos0);
  if(temp_leaf != NULL){
   bs_1.RAW_encode(General__Types::BIT4_descr_,*temp_leaf);
  } else {
    TTCN_EncDec_ErrorContext::error
      (TTCN_EncDec::ET_OMITTED_TAG, "Encoding a tagged, but omitted value.");
  }
  free_tree_pos(pr_pos0.pos);
  }
  }
  return myleaf.length = encoded_length;
}

struct TMSIStatusTV_template::single_value_struct {
TMSIStatusV_template field_tmsiStatusV;
BITSTRING_template field_elementIdentifier;
};

void TMSIStatusTV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_tmsiStatusV = ANY_VALUE;
single_value->field_elementIdentifier = ANY_VALUE;
}
}
}

void TMSIStatusTV_template::copy_value(const TMSIStatusTV& other_value)
{
single_value = new single_value_struct;
if (other_value.tmsiStatusV().is_bound()) {
  single_value->field_tmsiStatusV = other_value.tmsiStatusV();
} else {
  single_value->field_tmsiStatusV.clean_up();
}
if (other_value.elementIdentifier().is_bound()) {
  single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
  single_value->field_elementIdentifier.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void TMSIStatusTV_template::copy_template(const TMSIStatusTV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.tmsiStatusV().get_selection()) {
single_value->field_tmsiStatusV = other_value.tmsiStatusV();
} else {
single_value->field_tmsiStatusV.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.elementIdentifier().get_selection()) {
single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
single_value->field_elementIdentifier.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new TMSIStatusTV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new TMSIStatusTV_template(*other_value.implication_.precondition);
implication_.implied_template = new TMSIStatusTV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.TMSIStatusTV.");
break;
}
set_selection(other_value);
}

TMSIStatusTV_template::TMSIStatusTV_template()
{
}

TMSIStatusTV_template::TMSIStatusTV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

TMSIStatusTV_template::TMSIStatusTV_template(const TMSIStatusTV& other_value)
{
copy_value(other_value);
}

TMSIStatusTV_template::TMSIStatusTV_template(const OPTIONAL<TMSIStatusTV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const TMSIStatusTV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_GMM_SM_Types.TMSIStatusTV from an unbound optional field.");
}
}

TMSIStatusTV_template::TMSIStatusTV_template(TMSIStatusTV_template* p_precondition, TMSIStatusTV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

TMSIStatusTV_template::TMSIStatusTV_template(Dynamic_Match_Interface<TMSIStatusTV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<TMSIStatusTV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

TMSIStatusTV_template::TMSIStatusTV_template(const TMSIStatusTV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

TMSIStatusTV_template::~TMSIStatusTV_template()
{
clean_up();
}

TMSIStatusTV_template& TMSIStatusTV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

TMSIStatusTV_template& TMSIStatusTV_template::operator=(const TMSIStatusTV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

TMSIStatusTV_template& TMSIStatusTV_template::operator=(const OPTIONAL<TMSIStatusTV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const TMSIStatusTV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_GMM_SM_Types.TMSIStatusTV.");
}
return *this;
}

TMSIStatusTV_template& TMSIStatusTV_template::operator=(const TMSIStatusTV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean TMSIStatusTV_template::match(const TMSIStatusTV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.tmsiStatusV().is_bound()) return FALSE;
if(!single_value->field_tmsiStatusV.match(other_value.tmsiStatusV(), legacy))return FALSE;
if(!other_value.elementIdentifier().is_bound()) return FALSE;
if(!single_value->field_elementIdentifier.match(other_value.elementIdentifier(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.TMSIStatusTV.");
}
return FALSE;
}

boolean TMSIStatusTV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_tmsiStatusV.is_bound()
 || single_value->field_elementIdentifier.is_bound();
}

boolean TMSIStatusTV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_tmsiStatusV.is_value()
 && single_value->field_elementIdentifier.is_value();
}

void TMSIStatusTV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

TMSIStatusTV TMSIStatusTV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_GMM_SM_Types.TMSIStatusTV.");
TMSIStatusTV ret_val;
if (single_value->field_tmsiStatusV.is_bound()) {
ret_val.tmsiStatusV() = single_value->field_tmsiStatusV.valueof();
}
if (single_value->field_elementIdentifier.is_bound()) {
ret_val.elementIdentifier() = single_value->field_elementIdentifier.valueof();
}
return ret_val;
}

void TMSIStatusTV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_GMM_SM_Types.TMSIStatusTV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new TMSIStatusTV_template[list_length];
}

TMSIStatusTV_template& TMSIStatusTV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_GMM_SM_Types.TMSIStatusTV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_GMM_SM_Types.TMSIStatusTV.");
return value_list.list_value[list_index];
}

TMSIStatusV_template& TMSIStatusTV_template::tmsiStatusV()
{
set_specific();
return single_value->field_tmsiStatusV;
}

const TMSIStatusV_template& TMSIStatusTV_template::tmsiStatusV() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field tmsiStatusV of a non-specific template of type @MobileL3_GMM_SM_Types.TMSIStatusTV.");
return single_value->field_tmsiStatusV;
}

BITSTRING_template& TMSIStatusTV_template::elementIdentifier()
{
set_specific();
return single_value->field_elementIdentifier;
}

const BITSTRING_template& TMSIStatusTV_template::elementIdentifier() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field elementIdentifier of a non-specific template of type @MobileL3_GMM_SM_Types.TMSIStatusTV.");
return single_value->field_elementIdentifier;
}

int TMSIStatusTV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.TMSIStatusTV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 2;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.TMSIStatusTV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.TMSIStatusTV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.TMSIStatusTV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.TMSIStatusTV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.TMSIStatusTV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.TMSIStatusTV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.TMSIStatusTV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.TMSIStatusTV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.TMSIStatusTV.");
  }
  return 0;
}

void TMSIStatusTV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ tmsiStatusV := ");
single_value->field_tmsiStatusV.log();
TTCN_Logger::log_event_str(", elementIdentifier := ");
single_value->field_elementIdentifier.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void TMSIStatusTV_template::log_match(const TMSIStatusTV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_tmsiStatusV.match(match_value.tmsiStatusV(), legacy)){
TTCN_Logger::log_logmatch_info(".tmsiStatusV");
single_value->field_tmsiStatusV.log_match(match_value.tmsiStatusV(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_elementIdentifier.match(match_value.elementIdentifier(), legacy)){
TTCN_Logger::log_logmatch_info(".elementIdentifier");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ tmsiStatusV := ");
single_value->field_tmsiStatusV.log_match(match_value.tmsiStatusV(), legacy);
TTCN_Logger::log_event_str(", elementIdentifier := ");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void TMSIStatusTV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (tmsiStatusV().is_bound()) tmsiStatusV().set_implicit_omit();
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
}

void TMSIStatusTV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_tmsiStatusV.encode_text(text_buf);
single_value->field_elementIdentifier.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.TMSIStatusTV.");
}
}

void TMSIStatusTV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_tmsiStatusV.decode_text(text_buf);
single_value->field_elementIdentifier.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new TMSIStatusTV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_GMM_SM_Types.TMSIStatusTV.");
}
}

void TMSIStatusTV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    TMSIStatusTV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record template of type @MobileL3_GMM_SM_Types.TMSIStatusTV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) tmsiStatusV().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "tmsiStatusV")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          tmsiStatusV().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.TMSIStatusTV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    TMSIStatusTV_template* precondition = new TMSIStatusTV_template;
    precondition->set_param(*param.get_elem(0));
    TMSIStatusTV_template* implied_template = new TMSIStatusTV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = TMSIStatusTV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_GMM_SM_Types.TMSIStatusTV");
  }
  is_ifpresent = param.get_ifpresent();
}

void TMSIStatusTV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_tmsiStatusV.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.TMSIStatusTV");
single_value->field_elementIdentifier.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.TMSIStatusTV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_GMM_SM_Types.TMSIStatusTV");
}

boolean TMSIStatusTV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean TMSIStatusTV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

DetachTypeV::DetachTypeV()
{
}

DetachTypeV::DetachTypeV(const BITSTRING& par_detachType,
    const BITSTRING& par_powerOffFlag)
  :   field_detachType(par_detachType),
  field_powerOffFlag(par_powerOffFlag)
{
}

DetachTypeV::DetachTypeV(const DetachTypeV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_GMM_SM_Types.DetachTypeV.");
if (other_value.detachType().is_bound()) field_detachType = other_value.detachType();
else field_detachType.clean_up();
if (other_value.powerOffFlag().is_bound()) field_powerOffFlag = other_value.powerOffFlag();
else field_powerOffFlag.clean_up();
}

void DetachTypeV::clean_up()
{
field_detachType.clean_up();
field_powerOffFlag.clean_up();
}

const TTCN_Typedescriptor_t* DetachTypeV::get_descriptor() const { return &DetachTypeV_descr_; }
DetachTypeV& DetachTypeV::operator=(const DetachTypeV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_GMM_SM_Types.DetachTypeV.");
  if (other_value.detachType().is_bound()) field_detachType = other_value.detachType();
  else field_detachType.clean_up();
  if (other_value.powerOffFlag().is_bound()) field_powerOffFlag = other_value.powerOffFlag();
  else field_powerOffFlag.clean_up();
}
return *this;
}

boolean DetachTypeV::operator==(const DetachTypeV& other_value) const
{
return field_detachType==other_value.field_detachType
  && field_powerOffFlag==other_value.field_powerOffFlag;
}

boolean DetachTypeV::is_bound() const
{
return (field_detachType.is_bound())
  || (field_powerOffFlag.is_bound());
}
boolean DetachTypeV::is_value() const
{
return field_detachType.is_value()
  && field_powerOffFlag.is_value();
}
void DetachTypeV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ detachType := ");
field_detachType.log();
TTCN_Logger::log_event_str(", powerOffFlag := ");
field_powerOffFlag.log();
TTCN_Logger::log_event_str(" }");
}

void DetachTypeV::set_implicit_omit()
{
if (detachType().is_bound()) detachType().set_implicit_omit();
if (powerOffFlag().is_bound()) powerOffFlag().set_implicit_omit();
}

void DetachTypeV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record value of type @MobileL3_GMM_SM_Types.DetachTypeV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) detachType().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) powerOffFlag().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "detachType")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          detachType().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "powerOffFlag")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          powerOffFlag().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.DetachTypeV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_GMM_SM_Types.DetachTypeV");
  }
}

void DetachTypeV::encode_text(Text_Buf& text_buf) const
{
field_detachType.encode_text(text_buf);
field_powerOffFlag.encode_text(text_buf);
}

void DetachTypeV::decode_text(Text_Buf& text_buf)
{
field_detachType.decode_text(text_buf);
field_powerOffFlag.decode_text(text_buf);
}

void DetachTypeV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void DetachTypeV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int DetachTypeV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::BIT3_descr_.raw->forceomit);
  decoded_field_length = field_detachType.RAW_decode(General__Types::BIT3_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::BIT1_descr_.raw->forceomit);
  decoded_field_length = field_powerOffFlag.RAW_decode(General__Types::BIT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int DetachTypeV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 2;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(2);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::BIT3_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::BIT1_descr_.raw);
  encoded_length += field_detachType.RAW_encode(General__Types::BIT3_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_powerOffFlag.RAW_encode(General__Types::BIT1_descr_, *myleaf.body.node.nodes[1]);
  return myleaf.length = encoded_length;
}

struct DetachTypeV_template::single_value_struct {
BITSTRING_template field_detachType;
BITSTRING_template field_powerOffFlag;
};

void DetachTypeV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_detachType = ANY_VALUE;
single_value->field_powerOffFlag = ANY_VALUE;
}
}
}

void DetachTypeV_template::copy_value(const DetachTypeV& other_value)
{
single_value = new single_value_struct;
if (other_value.detachType().is_bound()) {
  single_value->field_detachType = other_value.detachType();
} else {
  single_value->field_detachType.clean_up();
}
if (other_value.powerOffFlag().is_bound()) {
  single_value->field_powerOffFlag = other_value.powerOffFlag();
} else {
  single_value->field_powerOffFlag.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void DetachTypeV_template::copy_template(const DetachTypeV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.detachType().get_selection()) {
single_value->field_detachType = other_value.detachType();
} else {
single_value->field_detachType.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.powerOffFlag().get_selection()) {
single_value->field_powerOffFlag = other_value.powerOffFlag();
} else {
single_value->field_powerOffFlag.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new DetachTypeV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new DetachTypeV_template(*other_value.implication_.precondition);
implication_.implied_template = new DetachTypeV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.DetachTypeV.");
break;
}
set_selection(other_value);
}

DetachTypeV_template::DetachTypeV_template()
{
}

DetachTypeV_template::DetachTypeV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

DetachTypeV_template::DetachTypeV_template(const DetachTypeV& other_value)
{
copy_value(other_value);
}

DetachTypeV_template::DetachTypeV_template(const OPTIONAL<DetachTypeV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const DetachTypeV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_GMM_SM_Types.DetachTypeV from an unbound optional field.");
}
}

DetachTypeV_template::DetachTypeV_template(DetachTypeV_template* p_precondition, DetachTypeV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

DetachTypeV_template::DetachTypeV_template(Dynamic_Match_Interface<DetachTypeV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<DetachTypeV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

DetachTypeV_template::DetachTypeV_template(const DetachTypeV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

DetachTypeV_template::~DetachTypeV_template()
{
clean_up();
}

DetachTypeV_template& DetachTypeV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

DetachTypeV_template& DetachTypeV_template::operator=(const DetachTypeV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

DetachTypeV_template& DetachTypeV_template::operator=(const OPTIONAL<DetachTypeV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const DetachTypeV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_GMM_SM_Types.DetachTypeV.");
}
return *this;
}

DetachTypeV_template& DetachTypeV_template::operator=(const DetachTypeV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean DetachTypeV_template::match(const DetachTypeV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.detachType().is_bound()) return FALSE;
if(!single_value->field_detachType.match(other_value.detachType(), legacy))return FALSE;
if(!other_value.powerOffFlag().is_bound()) return FALSE;
if(!single_value->field_powerOffFlag.match(other_value.powerOffFlag(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.DetachTypeV.");
}
return FALSE;
}

boolean DetachTypeV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_detachType.is_bound()
 || single_value->field_powerOffFlag.is_bound();
}

boolean DetachTypeV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_detachType.is_value()
 && single_value->field_powerOffFlag.is_value();
}

void DetachTypeV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

DetachTypeV DetachTypeV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_GMM_SM_Types.DetachTypeV.");
DetachTypeV ret_val;
if (single_value->field_detachType.is_bound()) {
ret_val.detachType() = single_value->field_detachType.valueof();
}
if (single_value->field_powerOffFlag.is_bound()) {
ret_val.powerOffFlag() = single_value->field_powerOffFlag.valueof();
}
return ret_val;
}

void DetachTypeV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_GMM_SM_Types.DetachTypeV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new DetachTypeV_template[list_length];
}

DetachTypeV_template& DetachTypeV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_GMM_SM_Types.DetachTypeV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_GMM_SM_Types.DetachTypeV.");
return value_list.list_value[list_index];
}

BITSTRING_template& DetachTypeV_template::detachType()
{
set_specific();
return single_value->field_detachType;
}

const BITSTRING_template& DetachTypeV_template::detachType() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field detachType of a non-specific template of type @MobileL3_GMM_SM_Types.DetachTypeV.");
return single_value->field_detachType;
}

BITSTRING_template& DetachTypeV_template::powerOffFlag()
{
set_specific();
return single_value->field_powerOffFlag;
}

const BITSTRING_template& DetachTypeV_template::powerOffFlag() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field powerOffFlag of a non-specific template of type @MobileL3_GMM_SM_Types.DetachTypeV.");
return single_value->field_powerOffFlag;
}

int DetachTypeV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DetachTypeV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 2;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DetachTypeV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DetachTypeV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DetachTypeV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DetachTypeV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DetachTypeV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DetachTypeV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DetachTypeV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DetachTypeV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.DetachTypeV.");
  }
  return 0;
}

void DetachTypeV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ detachType := ");
single_value->field_detachType.log();
TTCN_Logger::log_event_str(", powerOffFlag := ");
single_value->field_powerOffFlag.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void DetachTypeV_template::log_match(const DetachTypeV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_detachType.match(match_value.detachType(), legacy)){
TTCN_Logger::log_logmatch_info(".detachType");
single_value->field_detachType.log_match(match_value.detachType(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_powerOffFlag.match(match_value.powerOffFlag(), legacy)){
TTCN_Logger::log_logmatch_info(".powerOffFlag");
single_value->field_powerOffFlag.log_match(match_value.powerOffFlag(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ detachType := ");
single_value->field_detachType.log_match(match_value.detachType(), legacy);
TTCN_Logger::log_event_str(", powerOffFlag := ");
single_value->field_powerOffFlag.log_match(match_value.powerOffFlag(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void DetachTypeV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (detachType().is_bound()) detachType().set_implicit_omit();
if (powerOffFlag().is_bound()) powerOffFlag().set_implicit_omit();
}

void DetachTypeV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_detachType.encode_text(text_buf);
single_value->field_powerOffFlag.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.DetachTypeV.");
}
}

void DetachTypeV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_detachType.decode_text(text_buf);
single_value->field_powerOffFlag.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new DetachTypeV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_GMM_SM_Types.DetachTypeV.");
}
}

void DetachTypeV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    DetachTypeV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record template of type @MobileL3_GMM_SM_Types.DetachTypeV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) detachType().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) powerOffFlag().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "detachType")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          detachType().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "powerOffFlag")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          powerOffFlag().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.DetachTypeV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    DetachTypeV_template* precondition = new DetachTypeV_template;
    precondition->set_param(*param.get_elem(0));
    DetachTypeV_template* implied_template = new DetachTypeV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = DetachTypeV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_GMM_SM_Types.DetachTypeV");
  }
  is_ifpresent = param.get_ifpresent();
}

void DetachTypeV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_detachType.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.DetachTypeV");
single_value->field_powerOffFlag.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.DetachTypeV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_GMM_SM_Types.DetachTypeV");
}

boolean DetachTypeV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean DetachTypeV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

DetachTypeTV::DetachTypeTV()
{
}

DetachTypeTV::DetachTypeTV(const DetachTypeV& par_detachTypeV,
    const BITSTRING& par_detachTypeIEI)
  :   field_detachTypeV(par_detachTypeV),
  field_detachTypeIEI(par_detachTypeIEI)
{
}

DetachTypeTV::DetachTypeTV(const DetachTypeTV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_GMM_SM_Types.DetachTypeTV.");
if (other_value.detachTypeV().is_bound()) field_detachTypeV = other_value.detachTypeV();
else field_detachTypeV.clean_up();
if (other_value.detachTypeIEI().is_bound()) field_detachTypeIEI = other_value.detachTypeIEI();
else field_detachTypeIEI.clean_up();
}

void DetachTypeTV::clean_up()
{
field_detachTypeV.clean_up();
field_detachTypeIEI.clean_up();
}

const TTCN_Typedescriptor_t* DetachTypeTV::get_descriptor() const { return &DetachTypeTV_descr_; }
DetachTypeTV& DetachTypeTV::operator=(const DetachTypeTV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_GMM_SM_Types.DetachTypeTV.");
  if (other_value.detachTypeV().is_bound()) field_detachTypeV = other_value.detachTypeV();
  else field_detachTypeV.clean_up();
  if (other_value.detachTypeIEI().is_bound()) field_detachTypeIEI = other_value.detachTypeIEI();
  else field_detachTypeIEI.clean_up();
}
return *this;
}

boolean DetachTypeTV::operator==(const DetachTypeTV& other_value) const
{
return field_detachTypeV==other_value.field_detachTypeV
  && field_detachTypeIEI==other_value.field_detachTypeIEI;
}

boolean DetachTypeTV::is_bound() const
{
return (field_detachTypeV.is_bound())
  || (field_detachTypeIEI.is_bound());
}
boolean DetachTypeTV::is_value() const
{
return field_detachTypeV.is_value()
  && field_detachTypeIEI.is_value();
}
void DetachTypeTV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ detachTypeV := ");
field_detachTypeV.log();
TTCN_Logger::log_event_str(", detachTypeIEI := ");
field_detachTypeIEI.log();
TTCN_Logger::log_event_str(" }");
}

void DetachTypeTV::set_implicit_omit()
{
if (detachTypeV().is_bound()) detachTypeV().set_implicit_omit();
if (detachTypeIEI().is_bound()) detachTypeIEI().set_implicit_omit();
}

void DetachTypeTV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record value of type @MobileL3_GMM_SM_Types.DetachTypeTV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) detachTypeV().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) detachTypeIEI().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "detachTypeV")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          detachTypeV().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "detachTypeIEI")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          detachTypeIEI().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.DetachTypeTV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_GMM_SM_Types.DetachTypeTV");
  }
}

void DetachTypeTV::encode_text(Text_Buf& text_buf) const
{
field_detachTypeV.encode_text(text_buf);
field_detachTypeIEI.encode_text(text_buf);
}

void DetachTypeTV::decode_text(Text_Buf& text_buf)
{
field_detachTypeV.decode_text(text_buf);
field_detachTypeIEI.decode_text(text_buf);
}

void DetachTypeTV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void DetachTypeTV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int DetachTypeTV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, DetachTypeV_descr_.raw->forceomit);
  decoded_field_length = field_detachTypeV.RAW_decode(DetachTypeV_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::BIT4_descr_.raw->forceomit);
  decoded_field_length = field_detachTypeIEI.RAW_decode(General__Types::BIT4_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int DetachTypeTV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 2;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(2);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, DetachTypeV_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::BIT4_descr_.raw);
  encoded_length += field_detachTypeV.RAW_encode(DetachTypeV_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_detachTypeIEI.RAW_encode(General__Types::BIT4_descr_, *myleaf.body.node.nodes[1]);
  return myleaf.length = encoded_length;
}

struct DetachTypeTV_template::single_value_struct {
DetachTypeV_template field_detachTypeV;
BITSTRING_template field_detachTypeIEI;
};

void DetachTypeTV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_detachTypeV = ANY_VALUE;
single_value->field_detachTypeIEI = ANY_VALUE;
}
}
}

void DetachTypeTV_template::copy_value(const DetachTypeTV& other_value)
{
single_value = new single_value_struct;
if (other_value.detachTypeV().is_bound()) {
  single_value->field_detachTypeV = other_value.detachTypeV();
} else {
  single_value->field_detachTypeV.clean_up();
}
if (other_value.detachTypeIEI().is_bound()) {
  single_value->field_detachTypeIEI = other_value.detachTypeIEI();
} else {
  single_value->field_detachTypeIEI.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void DetachTypeTV_template::copy_template(const DetachTypeTV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.detachTypeV().get_selection()) {
single_value->field_detachTypeV = other_value.detachTypeV();
} else {
single_value->field_detachTypeV.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.detachTypeIEI().get_selection()) {
single_value->field_detachTypeIEI = other_value.detachTypeIEI();
} else {
single_value->field_detachTypeIEI.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new DetachTypeTV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new DetachTypeTV_template(*other_value.implication_.precondition);
implication_.implied_template = new DetachTypeTV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.DetachTypeTV.");
break;
}
set_selection(other_value);
}

DetachTypeTV_template::DetachTypeTV_template()
{
}

DetachTypeTV_template::DetachTypeTV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

DetachTypeTV_template::DetachTypeTV_template(const DetachTypeTV& other_value)
{
copy_value(other_value);
}

DetachTypeTV_template::DetachTypeTV_template(const OPTIONAL<DetachTypeTV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const DetachTypeTV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_GMM_SM_Types.DetachTypeTV from an unbound optional field.");
}
}

DetachTypeTV_template::DetachTypeTV_template(DetachTypeTV_template* p_precondition, DetachTypeTV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

DetachTypeTV_template::DetachTypeTV_template(Dynamic_Match_Interface<DetachTypeTV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<DetachTypeTV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

DetachTypeTV_template::DetachTypeTV_template(const DetachTypeTV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

DetachTypeTV_template::~DetachTypeTV_template()
{
clean_up();
}

DetachTypeTV_template& DetachTypeTV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

DetachTypeTV_template& DetachTypeTV_template::operator=(const DetachTypeTV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

DetachTypeTV_template& DetachTypeTV_template::operator=(const OPTIONAL<DetachTypeTV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const DetachTypeTV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_GMM_SM_Types.DetachTypeTV.");
}
return *this;
}

DetachTypeTV_template& DetachTypeTV_template::operator=(const DetachTypeTV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean DetachTypeTV_template::match(const DetachTypeTV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.detachTypeV().is_bound()) return FALSE;
if(!single_value->field_detachTypeV.match(other_value.detachTypeV(), legacy))return FALSE;
if(!other_value.detachTypeIEI().is_bound()) return FALSE;
if(!single_value->field_detachTypeIEI.match(other_value.detachTypeIEI(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.DetachTypeTV.");
}
return FALSE;
}

boolean DetachTypeTV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_detachTypeV.is_bound()
 || single_value->field_detachTypeIEI.is_bound();
}

boolean DetachTypeTV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_detachTypeV.is_value()
 && single_value->field_detachTypeIEI.is_value();
}

void DetachTypeTV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

DetachTypeTV DetachTypeTV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_GMM_SM_Types.DetachTypeTV.");
DetachTypeTV ret_val;
if (single_value->field_detachTypeV.is_bound()) {
ret_val.detachTypeV() = single_value->field_detachTypeV.valueof();
}
if (single_value->field_detachTypeIEI.is_bound()) {
ret_val.detachTypeIEI() = single_value->field_detachTypeIEI.valueof();
}
return ret_val;
}

void DetachTypeTV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_GMM_SM_Types.DetachTypeTV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new DetachTypeTV_template[list_length];
}

DetachTypeTV_template& DetachTypeTV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_GMM_SM_Types.DetachTypeTV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_GMM_SM_Types.DetachTypeTV.");
return value_list.list_value[list_index];
}

DetachTypeV_template& DetachTypeTV_template::detachTypeV()
{
set_specific();
return single_value->field_detachTypeV;
}

const DetachTypeV_template& DetachTypeTV_template::detachTypeV() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field detachTypeV of a non-specific template of type @MobileL3_GMM_SM_Types.DetachTypeTV.");
return single_value->field_detachTypeV;
}

BITSTRING_template& DetachTypeTV_template::detachTypeIEI()
{
set_specific();
return single_value->field_detachTypeIEI;
}

const BITSTRING_template& DetachTypeTV_template::detachTypeIEI() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field detachTypeIEI of a non-specific template of type @MobileL3_GMM_SM_Types.DetachTypeTV.");
return single_value->field_detachTypeIEI;
}

int DetachTypeTV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DetachTypeTV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 2;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DetachTypeTV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DetachTypeTV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DetachTypeTV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DetachTypeTV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DetachTypeTV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DetachTypeTV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DetachTypeTV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DetachTypeTV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.DetachTypeTV.");
  }
  return 0;
}

void DetachTypeTV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ detachTypeV := ");
single_value->field_detachTypeV.log();
TTCN_Logger::log_event_str(", detachTypeIEI := ");
single_value->field_detachTypeIEI.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void DetachTypeTV_template::log_match(const DetachTypeTV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_detachTypeV.match(match_value.detachTypeV(), legacy)){
TTCN_Logger::log_logmatch_info(".detachTypeV");
single_value->field_detachTypeV.log_match(match_value.detachTypeV(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_detachTypeIEI.match(match_value.detachTypeIEI(), legacy)){
TTCN_Logger::log_logmatch_info(".detachTypeIEI");
single_value->field_detachTypeIEI.log_match(match_value.detachTypeIEI(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ detachTypeV := ");
single_value->field_detachTypeV.log_match(match_value.detachTypeV(), legacy);
TTCN_Logger::log_event_str(", detachTypeIEI := ");
single_value->field_detachTypeIEI.log_match(match_value.detachTypeIEI(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void DetachTypeTV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (detachTypeV().is_bound()) detachTypeV().set_implicit_omit();
if (detachTypeIEI().is_bound()) detachTypeIEI().set_implicit_omit();
}

void DetachTypeTV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_detachTypeV.encode_text(text_buf);
single_value->field_detachTypeIEI.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.DetachTypeTV.");
}
}

void DetachTypeTV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_detachTypeV.decode_text(text_buf);
single_value->field_detachTypeIEI.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new DetachTypeTV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_GMM_SM_Types.DetachTypeTV.");
}
}

void DetachTypeTV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    DetachTypeTV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record template of type @MobileL3_GMM_SM_Types.DetachTypeTV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) detachTypeV().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) detachTypeIEI().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "detachTypeV")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          detachTypeV().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "detachTypeIEI")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          detachTypeIEI().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.DetachTypeTV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    DetachTypeTV_template* precondition = new DetachTypeTV_template;
    precondition->set_param(*param.get_elem(0));
    DetachTypeTV_template* implied_template = new DetachTypeTV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = DetachTypeTV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_GMM_SM_Types.DetachTypeTV");
  }
  is_ifpresent = param.get_ifpresent();
}

void DetachTypeTV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_detachTypeV.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.DetachTypeTV");
single_value->field_detachTypeIEI.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.DetachTypeTV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_GMM_SM_Types.DetachTypeTV");
}

boolean DetachTypeTV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean DetachTypeTV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

DRXParameterV::DRXParameterV()
{
}

DRXParameterV::DRXParameterV(const OCTETSTRING& par_splitPGCycleCode,
    const BITSTRING& par_nonDRXTimer,
    const BITSTRING& par_splitOnCCCH,
    const BITSTRING& par_cnSpecificDRXCycleLength)
  :   field_splitPGCycleCode(par_splitPGCycleCode),
  field_nonDRXTimer(par_nonDRXTimer),
  field_splitOnCCCH(par_splitOnCCCH),
  field_cnSpecificDRXCycleLength(par_cnSpecificDRXCycleLength)
{
}

DRXParameterV::DRXParameterV(const DRXParameterV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_GMM_SM_Types.DRXParameterV.");
if (other_value.splitPGCycleCode().is_bound()) field_splitPGCycleCode = other_value.splitPGCycleCode();
else field_splitPGCycleCode.clean_up();
if (other_value.nonDRXTimer().is_bound()) field_nonDRXTimer = other_value.nonDRXTimer();
else field_nonDRXTimer.clean_up();
if (other_value.splitOnCCCH().is_bound()) field_splitOnCCCH = other_value.splitOnCCCH();
else field_splitOnCCCH.clean_up();
if (other_value.cnSpecificDRXCycleLength().is_bound()) field_cnSpecificDRXCycleLength = other_value.cnSpecificDRXCycleLength();
else field_cnSpecificDRXCycleLength.clean_up();
}

void DRXParameterV::clean_up()
{
field_splitPGCycleCode.clean_up();
field_nonDRXTimer.clean_up();
field_splitOnCCCH.clean_up();
field_cnSpecificDRXCycleLength.clean_up();
}

const TTCN_Typedescriptor_t* DRXParameterV::get_descriptor() const { return &DRXParameterV_descr_; }
DRXParameterV& DRXParameterV::operator=(const DRXParameterV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_GMM_SM_Types.DRXParameterV.");
  if (other_value.splitPGCycleCode().is_bound()) field_splitPGCycleCode = other_value.splitPGCycleCode();
  else field_splitPGCycleCode.clean_up();
  if (other_value.nonDRXTimer().is_bound()) field_nonDRXTimer = other_value.nonDRXTimer();
  else field_nonDRXTimer.clean_up();
  if (other_value.splitOnCCCH().is_bound()) field_splitOnCCCH = other_value.splitOnCCCH();
  else field_splitOnCCCH.clean_up();
  if (other_value.cnSpecificDRXCycleLength().is_bound()) field_cnSpecificDRXCycleLength = other_value.cnSpecificDRXCycleLength();
  else field_cnSpecificDRXCycleLength.clean_up();
}
return *this;
}

boolean DRXParameterV::operator==(const DRXParameterV& other_value) const
{
return field_splitPGCycleCode==other_value.field_splitPGCycleCode
  && field_nonDRXTimer==other_value.field_nonDRXTimer
  && field_splitOnCCCH==other_value.field_splitOnCCCH
  && field_cnSpecificDRXCycleLength==other_value.field_cnSpecificDRXCycleLength;
}

boolean DRXParameterV::is_bound() const
{
return (field_splitPGCycleCode.is_bound())
  || (field_nonDRXTimer.is_bound())
  || (field_splitOnCCCH.is_bound())
  || (field_cnSpecificDRXCycleLength.is_bound());
}
boolean DRXParameterV::is_value() const
{
return field_splitPGCycleCode.is_value()
  && field_nonDRXTimer.is_value()
  && field_splitOnCCCH.is_value()
  && field_cnSpecificDRXCycleLength.is_value();
}
void DRXParameterV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ splitPGCycleCode := ");
field_splitPGCycleCode.log();
TTCN_Logger::log_event_str(", nonDRXTimer := ");
field_nonDRXTimer.log();
TTCN_Logger::log_event_str(", splitOnCCCH := ");
field_splitOnCCCH.log();
TTCN_Logger::log_event_str(", cnSpecificDRXCycleLength := ");
field_cnSpecificDRXCycleLength.log();
TTCN_Logger::log_event_str(" }");
}

void DRXParameterV::set_implicit_omit()
{
if (splitPGCycleCode().is_bound()) splitPGCycleCode().set_implicit_omit();
if (nonDRXTimer().is_bound()) nonDRXTimer().set_implicit_omit();
if (splitOnCCCH().is_bound()) splitOnCCCH().set_implicit_omit();
if (cnSpecificDRXCycleLength().is_bound()) cnSpecificDRXCycleLength().set_implicit_omit();
}

void DRXParameterV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (4<param.get_size()) {
      param.error("record value of type @MobileL3_GMM_SM_Types.DRXParameterV has 4 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) splitPGCycleCode().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) nonDRXTimer().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) splitOnCCCH().set_param(*param.get_elem(2));
    if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) cnSpecificDRXCycleLength().set_param(*param.get_elem(3));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "splitPGCycleCode")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          splitPGCycleCode().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "nonDRXTimer")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          nonDRXTimer().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "splitOnCCCH")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          splitOnCCCH().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "cnSpecificDRXCycleLength")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          cnSpecificDRXCycleLength().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.DRXParameterV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_GMM_SM_Types.DRXParameterV");
  }
}

void DRXParameterV::encode_text(Text_Buf& text_buf) const
{
field_splitPGCycleCode.encode_text(text_buf);
field_nonDRXTimer.encode_text(text_buf);
field_splitOnCCCH.encode_text(text_buf);
field_cnSpecificDRXCycleLength.encode_text(text_buf);
}

void DRXParameterV::decode_text(Text_Buf& text_buf)
{
field_splitPGCycleCode.decode_text(text_buf);
field_nonDRXTimer.decode_text(text_buf);
field_splitOnCCCH.decode_text(text_buf);
field_cnSpecificDRXCycleLength.decode_text(text_buf);
}

void DRXParameterV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void DRXParameterV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int DRXParameterV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_splitPGCycleCode.RAW_decode(General__Types::OCT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::BIT3_descr_.raw->forceomit);
  decoded_field_length = field_nonDRXTimer.RAW_decode(General__Types::BIT3_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_2_force_omit(2, force_omit, General__Types::BIT1_descr_.raw->forceomit);
  decoded_field_length = field_splitOnCCCH.RAW_decode(General__Types::BIT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_2_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_3_force_omit(3, force_omit, General__Types::BIT4_descr_.raw->forceomit);
  decoded_field_length = field_cnSpecificDRXCycleLength.RAW_decode(General__Types::BIT4_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_3_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int DRXParameterV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 4;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(4);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::OCT1_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::BIT3_descr_.raw);
  myleaf.body.node.nodes[2] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 2, General__Types::BIT1_descr_.raw);
  myleaf.body.node.nodes[3] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 3, General__Types::BIT4_descr_.raw);
  encoded_length += field_splitPGCycleCode.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_nonDRXTimer.RAW_encode(General__Types::BIT3_descr_, *myleaf.body.node.nodes[1]);
  encoded_length += field_splitOnCCCH.RAW_encode(General__Types::BIT1_descr_, *myleaf.body.node.nodes[2]);
  encoded_length += field_cnSpecificDRXCycleLength.RAW_encode(General__Types::BIT4_descr_, *myleaf.body.node.nodes[3]);
  return myleaf.length = encoded_length;
}

struct DRXParameterV_template::single_value_struct {
OCTETSTRING_template field_splitPGCycleCode;
BITSTRING_template field_nonDRXTimer;
BITSTRING_template field_splitOnCCCH;
BITSTRING_template field_cnSpecificDRXCycleLength;
};

void DRXParameterV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_splitPGCycleCode = ANY_VALUE;
single_value->field_nonDRXTimer = ANY_VALUE;
single_value->field_splitOnCCCH = ANY_VALUE;
single_value->field_cnSpecificDRXCycleLength = ANY_VALUE;
}
}
}

void DRXParameterV_template::copy_value(const DRXParameterV& other_value)
{
single_value = new single_value_struct;
if (other_value.splitPGCycleCode().is_bound()) {
  single_value->field_splitPGCycleCode = other_value.splitPGCycleCode();
} else {
  single_value->field_splitPGCycleCode.clean_up();
}
if (other_value.nonDRXTimer().is_bound()) {
  single_value->field_nonDRXTimer = other_value.nonDRXTimer();
} else {
  single_value->field_nonDRXTimer.clean_up();
}
if (other_value.splitOnCCCH().is_bound()) {
  single_value->field_splitOnCCCH = other_value.splitOnCCCH();
} else {
  single_value->field_splitOnCCCH.clean_up();
}
if (other_value.cnSpecificDRXCycleLength().is_bound()) {
  single_value->field_cnSpecificDRXCycleLength = other_value.cnSpecificDRXCycleLength();
} else {
  single_value->field_cnSpecificDRXCycleLength.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void DRXParameterV_template::copy_template(const DRXParameterV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.splitPGCycleCode().get_selection()) {
single_value->field_splitPGCycleCode = other_value.splitPGCycleCode();
} else {
single_value->field_splitPGCycleCode.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.nonDRXTimer().get_selection()) {
single_value->field_nonDRXTimer = other_value.nonDRXTimer();
} else {
single_value->field_nonDRXTimer.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.splitOnCCCH().get_selection()) {
single_value->field_splitOnCCCH = other_value.splitOnCCCH();
} else {
single_value->field_splitOnCCCH.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.cnSpecificDRXCycleLength().get_selection()) {
single_value->field_cnSpecificDRXCycleLength = other_value.cnSpecificDRXCycleLength();
} else {
single_value->field_cnSpecificDRXCycleLength.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new DRXParameterV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new DRXParameterV_template(*other_value.implication_.precondition);
implication_.implied_template = new DRXParameterV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.DRXParameterV.");
break;
}
set_selection(other_value);
}

DRXParameterV_template::DRXParameterV_template()
{
}

DRXParameterV_template::DRXParameterV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

DRXParameterV_template::DRXParameterV_template(const DRXParameterV& other_value)
{
copy_value(other_value);
}

DRXParameterV_template::DRXParameterV_template(const OPTIONAL<DRXParameterV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const DRXParameterV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_GMM_SM_Types.DRXParameterV from an unbound optional field.");
}
}

DRXParameterV_template::DRXParameterV_template(DRXParameterV_template* p_precondition, DRXParameterV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

DRXParameterV_template::DRXParameterV_template(Dynamic_Match_Interface<DRXParameterV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<DRXParameterV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

DRXParameterV_template::DRXParameterV_template(const DRXParameterV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

DRXParameterV_template::~DRXParameterV_template()
{
clean_up();
}

DRXParameterV_template& DRXParameterV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

DRXParameterV_template& DRXParameterV_template::operator=(const DRXParameterV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

DRXParameterV_template& DRXParameterV_template::operator=(const OPTIONAL<DRXParameterV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const DRXParameterV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_GMM_SM_Types.DRXParameterV.");
}
return *this;
}

DRXParameterV_template& DRXParameterV_template::operator=(const DRXParameterV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean DRXParameterV_template::match(const DRXParameterV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.splitPGCycleCode().is_bound()) return FALSE;
if(!single_value->field_splitPGCycleCode.match(other_value.splitPGCycleCode(), legacy))return FALSE;
if(!other_value.nonDRXTimer().is_bound()) return FALSE;
if(!single_value->field_nonDRXTimer.match(other_value.nonDRXTimer(), legacy))return FALSE;
if(!other_value.splitOnCCCH().is_bound()) return FALSE;
if(!single_value->field_splitOnCCCH.match(other_value.splitOnCCCH(), legacy))return FALSE;
if(!other_value.cnSpecificDRXCycleLength().is_bound()) return FALSE;
if(!single_value->field_cnSpecificDRXCycleLength.match(other_value.cnSpecificDRXCycleLength(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.DRXParameterV.");
}
return FALSE;
}

boolean DRXParameterV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_splitPGCycleCode.is_bound()
 || single_value->field_nonDRXTimer.is_bound()
 || single_value->field_splitOnCCCH.is_bound()
 || single_value->field_cnSpecificDRXCycleLength.is_bound();
}

boolean DRXParameterV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_splitPGCycleCode.is_value()
 && single_value->field_nonDRXTimer.is_value()
 && single_value->field_splitOnCCCH.is_value()
 && single_value->field_cnSpecificDRXCycleLength.is_value();
}

void DRXParameterV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

DRXParameterV DRXParameterV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_GMM_SM_Types.DRXParameterV.");
DRXParameterV ret_val;
if (single_value->field_splitPGCycleCode.is_bound()) {
ret_val.splitPGCycleCode() = single_value->field_splitPGCycleCode.valueof();
}
if (single_value->field_nonDRXTimer.is_bound()) {
ret_val.nonDRXTimer() = single_value->field_nonDRXTimer.valueof();
}
if (single_value->field_splitOnCCCH.is_bound()) {
ret_val.splitOnCCCH() = single_value->field_splitOnCCCH.valueof();
}
if (single_value->field_cnSpecificDRXCycleLength.is_bound()) {
ret_val.cnSpecificDRXCycleLength() = single_value->field_cnSpecificDRXCycleLength.valueof();
}
return ret_val;
}

void DRXParameterV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_GMM_SM_Types.DRXParameterV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new DRXParameterV_template[list_length];
}

DRXParameterV_template& DRXParameterV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_GMM_SM_Types.DRXParameterV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_GMM_SM_Types.DRXParameterV.");
return value_list.list_value[list_index];
}

OCTETSTRING_template& DRXParameterV_template::splitPGCycleCode()
{
set_specific();
return single_value->field_splitPGCycleCode;
}

const OCTETSTRING_template& DRXParameterV_template::splitPGCycleCode() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field splitPGCycleCode of a non-specific template of type @MobileL3_GMM_SM_Types.DRXParameterV.");
return single_value->field_splitPGCycleCode;
}

BITSTRING_template& DRXParameterV_template::nonDRXTimer()
{
set_specific();
return single_value->field_nonDRXTimer;
}

const BITSTRING_template& DRXParameterV_template::nonDRXTimer() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field nonDRXTimer of a non-specific template of type @MobileL3_GMM_SM_Types.DRXParameterV.");
return single_value->field_nonDRXTimer;
}

BITSTRING_template& DRXParameterV_template::splitOnCCCH()
{
set_specific();
return single_value->field_splitOnCCCH;
}

const BITSTRING_template& DRXParameterV_template::splitOnCCCH() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field splitOnCCCH of a non-specific template of type @MobileL3_GMM_SM_Types.DRXParameterV.");
return single_value->field_splitOnCCCH;
}

BITSTRING_template& DRXParameterV_template::cnSpecificDRXCycleLength()
{
set_specific();
return single_value->field_cnSpecificDRXCycleLength;
}

const BITSTRING_template& DRXParameterV_template::cnSpecificDRXCycleLength() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field cnSpecificDRXCycleLength of a non-specific template of type @MobileL3_GMM_SM_Types.DRXParameterV.");
return single_value->field_cnSpecificDRXCycleLength;
}

int DRXParameterV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DRXParameterV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 4;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DRXParameterV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DRXParameterV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DRXParameterV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DRXParameterV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DRXParameterV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DRXParameterV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DRXParameterV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DRXParameterV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.DRXParameterV.");
  }
  return 0;
}

void DRXParameterV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ splitPGCycleCode := ");
single_value->field_splitPGCycleCode.log();
TTCN_Logger::log_event_str(", nonDRXTimer := ");
single_value->field_nonDRXTimer.log();
TTCN_Logger::log_event_str(", splitOnCCCH := ");
single_value->field_splitOnCCCH.log();
TTCN_Logger::log_event_str(", cnSpecificDRXCycleLength := ");
single_value->field_cnSpecificDRXCycleLength.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void DRXParameterV_template::log_match(const DRXParameterV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_splitPGCycleCode.match(match_value.splitPGCycleCode(), legacy)){
TTCN_Logger::log_logmatch_info(".splitPGCycleCode");
single_value->field_splitPGCycleCode.log_match(match_value.splitPGCycleCode(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_nonDRXTimer.match(match_value.nonDRXTimer(), legacy)){
TTCN_Logger::log_logmatch_info(".nonDRXTimer");
single_value->field_nonDRXTimer.log_match(match_value.nonDRXTimer(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_splitOnCCCH.match(match_value.splitOnCCCH(), legacy)){
TTCN_Logger::log_logmatch_info(".splitOnCCCH");
single_value->field_splitOnCCCH.log_match(match_value.splitOnCCCH(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_cnSpecificDRXCycleLength.match(match_value.cnSpecificDRXCycleLength(), legacy)){
TTCN_Logger::log_logmatch_info(".cnSpecificDRXCycleLength");
single_value->field_cnSpecificDRXCycleLength.log_match(match_value.cnSpecificDRXCycleLength(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ splitPGCycleCode := ");
single_value->field_splitPGCycleCode.log_match(match_value.splitPGCycleCode(), legacy);
TTCN_Logger::log_event_str(", nonDRXTimer := ");
single_value->field_nonDRXTimer.log_match(match_value.nonDRXTimer(), legacy);
TTCN_Logger::log_event_str(", splitOnCCCH := ");
single_value->field_splitOnCCCH.log_match(match_value.splitOnCCCH(), legacy);
TTCN_Logger::log_event_str(", cnSpecificDRXCycleLength := ");
single_value->field_cnSpecificDRXCycleLength.log_match(match_value.cnSpecificDRXCycleLength(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void DRXParameterV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (splitPGCycleCode().is_bound()) splitPGCycleCode().set_implicit_omit();
if (nonDRXTimer().is_bound()) nonDRXTimer().set_implicit_omit();
if (splitOnCCCH().is_bound()) splitOnCCCH().set_implicit_omit();
if (cnSpecificDRXCycleLength().is_bound()) cnSpecificDRXCycleLength().set_implicit_omit();
}

void DRXParameterV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_splitPGCycleCode.encode_text(text_buf);
single_value->field_nonDRXTimer.encode_text(text_buf);
single_value->field_splitOnCCCH.encode_text(text_buf);
single_value->field_cnSpecificDRXCycleLength.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.DRXParameterV.");
}
}

void DRXParameterV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_splitPGCycleCode.decode_text(text_buf);
single_value->field_nonDRXTimer.decode_text(text_buf);
single_value->field_splitOnCCCH.decode_text(text_buf);
single_value->field_cnSpecificDRXCycleLength.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new DRXParameterV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_GMM_SM_Types.DRXParameterV.");
}
}

void DRXParameterV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    DRXParameterV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (4<param.get_size()) {
      param.error("record template of type @MobileL3_GMM_SM_Types.DRXParameterV has 4 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) splitPGCycleCode().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) nonDRXTimer().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) splitOnCCCH().set_param(*param.get_elem(2));
    if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) cnSpecificDRXCycleLength().set_param(*param.get_elem(3));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "splitPGCycleCode")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          splitPGCycleCode().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "nonDRXTimer")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          nonDRXTimer().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "splitOnCCCH")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          splitOnCCCH().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "cnSpecificDRXCycleLength")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          cnSpecificDRXCycleLength().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.DRXParameterV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    DRXParameterV_template* precondition = new DRXParameterV_template;
    precondition->set_param(*param.get_elem(0));
    DRXParameterV_template* implied_template = new DRXParameterV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = DRXParameterV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_GMM_SM_Types.DRXParameterV");
  }
  is_ifpresent = param.get_ifpresent();
}

void DRXParameterV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_splitPGCycleCode.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.DRXParameterV");
single_value->field_nonDRXTimer.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.DRXParameterV");
single_value->field_splitOnCCCH.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.DRXParameterV");
single_value->field_cnSpecificDRXCycleLength.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.DRXParameterV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_GMM_SM_Types.DRXParameterV");
}

boolean DRXParameterV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean DRXParameterV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

DRXParameterTV::DRXParameterTV()
{
}

DRXParameterTV::DRXParameterTV(const OCTETSTRING& par_elementIdentifier,
    const DRXParameterV& par_drxParameter)
  :   field_elementIdentifier(par_elementIdentifier),
  field_drxParameter(par_drxParameter)
{
}

DRXParameterTV::DRXParameterTV(const DRXParameterTV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_GMM_SM_Types.DRXParameterTV.");
if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
else field_elementIdentifier.clean_up();
if (other_value.drxParameter().is_bound()) field_drxParameter = other_value.drxParameter();
else field_drxParameter.clean_up();
}

void DRXParameterTV::clean_up()
{
field_elementIdentifier.clean_up();
field_drxParameter.clean_up();
}

const TTCN_Typedescriptor_t* DRXParameterTV::get_descriptor() const { return &DRXParameterTV_descr_; }
DRXParameterTV& DRXParameterTV::operator=(const DRXParameterTV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_GMM_SM_Types.DRXParameterTV.");
  if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
  else field_elementIdentifier.clean_up();
  if (other_value.drxParameter().is_bound()) field_drxParameter = other_value.drxParameter();
  else field_drxParameter.clean_up();
}
return *this;
}

boolean DRXParameterTV::operator==(const DRXParameterTV& other_value) const
{
return field_elementIdentifier==other_value.field_elementIdentifier
  && field_drxParameter==other_value.field_drxParameter;
}

boolean DRXParameterTV::is_bound() const
{
return (field_elementIdentifier.is_bound())
  || (field_drxParameter.is_bound());
}
boolean DRXParameterTV::is_value() const
{
return field_elementIdentifier.is_value()
  && field_drxParameter.is_value();
}
void DRXParameterTV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ elementIdentifier := ");
field_elementIdentifier.log();
TTCN_Logger::log_event_str(", drxParameter := ");
field_drxParameter.log();
TTCN_Logger::log_event_str(" }");
}

void DRXParameterTV::set_implicit_omit()
{
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (drxParameter().is_bound()) drxParameter().set_implicit_omit();
}

void DRXParameterTV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record value of type @MobileL3_GMM_SM_Types.DRXParameterTV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) drxParameter().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "drxParameter")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          drxParameter().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.DRXParameterTV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_GMM_SM_Types.DRXParameterTV");
  }
}

void DRXParameterTV::encode_text(Text_Buf& text_buf) const
{
field_elementIdentifier.encode_text(text_buf);
field_drxParameter.encode_text(text_buf);
}

void DRXParameterTV::decode_text(Text_Buf& text_buf)
{
field_elementIdentifier.decode_text(text_buf);
field_drxParameter.decode_text(text_buf);
}

void DRXParameterTV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void DRXParameterTV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int DRXParameterTV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_elementIdentifier.RAW_decode(General__Types::OCT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, DRXParameterV_descr_.raw->forceomit);
  decoded_field_length = field_drxParameter.RAW_decode(DRXParameterV_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  if (field_elementIdentifier !=  os_0) return -1;
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int DRXParameterTV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 2;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(2);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::OCT1_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, DRXParameterV_descr_.raw);
  encoded_length += field_elementIdentifier.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_drxParameter.RAW_encode(DRXParameterV_descr_, *myleaf.body.node.nodes[1]);
  if (field_elementIdentifier !=  os_0) {
  RAW_enc_tree* temp_leaf;
  {
  RAW_enc_tr_pos pr_pos0;
  pr_pos0.level=myleaf.curr_pos.level+1;
  int new_pos0[]={0};
  pr_pos0.pos=init_new_tree_pos(myleaf.curr_pos,1,new_pos0);
  temp_leaf = myleaf.get_node(pr_pos0);
  if(temp_leaf != NULL){
   os_0.RAW_encode(General__Types::OCT1_descr_,*temp_leaf);
  } else {
    TTCN_EncDec_ErrorContext::error
      (TTCN_EncDec::ET_OMITTED_TAG, "Encoding a tagged, but omitted value.");
  }
  free_tree_pos(pr_pos0.pos);
  }
  }
  return myleaf.length = encoded_length;
}

struct DRXParameterTV_template::single_value_struct {
OCTETSTRING_template field_elementIdentifier;
DRXParameterV_template field_drxParameter;
};

void DRXParameterTV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_elementIdentifier = ANY_VALUE;
single_value->field_drxParameter = ANY_VALUE;
}
}
}

void DRXParameterTV_template::copy_value(const DRXParameterTV& other_value)
{
single_value = new single_value_struct;
if (other_value.elementIdentifier().is_bound()) {
  single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
  single_value->field_elementIdentifier.clean_up();
}
if (other_value.drxParameter().is_bound()) {
  single_value->field_drxParameter = other_value.drxParameter();
} else {
  single_value->field_drxParameter.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void DRXParameterTV_template::copy_template(const DRXParameterTV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.elementIdentifier().get_selection()) {
single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
single_value->field_elementIdentifier.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.drxParameter().get_selection()) {
single_value->field_drxParameter = other_value.drxParameter();
} else {
single_value->field_drxParameter.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new DRXParameterTV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new DRXParameterTV_template(*other_value.implication_.precondition);
implication_.implied_template = new DRXParameterTV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.DRXParameterTV.");
break;
}
set_selection(other_value);
}

DRXParameterTV_template::DRXParameterTV_template()
{
}

DRXParameterTV_template::DRXParameterTV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

DRXParameterTV_template::DRXParameterTV_template(const DRXParameterTV& other_value)
{
copy_value(other_value);
}

DRXParameterTV_template::DRXParameterTV_template(const OPTIONAL<DRXParameterTV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const DRXParameterTV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_GMM_SM_Types.DRXParameterTV from an unbound optional field.");
}
}

DRXParameterTV_template::DRXParameterTV_template(DRXParameterTV_template* p_precondition, DRXParameterTV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

DRXParameterTV_template::DRXParameterTV_template(Dynamic_Match_Interface<DRXParameterTV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<DRXParameterTV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

DRXParameterTV_template::DRXParameterTV_template(const DRXParameterTV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

DRXParameterTV_template::~DRXParameterTV_template()
{
clean_up();
}

DRXParameterTV_template& DRXParameterTV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

DRXParameterTV_template& DRXParameterTV_template::operator=(const DRXParameterTV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

DRXParameterTV_template& DRXParameterTV_template::operator=(const OPTIONAL<DRXParameterTV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const DRXParameterTV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_GMM_SM_Types.DRXParameterTV.");
}
return *this;
}

DRXParameterTV_template& DRXParameterTV_template::operator=(const DRXParameterTV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean DRXParameterTV_template::match(const DRXParameterTV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.elementIdentifier().is_bound()) return FALSE;
if(!single_value->field_elementIdentifier.match(other_value.elementIdentifier(), legacy))return FALSE;
if(!other_value.drxParameter().is_bound()) return FALSE;
if(!single_value->field_drxParameter.match(other_value.drxParameter(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.DRXParameterTV.");
}
return FALSE;
}

boolean DRXParameterTV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_elementIdentifier.is_bound()
 || single_value->field_drxParameter.is_bound();
}

boolean DRXParameterTV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_elementIdentifier.is_value()
 && single_value->field_drxParameter.is_value();
}

void DRXParameterTV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

DRXParameterTV DRXParameterTV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_GMM_SM_Types.DRXParameterTV.");
DRXParameterTV ret_val;
if (single_value->field_elementIdentifier.is_bound()) {
ret_val.elementIdentifier() = single_value->field_elementIdentifier.valueof();
}
if (single_value->field_drxParameter.is_bound()) {
ret_val.drxParameter() = single_value->field_drxParameter.valueof();
}
return ret_val;
}

void DRXParameterTV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_GMM_SM_Types.DRXParameterTV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new DRXParameterTV_template[list_length];
}

DRXParameterTV_template& DRXParameterTV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_GMM_SM_Types.DRXParameterTV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_GMM_SM_Types.DRXParameterTV.");
return value_list.list_value[list_index];
}

OCTETSTRING_template& DRXParameterTV_template::elementIdentifier()
{
set_specific();
return single_value->field_elementIdentifier;
}

const OCTETSTRING_template& DRXParameterTV_template::elementIdentifier() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field elementIdentifier of a non-specific template of type @MobileL3_GMM_SM_Types.DRXParameterTV.");
return single_value->field_elementIdentifier;
}

DRXParameterV_template& DRXParameterTV_template::drxParameter()
{
set_specific();
return single_value->field_drxParameter;
}

const DRXParameterV_template& DRXParameterTV_template::drxParameter() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field drxParameter of a non-specific template of type @MobileL3_GMM_SM_Types.DRXParameterTV.");
return single_value->field_drxParameter;
}

int DRXParameterTV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DRXParameterTV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 2;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DRXParameterTV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DRXParameterTV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DRXParameterTV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DRXParameterTV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DRXParameterTV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DRXParameterTV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DRXParameterTV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.DRXParameterTV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.DRXParameterTV.");
  }
  return 0;
}

void DRXParameterTV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log();
TTCN_Logger::log_event_str(", drxParameter := ");
single_value->field_drxParameter.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void DRXParameterTV_template::log_match(const DRXParameterTV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_elementIdentifier.match(match_value.elementIdentifier(), legacy)){
TTCN_Logger::log_logmatch_info(".elementIdentifier");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_drxParameter.match(match_value.drxParameter(), legacy)){
TTCN_Logger::log_logmatch_info(".drxParameter");
single_value->field_drxParameter.log_match(match_value.drxParameter(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::log_event_str(", drxParameter := ");
single_value->field_drxParameter.log_match(match_value.drxParameter(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void DRXParameterTV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (drxParameter().is_bound()) drxParameter().set_implicit_omit();
}

void DRXParameterTV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_elementIdentifier.encode_text(text_buf);
single_value->field_drxParameter.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.DRXParameterTV.");
}
}

void DRXParameterTV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_elementIdentifier.decode_text(text_buf);
single_value->field_drxParameter.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new DRXParameterTV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_GMM_SM_Types.DRXParameterTV.");
}
}

void DRXParameterTV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    DRXParameterTV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record template of type @MobileL3_GMM_SM_Types.DRXParameterTV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) drxParameter().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "drxParameter")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          drxParameter().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.DRXParameterTV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    DRXParameterTV_template* precondition = new DRXParameterTV_template;
    precondition->set_param(*param.get_elem(0));
    DRXParameterTV_template* implied_template = new DRXParameterTV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = DRXParameterTV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_GMM_SM_Types.DRXParameterTV");
  }
  is_ifpresent = param.get_ifpresent();
}

void DRXParameterTV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_elementIdentifier.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.DRXParameterTV");
single_value->field_drxParameter.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.DRXParameterTV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_GMM_SM_Types.DRXParameterTV");
}

boolean DRXParameterTV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean DRXParameterTV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

ForceToStandbyV::ForceToStandbyV()
{
}

ForceToStandbyV::ForceToStandbyV(const BITSTRING& par_forceToStandbyValue,
    const BITSTRING& par_spare)
  :   field_forceToStandbyValue(par_forceToStandbyValue),
  field_spare(par_spare)
{
}

ForceToStandbyV::ForceToStandbyV(const ForceToStandbyV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_GMM_SM_Types.ForceToStandbyV.");
if (other_value.forceToStandbyValue().is_bound()) field_forceToStandbyValue = other_value.forceToStandbyValue();
else field_forceToStandbyValue.clean_up();
if (other_value.spare().is_bound()) field_spare = other_value.spare();
else field_spare.clean_up();
}

void ForceToStandbyV::clean_up()
{
field_forceToStandbyValue.clean_up();
field_spare.clean_up();
}

const TTCN_Typedescriptor_t* ForceToStandbyV::get_descriptor() const { return &ForceToStandbyV_descr_; }
ForceToStandbyV& ForceToStandbyV::operator=(const ForceToStandbyV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_GMM_SM_Types.ForceToStandbyV.");
  if (other_value.forceToStandbyValue().is_bound()) field_forceToStandbyValue = other_value.forceToStandbyValue();
  else field_forceToStandbyValue.clean_up();
  if (other_value.spare().is_bound()) field_spare = other_value.spare();
  else field_spare.clean_up();
}
return *this;
}

boolean ForceToStandbyV::operator==(const ForceToStandbyV& other_value) const
{
return field_forceToStandbyValue==other_value.field_forceToStandbyValue
  && field_spare==other_value.field_spare;
}

boolean ForceToStandbyV::is_bound() const
{
return (field_forceToStandbyValue.is_bound())
  || (field_spare.is_bound());
}
boolean ForceToStandbyV::is_value() const
{
return field_forceToStandbyValue.is_value()
  && field_spare.is_value();
}
void ForceToStandbyV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ forceToStandbyValue := ");
field_forceToStandbyValue.log();
TTCN_Logger::log_event_str(", spare := ");
field_spare.log();
TTCN_Logger::log_event_str(" }");
}

void ForceToStandbyV::set_implicit_omit()
{
if (forceToStandbyValue().is_bound()) forceToStandbyValue().set_implicit_omit();
if (spare().is_bound()) spare().set_implicit_omit();
}

void ForceToStandbyV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record value of type @MobileL3_GMM_SM_Types.ForceToStandbyV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) forceToStandbyValue().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) spare().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "forceToStandbyValue")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          forceToStandbyValue().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "spare")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          spare().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.ForceToStandbyV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_GMM_SM_Types.ForceToStandbyV");
  }
}

void ForceToStandbyV::encode_text(Text_Buf& text_buf) const
{
field_forceToStandbyValue.encode_text(text_buf);
field_spare.encode_text(text_buf);
}

void ForceToStandbyV::decode_text(Text_Buf& text_buf)
{
field_forceToStandbyValue.decode_text(text_buf);
field_spare.decode_text(text_buf);
}

void ForceToStandbyV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void ForceToStandbyV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int ForceToStandbyV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::BIT3_descr_.raw->forceomit);
  decoded_field_length = field_forceToStandbyValue.RAW_decode(General__Types::BIT3_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::BIT1_descr_.raw->forceomit);
  decoded_field_length = field_spare.RAW_decode(General__Types::BIT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int ForceToStandbyV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 2;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(2);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::BIT3_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::BIT1_descr_.raw);
  encoded_length += field_forceToStandbyValue.RAW_encode(General__Types::BIT3_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_spare.RAW_encode(General__Types::BIT1_descr_, *myleaf.body.node.nodes[1]);
  return myleaf.length = encoded_length;
}

struct ForceToStandbyV_template::single_value_struct {
BITSTRING_template field_forceToStandbyValue;
BITSTRING_template field_spare;
};

void ForceToStandbyV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_forceToStandbyValue = ANY_VALUE;
single_value->field_spare = ANY_VALUE;
}
}
}

void ForceToStandbyV_template::copy_value(const ForceToStandbyV& other_value)
{
single_value = new single_value_struct;
if (other_value.forceToStandbyValue().is_bound()) {
  single_value->field_forceToStandbyValue = other_value.forceToStandbyValue();
} else {
  single_value->field_forceToStandbyValue.clean_up();
}
if (other_value.spare().is_bound()) {
  single_value->field_spare = other_value.spare();
} else {
  single_value->field_spare.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void ForceToStandbyV_template::copy_template(const ForceToStandbyV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.forceToStandbyValue().get_selection()) {
single_value->field_forceToStandbyValue = other_value.forceToStandbyValue();
} else {
single_value->field_forceToStandbyValue.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.spare().get_selection()) {
single_value->field_spare = other_value.spare();
} else {
single_value->field_spare.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new ForceToStandbyV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new ForceToStandbyV_template(*other_value.implication_.precondition);
implication_.implied_template = new ForceToStandbyV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.ForceToStandbyV.");
break;
}
set_selection(other_value);
}

ForceToStandbyV_template::ForceToStandbyV_template()
{
}

ForceToStandbyV_template::ForceToStandbyV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

ForceToStandbyV_template::ForceToStandbyV_template(const ForceToStandbyV& other_value)
{
copy_value(other_value);
}

ForceToStandbyV_template::ForceToStandbyV_template(const OPTIONAL<ForceToStandbyV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ForceToStandbyV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_GMM_SM_Types.ForceToStandbyV from an unbound optional field.");
}
}

ForceToStandbyV_template::ForceToStandbyV_template(ForceToStandbyV_template* p_precondition, ForceToStandbyV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

ForceToStandbyV_template::ForceToStandbyV_template(Dynamic_Match_Interface<ForceToStandbyV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<ForceToStandbyV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

ForceToStandbyV_template::ForceToStandbyV_template(const ForceToStandbyV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

ForceToStandbyV_template::~ForceToStandbyV_template()
{
clean_up();
}

ForceToStandbyV_template& ForceToStandbyV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

ForceToStandbyV_template& ForceToStandbyV_template::operator=(const ForceToStandbyV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

ForceToStandbyV_template& ForceToStandbyV_template::operator=(const OPTIONAL<ForceToStandbyV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ForceToStandbyV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_GMM_SM_Types.ForceToStandbyV.");
}
return *this;
}

ForceToStandbyV_template& ForceToStandbyV_template::operator=(const ForceToStandbyV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean ForceToStandbyV_template::match(const ForceToStandbyV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.forceToStandbyValue().is_bound()) return FALSE;
if(!single_value->field_forceToStandbyValue.match(other_value.forceToStandbyValue(), legacy))return FALSE;
if(!other_value.spare().is_bound()) return FALSE;
if(!single_value->field_spare.match(other_value.spare(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.ForceToStandbyV.");
}
return FALSE;
}

boolean ForceToStandbyV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_forceToStandbyValue.is_bound()
 || single_value->field_spare.is_bound();
}

boolean ForceToStandbyV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_forceToStandbyValue.is_value()
 && single_value->field_spare.is_value();
}

void ForceToStandbyV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

ForceToStandbyV ForceToStandbyV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_GMM_SM_Types.ForceToStandbyV.");
ForceToStandbyV ret_val;
if (single_value->field_forceToStandbyValue.is_bound()) {
ret_val.forceToStandbyValue() = single_value->field_forceToStandbyValue.valueof();
}
if (single_value->field_spare.is_bound()) {
ret_val.spare() = single_value->field_spare.valueof();
}
return ret_val;
}

void ForceToStandbyV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_GMM_SM_Types.ForceToStandbyV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new ForceToStandbyV_template[list_length];
}

ForceToStandbyV_template& ForceToStandbyV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_GMM_SM_Types.ForceToStandbyV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_GMM_SM_Types.ForceToStandbyV.");
return value_list.list_value[list_index];
}

BITSTRING_template& ForceToStandbyV_template::forceToStandbyValue()
{
set_specific();
return single_value->field_forceToStandbyValue;
}

const BITSTRING_template& ForceToStandbyV_template::forceToStandbyValue() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field forceToStandbyValue of a non-specific template of type @MobileL3_GMM_SM_Types.ForceToStandbyV.");
return single_value->field_forceToStandbyValue;
}

BITSTRING_template& ForceToStandbyV_template::spare()
{
set_specific();
return single_value->field_spare;
}

const BITSTRING_template& ForceToStandbyV_template::spare() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field spare of a non-specific template of type @MobileL3_GMM_SM_Types.ForceToStandbyV.");
return single_value->field_spare;
}

int ForceToStandbyV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ForceToStandbyV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 2;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ForceToStandbyV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ForceToStandbyV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ForceToStandbyV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ForceToStandbyV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ForceToStandbyV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ForceToStandbyV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ForceToStandbyV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ForceToStandbyV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.ForceToStandbyV.");
  }
  return 0;
}

void ForceToStandbyV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ forceToStandbyValue := ");
single_value->field_forceToStandbyValue.log();
TTCN_Logger::log_event_str(", spare := ");
single_value->field_spare.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void ForceToStandbyV_template::log_match(const ForceToStandbyV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_forceToStandbyValue.match(match_value.forceToStandbyValue(), legacy)){
TTCN_Logger::log_logmatch_info(".forceToStandbyValue");
single_value->field_forceToStandbyValue.log_match(match_value.forceToStandbyValue(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_spare.match(match_value.spare(), legacy)){
TTCN_Logger::log_logmatch_info(".spare");
single_value->field_spare.log_match(match_value.spare(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ forceToStandbyValue := ");
single_value->field_forceToStandbyValue.log_match(match_value.forceToStandbyValue(), legacy);
TTCN_Logger::log_event_str(", spare := ");
single_value->field_spare.log_match(match_value.spare(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void ForceToStandbyV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (forceToStandbyValue().is_bound()) forceToStandbyValue().set_implicit_omit();
if (spare().is_bound()) spare().set_implicit_omit();
}

void ForceToStandbyV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_forceToStandbyValue.encode_text(text_buf);
single_value->field_spare.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.ForceToStandbyV.");
}
}

void ForceToStandbyV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_forceToStandbyValue.decode_text(text_buf);
single_value->field_spare.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new ForceToStandbyV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_GMM_SM_Types.ForceToStandbyV.");
}
}

void ForceToStandbyV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    ForceToStandbyV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record template of type @MobileL3_GMM_SM_Types.ForceToStandbyV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) forceToStandbyValue().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) spare().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "forceToStandbyValue")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          forceToStandbyValue().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "spare")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          spare().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.ForceToStandbyV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    ForceToStandbyV_template* precondition = new ForceToStandbyV_template;
    precondition->set_param(*param.get_elem(0));
    ForceToStandbyV_template* implied_template = new ForceToStandbyV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = ForceToStandbyV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_GMM_SM_Types.ForceToStandbyV");
  }
  is_ifpresent = param.get_ifpresent();
}

void ForceToStandbyV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_forceToStandbyValue.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.ForceToStandbyV");
single_value->field_spare.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.ForceToStandbyV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_GMM_SM_Types.ForceToStandbyV");
}

boolean ForceToStandbyV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean ForceToStandbyV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

ForceToStandbyTV::ForceToStandbyTV()
{
}

ForceToStandbyTV::ForceToStandbyTV(const ForceToStandbyV& par_valueField,
    const BITSTRING& par_forceToStandbyIEI)
  :   field_valueField(par_valueField),
  field_forceToStandbyIEI(par_forceToStandbyIEI)
{
}

ForceToStandbyTV::ForceToStandbyTV(const ForceToStandbyTV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_GMM_SM_Types.ForceToStandbyTV.");
if (other_value.valueField().is_bound()) field_valueField = other_value.valueField();
else field_valueField.clean_up();
if (other_value.forceToStandbyIEI().is_bound()) field_forceToStandbyIEI = other_value.forceToStandbyIEI();
else field_forceToStandbyIEI.clean_up();
}

void ForceToStandbyTV::clean_up()
{
field_valueField.clean_up();
field_forceToStandbyIEI.clean_up();
}

const TTCN_Typedescriptor_t* ForceToStandbyTV::get_descriptor() const { return &ForceToStandbyTV_descr_; }
ForceToStandbyTV& ForceToStandbyTV::operator=(const ForceToStandbyTV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_GMM_SM_Types.ForceToStandbyTV.");
  if (other_value.valueField().is_bound()) field_valueField = other_value.valueField();
  else field_valueField.clean_up();
  if (other_value.forceToStandbyIEI().is_bound()) field_forceToStandbyIEI = other_value.forceToStandbyIEI();
  else field_forceToStandbyIEI.clean_up();
}
return *this;
}

boolean ForceToStandbyTV::operator==(const ForceToStandbyTV& other_value) const
{
return field_valueField==other_value.field_valueField
  && field_forceToStandbyIEI==other_value.field_forceToStandbyIEI;
}

boolean ForceToStandbyTV::is_bound() const
{
return (field_valueField.is_bound())
  || (field_forceToStandbyIEI.is_bound());
}
boolean ForceToStandbyTV::is_value() const
{
return field_valueField.is_value()
  && field_forceToStandbyIEI.is_value();
}
void ForceToStandbyTV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ valueField := ");
field_valueField.log();
TTCN_Logger::log_event_str(", forceToStandbyIEI := ");
field_forceToStandbyIEI.log();
TTCN_Logger::log_event_str(" }");
}

void ForceToStandbyTV::set_implicit_omit()
{
if (valueField().is_bound()) valueField().set_implicit_omit();
if (forceToStandbyIEI().is_bound()) forceToStandbyIEI().set_implicit_omit();
}

void ForceToStandbyTV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record value of type @MobileL3_GMM_SM_Types.ForceToStandbyTV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) valueField().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) forceToStandbyIEI().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "valueField")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          valueField().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "forceToStandbyIEI")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          forceToStandbyIEI().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.ForceToStandbyTV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_GMM_SM_Types.ForceToStandbyTV");
  }
}

void ForceToStandbyTV::encode_text(Text_Buf& text_buf) const
{
field_valueField.encode_text(text_buf);
field_forceToStandbyIEI.encode_text(text_buf);
}

void ForceToStandbyTV::decode_text(Text_Buf& text_buf)
{
field_valueField.decode_text(text_buf);
field_forceToStandbyIEI.decode_text(text_buf);
}

void ForceToStandbyTV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void ForceToStandbyTV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int ForceToStandbyTV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, ForceToStandbyV_descr_.raw->forceomit);
  decoded_field_length = field_valueField.RAW_decode(ForceToStandbyV_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::BIT4_descr_.raw->forceomit);
  decoded_field_length = field_forceToStandbyIEI.RAW_decode(General__Types::BIT4_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int ForceToStandbyTV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 2;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(2);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, ForceToStandbyV_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::BIT4_descr_.raw);
  encoded_length += field_valueField.RAW_encode(ForceToStandbyV_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_forceToStandbyIEI.RAW_encode(General__Types::BIT4_descr_, *myleaf.body.node.nodes[1]);
  return myleaf.length = encoded_length;
}

struct ForceToStandbyTV_template::single_value_struct {
ForceToStandbyV_template field_valueField;
BITSTRING_template field_forceToStandbyIEI;
};

void ForceToStandbyTV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_valueField = ANY_VALUE;
single_value->field_forceToStandbyIEI = ANY_VALUE;
}
}
}

void ForceToStandbyTV_template::copy_value(const ForceToStandbyTV& other_value)
{
single_value = new single_value_struct;
if (other_value.valueField().is_bound()) {
  single_value->field_valueField = other_value.valueField();
} else {
  single_value->field_valueField.clean_up();
}
if (other_value.forceToStandbyIEI().is_bound()) {
  single_value->field_forceToStandbyIEI = other_value.forceToStandbyIEI();
} else {
  single_value->field_forceToStandbyIEI.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void ForceToStandbyTV_template::copy_template(const ForceToStandbyTV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.valueField().get_selection()) {
single_value->field_valueField = other_value.valueField();
} else {
single_value->field_valueField.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.forceToStandbyIEI().get_selection()) {
single_value->field_forceToStandbyIEI = other_value.forceToStandbyIEI();
} else {
single_value->field_forceToStandbyIEI.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new ForceToStandbyTV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new ForceToStandbyTV_template(*other_value.implication_.precondition);
implication_.implied_template = new ForceToStandbyTV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.ForceToStandbyTV.");
break;
}
set_selection(other_value);
}

ForceToStandbyTV_template::ForceToStandbyTV_template()
{
}

ForceToStandbyTV_template::ForceToStandbyTV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

ForceToStandbyTV_template::ForceToStandbyTV_template(const ForceToStandbyTV& other_value)
{
copy_value(other_value);
}

ForceToStandbyTV_template::ForceToStandbyTV_template(const OPTIONAL<ForceToStandbyTV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ForceToStandbyTV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_GMM_SM_Types.ForceToStandbyTV from an unbound optional field.");
}
}

ForceToStandbyTV_template::ForceToStandbyTV_template(ForceToStandbyTV_template* p_precondition, ForceToStandbyTV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

ForceToStandbyTV_template::ForceToStandbyTV_template(Dynamic_Match_Interface<ForceToStandbyTV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<ForceToStandbyTV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

ForceToStandbyTV_template::ForceToStandbyTV_template(const ForceToStandbyTV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

ForceToStandbyTV_template::~ForceToStandbyTV_template()
{
clean_up();
}

ForceToStandbyTV_template& ForceToStandbyTV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

ForceToStandbyTV_template& ForceToStandbyTV_template::operator=(const ForceToStandbyTV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

ForceToStandbyTV_template& ForceToStandbyTV_template::operator=(const OPTIONAL<ForceToStandbyTV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ForceToStandbyTV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_GMM_SM_Types.ForceToStandbyTV.");
}
return *this;
}

ForceToStandbyTV_template& ForceToStandbyTV_template::operator=(const ForceToStandbyTV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean ForceToStandbyTV_template::match(const ForceToStandbyTV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.valueField().is_bound()) return FALSE;
if(!single_value->field_valueField.match(other_value.valueField(), legacy))return FALSE;
if(!other_value.forceToStandbyIEI().is_bound()) return FALSE;
if(!single_value->field_forceToStandbyIEI.match(other_value.forceToStandbyIEI(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.ForceToStandbyTV.");
}
return FALSE;
}

boolean ForceToStandbyTV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_valueField.is_bound()
 || single_value->field_forceToStandbyIEI.is_bound();
}

boolean ForceToStandbyTV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_valueField.is_value()
 && single_value->field_forceToStandbyIEI.is_value();
}

void ForceToStandbyTV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

ForceToStandbyTV ForceToStandbyTV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_GMM_SM_Types.ForceToStandbyTV.");
ForceToStandbyTV ret_val;
if (single_value->field_valueField.is_bound()) {
ret_val.valueField() = single_value->field_valueField.valueof();
}
if (single_value->field_forceToStandbyIEI.is_bound()) {
ret_val.forceToStandbyIEI() = single_value->field_forceToStandbyIEI.valueof();
}
return ret_val;
}

void ForceToStandbyTV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_GMM_SM_Types.ForceToStandbyTV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new ForceToStandbyTV_template[list_length];
}

ForceToStandbyTV_template& ForceToStandbyTV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_GMM_SM_Types.ForceToStandbyTV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_GMM_SM_Types.ForceToStandbyTV.");
return value_list.list_value[list_index];
}

ForceToStandbyV_template& ForceToStandbyTV_template::valueField()
{
set_specific();
return single_value->field_valueField;
}

const ForceToStandbyV_template& ForceToStandbyTV_template::valueField() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field valueField of a non-specific template of type @MobileL3_GMM_SM_Types.ForceToStandbyTV.");
return single_value->field_valueField;
}

BITSTRING_template& ForceToStandbyTV_template::forceToStandbyIEI()
{
set_specific();
return single_value->field_forceToStandbyIEI;
}

const BITSTRING_template& ForceToStandbyTV_template::forceToStandbyIEI() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field forceToStandbyIEI of a non-specific template of type @MobileL3_GMM_SM_Types.ForceToStandbyTV.");
return single_value->field_forceToStandbyIEI;
}

int ForceToStandbyTV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ForceToStandbyTV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 2;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ForceToStandbyTV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ForceToStandbyTV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ForceToStandbyTV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ForceToStandbyTV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ForceToStandbyTV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ForceToStandbyTV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ForceToStandbyTV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ForceToStandbyTV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.ForceToStandbyTV.");
  }
  return 0;
}

void ForceToStandbyTV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ valueField := ");
single_value->field_valueField.log();
TTCN_Logger::log_event_str(", forceToStandbyIEI := ");
single_value->field_forceToStandbyIEI.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void ForceToStandbyTV_template::log_match(const ForceToStandbyTV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_valueField.match(match_value.valueField(), legacy)){
TTCN_Logger::log_logmatch_info(".valueField");
single_value->field_valueField.log_match(match_value.valueField(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_forceToStandbyIEI.match(match_value.forceToStandbyIEI(), legacy)){
TTCN_Logger::log_logmatch_info(".forceToStandbyIEI");
single_value->field_forceToStandbyIEI.log_match(match_value.forceToStandbyIEI(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ valueField := ");
single_value->field_valueField.log_match(match_value.valueField(), legacy);
TTCN_Logger::log_event_str(", forceToStandbyIEI := ");
single_value->field_forceToStandbyIEI.log_match(match_value.forceToStandbyIEI(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void ForceToStandbyTV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (valueField().is_bound()) valueField().set_implicit_omit();
if (forceToStandbyIEI().is_bound()) forceToStandbyIEI().set_implicit_omit();
}

void ForceToStandbyTV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_valueField.encode_text(text_buf);
single_value->field_forceToStandbyIEI.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.ForceToStandbyTV.");
}
}

void ForceToStandbyTV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_valueField.decode_text(text_buf);
single_value->field_forceToStandbyIEI.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new ForceToStandbyTV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_GMM_SM_Types.ForceToStandbyTV.");
}
}

void ForceToStandbyTV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    ForceToStandbyTV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record template of type @MobileL3_GMM_SM_Types.ForceToStandbyTV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) valueField().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) forceToStandbyIEI().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "valueField")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          valueField().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "forceToStandbyIEI")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          forceToStandbyIEI().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.ForceToStandbyTV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    ForceToStandbyTV_template* precondition = new ForceToStandbyTV_template;
    precondition->set_param(*param.get_elem(0));
    ForceToStandbyTV_template* implied_template = new ForceToStandbyTV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = ForceToStandbyTV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_GMM_SM_Types.ForceToStandbyTV");
  }
  is_ifpresent = param.get_ifpresent();
}

void ForceToStandbyTV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_valueField.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.ForceToStandbyTV");
single_value->field_forceToStandbyIEI.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.ForceToStandbyTV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_GMM_SM_Types.ForceToStandbyTV");
}

boolean ForceToStandbyTV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean ForceToStandbyTV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

P__TMSISignatureTV::P__TMSISignatureTV()
{
}

P__TMSISignatureTV::P__TMSISignatureTV(const OCTETSTRING& par_elementIdentifier,
    const OCTETSTRING& par_valueField)
  :   field_elementIdentifier(par_elementIdentifier),
  field_valueField(par_valueField)
{
}

P__TMSISignatureTV::P__TMSISignatureTV(const P__TMSISignatureTV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_GMM_SM_Types.P_TMSISignatureTV.");
if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
else field_elementIdentifier.clean_up();
if (other_value.valueField().is_bound()) field_valueField = other_value.valueField();
else field_valueField.clean_up();
}

void P__TMSISignatureTV::clean_up()
{
field_elementIdentifier.clean_up();
field_valueField.clean_up();
}

const TTCN_Typedescriptor_t* P__TMSISignatureTV::get_descriptor() const { return &P__TMSISignatureTV_descr_; }
P__TMSISignatureTV& P__TMSISignatureTV::operator=(const P__TMSISignatureTV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_GMM_SM_Types.P_TMSISignatureTV.");
  if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
  else field_elementIdentifier.clean_up();
  if (other_value.valueField().is_bound()) field_valueField = other_value.valueField();
  else field_valueField.clean_up();
}
return *this;
}

boolean P__TMSISignatureTV::operator==(const P__TMSISignatureTV& other_value) const
{
return field_elementIdentifier==other_value.field_elementIdentifier
  && field_valueField==other_value.field_valueField;
}

boolean P__TMSISignatureTV::is_bound() const
{
return (field_elementIdentifier.is_bound())
  || (field_valueField.is_bound());
}
boolean P__TMSISignatureTV::is_value() const
{
return field_elementIdentifier.is_value()
  && field_valueField.is_value();
}
void P__TMSISignatureTV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ elementIdentifier := ");
field_elementIdentifier.log();
TTCN_Logger::log_event_str(", valueField := ");
field_valueField.log();
TTCN_Logger::log_event_str(" }");
}

void P__TMSISignatureTV::set_implicit_omit()
{
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (valueField().is_bound()) valueField().set_implicit_omit();
}

void P__TMSISignatureTV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record value of type @MobileL3_GMM_SM_Types.P_TMSISignatureTV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) valueField().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "valueField")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          valueField().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.P_TMSISignatureTV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_GMM_SM_Types.P_TMSISignatureTV");
  }
}

void P__TMSISignatureTV::encode_text(Text_Buf& text_buf) const
{
field_elementIdentifier.encode_text(text_buf);
field_valueField.encode_text(text_buf);
}

void P__TMSISignatureTV::decode_text(Text_Buf& text_buf)
{
field_elementIdentifier.decode_text(text_buf);
field_valueField.decode_text(text_buf);
}

void P__TMSISignatureTV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void P__TMSISignatureTV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int P__TMSISignatureTV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_elementIdentifier.RAW_decode(General__Types::OCT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::OCT3_descr_.raw->forceomit);
  decoded_field_length = field_valueField.RAW_decode(General__Types::OCT3_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  if (field_elementIdentifier !=  os_1) return -1;
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int P__TMSISignatureTV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 2;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(2);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::OCT1_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::OCT3_descr_.raw);
  encoded_length += field_elementIdentifier.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_valueField.RAW_encode(General__Types::OCT3_descr_, *myleaf.body.node.nodes[1]);
  if (field_elementIdentifier !=  os_1) {
  RAW_enc_tree* temp_leaf;
  {
  RAW_enc_tr_pos pr_pos0;
  pr_pos0.level=myleaf.curr_pos.level+1;
  int new_pos0[]={0};
  pr_pos0.pos=init_new_tree_pos(myleaf.curr_pos,1,new_pos0);
  temp_leaf = myleaf.get_node(pr_pos0);
  if(temp_leaf != NULL){
   os_1.RAW_encode(General__Types::OCT1_descr_,*temp_leaf);
  } else {
    TTCN_EncDec_ErrorContext::error
      (TTCN_EncDec::ET_OMITTED_TAG, "Encoding a tagged, but omitted value.");
  }
  free_tree_pos(pr_pos0.pos);
  }
  }
  return myleaf.length = encoded_length;
}

struct P__TMSISignatureTV_template::single_value_struct {
OCTETSTRING_template field_elementIdentifier;
OCTETSTRING_template field_valueField;
};

void P__TMSISignatureTV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_elementIdentifier = ANY_VALUE;
single_value->field_valueField = ANY_VALUE;
}
}
}

void P__TMSISignatureTV_template::copy_value(const P__TMSISignatureTV& other_value)
{
single_value = new single_value_struct;
if (other_value.elementIdentifier().is_bound()) {
  single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
  single_value->field_elementIdentifier.clean_up();
}
if (other_value.valueField().is_bound()) {
  single_value->field_valueField = other_value.valueField();
} else {
  single_value->field_valueField.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void P__TMSISignatureTV_template::copy_template(const P__TMSISignatureTV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.elementIdentifier().get_selection()) {
single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
single_value->field_elementIdentifier.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.valueField().get_selection()) {
single_value->field_valueField = other_value.valueField();
} else {
single_value->field_valueField.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new P__TMSISignatureTV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new P__TMSISignatureTV_template(*other_value.implication_.precondition);
implication_.implied_template = new P__TMSISignatureTV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.P_TMSISignatureTV.");
break;
}
set_selection(other_value);
}

P__TMSISignatureTV_template::P__TMSISignatureTV_template()
{
}

P__TMSISignatureTV_template::P__TMSISignatureTV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

P__TMSISignatureTV_template::P__TMSISignatureTV_template(const P__TMSISignatureTV& other_value)
{
copy_value(other_value);
}

P__TMSISignatureTV_template::P__TMSISignatureTV_template(const OPTIONAL<P__TMSISignatureTV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const P__TMSISignatureTV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_GMM_SM_Types.P_TMSISignatureTV from an unbound optional field.");
}
}

P__TMSISignatureTV_template::P__TMSISignatureTV_template(P__TMSISignatureTV_template* p_precondition, P__TMSISignatureTV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

P__TMSISignatureTV_template::P__TMSISignatureTV_template(Dynamic_Match_Interface<P__TMSISignatureTV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<P__TMSISignatureTV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

P__TMSISignatureTV_template::P__TMSISignatureTV_template(const P__TMSISignatureTV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

P__TMSISignatureTV_template::~P__TMSISignatureTV_template()
{
clean_up();
}

P__TMSISignatureTV_template& P__TMSISignatureTV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

P__TMSISignatureTV_template& P__TMSISignatureTV_template::operator=(const P__TMSISignatureTV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

P__TMSISignatureTV_template& P__TMSISignatureTV_template::operator=(const OPTIONAL<P__TMSISignatureTV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const P__TMSISignatureTV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_GMM_SM_Types.P_TMSISignatureTV.");
}
return *this;
}

P__TMSISignatureTV_template& P__TMSISignatureTV_template::operator=(const P__TMSISignatureTV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean P__TMSISignatureTV_template::match(const P__TMSISignatureTV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.elementIdentifier().is_bound()) return FALSE;
if(!single_value->field_elementIdentifier.match(other_value.elementIdentifier(), legacy))return FALSE;
if(!other_value.valueField().is_bound()) return FALSE;
if(!single_value->field_valueField.match(other_value.valueField(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.P_TMSISignatureTV.");
}
return FALSE;
}

boolean P__TMSISignatureTV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_elementIdentifier.is_bound()
 || single_value->field_valueField.is_bound();
}

boolean P__TMSISignatureTV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_elementIdentifier.is_value()
 && single_value->field_valueField.is_value();
}

void P__TMSISignatureTV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

P__TMSISignatureTV P__TMSISignatureTV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_GMM_SM_Types.P_TMSISignatureTV.");
P__TMSISignatureTV ret_val;
if (single_value->field_elementIdentifier.is_bound()) {
ret_val.elementIdentifier() = single_value->field_elementIdentifier.valueof();
}
if (single_value->field_valueField.is_bound()) {
ret_val.valueField() = single_value->field_valueField.valueof();
}
return ret_val;
}

void P__TMSISignatureTV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_GMM_SM_Types.P_TMSISignatureTV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new P__TMSISignatureTV_template[list_length];
}

P__TMSISignatureTV_template& P__TMSISignatureTV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_GMM_SM_Types.P_TMSISignatureTV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_GMM_SM_Types.P_TMSISignatureTV.");
return value_list.list_value[list_index];
}

OCTETSTRING_template& P__TMSISignatureTV_template::elementIdentifier()
{
set_specific();
return single_value->field_elementIdentifier;
}

const OCTETSTRING_template& P__TMSISignatureTV_template::elementIdentifier() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field elementIdentifier of a non-specific template of type @MobileL3_GMM_SM_Types.P_TMSISignatureTV.");
return single_value->field_elementIdentifier;
}

OCTETSTRING_template& P__TMSISignatureTV_template::valueField()
{
set_specific();
return single_value->field_valueField;
}

const OCTETSTRING_template& P__TMSISignatureTV_template::valueField() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field valueField of a non-specific template of type @MobileL3_GMM_SM_Types.P_TMSISignatureTV.");
return single_value->field_valueField;
}

int P__TMSISignatureTV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.P_TMSISignatureTV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 2;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.P_TMSISignatureTV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.P_TMSISignatureTV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.P_TMSISignatureTV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.P_TMSISignatureTV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.P_TMSISignatureTV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.P_TMSISignatureTV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.P_TMSISignatureTV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.P_TMSISignatureTV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.P_TMSISignatureTV.");
  }
  return 0;
}

void P__TMSISignatureTV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log();
TTCN_Logger::log_event_str(", valueField := ");
single_value->field_valueField.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void P__TMSISignatureTV_template::log_match(const P__TMSISignatureTV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_elementIdentifier.match(match_value.elementIdentifier(), legacy)){
TTCN_Logger::log_logmatch_info(".elementIdentifier");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_valueField.match(match_value.valueField(), legacy)){
TTCN_Logger::log_logmatch_info(".valueField");
single_value->field_valueField.log_match(match_value.valueField(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::log_event_str(", valueField := ");
single_value->field_valueField.log_match(match_value.valueField(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void P__TMSISignatureTV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (valueField().is_bound()) valueField().set_implicit_omit();
}

void P__TMSISignatureTV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_elementIdentifier.encode_text(text_buf);
single_value->field_valueField.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.P_TMSISignatureTV.");
}
}

void P__TMSISignatureTV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_elementIdentifier.decode_text(text_buf);
single_value->field_valueField.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new P__TMSISignatureTV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_GMM_SM_Types.P_TMSISignatureTV.");
}
}

void P__TMSISignatureTV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    P__TMSISignatureTV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record template of type @MobileL3_GMM_SM_Types.P_TMSISignatureTV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) valueField().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "valueField")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          valueField().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.P_TMSISignatureTV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    P__TMSISignatureTV_template* precondition = new P__TMSISignatureTV_template;
    precondition->set_param(*param.get_elem(0));
    P__TMSISignatureTV_template* implied_template = new P__TMSISignatureTV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = P__TMSISignatureTV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_GMM_SM_Types.P_TMSISignatureTV");
  }
  is_ifpresent = param.get_ifpresent();
}

void P__TMSISignatureTV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_elementIdentifier.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.P_TMSISignatureTV");
single_value->field_valueField.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.P_TMSISignatureTV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_GMM_SM_Types.P_TMSISignatureTV");
}

boolean P__TMSISignatureTV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean P__TMSISignatureTV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

IdentityType2V::IdentityType2V()
{
}

IdentityType2V::IdentityType2V(const BITSTRING& par_valueField,
    const BITSTRING& par_spare)
  :   field_valueField(par_valueField),
  field_spare(par_spare)
{
}

IdentityType2V::IdentityType2V(const IdentityType2V& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_GMM_SM_Types.IdentityType2V.");
if (other_value.valueField().is_bound()) field_valueField = other_value.valueField();
else field_valueField.clean_up();
if (other_value.spare().is_bound()) field_spare = other_value.spare();
else field_spare.clean_up();
}

void IdentityType2V::clean_up()
{
field_valueField.clean_up();
field_spare.clean_up();
}

const TTCN_Typedescriptor_t* IdentityType2V::get_descriptor() const { return &IdentityType2V_descr_; }
IdentityType2V& IdentityType2V::operator=(const IdentityType2V& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_GMM_SM_Types.IdentityType2V.");
  if (other_value.valueField().is_bound()) field_valueField = other_value.valueField();
  else field_valueField.clean_up();
  if (other_value.spare().is_bound()) field_spare = other_value.spare();
  else field_spare.clean_up();
}
return *this;
}

boolean IdentityType2V::operator==(const IdentityType2V& other_value) const
{
return field_valueField==other_value.field_valueField
  && field_spare==other_value.field_spare;
}

boolean IdentityType2V::is_bound() const
{
return (field_valueField.is_bound())
  || (field_spare.is_bound());
}
boolean IdentityType2V::is_value() const
{
return field_valueField.is_value()
  && field_spare.is_value();
}
void IdentityType2V::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ valueField := ");
field_valueField.log();
TTCN_Logger::log_event_str(", spare := ");
field_spare.log();
TTCN_Logger::log_event_str(" }");
}

void IdentityType2V::set_implicit_omit()
{
if (valueField().is_bound()) valueField().set_implicit_omit();
if (spare().is_bound()) spare().set_implicit_omit();
}

void IdentityType2V::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record value of type @MobileL3_GMM_SM_Types.IdentityType2V has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) valueField().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) spare().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "valueField")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          valueField().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "spare")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          spare().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.IdentityType2V: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_GMM_SM_Types.IdentityType2V");
  }
}

void IdentityType2V::encode_text(Text_Buf& text_buf) const
{
field_valueField.encode_text(text_buf);
field_spare.encode_text(text_buf);
}

void IdentityType2V::decode_text(Text_Buf& text_buf)
{
field_valueField.decode_text(text_buf);
field_spare.decode_text(text_buf);
}

void IdentityType2V::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void IdentityType2V::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int IdentityType2V::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::BIT3_descr_.raw->forceomit);
  decoded_field_length = field_valueField.RAW_decode(General__Types::BIT3_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::BIT1_descr_.raw->forceomit);
  decoded_field_length = field_spare.RAW_decode(General__Types::BIT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int IdentityType2V::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 2;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(2);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::BIT3_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::BIT1_descr_.raw);
  encoded_length += field_valueField.RAW_encode(General__Types::BIT3_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_spare.RAW_encode(General__Types::BIT1_descr_, *myleaf.body.node.nodes[1]);
  return myleaf.length = encoded_length;
}

struct IdentityType2V_template::single_value_struct {
BITSTRING_template field_valueField;
BITSTRING_template field_spare;
};

void IdentityType2V_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_valueField = ANY_VALUE;
single_value->field_spare = ANY_VALUE;
}
}
}

void IdentityType2V_template::copy_value(const IdentityType2V& other_value)
{
single_value = new single_value_struct;
if (other_value.valueField().is_bound()) {
  single_value->field_valueField = other_value.valueField();
} else {
  single_value->field_valueField.clean_up();
}
if (other_value.spare().is_bound()) {
  single_value->field_spare = other_value.spare();
} else {
  single_value->field_spare.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void IdentityType2V_template::copy_template(const IdentityType2V_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.valueField().get_selection()) {
single_value->field_valueField = other_value.valueField();
} else {
single_value->field_valueField.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.spare().get_selection()) {
single_value->field_spare = other_value.spare();
} else {
single_value->field_spare.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new IdentityType2V_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new IdentityType2V_template(*other_value.implication_.precondition);
implication_.implied_template = new IdentityType2V_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.IdentityType2V.");
break;
}
set_selection(other_value);
}

IdentityType2V_template::IdentityType2V_template()
{
}

IdentityType2V_template::IdentityType2V_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

IdentityType2V_template::IdentityType2V_template(const IdentityType2V& other_value)
{
copy_value(other_value);
}

IdentityType2V_template::IdentityType2V_template(const OPTIONAL<IdentityType2V>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const IdentityType2V&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_GMM_SM_Types.IdentityType2V from an unbound optional field.");
}
}

IdentityType2V_template::IdentityType2V_template(IdentityType2V_template* p_precondition, IdentityType2V_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

IdentityType2V_template::IdentityType2V_template(Dynamic_Match_Interface<IdentityType2V>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<IdentityType2V>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

IdentityType2V_template::IdentityType2V_template(const IdentityType2V_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

IdentityType2V_template::~IdentityType2V_template()
{
clean_up();
}

IdentityType2V_template& IdentityType2V_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

IdentityType2V_template& IdentityType2V_template::operator=(const IdentityType2V& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

IdentityType2V_template& IdentityType2V_template::operator=(const OPTIONAL<IdentityType2V>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const IdentityType2V&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_GMM_SM_Types.IdentityType2V.");
}
return *this;
}

IdentityType2V_template& IdentityType2V_template::operator=(const IdentityType2V_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean IdentityType2V_template::match(const IdentityType2V& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.valueField().is_bound()) return FALSE;
if(!single_value->field_valueField.match(other_value.valueField(), legacy))return FALSE;
if(!other_value.spare().is_bound()) return FALSE;
if(!single_value->field_spare.match(other_value.spare(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.IdentityType2V.");
}
return FALSE;
}

boolean IdentityType2V_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_valueField.is_bound()
 || single_value->field_spare.is_bound();
}

boolean IdentityType2V_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_valueField.is_value()
 && single_value->field_spare.is_value();
}

void IdentityType2V_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

IdentityType2V IdentityType2V_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_GMM_SM_Types.IdentityType2V.");
IdentityType2V ret_val;
if (single_value->field_valueField.is_bound()) {
ret_val.valueField() = single_value->field_valueField.valueof();
}
if (single_value->field_spare.is_bound()) {
ret_val.spare() = single_value->field_spare.valueof();
}
return ret_val;
}

void IdentityType2V_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_GMM_SM_Types.IdentityType2V.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new IdentityType2V_template[list_length];
}

IdentityType2V_template& IdentityType2V_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_GMM_SM_Types.IdentityType2V.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_GMM_SM_Types.IdentityType2V.");
return value_list.list_value[list_index];
}

BITSTRING_template& IdentityType2V_template::valueField()
{
set_specific();
return single_value->field_valueField;
}

const BITSTRING_template& IdentityType2V_template::valueField() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field valueField of a non-specific template of type @MobileL3_GMM_SM_Types.IdentityType2V.");
return single_value->field_valueField;
}

BITSTRING_template& IdentityType2V_template::spare()
{
set_specific();
return single_value->field_spare;
}

const BITSTRING_template& IdentityType2V_template::spare() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field spare of a non-specific template of type @MobileL3_GMM_SM_Types.IdentityType2V.");
return single_value->field_spare;
}

int IdentityType2V_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IdentityType2V which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 2;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IdentityType2V containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IdentityType2V containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IdentityType2V containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IdentityType2V containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IdentityType2V containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IdentityType2V containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IdentityType2V containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IdentityType2V containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.IdentityType2V.");
  }
  return 0;
}

void IdentityType2V_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ valueField := ");
single_value->field_valueField.log();
TTCN_Logger::log_event_str(", spare := ");
single_value->field_spare.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void IdentityType2V_template::log_match(const IdentityType2V& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_valueField.match(match_value.valueField(), legacy)){
TTCN_Logger::log_logmatch_info(".valueField");
single_value->field_valueField.log_match(match_value.valueField(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_spare.match(match_value.spare(), legacy)){
TTCN_Logger::log_logmatch_info(".spare");
single_value->field_spare.log_match(match_value.spare(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ valueField := ");
single_value->field_valueField.log_match(match_value.valueField(), legacy);
TTCN_Logger::log_event_str(", spare := ");
single_value->field_spare.log_match(match_value.spare(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void IdentityType2V_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (valueField().is_bound()) valueField().set_implicit_omit();
if (spare().is_bound()) spare().set_implicit_omit();
}

void IdentityType2V_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_valueField.encode_text(text_buf);
single_value->field_spare.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.IdentityType2V.");
}
}

void IdentityType2V_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_valueField.decode_text(text_buf);
single_value->field_spare.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new IdentityType2V_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_GMM_SM_Types.IdentityType2V.");
}
}

void IdentityType2V_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    IdentityType2V_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record template of type @MobileL3_GMM_SM_Types.IdentityType2V has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) valueField().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) spare().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "valueField")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          valueField().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "spare")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          spare().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.IdentityType2V: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    IdentityType2V_template* precondition = new IdentityType2V_template;
    precondition->set_param(*param.get_elem(0));
    IdentityType2V_template* implied_template = new IdentityType2V_template;
    implied_template->set_param(*param.get_elem(1));
    *this = IdentityType2V_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_GMM_SM_Types.IdentityType2V");
  }
  is_ifpresent = param.get_ifpresent();
}

void IdentityType2V_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_valueField.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.IdentityType2V");
single_value->field_spare.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.IdentityType2V");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_GMM_SM_Types.IdentityType2V");
}

boolean IdentityType2V_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean IdentityType2V_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

IdentityType2TV::IdentityType2TV()
{
}

IdentityType2TV::IdentityType2TV(const IdentityType2V& par_valueField,
    const BITSTRING& par_identityType2IEI)
  :   field_valueField(par_valueField),
  field_identityType2IEI(par_identityType2IEI)
{
}

IdentityType2TV::IdentityType2TV(const IdentityType2TV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_GMM_SM_Types.IdentityType2TV.");
if (other_value.valueField().is_bound()) field_valueField = other_value.valueField();
else field_valueField.clean_up();
if (other_value.identityType2IEI().is_bound()) field_identityType2IEI = other_value.identityType2IEI();
else field_identityType2IEI.clean_up();
}

void IdentityType2TV::clean_up()
{
field_valueField.clean_up();
field_identityType2IEI.clean_up();
}

const TTCN_Typedescriptor_t* IdentityType2TV::get_descriptor() const { return &IdentityType2TV_descr_; }
IdentityType2TV& IdentityType2TV::operator=(const IdentityType2TV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_GMM_SM_Types.IdentityType2TV.");
  if (other_value.valueField().is_bound()) field_valueField = other_value.valueField();
  else field_valueField.clean_up();
  if (other_value.identityType2IEI().is_bound()) field_identityType2IEI = other_value.identityType2IEI();
  else field_identityType2IEI.clean_up();
}
return *this;
}

boolean IdentityType2TV::operator==(const IdentityType2TV& other_value) const
{
return field_valueField==other_value.field_valueField
  && field_identityType2IEI==other_value.field_identityType2IEI;
}

boolean IdentityType2TV::is_bound() const
{
return (field_valueField.is_bound())
  || (field_identityType2IEI.is_bound());
}
boolean IdentityType2TV::is_value() const
{
return field_valueField.is_value()
  && field_identityType2IEI.is_value();
}
void IdentityType2TV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ valueField := ");
field_valueField.log();
TTCN_Logger::log_event_str(", identityType2IEI := ");
field_identityType2IEI.log();
TTCN_Logger::log_event_str(" }");
}

void IdentityType2TV::set_implicit_omit()
{
if (valueField().is_bound()) valueField().set_implicit_omit();
if (identityType2IEI().is_bound()) identityType2IEI().set_implicit_omit();
}

void IdentityType2TV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record value of type @MobileL3_GMM_SM_Types.IdentityType2TV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) valueField().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) identityType2IEI().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "valueField")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          valueField().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "identityType2IEI")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          identityType2IEI().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.IdentityType2TV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_GMM_SM_Types.IdentityType2TV");
  }
}

void IdentityType2TV::encode_text(Text_Buf& text_buf) const
{
field_valueField.encode_text(text_buf);
field_identityType2IEI.encode_text(text_buf);
}

void IdentityType2TV::decode_text(Text_Buf& text_buf)
{
field_valueField.decode_text(text_buf);
field_identityType2IEI.decode_text(text_buf);
}

void IdentityType2TV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void IdentityType2TV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int IdentityType2TV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, IdentityType2V_descr_.raw->forceomit);
  decoded_field_length = field_valueField.RAW_decode(IdentityType2V_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::BIT4_descr_.raw->forceomit);
  decoded_field_length = field_identityType2IEI.RAW_decode(General__Types::BIT4_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int IdentityType2TV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 2;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(2);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, IdentityType2V_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::BIT4_descr_.raw);
  encoded_length += field_valueField.RAW_encode(IdentityType2V_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_identityType2IEI.RAW_encode(General__Types::BIT4_descr_, *myleaf.body.node.nodes[1]);
  return myleaf.length = encoded_length;
}

struct IdentityType2TV_template::single_value_struct {
IdentityType2V_template field_valueField;
BITSTRING_template field_identityType2IEI;
};

void IdentityType2TV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_valueField = ANY_VALUE;
single_value->field_identityType2IEI = ANY_VALUE;
}
}
}

void IdentityType2TV_template::copy_value(const IdentityType2TV& other_value)
{
single_value = new single_value_struct;
if (other_value.valueField().is_bound()) {
  single_value->field_valueField = other_value.valueField();
} else {
  single_value->field_valueField.clean_up();
}
if (other_value.identityType2IEI().is_bound()) {
  single_value->field_identityType2IEI = other_value.identityType2IEI();
} else {
  single_value->field_identityType2IEI.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void IdentityType2TV_template::copy_template(const IdentityType2TV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.valueField().get_selection()) {
single_value->field_valueField = other_value.valueField();
} else {
single_value->field_valueField.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.identityType2IEI().get_selection()) {
single_value->field_identityType2IEI = other_value.identityType2IEI();
} else {
single_value->field_identityType2IEI.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new IdentityType2TV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new IdentityType2TV_template(*other_value.implication_.precondition);
implication_.implied_template = new IdentityType2TV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.IdentityType2TV.");
break;
}
set_selection(other_value);
}

IdentityType2TV_template::IdentityType2TV_template()
{
}

IdentityType2TV_template::IdentityType2TV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

IdentityType2TV_template::IdentityType2TV_template(const IdentityType2TV& other_value)
{
copy_value(other_value);
}

IdentityType2TV_template::IdentityType2TV_template(const OPTIONAL<IdentityType2TV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const IdentityType2TV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_GMM_SM_Types.IdentityType2TV from an unbound optional field.");
}
}

IdentityType2TV_template::IdentityType2TV_template(IdentityType2TV_template* p_precondition, IdentityType2TV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

IdentityType2TV_template::IdentityType2TV_template(Dynamic_Match_Interface<IdentityType2TV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<IdentityType2TV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

IdentityType2TV_template::IdentityType2TV_template(const IdentityType2TV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

IdentityType2TV_template::~IdentityType2TV_template()
{
clean_up();
}

IdentityType2TV_template& IdentityType2TV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

IdentityType2TV_template& IdentityType2TV_template::operator=(const IdentityType2TV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

IdentityType2TV_template& IdentityType2TV_template::operator=(const OPTIONAL<IdentityType2TV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const IdentityType2TV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_GMM_SM_Types.IdentityType2TV.");
}
return *this;
}

IdentityType2TV_template& IdentityType2TV_template::operator=(const IdentityType2TV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean IdentityType2TV_template::match(const IdentityType2TV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.valueField().is_bound()) return FALSE;
if(!single_value->field_valueField.match(other_value.valueField(), legacy))return FALSE;
if(!other_value.identityType2IEI().is_bound()) return FALSE;
if(!single_value->field_identityType2IEI.match(other_value.identityType2IEI(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.IdentityType2TV.");
}
return FALSE;
}

boolean IdentityType2TV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_valueField.is_bound()
 || single_value->field_identityType2IEI.is_bound();
}

boolean IdentityType2TV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_valueField.is_value()
 && single_value->field_identityType2IEI.is_value();
}

void IdentityType2TV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

IdentityType2TV IdentityType2TV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_GMM_SM_Types.IdentityType2TV.");
IdentityType2TV ret_val;
if (single_value->field_valueField.is_bound()) {
ret_val.valueField() = single_value->field_valueField.valueof();
}
if (single_value->field_identityType2IEI.is_bound()) {
ret_val.identityType2IEI() = single_value->field_identityType2IEI.valueof();
}
return ret_val;
}

void IdentityType2TV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_GMM_SM_Types.IdentityType2TV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new IdentityType2TV_template[list_length];
}

IdentityType2TV_template& IdentityType2TV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_GMM_SM_Types.IdentityType2TV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_GMM_SM_Types.IdentityType2TV.");
return value_list.list_value[list_index];
}

IdentityType2V_template& IdentityType2TV_template::valueField()
{
set_specific();
return single_value->field_valueField;
}

const IdentityType2V_template& IdentityType2TV_template::valueField() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field valueField of a non-specific template of type @MobileL3_GMM_SM_Types.IdentityType2TV.");
return single_value->field_valueField;
}

BITSTRING_template& IdentityType2TV_template::identityType2IEI()
{
set_specific();
return single_value->field_identityType2IEI;
}

const BITSTRING_template& IdentityType2TV_template::identityType2IEI() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field identityType2IEI of a non-specific template of type @MobileL3_GMM_SM_Types.IdentityType2TV.");
return single_value->field_identityType2IEI;
}

int IdentityType2TV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IdentityType2TV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 2;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IdentityType2TV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IdentityType2TV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IdentityType2TV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IdentityType2TV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IdentityType2TV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IdentityType2TV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IdentityType2TV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IdentityType2TV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.IdentityType2TV.");
  }
  return 0;
}

void IdentityType2TV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ valueField := ");
single_value->field_valueField.log();
TTCN_Logger::log_event_str(", identityType2IEI := ");
single_value->field_identityType2IEI.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void IdentityType2TV_template::log_match(const IdentityType2TV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_valueField.match(match_value.valueField(), legacy)){
TTCN_Logger::log_logmatch_info(".valueField");
single_value->field_valueField.log_match(match_value.valueField(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_identityType2IEI.match(match_value.identityType2IEI(), legacy)){
TTCN_Logger::log_logmatch_info(".identityType2IEI");
single_value->field_identityType2IEI.log_match(match_value.identityType2IEI(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ valueField := ");
single_value->field_valueField.log_match(match_value.valueField(), legacy);
TTCN_Logger::log_event_str(", identityType2IEI := ");
single_value->field_identityType2IEI.log_match(match_value.identityType2IEI(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void IdentityType2TV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (valueField().is_bound()) valueField().set_implicit_omit();
if (identityType2IEI().is_bound()) identityType2IEI().set_implicit_omit();
}

void IdentityType2TV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_valueField.encode_text(text_buf);
single_value->field_identityType2IEI.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.IdentityType2TV.");
}
}

void IdentityType2TV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_valueField.decode_text(text_buf);
single_value->field_identityType2IEI.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new IdentityType2TV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_GMM_SM_Types.IdentityType2TV.");
}
}

void IdentityType2TV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    IdentityType2TV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record template of type @MobileL3_GMM_SM_Types.IdentityType2TV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) valueField().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) identityType2IEI().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "valueField")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          valueField().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "identityType2IEI")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          identityType2IEI().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.IdentityType2TV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    IdentityType2TV_template* precondition = new IdentityType2TV_template;
    precondition->set_param(*param.get_elem(0));
    IdentityType2TV_template* implied_template = new IdentityType2TV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = IdentityType2TV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_GMM_SM_Types.IdentityType2TV");
  }
  is_ifpresent = param.get_ifpresent();
}

void IdentityType2TV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_valueField.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.IdentityType2TV");
single_value->field_identityType2IEI.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.IdentityType2TV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_GMM_SM_Types.IdentityType2TV");
}

boolean IdentityType2TV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean IdentityType2TV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

IMEISVRequestV::IMEISVRequestV()
{
}

IMEISVRequestV::IMEISVRequestV(const BITSTRING& par_valueField,
    const BITSTRING& par_spare)
  :   field_valueField(par_valueField),
  field_spare(par_spare)
{
}

IMEISVRequestV::IMEISVRequestV(const IMEISVRequestV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_GMM_SM_Types.IMEISVRequestV.");
if (other_value.valueField().is_bound()) field_valueField = other_value.valueField();
else field_valueField.clean_up();
if (other_value.spare().is_bound()) field_spare = other_value.spare();
else field_spare.clean_up();
}

void IMEISVRequestV::clean_up()
{
field_valueField.clean_up();
field_spare.clean_up();
}

const TTCN_Typedescriptor_t* IMEISVRequestV::get_descriptor() const { return &IMEISVRequestV_descr_; }
IMEISVRequestV& IMEISVRequestV::operator=(const IMEISVRequestV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_GMM_SM_Types.IMEISVRequestV.");
  if (other_value.valueField().is_bound()) field_valueField = other_value.valueField();
  else field_valueField.clean_up();
  if (other_value.spare().is_bound()) field_spare = other_value.spare();
  else field_spare.clean_up();
}
return *this;
}

boolean IMEISVRequestV::operator==(const IMEISVRequestV& other_value) const
{
return field_valueField==other_value.field_valueField
  && field_spare==other_value.field_spare;
}

boolean IMEISVRequestV::is_bound() const
{
return (field_valueField.is_bound())
  || (field_spare.is_bound());
}
boolean IMEISVRequestV::is_value() const
{
return field_valueField.is_value()
  && field_spare.is_value();
}
void IMEISVRequestV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ valueField := ");
field_valueField.log();
TTCN_Logger::log_event_str(", spare := ");
field_spare.log();
TTCN_Logger::log_event_str(" }");
}

void IMEISVRequestV::set_implicit_omit()
{
if (valueField().is_bound()) valueField().set_implicit_omit();
if (spare().is_bound()) spare().set_implicit_omit();
}

void IMEISVRequestV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record value of type @MobileL3_GMM_SM_Types.IMEISVRequestV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) valueField().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) spare().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "valueField")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          valueField().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "spare")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          spare().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.IMEISVRequestV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_GMM_SM_Types.IMEISVRequestV");
  }
}

void IMEISVRequestV::encode_text(Text_Buf& text_buf) const
{
field_valueField.encode_text(text_buf);
field_spare.encode_text(text_buf);
}

void IMEISVRequestV::decode_text(Text_Buf& text_buf)
{
field_valueField.decode_text(text_buf);
field_spare.decode_text(text_buf);
}

void IMEISVRequestV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void IMEISVRequestV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int IMEISVRequestV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::BIT3_descr_.raw->forceomit);
  decoded_field_length = field_valueField.RAW_decode(General__Types::BIT3_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::BIT1_descr_.raw->forceomit);
  decoded_field_length = field_spare.RAW_decode(General__Types::BIT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int IMEISVRequestV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 2;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(2);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::BIT3_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::BIT1_descr_.raw);
  encoded_length += field_valueField.RAW_encode(General__Types::BIT3_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_spare.RAW_encode(General__Types::BIT1_descr_, *myleaf.body.node.nodes[1]);
  return myleaf.length = encoded_length;
}

struct IMEISVRequestV_template::single_value_struct {
BITSTRING_template field_valueField;
BITSTRING_template field_spare;
};

void IMEISVRequestV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_valueField = ANY_VALUE;
single_value->field_spare = ANY_VALUE;
}
}
}

void IMEISVRequestV_template::copy_value(const IMEISVRequestV& other_value)
{
single_value = new single_value_struct;
if (other_value.valueField().is_bound()) {
  single_value->field_valueField = other_value.valueField();
} else {
  single_value->field_valueField.clean_up();
}
if (other_value.spare().is_bound()) {
  single_value->field_spare = other_value.spare();
} else {
  single_value->field_spare.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void IMEISVRequestV_template::copy_template(const IMEISVRequestV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.valueField().get_selection()) {
single_value->field_valueField = other_value.valueField();
} else {
single_value->field_valueField.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.spare().get_selection()) {
single_value->field_spare = other_value.spare();
} else {
single_value->field_spare.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new IMEISVRequestV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new IMEISVRequestV_template(*other_value.implication_.precondition);
implication_.implied_template = new IMEISVRequestV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.IMEISVRequestV.");
break;
}
set_selection(other_value);
}

IMEISVRequestV_template::IMEISVRequestV_template()
{
}

IMEISVRequestV_template::IMEISVRequestV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

IMEISVRequestV_template::IMEISVRequestV_template(const IMEISVRequestV& other_value)
{
copy_value(other_value);
}

IMEISVRequestV_template::IMEISVRequestV_template(const OPTIONAL<IMEISVRequestV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const IMEISVRequestV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_GMM_SM_Types.IMEISVRequestV from an unbound optional field.");
}
}

IMEISVRequestV_template::IMEISVRequestV_template(IMEISVRequestV_template* p_precondition, IMEISVRequestV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

IMEISVRequestV_template::IMEISVRequestV_template(Dynamic_Match_Interface<IMEISVRequestV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<IMEISVRequestV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

IMEISVRequestV_template::IMEISVRequestV_template(const IMEISVRequestV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

IMEISVRequestV_template::~IMEISVRequestV_template()
{
clean_up();
}

IMEISVRequestV_template& IMEISVRequestV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

IMEISVRequestV_template& IMEISVRequestV_template::operator=(const IMEISVRequestV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

IMEISVRequestV_template& IMEISVRequestV_template::operator=(const OPTIONAL<IMEISVRequestV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const IMEISVRequestV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_GMM_SM_Types.IMEISVRequestV.");
}
return *this;
}

IMEISVRequestV_template& IMEISVRequestV_template::operator=(const IMEISVRequestV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean IMEISVRequestV_template::match(const IMEISVRequestV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.valueField().is_bound()) return FALSE;
if(!single_value->field_valueField.match(other_value.valueField(), legacy))return FALSE;
if(!other_value.spare().is_bound()) return FALSE;
if(!single_value->field_spare.match(other_value.spare(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.IMEISVRequestV.");
}
return FALSE;
}

boolean IMEISVRequestV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_valueField.is_bound()
 || single_value->field_spare.is_bound();
}

boolean IMEISVRequestV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_valueField.is_value()
 && single_value->field_spare.is_value();
}

void IMEISVRequestV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

IMEISVRequestV IMEISVRequestV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_GMM_SM_Types.IMEISVRequestV.");
IMEISVRequestV ret_val;
if (single_value->field_valueField.is_bound()) {
ret_val.valueField() = single_value->field_valueField.valueof();
}
if (single_value->field_spare.is_bound()) {
ret_val.spare() = single_value->field_spare.valueof();
}
return ret_val;
}

void IMEISVRequestV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_GMM_SM_Types.IMEISVRequestV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new IMEISVRequestV_template[list_length];
}

IMEISVRequestV_template& IMEISVRequestV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_GMM_SM_Types.IMEISVRequestV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_GMM_SM_Types.IMEISVRequestV.");
return value_list.list_value[list_index];
}

BITSTRING_template& IMEISVRequestV_template::valueField()
{
set_specific();
return single_value->field_valueField;
}

const BITSTRING_template& IMEISVRequestV_template::valueField() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field valueField of a non-specific template of type @MobileL3_GMM_SM_Types.IMEISVRequestV.");
return single_value->field_valueField;
}

BITSTRING_template& IMEISVRequestV_template::spare()
{
set_specific();
return single_value->field_spare;
}

const BITSTRING_template& IMEISVRequestV_template::spare() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field spare of a non-specific template of type @MobileL3_GMM_SM_Types.IMEISVRequestV.");
return single_value->field_spare;
}

int IMEISVRequestV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IMEISVRequestV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 2;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IMEISVRequestV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IMEISVRequestV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IMEISVRequestV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IMEISVRequestV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IMEISVRequestV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IMEISVRequestV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IMEISVRequestV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IMEISVRequestV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.IMEISVRequestV.");
  }
  return 0;
}

void IMEISVRequestV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ valueField := ");
single_value->field_valueField.log();
TTCN_Logger::log_event_str(", spare := ");
single_value->field_spare.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void IMEISVRequestV_template::log_match(const IMEISVRequestV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_valueField.match(match_value.valueField(), legacy)){
TTCN_Logger::log_logmatch_info(".valueField");
single_value->field_valueField.log_match(match_value.valueField(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_spare.match(match_value.spare(), legacy)){
TTCN_Logger::log_logmatch_info(".spare");
single_value->field_spare.log_match(match_value.spare(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ valueField := ");
single_value->field_valueField.log_match(match_value.valueField(), legacy);
TTCN_Logger::log_event_str(", spare := ");
single_value->field_spare.log_match(match_value.spare(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void IMEISVRequestV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (valueField().is_bound()) valueField().set_implicit_omit();
if (spare().is_bound()) spare().set_implicit_omit();
}

void IMEISVRequestV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_valueField.encode_text(text_buf);
single_value->field_spare.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.IMEISVRequestV.");
}
}

void IMEISVRequestV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_valueField.decode_text(text_buf);
single_value->field_spare.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new IMEISVRequestV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_GMM_SM_Types.IMEISVRequestV.");
}
}

void IMEISVRequestV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    IMEISVRequestV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record template of type @MobileL3_GMM_SM_Types.IMEISVRequestV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) valueField().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) spare().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "valueField")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          valueField().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "spare")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          spare().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.IMEISVRequestV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    IMEISVRequestV_template* precondition = new IMEISVRequestV_template;
    precondition->set_param(*param.get_elem(0));
    IMEISVRequestV_template* implied_template = new IMEISVRequestV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = IMEISVRequestV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_GMM_SM_Types.IMEISVRequestV");
  }
  is_ifpresent = param.get_ifpresent();
}

void IMEISVRequestV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_valueField.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.IMEISVRequestV");
single_value->field_spare.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.IMEISVRequestV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_GMM_SM_Types.IMEISVRequestV");
}

boolean IMEISVRequestV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean IMEISVRequestV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

IMEISVRequestTV::IMEISVRequestTV()
{
}

IMEISVRequestTV::IMEISVRequestTV(const IMEISVRequestV& par_imeisvRequest,
    const BITSTRING& par_imeisvRequestIEI)
  :   field_imeisvRequest(par_imeisvRequest),
  field_imeisvRequestIEI(par_imeisvRequestIEI)
{
}

IMEISVRequestTV::IMEISVRequestTV(const IMEISVRequestTV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_GMM_SM_Types.IMEISVRequestTV.");
if (other_value.imeisvRequest().is_bound()) field_imeisvRequest = other_value.imeisvRequest();
else field_imeisvRequest.clean_up();
if (other_value.imeisvRequestIEI().is_bound()) field_imeisvRequestIEI = other_value.imeisvRequestIEI();
else field_imeisvRequestIEI.clean_up();
}

void IMEISVRequestTV::clean_up()
{
field_imeisvRequest.clean_up();
field_imeisvRequestIEI.clean_up();
}

const TTCN_Typedescriptor_t* IMEISVRequestTV::get_descriptor() const { return &IMEISVRequestTV_descr_; }
IMEISVRequestTV& IMEISVRequestTV::operator=(const IMEISVRequestTV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_GMM_SM_Types.IMEISVRequestTV.");
  if (other_value.imeisvRequest().is_bound()) field_imeisvRequest = other_value.imeisvRequest();
  else field_imeisvRequest.clean_up();
  if (other_value.imeisvRequestIEI().is_bound()) field_imeisvRequestIEI = other_value.imeisvRequestIEI();
  else field_imeisvRequestIEI.clean_up();
}
return *this;
}

boolean IMEISVRequestTV::operator==(const IMEISVRequestTV& other_value) const
{
return field_imeisvRequest==other_value.field_imeisvRequest
  && field_imeisvRequestIEI==other_value.field_imeisvRequestIEI;
}

boolean IMEISVRequestTV::is_bound() const
{
return (field_imeisvRequest.is_bound())
  || (field_imeisvRequestIEI.is_bound());
}
boolean IMEISVRequestTV::is_value() const
{
return field_imeisvRequest.is_value()
  && field_imeisvRequestIEI.is_value();
}
void IMEISVRequestTV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ imeisvRequest := ");
field_imeisvRequest.log();
TTCN_Logger::log_event_str(", imeisvRequestIEI := ");
field_imeisvRequestIEI.log();
TTCN_Logger::log_event_str(" }");
}

void IMEISVRequestTV::set_implicit_omit()
{
if (imeisvRequest().is_bound()) imeisvRequest().set_implicit_omit();
if (imeisvRequestIEI().is_bound()) imeisvRequestIEI().set_implicit_omit();
}

void IMEISVRequestTV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record value of type @MobileL3_GMM_SM_Types.IMEISVRequestTV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) imeisvRequest().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) imeisvRequestIEI().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "imeisvRequest")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          imeisvRequest().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "imeisvRequestIEI")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          imeisvRequestIEI().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.IMEISVRequestTV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_GMM_SM_Types.IMEISVRequestTV");
  }
}

void IMEISVRequestTV::encode_text(Text_Buf& text_buf) const
{
field_imeisvRequest.encode_text(text_buf);
field_imeisvRequestIEI.encode_text(text_buf);
}

void IMEISVRequestTV::decode_text(Text_Buf& text_buf)
{
field_imeisvRequest.decode_text(text_buf);
field_imeisvRequestIEI.decode_text(text_buf);
}

void IMEISVRequestTV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void IMEISVRequestTV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int IMEISVRequestTV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, IMEISVRequestV_descr_.raw->forceomit);
  decoded_field_length = field_imeisvRequest.RAW_decode(IMEISVRequestV_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::BIT4_descr_.raw->forceomit);
  decoded_field_length = field_imeisvRequestIEI.RAW_decode(General__Types::BIT4_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int IMEISVRequestTV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 2;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(2);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, IMEISVRequestV_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::BIT4_descr_.raw);
  encoded_length += field_imeisvRequest.RAW_encode(IMEISVRequestV_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_imeisvRequestIEI.RAW_encode(General__Types::BIT4_descr_, *myleaf.body.node.nodes[1]);
  return myleaf.length = encoded_length;
}

struct IMEISVRequestTV_template::single_value_struct {
IMEISVRequestV_template field_imeisvRequest;
BITSTRING_template field_imeisvRequestIEI;
};

void IMEISVRequestTV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_imeisvRequest = ANY_VALUE;
single_value->field_imeisvRequestIEI = ANY_VALUE;
}
}
}

void IMEISVRequestTV_template::copy_value(const IMEISVRequestTV& other_value)
{
single_value = new single_value_struct;
if (other_value.imeisvRequest().is_bound()) {
  single_value->field_imeisvRequest = other_value.imeisvRequest();
} else {
  single_value->field_imeisvRequest.clean_up();
}
if (other_value.imeisvRequestIEI().is_bound()) {
  single_value->field_imeisvRequestIEI = other_value.imeisvRequestIEI();
} else {
  single_value->field_imeisvRequestIEI.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void IMEISVRequestTV_template::copy_template(const IMEISVRequestTV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.imeisvRequest().get_selection()) {
single_value->field_imeisvRequest = other_value.imeisvRequest();
} else {
single_value->field_imeisvRequest.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.imeisvRequestIEI().get_selection()) {
single_value->field_imeisvRequestIEI = other_value.imeisvRequestIEI();
} else {
single_value->field_imeisvRequestIEI.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new IMEISVRequestTV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new IMEISVRequestTV_template(*other_value.implication_.precondition);
implication_.implied_template = new IMEISVRequestTV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.IMEISVRequestTV.");
break;
}
set_selection(other_value);
}

IMEISVRequestTV_template::IMEISVRequestTV_template()
{
}

IMEISVRequestTV_template::IMEISVRequestTV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

IMEISVRequestTV_template::IMEISVRequestTV_template(const IMEISVRequestTV& other_value)
{
copy_value(other_value);
}

IMEISVRequestTV_template::IMEISVRequestTV_template(const OPTIONAL<IMEISVRequestTV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const IMEISVRequestTV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_GMM_SM_Types.IMEISVRequestTV from an unbound optional field.");
}
}

IMEISVRequestTV_template::IMEISVRequestTV_template(IMEISVRequestTV_template* p_precondition, IMEISVRequestTV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

IMEISVRequestTV_template::IMEISVRequestTV_template(Dynamic_Match_Interface<IMEISVRequestTV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<IMEISVRequestTV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

IMEISVRequestTV_template::IMEISVRequestTV_template(const IMEISVRequestTV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

IMEISVRequestTV_template::~IMEISVRequestTV_template()
{
clean_up();
}

IMEISVRequestTV_template& IMEISVRequestTV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

IMEISVRequestTV_template& IMEISVRequestTV_template::operator=(const IMEISVRequestTV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

IMEISVRequestTV_template& IMEISVRequestTV_template::operator=(const OPTIONAL<IMEISVRequestTV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const IMEISVRequestTV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_GMM_SM_Types.IMEISVRequestTV.");
}
return *this;
}

IMEISVRequestTV_template& IMEISVRequestTV_template::operator=(const IMEISVRequestTV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean IMEISVRequestTV_template::match(const IMEISVRequestTV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.imeisvRequest().is_bound()) return FALSE;
if(!single_value->field_imeisvRequest.match(other_value.imeisvRequest(), legacy))return FALSE;
if(!other_value.imeisvRequestIEI().is_bound()) return FALSE;
if(!single_value->field_imeisvRequestIEI.match(other_value.imeisvRequestIEI(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.IMEISVRequestTV.");
}
return FALSE;
}

boolean IMEISVRequestTV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_imeisvRequest.is_bound()
 || single_value->field_imeisvRequestIEI.is_bound();
}

boolean IMEISVRequestTV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_imeisvRequest.is_value()
 && single_value->field_imeisvRequestIEI.is_value();
}

void IMEISVRequestTV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

IMEISVRequestTV IMEISVRequestTV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_GMM_SM_Types.IMEISVRequestTV.");
IMEISVRequestTV ret_val;
if (single_value->field_imeisvRequest.is_bound()) {
ret_val.imeisvRequest() = single_value->field_imeisvRequest.valueof();
}
if (single_value->field_imeisvRequestIEI.is_bound()) {
ret_val.imeisvRequestIEI() = single_value->field_imeisvRequestIEI.valueof();
}
return ret_val;
}

void IMEISVRequestTV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_GMM_SM_Types.IMEISVRequestTV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new IMEISVRequestTV_template[list_length];
}

IMEISVRequestTV_template& IMEISVRequestTV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_GMM_SM_Types.IMEISVRequestTV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_GMM_SM_Types.IMEISVRequestTV.");
return value_list.list_value[list_index];
}

IMEISVRequestV_template& IMEISVRequestTV_template::imeisvRequest()
{
set_specific();
return single_value->field_imeisvRequest;
}

const IMEISVRequestV_template& IMEISVRequestTV_template::imeisvRequest() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field imeisvRequest of a non-specific template of type @MobileL3_GMM_SM_Types.IMEISVRequestTV.");
return single_value->field_imeisvRequest;
}

BITSTRING_template& IMEISVRequestTV_template::imeisvRequestIEI()
{
set_specific();
return single_value->field_imeisvRequestIEI;
}

const BITSTRING_template& IMEISVRequestTV_template::imeisvRequestIEI() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field imeisvRequestIEI of a non-specific template of type @MobileL3_GMM_SM_Types.IMEISVRequestTV.");
return single_value->field_imeisvRequestIEI;
}

int IMEISVRequestTV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IMEISVRequestTV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 2;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IMEISVRequestTV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IMEISVRequestTV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IMEISVRequestTV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IMEISVRequestTV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IMEISVRequestTV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IMEISVRequestTV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IMEISVRequestTV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.IMEISVRequestTV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.IMEISVRequestTV.");
  }
  return 0;
}

void IMEISVRequestTV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ imeisvRequest := ");
single_value->field_imeisvRequest.log();
TTCN_Logger::log_event_str(", imeisvRequestIEI := ");
single_value->field_imeisvRequestIEI.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void IMEISVRequestTV_template::log_match(const IMEISVRequestTV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_imeisvRequest.match(match_value.imeisvRequest(), legacy)){
TTCN_Logger::log_logmatch_info(".imeisvRequest");
single_value->field_imeisvRequest.log_match(match_value.imeisvRequest(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_imeisvRequestIEI.match(match_value.imeisvRequestIEI(), legacy)){
TTCN_Logger::log_logmatch_info(".imeisvRequestIEI");
single_value->field_imeisvRequestIEI.log_match(match_value.imeisvRequestIEI(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ imeisvRequest := ");
single_value->field_imeisvRequest.log_match(match_value.imeisvRequest(), legacy);
TTCN_Logger::log_event_str(", imeisvRequestIEI := ");
single_value->field_imeisvRequestIEI.log_match(match_value.imeisvRequestIEI(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void IMEISVRequestTV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (imeisvRequest().is_bound()) imeisvRequest().set_implicit_omit();
if (imeisvRequestIEI().is_bound()) imeisvRequestIEI().set_implicit_omit();
}

void IMEISVRequestTV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_imeisvRequest.encode_text(text_buf);
single_value->field_imeisvRequestIEI.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.IMEISVRequestTV.");
}
}

void IMEISVRequestTV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_imeisvRequest.decode_text(text_buf);
single_value->field_imeisvRequestIEI.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new IMEISVRequestTV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_GMM_SM_Types.IMEISVRequestTV.");
}
}

void IMEISVRequestTV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    IMEISVRequestTV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record template of type @MobileL3_GMM_SM_Types.IMEISVRequestTV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) imeisvRequest().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) imeisvRequestIEI().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "imeisvRequest")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          imeisvRequest().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "imeisvRequestIEI")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          imeisvRequestIEI().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.IMEISVRequestTV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    IMEISVRequestTV_template* precondition = new IMEISVRequestTV_template;
    precondition->set_param(*param.get_elem(0));
    IMEISVRequestTV_template* implied_template = new IMEISVRequestTV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = IMEISVRequestTV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_GMM_SM_Types.IMEISVRequestTV");
  }
  is_ifpresent = param.get_ifpresent();
}

void IMEISVRequestTV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_imeisvRequest.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.IMEISVRequestTV");
single_value->field_imeisvRequestIEI.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.IMEISVRequestTV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_GMM_SM_Types.IMEISVRequestTV");
}

boolean IMEISVRequestTV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean IMEISVRequestTV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}


const ReceiveNPDUNumber ReceiveNPDUNumbersListV::UNBOUND_ELEM;
ReceiveNPDUNumbersListV::ReceiveNPDUNumbersListV()
{
val_ptr = NULL;
}

ReceiveNPDUNumbersListV::ReceiveNPDUNumbersListV(null_type)
{
val_ptr = new recordof_setof_struct;
val_ptr->ref_count = 1;
val_ptr->n_elements = 0;
val_ptr->value_elements = NULL;
}

ReceiveNPDUNumbersListV::ReceiveNPDUNumbersListV(const ReceiveNPDUNumbersListV& other_value)
{
if (!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV.");
val_ptr = other_value.val_ptr;
val_ptr->ref_count++;
}

ReceiveNPDUNumbersListV::~ReceiveNPDUNumbersListV()
{
clean_up();
if (val_ptr != NULL) val_ptr = NULL;
}

void ReceiveNPDUNumbersListV::clean_up()
{
if (val_ptr != NULL) {
if (val_ptr->ref_count > 1) {
val_ptr->ref_count--;
val_ptr = NULL;
}
else if (val_ptr->ref_count == 1) {
for (int elem_count = 0; elem_count < val_ptr->n_elements;
elem_count++)
if (val_ptr->value_elements[elem_count] != NULL)
delete val_ptr->value_elements[elem_count];
free_pointers((void**)val_ptr->value_elements);
delete val_ptr;
val_ptr = NULL;
}
else
TTCN_error("Internal error: Invalid reference counter in a record of/set of value.");
}
}

ReceiveNPDUNumbersListV& ReceiveNPDUNumbersListV::operator=(null_type)
{
clean_up();
val_ptr = new recordof_setof_struct;
val_ptr->ref_count = 1;
val_ptr->n_elements = 0;
val_ptr->value_elements = NULL;
return *this;
}

ReceiveNPDUNumbersListV& ReceiveNPDUNumbersListV::operator=(const ReceiveNPDUNumbersListV& other_value)
{
if (other_value.val_ptr == NULL) TTCN_error("Assigning an unbound value of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV.");
if (this != &other_value) {
clean_up();
val_ptr = other_value.val_ptr;
val_ptr->ref_count++;
}
return *this;
}

boolean ReceiveNPDUNumbersListV::operator==(null_type) const
{
if (val_ptr == NULL)
TTCN_error("The left operand of comparison is an unbound value of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV.");
return val_ptr->n_elements == 0 ;
}

boolean ReceiveNPDUNumbersListV::operator==(const ReceiveNPDUNumbersListV& other_value) const
{
if (val_ptr == NULL) TTCN_error("The left operand of comparison is an unbound value of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV.");
if (other_value.val_ptr == NULL) TTCN_error("The right operand of comparison is an unbound value of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV.");
if (val_ptr == other_value.val_ptr) return TRUE;
if (val_ptr->n_elements != (other_value.val_ptr)->n_elements)
return FALSE;
for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++){
if (val_ptr->value_elements[elem_count] != NULL){
if ((other_value.val_ptr)->value_elements[elem_count] != NULL){
  if (*val_ptr->value_elements[elem_count] != *(other_value.val_ptr)->value_elements[elem_count]) return FALSE;
} else return FALSE;
} else {
if ((other_value.val_ptr)->value_elements[elem_count] != NULL) return FALSE;
}
}
return TRUE;
}

ReceiveNPDUNumber& ReceiveNPDUNumbersListV::operator[](int index_value)
{
if (index_value < 0) TTCN_error("Accessing an element of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV using a negative index: %d.", index_value);
if (val_ptr == NULL) {
val_ptr = new recordof_setof_struct;
val_ptr->ref_count = 1;
val_ptr->n_elements = 0;
val_ptr->value_elements = NULL;
} else if (val_ptr->ref_count > 1) {
struct recordof_setof_struct *new_val_ptr = new recordof_setof_struct;
new_val_ptr->ref_count = 1;
new_val_ptr->n_elements = (index_value >= val_ptr->n_elements) ? index_value + 1 : val_ptr->n_elements;
new_val_ptr->value_elements = (ReceiveNPDUNumber**)allocate_pointers(new_val_ptr->n_elements);
for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++){
if (val_ptr->value_elements[elem_count] != NULL){
new_val_ptr->value_elements[elem_count] = new ReceiveNPDUNumber(*(val_ptr->value_elements[elem_count]));
}
}
clean_up();
val_ptr = new_val_ptr;
}
if (index_value >= val_ptr->n_elements) set_size(index_value + 1);
if (val_ptr->value_elements[index_value] == NULL) {
val_ptr->value_elements[index_value] = new ReceiveNPDUNumber;
}
return *val_ptr->value_elements[index_value];
}

ReceiveNPDUNumber& ReceiveNPDUNumbersListV::operator[](const INTEGER& index_value)
{
index_value.must_bound("Using an unbound integer value for indexing a value of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV.");
return (*this)[(int)index_value];
}

const ReceiveNPDUNumber& ReceiveNPDUNumbersListV::operator[](int index_value) const
{
if (val_ptr == NULL)
TTCN_error("Accessing an element in an unbound value of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV.");
if (index_value < 0) TTCN_error("Accessing an element of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV using a negative index: %d.", index_value);
if (index_value >= val_ptr->n_elements) TTCN_error("Index overflow in a value of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV: The index is %d, but the value has only %d elements.", index_value, val_ptr->n_elements);
return (val_ptr->value_elements[index_value] == NULL) ?
UNBOUND_ELEM : *val_ptr->value_elements[index_value];
}

const ReceiveNPDUNumber& ReceiveNPDUNumbersListV::operator[](const INTEGER& index_value) const
{
index_value.must_bound("Using an unbound integer value for indexing a value of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV.");
return (*this)[(int)index_value];
}

ReceiveNPDUNumbersListV ReceiveNPDUNumbersListV::operator<<=(int rotate_count) const
{
return *this >>= (-rotate_count);
}

ReceiveNPDUNumbersListV ReceiveNPDUNumbersListV::operator<<=(const INTEGER& rotate_count) const
{
rotate_count.must_bound("Unbound integer operand of rotate left operator.");
return *this >>= (int)(-rotate_count);
}

ReceiveNPDUNumbersListV ReceiveNPDUNumbersListV::operator>>=(const INTEGER& rotate_count) const
{
rotate_count.must_bound("Unbound integer operand of rotate right operator.");
return *this >>= (int)rotate_count;
}

ReceiveNPDUNumbersListV ReceiveNPDUNumbersListV::operator>>=(int rotate_count) const
{
if (val_ptr == NULL) TTCN_error("Performing rotation operation on an unbound value of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV.");
if (val_ptr->n_elements == 0) return *this;
int rc;
if (rotate_count>=0) rc = rotate_count % val_ptr->n_elements;
else rc = val_ptr->n_elements - ((-rotate_count) % val_ptr->n_elements);
if (rc == 0) return *this;
ReceiveNPDUNumbersListV ret_val;
ret_val.set_size(val_ptr->n_elements);
for (int i=0; i<val_ptr->n_elements; i++) {
if (val_ptr->value_elements[i] != NULL) {
ret_val.val_ptr->value_elements[(i+rc)%val_ptr->n_elements] =new ReceiveNPDUNumber(*val_ptr->value_elements[i]);
}
}
return ret_val;
}

ReceiveNPDUNumbersListV ReceiveNPDUNumbersListV::operator+(const ReceiveNPDUNumbersListV& other_value) const
{
if (val_ptr == NULL || other_value.val_ptr == NULL) TTCN_error("Unbound operand of @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV concatenation.");
if (val_ptr->n_elements == 0) return other_value;
if (other_value.val_ptr->n_elements == 0) return *this;
ReceiveNPDUNumbersListV ret_val;
ret_val.set_size(val_ptr->n_elements+other_value.val_ptr->n_elements);
for (int i=0; i<val_ptr->n_elements; i++) {
if (val_ptr->value_elements[i] != NULL) {
ret_val.val_ptr->value_elements[i] = new ReceiveNPDUNumber(*val_ptr->value_elements[i]);
}
}
for (int i=0; i<other_value.val_ptr->n_elements; i++) {
if (other_value.val_ptr->value_elements[i] != NULL) {
ret_val.val_ptr->value_elements[i+val_ptr->n_elements] = new ReceiveNPDUNumber(*other_value.val_ptr->value_elements[i]);
}
}
return ret_val;
}

ReceiveNPDUNumbersListV ReceiveNPDUNumbersListV::substr(int index, int returncount) const
{
if (val_ptr == NULL) TTCN_error("The first argument of substr() is an unbound value of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV.");
check_substr_arguments(val_ptr->n_elements, index, returncount, "@MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV","element");
ReceiveNPDUNumbersListV ret_val;
ret_val.set_size(returncount);
for (int i=0; i<returncount; i++) {
if (val_ptr->value_elements[i+index] != NULL) {
ret_val.val_ptr->value_elements[i] = new ReceiveNPDUNumber(*val_ptr->value_elements[i+index]);
}
}
return ret_val;
}

ReceiveNPDUNumbersListV ReceiveNPDUNumbersListV::replace(int index, int len, const ReceiveNPDUNumbersListV& repl) const
{
if (val_ptr == NULL) TTCN_error("The first argument of replace() is an unbound value of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV.");
if (repl.val_ptr == NULL) TTCN_error("The fourth argument of replace() is an unbound value of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV.");
check_replace_arguments(val_ptr->n_elements, index, len, "@MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV","element");
ReceiveNPDUNumbersListV ret_val;
ret_val.set_size(val_ptr->n_elements + repl.val_ptr->n_elements - len);
for (int i = 0; i < index; i++) {
if (val_ptr->value_elements[i] != NULL) {
ret_val.val_ptr->value_elements[i] = new ReceiveNPDUNumber(*val_ptr->value_elements[i]);
}
}
for (int i = 0; i < repl.val_ptr->n_elements; i++) {
if (repl.val_ptr->value_elements[i] != NULL) {
ret_val.val_ptr->value_elements[i+index] = new ReceiveNPDUNumber(*repl.val_ptr->value_elements[i]);
}
}
for (int i = 0; i < val_ptr->n_elements - index - len; i++) {
if (val_ptr->value_elements[index+i+len] != NULL) {
ret_val.val_ptr->value_elements[index+i+repl.val_ptr->n_elements] = new ReceiveNPDUNumber(*val_ptr->value_elements[index+i+len]);
}
}
return ret_val;
}

ReceiveNPDUNumbersListV ReceiveNPDUNumbersListV::replace(int index, int len, const ReceiveNPDUNumbersListV_template& repl) const
{
if (!repl.is_value()) TTCN_error("The fourth argument of function replace() is a template with non-specific value.");
return replace(index, len, repl.valueof());
}

void ReceiveNPDUNumbersListV::set_size(int new_size)
{
if (new_size < 0) TTCN_error("Internal error: Setting a negative size for a value of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV.");
if (val_ptr == NULL) {
val_ptr = new recordof_setof_struct;
val_ptr->ref_count = 1;
val_ptr->n_elements = 0;
val_ptr->value_elements = NULL;
} else if (val_ptr->ref_count > 1) {
struct recordof_setof_struct *new_val_ptr = new recordof_setof_struct;
new_val_ptr->ref_count = 1;
new_val_ptr->n_elements = (new_size < val_ptr->n_elements) ? new_size : val_ptr->n_elements;
new_val_ptr->value_elements = (ReceiveNPDUNumber**)allocate_pointers(new_val_ptr->n_elements);
for (int elem_count = 0; elem_count < new_val_ptr->n_elements; elem_count++) {
if (val_ptr->value_elements[elem_count] != NULL){
new_val_ptr->value_elements[elem_count] = new ReceiveNPDUNumber(*(val_ptr->value_elements[elem_count]));
}
}
clean_up();
val_ptr = new_val_ptr;
}
if (new_size > val_ptr->n_elements) {
val_ptr->value_elements = (ReceiveNPDUNumber**)reallocate_pointers((void**)val_ptr->value_elements, val_ptr->n_elements, new_size);
#ifdef TITAN_MEMORY_DEBUG_SET_RECORD_OF
if((val_ptr->n_elements/1000)!=(new_size/1000)) TTCN_warning("New size of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV: %d",new_size);
#endif
val_ptr->n_elements = new_size;
} else if (new_size < val_ptr->n_elements) {
for (int elem_count = new_size; elem_count < val_ptr->n_elements; elem_count++)
if (val_ptr->value_elements[elem_count] != NULL)delete val_ptr->value_elements[elem_count];
val_ptr->value_elements = (ReceiveNPDUNumber**)reallocate_pointers((void**)val_ptr->value_elements, val_ptr->n_elements, new_size);
val_ptr->n_elements = new_size;
}
}

boolean ReceiveNPDUNumbersListV::is_value() const
{
if (val_ptr == NULL) return FALSE;
for(int i = 0; i < val_ptr->n_elements; ++i) {
if (val_ptr->value_elements[i] == NULL || !val_ptr->value_elements[i]->is_value()) return FALSE;
}
return TRUE;
}

int ReceiveNPDUNumbersListV::size_of() const
{
if (val_ptr == NULL) TTCN_error("Performing sizeof operation on an unbound value of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV.");
return val_ptr->n_elements;
}

int ReceiveNPDUNumbersListV::lengthof() const
{
if (val_ptr == NULL) TTCN_error("Performing lengthof operation on an unbound value of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV.");
for (int my_length=val_ptr->n_elements; my_length>0; my_length--) if (val_ptr->value_elements[my_length-1] != NULL) return my_length;
return 0;
}

void ReceiveNPDUNumbersListV::log() const
{
if (val_ptr == NULL) {;
TTCN_Logger::log_event_unbound();
return;
}
switch (val_ptr->n_elements) {
case 0:
TTCN_Logger::log_event_str("{ }");
break;
default:
TTCN_Logger::log_event_str("{ ");
for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++) {
if (elem_count > 0) TTCN_Logger::log_event_str(", ");
(*this)[elem_count].log();
}
TTCN_Logger::log_event_str(" }");
}
}

void ReceiveNPDUNumbersListV::set_implicit_omit()
{
if (val_ptr == NULL) return;
for (int i = 0; i < val_ptr->n_elements; i++) {
if (val_ptr->value_elements[i] != NULL) val_ptr->value_elements[i]->set_implicit_omit();
}
}

void ReceiveNPDUNumbersListV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE|Module_Param::BC_LIST, "record of value");
  switch (param.get_operation_type()) {
  case Module_Param::OT_ASSIGN:
    if (param.get_type()==Module_Param::MP_Value_List && param.get_size()==0) {
      *this = NULL_VALUE;
      return;
    }
    switch (param.get_type()) {
    case Module_Param::MP_Value_List:
      set_size(param.get_size());
      for (size_t i=0; i<param.get_size(); ++i) {
        Module_Param* const curr = param.get_elem(i);
        if (curr->get_type()!=Module_Param::MP_NotUsed) {
          (*this)[i].set_param(*curr);
          if (!(*this)[i].is_bound()) {
            delete val_ptr->value_elements[i];
            val_ptr->value_elements[i] = NULL;
          }
        }
      }
      break;
    case Module_Param::MP_Indexed_List:
      for (size_t i=0; i<param.get_size(); ++i) {
        Module_Param* const curr = param.get_elem(i);
        (*this)[curr->get_id()->get_index()].set_param(*curr);
        if (!(*this)[curr->get_id()->get_index()].is_bound()) {
          delete val_ptr->value_elements[curr->get_id()->get_index()];
          val_ptr->value_elements[curr->get_id()->get_index()] = NULL;
        }
      }
      break;
    default:
      param.type_error("record of value", "@MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV");
    }
    break;
  case Module_Param::OT_CONCAT:
    switch (param.get_type()) {
    case Module_Param::MP_Value_List: {
      if (!is_bound()) *this = NULL_VALUE;
      int start_idx = lengthof();
      for (size_t i=0; i<param.get_size(); ++i) {
        Module_Param* const curr = param.get_elem(i);
        if ((curr->get_type()!=Module_Param::MP_NotUsed)) {
          (*this)[start_idx+(int)i].set_param(*curr);
        }
      }
    } break;
    case Module_Param::MP_Indexed_List:
      param.error("Cannot concatenate an indexed value list");
      break;
    default:
      param.type_error("record of value", "@MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV");
    }
    break;
  default:
    TTCN_error("Internal error: Unknown operation type.");
  }
}

void ReceiveNPDUNumbersListV::encode_text(Text_Buf& text_buf) const
{
if (val_ptr == NULL) TTCN_error("Text encoder: Encoding an unbound value of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV.");
text_buf.push_int(val_ptr->n_elements);
for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++)
(*this)[elem_count].encode_text(text_buf);
}

void ReceiveNPDUNumbersListV::decode_text(Text_Buf& text_buf)
{
clean_up();
val_ptr = new recordof_setof_struct;
val_ptr->ref_count = 1;
val_ptr->n_elements = text_buf.pull_int().get_val();
if (val_ptr->n_elements < 0) TTCN_error("Text decoder: Negative size was received for a value of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV.");
val_ptr->value_elements = (ReceiveNPDUNumber**)allocate_pointers(val_ptr->n_elements);
for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++) {
val_ptr->value_elements[elem_count] = new ReceiveNPDUNumber;
val_ptr->value_elements[elem_count]->decode_text(text_buf);
}
}

void ReceiveNPDUNumbersListV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void ReceiveNPDUNumbersListV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int ReceiveNPDUNumbersListV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean /*no_err*/, int sel_field, boolean first_call, const RAW_Force_Omit*){
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  int decoded_length=0;
  int decoded_field_length=0;
  size_t start_of_field=0;
  if(first_call) {
    clean_up();
    val_ptr=new recordof_setof_struct;
    val_ptr->ref_count=1;
    val_ptr->n_elements=0;
    val_ptr->value_elements=NULL;
  }
  int start_field=val_ptr->n_elements;
  if(p_td.raw->fieldlength || sel_field!=-1){
    int a=0;
    if(sel_field==-1) sel_field=p_td.raw->fieldlength;
    start_of_field=p_buf.get_pos_bit();
    for(a=0;a<sel_field;a++){
      decoded_field_length=(*this)[a+start_field].RAW_decode(*p_td.oftype_descr,p_buf,limit,top_bit_ord,TRUE);
      if(decoded_field_length < 0){
        while(a>=0){
          delete &(*this)[a+start_field];
          a--;
          val_ptr->n_elements--;
        }
        p_buf.set_pos_bit(start_of_field);
        return decoded_field_length;
      }
      decoded_length+=decoded_field_length;
      limit-=decoded_field_length;
    }
    if(a==0) val_ptr->n_elements=0;
  } else {
    if(limit==0){
      if(!first_call) return -1;
      val_ptr->n_elements=0;
      return decoded_length+p_buf.increase_pos_padd(p_td.raw->padding)+prepaddlength;
    }
    int a=start_field;
    while(limit>0){
      start_of_field=p_buf.get_pos_bit();
      decoded_field_length=(*this)[a].RAW_decode(*p_td.oftype_descr,p_buf,limit,top_bit_ord,TRUE);
      if(decoded_field_length < 0){
        delete &(*this)[a];
        val_ptr->n_elements--;
        p_buf.set_pos_bit(start_of_field);
        if(a>start_field){
        return decoded_length+p_buf.increase_pos_padd(p_td.raw->padding)+prepaddlength;
        } else return -1;
      }
      decoded_length+=decoded_field_length;
      limit-=decoded_field_length;
      a++;
    }
  }
 return decoded_length+p_buf.increase_pos_padd(p_td.raw->padding)+prepaddlength;
}

int ReceiveNPDUNumbersListV::RAW_encode(const TTCN_Typedescriptor_t& p_td,RAW_enc_tree& myleaf) const{
  int encoded_length=0;
  int encoded_num_of_records=p_td.raw->fieldlength?smaller(val_ptr->n_elements, p_td.raw->fieldlength):val_ptr->n_elements;
  myleaf.isleaf=FALSE;
  myleaf.rec_of=TRUE;
  myleaf.body.node.num_of_nodes=encoded_num_of_records;
  myleaf.body.node.nodes=init_nodes_of_enc_tree(encoded_num_of_records);
  for(int a=0;a<encoded_num_of_records;a++){
    myleaf.body.node.nodes[a]=new RAW_enc_tree(TRUE,&myleaf,&(myleaf.curr_pos),a,p_td.oftype_descr->raw);
    encoded_length+=(*this)[a].RAW_encode(*p_td.oftype_descr,*myleaf.body.node.nodes[a]);
  }
 return myleaf.length=encoded_length;
}

void ReceiveNPDUNumbersListV_template::copy_value(const ReceiveNPDUNumbersListV& other_value)
{
if (!other_value.is_bound()) TTCN_error("Initialization of a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV with an unbound value.");
single_value.n_elements = other_value.size_of();
single_value.value_elements = (ReceiveNPDUNumber_template**)allocate_pointers(single_value.n_elements);
for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) {
if (other_value[elem_count].is_bound()) {
single_value.value_elements[elem_count] = new ReceiveNPDUNumber_template(other_value[elem_count]);
} else {
single_value.value_elements[elem_count] = new ReceiveNPDUNumber_template;
}
}
set_selection(SPECIFIC_VALUE);
}

void ReceiveNPDUNumbersListV_template::copy_template(const ReceiveNPDUNumbersListV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value.n_elements = other_value.single_value.n_elements;
single_value.value_elements = (ReceiveNPDUNumber_template**)allocate_pointers(single_value.n_elements);
for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) {
if (UNINITIALIZED_TEMPLATE != other_value.single_value.value_elements[elem_count]->get_selection()) {
single_value.value_elements[elem_count] = new ReceiveNPDUNumber_template(*other_value.single_value.value_elements[elem_count]);
} else {
single_value.value_elements[elem_count] = new ReceiveNPDUNumber_template;
}
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new ReceiveNPDUNumbersListV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new ReceiveNPDUNumbersListV_template(*other_value.implication_.precondition);
implication_.implied_template = new ReceiveNPDUNumbersListV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV.");
break;
}
set_selection(other_value);
}

boolean ReceiveNPDUNumbersListV_template::match_function_specific(const Base_Type *value_ptr, int value_index, const Restricted_Length_Template *template_ptr, int template_index, boolean legacy)
{
if (value_index >= 0) return ((const ReceiveNPDUNumbersListV_template*)template_ptr)->single_value.value_elements[template_index]->match((*(const ReceiveNPDUNumbersListV*)value_ptr)[value_index], legacy);
else return ((const ReceiveNPDUNumbersListV_template*)template_ptr)->single_value.value_elements[template_index]->is_any_or_omit();
}

ReceiveNPDUNumbersListV_template::ReceiveNPDUNumbersListV_template()
{
}

ReceiveNPDUNumbersListV_template::ReceiveNPDUNumbersListV_template(template_sel other_value)
 : Base_Record_Of_Template(other_value)
{
check_single_selection(other_value);
}

ReceiveNPDUNumbersListV_template::ReceiveNPDUNumbersListV_template(null_type)
 : Base_Record_Of_Template(SPECIFIC_VALUE)
{
single_value.n_elements = 0;
single_value.value_elements = NULL;
}

ReceiveNPDUNumbersListV_template::ReceiveNPDUNumbersListV_template(const ReceiveNPDUNumbersListV& other_value)
{
copy_value(other_value);
}

ReceiveNPDUNumbersListV_template::ReceiveNPDUNumbersListV_template(const OPTIONAL<ReceiveNPDUNumbersListV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ReceiveNPDUNumbersListV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV from an unbound optional field.");
}
}

ReceiveNPDUNumbersListV_template::ReceiveNPDUNumbersListV_template(ReceiveNPDUNumbersListV_template* p_precondition, ReceiveNPDUNumbersListV_template* p_implied_template)
 : Base_Record_Of_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

ReceiveNPDUNumbersListV_template::ReceiveNPDUNumbersListV_template(Dynamic_Match_Interface<ReceiveNPDUNumbersListV>* p_dyn_match)
 : Base_Record_Of_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<ReceiveNPDUNumbersListV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

ReceiveNPDUNumbersListV_template::ReceiveNPDUNumbersListV_template(const ReceiveNPDUNumbersListV_template& other_value)
 : Base_Record_Of_Template()
{
copy_template(other_value);
}

ReceiveNPDUNumbersListV_template::~ReceiveNPDUNumbersListV_template()
{
clean_up();
}

void ReceiveNPDUNumbersListV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++)
delete single_value.value_elements[elem_count];
free_pointers((void**)single_value.value_elements);
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

ReceiveNPDUNumbersListV_template& ReceiveNPDUNumbersListV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

ReceiveNPDUNumbersListV_template& ReceiveNPDUNumbersListV_template::operator=(null_type)
{
clean_up();
set_selection(SPECIFIC_VALUE);
single_value.n_elements = 0;
single_value.value_elements = NULL;
return *this;
}

ReceiveNPDUNumbersListV_template& ReceiveNPDUNumbersListV_template::operator=(const ReceiveNPDUNumbersListV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

ReceiveNPDUNumbersListV_template& ReceiveNPDUNumbersListV_template::operator=(const OPTIONAL<ReceiveNPDUNumbersListV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ReceiveNPDUNumbersListV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV.");
}
return *this;
}

ReceiveNPDUNumbersListV_template& ReceiveNPDUNumbersListV_template::operator=(const ReceiveNPDUNumbersListV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

ReceiveNPDUNumber_template& ReceiveNPDUNumbersListV_template::operator[](int index_value)
{
if (index_value < 0) TTCN_error("Accessing an element of a template for type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV using a negative index: %d.", index_value);
switch (template_selection)
{
  case SPECIFIC_VALUE:
    if(index_value < single_value.n_elements) break;
    // no break
  case OMIT_VALUE:
  case ANY_VALUE:
  case ANY_OR_OMIT:
  case UNINITIALIZED_TEMPLATE:
    set_size(index_value + 1);
    break;
  default:
    TTCN_error("Accessing an element of a non-specific template for type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV.");
    break;
}
return *single_value.value_elements[index_value];
}

ReceiveNPDUNumber_template& ReceiveNPDUNumbersListV_template::operator[](const INTEGER& index_value)
{
index_value.must_bound("Using an unbound integer value for indexing a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV.");
return (*this)[(int)index_value];
}

const ReceiveNPDUNumber_template& ReceiveNPDUNumbersListV_template::operator[](int index_value) const
{
if (index_value < 0) TTCN_error("Accessing an element of a template for type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV using a negative index: %d.", index_value);
if (template_selection != SPECIFIC_VALUE) TTCN_error("Accessing an element of a non-specific template for type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV.");
if (index_value >= single_value.n_elements) TTCN_error("Index overflow in a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV: The index is %d, but the template has only %d elements.", index_value, single_value.n_elements);
return *single_value.value_elements[index_value];
}

const ReceiveNPDUNumber_template& ReceiveNPDUNumbersListV_template::operator[](const INTEGER& index_value) const
{
index_value.must_bound("Using an unbound integer value for indexing a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV.");
return (*this)[(int)index_value];
}

void ReceiveNPDUNumbersListV_template::set_size(int new_size)
{
if (new_size < 0) TTCN_error("Internal error: Setting a negative size for a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV.");
template_sel old_selection = template_selection;
if (old_selection != SPECIFIC_VALUE) {
clean_up();
set_selection(SPECIFIC_VALUE);
single_value.n_elements = 0;
single_value.value_elements = NULL;
}
if (new_size > single_value.n_elements) {
single_value.value_elements = (ReceiveNPDUNumber_template**)reallocate_pointers((void**)single_value.value_elements, single_value.n_elements, new_size);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
for (int elem_count = single_value.n_elements; elem_count < new_size; elem_count++)
single_value.value_elements[elem_count] = new ReceiveNPDUNumber_template(ANY_VALUE);
} else {
for (int elem_count = single_value.n_elements; elem_count < new_size; elem_count++)
single_value.value_elements[elem_count] = new ReceiveNPDUNumber_template;
}
single_value.n_elements = new_size;
} else if (new_size < single_value.n_elements) {
for (int elem_count = new_size; elem_count < single_value.n_elements; elem_count++)
delete single_value.value_elements[elem_count];
single_value.value_elements = (ReceiveNPDUNumber_template**)reallocate_pointers((void**)single_value.value_elements, single_value.n_elements, new_size);
single_value.n_elements = new_size;
}
}

int ReceiveNPDUNumbersListV_template::n_elem() const
{
  switch (template_selection) {
  case SPECIFIC_VALUE:
    return single_value.n_elements;
    break;
  case VALUE_LIST:
    return value_list.n_values;
    break;
  default:
    TTCN_error("Performing n_elem");
  }
}

int ReceiveNPDUNumbersListV_template::size_of(boolean is_size) const
{
const char* op_name = is_size ? "size" : "length";
int min_size;
boolean has_any_or_none;
if (is_ifpresent) TTCN_error("Performing %sof() operation on a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV which has an ifpresent attribute.", op_name);
switch (template_selection)
{
case SPECIFIC_VALUE: {
  min_size = 0;
  has_any_or_none = FALSE;
  int elem_count = single_value.n_elements;
  if (!is_size) { while (elem_count>0 && !single_value.value_elements[elem_count-1]->is_bound()) elem_count--; }
  for (int i=0; i<elem_count; i++) {
    switch (single_value.value_elements[i]->get_selection()) {
    case OMIT_VALUE:
      TTCN_error("Performing %sof() operation on a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV containing omit element.", op_name);
    case ANY_OR_OMIT:
      has_any_or_none = TRUE;
      break;
    default:
      min_size++;
      break;
    }
  }
} break;
case OMIT_VALUE:
  TTCN_error("Performing %sof() operation on a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV containing omit value.", op_name);
case ANY_VALUE:
case ANY_OR_OMIT:
  min_size = 0;
  has_any_or_none = TRUE;
  break;
case VALUE_LIST:
{
  if (value_list.n_values<1)
    TTCN_error("Performing %sof() operation on a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV containing an empty list.", op_name);
  int item_size = value_list.list_value[0].size_of(is_size);
  for (unsigned int i = 1; i < value_list.n_values; i++) {
    if (value_list.list_value[i].size_of(is_size)!=item_size)
      TTCN_error("Performing %sof() operation on a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV containing a value list with different sizes.", op_name);
  }
  min_size = item_size;
  has_any_or_none = FALSE;
  break;
}
case COMPLEMENTED_LIST:
  TTCN_error("Performing %sof() operation on a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV containing complemented list.", op_name);
default:
  TTCN_error("Performing %sof() operation on an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV.", op_name);
}
return check_section_is_single(min_size, has_any_or_none, op_name, "a", "template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV");
}

boolean ReceiveNPDUNumbersListV_template::match(const ReceiveNPDUNumbersListV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
int value_length = other_value.size_of();
if (!match_length(value_length)) return FALSE;
switch (template_selection) {
case SPECIFIC_VALUE:
return match_record_of(&other_value, value_length, this, single_value.n_elements, match_function_specific, legacy);
case OMIT_VALUE:
return FALSE;
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching with an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV.");
}
return FALSE;
}

boolean ReceiveNPDUNumbersListV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++)
if (!single_value.value_elements[elem_count]->is_value()) return FALSE;
return TRUE;
}

ReceiveNPDUNumbersListV ReceiveNPDUNumbersListV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV.");
ReceiveNPDUNumbersListV ret_val;
ret_val.set_size(single_value.n_elements);
for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++)
if (single_value.value_elements[elem_count]->is_bound()) {
ret_val[elem_count] = single_value.value_elements[elem_count]->valueof();
}
return ret_val;
}

ReceiveNPDUNumbersListV ReceiveNPDUNumbersListV_template::substr(int index, int returncount) const
{
if (!is_value()) TTCN_error("The first argument of function substr() is a template with non-specific value.");
return valueof().substr(index, returncount);
}

ReceiveNPDUNumbersListV ReceiveNPDUNumbersListV_template::replace(int index, int len, const ReceiveNPDUNumbersListV_template& repl) const
{
if (!is_value()) TTCN_error("The first argument of function replace() is a template with non-specific value.");
if (!repl.is_value()) TTCN_error("The fourth argument of function replace() is a template with non-specific value.");
return valueof().replace(index, len, repl.valueof());
}

ReceiveNPDUNumbersListV ReceiveNPDUNumbersListV_template::replace(int index, int len, const ReceiveNPDUNumbersListV& repl) const
{
if (!is_value()) TTCN_error("The first argument of function replace() is a template with non-specific value.");
return valueof().replace(index, len, repl);
}

void ReceiveNPDUNumbersListV_template::set_type(template_sel template_type, unsigned int list_length)
{
clean_up();
switch (template_type) {
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = list_length;
value_list.list_value = new ReceiveNPDUNumbersListV_template[list_length];
break;
default:
TTCN_error("Internal error: Setting an invalid type for a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV.");
}
set_selection(template_type);
}

ReceiveNPDUNumbersListV_template& ReceiveNPDUNumbersListV_template::list_item(unsigned int list_index)
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST && template_selection != CONJUNCTION_MATCH) TTCN_error("Internal error: Accessing a list element of a non-list template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV.");
if (list_index >= value_list.n_values) TTCN_error("Internal error: Index overflow in a value list template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV.");
return value_list.list_value[list_index];
}

void ReceiveNPDUNumbersListV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
if (single_value.n_elements > 0) {
TTCN_Logger::log_event_str("{ ");
for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) {
if (elem_count > 0) TTCN_Logger::log_event_str(", ");
if (permutation_starts_at(elem_count)) TTCN_Logger::log_event_str("permutation(");
single_value.value_elements[elem_count]->log();
if (permutation_ends_at(elem_count)) TTCN_Logger::log_char(')');
}
TTCN_Logger::log_event_str(" }");
} else TTCN_Logger::log_event_str("{ }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_restricted();
log_ifpresent();
}

void ReceiveNPDUNumbersListV_template::log_match(const ReceiveNPDUNumbersListV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
}else{
if (template_selection == SPECIFIC_VALUE && single_value.n_elements > 0 && get_number_of_permutations() == 0 && single_value.n_elements == match_value.size_of()) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) {
if(!single_value.value_elements[elem_count]->match(match_value[elem_count], legacy)){
TTCN_Logger::log_logmatch_info("[%d]", elem_count);
single_value.value_elements[elem_count]->log_match(match_value[elem_count], legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}
log_match_length(single_value.n_elements);
} else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE && single_value.n_elements > 0 && get_number_of_permutations() == 0 && single_value.n_elements == match_value.size_of()) {
TTCN_Logger::log_event_str("{ ");
for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) {
if (elem_count > 0) TTCN_Logger::log_event_str(", ");
single_value.value_elements[elem_count]->log_match(match_value[elem_count], legacy);
}
TTCN_Logger::log_event_str(" }");
log_match_length(single_value.n_elements);
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void ReceiveNPDUNumbersListV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_permutation(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
text_buf.push_int(single_value.n_elements);
for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++)
single_value.value_elements[elem_count]->encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV.");
}
}

void ReceiveNPDUNumbersListV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_permutation(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value.n_elements = text_buf.pull_int().get_val();
if (single_value.n_elements < 0) TTCN_error("Text decoder: Negative size was received for a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV.");
single_value.value_elements = (ReceiveNPDUNumber_template**)allocate_pointers(single_value.n_elements);
for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) {
single_value.value_elements[elem_count] = new ReceiveNPDUNumber_template;
single_value.value_elements[elem_count]->decode_text(text_buf);
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new ReceiveNPDUNumbersListV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received for a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV.");
}
}

boolean ReceiveNPDUNumbersListV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean ReceiveNPDUNumbersListV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int i=0; i<value_list.n_values; i++)
if (value_list.list_value[i].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

void ReceiveNPDUNumbersListV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
for (int i = 0; i < single_value.n_elements; i++) {
if (single_value.value_elements[i] != NULL) single_value.value_elements[i]->set_implicit_omit();
}
}

void ReceiveNPDUNumbersListV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE|Module_Param::BC_LIST, "record of template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    ReceiveNPDUNumbersListV_template temp;
    temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = temp;
    break; }
  case Module_Param::MP_Indexed_List:
    if (template_selection!=SPECIFIC_VALUE) set_size(0);
    for (size_t p_i=0; p_i<param.get_size(); ++p_i) {
      (*this)[(int)(param.get_elem(p_i)->get_id()->get_index())].set_param(*param.get_elem(p_i));
    }
    break;
  case Module_Param::MP_Value_List: {
    set_size(param.get_size());
    int curr_idx = 0;
    for (size_t p_i=0; p_i<param.get_size(); ++p_i) {
      switch (param.get_elem(p_i)->get_type()) {
      case Module_Param::MP_NotUsed:
        curr_idx++;
        break;
      case Module_Param::MP_Permutation_Template: {
        int perm_start_idx = curr_idx;
        Module_Param* param_i = param.get_elem(p_i);
        for (size_t perm_i=0; perm_i<param_i->get_size(); perm_i++) {
          (*this)[curr_idx].set_param(*(param_i->get_elem(perm_i)));
          curr_idx++;
        }
        int perm_end_idx = curr_idx - 1;
        add_permutation(perm_start_idx, perm_end_idx);
      } break;
      default:
        (*this)[curr_idx].set_param(*param.get_elem(p_i));
        curr_idx++;
      }
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    ReceiveNPDUNumbersListV_template* precondition = new ReceiveNPDUNumbersListV_template;
    precondition->set_param(*param.get_elem(0));
    ReceiveNPDUNumbersListV_template* implied_template = new ReceiveNPDUNumbersListV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = ReceiveNPDUNumbersListV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record of template", "@MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV");
  }
  is_ifpresent = param.get_ifpresent();
  set_length_range(param);
}

void ReceiveNPDUNumbersListV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
for (int i=0; i<single_value.n_elements; i++) single_value.value_elements[i]->check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListV");
}

boolean ReceiveNPDUNumbersListV_template::get_istemplate_kind(const char* type) const {
if (!strcmp(type, "AnyElement")) {
  if (template_selection != SPECIFIC_VALUE) {
    return FALSE;
  }
  for (int i = 0; i < single_value.n_elements; i++) {
    if (single_value.value_elements[i]->get_selection() == ANY_VALUE) {
      return TRUE;
    }
  }
  return FALSE;
} else if (!strcmp(type, "AnyElementsOrNone")) {
  if (template_selection != SPECIFIC_VALUE) {
    return FALSE;
  }
  for (int i = 0; i < single_value.n_elements; i++) {
    if (single_value.value_elements[i]->get_selection() == ANY_OR_OMIT) {
      return TRUE;
    }
  }
  return FALSE;
} else if (!strcmp(type, "permutation")) {
  return number_of_permutations;
} else if (!strcmp(type, "length")) {
  return length_restriction_type != NO_LENGTH_RESTRICTION;
} else {
  return Base_Template::get_istemplate_kind(type);
}
}
ReceiveNPDUNumber::ReceiveNPDUNumber()
{
}

ReceiveNPDUNumber::ReceiveNPDUNumber(const BITSTRING& par_sapi,
    const BITSTRING& par_numberValue)
  :   field_sapi(par_sapi),
  field_numberValue(par_numberValue)
{
}

ReceiveNPDUNumber::ReceiveNPDUNumber(const ReceiveNPDUNumber& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumber.");
if (other_value.sapi().is_bound()) field_sapi = other_value.sapi();
else field_sapi.clean_up();
if (other_value.numberValue().is_bound()) field_numberValue = other_value.numberValue();
else field_numberValue.clean_up();
}

void ReceiveNPDUNumber::clean_up()
{
field_sapi.clean_up();
field_numberValue.clean_up();
}

const TTCN_Typedescriptor_t* ReceiveNPDUNumber::get_descriptor() const { return &ReceiveNPDUNumber_descr_; }
ReceiveNPDUNumber& ReceiveNPDUNumber::operator=(const ReceiveNPDUNumber& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumber.");
  if (other_value.sapi().is_bound()) field_sapi = other_value.sapi();
  else field_sapi.clean_up();
  if (other_value.numberValue().is_bound()) field_numberValue = other_value.numberValue();
  else field_numberValue.clean_up();
}
return *this;
}

boolean ReceiveNPDUNumber::operator==(const ReceiveNPDUNumber& other_value) const
{
return field_sapi==other_value.field_sapi
  && field_numberValue==other_value.field_numberValue;
}

boolean ReceiveNPDUNumber::is_bound() const
{
return (field_sapi.is_bound())
  || (field_numberValue.is_bound());
}
boolean ReceiveNPDUNumber::is_value() const
{
return field_sapi.is_value()
  && field_numberValue.is_value();
}
void ReceiveNPDUNumber::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ sapi := ");
field_sapi.log();
TTCN_Logger::log_event_str(", numberValue := ");
field_numberValue.log();
TTCN_Logger::log_event_str(" }");
}

void ReceiveNPDUNumber::set_implicit_omit()
{
if (sapi().is_bound()) sapi().set_implicit_omit();
if (numberValue().is_bound()) numberValue().set_implicit_omit();
}

void ReceiveNPDUNumber::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record value of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumber has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) sapi().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) numberValue().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "sapi")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          sapi().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "numberValue")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          numberValue().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.ReceiveNPDUNumber: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_GMM_SM_Types.ReceiveNPDUNumber");
  }
}

void ReceiveNPDUNumber::encode_text(Text_Buf& text_buf) const
{
field_sapi.encode_text(text_buf);
field_numberValue.encode_text(text_buf);
}

void ReceiveNPDUNumber::decode_text(Text_Buf& text_buf)
{
field_sapi.decode_text(text_buf);
field_numberValue.decode_text(text_buf);
}

void ReceiveNPDUNumber::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void ReceiveNPDUNumber::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int ReceiveNPDUNumber::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, ReceiveNPDUNumber_sapi_descr_.raw->forceomit);
  decoded_field_length = field_sapi.RAW_decode(ReceiveNPDUNumber_sapi_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, ReceiveNPDUNumber_numberValue_descr_.raw->forceomit);
  decoded_field_length = field_numberValue.RAW_decode(ReceiveNPDUNumber_numberValue_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int ReceiveNPDUNumber::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 2;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(2);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, ReceiveNPDUNumber_sapi_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, ReceiveNPDUNumber_numberValue_descr_.raw);
  encoded_length += field_sapi.RAW_encode(ReceiveNPDUNumber_sapi_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_numberValue.RAW_encode(ReceiveNPDUNumber_numberValue_descr_, *myleaf.body.node.nodes[1]);
  return myleaf.length = encoded_length;
}

struct ReceiveNPDUNumber_template::single_value_struct {
BITSTRING_template field_sapi;
BITSTRING_template field_numberValue;
};

void ReceiveNPDUNumber_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_sapi = ANY_VALUE;
single_value->field_numberValue = ANY_VALUE;
}
}
}

void ReceiveNPDUNumber_template::copy_value(const ReceiveNPDUNumber& other_value)
{
single_value = new single_value_struct;
if (other_value.sapi().is_bound()) {
  single_value->field_sapi = other_value.sapi();
} else {
  single_value->field_sapi.clean_up();
}
if (other_value.numberValue().is_bound()) {
  single_value->field_numberValue = other_value.numberValue();
} else {
  single_value->field_numberValue.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void ReceiveNPDUNumber_template::copy_template(const ReceiveNPDUNumber_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.sapi().get_selection()) {
single_value->field_sapi = other_value.sapi();
} else {
single_value->field_sapi.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.numberValue().get_selection()) {
single_value->field_numberValue = other_value.numberValue();
} else {
single_value->field_numberValue.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new ReceiveNPDUNumber_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new ReceiveNPDUNumber_template(*other_value.implication_.precondition);
implication_.implied_template = new ReceiveNPDUNumber_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumber.");
break;
}
set_selection(other_value);
}

ReceiveNPDUNumber_template::ReceiveNPDUNumber_template()
{
}

ReceiveNPDUNumber_template::ReceiveNPDUNumber_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

ReceiveNPDUNumber_template::ReceiveNPDUNumber_template(const ReceiveNPDUNumber& other_value)
{
copy_value(other_value);
}

ReceiveNPDUNumber_template::ReceiveNPDUNumber_template(const OPTIONAL<ReceiveNPDUNumber>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ReceiveNPDUNumber&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumber from an unbound optional field.");
}
}

ReceiveNPDUNumber_template::ReceiveNPDUNumber_template(ReceiveNPDUNumber_template* p_precondition, ReceiveNPDUNumber_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

ReceiveNPDUNumber_template::ReceiveNPDUNumber_template(Dynamic_Match_Interface<ReceiveNPDUNumber>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<ReceiveNPDUNumber>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

ReceiveNPDUNumber_template::ReceiveNPDUNumber_template(const ReceiveNPDUNumber_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

ReceiveNPDUNumber_template::~ReceiveNPDUNumber_template()
{
clean_up();
}

ReceiveNPDUNumber_template& ReceiveNPDUNumber_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

ReceiveNPDUNumber_template& ReceiveNPDUNumber_template::operator=(const ReceiveNPDUNumber& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

ReceiveNPDUNumber_template& ReceiveNPDUNumber_template::operator=(const OPTIONAL<ReceiveNPDUNumber>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ReceiveNPDUNumber&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumber.");
}
return *this;
}

ReceiveNPDUNumber_template& ReceiveNPDUNumber_template::operator=(const ReceiveNPDUNumber_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean ReceiveNPDUNumber_template::match(const ReceiveNPDUNumber& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.sapi().is_bound()) return FALSE;
if(!single_value->field_sapi.match(other_value.sapi(), legacy))return FALSE;
if(!other_value.numberValue().is_bound()) return FALSE;
if(!single_value->field_numberValue.match(other_value.numberValue(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumber.");
}
return FALSE;
}

boolean ReceiveNPDUNumber_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_sapi.is_bound()
 || single_value->field_numberValue.is_bound();
}

boolean ReceiveNPDUNumber_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_sapi.is_value()
 && single_value->field_numberValue.is_value();
}

void ReceiveNPDUNumber_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

ReceiveNPDUNumber ReceiveNPDUNumber_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumber.");
ReceiveNPDUNumber ret_val;
if (single_value->field_sapi.is_bound()) {
ret_val.sapi() = single_value->field_sapi.valueof();
}
if (single_value->field_numberValue.is_bound()) {
ret_val.numberValue() = single_value->field_numberValue.valueof();
}
return ret_val;
}

void ReceiveNPDUNumber_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumber.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new ReceiveNPDUNumber_template[list_length];
}

ReceiveNPDUNumber_template& ReceiveNPDUNumber_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumber.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumber.");
return value_list.list_value[list_index];
}

BITSTRING_template& ReceiveNPDUNumber_template::sapi()
{
set_specific();
return single_value->field_sapi;
}

const BITSTRING_template& ReceiveNPDUNumber_template::sapi() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field sapi of a non-specific template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumber.");
return single_value->field_sapi;
}

BITSTRING_template& ReceiveNPDUNumber_template::numberValue()
{
set_specific();
return single_value->field_numberValue;
}

const BITSTRING_template& ReceiveNPDUNumber_template::numberValue() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field numberValue of a non-specific template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumber.");
return single_value->field_numberValue;
}

int ReceiveNPDUNumber_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumber which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 2;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumber containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumber containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumber containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumber containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumber containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumber containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumber containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumber containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumber.");
  }
  return 0;
}

void ReceiveNPDUNumber_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ sapi := ");
single_value->field_sapi.log();
TTCN_Logger::log_event_str(", numberValue := ");
single_value->field_numberValue.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void ReceiveNPDUNumber_template::log_match(const ReceiveNPDUNumber& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_sapi.match(match_value.sapi(), legacy)){
TTCN_Logger::log_logmatch_info(".sapi");
single_value->field_sapi.log_match(match_value.sapi(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_numberValue.match(match_value.numberValue(), legacy)){
TTCN_Logger::log_logmatch_info(".numberValue");
single_value->field_numberValue.log_match(match_value.numberValue(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ sapi := ");
single_value->field_sapi.log_match(match_value.sapi(), legacy);
TTCN_Logger::log_event_str(", numberValue := ");
single_value->field_numberValue.log_match(match_value.numberValue(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void ReceiveNPDUNumber_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (sapi().is_bound()) sapi().set_implicit_omit();
if (numberValue().is_bound()) numberValue().set_implicit_omit();
}

void ReceiveNPDUNumber_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_sapi.encode_text(text_buf);
single_value->field_numberValue.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumber.");
}
}

void ReceiveNPDUNumber_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_sapi.decode_text(text_buf);
single_value->field_numberValue.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new ReceiveNPDUNumber_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumber.");
}
}

void ReceiveNPDUNumber_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    ReceiveNPDUNumber_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumber has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) sapi().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) numberValue().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "sapi")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          sapi().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "numberValue")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          numberValue().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.ReceiveNPDUNumber: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    ReceiveNPDUNumber_template* precondition = new ReceiveNPDUNumber_template;
    precondition->set_param(*param.get_elem(0));
    ReceiveNPDUNumber_template* implied_template = new ReceiveNPDUNumber_template;
    implied_template->set_param(*param.get_elem(1));
    *this = ReceiveNPDUNumber_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_GMM_SM_Types.ReceiveNPDUNumber");
  }
  is_ifpresent = param.get_ifpresent();
}

void ReceiveNPDUNumber_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_sapi.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.ReceiveNPDUNumber");
single_value->field_numberValue.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.ReceiveNPDUNumber");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_GMM_SM_Types.ReceiveNPDUNumber");
}

boolean ReceiveNPDUNumber_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean ReceiveNPDUNumber_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

ReceiveNPDUNumbersListTLV::ReceiveNPDUNumbersListTLV()
{
}

ReceiveNPDUNumbersListTLV::ReceiveNPDUNumbersListTLV(const OCTETSTRING& par_elementIdentifier,
    const INTEGER& par_lengthIndicator,
    const ReceiveNPDUNumbersListV& par_numberList)
  :   field_elementIdentifier(par_elementIdentifier),
  field_lengthIndicator(par_lengthIndicator),
  field_numberList(par_numberList)
{
}

ReceiveNPDUNumbersListTLV::ReceiveNPDUNumbersListTLV(const ReceiveNPDUNumbersListTLV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV.");
if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
else field_elementIdentifier.clean_up();
if (other_value.lengthIndicator().is_bound()) field_lengthIndicator = other_value.lengthIndicator();
else field_lengthIndicator.clean_up();
if (other_value.numberList().is_bound()) field_numberList = other_value.numberList();
else field_numberList.clean_up();
}

void ReceiveNPDUNumbersListTLV::clean_up()
{
field_elementIdentifier.clean_up();
field_lengthIndicator.clean_up();
field_numberList.clean_up();
}

const TTCN_Typedescriptor_t* ReceiveNPDUNumbersListTLV::get_descriptor() const { return &ReceiveNPDUNumbersListTLV_descr_; }
ReceiveNPDUNumbersListTLV& ReceiveNPDUNumbersListTLV::operator=(const ReceiveNPDUNumbersListTLV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV.");
  if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
  else field_elementIdentifier.clean_up();
  if (other_value.lengthIndicator().is_bound()) field_lengthIndicator = other_value.lengthIndicator();
  else field_lengthIndicator.clean_up();
  if (other_value.numberList().is_bound()) field_numberList = other_value.numberList();
  else field_numberList.clean_up();
}
return *this;
}

boolean ReceiveNPDUNumbersListTLV::operator==(const ReceiveNPDUNumbersListTLV& other_value) const
{
return field_elementIdentifier==other_value.field_elementIdentifier
  && field_lengthIndicator==other_value.field_lengthIndicator
  && field_numberList==other_value.field_numberList;
}

boolean ReceiveNPDUNumbersListTLV::is_bound() const
{
return (field_elementIdentifier.is_bound())
  || (field_lengthIndicator.is_bound())
  || (field_numberList.is_bound());
}
boolean ReceiveNPDUNumbersListTLV::is_value() const
{
return field_elementIdentifier.is_value()
  && field_lengthIndicator.is_value()
  && field_numberList.is_value();
}
void ReceiveNPDUNumbersListTLV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ elementIdentifier := ");
field_elementIdentifier.log();
TTCN_Logger::log_event_str(", lengthIndicator := ");
field_lengthIndicator.log();
TTCN_Logger::log_event_str(", numberList := ");
field_numberList.log();
TTCN_Logger::log_event_str(" }");
}

void ReceiveNPDUNumbersListTLV::set_implicit_omit()
{
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (lengthIndicator().is_bound()) lengthIndicator().set_implicit_omit();
if (numberList().is_bound()) numberList().set_implicit_omit();
}

void ReceiveNPDUNumbersListTLV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (3<param.get_size()) {
      param.error("record value of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV has 3 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) lengthIndicator().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) numberList().set_param(*param.get_elem(2));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "lengthIndicator")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          lengthIndicator().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "numberList")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          numberList().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV");
  }
}

void ReceiveNPDUNumbersListTLV::encode_text(Text_Buf& text_buf) const
{
field_elementIdentifier.encode_text(text_buf);
field_lengthIndicator.encode_text(text_buf);
field_numberList.encode_text(text_buf);
}

void ReceiveNPDUNumbersListTLV::decode_text(Text_Buf& text_buf)
{
field_elementIdentifier.decode_text(text_buf);
field_lengthIndicator.decode_text(text_buf);
field_numberList.decode_text(text_buf);
}

void ReceiveNPDUNumbersListTLV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void ReceiveNPDUNumbersListTLV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int ReceiveNPDUNumbersListTLV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  int value_of_length_field1 = 0;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_elementIdentifier.RAW_decode(General__Types::OCT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, ReceiveNPDUNumbersListTLV_lengthIndicator_descr_.raw->forceomit);
  decoded_field_length = field_lengthIndicator.RAW_decode(ReceiveNPDUNumbersListTLV_lengthIndicator_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  INTEGER tmp1 = field_lengthIndicator.convert_to_Integer(ReceiveNPDUNumbersListTLV_lengthIndicator_descr_);
  field_lengthIndicator = tmp1;
  value_of_length_field1 += tmp1.get_long_long_val() * 8;
  RAW_Force_Omit field_2_force_omit(2, force_omit, ReceiveNPDUNumbersListTLV_numberList_descr_.raw->forceomit);
  decoded_field_length = field_numberList.RAW_decode(ReceiveNPDUNumbersListTLV_numberList_descr_, p_buf, min_of_ints(2, limit, value_of_length_field1), local_top_order, no_err, -1, TRUE, &field_2_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  value_of_length_field1 -= decoded_field_length;
  if (field_elementIdentifier !=  os_2) return -1;
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int ReceiveNPDUNumbersListTLV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 3;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(3);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::OCT1_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, ReceiveNPDUNumbersListTLV_lengthIndicator_descr_.raw);
  myleaf.body.node.nodes[2] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 2, ReceiveNPDUNumbersListTLV_numberList_descr_.raw);
  encoded_length += field_elementIdentifier.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += 8;
  myleaf.body.node.nodes[1]->calc = CALC_LENGTH;
  myleaf.body.node.nodes[1]->coding_descr = &ReceiveNPDUNumbersListTLV_lengthIndicator_descr_;
  myleaf.body.node.nodes[1]->calcof.lengthto.num_of_fields = 1;
  myleaf.body.node.nodes[1]->calcof.lengthto.unit = 8;
  myleaf.body.node.nodes[1]->calcof.lengthto.offset = 0;
  myleaf.body.node.nodes[1]->calcof.lengthto.fields = init_lengthto_fields_list(1);
  myleaf.body.node.nodes[1]->length = 8;
  myleaf.body.node.nodes[1]->calcof.lengthto.fields[0].level = myleaf.body.node.nodes[2]->curr_pos.level;
  myleaf.body.node.nodes[1]->calcof.lengthto.fields[0].pos = myleaf.body.node.nodes[2]->curr_pos.pos;
  encoded_length += field_numberList.RAW_encode(ReceiveNPDUNumbersListTLV_numberList_descr_, *myleaf.body.node.nodes[2]);
  if (field_elementIdentifier !=  os_2) {
  RAW_enc_tree* temp_leaf;
  {
  RAW_enc_tr_pos pr_pos0;
  pr_pos0.level=myleaf.curr_pos.level+1;
  int new_pos0[]={0};
  pr_pos0.pos=init_new_tree_pos(myleaf.curr_pos,1,new_pos0);
  temp_leaf = myleaf.get_node(pr_pos0);
  if(temp_leaf != NULL){
   os_2.RAW_encode(General__Types::OCT1_descr_,*temp_leaf);
  } else {
    TTCN_EncDec_ErrorContext::error
      (TTCN_EncDec::ET_OMITTED_TAG, "Encoding a tagged, but omitted value.");
  }
  free_tree_pos(pr_pos0.pos);
  }
  }
  return myleaf.length = encoded_length;
}

struct ReceiveNPDUNumbersListTLV_template::single_value_struct {
OCTETSTRING_template field_elementIdentifier;
INTEGER_template field_lengthIndicator;
ReceiveNPDUNumbersListV_template field_numberList;
};

void ReceiveNPDUNumbersListTLV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_elementIdentifier = ANY_VALUE;
single_value->field_lengthIndicator = ANY_VALUE;
single_value->field_numberList = ANY_VALUE;
}
}
}

void ReceiveNPDUNumbersListTLV_template::copy_value(const ReceiveNPDUNumbersListTLV& other_value)
{
single_value = new single_value_struct;
if (other_value.elementIdentifier().is_bound()) {
  single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
  single_value->field_elementIdentifier.clean_up();
}
if (other_value.lengthIndicator().is_bound()) {
  single_value->field_lengthIndicator = other_value.lengthIndicator();
} else {
  single_value->field_lengthIndicator.clean_up();
}
if (other_value.numberList().is_bound()) {
  single_value->field_numberList = other_value.numberList();
} else {
  single_value->field_numberList.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void ReceiveNPDUNumbersListTLV_template::copy_template(const ReceiveNPDUNumbersListTLV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.elementIdentifier().get_selection()) {
single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
single_value->field_elementIdentifier.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.lengthIndicator().get_selection()) {
single_value->field_lengthIndicator = other_value.lengthIndicator();
} else {
single_value->field_lengthIndicator.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.numberList().get_selection()) {
single_value->field_numberList = other_value.numberList();
} else {
single_value->field_numberList.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new ReceiveNPDUNumbersListTLV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new ReceiveNPDUNumbersListTLV_template(*other_value.implication_.precondition);
implication_.implied_template = new ReceiveNPDUNumbersListTLV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV.");
break;
}
set_selection(other_value);
}

ReceiveNPDUNumbersListTLV_template::ReceiveNPDUNumbersListTLV_template()
{
}

ReceiveNPDUNumbersListTLV_template::ReceiveNPDUNumbersListTLV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

ReceiveNPDUNumbersListTLV_template::ReceiveNPDUNumbersListTLV_template(const ReceiveNPDUNumbersListTLV& other_value)
{
copy_value(other_value);
}

ReceiveNPDUNumbersListTLV_template::ReceiveNPDUNumbersListTLV_template(const OPTIONAL<ReceiveNPDUNumbersListTLV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ReceiveNPDUNumbersListTLV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV from an unbound optional field.");
}
}

ReceiveNPDUNumbersListTLV_template::ReceiveNPDUNumbersListTLV_template(ReceiveNPDUNumbersListTLV_template* p_precondition, ReceiveNPDUNumbersListTLV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

ReceiveNPDUNumbersListTLV_template::ReceiveNPDUNumbersListTLV_template(Dynamic_Match_Interface<ReceiveNPDUNumbersListTLV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<ReceiveNPDUNumbersListTLV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

ReceiveNPDUNumbersListTLV_template::ReceiveNPDUNumbersListTLV_template(const ReceiveNPDUNumbersListTLV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

ReceiveNPDUNumbersListTLV_template::~ReceiveNPDUNumbersListTLV_template()
{
clean_up();
}

ReceiveNPDUNumbersListTLV_template& ReceiveNPDUNumbersListTLV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

ReceiveNPDUNumbersListTLV_template& ReceiveNPDUNumbersListTLV_template::operator=(const ReceiveNPDUNumbersListTLV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

ReceiveNPDUNumbersListTLV_template& ReceiveNPDUNumbersListTLV_template::operator=(const OPTIONAL<ReceiveNPDUNumbersListTLV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ReceiveNPDUNumbersListTLV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV.");
}
return *this;
}

ReceiveNPDUNumbersListTLV_template& ReceiveNPDUNumbersListTLV_template::operator=(const ReceiveNPDUNumbersListTLV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean ReceiveNPDUNumbersListTLV_template::match(const ReceiveNPDUNumbersListTLV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.elementIdentifier().is_bound()) return FALSE;
if(!single_value->field_elementIdentifier.match(other_value.elementIdentifier(), legacy))return FALSE;
if(!other_value.lengthIndicator().is_bound()) return FALSE;
if(!single_value->field_lengthIndicator.match(other_value.lengthIndicator(), legacy))return FALSE;
if(!other_value.numberList().is_bound()) return FALSE;
if(!single_value->field_numberList.match(other_value.numberList(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV.");
}
return FALSE;
}

boolean ReceiveNPDUNumbersListTLV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_elementIdentifier.is_bound()
 || single_value->field_lengthIndicator.is_bound()
 || single_value->field_numberList.is_bound();
}

boolean ReceiveNPDUNumbersListTLV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_elementIdentifier.is_value()
 && single_value->field_lengthIndicator.is_value()
 && single_value->field_numberList.is_value();
}

void ReceiveNPDUNumbersListTLV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

ReceiveNPDUNumbersListTLV ReceiveNPDUNumbersListTLV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV.");
ReceiveNPDUNumbersListTLV ret_val;
if (single_value->field_elementIdentifier.is_bound()) {
ret_val.elementIdentifier() = single_value->field_elementIdentifier.valueof();
}
if (single_value->field_lengthIndicator.is_bound()) {
ret_val.lengthIndicator() = single_value->field_lengthIndicator.valueof();
}
if (single_value->field_numberList.is_bound()) {
ret_val.numberList() = single_value->field_numberList.valueof();
}
return ret_val;
}

void ReceiveNPDUNumbersListTLV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new ReceiveNPDUNumbersListTLV_template[list_length];
}

ReceiveNPDUNumbersListTLV_template& ReceiveNPDUNumbersListTLV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV.");
return value_list.list_value[list_index];
}

OCTETSTRING_template& ReceiveNPDUNumbersListTLV_template::elementIdentifier()
{
set_specific();
return single_value->field_elementIdentifier;
}

const OCTETSTRING_template& ReceiveNPDUNumbersListTLV_template::elementIdentifier() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field elementIdentifier of a non-specific template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV.");
return single_value->field_elementIdentifier;
}

INTEGER_template& ReceiveNPDUNumbersListTLV_template::lengthIndicator()
{
set_specific();
return single_value->field_lengthIndicator;
}

const INTEGER_template& ReceiveNPDUNumbersListTLV_template::lengthIndicator() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field lengthIndicator of a non-specific template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV.");
return single_value->field_lengthIndicator;
}

ReceiveNPDUNumbersListV_template& ReceiveNPDUNumbersListTLV_template::numberList()
{
set_specific();
return single_value->field_numberList;
}

const ReceiveNPDUNumbersListV_template& ReceiveNPDUNumbersListTLV_template::numberList() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field numberList of a non-specific template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV.");
return single_value->field_numberList;
}

int ReceiveNPDUNumbersListTLV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 3;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV.");
  }
  return 0;
}

void ReceiveNPDUNumbersListTLV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log();
TTCN_Logger::log_event_str(", lengthIndicator := ");
single_value->field_lengthIndicator.log();
TTCN_Logger::log_event_str(", numberList := ");
single_value->field_numberList.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void ReceiveNPDUNumbersListTLV_template::log_match(const ReceiveNPDUNumbersListTLV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_elementIdentifier.match(match_value.elementIdentifier(), legacy)){
TTCN_Logger::log_logmatch_info(".elementIdentifier");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_lengthIndicator.match(match_value.lengthIndicator(), legacy)){
TTCN_Logger::log_logmatch_info(".lengthIndicator");
single_value->field_lengthIndicator.log_match(match_value.lengthIndicator(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_numberList.match(match_value.numberList(), legacy)){
TTCN_Logger::log_logmatch_info(".numberList");
single_value->field_numberList.log_match(match_value.numberList(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::log_event_str(", lengthIndicator := ");
single_value->field_lengthIndicator.log_match(match_value.lengthIndicator(), legacy);
TTCN_Logger::log_event_str(", numberList := ");
single_value->field_numberList.log_match(match_value.numberList(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void ReceiveNPDUNumbersListTLV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (lengthIndicator().is_bound()) lengthIndicator().set_implicit_omit();
if (numberList().is_bound()) numberList().set_implicit_omit();
}

void ReceiveNPDUNumbersListTLV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_elementIdentifier.encode_text(text_buf);
single_value->field_lengthIndicator.encode_text(text_buf);
single_value->field_numberList.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV.");
}
}

void ReceiveNPDUNumbersListTLV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_elementIdentifier.decode_text(text_buf);
single_value->field_lengthIndicator.decode_text(text_buf);
single_value->field_numberList.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new ReceiveNPDUNumbersListTLV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV.");
}
}

void ReceiveNPDUNumbersListTLV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    ReceiveNPDUNumbersListTLV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (3<param.get_size()) {
      param.error("record template of type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV has 3 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) lengthIndicator().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) numberList().set_param(*param.get_elem(2));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "lengthIndicator")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          lengthIndicator().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "numberList")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          numberList().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    ReceiveNPDUNumbersListTLV_template* precondition = new ReceiveNPDUNumbersListTLV_template;
    precondition->set_param(*param.get_elem(0));
    ReceiveNPDUNumbersListTLV_template* implied_template = new ReceiveNPDUNumbersListTLV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = ReceiveNPDUNumbersListTLV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV");
  }
  is_ifpresent = param.get_ifpresent();
}

void ReceiveNPDUNumbersListTLV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_elementIdentifier.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV");
single_value->field_lengthIndicator.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV");
single_value->field_numberList.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_GMM_SM_Types.ReceiveNPDUNumbersListTLV");
}

boolean ReceiveNPDUNumbersListTLV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean ReceiveNPDUNumbersListTLV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

MSNetworkCapabilityV::MSNetworkCapabilityV()
{
}

MSNetworkCapabilityV::MSNetworkCapabilityV(const BITSTRING& par_gea1bit,
    const BITSTRING& par_smCapabilitiesviaDedicatedChannels,
    const BITSTRING& par_smCapabilitiesviaGPRSChannels,
    const BITSTRING& par_ucs2Support,
    const BITSTRING& par_ssScreeningIndicator,
    const OPTIONAL< BITSTRING >& par_solSACapability,
    const OPTIONAL< BITSTRING >& par_revisionLevelIndicatior,
    const OPTIONAL< BITSTRING >& par_pFCFeatureMode,
    const OPTIONAL< BITSTRING >& par_extendedGEAbits,
    const OPTIONAL< BITSTRING >& par_lcsVAcapability,
    const OPTIONAL< BITSTRING >& par_pSInterRATHOtoUTRANIuModeCapability,
    const OPTIONAL< BITSTRING >& par_pSInterRATHOtoEUTRANS1ModeCapability,
    const OPTIONAL< BITSTRING >& par_eMMCombinedProceduresCapability,
    const OPTIONAL< BITSTRING >& par_iSRSupport,
    const OPTIONAL< BITSTRING >& par_sRVCCtoGERANUTRANCapability,
    const OPTIONAL< BITSTRING >& par_ePCCapability,
    const OPTIONAL< BITSTRING >& par_nFCapability,
    const OPTIONAL< BITSTRING >& par_gERANNertworkSharingCapability,
    const OPTIONAL< OCTETSTRING >& par_spare__octets)
  :   field_gea1bit(par_gea1bit),
  field_smCapabilitiesviaDedicatedChannels(par_smCapabilitiesviaDedicatedChannels),
  field_smCapabilitiesviaGPRSChannels(par_smCapabilitiesviaGPRSChannels),
  field_ucs2Support(par_ucs2Support),
  field_ssScreeningIndicator(par_ssScreeningIndicator),
  field_solSACapability(par_solSACapability),
  field_revisionLevelIndicatior(par_revisionLevelIndicatior),
  field_pFCFeatureMode(par_pFCFeatureMode),
  field_extendedGEAbits(par_extendedGEAbits),
  field_lcsVAcapability(par_lcsVAcapability),
  field_pSInterRATHOtoUTRANIuModeCapability(par_pSInterRATHOtoUTRANIuModeCapability),
  field_pSInterRATHOtoEUTRANS1ModeCapability(par_pSInterRATHOtoEUTRANS1ModeCapability),
  field_eMMCombinedProceduresCapability(par_eMMCombinedProceduresCapability),
  field_iSRSupport(par_iSRSupport),
  field_sRVCCtoGERANUTRANCapability(par_sRVCCtoGERANUTRANCapability),
  field_ePCCapability(par_ePCCapability),
  field_nFCapability(par_nFCapability),
  field_gERANNertworkSharingCapability(par_gERANNertworkSharingCapability),
  field_spare__octets(par_spare__octets)
{
}

MSNetworkCapabilityV::MSNetworkCapabilityV(const MSNetworkCapabilityV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV.");
if (other_value.gea1bit().is_bound()) field_gea1bit = other_value.gea1bit();
else field_gea1bit.clean_up();
if (other_value.smCapabilitiesviaDedicatedChannels().is_bound()) field_smCapabilitiesviaDedicatedChannels = other_value.smCapabilitiesviaDedicatedChannels();
else field_smCapabilitiesviaDedicatedChannels.clean_up();
if (other_value.smCapabilitiesviaGPRSChannels().is_bound()) field_smCapabilitiesviaGPRSChannels = other_value.smCapabilitiesviaGPRSChannels();
else field_smCapabilitiesviaGPRSChannels.clean_up();
if (other_value.ucs2Support().is_bound()) field_ucs2Support = other_value.ucs2Support();
else field_ucs2Support.clean_up();
if (other_value.ssScreeningIndicator().is_bound()) field_ssScreeningIndicator = other_value.ssScreeningIndicator();
else field_ssScreeningIndicator.clean_up();
if (other_value.solSACapability().is_bound()) field_solSACapability = other_value.solSACapability();
else field_solSACapability.clean_up();
if (other_value.revisionLevelIndicatior().is_bound()) field_revisionLevelIndicatior = other_value.revisionLevelIndicatior();
else field_revisionLevelIndicatior.clean_up();
if (other_value.pFCFeatureMode().is_bound()) field_pFCFeatureMode = other_value.pFCFeatureMode();
else field_pFCFeatureMode.clean_up();
if (other_value.extendedGEAbits().is_bound()) field_extendedGEAbits = other_value.extendedGEAbits();
else field_extendedGEAbits.clean_up();
if (other_value.lcsVAcapability().is_bound()) field_lcsVAcapability = other_value.lcsVAcapability();
else field_lcsVAcapability.clean_up();
if (other_value.pSInterRATHOtoUTRANIuModeCapability().is_bound()) field_pSInterRATHOtoUTRANIuModeCapability = other_value.pSInterRATHOtoUTRANIuModeCapability();
else field_pSInterRATHOtoUTRANIuModeCapability.clean_up();
if (other_value.pSInterRATHOtoEUTRANS1ModeCapability().is_bound()) field_pSInterRATHOtoEUTRANS1ModeCapability = other_value.pSInterRATHOtoEUTRANS1ModeCapability();
else field_pSInterRATHOtoEUTRANS1ModeCapability.clean_up();
if (other_value.eMMCombinedProceduresCapability().is_bound()) field_eMMCombinedProceduresCapability = other_value.eMMCombinedProceduresCapability();
else field_eMMCombinedProceduresCapability.clean_up();
if (other_value.iSRSupport().is_bound()) field_iSRSupport = other_value.iSRSupport();
else field_iSRSupport.clean_up();
if (other_value.sRVCCtoGERANUTRANCapability().is_bound()) field_sRVCCtoGERANUTRANCapability = other_value.sRVCCtoGERANUTRANCapability();
else field_sRVCCtoGERANUTRANCapability.clean_up();
if (other_value.ePCCapability().is_bound()) field_ePCCapability = other_value.ePCCapability();
else field_ePCCapability.clean_up();
if (other_value.nFCapability().is_bound()) field_nFCapability = other_value.nFCapability();
else field_nFCapability.clean_up();
if (other_value.gERANNertworkSharingCapability().is_bound()) field_gERANNertworkSharingCapability = other_value.gERANNertworkSharingCapability();
else field_gERANNertworkSharingCapability.clean_up();
if (other_value.spare__octets().is_bound()) field_spare__octets = other_value.spare__octets();
else field_spare__octets.clean_up();
}

void MSNetworkCapabilityV::clean_up()
{
field_gea1bit.clean_up();
field_smCapabilitiesviaDedicatedChannels.clean_up();
field_smCapabilitiesviaGPRSChannels.clean_up();
field_ucs2Support.clean_up();
field_ssScreeningIndicator.clean_up();
field_solSACapability.clean_up();
field_revisionLevelIndicatior.clean_up();
field_pFCFeatureMode.clean_up();
field_extendedGEAbits.clean_up();
field_lcsVAcapability.clean_up();
field_pSInterRATHOtoUTRANIuModeCapability.clean_up();
field_pSInterRATHOtoEUTRANS1ModeCapability.clean_up();
field_eMMCombinedProceduresCapability.clean_up();
field_iSRSupport.clean_up();
field_sRVCCtoGERANUTRANCapability.clean_up();
field_ePCCapability.clean_up();
field_nFCapability.clean_up();
field_gERANNertworkSharingCapability.clean_up();
field_spare__octets.clean_up();
}

const TTCN_Typedescriptor_t* MSNetworkCapabilityV::get_descriptor() const { return &MSNetworkCapabilityV_descr_; }
MSNetworkCapabilityV& MSNetworkCapabilityV::operator=(const MSNetworkCapabilityV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV.");
  if (other_value.gea1bit().is_bound()) field_gea1bit = other_value.gea1bit();
  else field_gea1bit.clean_up();
  if (other_value.smCapabilitiesviaDedicatedChannels().is_bound()) field_smCapabilitiesviaDedicatedChannels = other_value.smCapabilitiesviaDedicatedChannels();
  else field_smCapabilitiesviaDedicatedChannels.clean_up();
  if (other_value.smCapabilitiesviaGPRSChannels().is_bound()) field_smCapabilitiesviaGPRSChannels = other_value.smCapabilitiesviaGPRSChannels();
  else field_smCapabilitiesviaGPRSChannels.clean_up();
  if (other_value.ucs2Support().is_bound()) field_ucs2Support = other_value.ucs2Support();
  else field_ucs2Support.clean_up();
  if (other_value.ssScreeningIndicator().is_bound()) field_ssScreeningIndicator = other_value.ssScreeningIndicator();
  else field_ssScreeningIndicator.clean_up();
  if (other_value.solSACapability().is_bound()) field_solSACapability = other_value.solSACapability();
  else field_solSACapability.clean_up();
  if (other_value.revisionLevelIndicatior().is_bound()) field_revisionLevelIndicatior = other_value.revisionLevelIndicatior();
  else field_revisionLevelIndicatior.clean_up();
  if (other_value.pFCFeatureMode().is_bound()) field_pFCFeatureMode = other_value.pFCFeatureMode();
  else field_pFCFeatureMode.clean_up();
  if (other_value.extendedGEAbits().is_bound()) field_extendedGEAbits = other_value.extendedGEAbits();
  else field_extendedGEAbits.clean_up();
  if (other_value.lcsVAcapability().is_bound()) field_lcsVAcapability = other_value.lcsVAcapability();
  else field_lcsVAcapability.clean_up();
  if (other_value.pSInterRATHOtoUTRANIuModeCapability().is_bound()) field_pSInterRATHOtoUTRANIuModeCapability = other_value.pSInterRATHOtoUTRANIuModeCapability();
  else field_pSInterRATHOtoUTRANIuModeCapability.clean_up();
  if (other_value.pSInterRATHOtoEUTRANS1ModeCapability().is_bound()) field_pSInterRATHOtoEUTRANS1ModeCapability = other_value.pSInterRATHOtoEUTRANS1ModeCapability();
  else field_pSInterRATHOtoEUTRANS1ModeCapability.clean_up();
  if (other_value.eMMCombinedProceduresCapability().is_bound()) field_eMMCombinedProceduresCapability = other_value.eMMCombinedProceduresCapability();
  else field_eMMCombinedProceduresCapability.clean_up();
  if (other_value.iSRSupport().is_bound()) field_iSRSupport = other_value.iSRSupport();
  else field_iSRSupport.clean_up();
  if (other_value.sRVCCtoGERANUTRANCapability().is_bound()) field_sRVCCtoGERANUTRANCapability = other_value.sRVCCtoGERANUTRANCapability();
  else field_sRVCCtoGERANUTRANCapability.clean_up();
  if (other_value.ePCCapability().is_bound()) field_ePCCapability = other_value.ePCCapability();
  else field_ePCCapability.clean_up();
  if (other_value.nFCapability().is_bound()) field_nFCapability = other_value.nFCapability();
  else field_nFCapability.clean_up();
  if (other_value.gERANNertworkSharingCapability().is_bound()) field_gERANNertworkSharingCapability = other_value.gERANNertworkSharingCapability();
  else field_gERANNertworkSharingCapability.clean_up();
  if (other_value.spare__octets().is_bound()) field_spare__octets = other_value.spare__octets();
  else field_spare__octets.clean_up();
}
return *this;
}

boolean MSNetworkCapabilityV::operator==(const MSNetworkCapabilityV& other_value) const
{
return field_gea1bit==other_value.field_gea1bit
  && field_smCapabilitiesviaDedicatedChannels==other_value.field_smCapabilitiesviaDedicatedChannels
  && field_smCapabilitiesviaGPRSChannels==other_value.field_smCapabilitiesviaGPRSChannels
  && field_ucs2Support==other_value.field_ucs2Support
  && field_ssScreeningIndicator==other_value.field_ssScreeningIndicator
  && field_solSACapability==other_value.field_solSACapability
  && field_revisionLevelIndicatior==other_value.field_revisionLevelIndicatior
  && field_pFCFeatureMode==other_value.field_pFCFeatureMode
  && field_extendedGEAbits==other_value.field_extendedGEAbits
  && field_lcsVAcapability==other_value.field_lcsVAcapability
  && field_pSInterRATHOtoUTRANIuModeCapability==other_value.field_pSInterRATHOtoUTRANIuModeCapability
  && field_pSInterRATHOtoEUTRANS1ModeCapability==other_value.field_pSInterRATHOtoEUTRANS1ModeCapability
  && field_eMMCombinedProceduresCapability==other_value.field_eMMCombinedProceduresCapability
  && field_iSRSupport==other_value.field_iSRSupport
  && field_sRVCCtoGERANUTRANCapability==other_value.field_sRVCCtoGERANUTRANCapability
  && field_ePCCapability==other_value.field_ePCCapability
  && field_nFCapability==other_value.field_nFCapability
  && field_gERANNertworkSharingCapability==other_value.field_gERANNertworkSharingCapability
  && field_spare__octets==other_value.field_spare__octets;
}

boolean MSNetworkCapabilityV::is_bound() const
{
return (field_gea1bit.is_bound())
  || (field_smCapabilitiesviaDedicatedChannels.is_bound())
  || (field_smCapabilitiesviaGPRSChannels.is_bound())
  || (field_ucs2Support.is_bound())
  || (field_ssScreeningIndicator.is_bound())
  || (OPTIONAL_OMIT == field_solSACapability.get_selection() || field_solSACapability.is_bound())
  || (OPTIONAL_OMIT == field_revisionLevelIndicatior.get_selection() || field_revisionLevelIndicatior.is_bound())
  || (OPTIONAL_OMIT == field_pFCFeatureMode.get_selection() || field_pFCFeatureMode.is_bound())
  || (OPTIONAL_OMIT == field_extendedGEAbits.get_selection() || field_extendedGEAbits.is_bound())
  || (OPTIONAL_OMIT == field_lcsVAcapability.get_selection() || field_lcsVAcapability.is_bound())
  || (OPTIONAL_OMIT == field_pSInterRATHOtoUTRANIuModeCapability.get_selection() || field_pSInterRATHOtoUTRANIuModeCapability.is_bound())
  || (OPTIONAL_OMIT == field_pSInterRATHOtoEUTRANS1ModeCapability.get_selection() || field_pSInterRATHOtoEUTRANS1ModeCapability.is_bound())
  || (OPTIONAL_OMIT == field_eMMCombinedProceduresCapability.get_selection() || field_eMMCombinedProceduresCapability.is_bound())
  || (OPTIONAL_OMIT == field_iSRSupport.get_selection() || field_iSRSupport.is_bound())
  || (OPTIONAL_OMIT == field_sRVCCtoGERANUTRANCapability.get_selection() || field_sRVCCtoGERANUTRANCapability.is_bound())
  || (OPTIONAL_OMIT == field_ePCCapability.get_selection() || field_ePCCapability.is_bound())
  || (OPTIONAL_OMIT == field_nFCapability.get_selection() || field_nFCapability.is_bound())
  || (OPTIONAL_OMIT == field_gERANNertworkSharingCapability.get_selection() || field_gERANNertworkSharingCapability.is_bound())
  || (OPTIONAL_OMIT == field_spare__octets.get_selection() || field_spare__octets.is_bound());
}
boolean MSNetworkCapabilityV::is_value() const
{
return field_gea1bit.is_value()
  && field_smCapabilitiesviaDedicatedChannels.is_value()
  && field_smCapabilitiesviaGPRSChannels.is_value()
  && field_ucs2Support.is_value()
  && field_ssScreeningIndicator.is_value()
  && (OPTIONAL_OMIT == field_solSACapability.get_selection() || field_solSACapability.is_value())
  && (OPTIONAL_OMIT == field_revisionLevelIndicatior.get_selection() || field_revisionLevelIndicatior.is_value())
  && (OPTIONAL_OMIT == field_pFCFeatureMode.get_selection() || field_pFCFeatureMode.is_value())
  && (OPTIONAL_OMIT == field_extendedGEAbits.get_selection() || field_extendedGEAbits.is_value())
  && (OPTIONAL_OMIT == field_lcsVAcapability.get_selection() || field_lcsVAcapability.is_value())
  && (OPTIONAL_OMIT == field_pSInterRATHOtoUTRANIuModeCapability.get_selection() || field_pSInterRATHOtoUTRANIuModeCapability.is_value())
  && (OPTIONAL_OMIT == field_pSInterRATHOtoEUTRANS1ModeCapability.get_selection() || field_pSInterRATHOtoEUTRANS1ModeCapability.is_value())
  && (OPTIONAL_OMIT == field_eMMCombinedProceduresCapability.get_selection() || field_eMMCombinedProceduresCapability.is_value())
  && (OPTIONAL_OMIT == field_iSRSupport.get_selection() || field_iSRSupport.is_value())
  && (OPTIONAL_OMIT == field_sRVCCtoGERANUTRANCapability.get_selection() || field_sRVCCtoGERANUTRANCapability.is_value())
  && (OPTIONAL_OMIT == field_ePCCapability.get_selection() || field_ePCCapability.is_value())
  && (OPTIONAL_OMIT == field_nFCapability.get_selection() || field_nFCapability.is_value())
  && (OPTIONAL_OMIT == field_gERANNertworkSharingCapability.get_selection() || field_gERANNertworkSharingCapability.is_value())
  && (OPTIONAL_OMIT == field_spare__octets.get_selection() || field_spare__octets.is_value());
}
int MSNetworkCapabilityV::size_of() const
{
  int ret_val = 5;
  if (field_solSACapability.ispresent()) ret_val++;
  if (field_revisionLevelIndicatior.ispresent()) ret_val++;
  if (field_pFCFeatureMode.ispresent()) ret_val++;
  if (field_extendedGEAbits.ispresent()) ret_val++;
  if (field_lcsVAcapability.ispresent()) ret_val++;
  if (field_pSInterRATHOtoUTRANIuModeCapability.ispresent()) ret_val++;
  if (field_pSInterRATHOtoEUTRANS1ModeCapability.ispresent()) ret_val++;
  if (field_eMMCombinedProceduresCapability.ispresent()) ret_val++;
  if (field_iSRSupport.ispresent()) ret_val++;
  if (field_sRVCCtoGERANUTRANCapability.ispresent()) ret_val++;
  if (field_ePCCapability.ispresent()) ret_val++;
  if (field_nFCapability.ispresent()) ret_val++;
  if (field_gERANNertworkSharingCapability.ispresent()) ret_val++;
  if (field_spare__octets.ispresent()) ret_val++;
  return ret_val;
}

void MSNetworkCapabilityV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ gea1bit := ");
field_gea1bit.log();
TTCN_Logger::log_event_str(", smCapabilitiesviaDedicatedChannels := ");
field_smCapabilitiesviaDedicatedChannels.log();
TTCN_Logger::log_event_str(", smCapabilitiesviaGPRSChannels := ");
field_smCapabilitiesviaGPRSChannels.log();
TTCN_Logger::log_event_str(", ucs2Support := ");
field_ucs2Support.log();
TTCN_Logger::log_event_str(", ssScreeningIndicator := ");
field_ssScreeningIndicator.log();
TTCN_Logger::log_event_str(", solSACapability := ");
field_solSACapability.log();
TTCN_Logger::log_event_str(", revisionLevelIndicatior := ");
field_revisionLevelIndicatior.log();
TTCN_Logger::log_event_str(", pFCFeatureMode := ");
field_pFCFeatureMode.log();
TTCN_Logger::log_event_str(", extendedGEAbits := ");
field_extendedGEAbits.log();
TTCN_Logger::log_event_str(", lcsVAcapability := ");
field_lcsVAcapability.log();
TTCN_Logger::log_event_str(", pSInterRATHOtoUTRANIuModeCapability := ");
field_pSInterRATHOtoUTRANIuModeCapability.log();
TTCN_Logger::log_event_str(", pSInterRATHOtoEUTRANS1ModeCapability := ");
field_pSInterRATHOtoEUTRANS1ModeCapability.log();
TTCN_Logger::log_event_str(", eMMCombinedProceduresCapability := ");
field_eMMCombinedProceduresCapability.log();
TTCN_Logger::log_event_str(", iSRSupport := ");
field_iSRSupport.log();
TTCN_Logger::log_event_str(", sRVCCtoGERANUTRANCapability := ");
field_sRVCCtoGERANUTRANCapability.log();
TTCN_Logger::log_event_str(", ePCCapability := ");
field_ePCCapability.log();
TTCN_Logger::log_event_str(", nFCapability := ");
field_nFCapability.log();
TTCN_Logger::log_event_str(", gERANNertworkSharingCapability := ");
field_gERANNertworkSharingCapability.log();
TTCN_Logger::log_event_str(", spare_octets := ");
field_spare__octets.log();
TTCN_Logger::log_event_str(" }");
}

void MSNetworkCapabilityV::set_implicit_omit()
{
if (gea1bit().is_bound()) gea1bit().set_implicit_omit();
if (smCapabilitiesviaDedicatedChannels().is_bound()) smCapabilitiesviaDedicatedChannels().set_implicit_omit();
if (smCapabilitiesviaGPRSChannels().is_bound()) smCapabilitiesviaGPRSChannels().set_implicit_omit();
if (ucs2Support().is_bound()) ucs2Support().set_implicit_omit();
if (ssScreeningIndicator().is_bound()) ssScreeningIndicator().set_implicit_omit();
if (!solSACapability().is_bound()) solSACapability() = OMIT_VALUE;
else solSACapability().set_implicit_omit();
if (!revisionLevelIndicatior().is_bound()) revisionLevelIndicatior() = OMIT_VALUE;
else revisionLevelIndicatior().set_implicit_omit();
if (!pFCFeatureMode().is_bound()) pFCFeatureMode() = OMIT_VALUE;
else pFCFeatureMode().set_implicit_omit();
if (!extendedGEAbits().is_bound()) extendedGEAbits() = OMIT_VALUE;
else extendedGEAbits().set_implicit_omit();
if (!lcsVAcapability().is_bound()) lcsVAcapability() = OMIT_VALUE;
else lcsVAcapability().set_implicit_omit();
if (!pSInterRATHOtoUTRANIuModeCapability().is_bound()) pSInterRATHOtoUTRANIuModeCapability() = OMIT_VALUE;
else pSInterRATHOtoUTRANIuModeCapability().set_implicit_omit();
if (!pSInterRATHOtoEUTRANS1ModeCapability().is_bound()) pSInterRATHOtoEUTRANS1ModeCapability() = OMIT_VALUE;
else pSInterRATHOtoEUTRANS1ModeCapability().set_implicit_omit();
if (!eMMCombinedProceduresCapability().is_bound()) eMMCombinedProceduresCapability() = OMIT_VALUE;
else eMMCombinedProceduresCapability().set_implicit_omit();
if (!iSRSupport().is_bound()) iSRSupport() = OMIT_VALUE;
else iSRSupport().set_implicit_omit();
if (!sRVCCtoGERANUTRANCapability().is_bound()) sRVCCtoGERANUTRANCapability() = OMIT_VALUE;
else sRVCCtoGERANUTRANCapability().set_implicit_omit();
if (!ePCCapability().is_bound()) ePCCapability() = OMIT_VALUE;
else ePCCapability().set_implicit_omit();
if (!nFCapability().is_bound()) nFCapability() = OMIT_VALUE;
else nFCapability().set_implicit_omit();
if (!gERANNertworkSharingCapability().is_bound()) gERANNertworkSharingCapability() = OMIT_VALUE;
else gERANNertworkSharingCapability().set_implicit_omit();
if (!spare__octets().is_bound()) spare__octets() = OMIT_VALUE;
else spare__octets().set_implicit_omit();
}

void MSNetworkCapabilityV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (19<param.get_size()) {
      param.error("record value of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV has 19 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) gea1bit().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) smCapabilitiesviaDedicatedChannels().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) smCapabilitiesviaGPRSChannels().set_param(*param.get_elem(2));
    if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) ucs2Support().set_param(*param.get_elem(3));
    if (param.get_size()>4 && param.get_elem(4)->get_type()!=Module_Param::MP_NotUsed) ssScreeningIndicator().set_param(*param.get_elem(4));
    if (param.get_size()>5 && param.get_elem(5)->get_type()!=Module_Param::MP_NotUsed) solSACapability().set_param(*param.get_elem(5));
    if (param.get_size()>6 && param.get_elem(6)->get_type()!=Module_Param::MP_NotUsed) revisionLevelIndicatior().set_param(*param.get_elem(6));
    if (param.get_size()>7 && param.get_elem(7)->get_type()!=Module_Param::MP_NotUsed) pFCFeatureMode().set_param(*param.get_elem(7));
    if (param.get_size()>8 && param.get_elem(8)->get_type()!=Module_Param::MP_NotUsed) extendedGEAbits().set_param(*param.get_elem(8));
    if (param.get_size()>9 && param.get_elem(9)->get_type()!=Module_Param::MP_NotUsed) lcsVAcapability().set_param(*param.get_elem(9));
    if (param.get_size()>10 && param.get_elem(10)->get_type()!=Module_Param::MP_NotUsed) pSInterRATHOtoUTRANIuModeCapability().set_param(*param.get_elem(10));
    if (param.get_size()>11 && param.get_elem(11)->get_type()!=Module_Param::MP_NotUsed) pSInterRATHOtoEUTRANS1ModeCapability().set_param(*param.get_elem(11));
    if (param.get_size()>12 && param.get_elem(12)->get_type()!=Module_Param::MP_NotUsed) eMMCombinedProceduresCapability().set_param(*param.get_elem(12));
    if (param.get_size()>13 && param.get_elem(13)->get_type()!=Module_Param::MP_NotUsed) iSRSupport().set_param(*param.get_elem(13));
    if (param.get_size()>14 && param.get_elem(14)->get_type()!=Module_Param::MP_NotUsed) sRVCCtoGERANUTRANCapability().set_param(*param.get_elem(14));
    if (param.get_size()>15 && param.get_elem(15)->get_type()!=Module_Param::MP_NotUsed) ePCCapability().set_param(*param.get_elem(15));
    if (param.get_size()>16 && param.get_elem(16)->get_type()!=Module_Param::MP_NotUsed) nFCapability().set_param(*param.get_elem(16));
    if (param.get_size()>17 && param.get_elem(17)->get_type()!=Module_Param::MP_NotUsed) gERANNertworkSharingCapability().set_param(*param.get_elem(17));
    if (param.get_size()>18 && param.get_elem(18)->get_type()!=Module_Param::MP_NotUsed) spare__octets().set_param(*param.get_elem(18));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "gea1bit")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          gea1bit().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "smCapabilitiesviaDedicatedChannels")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          smCapabilitiesviaDedicatedChannels().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "smCapabilitiesviaGPRSChannels")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          smCapabilitiesviaGPRSChannels().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "ucs2Support")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          ucs2Support().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "ssScreeningIndicator")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          ssScreeningIndicator().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "solSACapability")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          solSACapability().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "revisionLevelIndicatior")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          revisionLevelIndicatior().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "pFCFeatureMode")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          pFCFeatureMode().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "extendedGEAbits")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          extendedGEAbits().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "lcsVAcapability")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          lcsVAcapability().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "pSInterRATHOtoUTRANIuModeCapability")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          pSInterRATHOtoUTRANIuModeCapability().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "pSInterRATHOtoEUTRANS1ModeCapability")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          pSInterRATHOtoEUTRANS1ModeCapability().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "eMMCombinedProceduresCapability")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          eMMCombinedProceduresCapability().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "iSRSupport")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          iSRSupport().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "sRVCCtoGERANUTRANCapability")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          sRVCCtoGERANUTRANCapability().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "ePCCapability")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          ePCCapability().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "nFCapability")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          nFCapability().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "gERANNertworkSharingCapability")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          gERANNertworkSharingCapability().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "spare_octets")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          spare__octets().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV");
  }
}

void MSNetworkCapabilityV::encode_text(Text_Buf& text_buf) const
{
field_gea1bit.encode_text(text_buf);
field_smCapabilitiesviaDedicatedChannels.encode_text(text_buf);
field_smCapabilitiesviaGPRSChannels.encode_text(text_buf);
field_ucs2Support.encode_text(text_buf);
field_ssScreeningIndicator.encode_text(text_buf);
field_solSACapability.encode_text(text_buf);
field_revisionLevelIndicatior.encode_text(text_buf);
field_pFCFeatureMode.encode_text(text_buf);
field_extendedGEAbits.encode_text(text_buf);
field_lcsVAcapability.encode_text(text_buf);
field_pSInterRATHOtoUTRANIuModeCapability.encode_text(text_buf);
field_pSInterRATHOtoEUTRANS1ModeCapability.encode_text(text_buf);
field_eMMCombinedProceduresCapability.encode_text(text_buf);
field_iSRSupport.encode_text(text_buf);
field_sRVCCtoGERANUTRANCapability.encode_text(text_buf);
field_ePCCapability.encode_text(text_buf);
field_nFCapability.encode_text(text_buf);
field_gERANNertworkSharingCapability.encode_text(text_buf);
field_spare__octets.encode_text(text_buf);
}

void MSNetworkCapabilityV::decode_text(Text_Buf& text_buf)
{
field_gea1bit.decode_text(text_buf);
field_smCapabilitiesviaDedicatedChannels.decode_text(text_buf);
field_smCapabilitiesviaGPRSChannels.decode_text(text_buf);
field_ucs2Support.decode_text(text_buf);
field_ssScreeningIndicator.decode_text(text_buf);
field_solSACapability.decode_text(text_buf);
field_revisionLevelIndicatior.decode_text(text_buf);
field_pFCFeatureMode.decode_text(text_buf);
field_extendedGEAbits.decode_text(text_buf);
field_lcsVAcapability.decode_text(text_buf);
field_pSInterRATHOtoUTRANIuModeCapability.decode_text(text_buf);
field_pSInterRATHOtoEUTRANS1ModeCapability.decode_text(text_buf);
field_eMMCombinedProceduresCapability.decode_text(text_buf);
field_iSRSupport.decode_text(text_buf);
field_sRVCCtoGERANUTRANCapability.decode_text(text_buf);
field_ePCCapability.decode_text(text_buf);
field_nFCapability.decode_text(text_buf);
field_gERANNertworkSharingCapability.decode_text(text_buf);
field_spare__octets.decode_text(text_buf);
}

void MSNetworkCapabilityV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void MSNetworkCapabilityV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int MSNetworkCapabilityV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, MSNetworkCapabilityV_gea1bit_descr_.raw->forceomit);
  decoded_field_length = field_gea1bit.RAW_decode(MSNetworkCapabilityV_gea1bit_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, MSNetworkCapabilityV_smCapabilitiesviaDedicatedChannels_descr_.raw->forceomit);
  decoded_field_length = field_smCapabilitiesviaDedicatedChannels.RAW_decode(MSNetworkCapabilityV_smCapabilitiesviaDedicatedChannels_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_2_force_omit(2, force_omit, MSNetworkCapabilityV_smCapabilitiesviaGPRSChannels_descr_.raw->forceomit);
  decoded_field_length = field_smCapabilitiesviaGPRSChannels.RAW_decode(MSNetworkCapabilityV_smCapabilitiesviaGPRSChannels_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_2_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_3_force_omit(3, force_omit, MSNetworkCapabilityV_ucs2Support_descr_.raw->forceomit);
  decoded_field_length = field_ucs2Support.RAW_decode(MSNetworkCapabilityV_ucs2Support_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_3_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_4_force_omit(4, force_omit, MSNetworkCapabilityV_ssScreeningIndicator_descr_.raw->forceomit);
  decoded_field_length = field_ssScreeningIndicator.RAW_decode(MSNetworkCapabilityV_ssScreeningIndicator_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_4_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  if (limit > 0){
  if (force_omit != NULL && (*force_omit)(5)) {
    field_solSACapability = OMIT_VALUE;
  }
  else {
  size_t fl_start_pos = p_buf.get_pos_bit();
  RAW_Force_Omit field_5_force_omit(5, force_omit, MSNetworkCapabilityV_solSACapability_descr_.raw->forceomit);
  decoded_field_length = field_solSACapability().RAW_decode(MSNetworkCapabilityV_solSACapability_descr_, p_buf, limit, local_top_order, TRUE, -1, TRUE, &field_5_force_omit);
  if (decoded_field_length < 1) {
  field_solSACapability = OMIT_VALUE;
  p_buf.set_pos_bit(fl_start_pos);
  } else {
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  }
  }
  }
  else field_solSACapability=OMIT_VALUE;
  if (limit > 0){
  if (force_omit != NULL && (*force_omit)(6)) {
    field_revisionLevelIndicatior = OMIT_VALUE;
  }
  else {
  size_t fl_start_pos = p_buf.get_pos_bit();
  RAW_Force_Omit field_6_force_omit(6, force_omit, MSNetworkCapabilityV_revisionLevelIndicatior_descr_.raw->forceomit);
  decoded_field_length = field_revisionLevelIndicatior().RAW_decode(MSNetworkCapabilityV_revisionLevelIndicatior_descr_, p_buf, limit, local_top_order, TRUE, -1, TRUE, &field_6_force_omit);
  if (decoded_field_length < 1) {
  field_revisionLevelIndicatior = OMIT_VALUE;
  p_buf.set_pos_bit(fl_start_pos);
  } else {
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  }
  }
  }
  else field_revisionLevelIndicatior=OMIT_VALUE;
  if (limit > 0){
  if (force_omit != NULL && (*force_omit)(7)) {
    field_pFCFeatureMode = OMIT_VALUE;
  }
  else {
  size_t fl_start_pos = p_buf.get_pos_bit();
  RAW_Force_Omit field_7_force_omit(7, force_omit, MSNetworkCapabilityV_pFCFeatureMode_descr_.raw->forceomit);
  decoded_field_length = field_pFCFeatureMode().RAW_decode(MSNetworkCapabilityV_pFCFeatureMode_descr_, p_buf, limit, local_top_order, TRUE, -1, TRUE, &field_7_force_omit);
  if (decoded_field_length < 1) {
  field_pFCFeatureMode = OMIT_VALUE;
  p_buf.set_pos_bit(fl_start_pos);
  } else {
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  }
  }
  }
  else field_pFCFeatureMode=OMIT_VALUE;
  if (limit > 0){
  if (force_omit != NULL && (*force_omit)(8)) {
    field_extendedGEAbits = OMIT_VALUE;
  }
  else {
  size_t fl_start_pos = p_buf.get_pos_bit();
  RAW_Force_Omit field_8_force_omit(8, force_omit, MSNetworkCapabilityV_extendedGEAbits_descr_.raw->forceomit);
  decoded_field_length = field_extendedGEAbits().RAW_decode(MSNetworkCapabilityV_extendedGEAbits_descr_, p_buf, limit, local_top_order, TRUE, -1, TRUE, &field_8_force_omit);
  if (decoded_field_length < 1) {
  field_extendedGEAbits = OMIT_VALUE;
  p_buf.set_pos_bit(fl_start_pos);
  } else {
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  }
  }
  }
  else field_extendedGEAbits=OMIT_VALUE;
  if (limit > 0){
  if (force_omit != NULL && (*force_omit)(9)) {
    field_lcsVAcapability = OMIT_VALUE;
  }
  else {
  size_t fl_start_pos = p_buf.get_pos_bit();
  RAW_Force_Omit field_9_force_omit(9, force_omit, MSNetworkCapabilityV_lcsVAcapability_descr_.raw->forceomit);
  decoded_field_length = field_lcsVAcapability().RAW_decode(MSNetworkCapabilityV_lcsVAcapability_descr_, p_buf, limit, local_top_order, TRUE, -1, TRUE, &field_9_force_omit);
  if (decoded_field_length < 1) {
  field_lcsVAcapability = OMIT_VALUE;
  p_buf.set_pos_bit(fl_start_pos);
  } else {
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  }
  }
  }
  else field_lcsVAcapability=OMIT_VALUE;
  if (limit > 0){
  if (force_omit != NULL && (*force_omit)(10)) {
    field_pSInterRATHOtoUTRANIuModeCapability = OMIT_VALUE;
  }
  else {
  size_t fl_start_pos = p_buf.get_pos_bit();
  RAW_Force_Omit field_10_force_omit(10, force_omit, MSNetworkCapabilityV_pSInterRATHOtoUTRANIuModeCapability_descr_.raw->forceomit);
  decoded_field_length = field_pSInterRATHOtoUTRANIuModeCapability().RAW_decode(MSNetworkCapabilityV_pSInterRATHOtoUTRANIuModeCapability_descr_, p_buf, limit, local_top_order, TRUE, -1, TRUE, &field_10_force_omit);
  if (decoded_field_length < 1) {
  field_pSInterRATHOtoUTRANIuModeCapability = OMIT_VALUE;
  p_buf.set_pos_bit(fl_start_pos);
  } else {
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  }
  }
  }
  else field_pSInterRATHOtoUTRANIuModeCapability=OMIT_VALUE;
  if (limit > 0){
  if (force_omit != NULL && (*force_omit)(11)) {
    field_pSInterRATHOtoEUTRANS1ModeCapability = OMIT_VALUE;
  }
  else {
  size_t fl_start_pos = p_buf.get_pos_bit();
  RAW_Force_Omit field_11_force_omit(11, force_omit, MSNetworkCapabilityV_pSInterRATHOtoEUTRANS1ModeCapability_descr_.raw->forceomit);
  decoded_field_length = field_pSInterRATHOtoEUTRANS1ModeCapability().RAW_decode(MSNetworkCapabilityV_pSInterRATHOtoEUTRANS1ModeCapability_descr_, p_buf, limit, local_top_order, TRUE, -1, TRUE, &field_11_force_omit);
  if (decoded_field_length < 1) {
  field_pSInterRATHOtoEUTRANS1ModeCapability = OMIT_VALUE;
  p_buf.set_pos_bit(fl_start_pos);
  } else {
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  }
  }
  }
  else field_pSInterRATHOtoEUTRANS1ModeCapability=OMIT_VALUE;
  if (limit > 0){
  if (force_omit != NULL && (*force_omit)(12)) {
    field_eMMCombinedProceduresCapability = OMIT_VALUE;
  }
  else {
  size_t fl_start_pos = p_buf.get_pos_bit();
  RAW_Force_Omit field_12_force_omit(12, force_omit, MSNetworkCapabilityV_eMMCombinedProceduresCapability_descr_.raw->forceomit);
  decoded_field_length = field_eMMCombinedProceduresCapability().RAW_decode(MSNetworkCapabilityV_eMMCombinedProceduresCapability_descr_, p_buf, limit, local_top_order, TRUE, -1, TRUE, &field_12_force_omit);
  if (decoded_field_length < 1) {
  field_eMMCombinedProceduresCapability = OMIT_VALUE;
  p_buf.set_pos_bit(fl_start_pos);
  } else {
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  }
  }
  }
  else field_eMMCombinedProceduresCapability=OMIT_VALUE;
  if (limit > 0){
  if (force_omit != NULL && (*force_omit)(13)) {
    field_iSRSupport = OMIT_VALUE;
  }
  else {
  size_t fl_start_pos = p_buf.get_pos_bit();
  RAW_Force_Omit field_13_force_omit(13, force_omit, MSNetworkCapabilityV_iSRSupport_descr_.raw->forceomit);
  decoded_field_length = field_iSRSupport().RAW_decode(MSNetworkCapabilityV_iSRSupport_descr_, p_buf, limit, local_top_order, TRUE, -1, TRUE, &field_13_force_omit);
  if (decoded_field_length < 1) {
  field_iSRSupport = OMIT_VALUE;
  p_buf.set_pos_bit(fl_start_pos);
  } else {
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  }
  }
  }
  else field_iSRSupport=OMIT_VALUE;
  if (limit > 0){
  if (force_omit != NULL && (*force_omit)(14)) {
    field_sRVCCtoGERANUTRANCapability = OMIT_VALUE;
  }
  else {
  size_t fl_start_pos = p_buf.get_pos_bit();
  RAW_Force_Omit field_14_force_omit(14, force_omit, MSNetworkCapabilityV_sRVCCtoGERANUTRANCapability_descr_.raw->forceomit);
  decoded_field_length = field_sRVCCtoGERANUTRANCapability().RAW_decode(MSNetworkCapabilityV_sRVCCtoGERANUTRANCapability_descr_, p_buf, limit, local_top_order, TRUE, -1, TRUE, &field_14_force_omit);
  if (decoded_field_length < 1) {
  field_sRVCCtoGERANUTRANCapability = OMIT_VALUE;
  p_buf.set_pos_bit(fl_start_pos);
  } else {
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  }
  }
  }
  else field_sRVCCtoGERANUTRANCapability=OMIT_VALUE;
  if (limit > 0){
  if (force_omit != NULL && (*force_omit)(15)) {
    field_ePCCapability = OMIT_VALUE;
  }
  else {
  size_t fl_start_pos = p_buf.get_pos_bit();
  RAW_Force_Omit field_15_force_omit(15, force_omit, MSNetworkCapabilityV_ePCCapability_descr_.raw->forceomit);
  decoded_field_length = field_ePCCapability().RAW_decode(MSNetworkCapabilityV_ePCCapability_descr_, p_buf, limit, local_top_order, TRUE, -1, TRUE, &field_15_force_omit);
  if (decoded_field_length < 1) {
  field_ePCCapability = OMIT_VALUE;
  p_buf.set_pos_bit(fl_start_pos);
  } else {
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  }
  }
  }
  else field_ePCCapability=OMIT_VALUE;
  if (limit > 0){
  if (force_omit != NULL && (*force_omit)(16)) {
    field_nFCapability = OMIT_VALUE;
  }
  else {
  size_t fl_start_pos = p_buf.get_pos_bit();
  RAW_Force_Omit field_16_force_omit(16, force_omit, MSNetworkCapabilityV_nFCapability_descr_.raw->forceomit);
  decoded_field_length = field_nFCapability().RAW_decode(MSNetworkCapabilityV_nFCapability_descr_, p_buf, limit, local_top_order, TRUE, -1, TRUE, &field_16_force_omit);
  if (decoded_field_length < 1) {
  field_nFCapability = OMIT_VALUE;
  p_buf.set_pos_bit(fl_start_pos);
  } else {
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  }
  }
  }
  else field_nFCapability=OMIT_VALUE;
  if (limit > 0){
  if (force_omit != NULL && (*force_omit)(17)) {
    field_gERANNertworkSharingCapability = OMIT_VALUE;
  }
  else {
  size_t fl_start_pos = p_buf.get_pos_bit();
  RAW_Force_Omit field_17_force_omit(17, force_omit, MSNetworkCapabilityV_gERANNertworkSharingCapability_descr_.raw->forceomit);
  decoded_field_length = field_gERANNertworkSharingCapability().RAW_decode(MSNetworkCapabilityV_gERANNertworkSharingCapability_descr_, p_buf, limit, local_top_order, TRUE, -1, TRUE, &field_17_force_omit);
  if (decoded_field_length < 1) {
  field_gERANNertworkSharingCapability = OMIT_VALUE;
  p_buf.set_pos_bit(fl_start_pos);
  } else {
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  }
  }
  }
  else field_gERANNertworkSharingCapability=OMIT_VALUE;
  if (limit > 0){
  if (force_omit != NULL && (*force_omit)(18)) {
    field_spare__octets = OMIT_VALUE;
  }
  else {
  size_t fl_start_pos = p_buf.get_pos_bit();
  RAW_Force_Omit field_18_force_omit(18, force_omit, MSNetworkCapabilityV_spare__octets_descr_.raw->forceomit);
  decoded_field_length = field_spare__octets().RAW_decode(MSNetworkCapabilityV_spare__octets_descr_, p_buf, limit, local_top_order, TRUE, -1, TRUE, &field_18_force_omit);
  if (decoded_field_length < 1) {
  field_spare__octets = OMIT_VALUE;
  p_buf.set_pos_bit(fl_start_pos);
  } else {
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  }
  }
  }
  else field_spare__octets=OMIT_VALUE;
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int MSNetworkCapabilityV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 19;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(19);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, MSNetworkCapabilityV_gea1bit_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, MSNetworkCapabilityV_smCapabilitiesviaDedicatedChannels_descr_.raw);
  myleaf.body.node.nodes[2] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 2, MSNetworkCapabilityV_smCapabilitiesviaGPRSChannels_descr_.raw);
  myleaf.body.node.nodes[3] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 3, MSNetworkCapabilityV_ucs2Support_descr_.raw);
  myleaf.body.node.nodes[4] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 4, MSNetworkCapabilityV_ssScreeningIndicator_descr_.raw);
  if (field_solSACapability.ispresent()) {
  myleaf.body.node.nodes[5] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 5, MSNetworkCapabilityV_solSACapability_descr_.raw);
  }
  else myleaf.body.node.nodes[5] = NULL;
  if (field_revisionLevelIndicatior.ispresent()) {
  myleaf.body.node.nodes[6] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 6, MSNetworkCapabilityV_revisionLevelIndicatior_descr_.raw);
  }
  else myleaf.body.node.nodes[6] = NULL;
  if (field_pFCFeatureMode.ispresent()) {
  myleaf.body.node.nodes[7] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 7, MSNetworkCapabilityV_pFCFeatureMode_descr_.raw);
  }
  else myleaf.body.node.nodes[7] = NULL;
  if (field_extendedGEAbits.ispresent()) {
  myleaf.body.node.nodes[8] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 8, MSNetworkCapabilityV_extendedGEAbits_descr_.raw);
  }
  else myleaf.body.node.nodes[8] = NULL;
  if (field_lcsVAcapability.ispresent()) {
  myleaf.body.node.nodes[9] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 9, MSNetworkCapabilityV_lcsVAcapability_descr_.raw);
  }
  else myleaf.body.node.nodes[9] = NULL;
  if (field_pSInterRATHOtoUTRANIuModeCapability.ispresent()) {
  myleaf.body.node.nodes[10] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 10, MSNetworkCapabilityV_pSInterRATHOtoUTRANIuModeCapability_descr_.raw);
  }
  else myleaf.body.node.nodes[10] = NULL;
  if (field_pSInterRATHOtoEUTRANS1ModeCapability.ispresent()) {
  myleaf.body.node.nodes[11] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 11, MSNetworkCapabilityV_pSInterRATHOtoEUTRANS1ModeCapability_descr_.raw);
  }
  else myleaf.body.node.nodes[11] = NULL;
  if (field_eMMCombinedProceduresCapability.ispresent()) {
  myleaf.body.node.nodes[12] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 12, MSNetworkCapabilityV_eMMCombinedProceduresCapability_descr_.raw);
  }
  else myleaf.body.node.nodes[12] = NULL;
  if (field_iSRSupport.ispresent()) {
  myleaf.body.node.nodes[13] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 13, MSNetworkCapabilityV_iSRSupport_descr_.raw);
  }
  else myleaf.body.node.nodes[13] = NULL;
  if (field_sRVCCtoGERANUTRANCapability.ispresent()) {
  myleaf.body.node.nodes[14] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 14, MSNetworkCapabilityV_sRVCCtoGERANUTRANCapability_descr_.raw);
  }
  else myleaf.body.node.nodes[14] = NULL;
  if (field_ePCCapability.ispresent()) {
  myleaf.body.node.nodes[15] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 15, MSNetworkCapabilityV_ePCCapability_descr_.raw);
  }
  else myleaf.body.node.nodes[15] = NULL;
  if (field_nFCapability.ispresent()) {
  myleaf.body.node.nodes[16] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 16, MSNetworkCapabilityV_nFCapability_descr_.raw);
  }
  else myleaf.body.node.nodes[16] = NULL;
  if (field_gERANNertworkSharingCapability.ispresent()) {
  myleaf.body.node.nodes[17] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 17, MSNetworkCapabilityV_gERANNertworkSharingCapability_descr_.raw);
  }
  else myleaf.body.node.nodes[17] = NULL;
  if (field_spare__octets.ispresent()) {
  myleaf.body.node.nodes[18] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 18, MSNetworkCapabilityV_spare__octets_descr_.raw);
  }
  else myleaf.body.node.nodes[18] = NULL;
  encoded_length += field_gea1bit.RAW_encode(MSNetworkCapabilityV_gea1bit_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_smCapabilitiesviaDedicatedChannels.RAW_encode(MSNetworkCapabilityV_smCapabilitiesviaDedicatedChannels_descr_, *myleaf.body.node.nodes[1]);
  encoded_length += field_smCapabilitiesviaGPRSChannels.RAW_encode(MSNetworkCapabilityV_smCapabilitiesviaGPRSChannels_descr_, *myleaf.body.node.nodes[2]);
  encoded_length += field_ucs2Support.RAW_encode(MSNetworkCapabilityV_ucs2Support_descr_, *myleaf.body.node.nodes[3]);
  encoded_length += field_ssScreeningIndicator.RAW_encode(MSNetworkCapabilityV_ssScreeningIndicator_descr_, *myleaf.body.node.nodes[4]);
  if (field_solSACapability.ispresent()) {
  encoded_length += field_solSACapability().RAW_encode(MSNetworkCapabilityV_solSACapability_descr_, *myleaf.body.node.nodes[5]);
  }
  if (field_revisionLevelIndicatior.ispresent()) {
  encoded_length += field_revisionLevelIndicatior().RAW_encode(MSNetworkCapabilityV_revisionLevelIndicatior_descr_, *myleaf.body.node.nodes[6]);
  }
  if (field_pFCFeatureMode.ispresent()) {
  encoded_length += field_pFCFeatureMode().RAW_encode(MSNetworkCapabilityV_pFCFeatureMode_descr_, *myleaf.body.node.nodes[7]);
  }
  if (field_extendedGEAbits.ispresent()) {
  encoded_length += field_extendedGEAbits().RAW_encode(MSNetworkCapabilityV_extendedGEAbits_descr_, *myleaf.body.node.nodes[8]);
  }
  if (field_lcsVAcapability.ispresent()) {
  encoded_length += field_lcsVAcapability().RAW_encode(MSNetworkCapabilityV_lcsVAcapability_descr_, *myleaf.body.node.nodes[9]);
  }
  if (field_pSInterRATHOtoUTRANIuModeCapability.ispresent()) {
  encoded_length += field_pSInterRATHOtoUTRANIuModeCapability().RAW_encode(MSNetworkCapabilityV_pSInterRATHOtoUTRANIuModeCapability_descr_, *myleaf.body.node.nodes[10]);
  }
  if (field_pSInterRATHOtoEUTRANS1ModeCapability.ispresent()) {
  encoded_length += field_pSInterRATHOtoEUTRANS1ModeCapability().RAW_encode(MSNetworkCapabilityV_pSInterRATHOtoEUTRANS1ModeCapability_descr_, *myleaf.body.node.nodes[11]);
  }
  if (field_eMMCombinedProceduresCapability.ispresent()) {
  encoded_length += field_eMMCombinedProceduresCapability().RAW_encode(MSNetworkCapabilityV_eMMCombinedProceduresCapability_descr_, *myleaf.body.node.nodes[12]);
  }
  if (field_iSRSupport.ispresent()) {
  encoded_length += field_iSRSupport().RAW_encode(MSNetworkCapabilityV_iSRSupport_descr_, *myleaf.body.node.nodes[13]);
  }
  if (field_sRVCCtoGERANUTRANCapability.ispresent()) {
  encoded_length += field_sRVCCtoGERANUTRANCapability().RAW_encode(MSNetworkCapabilityV_sRVCCtoGERANUTRANCapability_descr_, *myleaf.body.node.nodes[14]);
  }
  if (field_ePCCapability.ispresent()) {
  encoded_length += field_ePCCapability().RAW_encode(MSNetworkCapabilityV_ePCCapability_descr_, *myleaf.body.node.nodes[15]);
  }
  if (field_nFCapability.ispresent()) {
  encoded_length += field_nFCapability().RAW_encode(MSNetworkCapabilityV_nFCapability_descr_, *myleaf.body.node.nodes[16]);
  }
  if (field_gERANNertworkSharingCapability.ispresent()) {
  encoded_length += field_gERANNertworkSharingCapability().RAW_encode(MSNetworkCapabilityV_gERANNertworkSharingCapability_descr_, *myleaf.body.node.nodes[17]);
  }
  if (field_spare__octets.ispresent()) {
  encoded_length += field_spare__octets().RAW_encode(MSNetworkCapabilityV_spare__octets_descr_, *myleaf.body.node.nodes[18]);
  }
  return myleaf.length = encoded_length;
}

struct MSNetworkCapabilityV_template::single_value_struct {
BITSTRING_template field_gea1bit;
BITSTRING_template field_smCapabilitiesviaDedicatedChannels;
BITSTRING_template field_smCapabilitiesviaGPRSChannels;
BITSTRING_template field_ucs2Support;
BITSTRING_template field_ssScreeningIndicator;
BITSTRING_template field_solSACapability;
BITSTRING_template field_revisionLevelIndicatior;
BITSTRING_template field_pFCFeatureMode;
BITSTRING_template field_extendedGEAbits;
BITSTRING_template field_lcsVAcapability;
BITSTRING_template field_pSInterRATHOtoUTRANIuModeCapability;
BITSTRING_template field_pSInterRATHOtoEUTRANS1ModeCapability;
BITSTRING_template field_eMMCombinedProceduresCapability;
BITSTRING_template field_iSRSupport;
BITSTRING_template field_sRVCCtoGERANUTRANCapability;
BITSTRING_template field_ePCCapability;
BITSTRING_template field_nFCapability;
BITSTRING_template field_gERANNertworkSharingCapability;
OCTETSTRING_template field_spare__octets;
};

void MSNetworkCapabilityV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_gea1bit = ANY_VALUE;
single_value->field_smCapabilitiesviaDedicatedChannels = ANY_VALUE;
single_value->field_smCapabilitiesviaGPRSChannels = ANY_VALUE;
single_value->field_ucs2Support = ANY_VALUE;
single_value->field_ssScreeningIndicator = ANY_VALUE;
single_value->field_solSACapability = ANY_OR_OMIT;
single_value->field_revisionLevelIndicatior = ANY_OR_OMIT;
single_value->field_pFCFeatureMode = ANY_OR_OMIT;
single_value->field_extendedGEAbits = ANY_OR_OMIT;
single_value->field_lcsVAcapability = ANY_OR_OMIT;
single_value->field_pSInterRATHOtoUTRANIuModeCapability = ANY_OR_OMIT;
single_value->field_pSInterRATHOtoEUTRANS1ModeCapability = ANY_OR_OMIT;
single_value->field_eMMCombinedProceduresCapability = ANY_OR_OMIT;
single_value->field_iSRSupport = ANY_OR_OMIT;
single_value->field_sRVCCtoGERANUTRANCapability = ANY_OR_OMIT;
single_value->field_ePCCapability = ANY_OR_OMIT;
single_value->field_nFCapability = ANY_OR_OMIT;
single_value->field_gERANNertworkSharingCapability = ANY_OR_OMIT;
single_value->field_spare__octets = ANY_OR_OMIT;
}
}
}

void MSNetworkCapabilityV_template::copy_value(const MSNetworkCapabilityV& other_value)
{
single_value = new single_value_struct;
if (other_value.gea1bit().is_bound()) {
  single_value->field_gea1bit = other_value.gea1bit();
} else {
  single_value->field_gea1bit.clean_up();
}
if (other_value.smCapabilitiesviaDedicatedChannels().is_bound()) {
  single_value->field_smCapabilitiesviaDedicatedChannels = other_value.smCapabilitiesviaDedicatedChannels();
} else {
  single_value->field_smCapabilitiesviaDedicatedChannels.clean_up();
}
if (other_value.smCapabilitiesviaGPRSChannels().is_bound()) {
  single_value->field_smCapabilitiesviaGPRSChannels = other_value.smCapabilitiesviaGPRSChannels();
} else {
  single_value->field_smCapabilitiesviaGPRSChannels.clean_up();
}
if (other_value.ucs2Support().is_bound()) {
  single_value->field_ucs2Support = other_value.ucs2Support();
} else {
  single_value->field_ucs2Support.clean_up();
}
if (other_value.ssScreeningIndicator().is_bound()) {
  single_value->field_ssScreeningIndicator = other_value.ssScreeningIndicator();
} else {
  single_value->field_ssScreeningIndicator.clean_up();
}
if (other_value.solSACapability().is_bound()) {
  if (other_value.solSACapability().ispresent()) single_value->field_solSACapability = other_value.solSACapability()();
  else single_value->field_solSACapability = OMIT_VALUE;
} else {
  single_value->field_solSACapability.clean_up();
}
if (other_value.revisionLevelIndicatior().is_bound()) {
  if (other_value.revisionLevelIndicatior().ispresent()) single_value->field_revisionLevelIndicatior = other_value.revisionLevelIndicatior()();
  else single_value->field_revisionLevelIndicatior = OMIT_VALUE;
} else {
  single_value->field_revisionLevelIndicatior.clean_up();
}
if (other_value.pFCFeatureMode().is_bound()) {
  if (other_value.pFCFeatureMode().ispresent()) single_value->field_pFCFeatureMode = other_value.pFCFeatureMode()();
  else single_value->field_pFCFeatureMode = OMIT_VALUE;
} else {
  single_value->field_pFCFeatureMode.clean_up();
}
if (other_value.extendedGEAbits().is_bound()) {
  if (other_value.extendedGEAbits().ispresent()) single_value->field_extendedGEAbits = other_value.extendedGEAbits()();
  else single_value->field_extendedGEAbits = OMIT_VALUE;
} else {
  single_value->field_extendedGEAbits.clean_up();
}
if (other_value.lcsVAcapability().is_bound()) {
  if (other_value.lcsVAcapability().ispresent()) single_value->field_lcsVAcapability = other_value.lcsVAcapability()();
  else single_value->field_lcsVAcapability = OMIT_VALUE;
} else {
  single_value->field_lcsVAcapability.clean_up();
}
if (other_value.pSInterRATHOtoUTRANIuModeCapability().is_bound()) {
  if (other_value.pSInterRATHOtoUTRANIuModeCapability().ispresent()) single_value->field_pSInterRATHOtoUTRANIuModeCapability = other_value.pSInterRATHOtoUTRANIuModeCapability()();
  else single_value->field_pSInterRATHOtoUTRANIuModeCapability = OMIT_VALUE;
} else {
  single_value->field_pSInterRATHOtoUTRANIuModeCapability.clean_up();
}
if (other_value.pSInterRATHOtoEUTRANS1ModeCapability().is_bound()) {
  if (other_value.pSInterRATHOtoEUTRANS1ModeCapability().ispresent()) single_value->field_pSInterRATHOtoEUTRANS1ModeCapability = other_value.pSInterRATHOtoEUTRANS1ModeCapability()();
  else single_value->field_pSInterRATHOtoEUTRANS1ModeCapability = OMIT_VALUE;
} else {
  single_value->field_pSInterRATHOtoEUTRANS1ModeCapability.clean_up();
}
if (other_value.eMMCombinedProceduresCapability().is_bound()) {
  if (other_value.eMMCombinedProceduresCapability().ispresent()) single_value->field_eMMCombinedProceduresCapability = other_value.eMMCombinedProceduresCapability()();
  else single_value->field_eMMCombinedProceduresCapability = OMIT_VALUE;
} else {
  single_value->field_eMMCombinedProceduresCapability.clean_up();
}
if (other_value.iSRSupport().is_bound()) {
  if (other_value.iSRSupport().ispresent()) single_value->field_iSRSupport = other_value.iSRSupport()();
  else single_value->field_iSRSupport = OMIT_VALUE;
} else {
  single_value->field_iSRSupport.clean_up();
}
if (other_value.sRVCCtoGERANUTRANCapability().is_bound()) {
  if (other_value.sRVCCtoGERANUTRANCapability().ispresent()) single_value->field_sRVCCtoGERANUTRANCapability = other_value.sRVCCtoGERANUTRANCapability()();
  else single_value->field_sRVCCtoGERANUTRANCapability = OMIT_VALUE;
} else {
  single_value->field_sRVCCtoGERANUTRANCapability.clean_up();
}
if (other_value.ePCCapability().is_bound()) {
  if (other_value.ePCCapability().ispresent()) single_value->field_ePCCapability = other_value.ePCCapability()();
  else single_value->field_ePCCapability = OMIT_VALUE;
} else {
  single_value->field_ePCCapability.clean_up();
}
if (other_value.nFCapability().is_bound()) {
  if (other_value.nFCapability().ispresent()) single_value->field_nFCapability = other_value.nFCapability()();
  else single_value->field_nFCapability = OMIT_VALUE;
} else {
  single_value->field_nFCapability.clean_up();
}
if (other_value.gERANNertworkSharingCapability().is_bound()) {
  if (other_value.gERANNertworkSharingCapability().ispresent()) single_value->field_gERANNertworkSharingCapability = other_value.gERANNertworkSharingCapability()();
  else single_value->field_gERANNertworkSharingCapability = OMIT_VALUE;
} else {
  single_value->field_gERANNertworkSharingCapability.clean_up();
}
if (other_value.spare__octets().is_bound()) {
  if (other_value.spare__octets().ispresent()) single_value->field_spare__octets = other_value.spare__octets()();
  else single_value->field_spare__octets = OMIT_VALUE;
} else {
  single_value->field_spare__octets.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void MSNetworkCapabilityV_template::copy_template(const MSNetworkCapabilityV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.gea1bit().get_selection()) {
single_value->field_gea1bit = other_value.gea1bit();
} else {
single_value->field_gea1bit.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.smCapabilitiesviaDedicatedChannels().get_selection()) {
single_value->field_smCapabilitiesviaDedicatedChannels = other_value.smCapabilitiesviaDedicatedChannels();
} else {
single_value->field_smCapabilitiesviaDedicatedChannels.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.smCapabilitiesviaGPRSChannels().get_selection()) {
single_value->field_smCapabilitiesviaGPRSChannels = other_value.smCapabilitiesviaGPRSChannels();
} else {
single_value->field_smCapabilitiesviaGPRSChannels.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.ucs2Support().get_selection()) {
single_value->field_ucs2Support = other_value.ucs2Support();
} else {
single_value->field_ucs2Support.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.ssScreeningIndicator().get_selection()) {
single_value->field_ssScreeningIndicator = other_value.ssScreeningIndicator();
} else {
single_value->field_ssScreeningIndicator.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.solSACapability().get_selection()) {
single_value->field_solSACapability = other_value.solSACapability();
} else {
single_value->field_solSACapability.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.revisionLevelIndicatior().get_selection()) {
single_value->field_revisionLevelIndicatior = other_value.revisionLevelIndicatior();
} else {
single_value->field_revisionLevelIndicatior.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.pFCFeatureMode().get_selection()) {
single_value->field_pFCFeatureMode = other_value.pFCFeatureMode();
} else {
single_value->field_pFCFeatureMode.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.extendedGEAbits().get_selection()) {
single_value->field_extendedGEAbits = other_value.extendedGEAbits();
} else {
single_value->field_extendedGEAbits.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.lcsVAcapability().get_selection()) {
single_value->field_lcsVAcapability = other_value.lcsVAcapability();
} else {
single_value->field_lcsVAcapability.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.pSInterRATHOtoUTRANIuModeCapability().get_selection()) {
single_value->field_pSInterRATHOtoUTRANIuModeCapability = other_value.pSInterRATHOtoUTRANIuModeCapability();
} else {
single_value->field_pSInterRATHOtoUTRANIuModeCapability.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.pSInterRATHOtoEUTRANS1ModeCapability().get_selection()) {
single_value->field_pSInterRATHOtoEUTRANS1ModeCapability = other_value.pSInterRATHOtoEUTRANS1ModeCapability();
} else {
single_value->field_pSInterRATHOtoEUTRANS1ModeCapability.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.eMMCombinedProceduresCapability().get_selection()) {
single_value->field_eMMCombinedProceduresCapability = other_value.eMMCombinedProceduresCapability();
} else {
single_value->field_eMMCombinedProceduresCapability.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.iSRSupport().get_selection()) {
single_value->field_iSRSupport = other_value.iSRSupport();
} else {
single_value->field_iSRSupport.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.sRVCCtoGERANUTRANCapability().get_selection()) {
single_value->field_sRVCCtoGERANUTRANCapability = other_value.sRVCCtoGERANUTRANCapability();
} else {
single_value->field_sRVCCtoGERANUTRANCapability.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.ePCCapability().get_selection()) {
single_value->field_ePCCapability = other_value.ePCCapability();
} else {
single_value->field_ePCCapability.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.nFCapability().get_selection()) {
single_value->field_nFCapability = other_value.nFCapability();
} else {
single_value->field_nFCapability.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.gERANNertworkSharingCapability().get_selection()) {
single_value->field_gERANNertworkSharingCapability = other_value.gERANNertworkSharingCapability();
} else {
single_value->field_gERANNertworkSharingCapability.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.spare__octets().get_selection()) {
single_value->field_spare__octets = other_value.spare__octets();
} else {
single_value->field_spare__octets.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new MSNetworkCapabilityV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new MSNetworkCapabilityV_template(*other_value.implication_.precondition);
implication_.implied_template = new MSNetworkCapabilityV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV.");
break;
}
set_selection(other_value);
}

MSNetworkCapabilityV_template::MSNetworkCapabilityV_template()
{
}

MSNetworkCapabilityV_template::MSNetworkCapabilityV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

MSNetworkCapabilityV_template::MSNetworkCapabilityV_template(const MSNetworkCapabilityV& other_value)
{
copy_value(other_value);
}

MSNetworkCapabilityV_template::MSNetworkCapabilityV_template(const OPTIONAL<MSNetworkCapabilityV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const MSNetworkCapabilityV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV from an unbound optional field.");
}
}

MSNetworkCapabilityV_template::MSNetworkCapabilityV_template(MSNetworkCapabilityV_template* p_precondition, MSNetworkCapabilityV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

MSNetworkCapabilityV_template::MSNetworkCapabilityV_template(Dynamic_Match_Interface<MSNetworkCapabilityV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<MSNetworkCapabilityV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

MSNetworkCapabilityV_template::MSNetworkCapabilityV_template(const MSNetworkCapabilityV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

MSNetworkCapabilityV_template::~MSNetworkCapabilityV_template()
{
clean_up();
}

MSNetworkCapabilityV_template& MSNetworkCapabilityV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

MSNetworkCapabilityV_template& MSNetworkCapabilityV_template::operator=(const MSNetworkCapabilityV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

MSNetworkCapabilityV_template& MSNetworkCapabilityV_template::operator=(const OPTIONAL<MSNetworkCapabilityV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const MSNetworkCapabilityV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV.");
}
return *this;
}

MSNetworkCapabilityV_template& MSNetworkCapabilityV_template::operator=(const MSNetworkCapabilityV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean MSNetworkCapabilityV_template::match(const MSNetworkCapabilityV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.gea1bit().is_bound()) return FALSE;
if(!single_value->field_gea1bit.match(other_value.gea1bit(), legacy))return FALSE;
if(!other_value.smCapabilitiesviaDedicatedChannels().is_bound()) return FALSE;
if(!single_value->field_smCapabilitiesviaDedicatedChannels.match(other_value.smCapabilitiesviaDedicatedChannels(), legacy))return FALSE;
if(!other_value.smCapabilitiesviaGPRSChannels().is_bound()) return FALSE;
if(!single_value->field_smCapabilitiesviaGPRSChannels.match(other_value.smCapabilitiesviaGPRSChannels(), legacy))return FALSE;
if(!other_value.ucs2Support().is_bound()) return FALSE;
if(!single_value->field_ucs2Support.match(other_value.ucs2Support(), legacy))return FALSE;
if(!other_value.ssScreeningIndicator().is_bound()) return FALSE;
if(!single_value->field_ssScreeningIndicator.match(other_value.ssScreeningIndicator(), legacy))return FALSE;
if(!other_value.solSACapability().is_bound()) return FALSE;
if((other_value.solSACapability().ispresent() ? !single_value->field_solSACapability.match((const BITSTRING&)other_value.solSACapability(), legacy) : !single_value->field_solSACapability.match_omit(legacy)))return FALSE;
if(!other_value.revisionLevelIndicatior().is_bound()) return FALSE;
if((other_value.revisionLevelIndicatior().ispresent() ? !single_value->field_revisionLevelIndicatior.match((const BITSTRING&)other_value.revisionLevelIndicatior(), legacy) : !single_value->field_revisionLevelIndicatior.match_omit(legacy)))return FALSE;
if(!other_value.pFCFeatureMode().is_bound()) return FALSE;
if((other_value.pFCFeatureMode().ispresent() ? !single_value->field_pFCFeatureMode.match((const BITSTRING&)other_value.pFCFeatureMode(), legacy) : !single_value->field_pFCFeatureMode.match_omit(legacy)))return FALSE;
if(!other_value.extendedGEAbits().is_bound()) return FALSE;
if((other_value.extendedGEAbits().ispresent() ? !single_value->field_extendedGEAbits.match((const BITSTRING&)other_value.extendedGEAbits(), legacy) : !single_value->field_extendedGEAbits.match_omit(legacy)))return FALSE;
if(!other_value.lcsVAcapability().is_bound()) return FALSE;
if((other_value.lcsVAcapability().ispresent() ? !single_value->field_lcsVAcapability.match((const BITSTRING&)other_value.lcsVAcapability(), legacy) : !single_value->field_lcsVAcapability.match_omit(legacy)))return FALSE;
if(!other_value.pSInterRATHOtoUTRANIuModeCapability().is_bound()) return FALSE;
if((other_value.pSInterRATHOtoUTRANIuModeCapability().ispresent() ? !single_value->field_pSInterRATHOtoUTRANIuModeCapability.match((const BITSTRING&)other_value.pSInterRATHOtoUTRANIuModeCapability(), legacy) : !single_value->field_pSInterRATHOtoUTRANIuModeCapability.match_omit(legacy)))return FALSE;
if(!other_value.pSInterRATHOtoEUTRANS1ModeCapability().is_bound()) return FALSE;
if((other_value.pSInterRATHOtoEUTRANS1ModeCapability().ispresent() ? !single_value->field_pSInterRATHOtoEUTRANS1ModeCapability.match((const BITSTRING&)other_value.pSInterRATHOtoEUTRANS1ModeCapability(), legacy) : !single_value->field_pSInterRATHOtoEUTRANS1ModeCapability.match_omit(legacy)))return FALSE;
if(!other_value.eMMCombinedProceduresCapability().is_bound()) return FALSE;
if((other_value.eMMCombinedProceduresCapability().ispresent() ? !single_value->field_eMMCombinedProceduresCapability.match((const BITSTRING&)other_value.eMMCombinedProceduresCapability(), legacy) : !single_value->field_eMMCombinedProceduresCapability.match_omit(legacy)))return FALSE;
if(!other_value.iSRSupport().is_bound()) return FALSE;
if((other_value.iSRSupport().ispresent() ? !single_value->field_iSRSupport.match((const BITSTRING&)other_value.iSRSupport(), legacy) : !single_value->field_iSRSupport.match_omit(legacy)))return FALSE;
if(!other_value.sRVCCtoGERANUTRANCapability().is_bound()) return FALSE;
if((other_value.sRVCCtoGERANUTRANCapability().ispresent() ? !single_value->field_sRVCCtoGERANUTRANCapability.match((const BITSTRING&)other_value.sRVCCtoGERANUTRANCapability(), legacy) : !single_value->field_sRVCCtoGERANUTRANCapability.match_omit(legacy)))return FALSE;
if(!other_value.ePCCapability().is_bound()) return FALSE;
if((other_value.ePCCapability().ispresent() ? !single_value->field_ePCCapability.match((const BITSTRING&)other_value.ePCCapability(), legacy) : !single_value->field_ePCCapability.match_omit(legacy)))return FALSE;
if(!other_value.nFCapability().is_bound()) return FALSE;
if((other_value.nFCapability().ispresent() ? !single_value->field_nFCapability.match((const BITSTRING&)other_value.nFCapability(), legacy) : !single_value->field_nFCapability.match_omit(legacy)))return FALSE;
if(!other_value.gERANNertworkSharingCapability().is_bound()) return FALSE;
if((other_value.gERANNertworkSharingCapability().ispresent() ? !single_value->field_gERANNertworkSharingCapability.match((const BITSTRING&)other_value.gERANNertworkSharingCapability(), legacy) : !single_value->field_gERANNertworkSharingCapability.match_omit(legacy)))return FALSE;
if(!other_value.spare__octets().is_bound()) return FALSE;
if((other_value.spare__octets().ispresent() ? !single_value->field_spare__octets.match((const OCTETSTRING&)other_value.spare__octets(), legacy) : !single_value->field_spare__octets.match_omit(legacy)))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV.");
}
return FALSE;
}

boolean MSNetworkCapabilityV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_gea1bit.is_bound()
 || single_value->field_smCapabilitiesviaDedicatedChannels.is_bound()
 || single_value->field_smCapabilitiesviaGPRSChannels.is_bound()
 || single_value->field_ucs2Support.is_bound()
 || single_value->field_ssScreeningIndicator.is_bound()
 || (single_value->field_solSACapability.is_omit() || single_value->field_solSACapability.is_bound())
 || (single_value->field_revisionLevelIndicatior.is_omit() || single_value->field_revisionLevelIndicatior.is_bound())
 || (single_value->field_pFCFeatureMode.is_omit() || single_value->field_pFCFeatureMode.is_bound())
 || (single_value->field_extendedGEAbits.is_omit() || single_value->field_extendedGEAbits.is_bound())
 || (single_value->field_lcsVAcapability.is_omit() || single_value->field_lcsVAcapability.is_bound())
 || (single_value->field_pSInterRATHOtoUTRANIuModeCapability.is_omit() || single_value->field_pSInterRATHOtoUTRANIuModeCapability.is_bound())
 || (single_value->field_pSInterRATHOtoEUTRANS1ModeCapability.is_omit() || single_value->field_pSInterRATHOtoEUTRANS1ModeCapability.is_bound())
 || (single_value->field_eMMCombinedProceduresCapability.is_omit() || single_value->field_eMMCombinedProceduresCapability.is_bound())
 || (single_value->field_iSRSupport.is_omit() || single_value->field_iSRSupport.is_bound())
 || (single_value->field_sRVCCtoGERANUTRANCapability.is_omit() || single_value->field_sRVCCtoGERANUTRANCapability.is_bound())
 || (single_value->field_ePCCapability.is_omit() || single_value->field_ePCCapability.is_bound())
 || (single_value->field_nFCapability.is_omit() || single_value->field_nFCapability.is_bound())
 || (single_value->field_gERANNertworkSharingCapability.is_omit() || single_value->field_gERANNertworkSharingCapability.is_bound())
 || (single_value->field_spare__octets.is_omit() || single_value->field_spare__octets.is_bound());
}

boolean MSNetworkCapabilityV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_gea1bit.is_value()
 && single_value->field_smCapabilitiesviaDedicatedChannels.is_value()
 && single_value->field_smCapabilitiesviaGPRSChannels.is_value()
 && single_value->field_ucs2Support.is_value()
 && single_value->field_ssScreeningIndicator.is_value()
 && (single_value->field_solSACapability.is_omit() || single_value->field_solSACapability.is_value())
 && (single_value->field_revisionLevelIndicatior.is_omit() || single_value->field_revisionLevelIndicatior.is_value())
 && (single_value->field_pFCFeatureMode.is_omit() || single_value->field_pFCFeatureMode.is_value())
 && (single_value->field_extendedGEAbits.is_omit() || single_value->field_extendedGEAbits.is_value())
 && (single_value->field_lcsVAcapability.is_omit() || single_value->field_lcsVAcapability.is_value())
 && (single_value->field_pSInterRATHOtoUTRANIuModeCapability.is_omit() || single_value->field_pSInterRATHOtoUTRANIuModeCapability.is_value())
 && (single_value->field_pSInterRATHOtoEUTRANS1ModeCapability.is_omit() || single_value->field_pSInterRATHOtoEUTRANS1ModeCapability.is_value())
 && (single_value->field_eMMCombinedProceduresCapability.is_omit() || single_value->field_eMMCombinedProceduresCapability.is_value())
 && (single_value->field_iSRSupport.is_omit() || single_value->field_iSRSupport.is_value())
 && (single_value->field_sRVCCtoGERANUTRANCapability.is_omit() || single_value->field_sRVCCtoGERANUTRANCapability.is_value())
 && (single_value->field_ePCCapability.is_omit() || single_value->field_ePCCapability.is_value())
 && (single_value->field_nFCapability.is_omit() || single_value->field_nFCapability.is_value())
 && (single_value->field_gERANNertworkSharingCapability.is_omit() || single_value->field_gERANNertworkSharingCapability.is_value())
 && (single_value->field_spare__octets.is_omit() || single_value->field_spare__octets.is_value());
}

void MSNetworkCapabilityV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

MSNetworkCapabilityV MSNetworkCapabilityV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV.");
MSNetworkCapabilityV ret_val;
if (single_value->field_gea1bit.is_bound()) {
ret_val.gea1bit() = single_value->field_gea1bit.valueof();
}
if (single_value->field_smCapabilitiesviaDedicatedChannels.is_bound()) {
ret_val.smCapabilitiesviaDedicatedChannels() = single_value->field_smCapabilitiesviaDedicatedChannels.valueof();
}
if (single_value->field_smCapabilitiesviaGPRSChannels.is_bound()) {
ret_val.smCapabilitiesviaGPRSChannels() = single_value->field_smCapabilitiesviaGPRSChannels.valueof();
}
if (single_value->field_ucs2Support.is_bound()) {
ret_val.ucs2Support() = single_value->field_ucs2Support.valueof();
}
if (single_value->field_ssScreeningIndicator.is_bound()) {
ret_val.ssScreeningIndicator() = single_value->field_ssScreeningIndicator.valueof();
}
if (single_value->field_solSACapability.is_omit()) ret_val.solSACapability() = OMIT_VALUE;
else if (single_value->field_solSACapability.is_bound()) {
ret_val.solSACapability() = single_value->field_solSACapability.valueof();
}
if (single_value->field_revisionLevelIndicatior.is_omit()) ret_val.revisionLevelIndicatior() = OMIT_VALUE;
else if (single_value->field_revisionLevelIndicatior.is_bound()) {
ret_val.revisionLevelIndicatior() = single_value->field_revisionLevelIndicatior.valueof();
}
if (single_value->field_pFCFeatureMode.is_omit()) ret_val.pFCFeatureMode() = OMIT_VALUE;
else if (single_value->field_pFCFeatureMode.is_bound()) {
ret_val.pFCFeatureMode() = single_value->field_pFCFeatureMode.valueof();
}
if (single_value->field_extendedGEAbits.is_omit()) ret_val.extendedGEAbits() = OMIT_VALUE;
else if (single_value->field_extendedGEAbits.is_bound()) {
ret_val.extendedGEAbits() = single_value->field_extendedGEAbits.valueof();
}
if (single_value->field_lcsVAcapability.is_omit()) ret_val.lcsVAcapability() = OMIT_VALUE;
else if (single_value->field_lcsVAcapability.is_bound()) {
ret_val.lcsVAcapability() = single_value->field_lcsVAcapability.valueof();
}
if (single_value->field_pSInterRATHOtoUTRANIuModeCapability.is_omit()) ret_val.pSInterRATHOtoUTRANIuModeCapability() = OMIT_VALUE;
else if (single_value->field_pSInterRATHOtoUTRANIuModeCapability.is_bound()) {
ret_val.pSInterRATHOtoUTRANIuModeCapability() = single_value->field_pSInterRATHOtoUTRANIuModeCapability.valueof();
}
if (single_value->field_pSInterRATHOtoEUTRANS1ModeCapability.is_omit()) ret_val.pSInterRATHOtoEUTRANS1ModeCapability() = OMIT_VALUE;
else if (single_value->field_pSInterRATHOtoEUTRANS1ModeCapability.is_bound()) {
ret_val.pSInterRATHOtoEUTRANS1ModeCapability() = single_value->field_pSInterRATHOtoEUTRANS1ModeCapability.valueof();
}
if (single_value->field_eMMCombinedProceduresCapability.is_omit()) ret_val.eMMCombinedProceduresCapability() = OMIT_VALUE;
else if (single_value->field_eMMCombinedProceduresCapability.is_bound()) {
ret_val.eMMCombinedProceduresCapability() = single_value->field_eMMCombinedProceduresCapability.valueof();
}
if (single_value->field_iSRSupport.is_omit()) ret_val.iSRSupport() = OMIT_VALUE;
else if (single_value->field_iSRSupport.is_bound()) {
ret_val.iSRSupport() = single_value->field_iSRSupport.valueof();
}
if (single_value->field_sRVCCtoGERANUTRANCapability.is_omit()) ret_val.sRVCCtoGERANUTRANCapability() = OMIT_VALUE;
else if (single_value->field_sRVCCtoGERANUTRANCapability.is_bound()) {
ret_val.sRVCCtoGERANUTRANCapability() = single_value->field_sRVCCtoGERANUTRANCapability.valueof();
}
if (single_value->field_ePCCapability.is_omit()) ret_val.ePCCapability() = OMIT_VALUE;
else if (single_value->field_ePCCapability.is_bound()) {
ret_val.ePCCapability() = single_value->field_ePCCapability.valueof();
}
if (single_value->field_nFCapability.is_omit()) ret_val.nFCapability() = OMIT_VALUE;
else if (single_value->field_nFCapability.is_bound()) {
ret_val.nFCapability() = single_value->field_nFCapability.valueof();
}
if (single_value->field_gERANNertworkSharingCapability.is_omit()) ret_val.gERANNertworkSharingCapability() = OMIT_VALUE;
else if (single_value->field_gERANNertworkSharingCapability.is_bound()) {
ret_val.gERANNertworkSharingCapability() = single_value->field_gERANNertworkSharingCapability.valueof();
}
if (single_value->field_spare__octets.is_omit()) ret_val.spare__octets() = OMIT_VALUE;
else if (single_value->field_spare__octets.is_bound()) {
ret_val.spare__octets() = single_value->field_spare__octets.valueof();
}
return ret_val;
}

void MSNetworkCapabilityV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new MSNetworkCapabilityV_template[list_length];
}

MSNetworkCapabilityV_template& MSNetworkCapabilityV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV.");
return value_list.list_value[list_index];
}

BITSTRING_template& MSNetworkCapabilityV_template::gea1bit()
{
set_specific();
return single_value->field_gea1bit;
}

const BITSTRING_template& MSNetworkCapabilityV_template::gea1bit() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field gea1bit of a non-specific template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV.");
return single_value->field_gea1bit;
}

BITSTRING_template& MSNetworkCapabilityV_template::smCapabilitiesviaDedicatedChannels()
{
set_specific();
return single_value->field_smCapabilitiesviaDedicatedChannels;
}

const BITSTRING_template& MSNetworkCapabilityV_template::smCapabilitiesviaDedicatedChannels() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field smCapabilitiesviaDedicatedChannels of a non-specific template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV.");
return single_value->field_smCapabilitiesviaDedicatedChannels;
}

BITSTRING_template& MSNetworkCapabilityV_template::smCapabilitiesviaGPRSChannels()
{
set_specific();
return single_value->field_smCapabilitiesviaGPRSChannels;
}

const BITSTRING_template& MSNetworkCapabilityV_template::smCapabilitiesviaGPRSChannels() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field smCapabilitiesviaGPRSChannels of a non-specific template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV.");
return single_value->field_smCapabilitiesviaGPRSChannels;
}

BITSTRING_template& MSNetworkCapabilityV_template::ucs2Support()
{
set_specific();
return single_value->field_ucs2Support;
}

const BITSTRING_template& MSNetworkCapabilityV_template::ucs2Support() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field ucs2Support of a non-specific template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV.");
return single_value->field_ucs2Support;
}

BITSTRING_template& MSNetworkCapabilityV_template::ssScreeningIndicator()
{
set_specific();
return single_value->field_ssScreeningIndicator;
}

const BITSTRING_template& MSNetworkCapabilityV_template::ssScreeningIndicator() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field ssScreeningIndicator of a non-specific template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV.");
return single_value->field_ssScreeningIndicator;
}

BITSTRING_template& MSNetworkCapabilityV_template::solSACapability()
{
set_specific();
return single_value->field_solSACapability;
}

const BITSTRING_template& MSNetworkCapabilityV_template::solSACapability() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field solSACapability of a non-specific template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV.");
return single_value->field_solSACapability;
}

BITSTRING_template& MSNetworkCapabilityV_template::revisionLevelIndicatior()
{
set_specific();
return single_value->field_revisionLevelIndicatior;
}

const BITSTRING_template& MSNetworkCapabilityV_template::revisionLevelIndicatior() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field revisionLevelIndicatior of a non-specific template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV.");
return single_value->field_revisionLevelIndicatior;
}

BITSTRING_template& MSNetworkCapabilityV_template::pFCFeatureMode()
{
set_specific();
return single_value->field_pFCFeatureMode;
}

const BITSTRING_template& MSNetworkCapabilityV_template::pFCFeatureMode() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field pFCFeatureMode of a non-specific template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV.");
return single_value->field_pFCFeatureMode;
}

BITSTRING_template& MSNetworkCapabilityV_template::extendedGEAbits()
{
set_specific();
return single_value->field_extendedGEAbits;
}

const BITSTRING_template& MSNetworkCapabilityV_template::extendedGEAbits() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field extendedGEAbits of a non-specific template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV.");
return single_value->field_extendedGEAbits;
}

BITSTRING_template& MSNetworkCapabilityV_template::lcsVAcapability()
{
set_specific();
return single_value->field_lcsVAcapability;
}

const BITSTRING_template& MSNetworkCapabilityV_template::lcsVAcapability() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field lcsVAcapability of a non-specific template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV.");
return single_value->field_lcsVAcapability;
}

BITSTRING_template& MSNetworkCapabilityV_template::pSInterRATHOtoUTRANIuModeCapability()
{
set_specific();
return single_value->field_pSInterRATHOtoUTRANIuModeCapability;
}

const BITSTRING_template& MSNetworkCapabilityV_template::pSInterRATHOtoUTRANIuModeCapability() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field pSInterRATHOtoUTRANIuModeCapability of a non-specific template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV.");
return single_value->field_pSInterRATHOtoUTRANIuModeCapability;
}

BITSTRING_template& MSNetworkCapabilityV_template::pSInterRATHOtoEUTRANS1ModeCapability()
{
set_specific();
return single_value->field_pSInterRATHOtoEUTRANS1ModeCapability;
}

const BITSTRING_template& MSNetworkCapabilityV_template::pSInterRATHOtoEUTRANS1ModeCapability() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field pSInterRATHOtoEUTRANS1ModeCapability of a non-specific template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV.");
return single_value->field_pSInterRATHOtoEUTRANS1ModeCapability;
}

BITSTRING_template& MSNetworkCapabilityV_template::eMMCombinedProceduresCapability()
{
set_specific();
return single_value->field_eMMCombinedProceduresCapability;
}

const BITSTRING_template& MSNetworkCapabilityV_template::eMMCombinedProceduresCapability() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field eMMCombinedProceduresCapability of a non-specific template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV.");
return single_value->field_eMMCombinedProceduresCapability;
}

BITSTRING_template& MSNetworkCapabilityV_template::iSRSupport()
{
set_specific();
return single_value->field_iSRSupport;
}

const BITSTRING_template& MSNetworkCapabilityV_template::iSRSupport() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field iSRSupport of a non-specific template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV.");
return single_value->field_iSRSupport;
}

BITSTRING_template& MSNetworkCapabilityV_template::sRVCCtoGERANUTRANCapability()
{
set_specific();
return single_value->field_sRVCCtoGERANUTRANCapability;
}

const BITSTRING_template& MSNetworkCapabilityV_template::sRVCCtoGERANUTRANCapability() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field sRVCCtoGERANUTRANCapability of a non-specific template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV.");
return single_value->field_sRVCCtoGERANUTRANCapability;
}

BITSTRING_template& MSNetworkCapabilityV_template::ePCCapability()
{
set_specific();
return single_value->field_ePCCapability;
}

const BITSTRING_template& MSNetworkCapabilityV_template::ePCCapability() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field ePCCapability of a non-specific template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV.");
return single_value->field_ePCCapability;
}

BITSTRING_template& MSNetworkCapabilityV_template::nFCapability()
{
set_specific();
return single_value->field_nFCapability;
}

const BITSTRING_template& MSNetworkCapabilityV_template::nFCapability() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field nFCapability of a non-specific template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV.");
return single_value->field_nFCapability;
}

BITSTRING_template& MSNetworkCapabilityV_template::gERANNertworkSharingCapability()
{
set_specific();
return single_value->field_gERANNertworkSharingCapability;
}

const BITSTRING_template& MSNetworkCapabilityV_template::gERANNertworkSharingCapability() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field gERANNertworkSharingCapability of a non-specific template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV.");
return single_value->field_gERANNertworkSharingCapability;
}

OCTETSTRING_template& MSNetworkCapabilityV_template::spare__octets()
{
set_specific();
return single_value->field_spare__octets;
}

const OCTETSTRING_template& MSNetworkCapabilityV_template::spare__octets() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field spare_octets of a non-specific template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV.");
return single_value->field_spare__octets;
}

int MSNetworkCapabilityV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
  {    int ret_val = 5;
      if (single_value->field_solSACapability.is_present()) ret_val++;
      if (single_value->field_revisionLevelIndicatior.is_present()) ret_val++;
      if (single_value->field_pFCFeatureMode.is_present()) ret_val++;
      if (single_value->field_extendedGEAbits.is_present()) ret_val++;
      if (single_value->field_lcsVAcapability.is_present()) ret_val++;
      if (single_value->field_pSInterRATHOtoUTRANIuModeCapability.is_present()) ret_val++;
      if (single_value->field_pSInterRATHOtoEUTRANS1ModeCapability.is_present()) ret_val++;
      if (single_value->field_eMMCombinedProceduresCapability.is_present()) ret_val++;
      if (single_value->field_iSRSupport.is_present()) ret_val++;
      if (single_value->field_sRVCCtoGERANUTRANCapability.is_present()) ret_val++;
      if (single_value->field_ePCCapability.is_present()) ret_val++;
      if (single_value->field_nFCapability.is_present()) ret_val++;
      if (single_value->field_gERANNertworkSharingCapability.is_present()) ret_val++;
      if (single_value->field_spare__octets.is_present()) ret_val++;
      return ret_val;
    }
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV.");
  }
  return 0;
}

void MSNetworkCapabilityV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ gea1bit := ");
single_value->field_gea1bit.log();
TTCN_Logger::log_event_str(", smCapabilitiesviaDedicatedChannels := ");
single_value->field_smCapabilitiesviaDedicatedChannels.log();
TTCN_Logger::log_event_str(", smCapabilitiesviaGPRSChannels := ");
single_value->field_smCapabilitiesviaGPRSChannels.log();
TTCN_Logger::log_event_str(", ucs2Support := ");
single_value->field_ucs2Support.log();
TTCN_Logger::log_event_str(", ssScreeningIndicator := ");
single_value->field_ssScreeningIndicator.log();
TTCN_Logger::log_event_str(", solSACapability := ");
single_value->field_solSACapability.log();
TTCN_Logger::log_event_str(", revisionLevelIndicatior := ");
single_value->field_revisionLevelIndicatior.log();
TTCN_Logger::log_event_str(", pFCFeatureMode := ");
single_value->field_pFCFeatureMode.log();
TTCN_Logger::log_event_str(", extendedGEAbits := ");
single_value->field_extendedGEAbits.log();
TTCN_Logger::log_event_str(", lcsVAcapability := ");
single_value->field_lcsVAcapability.log();
TTCN_Logger::log_event_str(", pSInterRATHOtoUTRANIuModeCapability := ");
single_value->field_pSInterRATHOtoUTRANIuModeCapability.log();
TTCN_Logger::log_event_str(", pSInterRATHOtoEUTRANS1ModeCapability := ");
single_value->field_pSInterRATHOtoEUTRANS1ModeCapability.log();
TTCN_Logger::log_event_str(", eMMCombinedProceduresCapability := ");
single_value->field_eMMCombinedProceduresCapability.log();
TTCN_Logger::log_event_str(", iSRSupport := ");
single_value->field_iSRSupport.log();
TTCN_Logger::log_event_str(", sRVCCtoGERANUTRANCapability := ");
single_value->field_sRVCCtoGERANUTRANCapability.log();
TTCN_Logger::log_event_str(", ePCCapability := ");
single_value->field_ePCCapability.log();
TTCN_Logger::log_event_str(", nFCapability := ");
single_value->field_nFCapability.log();
TTCN_Logger::log_event_str(", gERANNertworkSharingCapability := ");
single_value->field_gERANNertworkSharingCapability.log();
TTCN_Logger::log_event_str(", spare_octets := ");
single_value->field_spare__octets.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void MSNetworkCapabilityV_template::log_match(const MSNetworkCapabilityV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_gea1bit.match(match_value.gea1bit(), legacy)){
TTCN_Logger::log_logmatch_info(".gea1bit");
single_value->field_gea1bit.log_match(match_value.gea1bit(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_smCapabilitiesviaDedicatedChannels.match(match_value.smCapabilitiesviaDedicatedChannels(), legacy)){
TTCN_Logger::log_logmatch_info(".smCapabilitiesviaDedicatedChannels");
single_value->field_smCapabilitiesviaDedicatedChannels.log_match(match_value.smCapabilitiesviaDedicatedChannels(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_smCapabilitiesviaGPRSChannels.match(match_value.smCapabilitiesviaGPRSChannels(), legacy)){
TTCN_Logger::log_logmatch_info(".smCapabilitiesviaGPRSChannels");
single_value->field_smCapabilitiesviaGPRSChannels.log_match(match_value.smCapabilitiesviaGPRSChannels(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_ucs2Support.match(match_value.ucs2Support(), legacy)){
TTCN_Logger::log_logmatch_info(".ucs2Support");
single_value->field_ucs2Support.log_match(match_value.ucs2Support(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_ssScreeningIndicator.match(match_value.ssScreeningIndicator(), legacy)){
TTCN_Logger::log_logmatch_info(".ssScreeningIndicator");
single_value->field_ssScreeningIndicator.log_match(match_value.ssScreeningIndicator(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if (match_value.solSACapability().ispresent()){
if(!single_value->field_solSACapability.match(match_value.solSACapability(), legacy)){
TTCN_Logger::log_logmatch_info(".solSACapability");
single_value->field_solSACapability.log_match(match_value.solSACapability(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
} else {
if (!single_value->field_solSACapability.match_omit(legacy)){
 TTCN_Logger::log_logmatch_info(".solSACapability := omit with ");
TTCN_Logger::print_logmatch_buffer();
single_value->field_solSACapability.log();
TTCN_Logger::log_event_str(" unmatched");
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}
if (match_value.revisionLevelIndicatior().ispresent()){
if(!single_value->field_revisionLevelIndicatior.match(match_value.revisionLevelIndicatior(), legacy)){
TTCN_Logger::log_logmatch_info(".revisionLevelIndicatior");
single_value->field_revisionLevelIndicatior.log_match(match_value.revisionLevelIndicatior(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
} else {
if (!single_value->field_revisionLevelIndicatior.match_omit(legacy)){
 TTCN_Logger::log_logmatch_info(".revisionLevelIndicatior := omit with ");
TTCN_Logger::print_logmatch_buffer();
single_value->field_revisionLevelIndicatior.log();
TTCN_Logger::log_event_str(" unmatched");
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}
if (match_value.pFCFeatureMode().ispresent()){
if(!single_value->field_pFCFeatureMode.match(match_value.pFCFeatureMode(), legacy)){
TTCN_Logger::log_logmatch_info(".pFCFeatureMode");
single_value->field_pFCFeatureMode.log_match(match_value.pFCFeatureMode(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
} else {
if (!single_value->field_pFCFeatureMode.match_omit(legacy)){
 TTCN_Logger::log_logmatch_info(".pFCFeatureMode := omit with ");
TTCN_Logger::print_logmatch_buffer();
single_value->field_pFCFeatureMode.log();
TTCN_Logger::log_event_str(" unmatched");
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}
if (match_value.extendedGEAbits().ispresent()){
if(!single_value->field_extendedGEAbits.match(match_value.extendedGEAbits(), legacy)){
TTCN_Logger::log_logmatch_info(".extendedGEAbits");
single_value->field_extendedGEAbits.log_match(match_value.extendedGEAbits(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
} else {
if (!single_value->field_extendedGEAbits.match_omit(legacy)){
 TTCN_Logger::log_logmatch_info(".extendedGEAbits := omit with ");
TTCN_Logger::print_logmatch_buffer();
single_value->field_extendedGEAbits.log();
TTCN_Logger::log_event_str(" unmatched");
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}
if (match_value.lcsVAcapability().ispresent()){
if(!single_value->field_lcsVAcapability.match(match_value.lcsVAcapability(), legacy)){
TTCN_Logger::log_logmatch_info(".lcsVAcapability");
single_value->field_lcsVAcapability.log_match(match_value.lcsVAcapability(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
} else {
if (!single_value->field_lcsVAcapability.match_omit(legacy)){
 TTCN_Logger::log_logmatch_info(".lcsVAcapability := omit with ");
TTCN_Logger::print_logmatch_buffer();
single_value->field_lcsVAcapability.log();
TTCN_Logger::log_event_str(" unmatched");
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}
if (match_value.pSInterRATHOtoUTRANIuModeCapability().ispresent()){
if(!single_value->field_pSInterRATHOtoUTRANIuModeCapability.match(match_value.pSInterRATHOtoUTRANIuModeCapability(), legacy)){
TTCN_Logger::log_logmatch_info(".pSInterRATHOtoUTRANIuModeCapability");
single_value->field_pSInterRATHOtoUTRANIuModeCapability.log_match(match_value.pSInterRATHOtoUTRANIuModeCapability(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
} else {
if (!single_value->field_pSInterRATHOtoUTRANIuModeCapability.match_omit(legacy)){
 TTCN_Logger::log_logmatch_info(".pSInterRATHOtoUTRANIuModeCapability := omit with ");
TTCN_Logger::print_logmatch_buffer();
single_value->field_pSInterRATHOtoUTRANIuModeCapability.log();
TTCN_Logger::log_event_str(" unmatched");
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}
if (match_value.pSInterRATHOtoEUTRANS1ModeCapability().ispresent()){
if(!single_value->field_pSInterRATHOtoEUTRANS1ModeCapability.match(match_value.pSInterRATHOtoEUTRANS1ModeCapability(), legacy)){
TTCN_Logger::log_logmatch_info(".pSInterRATHOtoEUTRANS1ModeCapability");
single_value->field_pSInterRATHOtoEUTRANS1ModeCapability.log_match(match_value.pSInterRATHOtoEUTRANS1ModeCapability(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
} else {
if (!single_value->field_pSInterRATHOtoEUTRANS1ModeCapability.match_omit(legacy)){
 TTCN_Logger::log_logmatch_info(".pSInterRATHOtoEUTRANS1ModeCapability := omit with ");
TTCN_Logger::print_logmatch_buffer();
single_value->field_pSInterRATHOtoEUTRANS1ModeCapability.log();
TTCN_Logger::log_event_str(" unmatched");
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}
if (match_value.eMMCombinedProceduresCapability().ispresent()){
if(!single_value->field_eMMCombinedProceduresCapability.match(match_value.eMMCombinedProceduresCapability(), legacy)){
TTCN_Logger::log_logmatch_info(".eMMCombinedProceduresCapability");
single_value->field_eMMCombinedProceduresCapability.log_match(match_value.eMMCombinedProceduresCapability(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
} else {
if (!single_value->field_eMMCombinedProceduresCapability.match_omit(legacy)){
 TTCN_Logger::log_logmatch_info(".eMMCombinedProceduresCapability := omit with ");
TTCN_Logger::print_logmatch_buffer();
single_value->field_eMMCombinedProceduresCapability.log();
TTCN_Logger::log_event_str(" unmatched");
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}
if (match_value.iSRSupport().ispresent()){
if(!single_value->field_iSRSupport.match(match_value.iSRSupport(), legacy)){
TTCN_Logger::log_logmatch_info(".iSRSupport");
single_value->field_iSRSupport.log_match(match_value.iSRSupport(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
} else {
if (!single_value->field_iSRSupport.match_omit(legacy)){
 TTCN_Logger::log_logmatch_info(".iSRSupport := omit with ");
TTCN_Logger::print_logmatch_buffer();
single_value->field_iSRSupport.log();
TTCN_Logger::log_event_str(" unmatched");
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}
if (match_value.sRVCCtoGERANUTRANCapability().ispresent()){
if(!single_value->field_sRVCCtoGERANUTRANCapability.match(match_value.sRVCCtoGERANUTRANCapability(), legacy)){
TTCN_Logger::log_logmatch_info(".sRVCCtoGERANUTRANCapability");
single_value->field_sRVCCtoGERANUTRANCapability.log_match(match_value.sRVCCtoGERANUTRANCapability(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
} else {
if (!single_value->field_sRVCCtoGERANUTRANCapability.match_omit(legacy)){
 TTCN_Logger::log_logmatch_info(".sRVCCtoGERANUTRANCapability := omit with ");
TTCN_Logger::print_logmatch_buffer();
single_value->field_sRVCCtoGERANUTRANCapability.log();
TTCN_Logger::log_event_str(" unmatched");
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}
if (match_value.ePCCapability().ispresent()){
if(!single_value->field_ePCCapability.match(match_value.ePCCapability(), legacy)){
TTCN_Logger::log_logmatch_info(".ePCCapability");
single_value->field_ePCCapability.log_match(match_value.ePCCapability(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
} else {
if (!single_value->field_ePCCapability.match_omit(legacy)){
 TTCN_Logger::log_logmatch_info(".ePCCapability := omit with ");
TTCN_Logger::print_logmatch_buffer();
single_value->field_ePCCapability.log();
TTCN_Logger::log_event_str(" unmatched");
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}
if (match_value.nFCapability().ispresent()){
if(!single_value->field_nFCapability.match(match_value.nFCapability(), legacy)){
TTCN_Logger::log_logmatch_info(".nFCapability");
single_value->field_nFCapability.log_match(match_value.nFCapability(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
} else {
if (!single_value->field_nFCapability.match_omit(legacy)){
 TTCN_Logger::log_logmatch_info(".nFCapability := omit with ");
TTCN_Logger::print_logmatch_buffer();
single_value->field_nFCapability.log();
TTCN_Logger::log_event_str(" unmatched");
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}
if (match_value.gERANNertworkSharingCapability().ispresent()){
if(!single_value->field_gERANNertworkSharingCapability.match(match_value.gERANNertworkSharingCapability(), legacy)){
TTCN_Logger::log_logmatch_info(".gERANNertworkSharingCapability");
single_value->field_gERANNertworkSharingCapability.log_match(match_value.gERANNertworkSharingCapability(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
} else {
if (!single_value->field_gERANNertworkSharingCapability.match_omit(legacy)){
 TTCN_Logger::log_logmatch_info(".gERANNertworkSharingCapability := omit with ");
TTCN_Logger::print_logmatch_buffer();
single_value->field_gERANNertworkSharingCapability.log();
TTCN_Logger::log_event_str(" unmatched");
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}
if (match_value.spare__octets().ispresent()){
if(!single_value->field_spare__octets.match(match_value.spare__octets(), legacy)){
TTCN_Logger::log_logmatch_info(".spare_octets");
single_value->field_spare__octets.log_match(match_value.spare__octets(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
} else {
if (!single_value->field_spare__octets.match_omit(legacy)){
 TTCN_Logger::log_logmatch_info(".spare_octets := omit with ");
TTCN_Logger::print_logmatch_buffer();
single_value->field_spare__octets.log();
TTCN_Logger::log_event_str(" unmatched");
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ gea1bit := ");
single_value->field_gea1bit.log_match(match_value.gea1bit(), legacy);
TTCN_Logger::log_event_str(", smCapabilitiesviaDedicatedChannels := ");
single_value->field_smCapabilitiesviaDedicatedChannels.log_match(match_value.smCapabilitiesviaDedicatedChannels(), legacy);
TTCN_Logger::log_event_str(", smCapabilitiesviaGPRSChannels := ");
single_value->field_smCapabilitiesviaGPRSChannels.log_match(match_value.smCapabilitiesviaGPRSChannels(), legacy);
TTCN_Logger::log_event_str(", ucs2Support := ");
single_value->field_ucs2Support.log_match(match_value.ucs2Support(), legacy);
TTCN_Logger::log_event_str(", ssScreeningIndicator := ");
single_value->field_ssScreeningIndicator.log_match(match_value.ssScreeningIndicator(), legacy);
TTCN_Logger::log_event_str(", solSACapability := ");
if (match_value.solSACapability().ispresent()) {
single_value->field_solSACapability.log_match(match_value.solSACapability(), legacy);
} else {
TTCN_Logger::log_event_str("omit with ");
single_value->field_solSACapability.log();
if (single_value->field_solSACapability.match_omit(legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
TTCN_Logger::log_event_str(", revisionLevelIndicatior := ");
if (match_value.revisionLevelIndicatior().ispresent()) {
single_value->field_revisionLevelIndicatior.log_match(match_value.revisionLevelIndicatior(), legacy);
} else {
TTCN_Logger::log_event_str("omit with ");
single_value->field_revisionLevelIndicatior.log();
if (single_value->field_revisionLevelIndicatior.match_omit(legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
TTCN_Logger::log_event_str(", pFCFeatureMode := ");
if (match_value.pFCFeatureMode().ispresent()) {
single_value->field_pFCFeatureMode.log_match(match_value.pFCFeatureMode(), legacy);
} else {
TTCN_Logger::log_event_str("omit with ");
single_value->field_pFCFeatureMode.log();
if (single_value->field_pFCFeatureMode.match_omit(legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
TTCN_Logger::log_event_str(", extendedGEAbits := ");
if (match_value.extendedGEAbits().ispresent()) {
single_value->field_extendedGEAbits.log_match(match_value.extendedGEAbits(), legacy);
} else {
TTCN_Logger::log_event_str("omit with ");
single_value->field_extendedGEAbits.log();
if (single_value->field_extendedGEAbits.match_omit(legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
TTCN_Logger::log_event_str(", lcsVAcapability := ");
if (match_value.lcsVAcapability().ispresent()) {
single_value->field_lcsVAcapability.log_match(match_value.lcsVAcapability(), legacy);
} else {
TTCN_Logger::log_event_str("omit with ");
single_value->field_lcsVAcapability.log();
if (single_value->field_lcsVAcapability.match_omit(legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
TTCN_Logger::log_event_str(", pSInterRATHOtoUTRANIuModeCapability := ");
if (match_value.pSInterRATHOtoUTRANIuModeCapability().ispresent()) {
single_value->field_pSInterRATHOtoUTRANIuModeCapability.log_match(match_value.pSInterRATHOtoUTRANIuModeCapability(), legacy);
} else {
TTCN_Logger::log_event_str("omit with ");
single_value->field_pSInterRATHOtoUTRANIuModeCapability.log();
if (single_value->field_pSInterRATHOtoUTRANIuModeCapability.match_omit(legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
TTCN_Logger::log_event_str(", pSInterRATHOtoEUTRANS1ModeCapability := ");
if (match_value.pSInterRATHOtoEUTRANS1ModeCapability().ispresent()) {
single_value->field_pSInterRATHOtoEUTRANS1ModeCapability.log_match(match_value.pSInterRATHOtoEUTRANS1ModeCapability(), legacy);
} else {
TTCN_Logger::log_event_str("omit with ");
single_value->field_pSInterRATHOtoEUTRANS1ModeCapability.log();
if (single_value->field_pSInterRATHOtoEUTRANS1ModeCapability.match_omit(legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
TTCN_Logger::log_event_str(", eMMCombinedProceduresCapability := ");
if (match_value.eMMCombinedProceduresCapability().ispresent()) {
single_value->field_eMMCombinedProceduresCapability.log_match(match_value.eMMCombinedProceduresCapability(), legacy);
} else {
TTCN_Logger::log_event_str("omit with ");
single_value->field_eMMCombinedProceduresCapability.log();
if (single_value->field_eMMCombinedProceduresCapability.match_omit(legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
TTCN_Logger::log_event_str(", iSRSupport := ");
if (match_value.iSRSupport().ispresent()) {
single_value->field_iSRSupport.log_match(match_value.iSRSupport(), legacy);
} else {
TTCN_Logger::log_event_str("omit with ");
single_value->field_iSRSupport.log();
if (single_value->field_iSRSupport.match_omit(legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
TTCN_Logger::log_event_str(", sRVCCtoGERANUTRANCapability := ");
if (match_value.sRVCCtoGERANUTRANCapability().ispresent()) {
single_value->field_sRVCCtoGERANUTRANCapability.log_match(match_value.sRVCCtoGERANUTRANCapability(), legacy);
} else {
TTCN_Logger::log_event_str("omit with ");
single_value->field_sRVCCtoGERANUTRANCapability.log();
if (single_value->field_sRVCCtoGERANUTRANCapability.match_omit(legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
TTCN_Logger::log_event_str(", ePCCapability := ");
if (match_value.ePCCapability().ispresent()) {
single_value->field_ePCCapability.log_match(match_value.ePCCapability(), legacy);
} else {
TTCN_Logger::log_event_str("omit with ");
single_value->field_ePCCapability.log();
if (single_value->field_ePCCapability.match_omit(legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
TTCN_Logger::log_event_str(", nFCapability := ");
if (match_value.nFCapability().ispresent()) {
single_value->field_nFCapability.log_match(match_value.nFCapability(), legacy);
} else {
TTCN_Logger::log_event_str("omit with ");
single_value->field_nFCapability.log();
if (single_value->field_nFCapability.match_omit(legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
TTCN_Logger::log_event_str(", gERANNertworkSharingCapability := ");
if (match_value.gERANNertworkSharingCapability().ispresent()) {
single_value->field_gERANNertworkSharingCapability.log_match(match_value.gERANNertworkSharingCapability(), legacy);
} else {
TTCN_Logger::log_event_str("omit with ");
single_value->field_gERANNertworkSharingCapability.log();
if (single_value->field_gERANNertworkSharingCapability.match_omit(legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
TTCN_Logger::log_event_str(", spare_octets := ");
if (match_value.spare__octets().ispresent()) {
single_value->field_spare__octets.log_match(match_value.spare__octets(), legacy);
} else {
TTCN_Logger::log_event_str("omit with ");
single_value->field_spare__octets.log();
if (single_value->field_spare__octets.match_omit(legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void MSNetworkCapabilityV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (gea1bit().is_bound()) gea1bit().set_implicit_omit();
if (smCapabilitiesviaDedicatedChannels().is_bound()) smCapabilitiesviaDedicatedChannels().set_implicit_omit();
if (smCapabilitiesviaGPRSChannels().is_bound()) smCapabilitiesviaGPRSChannels().set_implicit_omit();
if (ucs2Support().is_bound()) ucs2Support().set_implicit_omit();
if (ssScreeningIndicator().is_bound()) ssScreeningIndicator().set_implicit_omit();
if (!solSACapability().is_bound()) solSACapability() = OMIT_VALUE;
else solSACapability().set_implicit_omit();
if (!revisionLevelIndicatior().is_bound()) revisionLevelIndicatior() = OMIT_VALUE;
else revisionLevelIndicatior().set_implicit_omit();
if (!pFCFeatureMode().is_bound()) pFCFeatureMode() = OMIT_VALUE;
else pFCFeatureMode().set_implicit_omit();
if (!extendedGEAbits().is_bound()) extendedGEAbits() = OMIT_VALUE;
else extendedGEAbits().set_implicit_omit();
if (!lcsVAcapability().is_bound()) lcsVAcapability() = OMIT_VALUE;
else lcsVAcapability().set_implicit_omit();
if (!pSInterRATHOtoUTRANIuModeCapability().is_bound()) pSInterRATHOtoUTRANIuModeCapability() = OMIT_VALUE;
else pSInterRATHOtoUTRANIuModeCapability().set_implicit_omit();
if (!pSInterRATHOtoEUTRANS1ModeCapability().is_bound()) pSInterRATHOtoEUTRANS1ModeCapability() = OMIT_VALUE;
else pSInterRATHOtoEUTRANS1ModeCapability().set_implicit_omit();
if (!eMMCombinedProceduresCapability().is_bound()) eMMCombinedProceduresCapability() = OMIT_VALUE;
else eMMCombinedProceduresCapability().set_implicit_omit();
if (!iSRSupport().is_bound()) iSRSupport() = OMIT_VALUE;
else iSRSupport().set_implicit_omit();
if (!sRVCCtoGERANUTRANCapability().is_bound()) sRVCCtoGERANUTRANCapability() = OMIT_VALUE;
else sRVCCtoGERANUTRANCapability().set_implicit_omit();
if (!ePCCapability().is_bound()) ePCCapability() = OMIT_VALUE;
else ePCCapability().set_implicit_omit();
if (!nFCapability().is_bound()) nFCapability() = OMIT_VALUE;
else nFCapability().set_implicit_omit();
if (!gERANNertworkSharingCapability().is_bound()) gERANNertworkSharingCapability() = OMIT_VALUE;
else gERANNertworkSharingCapability().set_implicit_omit();
if (!spare__octets().is_bound()) spare__octets() = OMIT_VALUE;
else spare__octets().set_implicit_omit();
}

void MSNetworkCapabilityV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_gea1bit.encode_text(text_buf);
single_value->field_smCapabilitiesviaDedicatedChannels.encode_text(text_buf);
single_value->field_smCapabilitiesviaGPRSChannels.encode_text(text_buf);
single_value->field_ucs2Support.encode_text(text_buf);
single_value->field_ssScreeningIndicator.encode_text(text_buf);
single_value->field_solSACapability.encode_text(text_buf);
single_value->field_revisionLevelIndicatior.encode_text(text_buf);
single_value->field_pFCFeatureMode.encode_text(text_buf);
single_value->field_extendedGEAbits.encode_text(text_buf);
single_value->field_lcsVAcapability.encode_text(text_buf);
single_value->field_pSInterRATHOtoUTRANIuModeCapability.encode_text(text_buf);
single_value->field_pSInterRATHOtoEUTRANS1ModeCapability.encode_text(text_buf);
single_value->field_eMMCombinedProceduresCapability.encode_text(text_buf);
single_value->field_iSRSupport.encode_text(text_buf);
single_value->field_sRVCCtoGERANUTRANCapability.encode_text(text_buf);
single_value->field_ePCCapability.encode_text(text_buf);
single_value->field_nFCapability.encode_text(text_buf);
single_value->field_gERANNertworkSharingCapability.encode_text(text_buf);
single_value->field_spare__octets.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV.");
}
}

void MSNetworkCapabilityV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_gea1bit.decode_text(text_buf);
single_value->field_smCapabilitiesviaDedicatedChannels.decode_text(text_buf);
single_value->field_smCapabilitiesviaGPRSChannels.decode_text(text_buf);
single_value->field_ucs2Support.decode_text(text_buf);
single_value->field_ssScreeningIndicator.decode_text(text_buf);
single_value->field_solSACapability.decode_text(text_buf);
single_value->field_revisionLevelIndicatior.decode_text(text_buf);
single_value->field_pFCFeatureMode.decode_text(text_buf);
single_value->field_extendedGEAbits.decode_text(text_buf);
single_value->field_lcsVAcapability.decode_text(text_buf);
single_value->field_pSInterRATHOtoUTRANIuModeCapability.decode_text(text_buf);
single_value->field_pSInterRATHOtoEUTRANS1ModeCapability.decode_text(text_buf);
single_value->field_eMMCombinedProceduresCapability.decode_text(text_buf);
single_value->field_iSRSupport.decode_text(text_buf);
single_value->field_sRVCCtoGERANUTRANCapability.decode_text(text_buf);
single_value->field_ePCCapability.decode_text(text_buf);
single_value->field_nFCapability.decode_text(text_buf);
single_value->field_gERANNertworkSharingCapability.decode_text(text_buf);
single_value->field_spare__octets.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new MSNetworkCapabilityV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV.");
}
}

void MSNetworkCapabilityV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    MSNetworkCapabilityV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (19<param.get_size()) {
      param.error("record template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV has 19 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) gea1bit().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) smCapabilitiesviaDedicatedChannels().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) smCapabilitiesviaGPRSChannels().set_param(*param.get_elem(2));
    if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) ucs2Support().set_param(*param.get_elem(3));
    if (param.get_size()>4 && param.get_elem(4)->get_type()!=Module_Param::MP_NotUsed) ssScreeningIndicator().set_param(*param.get_elem(4));
    if (param.get_size()>5 && param.get_elem(5)->get_type()!=Module_Param::MP_NotUsed) solSACapability().set_param(*param.get_elem(5));
    if (param.get_size()>6 && param.get_elem(6)->get_type()!=Module_Param::MP_NotUsed) revisionLevelIndicatior().set_param(*param.get_elem(6));
    if (param.get_size()>7 && param.get_elem(7)->get_type()!=Module_Param::MP_NotUsed) pFCFeatureMode().set_param(*param.get_elem(7));
    if (param.get_size()>8 && param.get_elem(8)->get_type()!=Module_Param::MP_NotUsed) extendedGEAbits().set_param(*param.get_elem(8));
    if (param.get_size()>9 && param.get_elem(9)->get_type()!=Module_Param::MP_NotUsed) lcsVAcapability().set_param(*param.get_elem(9));
    if (param.get_size()>10 && param.get_elem(10)->get_type()!=Module_Param::MP_NotUsed) pSInterRATHOtoUTRANIuModeCapability().set_param(*param.get_elem(10));
    if (param.get_size()>11 && param.get_elem(11)->get_type()!=Module_Param::MP_NotUsed) pSInterRATHOtoEUTRANS1ModeCapability().set_param(*param.get_elem(11));
    if (param.get_size()>12 && param.get_elem(12)->get_type()!=Module_Param::MP_NotUsed) eMMCombinedProceduresCapability().set_param(*param.get_elem(12));
    if (param.get_size()>13 && param.get_elem(13)->get_type()!=Module_Param::MP_NotUsed) iSRSupport().set_param(*param.get_elem(13));
    if (param.get_size()>14 && param.get_elem(14)->get_type()!=Module_Param::MP_NotUsed) sRVCCtoGERANUTRANCapability().set_param(*param.get_elem(14));
    if (param.get_size()>15 && param.get_elem(15)->get_type()!=Module_Param::MP_NotUsed) ePCCapability().set_param(*param.get_elem(15));
    if (param.get_size()>16 && param.get_elem(16)->get_type()!=Module_Param::MP_NotUsed) nFCapability().set_param(*param.get_elem(16));
    if (param.get_size()>17 && param.get_elem(17)->get_type()!=Module_Param::MP_NotUsed) gERANNertworkSharingCapability().set_param(*param.get_elem(17));
    if (param.get_size()>18 && param.get_elem(18)->get_type()!=Module_Param::MP_NotUsed) spare__octets().set_param(*param.get_elem(18));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "gea1bit")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          gea1bit().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "smCapabilitiesviaDedicatedChannels")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          smCapabilitiesviaDedicatedChannels().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "smCapabilitiesviaGPRSChannels")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          smCapabilitiesviaGPRSChannels().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "ucs2Support")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          ucs2Support().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "ssScreeningIndicator")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          ssScreeningIndicator().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "solSACapability")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          solSACapability().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "revisionLevelIndicatior")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          revisionLevelIndicatior().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "pFCFeatureMode")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          pFCFeatureMode().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "extendedGEAbits")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          extendedGEAbits().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "lcsVAcapability")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          lcsVAcapability().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "pSInterRATHOtoUTRANIuModeCapability")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          pSInterRATHOtoUTRANIuModeCapability().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "pSInterRATHOtoEUTRANS1ModeCapability")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          pSInterRATHOtoEUTRANS1ModeCapability().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "eMMCombinedProceduresCapability")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          eMMCombinedProceduresCapability().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "iSRSupport")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          iSRSupport().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "sRVCCtoGERANUTRANCapability")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          sRVCCtoGERANUTRANCapability().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "ePCCapability")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          ePCCapability().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "nFCapability")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          nFCapability().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "gERANNertworkSharingCapability")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          gERANNertworkSharingCapability().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "spare_octets")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          spare__octets().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.MSNetworkCapabilityV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    MSNetworkCapabilityV_template* precondition = new MSNetworkCapabilityV_template;
    precondition->set_param(*param.get_elem(0));
    MSNetworkCapabilityV_template* implied_template = new MSNetworkCapabilityV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = MSNetworkCapabilityV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV");
  }
  is_ifpresent = param.get_ifpresent();
}

void MSNetworkCapabilityV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_gea1bit.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV");
single_value->field_smCapabilitiesviaDedicatedChannels.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV");
single_value->field_smCapabilitiesviaGPRSChannels.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV");
single_value->field_ucs2Support.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV");
single_value->field_ssScreeningIndicator.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV");
single_value->field_solSACapability.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV");
single_value->field_revisionLevelIndicatior.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV");
single_value->field_pFCFeatureMode.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV");
single_value->field_extendedGEAbits.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV");
single_value->field_lcsVAcapability.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV");
single_value->field_pSInterRATHOtoUTRANIuModeCapability.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV");
single_value->field_pSInterRATHOtoEUTRANS1ModeCapability.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV");
single_value->field_eMMCombinedProceduresCapability.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV");
single_value->field_iSRSupport.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV");
single_value->field_sRVCCtoGERANUTRANCapability.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV");
single_value->field_ePCCapability.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV");
single_value->field_nFCapability.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV");
single_value->field_gERANNertworkSharingCapability.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV");
single_value->field_spare__octets.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_GMM_SM_Types.MSNetworkCapabilityV");
}

boolean MSNetworkCapabilityV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean MSNetworkCapabilityV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

MSNetworkCapabilityLV::MSNetworkCapabilityLV()
{
}

MSNetworkCapabilityLV::MSNetworkCapabilityLV(const INTEGER& par_lengthIndicator,
    const MSNetworkCapabilityV& par_msNetworkCapabilityV)
  :   field_lengthIndicator(par_lengthIndicator),
  field_msNetworkCapabilityV(par_msNetworkCapabilityV)
{
}

MSNetworkCapabilityLV::MSNetworkCapabilityLV(const MSNetworkCapabilityLV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityLV.");
if (other_value.lengthIndicator().is_bound()) field_lengthIndicator = other_value.lengthIndicator();
else field_lengthIndicator.clean_up();
if (other_value.msNetworkCapabilityV().is_bound()) field_msNetworkCapabilityV = other_value.msNetworkCapabilityV();
else field_msNetworkCapabilityV.clean_up();
}

void MSNetworkCapabilityLV::clean_up()
{
field_lengthIndicator.clean_up();
field_msNetworkCapabilityV.clean_up();
}

const TTCN_Typedescriptor_t* MSNetworkCapabilityLV::get_descriptor() const { return &MSNetworkCapabilityLV_descr_; }
MSNetworkCapabilityLV& MSNetworkCapabilityLV::operator=(const MSNetworkCapabilityLV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityLV.");
  if (other_value.lengthIndicator().is_bound()) field_lengthIndicator = other_value.lengthIndicator();
  else field_lengthIndicator.clean_up();
  if (other_value.msNetworkCapabilityV().is_bound()) field_msNetworkCapabilityV = other_value.msNetworkCapabilityV();
  else field_msNetworkCapabilityV.clean_up();
}
return *this;
}

boolean MSNetworkCapabilityLV::operator==(const MSNetworkCapabilityLV& other_value) const
{
return field_lengthIndicator==other_value.field_lengthIndicator
  && field_msNetworkCapabilityV==other_value.field_msNetworkCapabilityV;
}

boolean MSNetworkCapabilityLV::is_bound() const
{
return (field_lengthIndicator.is_bound())
  || (field_msNetworkCapabilityV.is_bound());
}
boolean MSNetworkCapabilityLV::is_value() const
{
return field_lengthIndicator.is_value()
  && field_msNetworkCapabilityV.is_value();
}
void MSNetworkCapabilityLV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ lengthIndicator := ");
field_lengthIndicator.log();
TTCN_Logger::log_event_str(", msNetworkCapabilityV := ");
field_msNetworkCapabilityV.log();
TTCN_Logger::log_event_str(" }");
}

void MSNetworkCapabilityLV::set_implicit_omit()
{
if (lengthIndicator().is_bound()) lengthIndicator().set_implicit_omit();
if (msNetworkCapabilityV().is_bound()) msNetworkCapabilityV().set_implicit_omit();
}

void MSNetworkCapabilityLV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record value of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityLV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) lengthIndicator().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) msNetworkCapabilityV().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "lengthIndicator")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          lengthIndicator().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "msNetworkCapabilityV")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          msNetworkCapabilityV().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.MSNetworkCapabilityLV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_GMM_SM_Types.MSNetworkCapabilityLV");
  }
}

void MSNetworkCapabilityLV::encode_text(Text_Buf& text_buf) const
{
field_lengthIndicator.encode_text(text_buf);
field_msNetworkCapabilityV.encode_text(text_buf);
}

void MSNetworkCapabilityLV::decode_text(Text_Buf& text_buf)
{
field_lengthIndicator.decode_text(text_buf);
field_msNetworkCapabilityV.decode_text(text_buf);
}

void MSNetworkCapabilityLV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void MSNetworkCapabilityLV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int MSNetworkCapabilityLV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  int value_of_length_field0 = 0;
  RAW_Force_Omit field_0_force_omit(0, force_omit, MSNetworkCapabilityLV_lengthIndicator_descr_.raw->forceomit);
  decoded_field_length = field_lengthIndicator.RAW_decode(MSNetworkCapabilityLV_lengthIndicator_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  INTEGER tmp0 = field_lengthIndicator.convert_to_Integer(MSNetworkCapabilityLV_lengthIndicator_descr_);
  field_lengthIndicator = tmp0;
  value_of_length_field0 += tmp0.get_long_long_val() * 8;
  RAW_Force_Omit field_1_force_omit(1, force_omit, MSNetworkCapabilityLV_msNetworkCapabilityV_descr_.raw->forceomit);
  decoded_field_length = field_msNetworkCapabilityV.RAW_decode(MSNetworkCapabilityLV_msNetworkCapabilityV_descr_, p_buf, min_of_ints(2, limit, value_of_length_field0), local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  value_of_length_field0 -= decoded_field_length;
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int MSNetworkCapabilityLV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 2;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(2);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, MSNetworkCapabilityLV_lengthIndicator_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, MSNetworkCapabilityLV_msNetworkCapabilityV_descr_.raw);
  encoded_length += 8;
  myleaf.body.node.nodes[0]->calc = CALC_LENGTH;
  myleaf.body.node.nodes[0]->coding_descr = &MSNetworkCapabilityLV_lengthIndicator_descr_;
  myleaf.body.node.nodes[0]->calcof.lengthto.num_of_fields = 1;
  myleaf.body.node.nodes[0]->calcof.lengthto.unit = 8;
  myleaf.body.node.nodes[0]->calcof.lengthto.offset = 0;
  myleaf.body.node.nodes[0]->calcof.lengthto.fields = init_lengthto_fields_list(1);
  myleaf.body.node.nodes[0]->length = 8;
  myleaf.body.node.nodes[0]->calcof.lengthto.fields[0].level = myleaf.body.node.nodes[1]->curr_pos.level;
  myleaf.body.node.nodes[0]->calcof.lengthto.fields[0].pos = myleaf.body.node.nodes[1]->curr_pos.pos;
  encoded_length += field_msNetworkCapabilityV.RAW_encode(MSNetworkCapabilityLV_msNetworkCapabilityV_descr_, *myleaf.body.node.nodes[1]);
  return myleaf.length = encoded_length;
}

struct MSNetworkCapabilityLV_template::single_value_struct {
INTEGER_template field_lengthIndicator;
MSNetworkCapabilityV_template field_msNetworkCapabilityV;
};

void MSNetworkCapabilityLV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_lengthIndicator = ANY_VALUE;
single_value->field_msNetworkCapabilityV = ANY_VALUE;
}
}
}

void MSNetworkCapabilityLV_template::copy_value(const MSNetworkCapabilityLV& other_value)
{
single_value = new single_value_struct;
if (other_value.lengthIndicator().is_bound()) {
  single_value->field_lengthIndicator = other_value.lengthIndicator();
} else {
  single_value->field_lengthIndicator.clean_up();
}
if (other_value.msNetworkCapabilityV().is_bound()) {
  single_value->field_msNetworkCapabilityV = other_value.msNetworkCapabilityV();
} else {
  single_value->field_msNetworkCapabilityV.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void MSNetworkCapabilityLV_template::copy_template(const MSNetworkCapabilityLV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.lengthIndicator().get_selection()) {
single_value->field_lengthIndicator = other_value.lengthIndicator();
} else {
single_value->field_lengthIndicator.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.msNetworkCapabilityV().get_selection()) {
single_value->field_msNetworkCapabilityV = other_value.msNetworkCapabilityV();
} else {
single_value->field_msNetworkCapabilityV.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new MSNetworkCapabilityLV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new MSNetworkCapabilityLV_template(*other_value.implication_.precondition);
implication_.implied_template = new MSNetworkCapabilityLV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityLV.");
break;
}
set_selection(other_value);
}

MSNetworkCapabilityLV_template::MSNetworkCapabilityLV_template()
{
}

MSNetworkCapabilityLV_template::MSNetworkCapabilityLV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

MSNetworkCapabilityLV_template::MSNetworkCapabilityLV_template(const MSNetworkCapabilityLV& other_value)
{
copy_value(other_value);
}

MSNetworkCapabilityLV_template::MSNetworkCapabilityLV_template(const OPTIONAL<MSNetworkCapabilityLV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const MSNetworkCapabilityLV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityLV from an unbound optional field.");
}
}

MSNetworkCapabilityLV_template::MSNetworkCapabilityLV_template(MSNetworkCapabilityLV_template* p_precondition, MSNetworkCapabilityLV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

MSNetworkCapabilityLV_template::MSNetworkCapabilityLV_template(Dynamic_Match_Interface<MSNetworkCapabilityLV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<MSNetworkCapabilityLV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

MSNetworkCapabilityLV_template::MSNetworkCapabilityLV_template(const MSNetworkCapabilityLV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

MSNetworkCapabilityLV_template::~MSNetworkCapabilityLV_template()
{
clean_up();
}

MSNetworkCapabilityLV_template& MSNetworkCapabilityLV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

MSNetworkCapabilityLV_template& MSNetworkCapabilityLV_template::operator=(const MSNetworkCapabilityLV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

MSNetworkCapabilityLV_template& MSNetworkCapabilityLV_template::operator=(const OPTIONAL<MSNetworkCapabilityLV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const MSNetworkCapabilityLV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityLV.");
}
return *this;
}

MSNetworkCapabilityLV_template& MSNetworkCapabilityLV_template::operator=(const MSNetworkCapabilityLV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean MSNetworkCapabilityLV_template::match(const MSNetworkCapabilityLV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.lengthIndicator().is_bound()) return FALSE;
if(!single_value->field_lengthIndicator.match(other_value.lengthIndicator(), legacy))return FALSE;
if(!other_value.msNetworkCapabilityV().is_bound()) return FALSE;
if(!single_value->field_msNetworkCapabilityV.match(other_value.msNetworkCapabilityV(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityLV.");
}
return FALSE;
}

boolean MSNetworkCapabilityLV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_lengthIndicator.is_bound()
 || single_value->field_msNetworkCapabilityV.is_bound();
}

boolean MSNetworkCapabilityLV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_lengthIndicator.is_value()
 && single_value->field_msNetworkCapabilityV.is_value();
}

void MSNetworkCapabilityLV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

MSNetworkCapabilityLV MSNetworkCapabilityLV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityLV.");
MSNetworkCapabilityLV ret_val;
if (single_value->field_lengthIndicator.is_bound()) {
ret_val.lengthIndicator() = single_value->field_lengthIndicator.valueof();
}
if (single_value->field_msNetworkCapabilityV.is_bound()) {
ret_val.msNetworkCapabilityV() = single_value->field_msNetworkCapabilityV.valueof();
}
return ret_val;
}

void MSNetworkCapabilityLV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityLV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new MSNetworkCapabilityLV_template[list_length];
}

MSNetworkCapabilityLV_template& MSNetworkCapabilityLV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityLV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityLV.");
return value_list.list_value[list_index];
}

INTEGER_template& MSNetworkCapabilityLV_template::lengthIndicator()
{
set_specific();
return single_value->field_lengthIndicator;
}

const INTEGER_template& MSNetworkCapabilityLV_template::lengthIndicator() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field lengthIndicator of a non-specific template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityLV.");
return single_value->field_lengthIndicator;
}

MSNetworkCapabilityV_template& MSNetworkCapabilityLV_template::msNetworkCapabilityV()
{
set_specific();
return single_value->field_msNetworkCapabilityV;
}

const MSNetworkCapabilityV_template& MSNetworkCapabilityLV_template::msNetworkCapabilityV() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field msNetworkCapabilityV of a non-specific template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityLV.");
return single_value->field_msNetworkCapabilityV;
}

int MSNetworkCapabilityLV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityLV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 2;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityLV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityLV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityLV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityLV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityLV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityLV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityLV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityLV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityLV.");
  }
  return 0;
}

void MSNetworkCapabilityLV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ lengthIndicator := ");
single_value->field_lengthIndicator.log();
TTCN_Logger::log_event_str(", msNetworkCapabilityV := ");
single_value->field_msNetworkCapabilityV.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void MSNetworkCapabilityLV_template::log_match(const MSNetworkCapabilityLV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_lengthIndicator.match(match_value.lengthIndicator(), legacy)){
TTCN_Logger::log_logmatch_info(".lengthIndicator");
single_value->field_lengthIndicator.log_match(match_value.lengthIndicator(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_msNetworkCapabilityV.match(match_value.msNetworkCapabilityV(), legacy)){
TTCN_Logger::log_logmatch_info(".msNetworkCapabilityV");
single_value->field_msNetworkCapabilityV.log_match(match_value.msNetworkCapabilityV(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ lengthIndicator := ");
single_value->field_lengthIndicator.log_match(match_value.lengthIndicator(), legacy);
TTCN_Logger::log_event_str(", msNetworkCapabilityV := ");
single_value->field_msNetworkCapabilityV.log_match(match_value.msNetworkCapabilityV(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void MSNetworkCapabilityLV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (lengthIndicator().is_bound()) lengthIndicator().set_implicit_omit();
if (msNetworkCapabilityV().is_bound()) msNetworkCapabilityV().set_implicit_omit();
}

void MSNetworkCapabilityLV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_lengthIndicator.encode_text(text_buf);
single_value->field_msNetworkCapabilityV.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityLV.");
}
}

void MSNetworkCapabilityLV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_lengthIndicator.decode_text(text_buf);
single_value->field_msNetworkCapabilityV.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new MSNetworkCapabilityLV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityLV.");
}
}

void MSNetworkCapabilityLV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    MSNetworkCapabilityLV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record template of type @MobileL3_GMM_SM_Types.MSNetworkCapabilityLV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) lengthIndicator().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) msNetworkCapabilityV().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "lengthIndicator")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          lengthIndicator().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "msNetworkCapabilityV")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          msNetworkCapabilityV().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_GMM_SM_Types.MSNetworkCapabilityLV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    MSNetworkCapabilityLV_template* precondition = new MSNetworkCapabilityLV_template;
    precondition->set_param(*param.get_elem(0));
    MSNetworkCapabilityLV_template* implied_template = new MSNetworkCapabilityLV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = MSNetworkCapabilityLV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_GMM_SM_Types.MSNetworkCapabilityLV");
  }
  is_ifpresent = param.get_ifpresent();
}

void MSNetworkCapabilityLV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_lengthIndicator.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.MSNetworkCapabilityLV");
single_value->field_msNetworkCapabilityV.check_restriction(t_res, t_name ? t_name : "@MobileL3_GMM_SM_Types.MSNetworkCapabilityLV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_GMM_SM_Types.MSNetworkCapabilityLV");
}

boolean MSNetworkCapabilityLV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean MSNetworkCapabilityLV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}


} /* end of namespace */
