|  |  | @ -63,7 +63,7 @@ uint16_t* Maps_ReadGeology(DFHackObject*  maps) | 
			
		
	
		
		
			
				
					
					|  |  |  | 		 |  |  |  | 		 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if(((DFHack::Maps*)maps)->ReadGeology(geology)) |  |  |  | 		if(((DFHack::Maps*)maps)->ReadGeology(geology)) | 
			
		
	
		
		
			
				
					
					|  |  |  | 		{ |  |  |  | 		{ | 
			
		
	
		
		
			
				
					
					|  |  |  | 			uint16_t* buf = NULL; |  |  |  | 			uint16_t** buf = NULL; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 			uint32_t geoLength = 0; |  |  |  | 			uint32_t geoLength = 0; | 
			
		
	
		
		
			
				
					
					|  |  |  | 			 |  |  |  | 			 | 
			
		
	
		
		
			
				
					
					|  |  |  | 			for(unsigned int i = 0; i < geology.size(); i++) |  |  |  | 			for(unsigned int i = 0; i < geology.size(); i++) | 
			
		
	
	
		
		
			
				
					|  |  | @ -78,7 +78,7 @@ uint16_t* Maps_ReadGeology(DFHackObject*  maps) | 
			
		
	
		
		
			
				
					
					|  |  |  | 			 |  |  |  | 			 | 
			
		
	
		
		
			
				
					
					|  |  |  | 			if(buf != NULL) |  |  |  | 			if(buf != NULL) | 
			
		
	
		
		
			
				
					
					|  |  |  | 			{ |  |  |  | 			{ | 
			
		
	
		
		
			
				
					
					|  |  |  | 				uint16_t* bufCopyPtr = buf; |  |  |  | 				uint16_t* bufCopyPtr = *buf; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 				 |  |  |  | 				 | 
			
		
	
		
		
			
				
					
					|  |  |  | 				for(unsigned int i = 0; i < geology.size(); i++) |  |  |  | 				for(unsigned int i = 0; i < geology.size(); i++) | 
			
		
	
		
		
			
				
					
					|  |  |  | 				{ |  |  |  | 				{ | 
			
		
	
	
		
		
			
				
					|  |  | @ -87,7 +87,7 @@ uint16_t* Maps_ReadGeology(DFHackObject*  maps) | 
			
		
	
		
		
			
				
					
					|  |  |  | 					bufCopyPtr += geology[i].size(); |  |  |  | 					bufCopyPtr += geology[i].size(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 				} |  |  |  | 				} | 
			
		
	
		
		
			
				
					
					|  |  |  | 				 |  |  |  | 				 | 
			
		
	
		
		
			
				
					
					|  |  |  | 				return buf; |  |  |  | 				return *buf; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 			} |  |  |  | 			} | 
			
		
	
		
		
			
				
					
					|  |  |  | 			else |  |  |  | 			else | 
			
		
	
		
		
			
				
					
					|  |  |  | 				return NULL; |  |  |  | 				return NULL; | 
			
		
	
	
		
		
			
				
					|  |  | @ -108,15 +108,15 @@ t_feature* Maps_ReadGlobalFeatures(DFHackObject* maps) | 
			
		
	
		
		
			
				
					
					|  |  |  | 			if(featureVec.size() <= 0) |  |  |  | 			if(featureVec.size() <= 0) | 
			
		
	
		
		
			
				
					
					|  |  |  | 				return NULL; |  |  |  | 				return NULL; | 
			
		
	
		
		
			
				
					
					|  |  |  | 			 |  |  |  | 			 | 
			
		
	
		
		
			
				
					
					|  |  |  | 			t_feature* buf = NULL; |  |  |  | 			t_feature** buf = NULL; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 			 |  |  |  | 			 | 
			
		
	
		
		
			
				
					
					|  |  |  | 			(*alloc_t_feature_buffer_callback)(buf, featureVec.size()); |  |  |  | 			(*alloc_t_feature_buffer_callback)(buf, featureVec.size()); | 
			
		
	
		
		
			
				
					
					|  |  |  | 			 |  |  |  | 			 | 
			
		
	
		
		
			
				
					
					|  |  |  | 			if(buf != NULL) |  |  |  | 			if(buf != NULL) | 
			
		
	
		
		
			
				
					
					|  |  |  | 			{ |  |  |  | 			{ | 
			
		
	
		
		
			
				
					
					|  |  |  | 				copy(featureVec.begin(), featureVec.end(), buf); |  |  |  | 				copy(featureVec.begin(), featureVec.end(), *buf); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 				 |  |  |  | 				 | 
			
		
	
		
		
			
				
					
					|  |  |  | 				return buf; |  |  |  | 				return *buf; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 			} |  |  |  | 			} | 
			
		
	
		
		
			
				
					
					|  |  |  | 			else |  |  |  | 			else | 
			
		
	
		
		
			
				
					
					|  |  |  | 				return NULL; |  |  |  | 				return NULL; | 
			
		
	
	
		
		
			
				
					|  |  | @ -368,7 +368,10 @@ t_vein* Maps_ReadStandardVeins(DFHackObject* maps, uint32_t x, uint32_t y, uint3 | 
			
		
	
		
		
			
				
					
					|  |  |  | 			 |  |  |  | 			 | 
			
		
	
		
		
			
				
					
					|  |  |  | 			if(veins.size() > 0) |  |  |  | 			if(veins.size() > 0) | 
			
		
	
		
		
			
				
					
					|  |  |  | 			{ |  |  |  | 			{ | 
			
		
	
		
		
			
				
					
					|  |  |  | 				((*alloc_vein_buffer_callback)(v_buf, veins.size())); |  |  |  | 				((*alloc_vein_buffer_callback)(&v_buf, veins.size())); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				if(v_buf == NULL) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 					return NULL; | 
			
		
	
		
		
			
				
					
					|  |  |  | 				 |  |  |  | 				 | 
			
		
	
		
		
			
				
					
					|  |  |  | 				copy(veins.begin(), veins.end(), v_buf); |  |  |  | 				copy(veins.begin(), veins.end(), v_buf); | 
			
		
	
		
		
			
				
					
					|  |  |  | 			} |  |  |  | 			} | 
			
		
	
	
		
		
			
				
					|  |  | @ -399,7 +402,10 @@ t_frozenliquidvein* Maps_ReadFrozenVeins(DFHackObject* maps, uint32_t x, uint32_ | 
			
		
	
		
		
			
				
					
					|  |  |  | 			 |  |  |  | 			 | 
			
		
	
		
		
			
				
					
					|  |  |  | 			if(frozen_veins.size() > 0) |  |  |  | 			if(frozen_veins.size() > 0) | 
			
		
	
		
		
			
				
					
					|  |  |  | 			{ |  |  |  | 			{ | 
			
		
	
		
		
			
				
					
					|  |  |  | 				((*alloc_frozenliquidvein_buffer_callback)(fv_buf, frozen_veins.size())); |  |  |  | 				((*alloc_frozenliquidvein_buffer_callback)(&fv_buf, frozen_veins.size())); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				if(fv_buf == NULL) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 					return NULL; | 
			
		
	
		
		
			
				
					
					|  |  |  | 				 |  |  |  | 				 | 
			
		
	
		
		
			
				
					
					|  |  |  | 				copy(frozen_veins.begin(), frozen_veins.end(), fv_buf); |  |  |  | 				copy(frozen_veins.begin(), frozen_veins.end(), fv_buf); | 
			
		
	
		
		
			
				
					
					|  |  |  | 			} |  |  |  | 			} | 
			
		
	
	
		
		
			
				
					|  |  | @ -430,7 +436,10 @@ t_spattervein* Maps_ReadSpatterVeins(DFHackObject* maps, uint32_t x, uint32_t y, | 
			
		
	
		
		
			
				
					
					|  |  |  | 			 |  |  |  | 			 | 
			
		
	
		
		
			
				
					
					|  |  |  | 			if(spatter_veins.size() > 0) |  |  |  | 			if(spatter_veins.size() > 0) | 
			
		
	
		
		
			
				
					
					|  |  |  | 			{ |  |  |  | 			{ | 
			
		
	
		
		
			
				
					
					|  |  |  | 				((*alloc_spattervein_buffer_callback)(sv_buf, spatter_veins.size())); |  |  |  | 				((*alloc_spattervein_buffer_callback)(&sv_buf, spatter_veins.size())); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				if(sv_buf == NULL) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 					return NULL; | 
			
		
	
		
		
			
				
					
					|  |  |  | 				 |  |  |  | 				 | 
			
		
	
		
		
			
				
					
					|  |  |  | 				copy(spatter_veins.begin(), spatter_veins.end(), sv_buf); |  |  |  | 				copy(spatter_veins.begin(), spatter_veins.end(), sv_buf); | 
			
		
	
		
		
			
				
					
					|  |  |  | 			} |  |  |  | 			} | 
			
		
	
	
		
		
			
				
					|  |  | @ -461,7 +470,10 @@ t_grassvein* Maps_ReadGrassVeins(DFHackObject* maps, uint32_t x, uint32_t y, uin | 
			
		
	
		
		
			
				
					
					|  |  |  | 			 |  |  |  | 			 | 
			
		
	
		
		
			
				
					
					|  |  |  | 			if(grass_veins.size() > 0) |  |  |  | 			if(grass_veins.size() > 0) | 
			
		
	
		
		
			
				
					
					|  |  |  | 			{ |  |  |  | 			{ | 
			
		
	
		
		
			
				
					
					|  |  |  | 				((*alloc_grassvein_buffer_callback)(gs_buf, grass_veins.size())); |  |  |  | 				((*alloc_grassvein_buffer_callback)(&gs_buf, grass_veins.size())); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				if(gs_buf == NULL) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 					return NULL; | 
			
		
	
		
		
			
				
					
					|  |  |  | 				 |  |  |  | 				 | 
			
		
	
		
		
			
				
					
					|  |  |  | 				copy(grass_veins.begin(), grass_veins.end(), gs_buf); |  |  |  | 				copy(grass_veins.begin(), grass_veins.end(), gs_buf); | 
			
		
	
		
		
			
				
					
					|  |  |  | 			} |  |  |  | 			} | 
			
		
	
	
		
		
			
				
					|  |  | @ -492,7 +504,10 @@ t_worldconstruction* Maps_ReadWorldConstructions(DFHackObject* maps, uint32_t x, | 
			
		
	
		
		
			
				
					
					|  |  |  | 			 |  |  |  | 			 | 
			
		
	
		
		
			
				
					
					|  |  |  | 			if(constructions.size() > 0) |  |  |  | 			if(constructions.size() > 0) | 
			
		
	
		
		
			
				
					
					|  |  |  | 			{ |  |  |  | 			{ | 
			
		
	
		
		
			
				
					
					|  |  |  | 				((*alloc_worldconstruction_buffer_callback)(ct_buf, constructions.size())); |  |  |  | 				((*alloc_worldconstruction_buffer_callback)(&ct_buf, constructions.size())); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				if(ct_buf == NULL) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 					return NULL; | 
			
		
	
		
		
			
				
					
					|  |  |  | 				 |  |  |  | 				 | 
			
		
	
		
		
			
				
					
					|  |  |  | 				copy(constructions.begin(), constructions.end(), ct_buf); |  |  |  | 				copy(constructions.begin(), constructions.end(), ct_buf); | 
			
		
	
		
		
			
				
					
					|  |  |  | 			} |  |  |  | 			} | 
			
		
	
	
		
		
			
				
					|  |  | @ -506,6 +521,100 @@ t_worldconstruction* Maps_ReadWorldConstructions(DFHackObject* maps, uint32_t x, | 
			
		
	
		
		
			
				
					
					|  |  |  | 	return NULL; |  |  |  | 	return NULL; | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | int Maps_ReadAllVeins(DFHackObject* maps, uint32_t x, uint32_t y, uint32_t z, c_allveins* vein_struct) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	if(maps != NULL) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	{ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		if(alloc_vein_buffer_callback == NULL || alloc_frozenliquidvein_buffer_callback == NULL || | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			alloc_spattervein_buffer_callback == NULL || alloc_grassvein_buffer_callback == NULL || | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			alloc_worldconstruction_buffer_callback == NULL) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			return -1; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		vector<t_vein> veins; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		vector<t_frozenliquidvein> frozen_veins; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		vector<t_spattervein> spatter_veins; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		vector<t_grassvein> grass_veins; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		vector<t_worldconstruction> constructions; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		bool result = ((DFHack::Maps*)maps)->ReadVeins(x, y, z, &veins, &frozen_veins, &spatter_veins, &grass_veins, &constructions); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		if(result) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		{ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			t_vein* v_buf = NULL; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			t_frozenliquidvein* fv_buf = NULL; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			t_spattervein* sv_buf = NULL; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			t_grassvein* gs_buf = NULL; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			t_worldconstruction* ct_buf = NULL; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			if(veins.size() > 0) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			{ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				((*alloc_vein_buffer_callback)(&v_buf, veins.size())); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				if(v_buf == NULL) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 					return -1; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				copy(veins.begin(), veins.end(), v_buf); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				vein_struct->veins = v_buf; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			if(frozen_veins.size() > 0) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			{ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				((*alloc_frozenliquidvein_buffer_callback)(&fv_buf, frozen_veins.size())); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				if(fv_buf == NULL) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 					return -1; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				copy(frozen_veins.begin(), frozen_veins.end(), fv_buf); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				vein_struct->frozen_veins = fv_buf; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			if(spatter_veins.size() > 0) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			{ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				((*alloc_spattervein_buffer_callback)(&sv_buf, spatter_veins.size())); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				if(sv_buf == NULL) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 					return -1; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				copy(spatter_veins.begin(), spatter_veins.end(), sv_buf); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				vein_struct->spatter_veins = sv_buf; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			if(grass_veins.size() > 0) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			{ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				((*alloc_grassvein_buffer_callback)(&gs_buf, grass_veins.size())); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				if(gs_buf == NULL) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 					return NULL; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				copy(grass_veins.begin(), grass_veins.end(), gs_buf); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				vein_struct->grass_veins = gs_buf; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			if(constructions.size() > 0) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			{ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				((*alloc_worldconstruction_buffer_callback)(&ct_buf, constructions.size())); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				if(ct_buf == NULL) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 					return NULL; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				copy(constructions.begin(), constructions.end(), ct_buf); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				vein_struct->world_constructions = ct_buf; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			return 1; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		else | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			return 0; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	return -1; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | #ifdef __cplusplus |  |  |  | #ifdef __cplusplus | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | #endif |  |  |  | #endif | 
			
		
	
	
		
		
			
				
					|  |  | 
 |