diff --git a/src/rua/RUA_Gsm-map-IDNNS.c b/src/rua/RUA_Gsm-map-IDNNS.c
new file mode 100644
index 0000000..fc018f5
--- /dev/null
+++ b/src/rua/RUA_Gsm-map-IDNNS.c
@@ -0,0 +1,636 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RUA-IEs"
+ * 	found in "../../asn1/rua/RUA-IEs.asn"
+ */
+
+#include "RUA_Gsm-map-IDNNS.h"
+
+static asn_per_constraints_t asn_PER_type_routingbasis_constr_2 GCC_NOTUSED = {
+	{ APC_CONSTRAINED,	 3,  3,  0l,  7l }	/* (0..7) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_localPTMSI_3[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct localPTMSI, routingparameter),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RUA_RoutingParameter,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"routingparameter"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_localPTMSI_tags_3[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_localPTMSI_tag2el_3[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* routingparameter */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_localPTMSI_specs_3 = {
+	sizeof(struct localPTMSI),
+	offsetof(struct localPTMSI, _asn_ctx),
+	asn_MAP_localPTMSI_tag2el_3,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* Start extensions */
+	-1	/* Stop extensions */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_localPTMSI_3 = {
+	"localPTMSI",
+	"localPTMSI",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_localPTMSI_tags_3,
+	sizeof(asn_DEF_localPTMSI_tags_3)
+		/sizeof(asn_DEF_localPTMSI_tags_3[0]) - 1, /* 1 */
+	asn_DEF_localPTMSI_tags_3,	/* Same as above */
+	sizeof(asn_DEF_localPTMSI_tags_3)
+		/sizeof(asn_DEF_localPTMSI_tags_3[0]), /* 2 */
+	0,	/* No PER visible constraints */
+	asn_MBR_localPTMSI_3,
+	1,	/* Elements count */
+	&asn_SPC_localPTMSI_specs_3	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_tMSIofsamePLMN_5[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct tMSIofsamePLMN, routingparameter),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RUA_RoutingParameter,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"routingparameter"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_tMSIofsamePLMN_tags_5[] = {
+	(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_tMSIofsamePLMN_tag2el_5[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* routingparameter */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_tMSIofsamePLMN_specs_5 = {
+	sizeof(struct tMSIofsamePLMN),
+	offsetof(struct tMSIofsamePLMN, _asn_ctx),
+	asn_MAP_tMSIofsamePLMN_tag2el_5,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* Start extensions */
+	-1	/* Stop extensions */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_tMSIofsamePLMN_5 = {
+	"tMSIofsamePLMN",
+	"tMSIofsamePLMN",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_tMSIofsamePLMN_tags_5,
+	sizeof(asn_DEF_tMSIofsamePLMN_tags_5)
+		/sizeof(asn_DEF_tMSIofsamePLMN_tags_5[0]) - 1, /* 1 */
+	asn_DEF_tMSIofsamePLMN_tags_5,	/* Same as above */
+	sizeof(asn_DEF_tMSIofsamePLMN_tags_5)
+		/sizeof(asn_DEF_tMSIofsamePLMN_tags_5[0]), /* 2 */
+	0,	/* No PER visible constraints */
+	asn_MBR_tMSIofsamePLMN_5,
+	1,	/* Elements count */
+	&asn_SPC_tMSIofsamePLMN_specs_5	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_tMSIofdifferentPLMN_7[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct tMSIofdifferentPLMN, routingparameter),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RUA_RoutingParameter,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"routingparameter"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_tMSIofdifferentPLMN_tags_7[] = {
+	(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_tMSIofdifferentPLMN_tag2el_7[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* routingparameter */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_tMSIofdifferentPLMN_specs_7 = {
+	sizeof(struct tMSIofdifferentPLMN),
+	offsetof(struct tMSIofdifferentPLMN, _asn_ctx),
+	asn_MAP_tMSIofdifferentPLMN_tag2el_7,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* Start extensions */
+	-1	/* Stop extensions */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_tMSIofdifferentPLMN_7 = {
+	"tMSIofdifferentPLMN",
+	"tMSIofdifferentPLMN",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_tMSIofdifferentPLMN_tags_7,
+	sizeof(asn_DEF_tMSIofdifferentPLMN_tags_7)
+		/sizeof(asn_DEF_tMSIofdifferentPLMN_tags_7[0]) - 1, /* 1 */
+	asn_DEF_tMSIofdifferentPLMN_tags_7,	/* Same as above */
+	sizeof(asn_DEF_tMSIofdifferentPLMN_tags_7)
+		/sizeof(asn_DEF_tMSIofdifferentPLMN_tags_7[0]), /* 2 */
+	0,	/* No PER visible constraints */
+	asn_MBR_tMSIofdifferentPLMN_7,
+	1,	/* Elements count */
+	&asn_SPC_tMSIofdifferentPLMN_specs_7	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_iMSIresponsetopaging_9[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct iMSIresponsetopaging, routingparameter),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RUA_RoutingParameter,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"routingparameter"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_iMSIresponsetopaging_tags_9[] = {
+	(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_iMSIresponsetopaging_tag2el_9[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* routingparameter */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_iMSIresponsetopaging_specs_9 = {
+	sizeof(struct iMSIresponsetopaging),
+	offsetof(struct iMSIresponsetopaging, _asn_ctx),
+	asn_MAP_iMSIresponsetopaging_tag2el_9,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* Start extensions */
+	-1	/* Stop extensions */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_iMSIresponsetopaging_9 = {
+	"iMSIresponsetopaging",
+	"iMSIresponsetopaging",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_iMSIresponsetopaging_tags_9,
+	sizeof(asn_DEF_iMSIresponsetopaging_tags_9)
+		/sizeof(asn_DEF_iMSIresponsetopaging_tags_9[0]) - 1, /* 1 */
+	asn_DEF_iMSIresponsetopaging_tags_9,	/* Same as above */
+	sizeof(asn_DEF_iMSIresponsetopaging_tags_9)
+		/sizeof(asn_DEF_iMSIresponsetopaging_tags_9[0]), /* 2 */
+	0,	/* No PER visible constraints */
+	asn_MBR_iMSIresponsetopaging_9,
+	1,	/* Elements count */
+	&asn_SPC_iMSIresponsetopaging_specs_9	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_iMSIcauseUEinitiatedEvent_11[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct iMSIcauseUEinitiatedEvent, routingparameter),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RUA_RoutingParameter,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"routingparameter"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_iMSIcauseUEinitiatedEvent_tags_11[] = {
+	(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_iMSIcauseUEinitiatedEvent_tag2el_11[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* routingparameter */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_iMSIcauseUEinitiatedEvent_specs_11 = {
+	sizeof(struct iMSIcauseUEinitiatedEvent),
+	offsetof(struct iMSIcauseUEinitiatedEvent, _asn_ctx),
+	asn_MAP_iMSIcauseUEinitiatedEvent_tag2el_11,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* Start extensions */
+	-1	/* Stop extensions */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_iMSIcauseUEinitiatedEvent_11 = {
+	"iMSIcauseUEinitiatedEvent",
+	"iMSIcauseUEinitiatedEvent",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_iMSIcauseUEinitiatedEvent_tags_11,
+	sizeof(asn_DEF_iMSIcauseUEinitiatedEvent_tags_11)
+		/sizeof(asn_DEF_iMSIcauseUEinitiatedEvent_tags_11[0]) - 1, /* 1 */
+	asn_DEF_iMSIcauseUEinitiatedEvent_tags_11,	/* Same as above */
+	sizeof(asn_DEF_iMSIcauseUEinitiatedEvent_tags_11)
+		/sizeof(asn_DEF_iMSIcauseUEinitiatedEvent_tags_11[0]), /* 2 */
+	0,	/* No PER visible constraints */
+	asn_MBR_iMSIcauseUEinitiatedEvent_11,
+	1,	/* Elements count */
+	&asn_SPC_iMSIcauseUEinitiatedEvent_specs_11	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_iMEI_13[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct iMEI, routingparameter),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RUA_RoutingParameter,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"routingparameter"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_iMEI_tags_13[] = {
+	(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_iMEI_tag2el_13[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* routingparameter */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_iMEI_specs_13 = {
+	sizeof(struct iMEI),
+	offsetof(struct iMEI, _asn_ctx),
+	asn_MAP_iMEI_tag2el_13,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* Start extensions */
+	-1	/* Stop extensions */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_iMEI_13 = {
+	"iMEI",
+	"iMEI",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_iMEI_tags_13,
+	sizeof(asn_DEF_iMEI_tags_13)
+		/sizeof(asn_DEF_iMEI_tags_13[0]) - 1, /* 1 */
+	asn_DEF_iMEI_tags_13,	/* Same as above */
+	sizeof(asn_DEF_iMEI_tags_13)
+		/sizeof(asn_DEF_iMEI_tags_13[0]), /* 2 */
+	0,	/* No PER visible constraints */
+	asn_MBR_iMEI_13,
+	1,	/* Elements count */
+	&asn_SPC_iMEI_specs_13	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_spare2_15[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct spare2, routingparameter),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RUA_RoutingParameter,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"routingparameter"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_spare2_tags_15[] = {
+	(ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_spare2_tag2el_15[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* routingparameter */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_spare2_specs_15 = {
+	sizeof(struct spare2),
+	offsetof(struct spare2, _asn_ctx),
+	asn_MAP_spare2_tag2el_15,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* Start extensions */
+	-1	/* Stop extensions */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_spare2_15 = {
+	"spare2",
+	"spare2",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_spare2_tags_15,
+	sizeof(asn_DEF_spare2_tags_15)
+		/sizeof(asn_DEF_spare2_tags_15[0]) - 1, /* 1 */
+	asn_DEF_spare2_tags_15,	/* Same as above */
+	sizeof(asn_DEF_spare2_tags_15)
+		/sizeof(asn_DEF_spare2_tags_15[0]), /* 2 */
+	0,	/* No PER visible constraints */
+	asn_MBR_spare2_15,
+	1,	/* Elements count */
+	&asn_SPC_spare2_specs_15	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_spare1_17[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct spare1, routingparameter),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RUA_RoutingParameter,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"routingparameter"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_spare1_tags_17[] = {
+	(ASN_TAG_CLASS_CONTEXT | (7 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_spare1_tag2el_17[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* routingparameter */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_spare1_specs_17 = {
+	sizeof(struct spare1),
+	offsetof(struct spare1, _asn_ctx),
+	asn_MAP_spare1_tag2el_17,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* Start extensions */
+	-1	/* Stop extensions */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_spare1_17 = {
+	"spare1",
+	"spare1",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_spare1_tags_17,
+	sizeof(asn_DEF_spare1_tags_17)
+		/sizeof(asn_DEF_spare1_tags_17[0]) - 1, /* 1 */
+	asn_DEF_spare1_tags_17,	/* Same as above */
+	sizeof(asn_DEF_spare1_tags_17)
+		/sizeof(asn_DEF_spare1_tags_17[0]), /* 2 */
+	0,	/* No PER visible constraints */
+	asn_MBR_spare1_17,
+	1,	/* Elements count */
+	&asn_SPC_spare1_specs_17	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_routingbasis_2[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct routingbasis, choice.localPTMSI),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_localPTMSI_3,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"localPTMSI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct routingbasis, choice.tMSIofsamePLMN),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		0,
+		&asn_DEF_tMSIofsamePLMN_5,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"tMSIofsamePLMN"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct routingbasis, choice.tMSIofdifferentPLMN),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		0,
+		&asn_DEF_tMSIofdifferentPLMN_7,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"tMSIofdifferentPLMN"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct routingbasis, choice.iMSIresponsetopaging),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		0,
+		&asn_DEF_iMSIresponsetopaging_9,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iMSIresponsetopaging"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct routingbasis, choice.iMSIcauseUEinitiatedEvent),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		0,
+		&asn_DEF_iMSIcauseUEinitiatedEvent_11,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iMSIcauseUEinitiatedEvent"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct routingbasis, choice.iMEI),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		0,
+		&asn_DEF_iMEI_13,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iMEI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct routingbasis, choice.spare2),
+		(ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+		0,
+		&asn_DEF_spare2_15,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"spare2"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct routingbasis, choice.spare1),
+		(ASN_TAG_CLASS_CONTEXT | (7 << 2)),
+		0,
+		&asn_DEF_spare1_17,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"spare1"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_routingbasis_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* localPTMSI */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* tMSIofsamePLMN */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* tMSIofdifferentPLMN */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* iMSIresponsetopaging */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* iMSIcauseUEinitiatedEvent */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* iMEI */
+    { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* spare2 */
+    { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* spare1 */
+};
+static asn_CHOICE_specifics_t asn_SPC_routingbasis_specs_2 = {
+	sizeof(struct routingbasis),
+	offsetof(struct routingbasis, _asn_ctx),
+	offsetof(struct routingbasis, present),
+	sizeof(((struct routingbasis *)0)->present),
+	asn_MAP_routingbasis_tag2el_2,
+	8,	/* Count of tags in the map */
+	0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_routingbasis_2 = {
+	"routingbasis",
+	"routingbasis",
+	CHOICE_free,
+	CHOICE_print,
+	CHOICE_constraint,
+	CHOICE_decode_ber,
+	CHOICE_encode_der,
+	CHOICE_decode_xer,
+	CHOICE_encode_xer,
+	CHOICE_decode_uper,
+	CHOICE_encode_uper,
+	CHOICE_decode_aper,
+	CHOICE_encode_aper,
+	CHOICE_outmost_tag,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	&asn_PER_type_routingbasis_constr_2,
+	asn_MBR_routingbasis_2,
+	8,	/* Elements count */
+	&asn_SPC_routingbasis_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_RUA_Gsm_map_IDNNS_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RUA_Gsm_map_IDNNS, routingbasis),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_routingbasis_2,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"routingbasis"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RUA_Gsm_map_IDNNS, dummy),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BOOLEAN,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"dummy"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RUA_Gsm_map_IDNNS_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RUA_Gsm_map_IDNNS_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* routingbasis */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* dummy */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RUA_Gsm_map_IDNNS_specs_1 = {
+	sizeof(struct RUA_Gsm_map_IDNNS),
+	offsetof(struct RUA_Gsm_map_IDNNS, _asn_ctx),
+	asn_MAP_RUA_Gsm_map_IDNNS_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* Start extensions */
+	-1	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RUA_Gsm_map_IDNNS = {
+	"RUA_Gsm-map-IDNNS",
+	"RUA_Gsm-map-IDNNS",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RUA_Gsm_map_IDNNS_tags_1,
+	sizeof(asn_DEF_RUA_Gsm_map_IDNNS_tags_1)
+		/sizeof(asn_DEF_RUA_Gsm_map_IDNNS_tags_1[0]), /* 1 */
+	asn_DEF_RUA_Gsm_map_IDNNS_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RUA_Gsm_map_IDNNS_tags_1)
+		/sizeof(asn_DEF_RUA_Gsm_map_IDNNS_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RUA_Gsm_map_IDNNS_1,
+	2,	/* Elements count */
+	&asn_SPC_RUA_Gsm_map_IDNNS_specs_1	/* Additional specs */
+};
+
