diff --git a/src/ranap/RANAP_RAB-ReleasedList-IuRelComp.c b/src/ranap/RANAP_RAB-ReleasedList-IuRelComp.c
new file mode 100644
index 0000000..d97baa5
--- /dev/null
+++ b/src/ranap/RANAP_RAB-ReleasedList-IuRelComp.c
@@ -0,0 +1,145 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_RAB-ReleasedList-IuRelComp.h"
+
+static int
+memb_rabReleasedListIuRelComp_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		_ASN_CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size <= 65535l)) {
+		/* Perform validation of the inner elements */
+		return td->check_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		_ASN_CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_type_rabReleasedListIuRelComp_ies_constr_2 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_rabReleasedListIuRelComp_ies_constr_2 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_rabReleasedListIuRelComp_ies_2[] = {
+	{ ATF_POINTER, 0, 0,
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_RANAP_IE,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_rabReleasedListIuRelComp_ies_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_rabReleasedListIuRelComp_ies_specs_2 = {
+	sizeof(struct rabReleasedListIuRelComp_ies),
+	offsetof(struct rabReleasedListIuRelComp_ies, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_rabReleasedListIuRelComp_ies_2 = {
+	"rabReleasedListIuRelComp-ies",
+	"rabReleasedListIuRelComp-ies",
+	SEQUENCE_OF_free,
+	SEQUENCE_OF_print,
+	SEQUENCE_OF_constraint,
+	SEQUENCE_OF_decode_ber,
+	SEQUENCE_OF_encode_der,
+	SEQUENCE_OF_decode_xer,
+	SEQUENCE_OF_encode_xer,
+	SEQUENCE_OF_decode_uper,
+	SEQUENCE_OF_encode_uper,
+	SEQUENCE_OF_decode_aper,
+	SEQUENCE_OF_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_rabReleasedListIuRelComp_ies_tags_2,
+	sizeof(asn_DEF_rabReleasedListIuRelComp_ies_tags_2)
+		/sizeof(asn_DEF_rabReleasedListIuRelComp_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_rabReleasedListIuRelComp_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_rabReleasedListIuRelComp_ies_tags_2)
+		/sizeof(asn_DEF_rabReleasedListIuRelComp_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_rabReleasedListIuRelComp_ies_constr_2,
+	asn_MBR_rabReleasedListIuRelComp_ies_2,
+	1,	/* Single element */
+	&asn_SPC_rabReleasedListIuRelComp_ies_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_RANAP_RAB_ReleasedList_IuRelComp_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_ReleasedList_IuRelComp, rabReleasedListIuRelComp_ies),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_rabReleasedListIuRelComp_ies_2,
+		memb_rabReleasedListIuRelComp_ies_constraint_1,
+		&asn_PER_memb_rabReleasedListIuRelComp_ies_constr_2,
+		0,
+		"rabReleasedListIuRelComp-ies"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANAP_RAB_ReleasedList_IuRelComp_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_ReleasedList_IuRelComp_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rabReleasedListIuRelComp-ies */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_ReleasedList_IuRelComp_specs_1 = {
+	sizeof(struct RANAP_RAB_ReleasedList_IuRelComp),
+	offsetof(struct RANAP_RAB_ReleasedList_IuRelComp, _asn_ctx),
+	asn_MAP_RANAP_RAB_ReleasedList_IuRelComp_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	0,	/* Start extensions */
+	2	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_ReleasedList_IuRelComp = {
+	"RANAP_RAB-ReleasedList-IuRelComp",
+	"RANAP_RAB-ReleasedList-IuRelComp",
+	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_RANAP_RAB_ReleasedList_IuRelComp_tags_1,
+	sizeof(asn_DEF_RANAP_RAB_ReleasedList_IuRelComp_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_ReleasedList_IuRelComp_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RAB_ReleasedList_IuRelComp_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RAB_ReleasedList_IuRelComp_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_ReleasedList_IuRelComp_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_RAB_ReleasedList_IuRelComp_1,
+	1,	/* Elements count */
+	&asn_SPC_RANAP_RAB_ReleasedList_IuRelComp_specs_1	/* Additional specs */
+};
+
