/*
 * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
 * From ASN.1 module "RANAP-PDU"
 * 	found in "../../asn1/ranap/RANAP-PDU.asn"
 */

#ifndef	_RANAP_LeftMBMSBearerService_IEs_H_
#define	_RANAP_LeftMBMSBearerService_IEs_H_


#include <asn_application.h>

/* Including external dependencies */
#include <asn_SEQUENCE_OF.h>
#include "RANAP_TMGI.h"
#include "RANAP_ProtocolExtensionContainer.h"
#include <constr_SEQUENCE.h>
#include <constr_SEQUENCE_OF.h>

#ifdef __cplusplus
extern "C" {
#endif

/* RANAP_LeftMBMSBearerService-IEs */
typedef struct RANAP_LeftMBMSBearerService_IEs {
	A_SEQUENCE_OF(struct MemberK {
		RANAP_TMGI_t	 tMGI;
		RANAP_ProtocolExtensionContainer_t	*iE_Extensions	/* OPTIONAL */;
		/*
		 * This type is extensible,
		 * possible extensions are below.
		 */
		
		/* Context for parsing across buffer boundaries */
		asn_struct_ctx_t _asn_ctx;
	} ) list;
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} RANAP_LeftMBMSBearerService_IEs_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_RANAP_LeftMBMSBearerService_IEs;

#ifdef __cplusplus
}
#endif

#endif	/* _RANAP_LeftMBMSBearerService_IEs_H_ */
#include <asn_internal.h>
