text: #pragma once
  
  #if defined(__APPLE__) || defined(__unix__)
  #define VMP_IMPORT 
  #define VMP_API
  #define VMP_WCHAR unsigned short
  #else
  #define VMP_IMPORT __declspec(dllimport)
  #define VMP_API __stdcall
  #define VMP_WCHAR wchar_t
  #ifdef _WIN64
  #pragma comment(lib, "VMProtectSDK64.lib")
  #else
  #pragma comment(lib, "VMProtectSDK32.lib")
  #endif // _WIN64
  #endif // __APPLE__ || __unix__
  
  #ifdef __cplusplus
  extern "C" {
  #endif
  
  	// protection
  	VMP_IMPORT void VMP_API VMProtectBegin(const char *);
  	VMP_IMPORT void VMP_API VMProtectBeginVirtualization(const char *);
  	VMP_IMPORT void VMP_API VMProtectBeginMutation(const char *);
  	VMP_IMPORT void VMP_API VMProtectBeginUltra(const char *);
  	VMP_IMPORT void VMP_API VMProtectBeginVirtualizationLockByKey(const char *);
  	VMP_IMPORT void VMP_API VMProtectBeginUltraLockByKey(const char *);
  	VMP_IMPORT void VMP_API VMProtectEnd(void);
  
  	// utils
  	VMP_IMPORT bool VMP_API VMProtectIsProtected();
  	VMP_IMPORT bool VMP_API VMProtectIsDebuggerPresent(bool);
  	VMP_IMPORT bool VMP_API VMProtectIsVirtualMachinePresent(void);
  	VMP_IMPORT bool VMP_API VMProtectIsValidImageCRC(void);
  	VMP_IMPORT const char * VMP_API VMProtectDecryptStringA(const char *value);
  	VMP_IMPORT const VMP_WCHAR * VMP_API VMProtectDecryptStringW(const VMP_WCHAR *value);
  	VMP_IMPORT bool VMP_API VMProtectFreeString(const void *value);
  
  	// licensing
  	enum VMProtectSerialStateFlags
  	{
  		SERIAL_STATE_SUCCESS = 0,
  		SERIAL_STATE_FLAG_CORRUPTED = 0x00000001,
  		SERIAL_STATE_FLAG_INVALID = 0x00000002,
  		SERIAL_STATE_FLAG_BLACKLISTED = 0x00000004,
  		SERIAL_STATE_FLAG_DATE_EXPIRED = 0x00000008,
  		SERIAL_STATE_FLAG_RUNNING_TIME_OVER = 0x00000010,
  		SERIAL_STATE_FLAG_BAD_HWID = 0x00000020,
  		SERIAL_STATE_FLAG_MAX_BUILD_EXPIRED = 0x00000040,
  	};
  
  #pragma pack(push, 1)
  	typedef struct
  	{
  		unsigned short	wYear;
  		unsigned char	bMonth;
  		unsigned char	bDay;
  	} VMProtectDate;
  
  	typedef struct
  	{
  		int				nState;				// VMProtectSerialStateFlags
  		VMP_WCHAR		wUserName[256];		// user name
  		VMP_WCHAR		wEMail[256];		// email
  		VMProtectDate	dtExpire;			// date of serial number expiration
  		VMProtectDate	dtMaxBuild;			// max date of build, that will accept this key
  		int				bRunningTime;		// running time in minutes
  		unsigned char	nUserDataLength;	// length of user data in bUserData
  		unsigned char	bUserData[255];		// up to 255 bytes of user data
  	} VMProtectSerialNumberData;
  #pragma pack(pop)
  
  	VMP_IMPORT int VMP_API VMProtectSetSerialNumber(const char *serial);
  	VMP_IMPORT int VMP_API VMProtectGetSerialNumberState();
  	VMP_IMPORT bool VMP_API VMProtectGetSerialNumberData(VMProtectSerialNumberData *data, int size);
  	VMP_IMPORT int VMP_API VMProtectGetCurrentHWID(char *hwid, int size);
  
  	// activation
  	enum VMProtectActivationFlags
  	{
  		ACTIVATION_OK = 0,
  		ACTIVATION_SMALL_BUFFER,
  		ACTIVATION_NO_CONNECTION,
  		ACTIVATION_BAD_REPLY,
  		ACTIVATION_BANNED,
  		ACTIVATION_CORRUPTED,
  		ACTIVATION_BAD_CODE,
  		ACTIVATION_ALREADY_USED,
  		ACTIVATION_SERIAL_UNKNOWN,
  		ACTIVATION_EXPIRED,
  		ACTIVATION_NOT_AVAILABLE
  	};
  
  	VMP_IMPORT int VMP_API VMProtectActivateLicense(const char *code, char *serial, int size);
  	VMP_IMPORT int VMP_API VMProtectDeactivateLicense(const char *serial);
  	VMP_IMPORT int VMP_API VMProtectGetOfflineActivationString(const char *code, char *buf, int size);
  	VMP_IMPORT int VMP_API VMProtectGetOfflineDeactivationString(const char *serial, char *buf, int size);
  
  #ifdef __cplusplus
  }
  #endif
  