236 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			236 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
	
| /* Generated by ./xlat/gen.sh from ./xlat/v4l2_control_id_bases.in; do not edit. */
 | |
| 
 | |
| #include "gcc_compat.h"
 | |
| #include "static_assert.h"
 | |
| 
 | |
| #if defined(V4L2_CID_BASE) || (defined(HAVE_DECL_V4L2_CID_BASE) && HAVE_DECL_V4L2_CID_BASE)
 | |
| DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| static_assert((V4L2_CID_BASE) == ((V4L2_CTRL_CLASS_USER | 0x900)), "V4L2_CID_BASE != (V4L2_CTRL_CLASS_USER | 0x900)");
 | |
| DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| #else
 | |
| # define V4L2_CID_BASE (V4L2_CTRL_CLASS_USER | 0x900)
 | |
| #endif
 | |
| #if defined(V4L2_CID_USER_MEYE_BASE) || (defined(HAVE_DECL_V4L2_CID_USER_MEYE_BASE) && HAVE_DECL_V4L2_CID_USER_MEYE_BASE)
 | |
| DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| static_assert((V4L2_CID_USER_MEYE_BASE) == ((V4L2_CID_BASE | 0x1000)), "V4L2_CID_USER_MEYE_BASE != (V4L2_CID_BASE | 0x1000)");
 | |
| DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| #else
 | |
| # define V4L2_CID_USER_MEYE_BASE (V4L2_CID_BASE | 0x1000)
 | |
| #endif
 | |
| #if defined(V4L2_CID_USER_BTTV_BASE) || (defined(HAVE_DECL_V4L2_CID_USER_BTTV_BASE) && HAVE_DECL_V4L2_CID_USER_BTTV_BASE)
 | |
| DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| static_assert((V4L2_CID_USER_BTTV_BASE) == ((V4L2_CID_BASE | 0x1010)), "V4L2_CID_USER_BTTV_BASE != (V4L2_CID_BASE | 0x1010)");
 | |
| DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| #else
 | |
| # define V4L2_CID_USER_BTTV_BASE (V4L2_CID_BASE | 0x1010)
 | |
| #endif
 | |
| #if defined(V4L2_CID_USER_S2255_BASE) || (defined(HAVE_DECL_V4L2_CID_USER_S2255_BASE) && HAVE_DECL_V4L2_CID_USER_S2255_BASE)
 | |
| DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| static_assert((V4L2_CID_USER_S2255_BASE) == ((V4L2_CID_BASE | 0x1030)), "V4L2_CID_USER_S2255_BASE != (V4L2_CID_BASE | 0x1030)");
 | |
| DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| #else
 | |
| # define V4L2_CID_USER_S2255_BASE (V4L2_CID_BASE | 0x1030)
 | |
| #endif
 | |
| #if defined(V4L2_CID_USER_SI476X_BASE) || (defined(HAVE_DECL_V4L2_CID_USER_SI476X_BASE) && HAVE_DECL_V4L2_CID_USER_SI476X_BASE)
 | |
| DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| static_assert((V4L2_CID_USER_SI476X_BASE) == ((V4L2_CID_BASE | 0x1040)), "V4L2_CID_USER_SI476X_BASE != (V4L2_CID_BASE | 0x1040)");
 | |
| DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| #else
 | |
| # define V4L2_CID_USER_SI476X_BASE (V4L2_CID_BASE | 0x1040)
 | |
| #endif
 | |
| #if defined(V4L2_CID_USER_TI_VPE_BASE) || (defined(HAVE_DECL_V4L2_CID_USER_TI_VPE_BASE) && HAVE_DECL_V4L2_CID_USER_TI_VPE_BASE)
 | |
| DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| static_assert((V4L2_CID_USER_TI_VPE_BASE) == ((V4L2_CID_BASE | 0x1050)), "V4L2_CID_USER_TI_VPE_BASE != (V4L2_CID_BASE | 0x1050)");
 | |
| DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| #else
 | |
| # define V4L2_CID_USER_TI_VPE_BASE (V4L2_CID_BASE | 0x1050)
 | |
| #endif
 | |
| #if defined(V4L2_CID_USER_SAA7134_BASE) || (defined(HAVE_DECL_V4L2_CID_USER_SAA7134_BASE) && HAVE_DECL_V4L2_CID_USER_SAA7134_BASE)
 | |
| DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| static_assert((V4L2_CID_USER_SAA7134_BASE) == ((V4L2_CID_BASE | 0x1060)), "V4L2_CID_USER_SAA7134_BASE != (V4L2_CID_BASE | 0x1060)");
 | |
| DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| #else
 | |
| # define V4L2_CID_USER_SAA7134_BASE (V4L2_CID_BASE | 0x1060)
 | |
| #endif
 | |
| #if defined(V4L2_CID_USER_ADV7180_BASE) || (defined(HAVE_DECL_V4L2_CID_USER_ADV7180_BASE) && HAVE_DECL_V4L2_CID_USER_ADV7180_BASE)
 | |
| DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| static_assert((V4L2_CID_USER_ADV7180_BASE) == ((V4L2_CID_BASE | 0x1070)), "V4L2_CID_USER_ADV7180_BASE != (V4L2_CID_BASE | 0x1070)");
 | |
| DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| #else
 | |
| # define V4L2_CID_USER_ADV7180_BASE (V4L2_CID_BASE | 0x1070)
 | |
| #endif
 | |
| #if defined(V4L2_CID_USER_TC358743_BASE) || (defined(HAVE_DECL_V4L2_CID_USER_TC358743_BASE) && HAVE_DECL_V4L2_CID_USER_TC358743_BASE)
 | |
| DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| static_assert((V4L2_CID_USER_TC358743_BASE) == ((V4L2_CID_BASE | 0x1080)), "V4L2_CID_USER_TC358743_BASE != (V4L2_CID_BASE | 0x1080)");
 | |
| DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| #else
 | |
| # define V4L2_CID_USER_TC358743_BASE (V4L2_CID_BASE | 0x1080)
 | |
| #endif
 | |
| #if defined(V4L2_CID_USER_MAX217X_BASE) || (defined(HAVE_DECL_V4L2_CID_USER_MAX217X_BASE) && HAVE_DECL_V4L2_CID_USER_MAX217X_BASE)
 | |
| DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| static_assert((V4L2_CID_USER_MAX217X_BASE) == ((V4L2_CID_BASE | 0x1090)), "V4L2_CID_USER_MAX217X_BASE != (V4L2_CID_BASE | 0x1090)");
 | |
| DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| #else
 | |
| # define V4L2_CID_USER_MAX217X_BASE (V4L2_CID_BASE | 0x1090)
 | |
| #endif
 | |
| #ifndef STRACE_WORKAROUND_FOR_V4L2_CID_USER_IMX_BASE
 | |
| # define STRACE_WORKAROUND_FOR_V4L2_CID_USER_IMX_BASE
 | |
| # undef V4L2_CID_USER_IMX_BASE
 | |
| #endif
 | |
| #if defined(V4L2_CID_USER_IMX_BASE) || (defined(HAVE_DECL_V4L2_CID_USER_IMX_BASE) && HAVE_DECL_V4L2_CID_USER_IMX_BASE)
 | |
| DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| static_assert((V4L2_CID_USER_IMX_BASE) == ((V4L2_CID_BASE | 0x10b0)), "V4L2_CID_USER_IMX_BASE != (V4L2_CID_BASE | 0x10b0)");
 | |
| DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| #else
 | |
| # define V4L2_CID_USER_IMX_BASE (V4L2_CID_BASE | 0x10b0)
 | |
| #endif
 | |
| #if defined(V4L2_CID_MPEG_BASE) || (defined(HAVE_DECL_V4L2_CID_MPEG_BASE) && HAVE_DECL_V4L2_CID_MPEG_BASE)
 | |
| DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| static_assert((V4L2_CID_MPEG_BASE) == ((V4L2_CTRL_CLASS_MPEG | 0x900)), "V4L2_CID_MPEG_BASE != (V4L2_CTRL_CLASS_MPEG | 0x900)");
 | |
| DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| #else
 | |
| # define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900)
 | |
| #endif
 | |
| #if defined(V4L2_CID_MPEG_CX2341X_BASE) || (defined(HAVE_DECL_V4L2_CID_MPEG_CX2341X_BASE) && HAVE_DECL_V4L2_CID_MPEG_CX2341X_BASE)
 | |
| DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| static_assert((V4L2_CID_MPEG_CX2341X_BASE) == ((V4L2_CTRL_CLASS_MPEG | 0x1000)), "V4L2_CID_MPEG_CX2341X_BASE != (V4L2_CTRL_CLASS_MPEG | 0x1000)");
 | |
| DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| #else
 | |
| # define V4L2_CID_MPEG_CX2341X_BASE (V4L2_CTRL_CLASS_MPEG | 0x1000)
 | |
| #endif
 | |
| #if defined(V4L2_CID_MPEG_MFC51_BASE) || (defined(HAVE_DECL_V4L2_CID_MPEG_MFC51_BASE) && HAVE_DECL_V4L2_CID_MPEG_MFC51_BASE)
 | |
| DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| static_assert((V4L2_CID_MPEG_MFC51_BASE) == ((V4L2_CTRL_CLASS_MPEG | 0x1100)), "V4L2_CID_MPEG_MFC51_BASE != (V4L2_CTRL_CLASS_MPEG | 0x1100)");
 | |
| DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| #else
 | |
| # define V4L2_CID_MPEG_MFC51_BASE (V4L2_CTRL_CLASS_MPEG | 0x1100)
 | |
| #endif
 | |
| #if defined(V4L2_CID_CAMERA_CLASS_BASE) || (defined(HAVE_DECL_V4L2_CID_CAMERA_CLASS_BASE) && HAVE_DECL_V4L2_CID_CAMERA_CLASS_BASE)
 | |
| DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| static_assert((V4L2_CID_CAMERA_CLASS_BASE) == ((V4L2_CTRL_CLASS_CAMERA | 0x900)), "V4L2_CID_CAMERA_CLASS_BASE != (V4L2_CTRL_CLASS_CAMERA | 0x900)");
 | |
| DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| #else
 | |
| # define V4L2_CID_CAMERA_CLASS_BASE (V4L2_CTRL_CLASS_CAMERA | 0x900)
 | |
| #endif
 | |
| #if defined(V4L2_CID_FM_TX_CLASS_BASE) || (defined(HAVE_DECL_V4L2_CID_FM_TX_CLASS_BASE) && HAVE_DECL_V4L2_CID_FM_TX_CLASS_BASE)
 | |
| DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| static_assert((V4L2_CID_FM_TX_CLASS_BASE) == ((V4L2_CTRL_CLASS_FM_TX | 0x900)), "V4L2_CID_FM_TX_CLASS_BASE != (V4L2_CTRL_CLASS_FM_TX | 0x900)");
 | |
| DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| #else
 | |
| # define V4L2_CID_FM_TX_CLASS_BASE (V4L2_CTRL_CLASS_FM_TX | 0x900)
 | |
| #endif
 | |
| #if defined(V4L2_CID_FLASH_CLASS_BASE) || (defined(HAVE_DECL_V4L2_CID_FLASH_CLASS_BASE) && HAVE_DECL_V4L2_CID_FLASH_CLASS_BASE)
 | |
| DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| static_assert((V4L2_CID_FLASH_CLASS_BASE) == ((V4L2_CTRL_CLASS_FLASH | 0x900)), "V4L2_CID_FLASH_CLASS_BASE != (V4L2_CTRL_CLASS_FLASH | 0x900)");
 | |
| DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| #else
 | |
| # define V4L2_CID_FLASH_CLASS_BASE (V4L2_CTRL_CLASS_FLASH | 0x900)
 | |
| #endif
 | |
| #if defined(V4L2_CID_JPEG_CLASS_BASE) || (defined(HAVE_DECL_V4L2_CID_JPEG_CLASS_BASE) && HAVE_DECL_V4L2_CID_JPEG_CLASS_BASE)
 | |
| DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| static_assert((V4L2_CID_JPEG_CLASS_BASE) == ((V4L2_CTRL_CLASS_JPEG | 0x900)), "V4L2_CID_JPEG_CLASS_BASE != (V4L2_CTRL_CLASS_JPEG | 0x900)");
 | |
| DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| #else
 | |
| # define V4L2_CID_JPEG_CLASS_BASE (V4L2_CTRL_CLASS_JPEG | 0x900)
 | |
| #endif
 | |
| #if defined(V4L2_CID_IMAGE_SOURCE_CLASS_BASE) || (defined(HAVE_DECL_V4L2_CID_IMAGE_SOURCE_CLASS_BASE) && HAVE_DECL_V4L2_CID_IMAGE_SOURCE_CLASS_BASE)
 | |
| DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| static_assert((V4L2_CID_IMAGE_SOURCE_CLASS_BASE) == ((V4L2_CTRL_CLASS_IMAGE_SOURCE | 0x900)), "V4L2_CID_IMAGE_SOURCE_CLASS_BASE != (V4L2_CTRL_CLASS_IMAGE_SOURCE | 0x900)");
 | |
| DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| #else
 | |
| # define V4L2_CID_IMAGE_SOURCE_CLASS_BASE (V4L2_CTRL_CLASS_IMAGE_SOURCE | 0x900)
 | |
| #endif
 | |
| #if defined(V4L2_CID_IMAGE_PROC_CLASS_BASE) || (defined(HAVE_DECL_V4L2_CID_IMAGE_PROC_CLASS_BASE) && HAVE_DECL_V4L2_CID_IMAGE_PROC_CLASS_BASE)
 | |
| DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| static_assert((V4L2_CID_IMAGE_PROC_CLASS_BASE) == ((V4L2_CTRL_CLASS_IMAGE_PROC | 0x900)), "V4L2_CID_IMAGE_PROC_CLASS_BASE != (V4L2_CTRL_CLASS_IMAGE_PROC | 0x900)");
 | |
| DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| #else
 | |
| # define V4L2_CID_IMAGE_PROC_CLASS_BASE (V4L2_CTRL_CLASS_IMAGE_PROC | 0x900)
 | |
| #endif
 | |
| #if defined(V4L2_CID_DV_CLASS_BASE) || (defined(HAVE_DECL_V4L2_CID_DV_CLASS_BASE) && HAVE_DECL_V4L2_CID_DV_CLASS_BASE)
 | |
| DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| static_assert((V4L2_CID_DV_CLASS_BASE) == ((V4L2_CTRL_CLASS_DV | 0x900)), "V4L2_CID_DV_CLASS_BASE != (V4L2_CTRL_CLASS_DV | 0x900)");
 | |
| DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| #else
 | |
| # define V4L2_CID_DV_CLASS_BASE (V4L2_CTRL_CLASS_DV | 0x900)
 | |
| #endif
 | |
| #if defined(V4L2_CID_FM_RX_CLASS_BASE) || (defined(HAVE_DECL_V4L2_CID_FM_RX_CLASS_BASE) && HAVE_DECL_V4L2_CID_FM_RX_CLASS_BASE)
 | |
| DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| static_assert((V4L2_CID_FM_RX_CLASS_BASE) == ((V4L2_CTRL_CLASS_FM_RX | 0x900)), "V4L2_CID_FM_RX_CLASS_BASE != (V4L2_CTRL_CLASS_FM_RX | 0x900)");
 | |
| DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| #else
 | |
| # define V4L2_CID_FM_RX_CLASS_BASE (V4L2_CTRL_CLASS_FM_RX | 0x900)
 | |
| #endif
 | |
| #if defined(V4L2_CID_RF_TUNER_CLASS_BASE) || (defined(HAVE_DECL_V4L2_CID_RF_TUNER_CLASS_BASE) && HAVE_DECL_V4L2_CID_RF_TUNER_CLASS_BASE)
 | |
| DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| static_assert((V4L2_CID_RF_TUNER_CLASS_BASE) == ((V4L2_CTRL_CLASS_RF_TUNER | 0x900)), "V4L2_CID_RF_TUNER_CLASS_BASE != (V4L2_CTRL_CLASS_RF_TUNER | 0x900)");
 | |
| DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| #else
 | |
| # define V4L2_CID_RF_TUNER_CLASS_BASE (V4L2_CTRL_CLASS_RF_TUNER | 0x900)
 | |
| #endif
 | |
| #if defined(V4L2_CID_DETECT_CLASS_BASE) || (defined(HAVE_DECL_V4L2_CID_DETECT_CLASS_BASE) && HAVE_DECL_V4L2_CID_DETECT_CLASS_BASE)
 | |
| DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| static_assert((V4L2_CID_DETECT_CLASS_BASE) == ((V4L2_CTRL_CLASS_DETECT | 0x900)), "V4L2_CID_DETECT_CLASS_BASE != (V4L2_CTRL_CLASS_DETECT | 0x900)");
 | |
| DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
 | |
| #else
 | |
| # define V4L2_CID_DETECT_CLASS_BASE (V4L2_CTRL_CLASS_DETECT | 0x900)
 | |
| #endif
 | |
| 
 | |
| #ifndef XLAT_MACROS_ONLY
 | |
| 
 | |
| # ifdef IN_MPERS
 | |
| 
 | |
| extern const struct xlat v4l2_control_id_bases[];
 | |
| 
 | |
| # else
 | |
| 
 | |
| #  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
 | |
| static
 | |
| #  endif
 | |
| const struct xlat v4l2_control_id_bases[] = {
 | |
|  XLAT(V4L2_CID_BASE),
 | |
|  XLAT(V4L2_CID_USER_MEYE_BASE),
 | |
|  XLAT(V4L2_CID_USER_BTTV_BASE),
 | |
|  XLAT(V4L2_CID_USER_S2255_BASE),
 | |
|  XLAT(V4L2_CID_USER_SI476X_BASE),
 | |
|  XLAT(V4L2_CID_USER_TI_VPE_BASE),
 | |
|  XLAT(V4L2_CID_USER_SAA7134_BASE),
 | |
|  XLAT(V4L2_CID_USER_ADV7180_BASE),
 | |
|  XLAT(V4L2_CID_USER_TC358743_BASE),
 | |
|  XLAT(V4L2_CID_USER_MAX217X_BASE),
 | |
| #ifndef STRACE_WORKAROUND_FOR_V4L2_CID_USER_IMX_BASE
 | |
| # define STRACE_WORKAROUND_FOR_V4L2_CID_USER_IMX_BASE
 | |
| /*
 | |
| * Linux kernel commit v4.18-rc2-106-g421860b9d47053badce4b247576fa48df9ab4c48
 | |
| * has changed the value of V4L2_CID_USER_IMX_BASE constant introduced
 | |
| * by commit v4.13-rc1~141^2~121 because the old value was already used
 | |
| * by V4L2_CID_USER_MAX217X_BASE.
 | |
| * This is of course an ABI breakage that affects Linux kernels starting
 | |
| * with 4.13 and up to 4.18, as well as their LTS derivatives.
 | |
| * Since the imx driver didn't provide any public control ID definitions,
 | |
| * it looks like the best way to handle this situation is to pretend that
 | |
| * the old value of V4L2_CID_USER_IMX_BASE didn't exist.
 | |
| */
 | |
| # undef V4L2_CID_USER_IMX_BASE
 | |
| #endif
 | |
|  XLAT(V4L2_CID_USER_IMX_BASE),
 | |
|  XLAT(V4L2_CID_MPEG_BASE),
 | |
|  XLAT(V4L2_CID_MPEG_CX2341X_BASE),
 | |
|  XLAT(V4L2_CID_MPEG_MFC51_BASE),
 | |
|  XLAT(V4L2_CID_CAMERA_CLASS_BASE),
 | |
|  XLAT(V4L2_CID_FM_TX_CLASS_BASE),
 | |
|  XLAT(V4L2_CID_FLASH_CLASS_BASE),
 | |
|  XLAT(V4L2_CID_JPEG_CLASS_BASE),
 | |
|  XLAT(V4L2_CID_IMAGE_SOURCE_CLASS_BASE),
 | |
|  XLAT(V4L2_CID_IMAGE_PROC_CLASS_BASE),
 | |
|  XLAT(V4L2_CID_DV_CLASS_BASE),
 | |
|  XLAT(V4L2_CID_FM_RX_CLASS_BASE),
 | |
|  XLAT(V4L2_CID_RF_TUNER_CLASS_BASE),
 | |
|  XLAT(V4L2_CID_DETECT_CLASS_BASE),
 | |
|  XLAT_END
 | |
| };
 | |
| 
 | |
| # endif /* !IN_MPERS */
 | |
| 
 | |
| #endif /* !XLAT_MACROS_ONLY */
 |