From 4f983efbfe452b87a305dd5d369d0d86fafca2cf Mon Sep 17 00:00:00 2001 From: CNLohr Date: Mon, 11 Sep 2017 02:56:50 -0400 Subject: [PATCH] Major progress to getting colorchord on Windows TCC Give it a shot. colorchord2/windows/compile.bat. I am having issues getting sound in. --- .gitignore | 2 + colorchord2/DisplayHIDAPI.c | 5 +- colorchord2/DisplayNetwork.c | 6 +- colorchord2/OutputCells.c | 1 - colorchord2/OutputLinear.c | 1 - colorchord2/OutputProminent.c | 1 - colorchord2/default.conf | 2 +- colorchord2/dft.c | 2 + colorchord2/main.c | 14 +- colorchord2/os_generic.c | 42 +- colorchord2/os_generic.h | 12 +- colorchord2/outdrivers.h | 2 +- colorchord2/parameters.h | 3 +- colorchord2/sound.c | 2 +- colorchord2/sound.h | 3 + colorchord2/sound_alsa.c | 2 +- colorchord2/sound_null.c | 3 +- colorchord2/sound_pulse.c | 2 +- colorchord2/sound_win.c | 13 +- colorchord2/util.c | 2 +- colorchord2/windows/32/WS2_32.Lib | Bin 0 -> 346832 bytes colorchord2/windows/32/WinMM.Lib | Bin 0 -> 36976 bytes colorchord2/windows/64/WS2_32.Lib | Bin 0 -> 350088 bytes colorchord2/windows/64/WinMM.Lib | Bin 0 -> 42736 bytes colorchord2/windows/compile.bat | 8 + colorchord2/windows/math.h | 926 +++++++++++ colorchord2/windows/mmsystem.h | 1950 +++++++++++++++++++++++ colorchord2/windows/symbol_enumerator.c | 245 +++ colorchord2/windows/symbol_enumerator.h | 12 + colorchord2/windows/tcc_stubs.c | 80 + colorchord2/windows/winsock2.h | 1303 +++++++++++++++ 31 files changed, 4581 insertions(+), 63 deletions(-) create mode 100644 .gitignore create mode 100644 colorchord2/windows/32/WS2_32.Lib create mode 100644 colorchord2/windows/32/WinMM.Lib create mode 100644 colorchord2/windows/64/WS2_32.Lib create mode 100644 colorchord2/windows/64/WinMM.Lib create mode 100644 colorchord2/windows/compile.bat create mode 100644 colorchord2/windows/math.h create mode 100644 colorchord2/windows/mmsystem.h create mode 100644 colorchord2/windows/symbol_enumerator.c create mode 100644 colorchord2/windows/symbol_enumerator.h create mode 100644 colorchord2/windows/tcc_stubs.c create mode 100644 colorchord2/windows/winsock2.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3841a63 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +colorchord2/windows/colorchord.def +colorchord2/colorchord.def \ No newline at end of file diff --git a/colorchord2/DisplayHIDAPI.c b/colorchord2/DisplayHIDAPI.c index 40792a1..5e4dd70 100644 --- a/colorchord2/DisplayHIDAPI.c +++ b/colorchord2/DisplayHIDAPI.c @@ -9,7 +9,6 @@ #include "hidapi.h" #include "color.h" #include -#include struct HIDAPIOutDriver { @@ -58,7 +57,7 @@ static void * LEDOutThread( void * v ) } led->readyFlag = 0; } - usleep(100); + OGUSleep(100); } return 0; } @@ -86,7 +85,7 @@ static void LEDUpdate(void * id, struct NoteFinder*nf) int leds_this_round = 0; int ledbid = 0; - while( led->readyFlag ) usleep(100); + while( led->readyFlag ) OGUSleep(100); int lastledplace = 1; led->last_leds[0] = 0; diff --git a/colorchord2/DisplayNetwork.c b/colorchord2/DisplayNetwork.c index 1a4dac5..deba2d0 100644 --- a/colorchord2/DisplayNetwork.c +++ b/colorchord2/DisplayNetwork.c @@ -9,10 +9,12 @@ #include #include "color.h" #include "DrawFunctions.h" -#include -#ifdef WIN32 +#if defined(WIN32) || defined(WINDOWS) #include +#ifdef TCC +#include +#endif #define MSG_NOSIGNAL 0 #else #include diff --git a/colorchord2/OutputCells.c b/colorchord2/OutputCells.c index 502f985..4f5bee6 100644 --- a/colorchord2/OutputCells.c +++ b/colorchord2/OutputCells.c @@ -12,7 +12,6 @@ #include "color.h" #include #include -#include extern float DeltaFrameTime; extern double Now; diff --git a/colorchord2/OutputLinear.c b/colorchord2/OutputLinear.c index bac98ae..5c3d334 100644 --- a/colorchord2/OutputLinear.c +++ b/colorchord2/OutputLinear.c @@ -12,7 +12,6 @@ #include "color.h" #include #include -#include struct LEDOutDriver { diff --git a/colorchord2/OutputProminent.c b/colorchord2/OutputProminent.c index a9cfb6c..c9f1792 100644 --- a/colorchord2/OutputProminent.c +++ b/colorchord2/OutputProminent.c @@ -11,7 +11,6 @@ #include "color.h" #include #include -#include struct ProminentDriver { diff --git a/colorchord2/default.conf b/colorchord2/default.conf index 6bc9161..41f76a5 100644 --- a/colorchord2/default.conf +++ b/colorchord2/default.conf @@ -18,7 +18,7 @@ play = 0 rec = 1 channels = 2 samplerate = 44100 -wininput = 0 +wininput = 1 #Compiled version will default this. #sound_source = ALSA diff --git a/colorchord2/dft.c b/colorchord2/dft.c index 2ee7174..a28a758 100644 --- a/colorchord2/dft.c +++ b/colorchord2/dft.c @@ -420,7 +420,9 @@ uint16_t Sdatspace[FIXBINS*4]; //(advances,places,isses,icses) static uint8_t Sdo_this_octave[BINCYCLE]; static int16_t Saccum_octavebins[OCTAVES]; static uint8_t Swhichoctaveplace; +#ifndef INCLUDING_EMBEDDED uint16_t embeddedbins[FIXBINS]; //This is updated every time the DFT hits the octavecount, or 1/32 updates. +#endif //From: http://stackoverflow.com/questions/1100090/looking-for-an-efficient-integer-square-root-algorithm-for-arm-thumb2 /** diff --git a/colorchord2/main.c b/colorchord2/main.c index 5d782ac..4136a90 100644 --- a/colorchord2/main.c +++ b/colorchord2/main.c @@ -17,10 +17,11 @@ #include "parameters.h" #include "hook.h" #include "configs.h" +#include struct SoundDriver * sd; -#ifdef WIN32 +#if defined(WIN32) || defined(USE_WINDOWS) #include #define ESCAPE_KEY 0x1B @@ -41,8 +42,8 @@ double Now = 0; int lastfps; short screenx, screeny; -struct DriverInstances * outdriver[MAX_OUT_DRIVERS]; +struct DriverInstances * outdriver[MAX_OUT_DRIVERS]; int headless = 0; REGISTER_PARAM( headless, PAINT ); int set_screenx = 640; REGISTER_PARAM( set_screenx, PAINT ); @@ -159,18 +160,19 @@ void SoundCB( float * out, float * in, int samplesr, int * samplesp, struct Soun *samplesp = samplesr; } - int main(int argc, char ** argv) { int i; - +#ifdef TCC + ManuallyRegisterDevices(); +#endif + printf( "Output Drivers:\n" ); for( i = 0; i < MAX_OUT_DRIVERS; i++ ) { if( ODList[i].Name ) printf( "\t%s\n", ODList[i].Name ); } - -#ifdef WIN32 +#if defined(WIN32) || defined(USE_WINDOWS) WSADATA wsaData; WSAStartup(0x202, &wsaData); diff --git a/colorchord2/os_generic.c b/colorchord2/os_generic.c index effe5eb..da281e3 100644 --- a/colorchord2/os_generic.c +++ b/colorchord2/os_generic.c @@ -2,7 +2,6 @@ #include "os_generic.h" - #ifdef USE_WINDOWS #include @@ -49,15 +48,16 @@ double OGGetFileTime( const char * file ) } -og_thread_t OGCreateThread( void * (function)( void * ), void * parameter ) +og_thread_t OGCreateThread( void * (routine)( void * ), void * parameter ) { - return (og_thread_t)CreateThread( 0, 0, (LPTHREAD_START_ROUTINE)function, parameter, 0, 0 ); + return (og_thread_t)CreateThread( 0, 0, (LPTHREAD_START_ROUTINE)routine, parameter, 0, 0 ); } void * OGJoinThread( og_thread_t ot ) { WaitForSingleObject( ot, INFINITE ); CloseHandle( ot ); + return 0; } void OGCancelThread( og_thread_t ot ) @@ -93,28 +93,23 @@ og_sema_t OGCreateSema() return (og_sema_t)sem; } - - -typedef LONG NTSTATUS; - -typedef NTSTATUS (NTAPI *_NtQuerySemaphore)( - HANDLE SemaphoreHandle, - DWORD SemaphoreInformationClass, /* Would be SEMAPHORE_INFORMATION_CLASS */ - PVOID SemaphoreInformation, /* but this is to much to dump here */ - ULONG SemaphoreInformationLength, - PULONG ReturnLength OPTIONAL -); - - -typedef struct _SEMAPHORE_BASIC_INFORMATION { - ULONG CurrentCount; - ULONG MaximumCount; -} SEMAPHORE_BASIC_INFORMATION; - - int OGGetSema( og_sema_t os ) { + typedef LONG NTSTATUS; HANDLE sem = (HANDLE)os; + typedef NTSTATUS (NTAPI *_NtQuerySemaphore)( + HANDLE SemaphoreHandle, + DWORD SemaphoreInformationClass, /* Would be SEMAPHORE_INFORMATION_CLASS */ + PVOID SemaphoreInformation, /* but this is to much to dump here */ + ULONG SemaphoreInformationLength, + PULONG ReturnLength OPTIONAL + ); + + typedef struct _SEMAPHORE_BASIC_INFORMATION { + ULONG CurrentCount; + ULONG MaximumCount; + } SEMAPHORE_BASIC_INFORMATION; + static _NtQuerySemaphore NtQuerySemaphore; SEMAPHORE_BASIC_INFORMATION BasicInfo; @@ -158,9 +153,8 @@ void OGDeleteSema( og_sema_t os ) #else -#ifndef _GNU_SOURCE #define _GNU_SOURCE -#endif + #include #include diff --git a/colorchord2/os_generic.h b/colorchord2/os_generic.h index c7de7db..163f2db 100644 --- a/colorchord2/os_generic.h +++ b/colorchord2/os_generic.h @@ -1,9 +1,8 @@ //Copyright 2015 <>< Charles Lohr under the NewBSD or MIT/x11 License. - #ifndef _OS_GENERIC_H #define _OS_GENERIC_H -#ifdef WIN32 +#if defined( WIN32 ) || defined (WINDOWS) || defined( _WIN32) #define USE_WINDOWS #endif @@ -12,12 +11,7 @@ extern "C" { #endif -#define EXECUTE_AT_BOOT( x, y ) \ - \ - void fn##x() __attribute__((constructor)); \ - void fn##x() \ - { y; } \ - + //Things that shouldn't be macro'd double OGGetAbsoluteTime(); void OGSleep( int is ); @@ -55,7 +49,7 @@ void OGDeleteSema( og_sema_t os ); #endif -//Date Stamp: 2014-06-12 +//Date Stamp: 2012-02-15 /* NOTE: Portions (namely the top section) are part of headers from other diff --git a/colorchord2/outdrivers.h b/colorchord2/outdrivers.h index 60f56ce..db3afce 100644 --- a/colorchord2/outdrivers.h +++ b/colorchord2/outdrivers.h @@ -41,6 +41,6 @@ struct DriverInstances * SetupOutDriver( ); void RegOutDriver( const char * ron, struct DriverInstances * (*Init)( ) ); #define REGISTER_OUT_DRIVER( name ) \ - EXECUTE_AT_BOOT( r##name, RegOutDriver( #name, name ) ); + void REGISTER##name() __attribute__((constructor)) { RegOutDriver( #name, name ); } #endif diff --git a/colorchord2/parameters.h b/colorchord2/parameters.h index f23bacd..b6c2fe2 100644 --- a/colorchord2/parameters.h +++ b/colorchord2/parameters.h @@ -58,8 +58,7 @@ void SetParametersFromString( const char * string ); void AddCallback( const char * name, ParamCallbackT t, void * v ); #define REGISTER_PARAM( parameter_name, type ) \ - void Register##parameter_name() __attribute__((constructor)); \ - void Register##parameter_name() { RegisterValue( #parameter_name, type, ¶meter_name, sizeof( parameter_name ) ); } + void REGISTER##parameter_name() __attribute__((constructor)) { RegisterValue( #parameter_name, type, ¶meter_name, sizeof( parameter_name ) ); } #endif diff --git a/colorchord2/sound.c b/colorchord2/sound.c index df7ff1c..9f03707 100644 --- a/colorchord2/sound.c +++ b/colorchord2/sound.c @@ -55,7 +55,6 @@ struct SoundDriver * InitSound( const char * driver_name, SoundCBType cb ) { int i; struct SoundDriver * ret = 0; - if( driver_name == 0 || strlen( driver_name ) == 0 ) { //Search for a driver. @@ -74,6 +73,7 @@ struct SoundDriver * InitSound( const char * driver_name, SoundCBType cb ) } else { + printf( "Initializing sound. Recommended driver: %s\n", driver_name ); for( i = 0; i < MAX_SOUND_DRIVERS; i++ ) { if( SoundDrivers[i] == 0 ) diff --git a/colorchord2/sound.h b/colorchord2/sound.h index 0bfe9b9..d83ed9b 100644 --- a/colorchord2/sound.h +++ b/colorchord2/sound.h @@ -34,5 +34,8 @@ void CloseSound( struct SoundDriver * soundobject ); //Called by various sound drivers. Notice priority must be greater than 0. Priority of 0 or less will not register. void RegSound( int priority, const char * name, SoundInitFn * fn ); +#define REGISTER_SOUND( sounddriver, priority, name, function ) \ + void REGISTER##sounddriver() __attribute__((constructor)) { RegSound( priority, name, function ); } + #endif diff --git a/colorchord2/sound_alsa.c b/colorchord2/sound_alsa.c index 64dc720..1161c1e 100644 --- a/colorchord2/sound_alsa.c +++ b/colorchord2/sound_alsa.c @@ -337,5 +337,5 @@ void * InitSoundAlsa( SoundCBType cb ) return InitASound(r); } -EXECUTE_AT_BOOT( AlsaSoundReg, RegSound( 10, "ALSA", InitSoundAlsa ) ); +REGISTER_SOUND( AlsaSound, 10, "ALSA", InitSoundAlsa ); diff --git a/colorchord2/sound_null.c b/colorchord2/sound_null.c index 47d5415..d7f8d16 100644 --- a/colorchord2/sound_null.c +++ b/colorchord2/sound_null.c @@ -41,6 +41,5 @@ void * InitSoundNull( SoundCBType cb ) } - -EXECUTE_AT_BOOT( NullSoundReg, RegSound( 1, "NULL", InitSoundNull ) ); +REGISTER_SOUND( NullSound, 1, "NULL", InitSoundNull ); diff --git a/colorchord2/sound_pulse.c b/colorchord2/sound_pulse.c index 2cecc35..4664c2e 100644 --- a/colorchord2/sound_pulse.c +++ b/colorchord2/sound_pulse.c @@ -374,6 +374,6 @@ fail: -EXECUTE_AT_BOOT( PulseSoundReg, RegSound( 11, "PULSE", InitSoundPulse ) ); +REGISTER_SOUND( PulseSound, 11, "PULSE", InitSoundPulse ); diff --git a/colorchord2/sound_win.c b/colorchord2/sound_win.c index 684e61c..559b87f 100644 --- a/colorchord2/sound_win.c +++ b/colorchord2/sound_win.c @@ -4,9 +4,9 @@ #include "parameters.h" #include "sound.h" #include "os_generic.h" -#include #include #include +#include #if defined(WIN32) #pragma comment(lib,"winmm.lib") @@ -106,7 +106,8 @@ static struct SoundDriverWin * InitWinSound( struct SoundDriverWin * r ) { int i; WAVEFORMATEX wfmt; - + memset( &wfmt, 0, sizeof(wfmt) ); + printf ("WFMT Size (debugging temp for TCC): %d\n", sizeof(wfmt) ); if( GetParameterI( "play", 0 ) ) { fprintf( stderr, "Error: This Windows Sound Driver does not support playback.\n" ); @@ -136,7 +137,7 @@ static struct SoundDriverWin * InitWinSound( struct SoundDriverWin * r ) int p = waveInOpen(&r->hMyWave, dwdevice, &wfmt,(DWORD)(void*)(&HANDLEMIC) , 0, CALLBACK_FUNCTION); - printf( "WIO: %d\n", p ); //On real windows, returns 11 + printf( "WIO: %d\n", p ); for ( i=0;ihMyWave); - printf( "WIS: %d\n", p ); //On real windows returns 5. + printf( "WIS: %d\n", p ); return r; } @@ -159,7 +160,7 @@ static struct SoundDriverWin * InitWinSound( struct SoundDriverWin * r ) void * InitSoundWin( SoundCBType cb ) { - struct SoundDriverWin * r = malloc( sizeof( struct SoundDriverWin ) ); + struct SoundDriverWin * r = (struct SoundDriverWin *)malloc( sizeof( struct SoundDriverWin ) ); r->CloseFn = CloseSoundWin; r->SoundStateFn = SoundStateWin; @@ -177,5 +178,5 @@ void * InitSoundWin( SoundCBType cb ) return InitWinSound(r); } -EXECUTE_AT_BOOT( WinSoundReg, RegSound( 10, "WIN", InitSoundWin ) ); +REGISTER_SOUND( SoundWin, 10, "WIN", InitSoundWin ); diff --git a/colorchord2/util.c b/colorchord2/util.c index d1e2d4e..9d1c8c4 100644 --- a/colorchord2/util.c +++ b/colorchord2/util.c @@ -2,8 +2,8 @@ //This file may be used in whole or part in any way for any purpose by anyone //without restriction. -#include "util.h" #include +#include "util.h" #include //Take the absolute distance between two points on a torus. diff --git a/colorchord2/windows/32/WS2_32.Lib b/colorchord2/windows/32/WS2_32.Lib new file mode 100644 index 0000000000000000000000000000000000000000..750a539f253150b1a6697f24fe29e2a434bf2798 GIT binary patch literal 346832 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 z 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 ZrA;kV|KM;?caFo=IzzoC`)gEn{69Bsp-BJ$ literal 0 HcmV?d00001 diff --git a/colorchord2/windows/32/WinMM.Lib b/colorchord2/windows/32/WinMM.Lib new file mode 100644 index 0000000000000000000000000000000000000000..7459425118e0c020a72a93d0dbfe9d1fb25dc829 GIT binary patch literal 36976 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 QYcA5per6HFEx@_|2Y9(kjsO4v literal 0 HcmV?d00001 diff --git a/colorchord2/windows/64/WS2_32.Lib b/colorchord2/windows/64/WS2_32.Lib new file mode 100644 index 0000000000000000000000000000000000000000..1ff59346d5d1c662fc250a8c113b7f864fd8707f GIT binary patch literal 350088 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åxH(%=|opP$~}m%9r%TAh_c#!?TUTVsmy3Tgt)cV<~}0=B5#&WKrG}@_d`5 zTz|=4<&yQ;Ea|w+KY47ji(5Dv8Nkn|87X3EZMAZ0xnr`-Jcuo}cyeaGGp84QrCsMI z)60y-(rDkchD#*jjQxVd?>dj+$zeJK)9_%owZ%b{KaRh5LlCHcp9f_? z9ht7LWRb}@KD=Oz&|va%qwvDklPRo>8zWeNj7IBXTU(|$h*j?>d&%gt+;gd0Kb-$J%8h9b#%+n~ z44y1*R6olp@CaH>;#qS}<@!c{*AB(&g?NoN42%J+(T+od@&&6HFJ8M5k9P)E+TD}w zIlYI;G|<8vqR%a`Os2utjA@+0yG!%wTH`QeV<5quuBG`k&W*&sMbacfg#11tzj51Y z3Ge$&EzM(%g#a2@!OUo^2-3$KJF{qaN%pabV zqYa$Eq`ccCO(sB@)4UDVu3fU4jn-_|wq06~u0x(Kb(T8pLVOaXZh4*&!K9Rk$E^r9 zA_2a9<*0OTkKk}_cA(UICW1BA78iZJc{EDL7DjLISzTr$nD=Dd4&|-3!{IwI&YUO4 z=Uon?-<89X1g^(x8fMJX1~jcl4(6mD<)i4tC3@=-zb$E2<8-qt^p6Ql=zGyUG_~%6 zBhI56c^zRAWx0oyFUr7%cqP~Zpq`)$T8~ixxSV~4t&tli!T{_l@$I=Of zVgHCla|)HVbp*D*yR^34oITN=Ta%2+*E|l0o-@a)jP|n?$`z#-ZPt-o4_oP?pyf|iSG{uVlqH{*>BMQT>?bGPy>Hg_BmmE zt3+a+-Mj|>?lk?<#DknEfcV_|UV;7hv6;2`RjNX4k6cEEL2Fp%8YEiuManJj_|u>B zo=6_H!}1B^JEGuL@gmcRyh4KLB|OBRLcgkLtcL-{aXt0JCL^a2G~%hoxBrA=E>AN2 z9gA<_H~a=W-Idi4tKv56Z?GAGeHw)D*1qYsnF^{L>$adVOFPSAwTao zd>Ho|ek!)h>U(AOMDDrUhHU})C)vYWv}$3$WQz1kAdUqdrmf55G`Qcd#^E^0oz;U zsi|;IQ$VBHCuVz0hn#SGUB&l{1+=0&w85`Arjxrv8+@B%oM_MKcbT69eiW3Zyet4X zAD@eS9RJf0K)yf3ehidwgw>ju9G!+81|;MhHt4wsW

xVueL;q#yvh%SbPr&532> z`Dt4sD!p1R5A-&@z}mDQE#aPK8~*qGfqd^1ckm%t%hzB-qQ3b>F`9CIk+n+&OXe`= zX?&5t}U3p`*GCiQp96hoE^b}o>$&f-~EK7gBB-#Y7Wz#FOu|I z+ubGDMR89I7B(98q?{KEEXRa7LW6sjOWI*ExiPF_RoO?hmnW` zk8@3VCdx?M+9gQs2H5`8g-Q7fG@Vqu&5Vc*yvjpC&7Eut~(AgV(YxG z1E^015`-@5>Y9PSOMWL#lK3ury5@NeXj13MgJZaP#IInS==|4Oc^`lc!{g_C9lYb| zC!TV5=LPW_koTrg@?xkLW*ZAuhtvIOJPDOV6Q^FeOt)R0Zfn_Shr)TLrISUD)%(q#YU))At5tT2<&VmHaHdQmj&6%`! z^JQR_@ckXghsQ7`CL8EqxH+QdG!hvce)j8(*cXh#Mb_SFWk0*AV{{So0d)*@15QlP zl=$QEF2gY(8^c&hcAY0_iViajJ_17<;Tq(!qA(@7vv%9NNY;6DOcXkJsVJ#{5 z(K5D|_kcd;i6xJxOuXSFoW^8uDNoz2A8TCk+uX!5arbj|RhT~|ajvO%*zGqY=<)7q zbt%$WOn0VQ+qvKOP0Be=Z*(*=Z*M)Vw1^WnS!|vKL;@j&i zDs%|Do$n?h`n#IFIKlGXcCUijyP#4JVU6m(lA6+K1W_db)4O&AZ+TM_X*|4wM5JqJOP_!@4wZuG7T9u9eC|Um9rqqJ9WERDL7aMYV@Sg- zuQJTPM7Op2CWooKNj$+vLpS+)@%^a(>dbK^s$(MjL=(?k*Y{i}ibHhwDsFc&{E*IT z9{|l?!rxCr0rF1uFqljE!q3#U4BXhx?7HNakuOPjsHwW_SLCvd( zq^mFJh57Vx<^2WubU3j)@6RuQ!L?N6;k*JEND6Fo9#%_fZYqE|&5Z>xrwRUK+dG-k zEET|<=0E|AG#O)ltLfQa2Y*|T8Z7~y4~@W8k!bV?X7K(9l(ThWvf6X@v)$F(X1WV| zcH=;?8)WS_Q1)-)@8Rg%*MvFV_7-%)*e~%i8I{V$VGj%;0(QzcO6@TrAEQ<=l9c2P zv5r!@g!AbpfrtC6DLgC)xUca$)*nHAdukCa2#R6g62>%j&PS1-d$reLqVqeX$1xk# zm*^Wl5i<4a3-&a5E1BiDWK@f<)d@C)nbi3O~bbjr4Eg2l|oxb!vE zhd~pbIEZzDrA4LNT|%tsXV{t}KOgaTJRhlDPWKJLGH3I~HNd?hItLlX?_u*#xDh&; zeEJ01=pWc>4%)0q??!urHj@PAC~tlj`M5tA!(it;`aaAdoJYOwABfw8_Di$ME45WF zP~c(0JYTgu{C(^IW|e1`T`AM1=O#dPk}JgsDD^(8(Oq`34=f*zFh z$){0QcwfTa#ElPZQMi^dJw9bClU@MF3H$#u$j7*ne~A0rtfR*e<@Yz(zUO16=XB*6 z-i3FEP85UJ!Vra74zIyGU7vF)n#VIs z$MqZ6&)blWxXNd4wEf7i$U*8$$lo}pUY_Z;xp><_Ubq~^^8)eUZ{>L59S72fJ%j1v zON+-t{x70lTkKrVX>x8EO3KT#oLC~e+g|~9m^xR^z|+0(4e;keguQv+6tG@w6ZRak zXDxS+%Nd!Ur4n`^2lKPkWz@6IvSmY?o?SEjW~Q4h!`t4#p2W|yuf^QPcNo8fdiv)U z%x&fR2zCCnd_#v&$Nx2OIFJ1fY#fHwwEH-}DC>tUcVkOQ{oE1<>L`L963xrX3;6IMYm z(l;h)T$b3AxbWa@v6Ya+F+bKPYvFysuwHYx*~1wd#pl?sqTC!6t#&REHI;h)9q_rf zngIch13tLR^#i}ZI{N;M@Llc7TQFAL#=K!m^gVi4W<&gD4Bmrr{DI5T@8@5B-@6IcbNS2+rf4Kgwo|5f1THyT52tp1z8tH&`H zv=4M(5MIO*XK9gM?y~nfBXB(XwKlhuK7Xj=>^_0{*xM!e+gN>^3CdO+Q^q_7HsyhD z4)Hwh-zASA(H0b9DhCUYTZVOX^oQG+`8w!v%=`liW`F%_w2pgo=&ymH^RXA?Ie^cB zX2%zsd8$%Wf3XdSZH5J~+S7boUmA^Tx21k7Y7fqvGYix>ba(*(EzoiDZEM3bZ2kIk zww_~qu8+Qt08i{gCM(ogu(i#s&SZS8gY6%7V2RHbT&%6nnGZJY1?4DXSYr&c7zY@<0Qg9dIjty&kA}#>{B!j!{JsUO51ugq$4<uLr>PzL5xQ2^;}0)5il4tm_@QV#hW{$p;^moa_? z`U>k0+QInnolMY_M>!+Ux@D<2loV7 zk{g7$c>;;vHxFOC>KvnN`y7b7RPf}r|1>MrT9p|WjY?9RNHMY)Gy$X9VZz;gjF$1Dx+~wDs9kqtPtm1qjjG zgkRMI*P~0tO6REIx4b&Nl8Uh5**uu1f*GMc^?=^YU?)+Y@k1 zV$8yaXnp||N!ziU+{JfoCuUae3_Ms>9-DrIR=Tt(0P;vJ2Wa-=9Wa(e7 zNgss#d^6-|3H#!pKWv*Mujug95es9y5TW*w9+;f%jN;T#bw>}J>LGI{^#@R950>hN zo@7*1=9VjwhkLUJpq_4$+kcmp+(uGY;!HsZWj}P40|nk->)4iy-Z!K6yCGXL-Dz z)T>XhV322&)RHFqxHtt=NaI?gam@Jk2;m2oTrv)BUh=zIk3>4&`;)t9y0TBl24l*u zK#llSHJ`%~qik({UPDw*%DW#cqE9&|ZI^PC^WZz?rO;v#I*$A3?P6No^eb9osT!3xl09=w1Fs%u#sH zFSN&Jj<)A5j4}J^7m&H=ZY9&X)|#1DTRH3M{fd~$IJ3m_ztKC7tRrKOW6Ho0D5fJg zEqk8FqkY41`OvGhInai<12F&Gp5Qv{KJ9mW0fUr3JAuP~z7zetXgpwfI4!{4v6cUa zy)Tciv#9!ia+9X%0wjf&vR_)3vb3ZNUD(V`a?^xnBRA;+l}nnWZD?|DdXscPkctYv z0xk%=;KHIJpok*wpdhG#8_Lgp<$YflTwjZds0hFB_sp5+ndd&wO+$S@{>A-#(%w6B z=FFKhXU?3NIdcYfV&I3#^a|g90~aT`fM8T$rJsJ9jN1Olt>xgyKCkOXs6i?DJ*XrmNwfDPvjtJlIol)voWKo5hYiymZ6zY+hCi zU|jjNvRw?r34mum5INcNUjcgJYjh>J7z-MsGQ1MyDZ|qeoU>x}QF=Y&meDI2!NFl( zcNrID1UNz%3e)Qof}k?)N5F>)by+>TUDuwURJk}4dE9;NLzHXm5pWUWt~KEju&urq zuNzR7%^DNhtZ$pVuxw?7>5%d9O=d5mdvKGnADEtmzbtkjxS$mr^H3XP8@_MmuBgSk zz)KZ24Z?S;uv^xT?%m?EKw~Y&(9mWNd&XwZ;cTIswA1FvLdSHs=uj}<(R#|wIe_CC zOFhQt$F$A#ds2)0ujS1O6Dm5ssto`VyakeR=G$RMrU(Twmf6Zp6L^vC#!7l%o&vT#b?b z5ww-EaBfI1WO&;YY6ve9J9-QIxHjFt2Tq!?2Vv8f5}x)s$3>&lC-6a27oarG`gHZ( zQFY!>53^6SC2WynwS=W0Z#gg7t_HD2@+Tl7h<_8a>yyp0tWVT;G4mH zit}~NGY@?Qe=goRld$NN&pW|e`uyt=kv~V_ZFCElws*cb4^Bs4%bkD6|K~dCpUl7x z%xbuhEjXIdhlnk}+syS0WN*jMAzpZVv;c0d%p0S!fFc~%C`qpqVF0)Q3Dz@AM@#{@ zAK}xxKp?c93mUdM^Zgq99`ZV= zli>P>VL($Hd?nsiS~;! zU5Rl?+so0(T(k}5#s|{7U}cgK9COA#^Yylc$qe)s`slx7)-is5yWA!Bf7-n?KcOLy zTZy;{*pu5ii0%)^m+1t3aHF!b5ii6<6xw+#D9R@S(2VnQd<+^}Kn0yzukYgjzb$XGa!c9MH;lSSQO z2o8yL%fe|!R!HkbfalqE6WCza$V<^{vSTMtUzqv%EiUcBS(@H%!1f&9*3@xObe5(t zath1XMnO9wc=QUk;?Y<|_PkB;u*KZV2=)&9Oq+|bg+djDkw~N>S=;oZEYH`jM*G=U z7h&$Uwp*9Z-Av!4_HT*xa)a@Q4mPHPhlY(xngBp#pL5C}Xqg8(j>DW{eU$l|XF*)9 zP(NM_ms7nfPUZ5s-NSkK z`WRhk(_7$EidkR~?(&YV#ClKH=q#Fp?*$~1DF>@)-SQJ@^%YsjnodTr+M|; z*cGpl{8q%H$*G&2q2W?V$8F(}UI-VEY2BAue2$+3+vIsTWNpQzJ@D&d*oRp6SH2do zI9rWc66hFNBL)Lp-Ka{~pQYgI%=o(;^>D6u1hxqKa2j;4)j!+|;CJh{vz&SvcQsP| z7mqtvBAtblnL}s!a*(LLM0J?Ndz7}~ZFS(ePW#ZbpZg7Rhf1z;2W&R{Buvqrnb3Na z`Picw?p0UFb%Xsl`3}nBtp$Ithp^Rnmj?H!$A{%G96K^SaJ&RO_gHzZc$M^%5Q{rs zkv-4Q)f#s*6d84PY`h6LsMp@{dg@f;C-pV_?iw4yg|xzMb0w^>Ti(aRc^rBFyy|}L zHBwK7cO2Arh}R+1HxGCDjL(zoc}sps3)%TRyvGsvATe$bY7u>R4d{(vqbgXpERu{y zie9@GWw@tNmN2sOsLoMr%WIwQ533we7bMXtdzVkXJ26HWtE64!;yUSrrmh|s@zj0q zu)n*_9RQ|XFKL0TZgr%LCj^P?LZ22eo}m9KZvZTOq9-+;_PM@{8B=~4Fo*Nnji`^~ z>IWECY?J9v#I>TY8&p&P?p;KNr^KR$_brI+=P0>Ba&y9*y6$!neGjy z-y+Gj-)=@3%I25*OurqWFvxdDDbg&#YXJt*x@BB*wkBhgi=r>5;`!S7; zC*|#&=-feJdWF|8G78^k$^~hx^48Z{UCiIr-g-~KX{!V)9WxvCgU*N4@ z=9aJZ*2|m8Hh-nJUSd_--*w*l6)t?Uw|=GjyVG00%Kg0_^wg@}V*MB4xAkq~@2&W~ z#K|AQ@1@S~UHHAs`Mn3fPj`O53BMT^+S2zn{9fVwz6rlqI=^qj?^Vw4yTBipzK`O! zOW&vQ+okVe{C4Sk9KT)qzKP#1ec#7#m%gX*+okUr{I>Mn0@kfxqXU}XtEIfg)(2hZv_~z0A`{rIrw>sX$NBW4QHRJA50oz*n zf`K;u@lnakV0M=%lhUX68Qi+x)VW#iY9oS@m5+~w@*8nd*9WT&d$fod!?=5-<9>m$ zbhv(Uf$i1=-N(J#j{`PryJ?K)_>Dq0v(DNNp8yW_`>J{m^GQ`Tx*wl}cb=~4?Vbbs z>wDVIcK!U(kp7mS+_>9ke2?6FTGZ8Lp!WgPW$t06Tb8M=#zidt@acIFFg37GE(8_z ziVM}^qsRMd<8rUWgD)2@`^a909iMn7-ElWCclgkz#OHz6e$4$=p2s5cuyd)LXPi!= zPt!vv%X#d#_`k%yku2!pAY;AvF%R_^N7^7!@J;v1s=oj{v`y?;?>r$4ft|7M*+&yq zWr67xo~E1Npduqoud?Z8_s&08W8O@ghc2P)k!G&V9u4zg(lk>)d{KEYU)Nw|YC}>k zzNWVKEX z+#e>7`3DC1^~x&Q(>*9iclr#|y0)o0KHq;cqbA7Lhed^Cxub&dE4KgRkfH1v#7M!L z3AoUdmCIUL+_A66Iln9cO6Au1=bKNc9JWKDQ1*6VU0~Od-%$PZa^?@l^2n*4`MQjc z=y}06B%SBf!P&x-1~zhr@J&g#`rFuq9Fy+ao99nh|5bhquwniEub)40tUd+2)aiMw z3GABibNKDXsD}?3-T;T#p?}$aGd9f<4DRyQMaqQ4=HnVF2X>7Yfzj~$#AAImA~4+2 z1RnPe!FNDwiCVdUw0oNqfq8ChG@P4Y9r(S>_ z<1Vm0vpp8Sa1QCeU(Darz3@5e4^R)zZ_WM~$1uh&&u^$>e~3K$iHXq^@~L6eA~#5r zdq%*1{1I^RjCG5ivHr!EZ}>1e-)~l3Z2S7Nn5(e<=fx-NI4}|;)P%+@ru|aVnz2)6&H{fWzhTey4Z@qi*ig?%T6hfpTGAR3h0?(M zMt--U56#^L&h4JJ0mocs%>GV(H(GzcvF_YZ*QI6V#H)Rou6k;Z;{Oy^a8|F!nnxsWqh`Uz4Je6o0p zwVS?qt5b;ohL94iX$i`6PoTk$i6-p}^V@h8b!^tKG3v`L{qLMx((d{* za8!E%9QU`%F&6%Ubo;?rD54|q?2gF*b!PAPIpCn}Rs9CTlTYEhyH~hY)*2(?&^`ox zhG~3!bZa_?Fid9I0ewUMy+K7`B6Hh!MHVk5aGwPFoXq%nH4^ zQQjo5aq7i~j_v$MxSf1N#g7!{+LtjIemh?P4$4CL$)=sWgTi)FF3|P(RC-@R+ar5+ zU8yGV%!aZwFZ#&QQ^?N_CsGcKL?aUW$m;S?zUpZA95muA_&l9UYT^Ua>G` zX9VA;ocXMOH=+u(75gwuleDl*OqVo!_JgH{%E}B$M{JYA;3iQ|nm$v~8}r!3Z_RHp zy5s;!3+p4&@7n~rCr_UZ+>NL_5b#!ybiQn#jmkL(p*&^j9NlZbT4kTST?6f5?WI9S zztA_xrf*mN+x7g7$aDRL&E;F}!I}N$RmewdTz3rSN1P$ZdM|bGpQ?Rr@AdA{eFk_W zm$=uP>0=-o;yFm$Qeqv}*wwO@`mZRYPEjfZl(>!rpV;OSxcC?w9b)O1z__54_Z~zv z45uotqZQYIIM0W;dv5>_?}6+F<2T_Y0mFKa^bHx;}ypV z4i2Lqg0Zx~&nusO628v^o~N;wd7=96peyhx?YBA=2;+QFiKp5*_W;*s95K3~VrL*9DDM+3=@=i`umk)_QH8K%@_Tav3fval9r z>B7a%g+rCh?<-KxO8hZylASB&LYD_;It@buy}9ubnX?nsd_%_0F;@4w`jWoxuD(1Q zxG8(*;D46m9USTe>Q>xk6+Pm{oO~7Fa5tjAUtQ&`F5+6v`jt?hh~GQ|VB*TI)hTw5 ztPVKr2Rn1Xyim*6zsD3bU* zbS&4qO`vBU8k2I`lke@Wu7>lOZcN6DYKHpXgZ-Ym~I4&*En!`MEX$p+| z;#8rra!!l#Y@^=StX17&-)a0cY=z;0;o&^O|4?Vo1waKboGTmOTU+9Rp{9o+cyAvw#~d5&^96@5*)wDnx3 znSKj>9i2-7I6@&E)qkrGwuq9UcFIlm0E|`x-~SpLXDXqA(oGt`8&oF9lhn zOo9YCd#!VRTNyRBG0w0-FUK%YV_frHCNuYL5_xNs`MFQNXXN|gkQG`5EOVHAuZOQ> zs5|Ejf`e*`da!w(g(_@B5wh z-{J7+LQS`_dJFP6?&0@qA_jBdYybTMn%L^ce}H~|x8vY&Fl=YvsQ+H+4CVc%(3(BG zb|IfDa3>oM*z`~mzLX%|edZ|stJov1bYw=DV@3nDnYeaZW9#e;&g;y&W`h6h+ zx1A%}D3qe(dppWdC+=NaZ_l(8ws+<+DdNs4UZKk2Efa|? z57{&}i=U6tihGu$d_RIO#pSU>Wo;K9rXx2HhOxE*_DpR(z!RWo$!WEU3x0bR&W~Up zKpQ&&F@pjaoZR-enfq6xslGyfbTowD){huMwoEABuYVn03C)b*POtGZbKiR10lsBh zy3VuFO*P((+0l=rLogt3oG*7OzrP56JNp`-L;Y5I5XTdbXP`!h*P2K506gpi>|+FF zOei0*#SBjsUew34dzU!Am%A<9MgA-#*(QNnq4g4__1mEJ%^^9~v9uNo8U(;=p=y%)VUN-<6Z5~d?^q9Zj?7DSt-;y2sXx4r z!Zi4*ZtcbUpZ2{Hrp+|_b(l1bm!8#OS2#3QPm;#hD~&av@!zS#-ssRe**?8eX`KsN z?OFU3*`Jhy3XzvG^wpaj+%qT1hyPIA$3*%nZr;JT2*Qat=hl#)nDm*>p0e$$s~s9A z+gH~pjVFS}b3!t0$Cj}n!m?!iJ&Y__`C20PxnT+<-r~?PSzf(W=~x6h!sq;kSIcT$ zI{Y~r$-!AemGvKW=3?rKea+Kvcj%q0++3&ht|~?E%6NLMpVYr%S6sgz^xmNK)|H@l zIbyB`y4dG0lK*x7{^x$sdy~?;8uac^xlBS&;m!jBfS9u^{ze>V?3x(b`CDRyI`O@j z7QEvY_y@r*Kx9LBePXk~wi~`M{hanBQRfQS!ije}^iNiv-=*}ogZ@h0N2G1%IdSD_ zKVdguU^rj!-@xD;gVhG zw^qIeEU+B!@DvKgE#ladxMG_Jw}{r$IhHbR>9gaHa^$C}jI*z7nw2BAUvTo7X}!m> z2x|-Mxm3Ofc`@UxJI)@y1+cV-|A;yF%8(qG$P9L_O`^7_EJ%zlZfQ!ySllKN{t;GV zCi;G+T+>Hm4~Qd<^3Mz_kV20 z-4E3pgIE*eb!+?nw#1xgok^tf4!DVVl13D^akX)*LxpPS-2Fk(4@MLdJ4Cs(Jw>tKnd$+TEZ(}9>H7ee6>V*pG0~EVm)C6G?wo( zezj{s5B0-+4m}d1Iitaz_A_=F>HQdR7O*FCAL`}a6?GH)b{DoYKB)9#I|m=h{h@cA$%{{-Ea$D)w{lPZ<-L`4vGVHEQa_uE14E2L@`-QI zL24uZ*q@d3uz&RfTHfB7w|w@`(ZNH;QlM|$gMgjLw=UjAI_!UEV=1uxp94Pb4PK^a z>h_Ga#5~b}*xz^+uLV)P{k{8OFT7N4U7g(FVY?WoQSGKkoW_bGd*@-$R%PND^bTR_ zlxu|Qb8pAT7le1j$$PiFJIi;C0^*7%_z3_&rP;rE1UM-ZKRUr<{QOx}z+DfzpU2)L z$4L@@_W#?FX3uw+PKv*X^4x3w68`62=R`O-F5+-JrZ^r~9GufFew+6d%`0)f!WUQY zAVmhA+D@!M&z$zh=79sG`)i69`|YzJbJBL!{dJ^AX`SMI1L-XHq?Th$qnLSI=z$}8 zdt<7ru>?tR+0rk>|E&^qJyn9P|EF|)Tgws0o6%qF6YPV}nx<`Izw+<9fV2I|_D0(} z&HJ9>{J!FZZ{jT2n7(|tc%tQ}dOy_iKhp9xP6FkN^+(H8ct6oHKh-jBzfgWibF|zP z?`bXfUs}#>Guvm&+W+J6O!NLn@%&uzOh=o`w9S-D%v1Q3dB0S+UnyK%-mm>U<4?k| zW5DY)5Chy@X7a0`cYQ4_c4Q*Cbl>zerz-KT99eJiI#e zN2F1f_G&r2;SwkBX{#a4kn?}~_5MlA6W5>hyDJZrrN1EE)^FzI3hz0jvCLn!OtB2I zANlup6o|^jRPS$E{_k2IXEC$Ld&(eVJK6e@NaG6Z1%>~o!Uwu2!1a>m71JNZSK*cE z`yC1V&#_n{HX~mG1q(BHAfz$Xos!-)tc=S6SILtK#fh`aS@2!;$ED>7W!>^+3SgNY zZtrxjQt6wjxPtZudD9|!0iR|>@`5%Wpn0U#%AMu^yTSW|kRPU}+^a?!;cK+4g=c?J zZY;c!51cD1{2>Z&eGv#BhD~^L6!uUb*7{`zd53A<#pPy=MV`^e@REU!%|+fwV$XdU zG~s;@@l$HpI)G5boADHkgpn27=n3S*XGikoT9De0Uq$*{O*hwqjQ#&jq$4hxz~hXv zup1H91`&D|L5HNi?;wAHn~&4XTz@YD7zJ^OegK$Sg|YVoXpj6D=_@szeo%eeGFT!Z zLV?osGvwEW^0C@doA$qv*Ib-ezncNmg|1&9-}l#&9Ud-*cyZ3O>lx&)N6br!k&6(z z15Not`sZ%L7gaoiCKu>?vQ9!BZEMzb9B7&V#~SkhZZksZ#4IG5VI>Jd(dF?HYr(m$|E=w$vyc-zMMlh95A8xkj?z4o&e>-CB3B+Bsuz*CO@aDLeC zp*-0&5WgR*@)^w6Ri0fd*)`1-x@I@~wn95N$UAVR-_3bXD|D#Y`jQ;&Tjt@uAo4`p zNEZ8p>2u|*c8i2Mcl!_X78HBfpPuVAo^7Az@Buz~`?X#pe`=LK??wAd*ix-MEsgRB z6Ry*Awbb`?r!_u(Oh%nq2ba%Y0=$$L#z?gLTKo;^up6sJ^pro$qi>x%$1Md8tl=#@ z&g0F#)-tE@#Z#H}LNwN@}q8%K_YOr3jb}?nzuK)RczRLH>D#K>KxpjO{=R@)z zei)&<8O53p#yeB<&JsQj##%BE3zj2Il>?Pp~COhC5 z$;Gjlp>uNxMZiJm>rU8#kuk|NCeMn}4xbPw_y1&#$uZibyyMYy0~e{wz%=jw0Ah0ownf|tkkKF5rk5? zkOsD=MccChGW~M*O>fcmbAG^iiOkUmAm+yhSOeT>f8Nfm_4zz*xto2}R>_kxzU!!s zE6}Fp&dXa3+JkN7^X73vXYhSx>8my!3{uKFT_h|Xu-6st8x&l9a!q`2?pkK^> zko8G=zwo!2!tDDb4LWVd{Wr&?HFD%6_;Pfyw(nEjM%UW?m7rd;&m6QpSoa^T^F)b# zvxb;G{FrU>$Uc7nBRZgb_6TU4hyKQNfS9aiZ-936{`lc<2QGiFKR6Z?e|M|D3JxES zl)e54jgvZyp!|#~f1fzP9b?hGZ1%a`Cp#fDuNjYdYmXy#hJWXl`Xd3E-{sIdS$~w> zO4kC=^>XWb&3@E(sn%DE`og}FCUmB4AKo=Fj-YDmQFjMEpGMZ9mlCgaXqc>T+vQ5b zO3=Uw-mo7uyisZB z0S(svBVF((?X~v_2!s2Nyw7cdH=(brEMB!Ab-qdKY(||gR~Fyw)Hhk#zgp|t8sT%) z54OVb&tm`c%?-0wU+nugUb`POyhUl)4jSxQk@#V!MSO7?7k>LVf~PpXyh%XnoqFF# z*UpR692#xfbU)3kvsr$IpSD!mQVF?z+kUj=?b?=|Xp5bn;(TV`u^+gvSKM!m^i^0d zB8HK#7p*P{`YO;HH|_@w|EV-w3mU9Hmgy@xkBBMf=!ZZ)qI3j4u{ZAr9q&{+-U&J; zGfwEEXUFBc_oKe|XnpUUY<=+mv-RD&ANAd)_1!ti`siC|>wE8h)b~EE?;g}=?N*Kp zu9g1XKBaf;2mK#V`tJk%C+mJC=k;RWPtLubqsKT87WAsyt@I*^;QzRK38prBvBXn8<&|q*@%y+u_=Q1#>7_v-%;Am zv==@kbP7VoGX6iZoh#?uqjVn$x&xcuoTmoAgEPfxfaktB?NPgj&hIlcJt$**41(WN zJnIKx{Qy|bo~;LP=A7UCO<#xLcX0M;&k9cn-Lc+?+th>kjX7TM+$i_0N4H|p4jbg; zFx(j8(T#50(YJBe(j^;v3&YEoZR{IbG_Xs~+@_bAd)o_}8j=g!x|0iA%nj~%>{@&u zP(gM-=7o)InJ(at!#kMk^E2Elb4REoon&VPOcT1D5aI7H)-;7ep2CDRd<$$W|Ge1Qed&L2MWu z5Bq}elU+m>*%#z6;-(dHr6G-2$74~EH^X3GAp5EUqnC83NKx9_TpN8$K!d6*Jt$yGTOTZoE0ox!hexa zyQ?-O!1#&4O~G%4YDqgusn*txb=kH|Ll&Ufww6qrgk{?McfZZ1{%mVH)h?%aZTKRU zb}#@My>aV%T3Q<=sWH8_)zIIVuJ2h5f)Q)0$;4!|Fnk$2i1+tWeT@}*<|ftD}lx0cSe%W-y>mf%sDR8yL@b#%05+tzp5jQrWuvbskfg~XMVRKtcWrNDq2 zD*T^4Z5ennr0QGIcs5jVcC3Ts*mTNB*0idjmG1bNY*R;9Hj^^!&$h9lU}C1HldO`5mxLAEeHToK$&#&DA1&v`|$7T zF89L7A>zZh*D-b_BJ5g3!^&a!dYA)6o$VAEhOu%Q63goh(L=>dc;!jVu*t45Up zhx(VCKX?k5)O<#!Ih9>`G3Xfrq7lkD!lHS?Jv|+^cW!NStG9>aOgvbp#eZofQ@8w>_ z9QYA@F7R#)?2<_|8(Dy9h7{(y*uxv@g=M30ERJ`W7#% zT{O~%(J zL-61;CmH??UtjwB0y>m{IhkNRR7*pZF_d%iKQ~PbKm!SDdz#u^maF7GFwyo(5CdeEt#t zUi_VizvI0FYLYnWGM~ZR@?JPYWw9_E=+DC~ar5A=EFQp;(=h4LDxAfezCFOlvkWOq zyqPsQiA_dKCd_C)0chEzI3EyEKw>5gT?y(1$7{k|v&ZS#FR{1)I@h+n6~_5o&x!7alh zJC+vm2oKA50rAKOdc@F0Su}0sw*cQV{Cc@^zj)OWp%EAJ6(_$1IFH7!BSB*|J5D|W z*$dZkna;a3tmfiH-dPkmFm_-zzq5XWl#8NTvcfMYWJaL3oVJ|2Dx@Yps*=YaS& zF|wthhu;D`rcDRbtoG$)lo5&t`w{Mx=02VY#g?vVQ>TxE-vS)V@QY)8lKPj1^kQmY zR!OC4=;F5kXDxm$nxy{aoXL?vd~1Dt{1)J|b4=22ryUpJIc9@jp5KD!f&@9vU)c##Z>j`5KqFvOX?;3vgMvipoPU&Rn_L z`=Yg$0K7QLje4Lv(HIsLov?M9#ehbRlxhhs>W9F*Md_4RX;8}rRr@uV?19pqb z5V_dn zgur+>ZE`+@DbU-`q{-P*S+xQT-~Fmjq8zs+@ToBW$@xuf?&G zmf~JMKLQgfH3g~VayrHQm8r|W8`RanBzy>ix&i`m!pBlc{L9bWj*q@2sOtigC@^6P zry?h)>wl6D{4}VGt9yP36E4LT1*JCbxu7v9btQ}7Lzr+WM#~DgL70HT|1>}G5)fcQ z++Ylzpwx3up88Bs>H#e!FriX2LZ#Nec+TZPDKt?&0uw65^W}2Cm+OXZTNJb_K~cho zFyVG_g&%NZ@XsHb7nC|oOA#hq>Od)FWusyFdkzaIT&bl5CPX1#(L!D9YkuC>dc+@t zx-QgGgbCM0xeeNN=-Knn3rgj*6k)=pYC@%c_m$5)6qLF~OA#hqYL=9;?KsBo#FrjuG9IET$U;k}QP}ieciZJ224hfa|-m2|jvmKQ`)>4ECmqO?fhZ}c4b?u`; zsXuEe!h}oBky3W7;|D&rt{JL22oo-KC{hB>|8xBccCwl)!}AMNJu$3QN>IT1sF-rH+zvQ6iyxZB=Hw6bu3Z>&fmLz*X=>6 zd0L7v;ZpOYl;z=vZ(aa3W_h?uO9@Pf8}lb9^=d68FriY%g-V6{>vAn6FriY%hf2L_ z{m(xXPGHB=f(`%RQ|?U}@U0zzS;*9~I{d5R3=5-EMua`|&m1ZI`M5YpCF9f3JRV90F?QxkzXQ()>G7ZXLloZ*m{x&t+ciG|15>7`?Z-u6+6AT#|Ju5akHB<9@ZdICkvw-s z@SGTdfhi1nT=`iLf$0($S5{Aoz)-n{Wfiy9isAdT_Tvbm1m)xH|Q!+To{NW(|XHlz3`-KGcr6ymq!w;0FW7R2`gQMaNvHz5lf zpcD5Di>??&oL5e%W{Q`i?`2b(=hkn=lH$veO)#Qe%C*IkiWWqjRh&%q@{;D2BH8W! zeGm)*DGg!WJxW9PH9-bSLs>Um%ZUk{EG&?#34B?g8-&A*u&fyZO8BYjg#+>($omXA&?z=I$^X4+|ajJXgBXG{%8?&nMH}{z`2g>v6s_W|9Jvs}w zV3KevCkfX)3Ap*FeElTg*pAo4!8v=DYzOC>s{wbv!jhGB)jt2kk|!MPgU0~#r%Av~ z{dJkQ6o33ogl{!qM)v_n`mO@ZNA>|n`W^+$|3=^nxb?FG^P~A-0`x9`JcT~ft9`%s ztB}#+m2tbtzQ`TAmt*eTPILo!<0wKi^Fjv7AyCm-HQsHW_nbVTJB$_Z!9dLa+Xnd* zXnylpazWQgNj^O_Ja`H3OYuGrE)o@tKR;J3HQv;kH-MrtuWh&iv6A7~cqEbz$1V^a z*t8FOnMkqq`LV4iB6k6Pi^d)Yz%v1e$Y`5}?1MN`hL2jbY&J1a=K$(6vxu%UzjL5q zf-yHP!EFLl8Zip`Mp{NBME22Qx(A7r)@FMO?dF}m!qbqBdWEU@9 zm+nmG7^KYyqGQRe0H}W!KV*F`XPs~WsO5^_6~qFj?f1hXhf-QMwIL! z^KPq`M49c#EhkNQiiQMd&fYC}RTRMnq<7`1yn+4<+%Wmf*=&UbYaK{9fEk|RkB7XK5-svP(@<;{Ih73ALlc#u{4K3u`0h%z) zYv9jg@RMCrX}Ttz8y_Ah;2PXoycEU9+&zn6y4Thz2o6Sx|A!KMbeWg<5Tbj)uf4+S z9xrUl+uG*=mQqw6mZJ9jSY~{L*9BGbe+C$|d$@@&@EC6ExHudb{(#(r@F0?0o~=)H zb+zEaN@jzwoI{}u^XKS5U&rRnL%8L!c5$dfr85r&mcL6K2*m@jL`-;i$wG+`J)1wJ zsQGL;S;H}exh9aD9>*EkidLBm&{*q>D}u^3wBd>@`Al(QMGQb>2aL~S4z^=NA7pmt z`nDGGxxq_t12CUU@4zi}kJPg)A89X1ihZ2>s$KUQtLfdNFhAH zXfedC5Y~|a%wmOQrb0Z67OIVmPK5XfMY$JEuEQUDf@5pG*N6zeXh!$e!BIY;Wrq|Q zNGX|KEF~?O=1jNXITL$&WMm4>N_ZLimP?qqR^B1ucqZK%0ta*py{t1lN_mA(`jWNH zh^Y;yJO&knaruT&DmhaLyMo}ApV!ks09Z8l#Tk4pbsErg~>p}?KqN*2S3K?=GCczu$RW$T$D zMOtz@dWR6|mqJ6HBtx3ZcEWt*vWFRK%!;^(&d5-pPACRMaV#EJQXOf_bBJ&X#M{&1 zDUk0{Qv@jLiLfRCt*K3;93*xE1>eJ^<&|m{C%>nLwY}&Yc^%ZM#e|o}=#lC^50R|Y z_c7P?Zo@0(BV$|b_^~XX?ycKA63=omyrtXU8D(xDT-{m*1K5jt2lS9UrhVZn|L~6Ue>6;SXw1NW zTl5zvaa=$dvLYs9=s6_W89sr`K%PnLm!TLCqa4Zr=D_$sPi`E~CCKxbi~~XB28@>NiUJ`2&T#^Z=!aFSA0Lpf8+jfD}kCpns?!NY##xdk^s8}U=pwZ*VNk@`Bqp8H`nplOl!J34Ru~sbC(0* z=bEQzp#G|A_{e0ZMUiSaucxIeEqDJL8k$;rGR@#y7|FV>mhQCFp;!(Ez@1JltsM<( z(5qE7jN#m=uMT#1tVy>+(N)!?98kYLJmCeUQ&sZ;Cldh{S{hgrUSa5Hg?v}l@CBoZ zXeEj}0OL2PG2NZQC31rbI-;uP{cd(oJBh_regvJ^kX@7BAhqxvQ(Mbo>=JKzfl*Xd zGYDnW(siEpPPVh7wWVPL>~JIfv4jV4dogaRYOaPF>P&Zbbu{2@CBeDbZIEBvY``AJ zhJ*s~%lLQ)h{$5}*oPZ3E+rL()EOL#coA~ezvyhA60qaP5Kg|PtahLXKNMqKFD zf#3(75;NsEMw9> zh)NL0%>sawco$$6vMC3y7_ghxIrW;BN8Trs+Sf|$e5Nlnkh%~X24Pa5H>+xT2-1ib zc43L98u3b&41VdMZYgb_g$XMKYOsu(A2(h(?7Li`D32&0|A10g3P2_vhU~zMR#n6O z6#rR|EW(FC#fl0z&qW#1WNc6;a>G)=XWcN#RMm921><{l4#3(0ru6tS!KSn#eS)Cl z)V${gMX8)XFjHIHdPPf9w>P_~#WMs|-D&{XmW1^w+u7vg2I^G0{bVPLLov`VGCNW7 z(*V&n>bnyy=ci>}YDA8&nOr8>c?r?{YSv@$wx>JVx$RBXG`NNA=oft?HBydW1rS$H zQuOQHVqtAwJY)HkaK>V1{uCs1PW-e2^)sstMcpUssrXC1O(4imXQ_#i9}YaV0E>C- zA~I$A#6yEvHnRK@l=pe^`wvyVDSv~Gq^Ls}QjZkaG{XYtUp;S|i9NmVHIWTZYxge3>hTHtT2Z|Tlp zEm&1E4^yflXiH_*h^k8>&DVvr`P1vW8RDd24a{oVJ87|Vhfq0fMvROO*gqSD%QqoW z<=3$tsJ-4wsv6r;uqjfV-LNe?_^u3*?Du)rK!! z8AhtD`8;aCq?vA6wi3HORW-dp-MNP0?GTG@HA1tkO^f-NWx5H8*8~c)R3I1+!a!MY z$ui7mtwRyTa2fmqox)9BX|uAB=z-}jQ7T)oF`ez|Zp}7sXiv4_3FhWh2H|HIq6@eD zVWg6R_uF0PP#vsks;`X%O|QkndgdKehZ<_4G3<~~8-k%QVqu~f1Cc7{g3^^> z51^`s^0Nk#(JF1`woew418#Qpbar!XkrHt^2%xkYvesIl8Kpt7>2DK9c%DhHKdl!&X9OnPWyt0cyZ{hjCAe2 zIEzDYy_N<@Ioi(Xe_~#r&q$5nFV+)1?G2(HP?~D7Q;4M?px!prX-GwY8JMoj(s z7AH8=4?V4EM4IZ}(3zH2v=S9Z7vnNILyJPchItfNqx8Gdt1)J<%-7;EkOPK5~xj)lAoprq#0$qmVemnC&1Ia=4e$ z)7pWN-`Q=((m0by2o`&k5G+~RIIwVbL^Yje9YUNuW4U~p2q}do5KdoeI0~qo;?Z#~ z`T{kn8JZBlY`q8*#f2wr+3tqUmQIW^>A8-cF7z8m8siyJhxJg2vEd6?{TfjKvT_|{ zVTYOU4Cule$!+Pjj;;-&X#Y%zHM$ps{^~Ik>*;7+R&_plIo-~Hn<6XR;>6w@~~ZP@KUy!93C>^U|xxMt`g{cC_I+&!U0B z9(;mBI7Xz5mLvmd>4AU#K7))C3UM2hUSF@$X1i)&4Z3jY5}{}%DRMD& zVW?o&j-8*89+j4yMzAjBHTBpf94w;8SnCRAN7V;=4RBB_Drqz$Y6%-*Hplo~RM_$Q zoU&c#wMjeNK?wVjl;1PmhF?YjgIECqk#w*R|DN3okUq*KyX(N;J~P==HuX= z4l=fXgyW?F0w(%_=R?8HlgO>Go%YEwIvlO$W9d(jdvY+#&OA}+GwN7J16%wQD8D*nS27^m4R#r_cK}1*V&HFwacoJtY6uJP# zoSH)GH`yiGz|2_0*a!rcwQMqWEHh#ZP;*tWtkca#lS|8QfUG$=8JUU96u_o% z@hsVqwKGNQIo8{~zCExObX=3DPlwy7vqw{FYPB)pUPOLpQKz$^hao*Qd#Nl@rOcv2 zqN0_4{wFc0j*!l=ih`6M14X*71KJ#cHDw3VHzz0swa%m^V~8u*ZsH3z)xuVo6<2EC z7YyKXqfW_*9~-r_9QIvmwb&FYC}jU#92MrQL(KTeDxYK%?O<> zef>K^#%W=W#5y!u?H#iSrb$b^@?l`<)Ew3Ow)g2#M&+D^$0j_6s%n1A8n9Z!sD)() zQy#lL;WZ}Lqo_${dRaBRi@moxjfc!llLeyZKU=Klv7irplUt{+gYd!keKe~^>mWXk#(Xl^|WVY7s=D-U8d>up%! zY`_ROyhabG%>GwePPl$TtQ5cKn%Y2ol!&!8W-_DKxlm$H(kTz?muwGoF;34hP%>CbkQp>( zxLpHx18&!U2WW~3_dAP>ehL7n#9i%ie}r3O&a4zNOPqO;O6v)L2F71_{Y{E$$O5BB zI3$a_L)GE9C zi=+^Xpw>)l2lkmFYK4+@9VJUdLe&)6{3r|h^kp@NQv4#og+E<5-1FCQTyWCtkqr-> ziMcxAzL?l>TvIY333-CrGsY=vdJy>Rb}1%Iox3<2( z71`*rY=96n$g+X6-vfjSw3$_a1f-A~A4{sk&jL`?n!CNiPN5|cV-Fisg5-Y$05BP_ zJH(~1t$}>KmzAfm)U}&L1phD-aWafYE~uT&3RT8EHCmBEV-x-gCIl*luVQeDm!a?> z;v$xirlF)gftLxGii1I$=MCacitCJza|jg{z{F<51AzO4hR>2f)S zw@1bh6tb%3O29^kPKyTMQd{x&j89)lc<+K4CAqby&I zjdvi%L$+uKb~(z?26lT?2e?HQYXoyaa04lgF+t3p0l7ZF8rx%yZ%Q1!X3f?()nkfe ztnI9q1={t*9hD+7fSYFSTG`ChJS5wRLZI3#Gw|vK_9r{qWeXP1wXB8FMg>4e#q3z` z7UMn(_H<>f3$18s&U)`)?UW;|Y|JYqX5+s7)Y%U;WQC2M4v}=D4PB-z54S(KN+> za{k~BkZWr>lQ^fAY|Pw3{?MRt>=`k|*LI-Ws7{(#mFROG=*hZtJGXzgX~aID63a zF0le>tB>S|b}wEI(}7my$s|^mgwiN7=QtvV`GA zX~cq|qCJY0mQu82)sX}+CxK*`9<5R0k6=#3))AG!O{DM{i0&etigNc*b|U3`Z68=4 z(jnYPawZ*r`;=11OEYnrCySHz)iT8AkVbG1ldW%!5XW`nK9kf}zN zn4IM0oi*ukn$8@4?K}!~`bONlxcM4ADY2p@Ht%#&5>mDz9n+Yc)>SL*h$?}jV~g1x z;KV{ZA}fXjA?V31J5g%;P`!ZFvR{H>ODXw2NS9@fqa$?QBtEu7jx~gMz9FDTr!m@E z*vpF;?f&j-VD!xAsxMf_`KummmzzyHDpIbZj2!sOD3WX!&CpkrmKOjOm9jW#VFRBh zbiDmZVV0Ey-H4=X?P#PhKgWU%ks(3_xQs)~EGv!H;b7${Uuc_DRP9X|W{`VWc655V zfP!8^e_2&&Pm|W9@R(pb{X@tD8cJ#>QH{M7h@1fX@aLQJk2+hwN~!U2IZ%jo@%IlU@B?5*LV|X^#x;_pw_d zB#C3lrU`n?aSUM>aVwZR4^Y#b$LNs}Q5Q7R$&_!97JK~14*fb4>?WBmfXV)^F}-NI zl-8V#jL61_%*0<6+@)q>lGekrx(nNo>P*$Qz;&tx4>3^gIp4)hcQl{4f{x7HYSwVa z_94liXvdaqm%TmkNxT49BR4zvV4nDl2fH1__#R}H);K&7L?q}<$o7v%-OUvaVcMGEy;{max0S;THgY#$sn)*6_*flF#fnQV+?S^y z@sbi01<#dn{ACm{#{!3|5l*6eBdHdX#6iaaHAK}GyIQA+(-_rl5UZwSc90VwjvKkexby?hIx^}C3ekjW}S;Y4|gkxx_1{c zoPp%?pRSmuO&f(HxoXcX=&|{pYuf4{LUsvv^fq#xLn|@CzBqLaJ=&| zOAHtaC?&aA@yRE{#Q4WVIF`h^6Dbx|bODVNuhGM<)Ea!w_<-%C~viwVw^nAM<7@E2{}ASFJ)PK%x!bI5Tz zj@TBoX~!YOMe9xJGt^+`KrZa*s1dC6WV9t^K*%zk^8$C^LXLv6Auu2H2HHy2N7n(+ zF=jF_Va0EhV^MG#A5+d#N0SBdhw^0C2#A#Wsh{owh4F1al33g$JhGdOr1z5D=O-`T z3c<80RA)<$!n4^jYIA3+mFC7=;?><6J9C2^aU$~m4BBog=dEwty)OU5-#;;O%k%Gi z?8lo@d&@7){&Ki6#qP`gcoOPm0Fq?+W$zmNpAUZiN5B5=%s-y?zbF6C`Il`u^2y!5{K8uw$;}yl zVyL_XRe+4--dnc) z>eg2$Zg|%sh7U)FVn`qe$&-=|MkSB_uumS0}q(?qdOnJxz%Q^pD%m_#6aE;NJf2_R1&cynS=?inGu7(#%!dSAM5wfV<=gf6?Yc-H;jxbVV5w_j4R~Xx9-cMh&Rlzp8p@;Y^^x(*Hh8db5f0>(K;x%eu-8q=sI6OMW zXgZ~_^$(Rq=Fr?*7+$_Cn;XdIN@L0~7RV-vALIi~Ox(`VC4(cSsvl(h2E+v*f7p_d z!r+dq`!7!JmNWQdF!flnt(Z4%4(pwml@B==S z%Zv$WL=Dn9d8@$6fm_;nbzHfV8=H`3ybg_LqH}!%J~7c|4Hx`Ox2}CsIx;fUJ316w z)}?cFrwyQGTNEK-6T+&v&6qS9EI2mWA4|i8^otyg;osPz%$0}Q`-hP)u^*~1yeqxd zng?-3j4{Widu7!e@@05geY%&Z#^xw&*)mC==ckud!wgWEvg$GC`?&wzl%2lE^Ok#4 zW_#WqXhruEm`bpD7riRg<0jPAY5h~R{&`;ctOI73!^N1NCJA|ZhxCmYvuAluW}9#QD)$;30B^|+K3&ca2uB{@!NPnQ5)w8 z@j)B;yP~L#2RUu5a@ts`9@0xce$rb9dfCq-z-#+?7Sh?z2YO|khP{LFo4ke%SZ#Qo z@D4#5Wn#9%632E2$Du_y=EmSSOmQ5put$59lnv8lUABTz-LinKtCRYU^zoL@CM^Vp z-0nTlE1ykybAKOO^gCJf8+K|4p0ewf=bFv^JyP_$uIP8l`TZ4@(W5~xtSwA1;}E%L z_fk%e3DVF-CM_AH!MDq#9UG*r^!{Yh=J{!ZKEC-unvd_eAkD{je30hjJHb!e?3X<; zNRv9)FVj8mgat^iis_dL#!RVc7X4K@hno{83({mdW!$OOk~}{taQ>{oM$-cF3z)@^g5@mbDZ=M zq?fC1t1FRSUzDCu_{I|HO-?%bX7M+dNI$nI-QsU8k>2j4Q}0{+olZK(kxlP%(g|I2ps1hBs=urQy~1&9W{HS1FD+ z72&WnyxC7rNWadkq&<|VzNR=GPa-k>Et(D;8Dsaj*A-|IIKS)ar2N|)y!N}bf38EG zYya@KwSQP&0z&r=fgv2@dO7&T1aW?&KI-J_0Z+SNs@MgIYT~qdnDtwI_@91yqFU&x zFzvnBPcM@`q6`H5E%V-meDdYp3O5Tj2FC}FBJ5uPU+&$a@V6G>eLH>!aAn@@3in=x ztB>b*bjM5B9!Ul_%$R(?UvHw?exIdtJNFN<;XJTw%-hTQpidHaN*dE;u8bfyY>y;M zedPaLC{O;=t(tsd9pwKR@$D(P-y@9)rvWqZd`R)sEA7+|*rFWBZ9(i^wJn&25T(7l z28YLoHH-EN&s`x`vic<~X+fVQJ`9}p1KA4KYZ@9(11)Uhy(q^ver1YjBk{A1coQIQ zjOc|)(@}C2UE6fuztARLy>#2ey4j}t!)=PKn{D{Gw&A_n2I8~hWILE*$H}LZMyqq~ z!S7GwFOc1Y_Zj?VAAQz`EuYQ4n1{b5ux&9<$XH@oDTlgP!{@Zz=e1mWJpXt)Q*^D| z`11-!OXVt$A6DFlg9bEJXd?Yzz@Ix_%{(y0dj#oh%cENEXp|$l>|?fvW$gd_&i0tH zmEM=M?3cCdJ5^R6!*9=%0L)$aaYQE`@WhTLo+_;Wdbc3vugWQ6MkBtb$tV7~UOG2c z*xi7jsxnRq$8t$Tz1-Z3NQ@F1)7aL8UtrT4`Mjap+<>pO={hdR>#2~J$AvZk;Iq=4 zvFsPG@jeH($K$rw!V7iE-V>~mz~hf+`r>3$MrIPP1q zxp3~wsFQuhvYt0C{cPs@^TvDo4NYt_P*#2mFj${Vs?DV5DWzvM3K#LM=#qjkE}Vuo zO~g0yGLCQGk#?{xq&38)l6?EF(s|)N_*Pse`Np!AZ}a&T&dfh$-cJ?oXGL(ADjeHHUH4xK z_uoZuS1O!oTbcKBh5LoVS-rarzmvcu`jaRz)BQ?epDBXfiQlBph5e1f{>r9?uf}iE>B9a|VfQMmot3jhM$e&!^6A9Mk|A09RL{nseo5k zI6_i9Zt5f6=AmAH6i-f_8$XxRQ8w&ALkD0%8Jh*FjUCIyBKxB$q<7a26eM1MFwZee zHe#snK-7AfW2tMa5XYI(p}X^V;-MEC?Z8R;%F)(YPFrCE#uBkF`q*~5H?!^eZtCJ# zJJ7i~D-8~QYv0V)HkPm>^_s2Wzc_-T+=a>yV}ms0#}Q|ndXu(5mDjN|hes`}%~0)$ z8Ifb$Wot7ZiaKFqNDzAqSL<~Q^|utZ4}ni?3+$%ET!&Av69U=|bAsQXiTvPQVe;co zcrK3PgGQ9mqZljBch=AJ4VR<0$7XXgDe;B+k zL035L1RW#WM+`Y=ZTyc9dxR+t5s-aI~O|bya@J?4g966 z{RwGh`x%jm?eAD$>MSGVEiEl~Tmk(y*J_*De*4|7o#{Vl*Uq#lN%vBRZs-yRrD24V zAa#&d`fiifx8QNnMPb|5fU7?%h=k^p^BwPP*CgLJf${ebab*@!&9A1CMs_9Jh0lZJah!y}16mj&<4czdmW3)0fN z2KvSk&i`4-!y_g3!3B@7cu2u{ea3lzK;g@a-`dc0zK0Xk(a?+6i}ZaPLjxX~vGs&9 zS!ZR*vQod$HI;iTd^$(hp3!#68ywQ6a2uE&ZAX}1!i2~YJYl+uVFKEcA^PpR6^6et z4_XNBeZKPm9n3bCeA`6x_x-Mr!LyIoAf&DnLhW$*A#Jq{6IieK*$AblqA1BPvIoLPBc=njaaW@Zt zr{KHHt(gD0x;z)Zshif|e>=CfI^S8A=`3?Bi{QJ}XB~c?Ipd{G;o}$Bgm)fbh`-Ch znJFqqeMwyz=*)!IgWoK-R$)ubdGWV+WHyP-5}i-H>lLrHJzO3I{3-X&S2`|Gc)PY@ zTLn&e@@j>aFN5+^y^D}fx_a?H`CYm{M5JK!W>W9*-k4%Y%jkz#oOVf ztBlJ*YlwePaTd3Wb+BFAkZ(U|R~#n8uDBf3!8Y--1KV`t2G2Vup7vrlX5my(qVS(I z=X{#2JzM5kSsBs1bF`m$27-RV+j3^k-j4igZ(Y8yZJ=N`E$zBuF6Ixu0tO#2p%Zgu zq5ydNNk-kROVY`9kD@Hw{Vw?Zk#5#)`qJ1mHTWIKYnitLzX`X~hf7r3^g{++!AWNoDb+?XPgauvw; zarfl%1+0a*rf0oVkk^x0*WkieB27>TTkpsSanxgOgU^l3ZLde0 z;%?}&^_b;i?rnn|I^XePH~IMb4A!2|xt!LnK-viYXCC{KGQmHQ9|FL_x)OPm->dMy z)mfIei{kskf04zAtX|^+Da7+;#q$9j%M8M0*CrgZ{8{B?aOcI0ZT`kvf&D|~=t1^L zu0~?DefSA|8H{zqwao6(v4P>Wy{?=lz04SP+L0LSzbx?TceAtYJ_Or-s-)rVKR5!i zJY|mjzeeZ;06w+mB1A~$D6708K^{K3F6vH!PM89pfIc>B1E7m?@AK#Ard1ztK&*k3xkVam-U(2pl z`M(3d;gyBuW@@C*PF|2ZE7Q2@GCGP^Ik)ILXRb_F*>d*84duAL=N$I|!Asm6D=m_x1_7&5xHXYT6B=h5={(L%WY56*M%k?WBZj_xc8NHxo5!R*&D3QB? zBZh|9zWSija0O^6v45<0x%3u{^i(Lx@27i!%N>6o#&61A&@Tz^Ui@aid_-YsBf;7O z+3qJc{DRaRy0&iOGD!XOk+eEBiF4%=cB+v(H}a7qc}}w5ru&u7c)!dMb0eNfBY;%YVe$3>-XMUhy#f-9fGt!e@_tpY-{;VAETz-L< z8s9ZIG}v3%twYwxGHte6vDplA;$ZBjIlO*UAR~yFN;1 z>==1a>AVYc{;TN@qA7vxo6_IVQN zDX$an4MV4O4UCQB&0pGC%ww5)&eMI{%q*b&&GZHn?={Qei zVn2BF73IMv1I#d*^tk3Mm3j;U|Dc>0q0u)}9MOnh%lubgsW+GnwsX3+~xkUhZ{{4HPq6VCD!+W(@Y}u#15B z50$*m!I2PZ)2_LG9u18U^@8^>Kfh~WI6oG`K-`B*ejDcR(V_g9_))sm3yvc~FyW`D zX~PiDkpe?ok=7a}Q5TEC93?Qu_HBug@uPhl#@=*Mu#RI49r+yt4MTV^9E78nnyIZZoEfBcO z)_h?sRt`@x_2mPr-}M=B5gLA-tnkK`uE&ykTUT#xOGM62Q8@ejcykf=*}tb6+BOg7 z)s}FpQ~DSBFl+Ne<6+H39E&8MyPxs;=`_jL&54%&(VkIsPw}YLx@rZsogy}bg-L%g z!&u*917qZ+bL(#C_THglK*hI2U|aglE9>36VrL44U20%Q&8RhNU6&oKdzrwPhvtj( zPB(Oo5BIjm>ci!dZ|9qMUab%qLjgE8mha1l6bxxtsW7?lEK|Qc7D9Uy*IbU45zi61;2>c-_T!TL^h;!k&Et z>^h!De-HMN*_DY#iG;O`ZTt8Tk}#F!ocjA}U-3=n@Yzk+-sF7+W1FyN%^Hro>->>C|C}%&DU0eM~>AV_t;1XT;l(vfl;ee{((VXw={u8I} zm_5VTb=^<3?i*1zee<}Ej;oveFg%L#gSL1AefIQz)c;>v|E;M1WBXY@Y39C`>91fv zi|I*p#$4>B$hd0RoZf}~7rQ=Y-eF#;Ou2SMMQ5`Dw=mjVB;9sCuOT!;Ne@jnLqPhl^P`qHd_nnt5Ds?jyN{uyoU-82xI z0CcW0YoDf3?%p|)D*jAn&C@g*oxu!lv+ijc^{puvf#Nr7pQcgn=N7_KkmzT#_GucW zW{#u5jG?Cg&)%EI$9Yxv!;eO?Y$r}4OdL!IL~$T70fOxqJ(_8EWhvfEcdz3EVdH* z{@y>{cRnB4Gw0mp+;h)8_ug~QJ$JF$%9HKaeGq6AtMSOx(&3m0rBnAq&Lgq5#fgLt z-4}rmvX88%M9b0r5$eJst+%?6*=&*)-6Qoc4wjatW{{@76sFNV64K~xybK-Npv%vM zY*3f~5Pdz_kNbrE!}_+BDex516V6+IWODJ4b5E|5m=64mH+QO`(O0gMeu6aqS*cF^ zsn!1($mPj&;!5hj{Vvr1UsnH@P=75m?uM6_7M7RP>Y1Ixs5jOm#Y#Qebpmvw%WN+e zVRCLry|Pj4-j_ugRi{yB{5+z4r8?~wM*H_bJMDS2-O!fm_MSVW%x1K&%--|Mh^Cd= zdwyj!-TuGI&m#6Eq61dU&tFHhuauv^G1|{ssFy{z9mhj1of{BeCD_z_Ec`C2f2CuA zm)~jkJs0)+xu(uht?SqM%JF@r#pzmk0oE+eT~13*53OZru9TK`qvb--(&CJXZv}`U z6wM?cr}J8_*t$G(MwW@}uH-}Kqxd7iB#0?lhAt!k5%(!3UV$iGWL z^IfU)^t({!I;-=c(q~Q2WXF2(6cU5P;{|qmSU}j;2nQF*w=+>DdAQ#6(OE**SdD!1 zHGo}^6$Ul&FKD{{WTa#Arw6pQu$jvuzxfMkLUU`p(SCQM{nTqL>_KZwV`aNjbT;yJ z;T#a#cPzZpv9-}*HpJL|>dOtn6P1sZj_-4<{a2#>r&?oejLKi>8ta}`{shYB`kHe# zM)EQ?^K)XX!hVLZwxqygU>M6%1mU@4qg$eK=y)+ zflN7jV})mBy3Zjjv2$OS;rj@TaC$ChPQqIHew=S*PlCrS^pXVj7HQ=-k;}HO3y{z6 z-*3Wqj;|JX$`G@)Fe-1aNFm`TN>UwnU(4_7g$wZ;r**W^&%&Z0hud5W@GLC$5##UE zlB_S|{gAgS%^R&1LV05grD@*Y;?hy}zC1I#Na|$03HDtpk5FG;7SXp-dD(9C-2(c29CuUT5Dx&B zz0jvSqO#joD2orZvY(Bz-xTXgIf}4dW1s6wXfc7icWbeab_La$j-#yxTJ|6gVt^&C zox0bKHWqQhHVurQTOeMZ;k2%?QmqUF?(+OWSb0oOt_o?m`kaENZ4Cu5*2(G(Sk8-{ zyd3Rld|(ven=Zb*&XQlmjrP1&j^xtE`IzSfHB^ZtjulKt12 z$#-~pX{LHp#rk%2j5DJS>3k&m)P3m((EiEB*QB^Uf=#{=;e9t~e0x2F-REV(5~~v~ za5A^Jo*5RL_RdPzVk1_^ThTWyd|>My+5^=Sb&v0XVD5QFQC7T$7>j82i?2@Wctq<; z*ANp%>w7?Ji@i@HGsBx*LU(IC+CaUgdR9eCB|^BI(IGKB)~g3VpK~UCm|S}~dh|jb zd+|QzTjrcczKK4je`dNaic6xX;B}SZ{djhVzT*XCzx~8-1HD2~UbZ8+9O633#*o6p z(Dpeu$|K_>Gk!Er-8iuEqqwo`IKbUmj@K-Xb>iMsG={QxEPH%R+c;AEeuVCp?Um+T z6PImzlUZpmU2AjNwcw-j#~#rTw#N{#4C9h>*&iCu-vyo@F`bC7_-Mb!zQ_BK*5PTt zdkWQ^>_gX+)TNKYZ|s9baQK_`VGnE!lUY*cL+$}4rF_=0@;$(H$U~X=5XM1^`*6MW zZ?lT@*F(V)j@yGMkK@*3H%$vo=3`%)@nv)HpCo>b`>#fL*^y$G%)3NB-_J-{+P;;} z7bWCj`#z8MU1R-op%j6W>?38|c*2STeM#Qxnwr}xna!fJ9$jbC1|O&0i1pws;))YS z8o91M6w$cSb@gGR@w=dL)Mz9v@Hnm=f^S1*X=~UAf>#FH7GPZgc3FVI7uwQo59g!T z-v!!kFxqYhZI5f$y*vF;;n@rqC7mPXn)5}8Vk8}?BkqD%Ap-x_eo~CwsL4=_H}Qt zY8wulEPQ0c;s#yqUxA}70jf07-iiB3ycd?Cl{QK2D6ylNJ!S}LgS>Q>j7=|=mH)Jd zS$*O-<-DdHOWLYX$xFM7rPal3YB>@-Z3~7Eh6^u``*&}1Z)_E?amanJ@DToUxq^17r#a_$rdaVZRrI0)77~Uz8YOn)Zz!&Q98}UDN_@_)4 zb(0L-d%M0`>tC+O%0Svdcv~`9#?8?NIL?Yg%tfYam$*nA4cZr^3v;pGaSnY-+8AFk zJ_8^R>0_XNSXm!~8q)8K?xxh=Rp^m=wNH7MiF5oS^7v;D?j^`|x#-doS4b0$V9anj z=Pw~YdHPWBl>G9$O@3eULhzM;@qMkEkcVlH;(zkCg{@LvP?PHU&F0jbEf4eicaQz> z7~t5C{+HI-kv!Jwe4OR?{{JKVe!S&N)3+zbE&UTLeTy}GpFa1TxyKfRgioaP7AvR4 z-B9pdUtn~0%P(v5lPxd%EM3QXuQhv|SxRYq#S-PY?T&YWpo7CLAj;KKQ4hx4G|y5v zzH%5}PXlaEqdlSN`1)g{r7V2whL(Gt%vC#;tqe%`)ne@hBMSJ;Yv}eqtF*EnYCLrZE+u-^$bO zKh%l5JCpS6kn-PSdZTc3sZ^?`*AQ>ZaQ$5s?JP$bLc|QK9u8i~Z z`=1(oz1<-sZ*i6+XJ52a<`*aCsxa}eUEPX<5l{PzzuS`HJP*4hOri1e2xvtdrC{%6 z-d6&KF|aV5stj4%aQ_hQ@mFhmAegu=qUBSs(oYRz3b7P?Hd2{jJG%oeyYC}zv+Wsu z<-XPCO5(QE;rvYy;&zfoIStZ#|EHrVF9IF@>9Oai<9UU9S3cRvK6-@Q``0)iTo8r`RH{GAzK+oT;}Q|>jW-#>_X)|A*&wFC2Eix|*wq;LIRSoG?bu3=sa zT3(008$nQuxyR^h&f)+Ccgfo~7;m3wyd@8Ke&PD38^3aOXPty$U3hq^Qo$uy9V3Kw z;JoSxAU=Lq;XdXx9j79_*NO4Ih%+aq;doq=z=sKUHMp*4dw6dBS55gHD9^AuK+ztK zjW-#8o`$j!6H40W=f!Wawi3>EI{a-BygP!wJ%W=~PybGXKN~z#TcPY7RMEG#V=KOI zi=8(_dHS{r%De>Z4!tsmJ8$vfDa?TjZvfPG>Y zdk^waw|p3bh+%L3)We+* z_3+CM<8Vdl@UxY)j>~YX>)wQ)$z;yB;FVCD|#V0!>$w#ZlQgYH$JRPe)Zrz zQl3kZM_?W1619Id(Sv+G)gLO>Wnl_H!RnjvLF09+wS4vo)=*6PEGtUl`2Mh!=WoPVGTPuUjo=wrx39&LUSWh&Rj@^xO( zx$8stovtI=l7GN&ru#%lm-Pm1J6VMO3r^F zAG6_v?$eggy4f+dg_ZGf1&EBw<0oMe9?$Po4 zeJj7dZ~hZ-=P~2}pN`}QfRTc9fUHFO5n&ij$ z!ZLn>|JhG5e_3ZYQpNl|Vd-zT^v(Fo`Zlp|@t4-snf%Q1{@n6j3VQK|+$rge`x#mB zIW75bE9(v`i)~r{ScJuHLc>U7Jy&hpmF zsrN7Qxh^>meU{R?COOl}ILpe2<&^od^uiWm>DM<&&#~d@yO9^alCv%S21`Gbu2tr7 zVMFc+re~v=pkBJlYKrPH{k;)+slOkLIWd-VZxivtdudlkaxQ+ekMD*5DR0{_=CEIsG3WZh zWrX9k8#s;`^7K69aXzUWoSxj<%Da!1$FiB8WnY1^&#lhv^c<(_pX%5{12^0RF?E4iF!M+!ulC4tcFq-)`Do@+(NQ z88*k|#lx0BOLsftSAmC366H6~{|(@A_ZfJ^a7>qHLff~2>%qCnf*fY^pjh{~-vxY6 zvKx-tXlsa`uDI_3Hv-$i)C`bfB1AT$^{2ocV7@V|7Qvw1@VP40#O+k-`!C?HBM)2P ze*rvWI?YWl^JKj-mDTf0q+7t*c6n~5Wt!h0%~4ImAeXi3d}C7X&2#AY@@m@+((oYQzGk#*#8GFbwtp+|-wQnItIos4HRh)C zay!!fRB1q$q&^U=j2 zBh(WP|3vhi`oZD82VptX4G#DH1>w{U4)^^8;nWL+w^*0*g}$+of&A5Yzhh|cm@Z4} zfIYr8906~<4*%}=%SMIYIG2UjiT5{Qywf(j)O#2@LHd)hu4EK%z8MgGN!r@cXJb-^ zb{b+R*OAehw!3KCGTwMtrnl@8q8R z*q%vw`7rD2ck(pgEbBR7^*Aq|EBi?3k8*_%%?RHJ!#r0j9bxQ?sY6^tihcmQc;D#| zT!o=~gjVwM8kFfD_?KU}v@Nx9lHn^ne}Qgc`M!~Qvl^4UKxLI1Qk2WigilX1u7bOz@%#JVI^5GLycI$ue`G_xgxlzDHSKCTY0=Y50cL z5eOV@=qxK|`}=v|*oQ4>+&j{1M`HX28mXVEmgkb@V{T|1{up+JSHB}4ZPDcUCe#g5 z@K#Y;PK&u{@7PFj2ro*(qXu_eCko1|dZ^K~WHhm!Zq&hga;S&DeV@3+emfmU@jGWe z4mTn{`~a86%LhdcYw{bvMy6)Am<%!>bZh23d=cs3M_Zbk)wPex)yOm*&g5ykEec;o zy3KOGDPODMiiOMI7RErGnUn$u>jo9@L(-VQ_O6@5FGoGo)yj;VYV}U>sUV9}i{Y}Q zWgbC2SHK@?26qpb?*f$faP_%zBYS{9Qhly6aPqB(z6=O`F^zjN{cxF}?SW+x*VjNp zy7yvTdy=v0>=IuJ5O=-W^1_k@yVWwfB@JTG26PH9VmvP5uGKW+Wnf#vyuv4zdnMNI z21DaC&rN9S2-;dHPmh5}PJ%)w``~!8cg7kfLBw2N97Ud|C3|@1)vlH3SvL-dbH{)S zpSH;c+2>fg8EL3bKLn=+j3s$zv>TbYALjqut3C#J%J*aOKgSl|?*&B=$M{1_ySYI1 zjuzlQpIs@m!uIGGe7u$2!Y8WGJ0dTz>6r0fmiGykx4$`E;|GTDCdz1juz>rj@x}5c z2$ZOH!dtA&7J8&`<*;c4elt3rY_oo8qAI!zAdO&&F3X8T; zPM(IcC?^LmQCVQUl!X>N-;XEDCJUpZ!=qq*@7}`r9qgd4>5aX75#`BMZR=`9wHO5jGpwa0me z;FgNHn|V57IPx68)k(*#s>f+JOL?6!Zg&aSC(F~!$9pe+e)??iCT{Hb)gv;2;IKJj z0ikF*^0LqV1bNtJ58jm|wR&ERm5z);`yRnMg2&0EKkx#$et7%S_aMUyzRUB-N&FAY~5DvrAhtgfSB z*YI$_t*OI}^%lKY;q%%$d~u|Ius5$Z^wSz~Y_{Y(y$KFY7u>o!oK=XCs(pJ#9X_QA zNlfO?tV@IAf9QnO8(@bP8~zLG`+ay~6kc)7#dj=4qW49H|J3^a)jOegGJQ|Su6_w` z3SNwH0-UCsi_xXBoTfPt@k?bP#o4frmME+%#Ty`W=C0LnsmIq*m&L# zy-~^d5~llbUq5x!`7Uh&J#m~Lrh693LtL-0kD^{eoH!l=iQ6gDaEza=FlZ8JKwJN@ zJj9M;+A#?%0M{v|r(B#D!=)tMTU~$+LATw35in$edAM%g68XIo#EoF`IyEoZKd(T3_Rr}L*EJRCB5%3YewBUSmc6ektsI4C@fc1+ zIjU_1uv2X8*M%gVYgAZjWohv10M5DUf5?*_Z z!gSpz_4J?%G~Mf@e^Q-BorAr!*3qDg`bQ^BZ&A;|XIaw)O{Y5H^}r!!@#uuzwc?n7 z-$(8Zfcs}p6FK|+$3*8jZ$urG#cyJbMfr1C^s~}7C?)<;hjMSo|LG6#X5?Y|x8Q%5 zUGl=ezs=xo`_(?8I!t|n5!V5~_1-4;#_%b`Z@sg50qTUW9DZ*Xn+|P^Z%3K_fsb56 z93za+yW$IcXt_LtcowjhV-Dc>dE37QTKFK+jyX6wwqHy}x_QcgFcNgH`gc~2>oV<|!qI7*-r`z?T#cX{ z(@sWtr;gKG7TjZ~F8d(L@DF&Jsi;-mu$M)AzIMJ`DOazp@F}Eg%a!SC4^F`n6!Y^# zsN=)qFewm95~K`fv2{!2F?h$%FO2bFH*KFQ~Vf0DFJ&vnb>ouZR6_bKG( z`P}twq($v9SvuR2Pa_TK{0#oj@-KZK@Lvq)Wqbg?)3&xH|7vCYTU3V2r`vlzA8`84 zG0W)A$Z{_Ef|c{dW@*8Lw9Z`eWlQ@NOM4RgJzW0=^1B8K%?3at&ieRkR_;m8vl{cl zN;SbiW~q?3PJ?x(Kc9#pJv|&}T_;e6`{Cbi)Q1KX=rxu!E}gw818p* zPF|Dj#uTUPmoo5(%{x0l2x#y)4R-+UALy@`VjUqd1iYh+{StXd({^MeFIl(q@_+E% z=R{2u5k!SQ{-*}3XXnqJ2b){eL%N&2x? z>Fh+h4vd>RN?X!@iaE9Bms0&qe>KWqgTEe7e^HiaeFKw)iQ@L1T9^Ma9-W3fI(MY! zOHl16HZ_znJW&iK;5+g+sV7qnejwHDVQ;k#bzujJw|SLMXUOm2CB*HXeRI2N)u|bS?SRdNx_Jq??~d|7T)wXl@f63RL0$(0BZP*tjfNiNZGOg4 zuI!kc!efqP_JscsK5|T*gZw^T?t$<1eTO9j>S^CVU9bs%{JqI!`<_T2^Z#7=jeuX! z1($-~Ik5U(fHjF7({Q&NdLml$UAnM*aIQRk>1?fZ?IP|Ymu6(;hn3(>oLAjc%rZdBOfbakOLiD`oHOOZAMUtFp!PcI1%z>eI5f%ngON!;Y- zJh(IRbkpLt@{TBD7O>lmjPSl=vz*L84)+=ofJoJ zD7R_1M|sAU4`QdKc6``2LRtA43_dGoRRkYn@F2|dYEMqn57!Riy!qx#9L6)FeEJrX z)&u)SsK@t@mqI6c489(;QH68>r#l1e@cr8(00fuoj1}t-^mk_em`C}$@b~B(d8%{x zc{1Mhd&ha{oYRMNh-}3`Z8FCc`|}xOBz97ocM4Px%D4tg6gu} zNK0DEpapYwlXYjg6039hj@;DcMdWiCx)R?hTW%lemg*NL51PLNf43$0jrfWjfBcPc zJ$Vo@75#TRe{a|OkhG5spiKX)Bu3$#=@Y!rtSa4XB!j4H2!HoNg+AYyPMW+a^4TEG zH=zyGm0($Jksjp`sUG=u6gY4NH5o`Ws%Wb*L9YkYl;Q5gZ#rd59?*?V>HgD z9pgRWGVe^vv?Kk&cFDY>+!xqEz+}#uyt!1X(hjfwgVTWfrz@U6n$Sre&LBO<;V}pm z+s(RM&$ABaA=~3)?r?zTy2w9EBm6AmH~GnVjyZ0?|15XT(z&i@zAW!^NyXAuEp3(_ zou9b=VENQ#EWc)X7A+5bM|6EUgu4jwWp~xx@V*gvcAZLCzH)3jUAwkRx^zX$GCKs8 zu4oBcC9q-zQS&jwb03(-Y+eRUL(SH>bwG#=`)|d1y<&@V_TLfIaTESt32u;I*gnplXmFOxJ|i8z zHhfaRsa=e89K#>ea%aI2@D%)Jy-&5Y{LVDmHqCc`{B{}gd{4K0&!|hwboF&S%hEo( zF6}k=&A*f~tsTh=0b~1Kg#X#T z=4)BkIhlbB(b4t#pIP2m-{74l=+xN8u{h=GhI;;`$OBz7H93Rh0hGgfp$2k)4!D0( z9nx4Y*aUivMGsLEfbNXiILhbg!sO$8zIzud;Nn zPSbUf53Z+P8^KA7!(X4mMQ2@(-)UdBC2z!U()m}GF2>zpxHlWl+brc{)5tTPG<|#W zR!jf3P?pNBr%%)7lDAvhchsdNeOVfF$-6A=yX(?Y|GEzDmQKti@3pjlV`({tDTmIF z_XT*aYu3JVosl%!0*fR2wr7r{BY??bTh|9rhUh$}XHMgJmiuqiyT!~M~wwMo*`+cD@gTK0miMjLfee z5x9AbVr=+Yu}y4(!?R;><}FW`P-gWrCy0d;1e~)@__J=nF;6rR{$Bzqauv#ni z!y%S2U-eA(A3|D(EB&7kcyNZ5HvMBri*loNG<^3FV{N=TfI~80Cw7CrwYZ0(ueoZO zr1>=S4UorL7nkQfeGz4^gO4!ZyvSo^jK`gYH-yud6S3Je$h{-6PNHnWR+0N8()j0W z_-CF&p2Jde zgYf#e`u~o)aMwH|OP?25qb&W0z+GnK*k9!43vn4HH$tDiB?19f2LN09E`turJ!OMD zb+KR;mD2! zTza(fq#D)_lCHR7oA1BBg|gVzH(xp}m`h$=Jws{n*O!HO_@33HLF| z6*;mGI(toY&g|#)KSf^u;JiLtev3NqqF;pEBb+HO20QKv)O|btE{Cxp<$Zc~_cLo( zi+eCb@CM&C(ccee{DI<__$E$F)&apG%4e?Y7gkpDeQcD?+8oL@9^Ya4cR>b|upWr= z2@R1p8*hO_c|*)?t-p6nIQe!w89F$p8d=hE+x8^fUBum79O9|P($hXI@<&}lx@Yo^(9&|| z9^NxEZBhTE-+({QL4QO%m8&b3yj>tV_l>FUNGb%*YI+mq9c#&wqddYkiQ>kS`?X0do#mc+`2toj%@1NkY_ z{#d<78g<#hUDkl}U_?WSiUuYbCsQ~x)3fIVqs7isX3f(^f1Jt(gwq-XqRu?_h9 z0Ei(E*-q~_*M}Zo?Cwa%ziy=UKk`-iwkkOrIF_*i|FaCA-#ky+2f5@PmUg41y`rVg zOr3f&>QccbA!0)2LB-8r@=KU(OU94rhD`(5Tp{xVq9z&4#{biUtoC3R!0D;e8m zjo&>)G!B;$${%Dz?<4|lyAaVC#34>C3<}wO7UyQ1do4v6Nw4u^P>5WSR(;1ZHcJ`V z{Y|}oJ{R*UW86J@-$tYsBe?=T#{4x|f^ zrdZTPS=(e~b6w5;_5D7-x7mJQzPIbTTE3foK)&1FU%uPkU%uPkU%q1xbkJm(zwyRF zt&A7crsgPhSy>{!BZJS%EAiOh*6=O?LfYVpZRHRiBGW!1F20X(Uuj!*jekFdEiy(A z9`2~gBa0qN#%u)_Ng8NTc){>S80GU~fkB>dftB&R2-_UWuVR;sAf|=sps(*QxS^Sm zTDdBhK5Q*?o6>_ufh5_e!xl6^y2M!PscR|&n|r(LHR)Zt=t2V z-#^Xt{YvG7viKmBMV);k3Ur$(^)}}tj?ZquscQ*i&pjA$%GDP9uex2&2dGa{os2kS zmhQ5;bkucmx`$Z09U)z=i)rGrJ?O(sZ>*g?uO1w{Hd=6)0Gcj7vteF%Rup2(q$o*t-HZ(^Sq@$PdcPG|Hm9 zn|ura`Rm zLVtc@V7v*Q=e{|}0rmV6%C0LxTzRrEFbCzbzn77o@mQXM0qXkU&mfcR58~J#H{pNw z+fn?lvaqI$Y54K}y*c1imlMAXJj>DjOfGqhmGf9j>-$Pci}Al~dP#Lfd-8Zof85fO z2GSJEW3zg0v3ySo`Bd+@oN=tOT~D!ePqlQI17*M0iQgkjwehMxxpBhb?SM}V;1!PX zD$vOZ?BgW;6!^!RIr(XMH+v^}TaO#6_LuNDa|U-9`Q()^yfaq9g`1tw9iA`XLdFzV z&DOVdN0iTTmMw!@s;dvkP+!2M8AH2|W$WV_N!smj%fh(X0)JdxJuyE5&ND^4x+PoB zj_pyq9B0`wxTn?C2V`hhz@-^OyS(2W-gyhK@YT}?-YEj%qqF=0 zIPfgApFp(T%kcIAENydmpkEOu5XV(`{3YYn1op1Ah?kE4p7SJ=;P#OJtDb-CFl={T zK#KoC$e&3N@_)ngb3Axh3@g0rN|+H(Iq;BV7>3$i;8Y3RGIeEk{mg?t~p{&&N`4LkSHaKBt$nCOL( z19OU|`|sB2#`X-4N^A%(^H;6Y4h#?N4rTu4B#5PssCAqz|&`4Gq!-z7dF1`9y(JvenHepF)zN@} zp?_{d*?SQ?%l9_&s@XQY(HX@t^1kGrpm5ZU42+$dS+63J>+QJHpt8cXf8i+O3*-Dg zUezMi4ofqIx(i3sx`*%{Jxn2S>dB!4TsIFdAdn&KYFhSFk#BGwkzjcYSDIn2#W8t2 z{g^~4Lnh4-$pH7LgY)2rK5=SBF<35O8XTLN75@U)FI?x0ET+8EchBhSr1ifPi=ARM z#p7u>98OH%0CIvah4({9%Oj$OgekvxA9QbNbgH~q;*HhuDxdF?*Mw4;=e=b{)hRB@ z{dZA%8dW8Y`{6Y5-Y9gZEmyd5A+z#Jq1cEwmey7%o|gR^QU{&Qd!&u!CIQd8qrlgd zMgK$P9q$6B`5E$!;f=h`EPZu(tjzj6Svq}vLVy0^&qm?=Ke9hCq@G!Cqk+P`UTBRAp(!JQ5$B}6|2iDhx8($e6UymP~*hQ=Q=>i?2P|THph(q(lm9&WohGFMp#UUR{CrOu* zh4P%PTb1`Nw=N1{4@SRK^q=E1a$ScD-Qe;=|5DFeFV|UI$QtOPuf6B>i#PH9kA9$z zFOFs9K3jHk8KSQ}yo|Qn{ZE^#vbdg zWjsHU>Z*D?>xs*+$72R5^bM!^vpOee@UX6--#q6+MXP^wcn~^5Y4P>N z$!%&f`rP>=X+U4l1=n$bzqF=>Jx%>?kf4<`0$-)@BCGhT#$c)@RE{^)yfx zdF1J_+gR36VETBHqYFiBHs zTAtV{>7+|L;je;?HI3O@otxru6@t14%_%-0k*j^pG*co_x7GYx!IJqEGX%lwu` zNCyp!;mPxXC0IM}39HfM-Xf!=j82S^ffbKp8)5gAcG?X?TokGaiQ?YeEr9|A_)`6!pT`1{Rv_Ci}NBs!dv@OS-N zt2{G;j|e1`E_Ql8-iB*nZR+7Z`uZ-`5J)0VKixt@eN(7=A_YuwRP28@;AK4UNKE!noRX`40Hy1%Q(GCZ~uzo&j0xvmdlA5Gcd zSsdj(Nyeua$_w%^EWQ0o^2`e?6V(bIV8PfL+v4L6CzY+z!Xk+Hl#Wc^2J8r%prsaqmL~5vp)1pu{3z|d}OgS zZK?KcZ7eM4?>ODIR_SmbW_n?OPp*&Q(7!R2>U5-mVWot7CqvZ{Jh7!Rf;XRW>b@B6 z%&32B^D>~jOQq7zE!(zU)tJEAhP$2aTSnIO$}4-goLWXqpAtUbe zY=3PVU*;p(jft6dU0qsruxp<7j4VA8<{Fo3!4JL9!Sc?`rs*%wsUi^StX*fdJ*{Vp;ofJJ}C|c&pxaB?w0S! zSm{u26%QgTPQyBzj+wKQ(Zy*LO*`%4($xF{LL%XErRcD;nU`X1qh)by8Ga%q4$!G4 zT_AZj;H`$EjVy;h=;{r)$1l3>3hFw!!4Nro@@hbM(G!ZUB_3K1ZR0%iFqA`oz#GjU z@cyR%-Dgkl3tH@_I1beRqW@l~%kD63f-Y@4E%FJ(eWs9RUG)8o==+(`_p_q!UD5Zu zMc>y)-|wD&Ux)iXyjQ?C#z_bGec}`LKFCVeMvnwP5t~!qBf#_FviA9d7-n~(dIZMx z0tEs`f#wUC7kGhQdnp2a#WmC}!Hpu|{t<~kPgt*(jdCn9wx#V8ICgF~E|=iVAo&Xd z!@CC%zG4NEIyWbNF8x~W)J!I4_p}ejtJfaVT;W-a!_!1@2Brr1@U_%?mx>Kva)LP z&G|QM`A`~MwT=}lh|FY_x0IDNiS2TYe}t_|CW?5m z=pZ5_3m?Xi*Was<^^~O@guFd4(Ss0j)%id<++y++!&&zBq;Km0mSmM_efNbh#O2;r z4|{mhcbUU@$L@USka5uApB}^vLwIBaitEjfEOY1(s#=CfwmlIyE>w+^*d$qI+w1Yo4;N)>F;+@&s~Eu zCqUC8-eMxH@wv4t3 zbnVyz=fbU-H1M>>sx9OXg3bIfF3lg3*qS(#e{bnn{@^0UGv$S4lF)>O^XG|<%9G~H#Hvap6~Qr2aeviOz)x>@GQ zN%XtUgUa(sbXw*``3d-@i6qWkacymJ>&fG`@zKBvD8sfu=GE(va|(Zt!e04f zoi00g)OBb{0w$I~vG*Bv@r1+9l%iA~1db)XECZQCc+Pvfnm$H(|3`I%Y#CgrC!kGs z+O=F1%GFJ6UY2qZorXvL#w4V-L-UW8pq1nH865di6w|NL^o5GP%qCePIMQcO()P}} zJoRlbe4IBVVcDxSzihJDv(&*DiPVeakuVQ~vD`5hN`eYb}D zmMo9qP=6iT+Hh7{W-7Rb!+V}0qo6SsQmON9DNgeR<|wV}Q+%VKS^0NQ)1*RWIIPFL z?u-DDryH8!LiLvaoHR`k2-|GLX4EG;td2|4IwGW&|A3Hh3{M!RJbYl9#}U%r z2Zi*bB`jR0g(@5{5tG-`pqt@Q|- zSEo6z!dDM&dgI0Zt0#L0@?)}O#I~~@%(;|nuo>jxdhzL#x(0i)tr58%^LvT6nH~Dx zuy65nhv2a^6}dAu3=g!h^N%FRdeb{ubb6o&9#a&-Sn1+4+xhfXxCo= z-C3i(ym{8lnlA`6SoF<}$Vc1!0hGZzqHI%g{CB~6NZag01+iet6_^%OXYvFX7E0V7 z^|f|!amsKx#M{OX(aG(&>pNYm!V8?XRD~gS{BrGJ7PczEi)PWAhMmd2!9w&K`E&0c@3draBrfN4{2r5(N;lq5u2rWINvT>34PcpPg!af0PAKop zWCT&^wFIU+i@%Ar`Kv40H$QE4-z~}GP=!dXE9i|3C%Io*y#Xpr`fQPX7EbV@Sl@L( z@2e%Gr)<6)fkMN12*%;bd`d~HpM^eG(oR(7GajgV?sWy`5Wfi ziJgq&9F^rB3z&a!ZrD(2i^@=w+H@ahynOR5N$|rU4`5O*SA#mzyZxMdyTCj0C%s$N zk^BJjkNn0w%9uabAdUMs@Ub<7u&%(4DEt~RetBPPLfY7Wxo|}1Z1-Du0?Ll@dVqxo z-xj8$Iy;gpQBJC-xbF`#z7H1lYR%P!$*kH>>eAp*z~yp%*av>o*5K!le+<5>IbmdUxECSr@sjJl!cgC^T$6Kqd_4}`2Ku=Mcslaa zX0Q=|?3Z^~zqGi2=`WHE@46E2yWz-FhMU>#S|CM6SoX6}2mAcW<}!|J{qz$ZU^tJV zY;>Ncs8H^oSh=q@n>m_*PkP6azjM)Cy&AHBx2mG|dv(t31ROeO;UIX-vBUM;#-xAI zPjnoHwSvQfP5IfNVKcmP&tEA=1TA&+w_Q=^kwpX|?&jUf`Asp{n^L>nxKY;DdiDmXxj-NuyPC`JRyA0)~GBkE@#N#a?j1$#`MDmSE`gBn*bk)?$o{k z;~VP_G*b5qq?s`+4tx9$9-i59nK1I`CQcHpU)?g{YAW^qytN}Z3GZm=XiY{@^H@j41&k)u=Pb7+H;ef-t#q1 zoiB3PPhAA&}qH))(MUdu2Y&qy@R zl%69KhO*!plD^wa81~kLaXC|~S^z%M^K!^WTY@va>fAEt3c~(EU~>8^zi*Y_IBl!K zM|r%8NJBh?#Ed?r=fErqsg0wGnOgYAaxgS_14_^lWd-ge`2 z!0}yp$0Z3&t;^~X<}gHoA*?|T-XL`3526$C9*f3_dZWOM;vx>1#f?b&=&uAPWjR?5 zWh(8GMvP@n1780i4W2KoUD3aXalSOuq<;k-G8pfSH-gJlZumEWMnot&Ha%CuCT+GH zkEJ&&j_)X9K@zaSySE5#cdfd-FgA^c!IveY^7XBP%g@4wg9R5P!1(<(fg}72Zm;@y z{cC|0Dy7Z57(y#x8%69x5+K2&)4PJz+WriK$v zG|a}+y9Cboomc`|{&x$^Il5i)zeivb^NZGM&;MSBV+%7sRSPk@NE>zp%S%(0rN%x} zxZff0zDK<0g=uSv!(iKzGMpOcA9W?(_z^uA`>t@!y++pm!RjnF%gfQ-e*;?m178k= z`5noR_wIq^B#nnS(FhJ}?7u~R&XrppiP+p3I|}zEGb81NbUbYm`nVGsgl5!nK^T42 zJ+`G_Odg4oH7RZ2;t&OQ^vG^afA)ir$eF8_VGmEsJ3GPJIYN+c+#ewZVrg~?58_ch zUqb4@qB8(A?@{(8{atuZ;QbMgHp7CDAH?-Qcrn8t2Wwz>Fe5GvV7NkHoBNZc z0Oz>I_&ejTfYb9}U83!1a)6Nf~OxUBMlMHbyjo^iZK&N$4c5c1D;4Ev(3g@56_F|QBVxyM_@puoMR=&SRuhjGRf(xTYV4ugJpHBkRi=E!* zqW&K2!)I~ZLc(og5~Q7twnpx|J`S4w!*|m2c%{{1_)YHO!_d0@ZG`uzoc#mxb9}z) z23^ZOKCETaIMiI@UJ=0==b!tkgPHLhwN(Rtg}&okZBt9&^X@6w-f9JPpUuW5#yMb| zhKfj39c{Rf-P}J%?OfNyrg|zHF2~fTt*x(vT{V3Zb1zN{N^`DPxL0mV@Mc0ybr65! z?OQ!(6A7G?6KUAg1}6CuBXwPFwa7pw2Du}^T{G{y<1RT5Xk+>k8yedMkR zYEI)mwI>Vc`%T7U$_K1GeAZC-%HL~Xg{6(+O7JKL9(_LI5yp8_L!XL6QxwQnJLZ2F z-G2eQ$Tq8={*Aa-bPU5~KAt=1--uU1WqdgNQs^7d)A>b|gLhz~yBw^YmdjN ztMew;WbX4v!XhvpV*P zgx76EqjKq|uUg%YAJZ{VfsUelw}=yME|tM-%f{e(XJKf}uBc!>RCmngNu%>{?5@KWb#~$r z&;jQsyrnXIET)At9?4_8=js0htQ|BCOyccf9Wwge==lNgcY_`o1P%RWw>&FBu)@I|+b4G+hGUU; zr>+)z;F%5Zae<#v4hXzA-J_oa41r6tLt$?X_Hh zUgoMMI4=|Y$>tkQ%gi;wd6{iZa4eH|GuA;)s8fCf{!T7U9nup+ z&`s$7R<=zyV@}tWuAQpQ@7NAwXZl|7k5Tte@ONL(;peD~56OGI15-D{>D{9WWn%h- zJN)m*Tpq>bu_a6D*ZyeJ=k>aVzhhmadji!5VOL-};Xyds4H+AG&pdY9s`TaZ5_XDP*Jr<K!nb!4<@n zk~ZHF_0jXKkEk=LyEmcUjnJ7_*nHPbLZbPOzhS52WoRnQa3_WEST^|^?*e8P^=Up$1dR@zg>^&NeYYy>+HnRmMckL#_=Gu8A;wD$Mi1n0Es8z^iW zBE)L%V@S?Hz$izWY8ZW`F%8 z8dt9j{ngfW8rA`{*Sn6fJ+!RjQqfi$8QTD#O6(zY-{A6fb|hcE-`W_p2X>!~vet_^ zCT_7}4>xvHm*3Oc@MzQJFN^k&mqp**m%-oT;@H8S0&z1kJ^<2h#JSICIQq9fCk{5B zdBm>EW(1x-7?=%m_sO=ag`0(S65KNAJ`tAj>Y#xh()OKi?Rx>%g^z=r>wF{YaBd)R z5G*%)WDV4&>vO{4lhzze)b&T{)nykvADn81)ytk z0>R5B5pkxt578oAsw%940|Avy^pde`cNf&4 zG>Pk|B1KJ6Xx#60u1}&Sm!!ow*w=CPK+y3Z{P7KPx1(&p`h_><56M6 zrwXSYikdi&UxvJtlb7D2a^kVPIWK(3<^tNHo3so1ZGz!yCK;`f{}1<1LNV~NXwY%3 z5=c8)$3sy+(D}D2ufiYms=ULHr{s%Km2CLRaN&px&m`y*a6UqhNbLva-<;%Y2g^$}99_yfC-%)Og2pY7zqwh)Fw?d1l|r`&1Z;+r zcu04=Xkw(_jpuujj{E0bkZphemS&xNlEzWwqb_W#>bO{IGI|Z#p3XmNh(O3RcudPK44i*p|YH)<=$jS*YV`tl;qkF$M9>w zTi(4kQ<2OiOxKyFE4Ysk=aAFT*WxoB+2fxl{WFHhfqMUvZYrKTS9(c z>vPWsQO#WgxPOkD-K>c$=)@+y+60TW=^RW01!ykga zXsV&V#xMfmroq$FX(+;>aiH_k71^vyN2eE-!rJ`NtPg(|gTXD{K2B>?RiJ#Xhk^vo ze^V%nIuEo&W8Ql&YecaH9CFg;l+|)z&ar7+z(c^V5nnvG>7gFZ|2fFiVJS!H!dYwF8oqyVm*#)UR~h9}z8(hMPx>~= z_-zaO9=xNOAHwZsy>y{S#gWkc({)vHsbo1U<80#G^j*RP_ zmx;-fBoMw+pDlpqO<)DiEO0g+-<3+w_-{m-4%=7zo~Rb_5N8Cas)-Gu9*SDYr$yxD zJoKH5luy1#sf97=dy9OfS~)h4K&)a@fqmKTq8D+#2n|$*+d(u=u}*jVJT8O4$z9PL z!>~CUj<+v(&YSHL|KUgOO zvhV7Cl6`lxwd-?e7iIMCOvZVBN;z`>WBJ~~r>M<*g(b}j-W?jSl2ppb`3sVp-6lQfl$;&I%j?nMS=W96|l2=V`KXE93 zos6@l{LJ;s(G%{`B3||P`XC3nuA5DVrFRPBzF1)Cnv1Y*;Q$UvV*T;8teFpzRIp52mF#edQ zTkczBFxW?>K45>2dL{>P+Cv-Z$Y>F+Mfojk?g<0`i*ld z*Tj^)?_qAeD7&W_Dhv;8-L^B44Uqjn@w&&j4dpW*3{SG>;CKFYqnxBQUY z?x*DUGq1>JhwzT1cVW@)W0J--$$@a*%HLhdfv`X2?~TcUurKBB?&N^%M=3A-y*W9s z-Sr)RZ%Gb3B>ufKIj|%C-IE-6X#9ImazNgq^YTWL1DD761E6OMc;oo%@Y~O7S>Iv& z-WK5(@cXjp_fh=b9{oO!-w%m?KMlWkM8BVd-w%y`zZk#yPNCO-D}G-d{eCU@6Vvw= z{Eq2+H-5+TeE`2>`aX`|F@2xL@0h;N<9AHo*YG>0?|b;|^!+7dXAL~9oYtQv{R=TK z???t}@$aNrGYn{hRcw(k%4R|9{%eZSzjUw8nd{WXC3=Q-`I_Y2guuSHtwhdbI+Uzek=d81*~z!3&S~16(b#^g>EU!<>qs7p zvi`T%KIh{8l-r}9!!MfsL-@aAguDkV2{%r!=gUA{+m>sIMczyEMf*XUk zz1*UfK7G5EZT5hXS@E~VjVPCocVzH=u-;E&Wy4^)2-;!&{7y;Zbj0WFm_uxR(+}N8 z+uFO3HoLwV!3$D&8>0DQCPwzCZtOhg-6(_oe)+BhYne4&=ze^1$yK)J@;xE@`QNRd z*V~*J`}0vBw}Gbjp*;21D-^ezK8C{{e}p>Uk2H6~JpE|Yw9Cpu(fII`1Dg|D>v6xD z;M`ZQyQlhM4bJF8Oh53AdnnMI`vA)IkNW&FX!^uh?EKBMjR+WM`XKUh4*CI{a@f|k zXdUrMTYs&`T;TKO^bL^jWrSQ=UM$Uso6VMlINq6V#BCK^t|@Mt;M$wwE)yK~ieBcv zsp*6KA@Efxd~k}s`-0JVx--QgxGd-E89sCu@~%$t@L83}-~p$x|D}EVt2J$?AZ-n> zHqMK%1~Klm7)M2MaB2}ANT68hIz7gxS6M>c>r(vC((K|Gt{YAJop|#1j1-@royn3% z{Fy0!m$6FLEoY_hsLwEMS)00=<7J*@xpzzP<^V4w<9v7Z2FR}XN`4eF)bKLG_&mJEI?Y-=tz=>=QCR8ts+;C~%%J zrMAsaYT5=H=06GC^;7fx7wzBJ19W~0X|ww2_qTtONB@j+sk5qB%lf|HefS;6VF}T0 zg|DvHI+Evshg|b@Ls4u}Wf9i+zs8uSMaliBFTgLH8H89|{C!%Ijji@Cpao|w>I)^O zMe1Ked%@>~S1glh;xiDrPn0=xt-pvA+w<7we??h54>@G#AwLhYkn6g8^!?9FZ#iGy z3!R4j5?y8a^bt<~F{JEHD&^~2QQo#_ZaxscuUgMFq5Hwfck_dj@85jf{j=pb+zVE#K#D`2yzao5teW_ZR@w4!+3Jm_DxJm4=uL*1qEDMV=|9)M5 zV{V^Dh;N%uzag-!yna()eYjz)bIP~m_aORE{o%eXzpsW#TIKsY^1By?kY!xZ(mdSP z)8>E|aIn##Gt_Pja{9V=Za59H|6Sx+WBa>s7Ngq}+4BV$hCciEdq_{2elTP@orgP; za{*&N{k_dW{QiCGvnw(0Vbzx-CFuu`R^`X(yRkbz&bx_)0ddJ;-4iWvLPPt8AAtrR z6aCf~`dd%WhiC1&lKBUzTx5CsW0cXAr0Lv;?k9lz2VQ=P>19%EQ|la(PadpwI>6-z_HFewN5_4S%arf3`MNS)_MbwPLYzyq!PKwsZWzPdfa{|Zxnp*jw40D6G3%sui z>)}B4kdDa?fn{Zn@)+!ZwpQjjCH&SpS0TNR$B{dIP6_{EQ|--L3$2K&&XTijPe*Fb-yYloBHS5t!$^$zt5?x`WhPpO98knFJuXMMP1 ztMJH2i0N@xP2qatEpy@7pb>8^2)y98+)RgY{O>fJM8&dkM&9lT@s51)uH)?-l!v%l z*k%-~eRy+XYH2#?%6kHLz{=x7!^iWz0Kd*@)7x=E+kF5(Z19N+qb_M37XZGXcR%`< zE23R-H&ySfZ350eBW;r=lj@DELX-hPf^^Qf5cxP~48bp%a`FWmhwT5)NhfzC|AzmG zyEPh5w@2gKdwYs!*>*T`WW0Om;4ooiFD}dl5_X-X8sY-~Y+*Y4=_Ar8` zX}(-NZe}sy+Us%U8h2KVsgbbGj(U7`cE)3uuByi!u1U$v*IAD%>3wVBR@dVWFG*c% z>fuL#u(q$Q$IZ-#*kA3(!J6ZByesb6H;HWr1YLP|{C7ktEf?HYk8$c`?n}0#4FBM)dBysj>(qxJFUQmUZ9H8Pwf9mRTke2+{ax3dQ>+ixPPMO?Yf@J`s(R=uF-!8w)?=h zhY4@tS36xRFDz9h{-5*g;aQ%=G^LBzdZ^IYdCnt@XV;o<`xetJ9)tAzn7ijo^LPrW zByD;-_{KJ2JriQW9tEse#cYmA!Q2?dPUiFdv#|COUkJ0QAPUdIv0$;K0ahX=gmcKe ztq<}uM`-*BDeG;!tI^k#ORwj#mJiWsTC6K@Kn7hvnRfdwzdzq(;|jZTw}s`2>zMq``$=~zZRwcvZdj8 zjeTV(cX{*=`v@e+8B$O5+vQN#qc~%;c^5@v?8?ikGL|Pqrut;e?vw9h^8H-M17~86 z?R(1iUGT~2+<>XRb3f9FEurOkSLZngkcMm3A7Lu;bLY?C_g;iWLdgF`_=$-WiG>fw z%Q9XwV5|`GYbI*{t0Epf+TgAOUk)6{HvG#pdI<-&_51&TX7-WG_qkxwP1B1Z#_s9H z?}M2=W_FK2-ge+#3Y-8XNR4T^B|)2GfmDEuW~sT&`T z2wDue^B`PYexzub48+FmH1bf_o!AWjssD?#mhJ+rvqtM3p!Ggsor33IN2+t>>0^Tk zS%5r28hAThlY}(Gl~Oj1&-sYC7L}70QLI?CRv-LwJY9$! zl&04Ce^s0Yr%p42>KDJ5M}+dlMbH`Lur)_#nkRz~_3uZN8?9tC&>;1wLi`t*z(+gRF%jYG92 z`bNi{jiU(8_F~;(vB^}Z*anV0md}{&>O_#mQ3v9#g4}C`Jth?|W7-qunzOOuiID;EUxr3M=am;Tuad$4T36bqM~&8vpw-V9 z?<+PXF|3Qcw4twVj>=xQLO%SFm3@9gUp1R|FfP(7l_KNXR~Q#f;C!db{j9yO9vjiP z(!P3}(ReXvd}KzZeQfDIIV($gR;~0o9oyu78m9l;@raI<^6Cjj$EBcyx{YI;<+~kk z`<9rFFh>KN&c$ooKP;MyS29oE64AR-xp|V&dwDB*cQ&WjeLQ}jb;VQe0=-W)dV5;X zyJLG(dIA3Z`TNIrf!?PZy}Lp05tD~*kq3QEiT%poh?UA0qGi1Bx5O3^Kg~3LY#LKG z^=-hqU`9OAU<7bk!x{e!r#;@H;5@@|h4pXlnGyXfmFH&}{X?L?)9iIz+a>TVpxuFW za{Yu|KHj5EWAJf~u{Ts0V@YVE&d0ude#-iS`c;1KyG-!ZVM&6A8gR#C+R{+>APrnj zrs-YaQ3Ya`zjOmE`_3q7C;k>yEfqdOp{A&I^sU4xE2AvmsrMxsv-X z-t~c@EvMY@e^Y<;u?c-;BXa;9yxHrpJv}XLHbb~egEyP7+}wvJ25<~IR*=9z6F3iT zfSd%jWYJZczMF##=!l5m4|LXdB0HK_AB6dfn{-9cip&Fbpl}dg5kF|QAIq~&f*{BinhF{Jq=;7K>{%*w0Y)?9Oc@bS+x3B&>l_e0#C7UTCM`Q@Xc z;Iv-ydL(MErzKw>gS6mT=ujVnv~wO$)H>=mPSQyDa}3TI$#I-RfXdy9y8Lr1VxXPs z&OY~he`&Jt7{~(cKOF1i`B9h$UT?Y(CJ}t1yJ-j=NP3vABZX&T4f0;rniQuO{;ZG5 zN1UbmT{vG!h4tu0i>-<|62=T1dfU1DD?n>^nlE;i6JI$Ln|o!%gBNG-Y&E~8O=u5o zuAS$+%6M_h0BzSRzo$Z9r0b1WuaWxMTpV;ks>!F<3e4p*_04>pz_Y%VuebcZ?sh(h z^I!0g_g?9T^ai9onIBSfcgd`;lHYq}``?K2XkUA*odx^ZU<4R5bu)r6o2n2O}ujrrg1gZy(odW-OmW%8cd$*#4j z0Uji_x)=v4)gJOzl*zTh7cWW}e{cO7l+AaB?trb2^52a=|Nk!m^K%fwN%3DJKkbii z$N!wePF4oTMYA&AX=S|2%HSO7@hHG&SAy4D%%8wO$$a=HFYH@J(BfHCvF6 zxSYoPtCN4Q{GYJ=ey5f4#rhlbbR?g&JpW{Q;(nq0kmkmGtCD}Ve4n;_ahusb&+Gp; zFK2D?Su5vXtQ_|}AkCCZj6;0dl7F>y|7Pi$;XWU5>IcEG05w%{W>RiB;N*%dA?(L>Sd7q$iH79L!(@*PQGXP zzi;_*wy~bPXMZvdhu7B)7(L+KkNk(0KGj8OSwA*hJ^hX4btFHv`cGIM`kOV;7kuar zEF43i&c6J3UV7J*coPh`N}l|em5DRH_3&K`@V|Jrb*)#c9l|L5TSZ-LL!)1LeeFs4u7FKcH}p}#0Mo?hhx@xjcm zw%yYEnLYbAn>LrMvb3Ect^4JrxHX2mzCE^|(I04dw$6)2)^qOwO?baR{A+p-mk{1; z79m*|%Xkb&)<*9JzRU2u>FMj^_X3W$1SMbmKHlE}ju6+R&25yTXn`uAy@+ z_#a5e_!)BEd6INrLOR6Mkhb)d7}+};L+b0mFBo3w0`l#DfPYIpO;I6C^BbgjcSHSAB5QLS#=r++-jQk6 zz7F6%9{Q(|U#o%tbi~hIJoN-;UKtB(f%|-v*KzdKI1lUF(}4HS*YN(~N_`Hwwm%(t zxsF|L@y&ehr7rQgE7mL2bMih}H^Fu}E;sb8AE9EQ zWAtGi^_Efjy#VlY#Rieu^3FxS=$;G~-RPcdH`3nA-qplLUauQl`5RC#YzpFww6%6-)Qog&ev-a-z)i^=83isRXeEYT5yo} zg|y%G{Dkkvt0_q^*0;prZWVB%Z3M;sAbg{oeI6>s>B(!%TTtv-KXC5XcvgI$h!5~x zYrZEt#eR+aIp6qm8~$&xmKvBS_Dy2vHHqsKqs3hl;{|)Ns0pG+_rdKOEE(kN^RakHC3A`3e#Q0b~UJ$VZfO>d{p_(_K5wp4FEdXtJlfx=-C(w{BJ4x^)Y7 z_#i{D%xmByFV81bo@;Azyp$A#%RZrzRWn}G{bI_r9{=fUa+nJq;6*~le z4Zbx8l!rs0<>MADi1!ju?2?jz2Ob^0ijEQRp83(^QPXb7KI8Y_!#c*gmxOPXuqdM@ zH^-cW&aGluGAp5{JJAnpsgoRIa_%K%@d+^vJ2J*(9UWA>`w{+E6@RExF_*PbDPv!_ z+C{HF!MHz|GYpOU!}qW+jND{Sz9`xe-v4>r7j93&%q;yEY0EnT+J-IKFs~FgOCkj! z>?x#y^o%Ha&OxT5+D*T$=x6(Y`3KQPiw*u%f9e#z4f<=kZ5^v&-(_W2{Uz~CyyLl8 z>Uo4usP`VK<(pp>{5fsjZP8m;2gPoJ5Fb51`$?qN2mBPR?u=xSb;GM8_v0Pvr?=5o zv0gxr;4rokZTDgQ(c@`e>oJyHmwpcQ-RK8t2QuF@b`m{K<#)7Q%A}KPLiAiW>kI74 zq4fp!`&_&q?N#ZLX#5{1&9_lwIWIO;)KhqY-w(dcTmzXzkCrXYWs?j2We+Ew3~7N%_@%}cC+yS8-DY=vOA5?0f%oc zAdhzlIbclnc>d~-;#;1r-*#I^-$LuJ6^oA_7PkI_%|%dtRuzB$`cAu!wc4^-=Gsnn zr>|Xuk-_KVVdl@NKMq0WxxQH+?fQ4Dt9+e6zM|qib^yGK3a=MUZ)JUlRvhB zTL;MB<0^j-bcjdw1LUEh^00_J=>8w`1^>(y?UTS-yfTmr%1X=P?g23O6y_8# zqsrpGh1ag^e@fx4xA3{uuk?uJ@5J(FY;ieO@ALcxpEy7sKCSZbIP##!iu^wMX)V63 zjN#kt8=FK*wWiwhd1W2q{r6jW)c1~g_vAR6>8|na4G3C}LT;Zt04<+YwCsTv-982R zpnm=U-~NL7_ERlo<=2ad_u}&_@|Ts-8&4e|4_{Pycn*2c{!Oy1=!{|3tMVSpO3R1V zX+~y@kLi~VkdLQTK3+yX+Nme>dDHdsnFHWGtMGoeT|D^HX}m8V0Piab@AuopqpzOE zd*J|hUsZVD1)lD=vR-hkv;wa+U3Xgj^897YcjEeJe(eDHe^KTCd&vJi%3jHKz1f$N zZEwQTV{8YTeKe_q=>sV?R1hoZh5M#x_oy$mf26h)%-Sdih910{ZVa0=XL8`qx3N_-?%FA7RCcitNj3Yt>@NFIyuj8 z|E8~l`EBMtk0S5Vuf<-Ayo^=HmD+NZ3n7=cc2+kkb#Cj6KFB@3HOtEl#O|su?-rLY z4fM;MGM9@RJ>^ScuaIM1@|)e0D2Oey)XFd>h;T{GLK7W7nW!9^Z0hq zcPrJR_n=3RQ0!UTE@Mr#*ivePnZTmz;q3wpoLQt4v!m%ydVzLe0sXofUz)>a?u z5qpg?my-V;=fz5JB;X^F#`#)Pu`LI`7{n7yA`;4cJt)!craw(U#$7o`yz^5fLmrGG z*M}VNRXmSCi)5kin-(>-m5Y8VtY>v^^}UxvTY}7EB|~kb!gdK|PX;cRz9_7SeC2W} zHxV~$yBeOd# z=Zwt%L}qO93^I%uQIj$zpH9Qw1`Fd;)3ezOw~m{f$))AX;sLycGYFGZSj=KmpEKEv zc{DUY1~Adk5U-}^9v;HnT}HSiVWqdt%2`4ggW(G*Z zr0T)>x$#W)VX~)C$mSNN<{_YYtnL|y`|i2Zg+i%Z+^BDrizn)s0Vu-VYX5GgCBgZH z3B(S;_7|sH?iA893*xSD!Jf{IEl#q3XzF&UuUbPN4PD4hv}2_{(7L%sKB-P%z&*Q_ z4SMYB69gq#tyE1P3JLl-IkHC&AQTa%gr;Xy^c8TZ)PKHmFPJoSDnFGj^beva!TXaV z`ahV5->G4g1^y2Vos|E3<^SP9S!O9j=+^q1-+XAdTs68vhDgyb%K7}|u047i5psG+ODXxXN@u|X6dOnNVkca-#*M%wZ;!q0G4Do7+ z`L_JZ8r(H1LduG#>Tu{QO#CI`v_#>QujPp-${wdDy;ru?%Kg0P0 zoUh^hAe}OMGPkBZ9M( z#T%8*?OCqF7qC=b>nU>2B6vYu@Zzuh`|m9N!N}9k{L}M;*X`$?{g3JYJoZ&M2VBMUas0B`(kp0t2#r+ zkn@@O9H;YWy5xy*pSZdXLt**u?fCzZz;|bIxw$cf>Xz?c$X7rv3ayz<8X@;`G{1r>9h2-MMf)&n$G|JlwU6MQ+wnP9#(sA;X76nz?TfZHq9pT z4&50JcllM&A*A6!UBQEC4*A~V6Z6)|TVMJ|q)>0Mp7LNC|65n#j(O{?8$Rnmleh^W*{b{ahNy8@B zpXO*w8fq$ke%{xThT7QwovTHfRowTrBKn8dEa)4ap4T^w;`Xaz{ah*6V@vt|!a#pd zX=CH#ko;t_FEuhSG(0@i-z$E4fAr7PNqzO`vC^xD6F<1UcJ>%#ngzkbW;1_};(V4D z)-js6ehjq>Vt>3}-=>QH8=P;e8x-@=MDLp_-H^IXZ^^{};e1=)!2i)i^36l|e*@+K zd00fXVWwkJz zLk>KJ(WMlIeuMw{K7>?JJPKEL-dWdo1Z|?~>pLl?K@yW@(A?pDb{O;_b2p-Y;{PG| z7bg-0juJ33!T?HdPFRq6#-l8^FKl_9cv2>ij~AvEvk!{JK?y@^ds5P$I;kXwQgTR0 z$r~bPGMhnCQj(9nzm}9}%_2GiuXris1*L>M=yd6~Q>N^^gfi0-!#24#lCroa>()O5 zL6&gjx-}^IBkLyXmVJySMs?jv>HDn1|Db=U|4i3u?zY2Ob}2h0jYIufjXes@&*r=I zD)knErekNBYZLb`<WYv!q6Uo6p zMlwc}Q^UTrO;l8kHP{zS6E*FTW~6bk3yuvJxvmd|;34o3+LtEEa)^Aev9h&QM&Q%> z&PF2^vP&k9HY59rFDg${TAd~R^^SwU_xX{o7|zuaX9`uD!9A`R&if?}F<6=7;e^Nr zmW5%a88NUhnU`(UwtOIwB{1bcxkjPPHEPwED2^I@El{9#J5+;Ra!qrC56MSVRJk4q z(SIL6`TP(1!b_RCSTz*Je|7ll4F@$J03}Ovi!`9pIo#F^!dcD+j!M^HNIRJX?)4HE z3KuINcCnHA_8d&AG21MM1l~Zre45L|5Kqle61}x@Y4#fxid=ZNP?I|z`5KbQ^~!~J zQy`vC7^CAkO6`Lh4-H5ITOH}Lvl(i5+g|HGI1ntIABB{x;bf`R_p3#S3bpRoKI^v) z7@a}~;)NhY5yr{TbpV+OX}RtITE&kDmNsf*GIG8JX)fF3YKWdZ4z%@P#GTDm?1*E4 ztjjhr9elm$$IK%*V=IvzEy>4%5JlKUi^Rx?u2un7Ax~QKVy4Yvp>-Lbn;Q~I_8Ud* zP`=F;$^oR*QGSoxh+~YrfLL$in0<K(u*T#V_oF_Pv3;?~-T+vzZSqbVUYh#c zv{c;Dghe$OudVaUJOOCG7=RY9rE}Hg;|dLd;2Y%@!7vPMkBhE0{9_VnVu!Q00L!Cp zp%ZJB)B$R8NKc5P&pQM0;&E~?L?Z75-dz$eQ{CC5fFPJEW6{b!U)@J$RIa-EwI^Jt znM+p;_ii_?kIhl(b#eI~7j8V%5S^Ap+1_iR%IGwrs?=@ajY_3U2i#}yL_etr-(+7= zM%UO5{nj0T=3`}aw2)pI?RPy2jg3(J-b2b^zpDWay=ru*8687LyELVA0Bz&w-S$eV zfMpLYn~hEey*+*EqOQ+Fd?=UiL?1Jx_rU4Leh-Ts+DZ}IlwipV4L0$la?pV}5Q-U3 zHsNlm4!@P)KG2y8#H2bO+m|Gld;~`=PZ##!<*|K)N5zJZRUqA*L4+R^YswVNR=$pI zCozT%Ml8MQl9>^SflZSd=(5|g>MOR$`pkuSG8EHST#+$d<#kG7){2dIrs&1*hQx%WXwgUq)$j{9;hKCQ+Z`A77m;l1Eri6h|>~hrdGSSgLx~V$j0E1 zTJ;G>RGD`neliTvCmN9v9lhTB0}v5ABOXsf%8r(+(EvQ|@9tx1WNC5P%F-c-K9)vC zOoh-$`5cpo+5FsebA^kJFyK_Yc?*}-_?)6etS?)raZVIbCw!t1 zz21gs2U?BK2jcmd7#+_sCi!KFw^&^%y+?D+RatI})paPOFy$1T#*q5OdDurJjf^gg zSmLvA#HzpvBfbUI<#$mKnBx=WinIl2OMDy+>>BAk8iF^_f29ytLJ;HmmbmKTszl6G z8IuyDA=US`35+f`A*~w6mc?K^KTD${hKyY90%A!c2F>Bb#C3TtmR-0RL?nsD<5bA3 z73Wdc46--VV1q?%mt1|K3jtVu(mIK@9)K3JZiLJ=d<=Z7NHp00(_3L)gOJ#qAIFM7CI35cBI94*!*iAVSD_prsRk;~GdW1o(4#&p!iU$Zc^$g~g{U2Yt; z@u@IGKam~9{9+hpO!;xu#$PAq%DV7kPHz>b${W}w+!mea6gpbuFIi|)*t>6|+zJ>~ zZd|>Or!Bl}tx;K{pDc!vox*mFv3|qCmY%s1)n;x~T3y!tXDqx0xy_3Cyan3k=+V*g zKdX?`%CCS01O~WGG{=biIfW+tsU-{5-tBV3H-pt#OTd?H+*aYSIC=nFhpzjIjTsv>k^6LgqmR@V48JU+u zA*FXO#?9X_c&&P`1K6(l@RubvwyoVMFG5~Xn6{8crqgBX{iek7_7_vl%9v7t@o*h| z_HSui`p|T)J~|M8TOz9YLc36HBBRz3SAG1pLfo!2$_$#?yg)88RtR;B;P4Vo1b;FW zrGT@JmFlbeM6(I%C=$agc}P_(#fXO#(vr~6_oP9(qBwsj%ZM1wq7a>P4tf}G4V>F5 zBcgI_zJ=%kuIOUGEaGrQ|LT4-RAlK6(P^BmX2>@SDfUW!mxK>XEVSyotwcpHrx5E6 zS6VOz9jKB>u}2avjmi*{M1nqTE~e-dh4eY;$;r@x3a91|LlRXQ20~^qWJq1acxYa- z6qybe0^=eQA?8RRq_<3OREEn$+_Xj^z7BPuFe0NssWxgW@${zyS?mKx!tt`%6; Gj{gV3pD!%{ literal 0 HcmV?d00001 diff --git a/colorchord2/windows/64/WinMM.Lib b/colorchord2/windows/64/WinMM.Lib new file mode 100644 index 0000000000000000000000000000000000000000..0c66d272f8ee8561531c9ee7aaaf19fd18731952 GIT binary patch literal 42736 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 literal 0 HcmV?d00001 diff --git a/colorchord2/windows/compile.bat b/colorchord2/windows/compile.bat new file mode 100644 index 0000000..32f1031 --- /dev/null +++ b/colorchord2/windows/compile.bat @@ -0,0 +1,8 @@ +@echo off +echo Unzip https://download.savannah.gnu.org/releases/tinycc/tcc-0.9.26-win64-bin.zip to C:\tcc +set CFLAGS=-v -DHIDAPI -DWINDOWS -DWIN32 -DTCC -DRUNTIME_SYMNUM -Os -Itccinc -DINCLUDING_EMBEDDED -I.. -I. -I../../embeddedcommon -rdynamic -g +set LDFLAGS=-lkernel32 -lgdi32 -luser32 -lsetupapi -ldbghelp -ltcc1 -lwinmm -lws2_32 +set SOURCES=..\chash.c ..\color.c ..\configs.c ..\decompose.c ..\dft.c ..\DisplayNetwork.c ..\DisplayArray.c ..\DisplayHIDAPI.c ..\DisplayOUTDriver.c ..\DisplayPie.c ..\DrawFunctions.c ..\filter.c ..\hidapi.c ..\hook.c ..\main.c ..\os_generic.c ..\outdrivers.c ..\OutputCells.c ..\OutputLinear.c ..\OutputProminent.c ..\OutputVoronoi.c ..\parameters.c ..\sound.c ..\sound_win.c ..\sound_null.c ..\util.c ..\WinDriver.c ..\notefinder.c ..\..\embeddedcommon\DFT32.c tcc_stubs.c symbol_enumerator.c +set ARCH_SPECIFIC=-L32 +@echo on +C:\tcc\tcc %CFLAGS% %ARCH_SPECIFIC% %SOURCES% %LDFLAGS% -o ..\colorchord.exe \ No newline at end of file diff --git a/colorchord2/windows/math.h b/colorchord2/windows/math.h new file mode 100644 index 0000000..cd5ee3d --- /dev/null +++ b/colorchord2/windows/math.h @@ -0,0 +1,926 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within this package. + */ +#ifndef _MATH_H_ +#define _MATH_H_ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + +#include <_mingw.h> + +struct exception; + +#pragma pack(push,_CRT_PACKING) + +#define _DOMAIN 1 +#define _SING 2 +#define _OVERFLOW 3 +#define _UNDERFLOW 4 +#define _TLOSS 5 +#define _PLOSS 6 + +#ifndef __STRICT_ANSI__ +#ifndef NO_OLDNAMES +#define DOMAIN _DOMAIN +#define SING _SING +#define OVERFLOW _OVERFLOW +#define UNDERFLOW _UNDERFLOW +#define TLOSS _TLOSS +#define PLOSS _PLOSS +#endif +#endif + +#ifndef __STRICT_ANSI__ +#define M_E 2.71828182845904523536 +#define M_LOG2E 1.44269504088896340736 +#define M_LOG10E 0.434294481903251827651 +#define M_LN2 0.693147180559945309417 +#define M_LN10 2.30258509299404568402 +#define M_PI 3.14159265358979323846 +#define M_PI_2 1.57079632679489661923 +#define M_PI_4 0.785398163397448309616 +#define M_1_PI 0.318309886183790671538 +#define M_2_PI 0.636619772367581343076 +#define M_2_SQRTPI 1.12837916709551257390 +#define M_SQRT2 1.41421356237309504880 +#define M_SQRT1_2 0.707106781186547524401 +#endif + +#ifndef __STRICT_ANSI__ +/* See also float.h */ +#ifndef __MINGW_FPCLASS_DEFINED +#define __MINGW_FPCLASS_DEFINED 1 +#define _FPCLASS_SNAN 0x0001 /* Signaling "Not a Number" */ +#define _FPCLASS_QNAN 0x0002 /* Quiet "Not a Number" */ +#define _FPCLASS_NINF 0x0004 /* Negative Infinity */ +#define _FPCLASS_NN 0x0008 /* Negative Normal */ +#define _FPCLASS_ND 0x0010 /* Negative Denormal */ +#define _FPCLASS_NZ 0x0020 /* Negative Zero */ +#define _FPCLASS_PZ 0x0040 /* Positive Zero */ +#define _FPCLASS_PD 0x0080 /* Positive Denormal */ +#define _FPCLASS_PN 0x0100 /* Positive Normal */ +#define _FPCLASS_PINF 0x0200 /* Positive Infinity */ +#endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _EXCEPTION_DEFINED +#define _EXCEPTION_DEFINED + struct _exception { + int type; + char *name; + double arg1; + double arg2; + double retval; + }; +#endif + +#ifndef _COMPLEX_DEFINED +#define _COMPLEX_DEFINED + struct _complex { + double x,y; + }; +#endif + +#define EDOM 33 +#define ERANGE 34 + +#ifndef _HUGE +#ifdef _MSVCRT_ + extern double *_HUGE; +#else + extern double *_imp___HUGE; +#define _HUGE (*_imp___HUGE) +#endif +#endif + +#define HUGE_VAL _HUGE + +#ifndef _CRT_ABS_DEFINED +#define _CRT_ABS_DEFINED + int __cdecl abs(int _X); + long __cdecl labs(long _X); +#endif + double __cdecl acos(double _X); + double __cdecl asin(double _X); + double __cdecl atan(double _X); + double __cdecl atan2(double _Y,double _X); +#ifndef _SIGN_DEFINED +#define _SIGN_DEFINED + _CRTIMP double __cdecl _copysign (double _Number,double _Sign); + _CRTIMP double __cdecl _chgsign (double _X); +#endif + double __cdecl cos(double _X); + double __cdecl cosh(double _X); + double __cdecl exp(double _X); + double __cdecl expm1(double _X); + double __cdecl fabs(double _X); + double __cdecl fmod(double _X,double _Y); + double __cdecl log(double _X); + double __cdecl log10(double _X); + double __cdecl pow(double _X,double _Y); + double __cdecl sin(double _X); + double __cdecl sinh(double _X); + double __cdecl tan(double _X); + double __cdecl tanh(double _X); + double __cdecl sqrt(double _X); +#ifndef _CRT_ATOF_DEFINED +#define _CRT_ATOF_DEFINED + double __cdecl atof(const char *_String); + double __cdecl _atof_l(const char *_String,_locale_t _Locale); +#endif + + _CRTIMP double __cdecl _cabs(struct _complex _ComplexA); + double __cdecl ceil(double _X); + double __cdecl floor(double _X); + double __cdecl frexp(double _X,int *_Y); + double __cdecl _hypot(double _X,double _Y); + _CRTIMP double __cdecl _j0(double _X); + _CRTIMP double __cdecl _j1(double _X); + _CRTIMP double __cdecl _jn(int _X,double _Y); + double __cdecl ldexp(double _X,int _Y); +#ifndef _CRT_MATHERR_DEFINED +#define _CRT_MATHERR_DEFINED + int __cdecl _matherr(struct _exception *_Except); +#endif + double __cdecl modf(double _X,double *_Y); + _CRTIMP double __cdecl _y0(double _X); + _CRTIMP double __cdecl _y1(double _X); + _CRTIMP double __cdecl _yn(int _X,double _Y); + +#if(defined(_X86_) && !defined(__x86_64)) + _CRTIMP int __cdecl _set_SSE2_enable(int _Flag); + /* from libmingwex */ + float __cdecl _hypotf(float _X,float _Y); +#endif + + float frexpf(float _X,int *_Y); + float __cdecl ldexpf(float _X,int _Y); + long double __cdecl ldexpl(long double _X,int _Y); + float __cdecl acosf(float _X); + float __cdecl asinf(float _X); + float __cdecl atanf(float _X); + float __cdecl atan2f(float _X,float _Y); + float __cdecl cosf(float _X); + float __cdecl sinf(float _X); + float __cdecl tanf(float _X); + float __cdecl coshf(float _X); + float __cdecl sinhf(float _X); + float __cdecl tanhf(float _X); + float __cdecl expf(float _X); + float __cdecl expm1f(float _X); + float __cdecl logf(float _X); + float __cdecl log10f(float _X); + float __cdecl modff(float _X,float *_Y); + float __cdecl powf(float _X,float _Y); + float __cdecl sqrtf(float _X); + float __cdecl ceilf(float _X); + float __cdecl floorf(float _X); + float __cdecl fmodf(float _X,float _Y); + float __cdecl _hypotf(float _X,float _Y); + float __cdecl fabsf(float _X); +#if !defined(__ia64__) + /* from libmingwex */ + float __cdecl _copysignf (float _Number,float _Sign); + float __cdecl _chgsignf (float _X); + float __cdecl _logbf(float _X); + float __cdecl _nextafterf(float _X,float _Y); + int __cdecl _finitef(float _X); + int __cdecl _isnanf(float _X); + int __cdecl _fpclassf(float _X); +#endif + +#ifndef __cplusplus + __CRT_INLINE long double __cdecl fabsl (long double x) + { + long double res; + __asm__ ("fabs;" : "=t" (res) : "0" (x)); + return res; + } +#define _hypotl(x,y) ((long double)_hypot((double)(x),(double)(y))) +#define _matherrl _matherr + __CRT_INLINE long double _chgsignl(long double _Number) { return _chgsign((double)(_Number)); } + __CRT_INLINE long double _copysignl(long double _Number,long double _Sign) { return _copysign((double)(_Number),(double)(_Sign)); } + __CRT_INLINE float frexpf(float _X,int *_Y) { return ((float)frexp((double)_X,_Y)); } + +#if !defined (__ia64__) + __CRT_INLINE float __cdecl fabsf (float x) + { + return fabs(x); + } + + __CRT_INLINE float __cdecl ldexpf (float x, int expn) { return (float) ldexp (x, expn); } +#endif +#else + // cplusplus + __CRT_INLINE long double __cdecl fabsl (long double x) + { + long double res; + __asm__ ("fabs;" : "=t" (res) : "0" (x)); + return res; + } + __CRT_INLINE long double modfl(long double _X,long double *_Y) { + double _Di,_Df = modf((double)_X,&_Di); + *_Y = (long double)_Di; + return (_Df); + } + __CRT_INLINE long double _chgsignl(long double _Number) { return _chgsign(static_cast(_Number)); } + __CRT_INLINE long double _copysignl(long double _Number,long double _Sign) { return _copysign(static_cast(_Number),static_cast(_Sign)); } + __CRT_INLINE float frexpf(float _X,int *_Y) { return ((float)frexp((double)_X,_Y)); } +#ifndef __ia64__ + __CRT_INLINE float __cdecl fabsf (float x) + { + float res; + __asm__ ("fabs;" : "=t" (res) : "0" (x)); + return res; + } + __CRT_INLINE float __cdecl ldexpf (float x, int expn) { return (float) ldexp (x, expn); } +#ifndef __x86_64 + __CRT_INLINE float acosf(float _X) { return ((float)acos((double)_X)); } + __CRT_INLINE float asinf(float _X) { return ((float)asin((double)_X)); } + __CRT_INLINE float atanf(float _X) { return ((float)atan((double)_X)); } + __CRT_INLINE float atan2f(float _X,float _Y) { return ((float)atan2((double)_X,(double)_Y)); } + __CRT_INLINE float ceilf(float _X) { return ((float)ceil((double)_X)); } + __CRT_INLINE float cosf(float _X) { return ((float)cos((double)_X)); } + __CRT_INLINE float coshf(float _X) { return ((float)cosh((double)_X)); } + __CRT_INLINE float expf(float _X) { return ((float)exp((double)_X)); } + __CRT_INLINE float floorf(float _X) { return ((float)floor((double)_X)); } + __CRT_INLINE float fmodf(float _X,float _Y) { return ((float)fmod((double)_X,(double)_Y)); } + __CRT_INLINE float logf(float _X) { return ((float)log((double)_X)); } + __CRT_INLINE float log10f(float _X) { return ((float)log10((double)_X)); } + __CRT_INLINE float modff(float _X,float *_Y) { + double _Di,_Df = modf((double)_X,&_Di); + *_Y = (float)_Di; + return ((float)_Df); + } + __CRT_INLINE float powf(float _X,float _Y) { return ((float)pow((double)_X,(double)_Y)); } + __CRT_INLINE float sinf(float _X) { return ((float)sin((double)_X)); } + __CRT_INLINE float sinhf(float _X) { return ((float)sinh((double)_X)); } + __CRT_INLINE float sqrtf(float _X) { return ((float)sqrt((double)_X)); } + __CRT_INLINE float tanf(float _X) { return ((float)tan((double)_X)); } + __CRT_INLINE float tanhf(float _X) { return ((float)tanh((double)_X)); } +#endif +#endif +#endif + +#ifndef NO_OLDNAMES +#define matherr _matherr + +#define HUGE _HUGE + /* double __cdecl cabs(struct _complex _X); */ + double __cdecl hypot(double _X,double _Y); + _CRTIMP double __cdecl j0(double _X); + _CRTIMP double __cdecl j1(double _X); + _CRTIMP double __cdecl jn(int _X,double _Y); + _CRTIMP double __cdecl y0(double _X); + _CRTIMP double __cdecl y1(double _X); + _CRTIMP double __cdecl yn(int _X,double _Y); +#endif + +#ifndef __NO_ISOCEXT +#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) \ + || !defined __STRICT_ANSI__ || defined __GLIBCPP__ + +#define NAN (0.0F/0.0F) +#define HUGE_VALF (1.0F/0.0F) +#define HUGE_VALL (1.0L/0.0L) +#define INFINITY (1.0F/0.0F) + + +#define FP_NAN 0x0100 +#define FP_NORMAL 0x0400 +#define FP_INFINITE (FP_NAN | FP_NORMAL) +#define FP_ZERO 0x4000 +#define FP_SUBNORMAL (FP_NORMAL | FP_ZERO) + /* 0x0200 is signbit mask */ + + + /* + We can't __CRT_INLINE float or double, because we want to ensure truncation + to semantic type before classification. + (A normal long double value might become subnormal when + converted to double, and zero when converted to float.) + */ + + extern int __cdecl __fpclassifyf (float); + extern int __cdecl __fpclassify (double); + extern int __cdecl __fpclassifyl (long double); + +/* Implemented at tcc/tcc_libm.h */ +#define fpclassify(x) (sizeof (x) == sizeof (float) ? __fpclassifyf (x) \ + : sizeof (x) == sizeof (double) ? __fpclassify (x) \ + : __fpclassifyl (x)) + + /* 7.12.3.2 */ +#define isfinite(x) ((fpclassify(x) & FP_NAN) == 0) + + /* 7.12.3.3 */ +#define isinf(x) (fpclassify(x) == FP_INFINITE) + + /* 7.12.3.4 */ + /* We don't need to worry about trucation here: + A NaN stays a NaN. */ +#define isnan(x) (fpclassify(x) == FP_NAN) + + /* 7.12.3.5 */ +#define isnormal(x) (fpclassify(x) == FP_NORMAL) + + /* 7.12.3.6 The signbit macro */ + + extern int __cdecl __signbitf (float); + extern int __cdecl __signbit (double); + extern int __cdecl __signbitl (long double); + +/* Implemented at tcc/tcc_libm.h */ +#define signbit(x) (sizeof (x) == sizeof (float) ? __signbitf (x) \ + : sizeof (x) == sizeof (double) ? __signbit (x) \ + : __signbitl (x)) + + extern double __cdecl exp2(double); + extern float __cdecl exp2f(float); + extern long double __cdecl exp2l(long double); + +#define FP_ILOGB0 ((int)0x80000000) +#define FP_ILOGBNAN ((int)0x80000000) + extern int __cdecl ilogb (double); + extern int __cdecl ilogbf (float); + extern int __cdecl ilogbl (long double); + + extern double __cdecl log1p(double); + extern float __cdecl log1pf(float); + extern long double __cdecl log1pl(long double); + + extern double __cdecl log2 (double); + extern float __cdecl log2f (float); + extern long double __cdecl log2l (long double); + + extern double __cdecl logb (double); + extern float __cdecl logbf (float); + extern long double __cdecl logbl (long double); + + __CRT_INLINE double __cdecl logb (double x) + { + double res; + __asm__ ("fxtract\n\t" + "fstp %%st" : "=t" (res) : "0" (x)); + return res; + } + + __CRT_INLINE float __cdecl logbf (float x) + { + float res; + __asm__ ("fxtract\n\t" + "fstp %%st" : "=t" (res) : "0" (x)); + return res; + } + + __CRT_INLINE long double __cdecl logbl (long double x) + { + long double res; + __asm__ ("fxtract\n\t" + "fstp %%st" : "=t" (res) : "0" (x)); + return res; + } + + extern long double __cdecl modfl (long double, long double*); + + /* 7.12.6.13 */ + extern double __cdecl scalbn (double, int); + extern float __cdecl scalbnf (float, int); + extern long double __cdecl scalbnl (long double, int); + + extern double __cdecl scalbln (double, long); + extern float __cdecl scalblnf (float, long); + extern long double __cdecl scalblnl (long double, long); + + /* 7.12.7.1 */ + /* Implementations adapted from Cephes versions */ + extern double __cdecl cbrt (double); + extern float __cdecl cbrtf (float); + extern long double __cdecl cbrtl (long double); + + __CRT_INLINE float __cdecl hypotf (float x, float y) + { return (float) hypot (x, y);} + extern long double __cdecl hypotl (long double, long double); + + extern long double __cdecl powl (long double, long double); + extern long double __cdecl expl(long double); + extern long double __cdecl expm1l(long double); + extern long double __cdecl coshl(long double); + extern long double __cdecl fabsl (long double); + extern long double __cdecl acosl(long double); + extern long double __cdecl asinl(long double); + extern long double __cdecl atanl(long double); + extern long double __cdecl atan2l(long double,long double); + extern long double __cdecl sinhl(long double); + extern long double __cdecl tanhl(long double); + + /* 7.12.8.1 The erf functions */ + extern double __cdecl erf (double); + extern float __cdecl erff (float); + /* TODO + extern long double __cdecl erfl (long double); + */ + + /* 7.12.8.2 The erfc functions */ + extern double __cdecl erfc (double); + extern float __cdecl erfcf (float); + /* TODO + extern long double __cdecl erfcl (long double); + */ + + /* 7.12.8.3 The lgamma functions */ + extern double __cdecl lgamma (double); + extern float __cdecl lgammaf (float); + extern long double __cdecl lgammal (long double); + + /* 7.12.8.4 The tgamma functions */ + extern double __cdecl tgamma (double); + extern float __cdecl tgammaf (float); + extern long double __cdecl tgammal (long double); + + extern long double __cdecl ceill (long double); + extern long double __cdecl floorl (long double); + extern long double __cdecl frexpl(long double,int *); + extern long double __cdecl log10l(long double); + extern long double __cdecl logl(long double); + extern long double __cdecl cosl(long double); + extern long double __cdecl sinl(long double); + extern long double __cdecl tanl(long double); + extern long double sqrtl(long double); + + /* 7.12.9.3 */ + extern double __cdecl nearbyint ( double); + extern float __cdecl nearbyintf (float); + extern long double __cdecl nearbyintl (long double); + + /* 7.12.9.4 */ + /* round, using fpu control word settings */ + __CRT_INLINE double __cdecl rint (double x) + { + double retval; + __asm__ ( + "fldl %1\n" + "frndint \n" + "fstl %0\n" : "=m" (retval) : "m" (x)); + return retval; + } + + __CRT_INLINE float __cdecl rintf (float x) + { + float retval; + __asm__ ( + "flds %1\n" + "frndint \n" + "fsts %0\n" : "=m" (retval) : "m" (x)); + return retval; + } + + __CRT_INLINE long double __cdecl rintl (long double x) + { + long double retval; + __asm__ ( + "fldt %1\n" + "frndint \n" + "fstt %0\n" : "=m" (retval) : "m" (x)); + return retval; + } + + /* 7.12.9.5 */ + __CRT_INLINE long __cdecl lrint (double x) + { + long retval; + __asm__ __volatile__ \ + ("fldl %1\n" \ + "fistpl %0" : "=m" (retval) : "m" (x)); \ + return retval; + } + + __CRT_INLINE long __cdecl lrintf (float x) + { + long retval; + __asm__ __volatile__ \ + ("flds %1\n" \ + "fistpl %0" : "=m" (retval) : "m" (x)); \ + return retval; + } + + __CRT_INLINE long __cdecl lrintl (long double x) + { + long retval; + __asm__ __volatile__ \ + ("fldt %1\n" \ + "fistpl %0" : "=m" (retval) : "m" (x)); \ + return retval; + } + + __CRT_INLINE long long __cdecl llrint (double x) + { + long long retval; + __asm__ __volatile__ \ + ("fldl %1\n" \ + "fistpll %0" : "=m" (retval) : "m" (x)); \ + return retval; + } + + __CRT_INLINE long long __cdecl llrintf (float x) + { + long long retval; + __asm__ __volatile__ \ + ("flds %1\n" \ + "fistpll %0" : "=m" (retval) : "m" (x)); \ + return retval; + } + + __CRT_INLINE long long __cdecl llrintl (long double x) + { + long long retval; + __asm__ __volatile__ \ + ("fldt %1\n" \ + "fistpll %0" : "=m" (retval) : "m" (x)); \ + return retval; + } + + #define FE_TONEAREST 0x0000 + #define FE_DOWNWARD 0x0400 + #define FE_UPWARD 0x0800 + #define FE_TOWARDZERO 0x0c00 + + __CRT_INLINE double trunc (double _x) + { + double retval; + unsigned short saved_cw; + unsigned short tmp_cw; + __asm__ ("fnstcw %0;" : "=m" (saved_cw)); /* save FPU control word */ + tmp_cw = (saved_cw & ~(FE_TONEAREST | FE_DOWNWARD | FE_UPWARD | FE_TOWARDZERO)) + | FE_TOWARDZERO; + __asm__ ("fldcw %0;" : : "m" (tmp_cw)); + __asm__ ("fldl %1;" + "frndint;" + "fstl %0;" : "=m" (retval) : "m" (_x)); /* round towards zero */ + __asm__ ("fldcw %0;" : : "m" (saved_cw) ); /* restore saved control word */ + return retval; + } + + /* 7.12.9.6 */ + /* round away from zero, regardless of fpu control word settings */ + extern double __cdecl round (double); + extern float __cdecl roundf (float); + extern long double __cdecl roundl (long double); + + /* 7.12.9.7 */ + extern long __cdecl lround (double); + extern long __cdecl lroundf (float); + extern long __cdecl lroundl (long double); + + extern long long __cdecl llround (double); + extern long long __cdecl llroundf (float); + extern long long __cdecl llroundl (long double); + + /* 7.12.9.8 */ + /* round towards zero, regardless of fpu control word settings */ + extern double __cdecl trunc (double); + extern float __cdecl truncf (float); + extern long double __cdecl truncl (long double); + + extern long double __cdecl fmodl (long double, long double); + + /* 7.12.10.2 */ + extern double __cdecl remainder (double, double); + extern float __cdecl remainderf (float, float); + extern long double __cdecl remainderl (long double, long double); + + /* 7.12.10.3 */ + extern double __cdecl remquo(double, double, int *); + extern float __cdecl remquof(float, float, int *); + extern long double __cdecl remquol(long double, long double, int *); + + /* 7.12.11.1 */ + extern double __cdecl copysign (double, double); /* in libmoldname.a */ + extern float __cdecl copysignf (float, float); + extern long double __cdecl copysignl (long double, long double); + + /* 7.12.11.2 Return a NaN */ + extern double __cdecl nan(const char *tagp); + extern float __cdecl nanf(const char *tagp); + extern long double __cdecl nanl(const char *tagp); + +#ifndef __STRICT_ANSI__ +#define _nan() nan("") +#define _nanf() nanf("") +#define _nanl() nanl("") +#endif + + /* 7.12.11.3 */ + extern double __cdecl nextafter (double, double); /* in libmoldname.a */ + extern float __cdecl nextafterf (float, float); + extern long double __cdecl nextafterl (long double, long double); + + /* 7.12.11.4 The nexttoward functions: TODO */ + + /* 7.12.12.1 */ + /* x > y ? (x - y) : 0.0 */ + extern double __cdecl fdim (double x, double y); + extern float __cdecl fdimf (float x, float y); + extern long double __cdecl fdiml (long double x, long double y); + + /* fmax and fmin. + NaN arguments are treated as missing data: if one argument is a NaN + and the other numeric, then these functions choose the numeric + value. */ + + /* 7.12.12.2 */ + extern double __cdecl fmax (double, double); + extern float __cdecl fmaxf (float, float); + extern long double __cdecl fmaxl (long double, long double); + + /* 7.12.12.3 */ + extern double __cdecl fmin (double, double); + extern float __cdecl fminf (float, float); + extern long double __cdecl fminl (long double, long double); + + /* 7.12.13.1 */ + /* return x * y + z as a ternary op */ + extern double __cdecl fma (double, double, double); + extern float __cdecl fmaf (float, float, float); + extern long double __cdecl fmal (long double, long double, long double); + + +#if 0 // gr: duplicate, see below + /* 7.12.14 */ + /* + * With these functions, comparisons involving quiet NaNs set the FP + * condition code to "unordered". The IEEE floating-point spec + * dictates that the result of floating-point comparisons should be + * false whenever a NaN is involved, with the exception of the != op, + * which always returns true: yes, (NaN != NaN) is true). + */ + +#if __GNUC__ >= 3 + +#define isgreater(x, y) __builtin_isgreater(x, y) +#define isgreaterequal(x, y) __builtin_isgreaterequal(x, y) +#define isless(x, y) __builtin_isless(x, y) +#define islessequal(x, y) __builtin_islessequal(x, y) +#define islessgreater(x, y) __builtin_islessgreater(x, y) +#define isunordered(x, y) __builtin_isunordered(x, y) + +#else + /* helper */ + __CRT_INLINE int __cdecl + __fp_unordered_compare (long double x, long double y){ + unsigned short retval; + __asm__ ("fucom %%st(1);" + "fnstsw;": "=a" (retval) : "t" (x), "u" (y)); + return retval; + } + +#define isgreater(x, y) ((__fp_unordered_compare(x, y) \ + & 0x4500) == 0) +#define isless(x, y) ((__fp_unordered_compare (y, x) \ + & 0x4500) == 0) +#define isgreaterequal(x, y) ((__fp_unordered_compare (x, y) \ + & FP_INFINITE) == 0) +#define islessequal(x, y) ((__fp_unordered_compare(y, x) \ + & FP_INFINITE) == 0) +#define islessgreater(x, y) ((__fp_unordered_compare(x, y) \ + & FP_SUBNORMAL) == 0) +#define isunordered(x, y) ((__fp_unordered_compare(x, y) \ + & 0x4500) == 0x4500) + +#endif +#endif //0 + + +#endif /* __STDC_VERSION__ >= 199901L */ +#endif /* __NO_ISOCEXT */ + +#ifdef __cplusplus +} +extern "C++" { + template inline _Ty _Pow_int(_Ty _X,int _Y) { + unsigned int _N; + if(_Y >= 0) _N = (unsigned int)_Y; + else _N = (unsigned int)(-_Y); + for(_Ty _Z = _Ty(1);;_X *= _X) { + if((_N & 1)!=0) _Z *= _X; + if((_N >>= 1)==0) return (_Y < 0 ? _Ty(1) / _Z : _Z); + } + } +} +#endif + +#pragma pack(pop) + +/* 7.12.14 */ +/* + * With these functions, comparisons involving quiet NaNs set the FP + * condition code to "unordered". The IEEE floating-point spec + * dictates that the result of floating-point comparisons should be + * false whenever a NaN is involved, with the exception of the != op, + * which always returns true: yes, (NaN != NaN) is true). + */ + +/* Mini libm (inline __fpclassify*, __signbit* and variants) */ + +/* TCC uses 8 bytes for double and long double, so effectively the l variants + * are never used. For now, they just run the normal (double) variant. + */ + +/* + * most of the code in this file is taken from MUSL rs-1.0 (MIT license) + * - musl-libc: http://git.musl-libc.org/cgit/musl/tree/src/math?h=rs-1.0 + * - License: http://git.musl-libc.org/cgit/musl/tree/COPYRIGHT?h=rs-1.0 + */ + +/******************************************************************************* + Start of code based on MUSL +*******************************************************************************/ +/* +musl as a whole is licensed under the following standard MIT license: + +---------------------------------------------------------------------- +Copyright © 2005-2014 Rich Felker, et al. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +---------------------------------------------------------------------- +*/ + +/* fpclassify */ + +__CRT_INLINE int __cdecl __fpclassify (double x) { + union {double f; uint64_t i;} u = {x}; + int e = u.i>>52 & 0x7ff; + if (!e) return u.i<<1 ? FP_SUBNORMAL : FP_ZERO; + if (e==0x7ff) return u.i<<12 ? FP_NAN : FP_INFINITE; + return FP_NORMAL; +} + +__CRT_INLINE int __cdecl __fpclassifyf (float x) { + union {float f; uint32_t i;} u = {x}; + int e = u.i>>23 & 0xff; + if (!e) return u.i<<1 ? FP_SUBNORMAL : FP_ZERO; + if (e==0xff) return u.i<<9 ? FP_NAN : FP_INFINITE; + return FP_NORMAL; +} + +__CRT_INLINE int __cdecl __fpclassifyl (long double x) { + return __fpclassify(x); +} + + +/* signbit */ + +__CRT_INLINE int __cdecl __signbit (double x) { + union {double d; uint64_t i;} y = { x }; + return y.i>>63; +} + +__CRT_INLINE int __cdecl __signbitf (float x) { + union {float f; uint32_t i; } y = { x }; + return y.i>>31; +} + +__CRT_INLINE int __cdecl __signbitl (long double x) { + return __signbit(x); +} + + +/* fmin*, fmax* */ + +#define TCCFP_FMIN_EVAL (isnan(x) ? y : \ + isnan(y) ? x : \ + (signbit(x) != signbit(y)) ? (signbit(x) ? x : y) : \ + x < y ? x : y) + +__CRT_INLINE double __cdecl fmin (double x, double y) { + return TCCFP_FMIN_EVAL; +} + +__CRT_INLINE float __cdecl fminf (float x, float y) { + return TCCFP_FMIN_EVAL; +} + +__CRT_INLINE long double __cdecl fminl (long double x, long double y) { + return TCCFP_FMIN_EVAL; +} + +#define TCCFP_FMAX_EVAL (isnan(x) ? y : \ + isnan(y) ? x : \ + (signbit(x) != signbit(y)) ? (signbit(x) ? y : x) : \ + x < y ? y : x) + +__CRT_INLINE double __cdecl fmax (double x, double y) { + return TCCFP_FMAX_EVAL; +} + +__CRT_INLINE float __cdecl fmaxf (float x, float y) { + return TCCFP_FMAX_EVAL; +} + +__CRT_INLINE long double __cdecl fmaxl (long double x, long double y) { + return TCCFP_FMAX_EVAL; +} + + +/* *round* */ + +#define TCCFP_FORCE_EVAL(x) do { \ +if (sizeof(x) == sizeof(float)) { \ + volatile float __x; \ + __x = (x); \ +} else if (sizeof(x) == sizeof(double)) { \ + volatile double __x; \ + __x = (x); \ +} else { \ + volatile long double __x; \ + __x = (x); \ +} \ +} while(0) + +__CRT_INLINE double __cdecl round (double x) { + union {double f; uint64_t i;} u = {x}; + int e = u.i >> 52 & 0x7ff; + double y; + + if (e >= 0x3ff+52) + return x; + if (u.i >> 63) + x = -x; + if (e < 0x3ff-1) { + /* raise inexact if x!=0 */ + TCCFP_FORCE_EVAL(x + 0x1p52); + return 0*u.f; + } + y = (double)(x + 0x1p52) - 0x1p52 - x; + if (y > 0.5) + y = y + x - 1; + else if (y <= -0.5) + y = y + x + 1; + else + y = y + x; + if (u.i >> 63) + y = -y; + return y; +} + +__CRT_INLINE long __cdecl lround (double x) { + return round(x); +} + +__CRT_INLINE long long __cdecl llround (double x) { + return round(x); +} + +__CRT_INLINE float __cdecl roundf (float x) { + return round(x); +} + +__CRT_INLINE long __cdecl lroundf (float x) { + return round(x); +} + +__CRT_INLINE long long __cdecl llroundf (float x) { + return round(x); +} + +__CRT_INLINE long double __cdecl roundl (long double x) { + return round(x); +} + +__CRT_INLINE long __cdecl lroundl (long double x) { + return round(x); +} + +__CRT_INLINE long long __cdecl llroundl (long double x) { + return round(x); +} + + + +#endif /* End _MATH_H_ */ + diff --git a/colorchord2/windows/mmsystem.h b/colorchord2/windows/mmsystem.h new file mode 100644 index 0000000..3eb06a4 --- /dev/null +++ b/colorchord2/windows/mmsystem.h @@ -0,0 +1,1950 @@ + +#ifndef _MMSYSTEM_H +#define _MMSYSTEM_H +#if __GNUC__ >=3 +#pragma GCC system_header +#endif +#pragma pack(push,1) +#ifdef __cplusplus +extern "C" { +#endif + +#if defined( TCC ) || defined (TinyCC) || defined(TINYCC) +#define _STRUCT_NAME(x) x +typedef UINT* LPUINT; +#endif + +#define WINMMAPI DECLSPEC_IMPORT +#define _loadds +#define _huge +#define MAXPNAMELEN 32 +#define MAXERRORLENGTH 256 +#define MAX_JOYSTICKOEMVXDNAME 260 +#define _MMRESULT_ +#define TIME_MS 1 +#define TIME_SAMPLES 2 +#define TIME_BYTES 4 +#define TIME_SMPTE 8 +#define TIME_MIDI 16 +#define TIME_TICKS 32 +#define MAKEFOURCC(c0,c1,c2,c3) ((DWORD)(BYTE)(c0)|((DWORD)(BYTE)(c1)<<8)|((DWORD)(BYTE)(c2)<<16)|((DWORD)(BYTE)(c3)<<24)) +#ifndef mmioFOURCC +#define mmioFOURCC(c0,c1,c2,c3) MAKEFOURCC(c0,c1,c2,c3) +#endif +#define MM_JOY1MOVE 0x3A0 +#define MM_JOY2MOVE 0x3A1 +#define MM_JOY1ZMOVE 0x3A2 +#define MM_JOY2ZMOVE 0x3A3 +#define MM_JOY1BUTTONDOWN 0x3B5 +#define MM_JOY2BUTTONDOWN 0x3B6 +#define MM_JOY1BUTTONUP 0x3B7 +#define MM_JOY2BUTTONUP 0x3B8 +#define MM_MCINOTIFY 0x3B9 +#define MM_WOM_OPEN 0x3BB +#define MM_WOM_CLOSE 0x3BC +#define MM_WOM_DONE 0x3BD +#define MM_WIM_OPEN 0x3BE +#define MM_WIM_CLOSE 0x3BF +#define MM_WIM_DATA 0x3C0 +#define MM_MIM_OPEN 0x3C1 +#define MM_MIM_CLOSE 0x3C2 +#define MM_MIM_DATA 0x3C3 +#define MM_MIM_LONGDATA 0x3C4 +#define MM_MIM_ERROR 0x3C5 +#define MM_MIM_LONGERROR 0x3C6 +#define MM_MOM_OPEN 0x3C7 +#define MM_MOM_CLOSE 0x3C8 +#define MM_MOM_DONE 0x3C9 +#define MM_DRVM_OPEN 0x3D0 +#define MM_DRVM_CLOSE 0x3D1 +#define MM_DRVM_DATA 0x3D2 +#define MM_DRVM_ERROR 0x3D3 +#define MM_STREAM_OPEN 0x3D4 +#define MM_STREAM_CLOSE 0x3D5 +#define MM_STREAM_DONE 0x3D6 +#define MM_STREAM_ERROR 0x3D7 +#define MM_MOM_POSITIONCB 0x3CA +#define MM_MCISIGNAL 0x3CB +#define MM_MIM_MOREDATA 0x3CC +#define MM_MIXM_LINE_CHANGE 0x3D0 +#define MM_MIXM_CONTROL_CHANGE 0x3D1 +#define MMSYSERR_BASE 0 +#define WAVERR_BASE 32 +#define MIDIERR_BASE 64 +#define TIMERR_BASE 96 +#define JOYERR_BASE 160 +#define MCIERR_BASE 256 +#define MIXERR_BASE 1024 +#define MCI_STRING_OFFSET 512 +#define MCI_VD_OFFSET 1024 +#define MCI_CD_OFFSET 1088 +#define MCI_WAVE_OFFSET 1152 +#define MCI_SEQ_OFFSET 1216 +#define MMSYSERR_NOERROR 0 +#define MMSYSERR_ERROR (MMSYSERR_BASE+1) +#define MMSYSERR_BADDEVICEID (MMSYSERR_BASE+2) +#define MMSYSERR_NOTENABLED (MMSYSERR_BASE+3) +#define MMSYSERR_ALLOCATED (MMSYSERR_BASE+4) +#define MMSYSERR_INVALHANDLE (MMSYSERR_BASE+5) +#define MMSYSERR_NODRIVER (MMSYSERR_BASE+6) +#define MMSYSERR_NOMEM (MMSYSERR_BASE+7) +#define MMSYSERR_NOTSUPPORTED (MMSYSERR_BASE+8) +#define MMSYSERR_BADERRNUM (MMSYSERR_BASE+9) +#define MMSYSERR_INVALFLAG (MMSYSERR_BASE+10) +#define MMSYSERR_INVALPARAM (MMSYSERR_BASE+11) +#define MMSYSERR_HANDLEBUSY (MMSYSERR_BASE+12) +#define MMSYSERR_INVALIDALIAS (MMSYSERR_BASE+13) +#define MMSYSERR_BADDB (MMSYSERR_BASE+14) +#define MMSYSERR_KEYNOTFOUND (MMSYSERR_BASE+15) +#define MMSYSERR_READERROR (MMSYSERR_BASE+16) +#define MMSYSERR_WRITEERROR (MMSYSERR_BASE+17) +#define MMSYSERR_DELETEERROR (MMSYSERR_BASE+18) +#define MMSYSERR_VALNOTFOUND (MMSYSERR_BASE+19) +#define MMSYSERR_NODRIVERCB (MMSYSERR_BASE+20) +#define MMSYSERR_LASTERROR (MMSYSERR_BASE+20) +#define DRV_LOAD 1 +#define DRV_ENABLE 2 +#define DRV_OPEN 3 +#define DRV_CLOSE 4 +#define DRV_DISABLE 5 +#define DRV_FREE 6 +#define DRV_CONFIGURE 7 +#define DRV_QUERYCONFIGURE 8 +#define DRV_INSTALL 9 +#define DRV_REMOVE 10 +#define DRV_EXITSESSION 11 +#define DRV_POWER 15 +#define DRV_RESERVED 0x800 +#define DRV_USER 0x4000 +#define DRVCNF_CANCEL 0 +#define DRVCNF_OK 1 +#define DRVCNF_RESTART 2 +#define DRV_CANCEL DRVCNF_CANCEL +#define DRV_OK DRVCNF_OK +#define DRV_RESTART DRVCNF_RESTART +#define DRV_MCI_FIRST DRV_RESERVED +#define DRV_MCI_LAST (DRV_RESERVED+0xFFF) +#define CALLBACK_TYPEMASK 0x70000 +#define CALLBACK_NULL 0 +#define CALLBACK_WINDOW 0x10000 +#define CALLBACK_TASK 0x20000 +#define CALLBACK_FUNCTION 0x30000 +#define CALLBACK_THREAD CALLBACK_TASK +#define CALLBACK_EVENT 0x50000 +#define SND_SYNC 0 +#define SND_ASYNC 1 +#define SND_NODEFAULT 2 +#define SND_MEMORY 4 +#define SND_LOOP 8 +#define SND_NOSTOP 16 +#define SND_NOWAIT 0x2000 +#define SND_ALIAS 0x10000 +#define SND_ALIAS_ID 0x110000 +#define SND_FILENAME 0x20000 +#define SND_RESOURCE 0x40004 +#define SND_PURGE 0x40 +#define SND_APPLICATION 0x80 +#define SND_ALIAS_START 0 +#define sndAlias(c0,c1) (SND_ALIAS_START+(DWORD)(BYTE)(c0)|((DWORD)(BYTE)(c1)<<8)) +#define SND_ALIAS_SYSTEMASTERISK sndAlias('S','*') +#define SND_ALIAS_SYSTEMQUESTION sndAlias('S','?') +#define SND_ALIAS_SYSTEMHAND sndAlias('S','H') +#define SND_ALIAS_SYSTEMEXIT sndAlias('S','E') +#define SND_ALIAS_SYSTEMSTART sndAlias('S','S') +#define SND_ALIAS_SYSTEMWELCOME sndAlias('S','W') +#define SND_ALIAS_SYSTEMEXCLAMATION sndAlias('S','!') +#define SND_ALIAS_SYSTEMDEFAULT sndAlias('S','D') +#define WAVERR_BADFORMAT (WAVERR_BASE + 0) +#define WAVERR_STILLPLAYING (WAVERR_BASE + 1) +#define WAVERR_UNPREPARED (WAVERR_BASE + 2) +#define WAVERR_SYNC (WAVERR_BASE + 3) +#define WAVERR_LASTERROR (WAVERR_BASE + 3) +#define WOM_OPEN MM_WOM_OPEN +#define WOM_CLOSE MM_WOM_CLOSE +#define WOM_DONE MM_WOM_DONE +#define WIM_OPEN MM_WIM_OPEN +#define WIM_CLOSE MM_WIM_CLOSE +#define WIM_DATA MM_WIM_DATA +#define WAVE_MAPPER ((UINT)-1) +#define WAVE_FORMAT_QUERY 1 +#define WAVE_ALLOWSYNC 2 +#define WAVE_MAPPED 4 +#define WAVE_FORMAT_DIRECT 8 +#define WAVE_FORMAT_DIRECT_QUERY (WAVE_FORMAT_QUERY|WAVE_FORMAT_DIRECT) +#define WHDR_DONE 1 +#define WHDR_PREPARED 2 +#define WHDR_BEGINLOOP 4 +#define WHDR_ENDLOOP 8 +#define WHDR_INQUEUE 16 +#define WAVECAPS_PITCH 1 +#define WAVECAPS_PLAYBACKRATE 2 +#define WAVECAPS_VOLUME 4 +#define WAVECAPS_LRVOLUME 8 +#define WAVECAPS_SYNC 16 +#define WAVECAPS_SAMPLEACCURATE 32 +#define WAVECAPS_DIRECTSOUND 64 +#define WAVE_INVALIDFORMAT 0 +#define WAVE_FORMAT_1M08 1 +#define WAVE_FORMAT_1S08 2 +#define WAVE_FORMAT_1M16 4 +#define WAVE_FORMAT_1S16 8 +#define WAVE_FORMAT_2M08 16 +#define WAVE_FORMAT_2S08 32 +#define WAVE_FORMAT_2M16 64 +#define WAVE_FORMAT_2S16 128 +#define WAVE_FORMAT_4M08 256 +#define WAVE_FORMAT_4S08 512 +#define WAVE_FORMAT_4M16 1024 +#define WAVE_FORMAT_4S16 2048 +#define WAVE_FORMAT_PCM 1 +#define WAVE_FORMAT_EXTENSIBLE 0xFFFE +#define MIDIERR_UNPREPARED MIDIERR_BASE +#define MIDIERR_STILLPLAYING (MIDIERR_BASE+1) +#define MIDIERR_NOMAP (MIDIERR_BASE+2) +#define MIDIERR_NOTREADY (MIDIERR_BASE+3) +#define MIDIERR_NODEVICE (MIDIERR_BASE+4) +#define MIDIERR_INVALIDSETUP (MIDIERR_BASE+5) +#define MIDIERR_BADOPENMODE (MIDIERR_BASE+6) +#define MIDIERR_DONT_CONTINUE (MIDIERR_BASE+7) +#define MIDIERR_LASTERROR (MIDIERR_BASE+7) +#define MIDIPATCHSIZE 128 +#define MIM_OPEN MM_MIM_OPEN +#define MIM_CLOSE MM_MIM_CLOSE +#define MIM_DATA MM_MIM_DATA +#define MIM_LONGDATA MM_MIM_LONGDATA +#define MIM_ERROR MM_MIM_ERROR +#define MIM_LONGERROR MM_MIM_LONGERROR +#define MOM_OPEN MM_MOM_OPEN +#define MOM_CLOSE MM_MOM_CLOSE +#define MOM_DONE MM_MOM_DONE +#define MIM_MOREDATA MM_MIM_MOREDATA +#define MOM_POSITIONCB MM_MOM_POSITIONCB +#define MIDIMAPPER ((UINT)-1) +#define MIDI_MAPPER ((UINT)-1) +#define MIDI_IO_STATUS 32 +#define MIDI_CACHE_ALL 1 +#define MIDI_CACHE_BESTFIT 2 +#define MIDI_CACHE_QUERY 3 +#define MIDI_UNCACHE 4 +#define MOD_MIDIPORT 1 +#define MOD_SYNTH 2 +#define MOD_SQSYNTH 3 +#define MOD_FMSYNTH 4 +#define MOD_MAPPER 5 +#define MIDICAPS_VOLUME 1 +#define MIDICAPS_LRVOLUME 2 +#define MIDICAPS_CACHE 4 +#define MIDICAPS_STREAM 8 +#define MHDR_DONE 1 +#define MHDR_PREPARED 2 +#define MHDR_INQUEUE 4 +#define MHDR_ISSTRM 8 +#define MEVT_F_SHORT 0 +#define MEVT_F_LONG 0x80000000 +#define MEVT_F_CALLBACK 0x40000000 +#define MEVT_EVENTTYPE(x) ((BYTE)(((x)>>24)&0xFF)) +#define MEVT_EVENTPARM(x) ((DWORD)((x)&0xFFFFFFL)) +#define MEVT_SHORTMSG 0 +#define MEVT_TEMPO 1 +#define MEVT_NOP 2 +#define MEVT_LONGMSG ((BYTE)0x80) +#define MEVT_COMMENT ((BYTE)0x82) +#define MEVT_VERSION ((BYTE)0x84) +#define MIDISTRM_ERROR (-2) +#define MIDIPROP_SET 0x80000000 +#define MIDIPROP_GET 0x40000000 +#define MIDIPROP_TIMEDIV 1 +#define MIDIPROP_TEMPO 2 +#define AUX_MAPPER ((UINT)-1) +#define AUXCAPS_CDAUDIO 1 +#define AUXCAPS_AUXIN 2 +#define AUXCAPS_VOLUME 1 +#define AUXCAPS_LRVOLUME 2 +#define MIXER_SHORT_NAME_CHARS 16 +#define MIXER_LONG_NAME_CHARS 64 +#define MIXERR_INVALLINE MIXERR_BASE +#define MIXERR_INVALCONTROL (MIXERR_BASE+1) +#define MIXERR_INVALVALUE (MIXERR_BASE+2) +#define MIXERR_LASTERROR (MIXERR_BASE+2) +#define MIXER_OBJECTF_HANDLE 0x80000000 +#define MIXER_OBJECTF_MIXER 0 +#define MIXER_OBJECTF_HMIXER (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIXER) +#define MIXER_OBJECTF_WAVEOUT 0x10000000 +#define MIXER_OBJECTF_HWAVEOUT (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_WAVEOUT) +#define MIXER_OBJECTF_WAVEIN 0x20000000 +#define MIXER_OBJECTF_HWAVEIN (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_WAVEIN) +#define MIXER_OBJECTF_MIDIOUT 0x30000000 +#define MIXER_OBJECTF_HMIDIOUT (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIDIOUT) +#define MIXER_OBJECTF_MIDIIN 0x40000000 +#define MIXER_OBJECTF_HMIDIIN (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIDIIN) +#define MIXER_OBJECTF_AUX 0x50000000 +#define MIXERLINE_LINEF_ACTIVE 1 +#define MIXERLINE_LINEF_DISCONNECTED 0x8000 +#define MIXERLINE_LINEF_SOURCE 0x80000000 +#define MIXERLINE_COMPONENTTYPE_DST_FIRST 0 +#define MIXERLINE_COMPONENTTYPE_DST_UNDEFINED MIXERLINE_COMPONENTTYPE_DST_FIRST +#define MIXERLINE_COMPONENTTYPE_DST_DIGITAL (MIXERLINE_COMPONENTTYPE_DST_FIRST+1) +#define MIXERLINE_COMPONENTTYPE_DST_LINE (MIXERLINE_COMPONENTTYPE_DST_FIRST+2) +#define MIXERLINE_COMPONENTTYPE_DST_MONITOR (MIXERLINE_COMPONENTTYPE_DST_FIRST+3) +#define MIXERLINE_COMPONENTTYPE_DST_SPEAKERS (MIXERLINE_COMPONENTTYPE_DST_FIRST+4) +#define MIXERLINE_COMPONENTTYPE_DST_HEADPHONES (MIXERLINE_COMPONENTTYPE_DST_FIRST+5) +#define MIXERLINE_COMPONENTTYPE_DST_TELEPHONE (MIXERLINE_COMPONENTTYPE_DST_FIRST+6) +#define MIXERLINE_COMPONENTTYPE_DST_WAVEIN (MIXERLINE_COMPONENTTYPE_DST_FIRST+7) +#define MIXERLINE_COMPONENTTYPE_DST_VOICEIN (MIXERLINE_COMPONENTTYPE_DST_FIRST+8) +#define MIXERLINE_COMPONENTTYPE_DST_LAST (MIXERLINE_COMPONENTTYPE_DST_FIRST+8) +#define MIXERLINE_COMPONENTTYPE_SRC_FIRST 0x1000 +#define MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED MIXERLINE_COMPONENTTYPE_SRC_FIRST +#define MIXERLINE_COMPONENTTYPE_SRC_DIGITAL (MIXERLINE_COMPONENTTYPE_SRC_FIRST+1) +#define MIXERLINE_COMPONENTTYPE_SRC_LINE (MIXERLINE_COMPONENTTYPE_SRC_FIRST+2) +#define MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE (MIXERLINE_COMPONENTTYPE_SRC_FIRST+3) +#define MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER (MIXERLINE_COMPONENTTYPE_SRC_FIRST+4) +#define MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC (MIXERLINE_COMPONENTTYPE_SRC_FIRST+5) +#define MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE (MIXERLINE_COMPONENTTYPE_SRC_FIRST+6) +#define MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER (MIXERLINE_COMPONENTTYPE_SRC_FIRST+7) +#define MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT (MIXERLINE_COMPONENTTYPE_SRC_FIRST+8) +#define MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY (MIXERLINE_COMPONENTTYPE_SRC_FIRST+9) +#define MIXERLINE_COMPONENTTYPE_SRC_ANALOG (MIXERLINE_COMPONENTTYPE_SRC_FIRST+10) +#define MIXERLINE_COMPONENTTYPE_SRC_LAST (MIXERLINE_COMPONENTTYPE_SRC_FIRST+10) +#define MIXERLINE_TARGETTYPE_UNDEFINED 0 +#define MIXERLINE_TARGETTYPE_WAVEOUT 1 +#define MIXERLINE_TARGETTYPE_WAVEIN 2 +#define MIXERLINE_TARGETTYPE_MIDIOUT 3 +#define MIXERLINE_TARGETTYPE_MIDIIN 4 +#define MIXERLINE_TARGETTYPE_AUX 5 +#define MIXER_GETLINEINFOF_DESTINATION 0 +#define MIXER_GETLINEINFOF_SOURCE 1 +#define MIXER_GETLINEINFOF_LINEID 2 +#define MIXER_GETLINEINFOF_COMPONENTTYPE 3 +#define MIXER_GETLINEINFOF_TARGETTYPE 4 +#define MIXER_GETLINEINFOF_QUERYMASK 15 +#define MIXERCONTROL_CONTROLF_UNIFORM 1 +#define MIXERCONTROL_CONTROLF_MULTIPLE 2 +#define MIXERCONTROL_CONTROLF_DISABLED 0x80000000 +#define MIXERCONTROL_CT_CLASS_MASK 0xF0000000 +#define MIXERCONTROL_CT_CLASS_CUSTOM 0 +#define MIXERCONTROL_CT_CLASS_METER 0x10000000 +#define MIXERCONTROL_CT_CLASS_SWITCH 0x20000000 +#define MIXERCONTROL_CT_CLASS_NUMBER 0x30000000 +#define MIXERCONTROL_CT_CLASS_SLIDER 0x40000000 +#define MIXERCONTROL_CT_CLASS_FADER 0x50000000 +#define MIXERCONTROL_CT_CLASS_TIME 0x60000000 +#define MIXERCONTROL_CT_CLASS_LIST 0x70000000 +#define MIXERCONTROL_CT_SUBCLASS_MASK 0xF000000 +#define MIXERCONTROL_CT_SC_SWITCH_BOOLEAN 0 +#define MIXERCONTROL_CT_SC_SWITCH_BUTTON 0x1000000 +#define MIXERCONTROL_CT_SC_METER_POLLED 0 +#define MIXERCONTROL_CT_SC_TIME_MICROSECS 0 +#define MIXERCONTROL_CT_SC_TIME_MILLISECS 0x1000000 +#define MIXERCONTROL_CT_SC_LIST_SINGLE 0 +#define MIXERCONTROL_CT_SC_LIST_MULTIPLE 0x1000000 +#define MIXERCONTROL_CT_UNITS_MASK 0xFF0000 +#define MIXERCONTROL_CT_UNITS_CUSTOM 0 +#define MIXERCONTROL_CT_UNITS_BOOLEAN 0x10000 +#define MIXERCONTROL_CT_UNITS_SIGNED 0x20000 +#define MIXERCONTROL_CT_UNITS_UNSIGNED 0x30000 +#define MIXERCONTROL_CT_UNITS_DECIBELS 0x40000 +#define MIXERCONTROL_CT_UNITS_PERCENT 0x50000 +#define MIXERCONTROL_CONTROLTYPE_CUSTOM (MIXERCONTROL_CT_CLASS_CUSTOM|MIXERCONTROL_CT_UNITS_CUSTOM) +#define MIXERCONTROL_CONTROLTYPE_BOOLEANMETER (MIXERCONTROL_CT_CLASS_METER|MIXERCONTROL_CT_SC_METER_POLLED|MIXERCONTROL_CT_UNITS_BOOLEAN) +#define MIXERCONTROL_CONTROLTYPE_SIGNEDMETER (MIXERCONTROL_CT_CLASS_METER|MIXERCONTROL_CT_SC_METER_POLLED|MIXERCONTROL_CT_UNITS_SIGNED) +#define MIXERCONTROL_CONTROLTYPE_PEAKMETER (MIXERCONTROL_CONTROLTYPE_SIGNEDMETER+1) +#define MIXERCONTROL_CONTROLTYPE_UNSIGNEDMETER (MIXERCONTROL_CT_CLASS_METER|MIXERCONTROL_CT_SC_METER_POLLED|MIXERCONTROL_CT_UNITS_UNSIGNED) +#define MIXERCONTROL_CONTROLTYPE_BOOLEAN (MIXERCONTROL_CT_CLASS_SWITCH|MIXERCONTROL_CT_SC_SWITCH_BOOLEAN|MIXERCONTROL_CT_UNITS_BOOLEAN) +#define MIXERCONTROL_CONTROLTYPE_ONOFF (MIXERCONTROL_CONTROLTYPE_BOOLEAN+1) +#define MIXERCONTROL_CONTROLTYPE_MUTE (MIXERCONTROL_CONTROLTYPE_BOOLEAN+2) +#define MIXERCONTROL_CONTROLTYPE_MONO (MIXERCONTROL_CONTROLTYPE_BOOLEAN+3) +#define MIXERCONTROL_CONTROLTYPE_LOUDNESS (MIXERCONTROL_CONTROLTYPE_BOOLEAN+4) +#define MIXERCONTROL_CONTROLTYPE_STEREOENH (MIXERCONTROL_CONTROLTYPE_BOOLEAN+5) +#define MIXERCONTROL_CONTROLTYPE_BUTTON (MIXERCONTROL_CT_CLASS_SWITCH|MIXERCONTROL_CT_SC_SWITCH_BUTTON|MIXERCONTROL_CT_UNITS_BOOLEAN) +#define MIXERCONTROL_CONTROLTYPE_DECIBELS (MIXERCONTROL_CT_CLASS_NUMBER|MIXERCONTROL_CT_UNITS_DECIBELS) +#define MIXERCONTROL_CONTROLTYPE_SIGNED (MIXERCONTROL_CT_CLASS_NUMBER|MIXERCONTROL_CT_UNITS_SIGNED) +#define MIXERCONTROL_CONTROLTYPE_UNSIGNED (MIXERCONTROL_CT_CLASS_NUMBER|MIXERCONTROL_CT_UNITS_UNSIGNED) +#define MIXERCONTROL_CONTROLTYPE_PERCENT (MIXERCONTROL_CT_CLASS_NUMBER|MIXERCONTROL_CT_UNITS_PERCENT) +#define MIXERCONTROL_CONTROLTYPE_SLIDER (MIXERCONTROL_CT_CLASS_SLIDER|MIXERCONTROL_CT_UNITS_SIGNED) +#define MIXERCONTROL_CONTROLTYPE_PAN (MIXERCONTROL_CONTROLTYPE_SLIDER+1) +#define MIXERCONTROL_CONTROLTYPE_QSOUNDPAN (MIXERCONTROL_CONTROLTYPE_SLIDER+2) +#define MIXERCONTROL_CONTROLTYPE_FADER (MIXERCONTROL_CT_CLASS_FADER|MIXERCONTROL_CT_UNITS_UNSIGNED) +#define MIXERCONTROL_CONTROLTYPE_VOLUME (MIXERCONTROL_CONTROLTYPE_FADER+1) +#define MIXERCONTROL_CONTROLTYPE_BASS (MIXERCONTROL_CONTROLTYPE_FADER+2) +#define MIXERCONTROL_CONTROLTYPE_TREBLE (MIXERCONTROL_CONTROLTYPE_FADER+3) +#define MIXERCONTROL_CONTROLTYPE_EQUALIZER (MIXERCONTROL_CONTROLTYPE_FADER+4) +#define MIXERCONTROL_CONTROLTYPE_SINGLESELECT (MIXERCONTROL_CT_CLASS_LIST|MIXERCONTROL_CT_SC_LIST_SINGLE|MIXERCONTROL_CT_UNITS_BOOLEAN) +#define MIXERCONTROL_CONTROLTYPE_MUX (MIXERCONTROL_CONTROLTYPE_SINGLESELECT+1) +#define MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT (MIXERCONTROL_CT_CLASS_LIST|MIXERCONTROL_CT_SC_LIST_MULTIPLE|MIXERCONTROL_CT_UNITS_BOOLEAN) +#define MIXERCONTROL_CONTROLTYPE_MIXER (MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT+1) +#define MIXERCONTROL_CONTROLTYPE_MICROTIME (MIXERCONTROL_CT_CLASS_TIME|MIXERCONTROL_CT_SC_TIME_MICROSECS|MIXERCONTROL_CT_UNITS_UNSIGNED) +#define MIXERCONTROL_CONTROLTYPE_MILLITIME (MIXERCONTROL_CT_CLASS_TIME|MIXERCONTROL_CT_SC_TIME_MILLISECS|MIXERCONTROL_CT_UNITS_UNSIGNED) +#define MIXER_GETLINECONTROLSF_ALL 0 +#define MIXER_GETLINECONTROLSF_ONEBYID 1 +#define MIXER_GETLINECONTROLSF_ONEBYTYPE 2 +#define MIXER_GETLINECONTROLSF_QUERYMASK 15 +#define MIXER_GETCONTROLDETAILSF_VALUE 0 +#define MIXER_GETCONTROLDETAILSF_LISTTEXT 1 +#define MIXER_GETCONTROLDETAILSF_QUERYMASK 15 +#define MIXER_SETCONTROLDETAILSF_VALUE 0 +#define MIXER_SETCONTROLDETAILSF_CUSTOM 1 +#define MIXER_SETCONTROLDETAILSF_QUERYMASK 15 +#define TIMERR_NOERROR 0 +#define TIMERR_NOCANDO (TIMERR_BASE+1) +#define TIMERR_STRUCT (TIMERR_BASE+33) +#define TIME_ONESHOT 0 +#define TIME_PERIODIC 1 +#define TIME_CALLBACK_FUNCTION 0 +#define TIME_CALLBACK_EVENT_SET 16 +#define TIME_CALLBACK_EVENT_PULSE 32 +#if (WINVER >= 0x0501) +#define TIME_KILL_SYNCHRONOUS 0x0100 +#endif +#define JOYERR_NOERROR (0) +#define JOYERR_PARMS (JOYERR_BASE+5) +#define JOYERR_NOCANDO (JOYERR_BASE+6) +#define JOYERR_UNPLUGGED (JOYERR_BASE+7) +#define JOY_BUTTON1 1 +#define JOY_BUTTON2 2 +#define JOY_BUTTON3 4 +#define JOY_BUTTON4 8 +#define JOY_BUTTON1CHG 256 +#define JOY_BUTTON2CHG 512 +#define JOY_BUTTON3CHG 1024 +#define JOY_BUTTON4CHG 2048 +#define JOY_BUTTON5 257 +#define JOY_BUTTON6 513 +#define JOY_BUTTON7 1025 +#define JOY_BUTTON8 2049 +#define JOY_BUTTON9 256 +#define JOY_BUTTON10 512 +#define JOY_BUTTON11 1024 +#define JOY_BUTTON12 2048 +#define JOY_BUTTON13 4096 +#define JOY_BUTTON14 8192 +#define JOY_BUTTON15 16384 +#define JOY_BUTTON16 32768 +#define JOY_BUTTON17 65536 +#define JOY_BUTTON18 0x20000 +#define JOY_BUTTON19 0x40000 +#define JOY_BUTTON20 0x80000 +#define JOY_BUTTON21 0x100000 +#define JOY_BUTTON22 0x200000 +#define JOY_BUTTON23 0x400000 +#define JOY_BUTTON24 0x800000 +#define JOY_BUTTON25 0x1000000 +#define JOY_BUTTON26 0x2000000 +#define JOY_BUTTON27 0x4000000 +#define JOY_BUTTON28 0x8000000 +#define JOY_BUTTON29 0x10000000 +#define JOY_BUTTON30 0x20000000 +#define JOY_BUTTON31 0x40000000 +#define JOY_BUTTON32 0x80000000 +#define JOY_POVCENTERED ((WORD)-1) +#define JOY_POVFORWARD 0 +#define JOY_POVRIGHT 9000 +#define JOY_POVBACKWARD 18000 +#define JOY_POVLEFT 27000 +#define JOY_RETURNX 1 +#define JOY_RETURNY 2 +#define JOY_RETURNZ 4l +#define JOY_RETURNR 8 +#define JOY_RETURNU 16 +#define JOY_RETURNV 32 +#define JOY_RETURNPOV 64 +#define JOY_RETURNBUTTONS 128 +#define JOY_RETURNRAWDATA 256 +#define JOY_RETURNPOVCTS 512 +#define JOY_RETURNCENTERED 1024 +#define JOY_USEDEADZONE 2048 +#define JOY_RETURNALL (JOY_RETURNX|JOY_RETURNY|JOY_RETURNZ|JOY_RETURNR|JOY_RETURNU|JOY_RETURNV|JOY_RETURNPOV|JOY_RETURNBUTTONS) +#define JOY_CAL_READALWAYS 0x10000 +#define JOY_CAL_READXYONLY 0x20000 +#define JOY_CAL_READ3 0x40000 +#define JOY_CAL_READ4 0x80000 +#define JOY_CAL_READXONLY 0x100000 +#define JOY_CAL_READYONLY 0x200000 +#define JOY_CAL_READ5 0x400000 +#define JOY_CAL_READ6 0x800000 +#define JOY_CAL_READZONLY 0x1000000 +#define JOY_CAL_READRONLY 0x2000000 +#define JOY_CAL_READUONLY 0x4000000 +#define JOY_CAL_READVONLY 0x8000000 +#define JOYSTICKID1 0 +#define JOYSTICKID2 1 +#define JOYCAPS_HASZ 1 +#define JOYCAPS_HASR 2 +#define JOYCAPS_HASU 4 +#define JOYCAPS_HASV 8 +#define JOYCAPS_HASPOV 16 +#define JOYCAPS_POV4DIR 32 +#define JOYCAPS_POVCTS 64 +#define MMIOERR_BASE 256 +#define MMIOERR_FILENOTFOUND (MMIOERR_BASE+1) +#define MMIOERR_OUTOFMEMORY (MMIOERR_BASE+2) +#define MMIOERR_CANNOTOPEN (MMIOERR_BASE+3) +#define MMIOERR_CANNOTCLOSE (MMIOERR_BASE+4) +#define MMIOERR_CANNOTREAD (MMIOERR_BASE+5) +#define MMIOERR_CANNOTWRITE (MMIOERR_BASE+6) +#define MMIOERR_CANNOTSEEK (MMIOERR_BASE+7) +#define MMIOERR_CANNOTEXPAND (MMIOERR_BASE+8) +#define MMIOERR_CHUNKNOTFOUND (MMIOERR_BASE+9) +#define MMIOERR_UNBUFFERED (MMIOERR_BASE+10) +#define MMIOERR_PATHNOTFOUND (MMIOERR_BASE+11) +#define MMIOERR_ACCESSDENIED (MMIOERR_BASE+12) +#define MMIOERR_SHARINGVIOLATION (MMIOERR_BASE+13) +#define MMIOERR_NETWORKERROR (MMIOERR_BASE+14) +#define MMIOERR_TOOMANYOPENFILES (MMIOERR_BASE+15) +#define MMIOERR_INVALIDFILE (MMIOERR_BASE+16) +#define CFSEPCHAR '+' +#define MMIO_RWMODE 3 +#define MMIO_SHAREMODE 0x70 +#define MMIO_CREATE 0x1000 +#define MMIO_PARSE 256 +#define MMIO_DELETE 512 +#define MMIO_EXIST 0x4000 +#define MMIO_ALLOCBUF 0x10000 +#define MMIO_GETTEMP 0x20000 +#define MMIO_DIRTY 0x10000000 +#define MMIO_READ 0 +#define MMIO_WRITE 1 +#define MMIO_READWRITE 2 +#define MMIO_COMPAT 0 +#define MMIO_EXCLUSIVE 16 +#define MMIO_DENYWRITE 32 +#define MMIO_DENYREAD 0x30 +#define MMIO_DENYNONE 64 +#define MMIO_FHOPEN 16 +#define MMIO_EMPTYBUF 16 +#define MMIO_TOUPPER 16 +#define MMIO_INSTALLPROC 0x10000 +#define MMIO_GLOBALPROC 0x10000000 +#define MMIO_REMOVEPROC 0x20000 +#define MMIO_UNICODEPROC 0x1000000 +#define MMIO_FINDPROC 0x40000 +#define MMIO_FINDCHUNK 16 +#define MMIO_FINDRIFF 32 +#define MMIO_FINDLIST 64 +#define MMIO_CREATERIFF 32 +#define MMIO_CREATELIST 64 +#define MMIOM_READ MMIO_READ +#define MMIOM_WRITE MMIO_WRITE +#define MMIOM_SEEK 2 +#define MMIOM_OPEN 3 +#define MMIOM_CLOSE 4 +#define MMIOM_WRITEFLUSH 5 +#define MMIOM_RENAME 6 +#define MMIOM_USER 0x8000 +#define FOURCC_RIFF mmioFOURCC('R', 'I', 'F', 'F') +#define FOURCC_LIST mmioFOURCC('L', 'I', 'S', 'T') +#define FOURCC_DOS mmioFOURCC('D', 'O', 'S', ' ') +#define FOURCC_MEM mmioFOURCC('M', 'E', 'M', ' ') +#define MMIO_DEFAULTBUFFER 8192 +#define MCIERR_INVALID_DEVICE_ID (MCIERR_BASE+1) +#define MCIERR_UNRECOGNIZED_KEYWORD (MCIERR_BASE+3) +#define MCIERR_UNRECOGNIZED_COMMAND (MCIERR_BASE+5) +#define MCIERR_HARDWARE (MCIERR_BASE+6) +#define MCIERR_INVALID_DEVICE_NAME (MCIERR_BASE+7) +#define MCIERR_OUT_OF_MEMORY (MCIERR_BASE+8) +#define MCIERR_DEVICE_OPEN (MCIERR_BASE+9) +#define MCIERR_CANNOT_LOAD_DRIVER (MCIERR_BASE+10) +#define MCIERR_MISSING_COMMAND_STRING (MCIERR_BASE+11) +#define MCIERR_PARAM_OVERFLOW (MCIERR_BASE+12) +#define MCIERR_MISSING_STRING_ARGUMENT (MCIERR_BASE+13) +#define MCIERR_BAD_INTEGER (MCIERR_BASE+14) +#define MCIERR_PARSER_INTERNAL (MCIERR_BASE+15) +#define MCIERR_DRIVER_INTERNAL (MCIERR_BASE+16) +#define MCIERR_MISSING_PARAMETER (MCIERR_BASE+17) +#define MCIERR_UNSUPPORTED_FUNCTION (MCIERR_BASE+18) +#define MCIERR_FILE_NOT_FOUND (MCIERR_BASE+19) +#define MCIERR_DEVICE_NOT_READY (MCIERR_BASE+20) +#define MCIERR_INTERNAL (MCIERR_BASE+21) +#define MCIERR_DRIVER (MCIERR_BASE+22) +#define MCIERR_CANNOT_USE_ALL (MCIERR_BASE+23) +#define MCIERR_MULTIPLE (MCIERR_BASE+24) +#define MCIERR_EXTENSION_NOT_FOUND (MCIERR_BASE+25) +#define MCIERR_OUTOFRANGE (MCIERR_BASE+26) +#define MCIERR_FLAGS_NOT_COMPATIBLE (MCIERR_BASE+28) +#define MCIERR_FILE_NOT_SAVED (MCIERR_BASE+30) +#define MCIERR_DEVICE_TYPE_REQUIRED (MCIERR_BASE+31) +#define MCIERR_DEVICE_LOCKED (MCIERR_BASE+32) +#define MCIERR_DUPLICATE_ALIAS (MCIERR_BASE+33) +#define MCIERR_BAD_CONSTANT (MCIERR_BASE+34) +#define MCIERR_MUST_USE_SHAREABLE (MCIERR_BASE+35) +#define MCIERR_MISSING_DEVICE_NAME (MCIERR_BASE+36) +#define MCIERR_BAD_TIME_FORMAT (MCIERR_BASE+37) +#define MCIERR_NO_CLOSING_QUOTE (MCIERR_BASE+38) +#define MCIERR_DUPLICATE_FLAGS (MCIERR_BASE+39) +#define MCIERR_INVALID_FILE (MCIERR_BASE+40) +#define MCIERR_NULL_PARAMETER_BLOCK (MCIERR_BASE+41) +#define MCIERR_UNNAMED_RESOURCE (MCIERR_BASE+42) +#define MCIERR_NEW_REQUIRES_ALIAS (MCIERR_BASE+43) +#define MCIERR_NOTIFY_ON_AUTO_OPEN (MCIERR_BASE+44) +#define MCIERR_NO_ELEMENT_ALLOWED (MCIERR_BASE+45) +#define MCIERR_NONAPPLICABLE_FUNCTION (MCIERR_BASE+46) +#define MCIERR_ILLEGAL_FOR_AUTO_OPEN (MCIERR_BASE+47) +#define MCIERR_FILENAME_REQUIRED (MCIERR_BASE+48) +#define MCIERR_EXTRA_CHARACTERS (MCIERR_BASE+49) +#define MCIERR_DEVICE_NOT_INSTALLED (MCIERR_BASE+50) +#define MCIERR_GET_CD (MCIERR_BASE+51) +#define MCIERR_SET_CD (MCIERR_BASE+52) +#define MCIERR_SET_DRIVE (MCIERR_BASE+53) +#define MCIERR_DEVICE_LENGTH (MCIERR_BASE+54) +#define MCIERR_DEVICE_ORD_LENGTH (MCIERR_BASE+55) +#define MCIERR_NO_INTEGER (MCIERR_BASE+56) +#define MCIERR_WAVE_OUTPUTSINUSE (MCIERR_BASE+64) +#define MCIERR_WAVE_SETOUTPUTINUSE (MCIERR_BASE+65) +#define MCIERR_WAVE_INPUTSINUSE (MCIERR_BASE+66) +#define MCIERR_WAVE_SETINPUTINUSE (MCIERR_BASE+67) +#define MCIERR_WAVE_OUTPUTUNSPECIFIED (MCIERR_BASE+68) +#define MCIERR_WAVE_INPUTUNSPECIFIED (MCIERR_BASE+69) +#define MCIERR_WAVE_OUTPUTSUNSUITABLE (MCIERR_BASE+70) +#define MCIERR_WAVE_SETOUTPUTUNSUITABLE (MCIERR_BASE+71) +#define MCIERR_WAVE_INPUTSUNSUITABLE (MCIERR_BASE+72) +#define MCIERR_WAVE_SETINPUTUNSUITABLE (MCIERR_BASE+73) +#define MCIERR_SEQ_DIV_INCOMPATIBLE (MCIERR_BASE+80) +#define MCIERR_SEQ_PORT_INUSE (MCIERR_BASE+81) +#define MCIERR_SEQ_PORT_NONEXISTENT (MCIERR_BASE+82) +#define MCIERR_SEQ_PORT_MAPNODEVICE (MCIERR_BASE+83) +#define MCIERR_SEQ_PORT_MISCERROR (MCIERR_BASE+84) +#define MCIERR_SEQ_TIMER (MCIERR_BASE+85) +#define MCIERR_SEQ_PORTUNSPECIFIED (MCIERR_BASE+86) +#define MCIERR_SEQ_NOMIDIPRESENT (MCIERR_BASE+87) +#define MCIERR_NO_WINDOW (MCIERR_BASE+90) +#define MCIERR_CREATEWINDOW (MCIERR_BASE+91) +#define MCIERR_FILE_READ (MCIERR_BASE+92) +#define MCIERR_FILE_WRITE (MCIERR_BASE+93) +#define MCIERR_NO_IDENTITY (MCIERR_BASE+94) +#define MCIERR_CUSTOM_DRIVER_BASE (MCIERR_BASE+256) +#define MCI_FIRST DRV_MCI_FIRST +#define MCI_OPEN 0x803 +#define MCI_CLOSE 0x804 +#define MCI_ESCAPE 0x805 +#define MCI_PLAY 0x806 +#define MCI_SEEK 0x807 +#define MCI_STOP 0x808 +#define MCI_PAUSE 0x809 +#define MCI_INFO 0x80A +#define MCI_GETDEVCAPS 0x80B +#define MCI_SPIN 0x80C +#define MCI_SET 0x80D +#define MCI_STEP 0x80E +#define MCI_RECORD 0x80F +#define MCI_SYSINFO 0x810 +#define MCI_BREAK 0x811 +#define MCI_SAVE 0x813 +#define MCI_STATUS 0x814 +#define MCI_CUE 0x830 +#define MCI_REALIZE 0x840 +#define MCI_WINDOW 0x841 +#define MCI_PUT 0x842 +#define MCI_WHERE 0x843 +#define MCI_FREEZE 0x844 +#define MCI_UNFREEZE 0x845 +#define MCI_LOAD 0x850 +#define MCI_CUT 0x851 +#define MCI_COPY 0x852 +#define MCI_PASTE 0x853 +#define MCI_UPDATE 0x854 +#define MCI_RESUME 0x855 +#define MCI_DELETE 0x856 +#define MCI_USER_MESSAGES (DRV_MCI_FIRST+0x400) +#define MCI_LAST 0xFFF +#define MCI_ALL_DEVICE_ID ((MCIDEVICEID)-1) +#define MCI_DEVTYPE_VCR 513 +#define MCI_DEVTYPE_VIDEODISC 514 +#define MCI_DEVTYPE_OVERLAY 515 +#define MCI_DEVTYPE_CD_AUDIO 516 +#define MCI_DEVTYPE_DAT 517 +#define MCI_DEVTYPE_SCANNER 518 +#define MCI_DEVTYPE_ANIMATION 519 +#define MCI_DEVTYPE_DIGITAL_VIDEO 520 +#define MCI_DEVTYPE_OTHER 521 +#define MCI_DEVTYPE_WAVEFORM_AUDIO 522 +#define MCI_DEVTYPE_SEQUENCER 523 +#define MCI_DEVTYPE_FIRST MCI_DEVTYPE_VCR +#define MCI_DEVTYPE_LAST MCI_DEVTYPE_SEQUENCER +#define MCI_DEVTYPE_FIRST_USER 0x1000 +#define MCI_MODE_NOT_READY (MCI_STRING_OFFSET+12) +#define MCI_MODE_STOP (MCI_STRING_OFFSET+13) +#define MCI_MODE_PLAY (MCI_STRING_OFFSET+14) +#define MCI_MODE_RECORD (MCI_STRING_OFFSET+15) +#define MCI_MODE_SEEK (MCI_STRING_OFFSET+16) +#define MCI_MODE_PAUSE (MCI_STRING_OFFSET+17) +#define MCI_MODE_OPEN (MCI_STRING_OFFSET+18) +#define MCI_FORMAT_MILLISECONDS 0 +#define MCI_FORMAT_HMS 1 +#define MCI_FORMAT_MSF 2 +#define MCI_FORMAT_FRAMES 3 +#define MCI_FORMAT_SMPTE_24 4 +#define MCI_FORMAT_SMPTE_25 5 +#define MCI_FORMAT_SMPTE_30 6 +#define MCI_FORMAT_SMPTE_30DROP 7 +#define MCI_FORMAT_BYTES 8 +#define MCI_FORMAT_SAMPLES 9 +#define MCI_FORMAT_TMSF 10 +#define MCI_MSF_MINUTE(t) ((BYTE)(t)) +#define MCI_MSF_SECOND(t) ((BYTE)(((WORD)(t))>>8)) +#define MCI_MSF_FRAME(t) ((BYTE)((t)>>16)) +#define MCI_MAKE_MSF(m,s,f) ((DWORD)(((BYTE)(m)|((WORD)(s)<<8))|(((DWORD)(BYTE)(f))<<16))) +#define MCI_TMSF_TRACK(t) ((BYTE)(t)) +#define MCI_TMSF_MINUTE(t) ((BYTE)(((WORD)(t))>>8)) +#define MCI_TMSF_SECOND(t) ((BYTE)((t)>>16)) +#define MCI_TMSF_FRAME(t) ((BYTE)((t)>>24)) +#define MCI_MAKE_TMSF(t,m,s,f) ((DWORD)(((BYTE)(t)|((WORD)(m)<<8))|(((DWORD)(BYTE)(s)|((WORD)(f)<<8))<<16))) +#define MCI_HMS_HOUR(t) ((BYTE)(t)) +#define MCI_HMS_MINUTE(t) ((BYTE)(((WORD)(t))>>8)) +#define MCI_HMS_SECOND(t) ((BYTE)((t)>>16)) +#define MCI_MAKE_HMS(h,m,s) ((DWORD)(((BYTE)(h)|((WORD)(m)<<8))|(((DWORD)(BYTE)(s))<<16))) +#define MCI_NOTIFY_SUCCESSFUL 1 +#define MCI_NOTIFY_SUPERSEDED 2 +#define MCI_NOTIFY_ABORTED 4 +#define MCI_NOTIFY_FAILURE 8 +#define MCI_NOTIFY 1 +#define MCI_WAIT 2 +#define MCI_FROM 4 +#define MCI_TO 8 +#define MCI_TRACK 16 +#define MCI_OPEN_SHAREABLE 256 +#define MCI_OPEN_ELEMENT 512 +#define MCI_OPEN_ALIAS 1024 +#define MCI_OPEN_ELEMENT_ID 2048 +#define MCI_OPEN_TYPE_ID 0x1000 +#define MCI_OPEN_TYPE 0x2000 +#define MCI_SEEK_TO_START 256 +#define MCI_SEEK_TO_END 512 +#define MCI_STATUS_ITEM 256 +#define MCI_STATUS_START 512 +#define MCI_STATUS_LENGTH 1 +#define MCI_STATUS_POSITION 2 +#define MCI_STATUS_NUMBER_OF_TRACKS 3 +#define MCI_STATUS_MODE 4 +#define MCI_STATUS_MEDIA_PRESENT 5 +#define MCI_STATUS_TIME_FORMAT 6 +#define MCI_STATUS_READY 7 +#define MCI_STATUS_CURRENT_TRACK 8 +#define MCI_INFO_PRODUCT 256 +#define MCI_INFO_FILE 512 +#define MCI_INFO_MEDIA_UPC 1024 +#define MCI_INFO_MEDIA_IDENTITY 2048 +#define MCI_INFO_NAME 0x1000 +#define MCI_INFO_COPYRIGHT 0x2000 +#define MCI_GETDEVCAPS_ITEM 256 +#define MCI_GETDEVCAPS_CAN_RECORD 1 +#define MCI_GETDEVCAPS_HAS_AUDIO 2 +#define MCI_GETDEVCAPS_HAS_VIDEO 3 +#define MCI_GETDEVCAPS_DEVICE_TYPE 4 +#define MCI_GETDEVCAPS_USES_FILES 5 +#define MCI_GETDEVCAPS_COMPOUND_DEVICE 6 +#define MCI_GETDEVCAPS_CAN_EJECT 7 +#define MCI_GETDEVCAPS_CAN_PLAY 8 +#define MCI_GETDEVCAPS_CAN_SAVE 9 +#define MCI_SYSINFO_QUANTITY 256 +#define MCI_SYSINFO_OPEN 512 +#define MCI_SYSINFO_NAME 1024 +#define MCI_SYSINFO_INSTALLNAME 2048 +#define MCI_SET_DOOR_OPEN 256 +#define MCI_SET_DOOR_CLOSED 512 +#define MCI_SET_TIME_FORMAT 1024 +#define MCI_SET_AUDIO 2048 +#define MCI_SET_VIDEO 0x1000 +#define MCI_SET_ON 0x2000 +#define MCI_SET_OFF 0x4000 +#define MCI_SET_AUDIO_ALL 0 +#define MCI_SET_AUDIO_LEFT 1 +#define MCI_SET_AUDIO_RIGHT 2 +#define MCI_BREAK_KEY 256 +#define MCI_BREAK_HWND 512 +#define MCI_BREAK_OFF 1024 +#define MCI_RECORD_INSERT 256 +#define MCI_RECORD_OVERWRITE 512 +#define MCI_SAVE_FILE 256 +#define MCI_LOAD_FILE 256 +#define MCI_VD_MODE_PARK (MCI_VD_OFFSET+1) +#define MCI_VD_MEDIA_CLV (MCI_VD_OFFSET+2) +#define MCI_VD_MEDIA_CAV (MCI_VD_OFFSET+3) +#define MCI_VD_MEDIA_OTHER (MCI_VD_OFFSET+4) +#define MCI_VD_FORMAT_TRACK 0x4001 +#define MCI_VD_PLAY_REVERSE 0x10000 +#define MCI_VD_PLAY_FAST 0x20000 +#define MCI_VD_PLAY_SPEED 0x40000 +#define MCI_VD_PLAY_SCAN 0x80000 +#define MCI_VD_PLAY_SLOW 0x100000 +#define MCI_VD_SEEK_REVERSE 0x10000 +#define MCI_VD_STATUS_SPEED 0x4002 +#define MCI_VD_STATUS_FORWARD 0x4003 +#define MCI_VD_STATUS_MEDIA_TYPE 0x4004 +#define MCI_VD_STATUS_SIDE 0x4005 +#define MCI_VD_STATUS_DISC_SIZE 0x4006 +#define MCI_VD_GETDEVCAPS_CLV 0x10000 +#define MCI_VD_GETDEVCAPS_CAV 0x20000 +#define MCI_VD_SPIN_UP 0x10000 +#define MCI_VD_SPIN_DOWN 0x20000 +#define MCI_VD_GETDEVCAPS_CAN_REVERSE 0x4002 +#define MCI_VD_GETDEVCAPS_FAST_RATE 0x4003 +#define MCI_VD_GETDEVCAPS_SLOW_RATE 0x4004 +#define MCI_VD_GETDEVCAPS_NORMAL_RATE 0x4005 +#define MCI_VD_STEP_FRAMES 0x10000 +#define MCI_VD_STEP_REVERSE 0x20000 +#define MCI_VD_ESCAPE_STRING 256 +#define MCI_CDA_STATUS_TYPE_TRACK 0x4001 +#define MCI_CDA_TRACK_AUDIO MCI_CD_OFFSET +#define MCI_CDA_TRACK_OTHER (MCI_CD_OFFSET+1) +#define MCI_WAVE_PCM MCI_WAVE_OFFSET +#define MCI_WAVE_MAPPER (MCI_WAVE_OFFSET+1) +#define MCI_WAVE_OPEN_BUFFER 0x10000 +#define MCI_WAVE_SET_FORMATTAG 0x10000 +#define MCI_WAVE_SET_CHANNELS 0x20000 +#define MCI_WAVE_SET_SAMPLESPERSEC 0x40000 +#define MCI_WAVE_SET_AVGBYTESPERSEC 0x80000 +#define MCI_WAVE_SET_BLOCKALIGN 0x100000 +#define MCI_WAVE_SET_BITSPERSAMPLE 0x200000 +#define MCI_WAVE_INPUT 0x400000 +#define MCI_WAVE_OUTPUT 0x800000 +#define MCI_WAVE_STATUS_FORMATTAG 0x4001 +#define MCI_WAVE_STATUS_CHANNELS 0x4002 +#define MCI_WAVE_STATUS_SAMPLESPERSEC 0x4003 +#define MCI_WAVE_STATUS_AVGBYTESPERSEC 0x4004 +#define MCI_WAVE_STATUS_BLOCKALIGN 0x4005 +#define MCI_WAVE_STATUS_BITSPERSAMPLE 0x4006 +#define MCI_WAVE_STATUS_LEVEL 0x4007 +#define MCI_WAVE_SET_ANYINPUT 0x4000000 +#define MCI_WAVE_SET_ANYOUTPUT 0x8000000 +#define MCI_WAVE_GETDEVCAPS_INPUTS 0x4001 +#define MCI_WAVE_GETDEVCAPS_OUTPUTS 0x4002 +#define MCI_SEQ_DIV_PPQN MCI_SEQ_OFFSET +#define MCI_SEQ_DIV_SMPTE_24 (MCI_SEQ_OFFSET+1) +#define MCI_SEQ_DIV_SMPTE_25 (MCI_SEQ_OFFSET+2) +#define MCI_SEQ_DIV_SMPTE_30DROP (MCI_SEQ_OFFSET+3) +#define MCI_SEQ_DIV_SMPTE_30 (MCI_SEQ_OFFSET+4) +#define MCI_SEQ_FORMAT_SONGPTR 0x4001 +#define MCI_SEQ_FILE 0x4002 +#define MCI_SEQ_MIDI 0x4003 +#define MCI_SEQ_SMPTE 0x4004 +#define MCI_SEQ_NONE 65533 +#define MCI_SEQ_MAPPER 65535 +#define MCI_SEQ_STATUS_TEMPO 0x4002 +#define MCI_SEQ_STATUS_PORT 0x4003 +#define MCI_SEQ_STATUS_SLAVE 0x4007 +#define MCI_SEQ_STATUS_MASTER 0x4008 +#define MCI_SEQ_STATUS_OFFSET 0x4009 +#define MCI_SEQ_STATUS_DIVTYPE 0x400A +#define MCI_SEQ_STATUS_NAME 0x400B +#define MCI_SEQ_STATUS_COPYRIGHT 0x400C +#define MCI_SEQ_SET_TEMPO 0x10000 +#define MCI_SEQ_SET_PORT 0x20000 +#define MCI_SEQ_SET_SLAVE 0x40000 +#define MCI_SEQ_SET_MASTER 0x80000 +#define MCI_SEQ_SET_OFFSET 0x1000000 +#define MCI_ANIM_OPEN_WS 0x10000 +#define MCI_ANIM_OPEN_PARENT 0x20000 +#define MCI_ANIM_OPEN_NOSTATIC 0x40000 +#define MCI_ANIM_PLAY_SPEED 0x10000 +#define MCI_ANIM_PLAY_REVERSE 0x20000 +#define MCI_ANIM_PLAY_FAST 0x40000 +#define MCI_ANIM_PLAY_SLOW 0x80000 +#define MCI_ANIM_PLAY_SCAN 0x100000 +#define MCI_ANIM_STEP_REVERSE 0x10000 +#define MCI_ANIM_STEP_FRAMES 0x20000 +#define MCI_ANIM_STATUS_SPEED 0x4001 +#define MCI_ANIM_STATUS_FORWARD 0x4002 +#define MCI_ANIM_STATUS_HWND 0x4003 +#define MCI_ANIM_STATUS_HPAL 0x4004 +#define MCI_ANIM_STATUS_STRETCH 0x4005 +#define MCI_ANIM_INFO_TEXT 0x10000 +#define MCI_ANIM_GETDEVCAPS_CAN_REVERSE 0x4001 +#define MCI_ANIM_GETDEVCAPS_FAST_RATE 0x4002 +#define MCI_ANIM_GETDEVCAPS_SLOW_RATE 0x4003 +#define MCI_ANIM_GETDEVCAPS_NORMAL_RATE 0x4004 +#define MCI_ANIM_GETDEVCAPS_PALETTES 0x4006 +#define MCI_ANIM_GETDEVCAPS_CAN_STRETCH 0x4007 +#define MCI_ANIM_GETDEVCAPS_MAX_WINDOWS 0x4008 +#define MCI_ANIM_REALIZE_NORM 0x10000 +#define MCI_ANIM_REALIZE_BKGD 0x20000 +#define MCI_ANIM_WINDOW_HWND 0x10000 +#define MCI_ANIM_WINDOW_STATE 0x40000 +#define MCI_ANIM_WINDOW_TEXT 0x80000 +#define MCI_ANIM_WINDOW_ENABLE_STRETCH 0x100000 +#define MCI_ANIM_WINDOW_DISABLE_STRETCH 0x200000 +#define MCI_ANIM_WINDOW_DEFAULT 0xL +#define MCI_ANIM_RECT 0x10000 +#define MCI_ANIM_PUT_SOURCE 0x20000 +#define MCI_ANIM_PUT_DESTINATION 0x40000 +#define MCI_ANIM_WHERE_SOURCE 0x20000 +#define MCI_ANIM_WHERE_DESTINATION 0x40000 +#define MCI_ANIM_UPDATE_HDC 0x20000 +#define MCI_OVLY_OPEN_WS 0x10000 +#define MCI_OVLY_OPEN_PARENT 0x20000 +#define MCI_OVLY_STATUS_HWND 0x4001 +#define MCI_OVLY_STATUS_STRETCH 0x4002 +#define MCI_OVLY_INFO_TEXT 0x10000 +#define MCI_OVLY_GETDEVCAPS_CAN_STRETCH 0x4001 +#define MCI_OVLY_GETDEVCAPS_CAN_FREEZE 0x4002 +#define MCI_OVLY_GETDEVCAPS_MAX_WINDOWS 0x4003 +#define MCI_OVLY_WINDOW_HWND 0x10000 +#define MCI_OVLY_WINDOW_STATE 0x40000 +#define MCI_OVLY_WINDOW_TEXT 0x80000 +#define MCI_OVLY_WINDOW_ENABLE_STRETCH 0x100000 +#define MCI_OVLY_WINDOW_DISABLE_STRETCH 0x200000 +#define MCI_OVLY_WINDOW_DEFAULT 0xL +#define MCI_OVLY_RECT 0x10000 +#define MCI_OVLY_PUT_SOURCE 0x20000 +#define MCI_OVLY_PUT_DESTINATION 0x40000 +#define MCI_OVLY_PUT_FRAME 0x80000 +#define MCI_OVLY_PUT_VIDEO 0x100000 +#define MCI_OVLY_WHERE_SOURCE 0x20000 +#define MCI_OVLY_WHERE_DESTINATION 0x40000 +#define MCI_OVLY_WHERE_FRAME 0x80000 +#define MCI_OVLY_WHERE_VIDEO 0x100000 +#define NEWTRANSPARENT 3 +#define QUERYROPSUPPORT 40 +#define SELECTDIB 41 +#define DIBINDEX(n) MAKELONG((n),0x10FF) +#define SC_SCREENSAVE 0xF140 +#define CAPS1 94 +#define C1_TRANSPARENT 1 +#ifndef SEEK_SET +#define SEEK_SET 0 +#endif +#ifndef SEEK_CUR +#define SEEK_CUR 1 +#endif +#ifndef SEEK_END +#define SEEK_END 2 +#endif + +typedef DWORD MCIERROR; +typedef UINT MCIDEVICEID; +typedef UINT(CALLBACK *YIELDPROC)(MCIDEVICEID,DWORD); +typedef UINT MMVERSION; +typedef UINT MMRESULT; +typedef struct mmtime_tag { + UINT wType; + union { + DWORD ms; + DWORD sample; + DWORD cb; + DWORD ticks; + struct { + BYTE hour; + BYTE min; + BYTE sec; + BYTE frame; + BYTE fps; + BYTE dummy; + BYTE pad[2]; + } smpte; + struct { + DWORD songptrpos; + } midi; + } u; +} MMTIME,*PMMTIME,*LPMMTIME; +DECLARE_HANDLE(HDRVR); +typedef struct tagDRVCONFIGINFO { + DWORD dwDCISize; + LPCWSTR lpszDCISectionName; + LPCWSTR lpszDCIAliasName; +} DRVCONFIGINFO,*PDRVCONFIGINFO,*LPDRVCONFIGINFO; +typedef struct DRVCONFIGINFOEX { + DWORD dwDCISize; + LPCWSTR lpszDCISectionName; + LPCWSTR lpszDCIAliasName; + DWORD dnDevNode; +} DRVCONFIGINFOEX,*PDRVCONFIGINFOEX,*LPDRVCONFIGINFOEX; +typedef LRESULT(CALLBACK* DRIVERPROC)(DWORD,HDRVR,UINT,LPARAM,LPARAM); +typedef void (CALLBACK DRVCALLBACK)(HDRVR,UINT,DWORD,DWORD,DWORD); +typedef DRVCALLBACK *LPDRVCALLBACK; +typedef DRVCALLBACK *PDRVCALLBACK; +DECLARE_HANDLE(HWAVE); +DECLARE_HANDLE(HWAVEIN); +DECLARE_HANDLE(HWAVEOUT); +typedef HWAVEIN *LPHWAVEIN; +typedef HWAVEOUT *LPHWAVEOUT; +typedef DRVCALLBACK WAVECALLBACK; +typedef WAVECALLBACK *LPWAVECALLBACK; +typedef struct wavehdr_tag { + LPSTR lpData; + DWORD dwBufferLength; + DWORD dwBytesRecorded; + DWORD dwUser; + DWORD dwFlags; + DWORD dwLoops; + struct wavehdr_tag *lpNext; + DWORD reserved; +} WAVEHDR,*PWAVEHDR,*LPWAVEHDR; +typedef struct tagWAVEOUTCAPSA { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + CHAR szPname[MAXPNAMELEN]; + DWORD dwFormats; + WORD wChannels; + WORD wReserved1; + DWORD dwSupport; +} WAVEOUTCAPSA,*PWAVEOUTCAPSA,*LPWAVEOUTCAPSA; +typedef struct tagWAVEOUTCAPSW { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + WCHAR szPname[MAXPNAMELEN]; + DWORD dwFormats; + WORD wChannels; + WORD wReserved1; + DWORD dwSupport; +} WAVEOUTCAPSW,*PWAVEOUTCAPSW,*LPWAVEOUTCAPSW; +typedef struct tagWAVEINCAPSA { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + CHAR szPname[MAXPNAMELEN]; + DWORD dwFormats; + WORD wChannels; + WORD wReserved1; +} WAVEINCAPSA,*PWAVEINCAPSA,*LPWAVEINCAPSA; +typedef struct tagWAVEINCAPSW { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + WCHAR szPname[MAXPNAMELEN]; + DWORD dwFormats; + WORD wChannels; + WORD wReserved1; +} WAVEINCAPSW,*PWAVEINCAPSW,*LPWAVEINCAPSW; +typedef struct waveformat_tag { + WORD wFormatTag; + WORD nChannels; + DWORD nSamplesPerSec; + DWORD nAvgBytesPerSec; + WORD nBlockAlign; +} WAVEFORMAT,*PWAVEFORMAT,*LPWAVEFORMAT; +typedef struct pcmwaveformat_tag { + WAVEFORMAT wf; + WORD wBitsPerSample; +} PCMWAVEFORMAT, *PPCMWAVEFORMAT,*LPPCMWAVEFORMAT; +#ifndef _LPCWAVEFORMATEX_DEFINED +#define _LPCWAVEFORMATEX_DEFINED +#define _WAVEFORMATEX_ +typedef struct tWAVEFORMATEX { + WORD wFormatTag; + WORD nChannels; + DWORD nSamplesPerSec; + DWORD nAvgBytesPerSec; + WORD nBlockAlign; + WORD wBitsPerSample; + WORD cbSize; +} WAVEFORMATEX,*PWAVEFORMATEX,*LPWAVEFORMATEX; +typedef const WAVEFORMATEX *LPCWAVEFORMATEX; +#endif +DECLARE_HANDLE(HMIDI); +DECLARE_HANDLE(HMIDIIN); +DECLARE_HANDLE(HMIDIOUT); +DECLARE_HANDLE(HMIDISTRM); +typedef HMIDI *LPHMIDI; +typedef HMIDIIN *LPHMIDIIN; +typedef HMIDIOUT *LPHMIDIOUT; +typedef HMIDISTRM *LPHMIDISTRM; +typedef DRVCALLBACK MIDICALLBACK; +typedef MIDICALLBACK *LPMIDICALLBACK; +typedef WORD PATCHARRAY[MIDIPATCHSIZE]; +typedef WORD *LPPATCHARRAY; +typedef WORD KEYARRAY[MIDIPATCHSIZE]; +typedef WORD *LPKEYARRAY; +typedef struct tagMIDIOUTCAPSA { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + CHAR szPname[MAXPNAMELEN]; + WORD wTechnology; + WORD wVoices; + WORD wNotes; + WORD wChannelMask; + DWORD dwSupport; +} MIDIOUTCAPSA,*PMIDIOUTCAPSA,*LPMIDIOUTCAPSA; +typedef struct tagMIDIOUTCAPSW { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + WCHAR szPname[MAXPNAMELEN]; + WORD wTechnology; + WORD wVoices; + WORD wNotes; + WORD wChannelMask; + DWORD dwSupport; +} MIDIOUTCAPSW,*PMIDIOUTCAPSW,*LPMIDIOUTCAPSW; +typedef struct tagMIDIINCAPSA { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + CHAR szPname[MAXPNAMELEN]; + DWORD dwSupport; +} MIDIINCAPSA,*PMIDIINCAPSA,*LPMIDIINCAPSA; +typedef struct tagMIDIINCAPSW { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + WCHAR szPname[MAXPNAMELEN]; + DWORD dwSupport; +} MIDIINCAPSW,*PMIDIINCAPSW,*NPMIDIINCAPSW,*LPMIDIINCAPSW; +typedef struct midihdr_tag { + LPSTR lpData; + DWORD dwBufferLength; + DWORD dwBytesRecorded; + DWORD dwUser; + DWORD dwFlags; + struct midihdr_tag *lpNext; + DWORD reserved; + DWORD dwOffset; + DWORD dwReserved[8]; +} MIDIHDR,*PMIDIHDR,*LPMIDIHDR; +typedef struct midievent_tag { + DWORD dwDeltaTime; + DWORD dwStreamID; + DWORD dwEvent; + DWORD dwParms[1]; +} MIDIEVENT; +typedef struct midistrmbuffver_tag { + DWORD dwVersion; + DWORD dwMid; + DWORD dwOEMVersion; +} MIDISTRMBUFFVER; +typedef struct midiproptimediv_tag { + DWORD cbStruct; + DWORD dwTimeDiv; +} MIDIPROPTIMEDIV,*LPMIDIPROPTIMEDIV; +typedef struct midiproptempo_tag { + DWORD cbStruct; + DWORD dwTempo; +} MIDIPROPTEMPO,*LPMIDIPROPTEMPO; +typedef struct tagAUXCAPSA { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + CHAR szPname[MAXPNAMELEN]; + WORD wTechnology; + WORD wReserved1; + DWORD dwSupport; +} AUXCAPSA,*PAUXCAPSA,*LPAUXCAPSA; +typedef struct tagAUXCAPSW { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + WCHAR szPname[MAXPNAMELEN]; + WORD wTechnology; + WORD wReserved1; + DWORD dwSupport; +} AUXCAPSW,*PAUXCAPSW,*LPAUXCAPSW; +DECLARE_HANDLE(HMIXEROBJ); +typedef HMIXEROBJ *LPHMIXEROBJ; +DECLARE_HANDLE(HMIXER); +typedef HMIXER *LPHMIXER; +typedef struct tagMIXERCAPSA { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + CHAR szPname[MAXPNAMELEN]; + DWORD fdwSupport; + DWORD cDestinations; +} MIXERCAPSA,*PMIXERCAPSA,*LPMIXERCAPSA; +typedef struct tagMIXERCAPSW { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + WCHAR szPname[MAXPNAMELEN]; + DWORD fdwSupport; + DWORD cDestinations; +} MIXERCAPSW,*PMIXERCAPSW,*LPMIXERCAPSW; +typedef struct tagMIXERLINEA { + DWORD cbStruct; + DWORD dwDestination; + DWORD dwSource; + DWORD dwLineID; + DWORD fdwLine; + DWORD dwUser; + DWORD dwComponentType; + DWORD cChannels; + DWORD cConnections; + DWORD cControls; + CHAR szShortName[MIXER_SHORT_NAME_CHARS]; + CHAR szName[MIXER_LONG_NAME_CHARS]; + struct { + DWORD dwType; + DWORD dwDeviceID; + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + CHAR szPname[MAXPNAMELEN]; + } Target; +} MIXERLINEA,*PMIXERLINEA,*LPMIXERLINEA; +typedef struct tagMIXERLINEW { + DWORD cbStruct; + DWORD dwDestination; + DWORD dwSource; + DWORD dwLineID; + DWORD fdwLine; + DWORD dwUser; + DWORD dwComponentType; + DWORD cChannels; + DWORD cConnections; + DWORD cControls; + WCHAR szShortName[MIXER_SHORT_NAME_CHARS]; + WCHAR szName[MIXER_LONG_NAME_CHARS]; + struct { + DWORD dwType; + DWORD dwDeviceID; + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + WCHAR szPname[MAXPNAMELEN]; + } Target; +} MIXERLINEW,*PMIXERLINEW,*LPMIXERLINEW; +typedef struct tagMIXERCONTROLA { + DWORD cbStruct; + DWORD dwControlID; + DWORD dwControlType; + DWORD fdwControl; + DWORD cMultipleItems; + CHAR szShortName[MIXER_SHORT_NAME_CHARS]; + CHAR szName[MIXER_LONG_NAME_CHARS]; + union { + _ANONYMOUS_STRUCT struct { + LONG lMinimum; + LONG lMaximum; + }_STRUCT_NAME(s); + _ANONYMOUS_STRUCT struct { + DWORD dwMinimum; + DWORD dwMaximum; + }_STRUCT_NAME(s1); + DWORD dwReserved[6]; + } Bounds; + union { + DWORD cSteps; + DWORD cbCustomData; + DWORD dwReserved[6]; + } Metrics; +} MIXERCONTROLA,*PMIXERCONTROLA,*LPMIXERCONTROLA; +typedef struct tagMIXERCONTROLW { + DWORD cbStruct; + DWORD dwControlID; + DWORD dwControlType; + DWORD fdwControl; + DWORD cMultipleItems; + WCHAR szShortName[MIXER_SHORT_NAME_CHARS]; + WCHAR szName[MIXER_LONG_NAME_CHARS]; + union { + _ANONYMOUS_STRUCT struct { + LONG lMinimum; + LONG lMaximum; + }_STRUCT_NAME(s); + _ANONYMOUS_STRUCT struct { + DWORD dwMinimum; + DWORD dwMaximum; + }_STRUCT_NAME(s1); + DWORD dwReserved[6]; + } Bounds; + union { + DWORD cSteps; + DWORD cbCustomData; + DWORD dwReserved[6]; + } Metrics; +} MIXERCONTROLW,*PMIXERCONTROLW,*LPMIXERCONTROLW; +typedef struct tagMIXERLINECONTROLSA { + DWORD cbStruct; + DWORD dwLineID; + _ANONYMOUS_UNION union { + DWORD dwControlID; + DWORD dwControlType; + } DUMMYUNIONNAME; + DWORD cControls; + DWORD cbmxctrl; + LPMIXERCONTROLA pamxctrl; +} MIXERLINECONTROLSA,*PMIXERLINECONTROLSA,*LPMIXERLINECONTROLSA; +typedef struct tagMIXERLINECONTROLSW { + DWORD cbStruct; + DWORD dwLineID; + _ANONYMOUS_UNION union { + DWORD dwControlID; + DWORD dwControlType; + } DUMMYUNIONNAME; + DWORD cControls; + DWORD cbmxctrl; + LPMIXERCONTROLW pamxctrl; +} MIXERLINECONTROLSW,*PMIXERLINECONTROLSW,*LPMIXERLINECONTROLSW; +typedef struct tMIXERCONTROLDETAILS { + DWORD cbStruct; + DWORD dwControlID; + DWORD cChannels; + _ANONYMOUS_UNION union { + HWND hwndOwner; + DWORD cMultipleItems; + } DUMMYUNIONNAME; + DWORD cbDetails; + PVOID paDetails; +} MIXERCONTROLDETAILS,*PMIXERCONTROLDETAILS,*LPMIXERCONTROLDETAILS; +typedef struct tagMIXERCONTROLDETAILS_LISTTEXTA { + DWORD dwParam1; + DWORD dwParam2; + CHAR szName[MIXER_LONG_NAME_CHARS]; +} MIXERCONTROLDETAILS_LISTTEXTA,*PMIXERCONTROLDETAILS_LISTTEXTA,*LPMIXERCONTROLDETAILS_LISTTEXTA; +typedef struct tagMIXERCONTROLDETAILS_LISTTEXTW { + DWORD dwParam1; + DWORD dwParam2; + WCHAR szName[MIXER_LONG_NAME_CHARS]; +} MIXERCONTROLDETAILS_LISTTEXTW,*PMIXERCONTROLDETAILS_LISTTEXTW,*LPMIXERCONTROLDETAILS_LISTTEXTW; +typedef struct tMIXERCONTROLDETAILS_BOOLEAN { + LONG fValue; +} MIXERCONTROLDETAILS_BOOLEAN,*PMIXERCONTROLDETAILS_BOOLEAN,*LPMIXERCONTROLDETAILS_BOOLEAN; +typedef struct tMIXERCONTROLDETAILS_SIGNED { + LONG lValue; +} MIXERCONTROLDETAILS_SIGNED,*PMIXERCONTROLDETAILS_SIGNED,*LPMIXERCONTROLDETAILS_SIGNED; +typedef struct tMIXERCONTROLDETAILS_UNSIGNED { + DWORD dwValue; +} MIXERCONTROLDETAILS_UNSIGNED,*PMIXERCONTROLDETAILS_UNSIGNED,*LPMIXERCONTROLDETAILS_UNSIGNED; +typedef void(CALLBACK TIMECALLBACK)(UINT,UINT,DWORD,DWORD,DWORD); +typedef TIMECALLBACK *LPTIMECALLBACK; +typedef struct timecaps_tag { + UINT wPeriodMin; + UINT wPeriodMax; +} TIMECAPS,*PTIMECAPS,*LPTIMECAPS; +typedef struct tagJOYCAPSA { + WORD wMid; + WORD wPid; + CHAR szPname[MAXPNAMELEN]; + UINT wXmin; + UINT wXmax; + UINT wYmin; + UINT wYmax; + UINT wZmin; + UINT wZmax; + UINT wNumButtons; + UINT wPeriodMin; + UINT wPeriodMax; + UINT wRmin; + UINT wRmax; + UINT wUmin; + UINT wUmax; + UINT wVmin; + UINT wVmax; + UINT wCaps; + UINT wMaxAxes; + UINT wNumAxes; + UINT wMaxButtons; + CHAR szRegKey[MAXPNAMELEN]; + CHAR szOEMVxD[MAX_JOYSTICKOEMVXDNAME]; +} JOYCAPSA,*PJOYCAPSA,*LPJOYCAPSA; +typedef struct tagJOYCAPSW { + WORD wMid; + WORD wPid; + WCHAR szPname[MAXPNAMELEN]; + UINT wXmin; + UINT wXmax; + UINT wYmin; + UINT wYmax; + UINT wZmin; + UINT wZmax; + UINT wNumButtons; + UINT wPeriodMin; + UINT wPeriodMax; + UINT wRmin; + UINT wRmax; + UINT wUmin; + UINT wUmax; + UINT wVmin; + UINT wVmax; + UINT wCaps; + UINT wMaxAxes; + UINT wNumAxes; + UINT wMaxButtons; + WCHAR szRegKey[MAXPNAMELEN]; + WCHAR szOEMVxD[MAX_JOYSTICKOEMVXDNAME]; +} JOYCAPSW,*PJOYCAPSW,*LPJOYCAPSW; +typedef struct joyinfo_tag { + UINT wXpos; + UINT wYpos; + UINT wZpos; + UINT wButtons; +} JOYINFO,*PJOYINFO,*LPJOYINFO; +typedef struct joyinfoex_tag { + DWORD dwSize; + DWORD dwFlags; + DWORD dwXpos; + DWORD dwYpos; + DWORD dwZpos; + DWORD dwRpos; + DWORD dwUpos; + DWORD dwVpos; + DWORD dwButtons; + DWORD dwButtonNumber; + DWORD dwPOV; + DWORD dwReserved1; + DWORD dwReserved2; +} JOYINFOEX,*PJOYINFOEX,*LPJOYINFOEX; +typedef DWORD FOURCC; +typedef char *HPSTR; +DECLARE_HANDLE(HMMIO); +typedef LRESULT (CALLBACK MMIOPROC)(LPSTR,UINT,LPARAM,LPARAM); +typedef MMIOPROC *LPMMIOPROC; +typedef struct _MMIOINFO { + DWORD dwFlags; + FOURCC fccIOProc; + LPMMIOPROC pIOProc; + UINT wErrorRet; + HTASK htask; + LONG cchBuffer; + HPSTR pchBuffer; + HPSTR pchNext; + HPSTR pchEndRead; + HPSTR pchEndWrite; + LONG lBufOffset; + LONG lDiskOffset; + DWORD adwInfo[3]; + DWORD dwReserved1; + DWORD dwReserved2; + HMMIO hmmio; +} MMIOINFO,*PMMIOINFO,*LPMMIOINFO; +typedef const MMIOINFO *LPCMMIOINFO; +typedef struct _MMCKINFO { + FOURCC ckid; + DWORD cksize; + FOURCC fccType; + DWORD dwDataOffset; + DWORD dwFlags; +} MMCKINFO,*PMMCKINFO,*LPMMCKINFO; +typedef const MMCKINFO *LPCMMCKINFO; +typedef struct tagMCI_GENERIC_PARMS { + DWORD dwCallback; +} MCI_GENERIC_PARMS,*PMCI_GENERIC_PARMS,*LPMCI_GENERIC_PARMS; +typedef struct tagMCI_OPEN_PARMSA { + DWORD dwCallback; + MCIDEVICEID wDeviceID; + LPCSTR lpstrDeviceType; + LPCSTR lpstrElementName; + LPCSTR lpstrAlias; +} MCI_OPEN_PARMSA,*PMCI_OPEN_PARMSA,*LPMCI_OPEN_PARMSA; +typedef struct tagMCI_OPEN_PARMSW { + DWORD dwCallback; + MCIDEVICEID wDeviceID; + LPCWSTR lpstrDeviceType; + LPCWSTR lpstrElementName; + LPCWSTR lpstrAlias; +} MCI_OPEN_PARMSW,*PMCI_OPEN_PARMSW,*LPMCI_OPEN_PARMSW; +typedef struct tagMCI_PLAY_PARMS { + DWORD dwCallback; + DWORD dwFrom; + DWORD dwTo; +} MCI_PLAY_PARMS,*PMCI_PLAY_PARMS,*LPMCI_PLAY_PARMS; +typedef struct tagMCI_SEEK_PARMS { + DWORD dwCallback; + DWORD dwTo; +} MCI_SEEK_PARMS, *PMCI_SEEK_PARMS,*LPMCI_SEEK_PARMS; +typedef struct tagMCI_STATUS_PARMS { + DWORD dwCallback; + DWORD dwReturn; + DWORD dwItem; + DWORD dwTrack; +} MCI_STATUS_PARMS,*PMCI_STATUS_PARMS,*LPMCI_STATUS_PARMS; +typedef struct tagMCI_INFO_PARMSA { + DWORD dwCallback; + LPSTR lpstrReturn; + DWORD dwRetSize; +} MCI_INFO_PARMSA,*LPMCI_INFO_PARMSA; +typedef struct tagMCI_INFO_PARMSW { + DWORD dwCallback; + LPWSTR lpstrReturn; + DWORD dwRetSize; +} MCI_INFO_PARMSW,*LPMCI_INFO_PARMSW; +typedef struct tagMCI_GETDEVCAPS_PARMS { + DWORD dwCallback; + DWORD dwReturn; + DWORD dwItem; +} MCI_GETDEVCAPS_PARMS,*PMCI_GETDEVCAPS_PARMS,*LPMCI_GETDEVCAPS_PARMS; +typedef struct tagMCI_SYSINFO_PARMSA { + DWORD dwCallback; + LPSTR lpstrReturn; + DWORD dwRetSize; + DWORD dwNumber; + UINT wDeviceType; +} MCI_SYSINFO_PARMSA,*PMCI_SYSINFO_PARMSA,*LPMCI_SYSINFO_PARMSA; +typedef struct tagMCI_SYSINFO_PARMSW { + DWORD dwCallback; + LPWSTR lpstrReturn; + DWORD dwRetSize; + DWORD dwNumber; + UINT wDeviceType; +} MCI_SYSINFO_PARMSW,*PMCI_SYSINFO_PARMSW,*LPMCI_SYSINFO_PARMSW; +typedef struct tagMCI_SET_PARMS { + DWORD dwCallback; + DWORD dwTimeFormat; + DWORD dwAudio; +} MCI_SET_PARMS,*PMCI_SET_PARMS,*LPMCI_SET_PARMS; +typedef struct tagMCI_BREAK_PARMS { + DWORD dwCallback; + int nVirtKey; + HWND hwndBreak; +} MCI_BREAK_PARMS,*PMCI_BREAK_PARMS,*LPMCI_BREAK_PARMS; +typedef struct tagMCI_SAVE_PARMSA { + DWORD dwCallback; + LPCSTR lpfilename; +} MCI_SAVE_PARMSA,*PMCI_SAVE_PARMSA,*LPMCI_SAVE_PARMSA; +typedef struct tagMCI_SAVE_PARMSW { + DWORD dwCallback; + LPCWSTR lpfilename; +} MCI_SAVE_PARMSW,*PMCI_SAVE_PARMSW,*LPMCI_SAVE_PARMSW; +typedef struct tagMCI_LOAD_PARMSA { + DWORD dwCallback; + LPCSTR lpfilename; +} MCI_LOAD_PARMSA,*PMCI_LOAD_PARMSA,*LPMCI_LOAD_PARMSA; +typedef struct tagMCI_LOAD_PARMSW { + DWORD dwCallback; + LPCWSTR lpfilename; +} MCI_LOAD_PARMSW,*PMCI_LOAD_PARMSW,*LPMCI_LOAD_PARMSW; +typedef struct tagMCI_RECORD_PARMS { + DWORD dwCallback; + DWORD dwFrom; + DWORD dwTo; +} MCI_RECORD_PARMS,*LPMCI_RECORD_PARMS; +typedef struct tagMCI_VD_PLAY_PARMS { + DWORD dwCallback; + DWORD dwFrom; + DWORD dwTo; + DWORD dwSpeed; +} MCI_VD_PLAY_PARMS,*PMCI_VD_PLAY_PARMS,*LPMCI_VD_PLAY_PARMS; +typedef struct tagMCI_VD_STEP_PARMS { + DWORD dwCallback; + DWORD dwFrames; +} MCI_VD_STEP_PARMS,*PMCI_VD_STEP_PARMS,*LPMCI_VD_STEP_PARMS; +typedef struct tagMCI_VD_ESCAPE_PARMSA { + DWORD dwCallback; + LPCSTR lpstrCommand; +} MCI_VD_ESCAPE_PARMSA,*PMCI_VD_ESCAPE_PARMSA,*LPMCI_VD_ESCAPE_PARMSA; +typedef struct tagMCI_VD_ESCAPE_PARMSW { + DWORD dwCallback; + LPCWSTR lpstrCommand; +} MCI_VD_ESCAPE_PARMSW,*PMCI_VD_ESCAPE_PARMSW,*LPMCI_VD_ESCAPE_PARMSW; +typedef struct tagMCI_WAVE_OPEN_PARMSA { + DWORD dwCallback; + MCIDEVICEID wDeviceID; + LPCSTR lpstrDeviceType; + LPCSTR lpstrElementName; + LPCSTR lpstrAlias; + DWORD dwBufferSeconds; +} MCI_WAVE_OPEN_PARMSA,*PMCI_WAVE_OPEN_PARMSA,*LPMCI_WAVE_OPEN_PARMSA; +typedef struct tagMCI_WAVE_OPEN_PARMSW { + DWORD dwCallback; + MCIDEVICEID wDeviceID; + LPCWSTR lpstrDeviceType; + LPCWSTR lpstrElementName; + LPCWSTR lpstrAlias; + DWORD dwBufferSeconds; +} MCI_WAVE_OPEN_PARMSW,*PMCI_WAVE_OPEN_PARMSW,*LPMCI_WAVE_OPEN_PARMSW; +typedef struct tagMCI_WAVE_DELETE_PARMS { + DWORD dwCallback; + DWORD dwFrom; + DWORD dwTo; +} MCI_WAVE_DELETE_PARMS, *PMCI_WAVE_DELETE_PARMS,*LPMCI_WAVE_DELETE_PARMS; +typedef struct tagMCI_WAVE_SET_PARMS { + DWORD dwCallback; + DWORD dwTimeFormat; + DWORD dwAudio; + UINT wInput; + UINT wOutput; + WORD wFormatTag; + WORD wReserved2; + WORD nChannels; + WORD wReserved3; + DWORD nSamplesPerSec; + DWORD nAvgBytesPerSec; + WORD nBlockAlign; + WORD wReserved4; + WORD wBitsPerSample; + WORD wReserved5; +} MCI_WAVE_SET_PARMS,*PMCI_WAVE_SET_PARMS,*LPMCI_WAVE_SET_PARMS; + +LRESULT WINAPI CloseDriver(HDRVR,LONG,LONG); +HDRVR WINAPI OpenDriver(LPCWSTR,LPCWSTR,LONG); +LRESULT WINAPI SendDriverMessage(HDRVR,UINT,LONG,LONG); +HMODULE WINAPI DrvGetModuleHandle(HDRVR); +HMODULE WINAPI GetDriverModuleHandle(HDRVR); +LRESULT WINAPI DefDriverProc(DWORD,HDRVR,UINT,LPARAM,LPARAM); +UINT WINAPI mmsystemGetVersion(void); +#define OutputDebugStr OutputDebugString +BOOL WINAPI sndPlaySoundA(LPCSTR,UINT); +BOOL WINAPI sndPlaySoundW(LPCWSTR,UINT); +BOOL WINAPI PlaySoundA(LPCSTR,HMODULE,DWORD); +BOOL WINAPI PlaySoundW(LPCWSTR,HMODULE,DWORD); +UINT WINAPI waveOutGetNumDevs(void); +MMRESULT WINAPI waveOutGetDevCapsA(UINT,LPWAVEOUTCAPSA,UINT); +MMRESULT WINAPI waveOutGetDevCapsW(UINT,LPWAVEOUTCAPSW,UINT); +MMRESULT WINAPI waveOutGetVolume(HWAVEOUT,PDWORD); +MMRESULT WINAPI waveOutSetVolume(HWAVEOUT,DWORD); +MMRESULT WINAPI waveOutGetErrorTextA(MMRESULT,LPSTR,UINT); +MMRESULT WINAPI waveOutGetErrorTextW(MMRESULT,LPWSTR,UINT); +MMRESULT WINAPI waveOutOpen(LPHWAVEOUT,UINT,LPCWAVEFORMATEX,DWORD,DWORD,DWORD); +MMRESULT WINAPI waveOutClose(HWAVEOUT); +MMRESULT WINAPI waveOutPrepareHeader(HWAVEOUT,LPWAVEHDR,UINT); +MMRESULT WINAPI waveOutUnprepareHeader(HWAVEOUT,LPWAVEHDR,UINT); +MMRESULT WINAPI waveOutWrite(HWAVEOUT,LPWAVEHDR,UINT); +MMRESULT WINAPI waveOutPause(HWAVEOUT); +MMRESULT WINAPI waveOutRestart(HWAVEOUT); +MMRESULT WINAPI waveOutReset(HWAVEOUT); +MMRESULT WINAPI waveOutBreakLoop(HWAVEOUT); +MMRESULT WINAPI waveOutGetPosition(HWAVEOUT,LPMMTIME,UINT); +MMRESULT WINAPI waveOutGetPitch(HWAVEOUT,PDWORD); +MMRESULT WINAPI waveOutSetPitch(HWAVEOUT,DWORD); +MMRESULT WINAPI waveOutGetPlaybackRate(HWAVEOUT,PDWORD); +MMRESULT WINAPI waveOutSetPlaybackRate(HWAVEOUT,DWORD); +MMRESULT WINAPI waveOutGetID(HWAVEOUT,LPUINT); +MMRESULT WINAPI waveOutMessage(HWAVEOUT,UINT,DWORD,DWORD); +UINT WINAPI waveInGetNumDevs(void); +MMRESULT WINAPI waveInGetDevCapsA(UINT,LPWAVEINCAPSA,UINT); +MMRESULT WINAPI waveInGetDevCapsW(UINT,LPWAVEINCAPSW,UINT); +MMRESULT WINAPI waveInGetErrorTextA(MMRESULT,LPSTR,UINT); +MMRESULT WINAPI waveInGetErrorTextW(MMRESULT,LPWSTR,UINT); +MMRESULT WINAPI waveInOpen(LPHWAVEIN,UINT,LPCWAVEFORMATEX,DWORD*,DWORD*,DWORD); +//MMRESULT WINAPI waveInOpen(LPHWAVEIN,UINT,LPCWAVEFORMATEX,DWORD,DWORD,DWORD); +MMRESULT WINAPI waveInClose(HWAVEIN); +MMRESULT WINAPI waveInPrepareHeader(HWAVEIN,LPWAVEHDR,UINT); +MMRESULT WINAPI waveInUnprepareHeader(HWAVEIN,LPWAVEHDR,UINT); +MMRESULT WINAPI waveInAddBuffer(HWAVEIN,LPWAVEHDR,UINT); +MMRESULT WINAPI waveInStart(HWAVEIN); +MMRESULT WINAPI waveInStop(HWAVEIN); +MMRESULT WINAPI waveInReset(HWAVEIN); +MMRESULT WINAPI waveInGetPosition(HWAVEIN,LPMMTIME,UINT); +MMRESULT WINAPI waveInGetID(HWAVEIN,LPUINT); +MMRESULT WINAPI waveInMessage(HWAVEIN,UINT,DWORD,DWORD); +UINT WINAPI midiOutGetNumDevs(void); +MMRESULT WINAPI midiStreamOpen(LPHMIDISTRM,LPUINT,DWORD,DWORD,DWORD,DWORD); +MMRESULT WINAPI midiStreamClose(HMIDISTRM); +MMRESULT WINAPI midiStreamProperty(HMIDISTRM,LPBYTE,DWORD); +MMRESULT WINAPI midiStreamPosition(HMIDISTRM,LPMMTIME,UINT); +MMRESULT WINAPI midiStreamOut(HMIDISTRM,LPMIDIHDR,UINT); +MMRESULT WINAPI midiStreamPause(HMIDISTRM); +MMRESULT WINAPI midiStreamRestart(HMIDISTRM); +MMRESULT WINAPI midiStreamStop(HMIDISTRM); +MMRESULT WINAPI midiConnect(HMIDI,HMIDIOUT,PVOID); +MMRESULT WINAPI midiDisconnect(HMIDI,HMIDIOUT,PVOID); +MMRESULT WINAPI midiOutGetDevCapsA(UINT,LPMIDIOUTCAPSA,UINT); +MMRESULT WINAPI midiOutGetDevCapsW(UINT,LPMIDIOUTCAPSW,UINT); +MMRESULT WINAPI midiOutGetVolume(HMIDIOUT,PDWORD); +MMRESULT WINAPI midiOutSetVolume(HMIDIOUT,DWORD); +MMRESULT WINAPI midiOutGetErrorTextA(MMRESULT,LPSTR,UINT); +MMRESULT WINAPI midiOutGetErrorTextW(MMRESULT,LPWSTR,UINT); +MMRESULT WINAPI midiOutOpen(LPHMIDIOUT,UINT,DWORD,DWORD,DWORD); +MMRESULT WINAPI midiOutClose(HMIDIOUT); +MMRESULT WINAPI midiOutPrepareHeader(HMIDIOUT,LPMIDIHDR,UINT); +MMRESULT WINAPI midiOutUnprepareHeader(HMIDIOUT,LPMIDIHDR,UINT); +MMRESULT WINAPI midiOutShortMsg(HMIDIOUT,DWORD); +MMRESULT WINAPI midiOutLongMsg(HMIDIOUT,LPMIDIHDR,UINT); +MMRESULT WINAPI midiOutReset(HMIDIOUT); +MMRESULT WINAPI midiOutCachePatches(HMIDIOUT,UINT,LPWORD,UINT); +MMRESULT WINAPI midiOutCacheDrumPatches(HMIDIOUT,UINT,LPWORD,UINT); +MMRESULT WINAPI midiOutGetID(HMIDIOUT,LPUINT); +MMRESULT WINAPI midiOutMessage(HMIDIOUT,UINT,DWORD,DWORD); +UINT WINAPI midiInGetNumDevs(void); +MMRESULT WINAPI midiInGetDevCapsA(UINT,LPMIDIINCAPSA,UINT); +MMRESULT WINAPI midiInGetDevCapsW(UINT,LPMIDIINCAPSW,UINT); +MMRESULT WINAPI midiInGetErrorTextA(MMRESULT,LPSTR,UINT); +MMRESULT WINAPI midiInGetErrorTextW(MMRESULT,LPWSTR,UINT); +MMRESULT WINAPI midiInOpen(LPHMIDIIN,UINT,DWORD,DWORD,DWORD); +MMRESULT WINAPI midiInClose(HMIDIIN); +MMRESULT WINAPI midiInPrepareHeader(HMIDIIN,LPMIDIHDR,UINT); +MMRESULT WINAPI midiInUnprepareHeader(HMIDIIN,LPMIDIHDR,UINT); +MMRESULT WINAPI midiInAddBuffer(HMIDIIN,LPMIDIHDR,UINT); +MMRESULT WINAPI midiInStart(HMIDIIN); +MMRESULT WINAPI midiInStop(HMIDIIN); +MMRESULT WINAPI midiInReset(HMIDIIN); +MMRESULT WINAPI midiInGetID(HMIDIIN,LPUINT); +MMRESULT WINAPI midiInMessage(HMIDIIN,UINT,DWORD,DWORD); +UINT WINAPI auxGetNumDevs(void); +MMRESULT WINAPI auxGetDevCapsA(UINT,LPAUXCAPSA,UINT); +MMRESULT WINAPI auxGetDevCapsW(UINT,LPAUXCAPSW,UINT); +MMRESULT WINAPI auxSetVolume(UINT,DWORD); +MMRESULT WINAPI auxGetVolume(UINT,PDWORD); +MMRESULT WINAPI auxOutMessage(UINT,UINT,DWORD,DWORD); +UINT WINAPI mixerGetNumDevs(void); +MMRESULT WINAPI mixerGetDevCapsA(UINT,LPMIXERCAPSA,UINT); +MMRESULT WINAPI mixerGetDevCapsW(UINT,LPMIXERCAPSW,UINT); +MMRESULT WINAPI mixerOpen(LPHMIXER,UINT,DWORD,DWORD,DWORD); +MMRESULT WINAPI mixerClose(HMIXER); +DWORD WINAPI mixerMessage(HMIXER,UINT,DWORD,DWORD); +MMRESULT WINAPI mixerGetLineInfoA(HMIXEROBJ,LPMIXERLINEA,DWORD); +MMRESULT WINAPI mixerGetLineInfoW(HMIXEROBJ,LPMIXERLINEW,DWORD); +MMRESULT WINAPI mixerGetID(HMIXEROBJ,PUINT,DWORD); +MMRESULT WINAPI mixerGetLineControlsA(HMIXEROBJ,LPMIXERLINECONTROLSA,DWORD); +MMRESULT WINAPI mixerGetLineControlsW(HMIXEROBJ,LPMIXERLINECONTROLSW,DWORD); +MMRESULT WINAPI mixerGetControlDetailsA(HMIXEROBJ,LPMIXERCONTROLDETAILS,DWORD); +MMRESULT WINAPI mixerGetControlDetailsW(HMIXEROBJ,LPMIXERCONTROLDETAILS,DWORD); +MMRESULT WINAPI mixerSetControlDetails(HMIXEROBJ,LPMIXERCONTROLDETAILS,DWORD); +MMRESULT WINAPI timeGetSystemTime(LPMMTIME,UINT); +DWORD WINAPI timeGetTime(void); +MMRESULT WINAPI timeSetEvent(UINT,UINT,LPTIMECALLBACK,DWORD,UINT); +MMRESULT WINAPI timeKillEvent(UINT); +MMRESULT WINAPI timeGetDevCaps(LPTIMECAPS,UINT); +MMRESULT WINAPI timeBeginPeriod(UINT); +MMRESULT WINAPI timeEndPeriod(UINT); +UINT WINAPI joyGetNumDevs(void); +MMRESULT WINAPI joyGetDevCapsA(UINT,LPJOYCAPSA,UINT); +MMRESULT WINAPI joyGetDevCapsW(UINT,LPJOYCAPSW,UINT); +MMRESULT WINAPI joyGetPos(UINT,LPJOYINFO); +MMRESULT WINAPI joyGetPosEx(UINT,LPJOYINFOEX); +MMRESULT WINAPI joyGetThreshold(UINT,LPUINT); +MMRESULT WINAPI joyReleaseCapture(UINT); +MMRESULT WINAPI joySetCapture(HWND,UINT,UINT,BOOL); +MMRESULT WINAPI joySetThreshold(UINT,UINT); +FOURCC WINAPI mmioStringToFOURCCA(LPCSTR,UINT); +FOURCC WINAPI mmioStringToFOURCCW(LPCWSTR,UINT); +LPMMIOPROC WINAPI mmioInstallIOProcA(FOURCC,LPMMIOPROC,DWORD); +LPMMIOPROC WINAPI mmioInstallIOProcW(FOURCC,LPMMIOPROC,DWORD); +HMMIO WINAPI mmioOpenA(LPSTR,LPMMIOINFO,DWORD); +HMMIO WINAPI mmioOpenW(LPWSTR,LPMMIOINFO,DWORD); +MMRESULT WINAPI mmioRenameA(LPCSTR,LPCSTR,LPCMMIOINFO,DWORD); +MMRESULT WINAPI mmioRenameW(LPCWSTR,LPCWSTR,LPCMMIOINFO,DWORD); +MMRESULT WINAPI mmioClose(HMMIO,UINT); +LONG WINAPI mmioRead(HMMIO,HPSTR,LONG); +LONG WINAPI mmioWrite(HMMIO,LPCSTR,LONG); +LONG WINAPI mmioSeek(HMMIO,LONG,int); +MMRESULT WINAPI mmioGetInfo(HMMIO,LPMMIOINFO,UINT); +MMRESULT WINAPI mmioSetInfo(HMMIO,LPCMMIOINFO,UINT); +MMRESULT WINAPI mmioSetBuffer(HMMIO,LPSTR,LONG,UINT); +MMRESULT WINAPI mmioFlush(HMMIO,UINT); +MMRESULT WINAPI mmioAdvance(HMMIO,LPMMIOINFO,UINT); +LRESULT WINAPI mmioSendMessage(HMMIO,UINT,LPARAM,LPARAM); +MMRESULT WINAPI mmioDescend(HMMIO,LPMMCKINFO,const MMCKINFO*,UINT); +MMRESULT WINAPI mmioAscend(HMMIO,LPMMCKINFO,UINT); +MMRESULT WINAPI mmioCreateChunk(HMMIO,LPMMCKINFO,UINT); +MCIERROR WINAPI mciSendCommandA(MCIDEVICEID,UINT,DWORD,DWORD); +MCIERROR WINAPI mciSendCommandW(MCIDEVICEID,UINT,DWORD,DWORD); +MCIERROR WINAPI mciSendStringA(LPCSTR,LPSTR,UINT,HWND); +MCIERROR WINAPI mciSendStringW(LPCWSTR,LPWSTR,UINT,HWND); +MCIDEVICEID WINAPI mciGetDeviceIDA(LPCSTR); +MCIDEVICEID WINAPI mciGetDeviceIDW(LPCWSTR); +MCIDEVICEID WINAPI mciGetDeviceIDFromElementIDA(DWORD,LPCSTR); +MCIDEVICEID WINAPI mciGetDeviceIDFromElementIDW(DWORD,LPCWSTR); +BOOL WINAPI mciGetErrorStringA(MCIERROR,LPSTR,UINT); +BOOL WINAPI mciGetErrorStringW(MCIERROR,LPWSTR,UINT); +BOOL WINAPI mciSetYieldProc(MCIDEVICEID,YIELDPROC,DWORD); +HTASK WINAPI mciGetCreatorTask(MCIDEVICEID); +YIELDPROC WINAPI mciGetYieldProc(MCIDEVICEID,PDWORD); + +typedef struct tagMCI_SEQ_SET_PARMS { + DWORD dwCallback; + DWORD dwTimeFormat; + DWORD dwAudio; + DWORD dwTempo; + DWORD dwPort; + DWORD dwSlave; + DWORD dwMaster; + DWORD dwOffset; +} MCI_SEQ_SET_PARMS,*PMCI_SEQ_SET_PARMS,*LPMCI_SEQ_SET_PARMS; +typedef struct tagMCI_ANIM_OPEN_PARMSA { + DWORD dwCallback; + MCIDEVICEID wDeviceID; + LPCSTR lpstrDeviceType; + LPCSTR lpstrElementName; + LPCSTR lpstrAlias; + DWORD dwStyle; + HWND hWndParent; +} MCI_ANIM_OPEN_PARMSA,*PMCI_ANIM_OPEN_PARMSA,*LPMCI_ANIM_OPEN_PARMSA; +typedef struct tagMCI_ANIM_OPEN_PARMSW { + DWORD dwCallback; + MCIDEVICEID wDeviceID; + LPCWSTR lpstrDeviceType; + LPCWSTR lpstrElementName; + LPCWSTR lpstrAlias; + DWORD dwStyle; + HWND hWndParent; +} MCI_ANIM_OPEN_PARMSW,*PMCI_ANIM_OPEN_PARMSW,*LPMCI_ANIM_OPEN_PARMSW; +typedef struct tagMCI_ANIM_PLAY_PARMS { + DWORD dwCallback; + DWORD dwFrom; + DWORD dwTo; + DWORD dwSpeed; +} MCI_ANIM_PLAY_PARMS,*PMCI_ANIM_PLAY_PARMS,*LPMCI_ANIM_PLAY_PARMS; +typedef struct tagMCI_ANIM_STEP_PARMS { + DWORD dwCallback; + DWORD dwFrames; +} MCI_ANIM_STEP_PARMS,*PMCI_ANIM_STEP_PARMS,*LPMCI_ANIM_STEP_PARMS; +typedef struct tagMCI_ANIM_WINDOW_PARMSA { + DWORD dwCallback; + HWND hWnd; + UINT nCmdShow; + LPCSTR lpstrText; +} MCI_ANIM_WINDOW_PARMSA,*PMCI_ANIM_WINDOW_PARMSA,*LPMCI_ANIM_WINDOW_PARMSA; +typedef struct tagMCI_ANIM_WINDOW_PARMSW { + DWORD dwCallback; + HWND hWnd; + UINT nCmdShow; + LPCWSTR lpstrText; +} MCI_ANIM_WINDOW_PARMSW,*PMCI_ANIM_WINDOW_PARMSW,*LPMCI_ANIM_WINDOW_PARMSW; +typedef struct tagMCI_ANIM_RECT_PARMS { + DWORD dwCallback; +#ifdef MCI_USE_OFFEXT + POINT ptOffset; + POINT ptExtent; +#else + RECT rc; +#endif +} MCI_ANIM_RECT_PARMS,*PMCI_ANIM_RECT_PARMS,*LPMCI_ANIM_RECT_PARMS; +typedef struct tagMCI_ANIM_UPDATE_PARMS { + DWORD dwCallback; + RECT rc; + HDC hDC; +} MCI_ANIM_UPDATE_PARMS,*PMCI_ANIM_UPDATE_PARMS,*LPMCI_ANIM_UPDATE_PARMS; +typedef struct tagMCI_OVLY_OPEN_PARMSA { + DWORD dwCallback; + MCIDEVICEID wDeviceID; + LPCSTR lpstrDeviceType; + LPCSTR lpstrElementName; + LPCSTR lpstrAlias; + DWORD dwStyle; + HWND hWndParent; +} MCI_OVLY_OPEN_PARMSA,*PMCI_OVLY_OPEN_PARMSA,*LPMCI_OVLY_OPEN_PARMSA; +typedef struct tagMCI_OVLY_OPEN_PARMSW { + DWORD dwCallback; + MCIDEVICEID wDeviceID; + LPCWSTR lpstrDeviceType; + LPCWSTR lpstrElementName; + LPCWSTR lpstrAlias; + DWORD dwStyle; + HWND hWndParent; +} MCI_OVLY_OPEN_PARMSW,*PMCI_OVLY_OPEN_PARMSW,*LPMCI_OVLY_OPEN_PARMSW; +typedef struct tagMCI_OVLY_WINDOW_PARMSA { + DWORD dwCallback; + HWND hWnd; + UINT nCmdShow; + LPCSTR lpstrText; +} MCI_OVLY_WINDOW_PARMSA,*PMCI_OVLY_WINDOW_PARMSA,*LPMCI_OVLY_WINDOW_PARMSA; +typedef struct tagMCI_OVLY_WINDOW_PARMSW { + DWORD dwCallback; + HWND hWnd; + UINT nCmdShow; + LPCWSTR lpstrText; +} MCI_OVLY_WINDOW_PARMSW,*PMCI_OVLY_WINDOW_PARMSW,*LPMCI_OVLY_WINDOW_PARMSW; +typedef struct tagMCI_OVLY_RECT_PARMS { + DWORD dwCallback; +#ifdef MCI_USE_OFFEXT + POINT ptOffset; + POINT ptExtent; +#else + RECT rc; +#endif +} MCI_OVLY_RECT_PARMS,*PMCI_OVLY_RECT_PARMS,*LPMCI_OVLY_RECT_PARMS; +typedef struct tagMCI_OVLY_SAVE_PARMSA { + DWORD dwCallback; + LPCSTR lpfilename; + RECT rc; +} MCI_OVLY_SAVE_PARMSA,*PMCI_OVLY_SAVE_PARMSA,*LPMCI_OVLY_SAVE_PARMSA; +typedef struct tagMCI_OVLY_SAVE_PARMSW { + DWORD dwCallback; + LPCWSTR lpfilename; + RECT rc; +} MCI_OVLY_SAVE_PARMSW,*PMCI_OVLY_SAVE_PARMSW,*LPMCI_OVLY_SAVE_PARMSW; +typedef struct tagMCI_OVLY_LOAD_PARMSA { + DWORD dwCallback; + LPCSTR lpfilename; + RECT rc; +} MCI_OVLY_LOAD_PARMSA,*PMCI_OVLY_LOAD_PARMSA,*LPMCI_OVLY_LOAD_PARMSA; +typedef struct tagMCI_OVLY_LOAD_PARMSW { + DWORD dwCallback; + LPCWSTR lpfilename; + RECT rc; +} MCI_OVLY_LOAD_PARMSW,*PMCI_OVLY_LOAD_PARMSW,*LPMCI_OVLY_LOAD_PARMSW; + +#ifdef UNICODE +typedef WAVEOUTCAPSW WAVEOUTCAPS,*PWAVEOUTCAPS,*LPWAVEOUTCAPS; +typedef WAVEINCAPSW WAVEINCAPS,*PWAVEINCAPS,*LPWAVEINCAPS; +typedef MIDIOUTCAPSW MIDIOUTCAPS,*PMIDIOUTCAPS,*LPMIDIOUTCAPS; +typedef MIDIINCAPSW MIDIINCAPS,*PMIDIINCAPS,*LPMIDIINCAPS; +typedef AUXCAPSW AUXCAPS,*PAUXCAPS,*LPAUXCAPS; +typedef MIXERCAPSW MIXERCAPS,*PMIXERCAPS,*LPMIXERCAPS; +typedef MIXERLINEW MIXERLINE,*PMIXERLINE,*LPMIXERLINE; +typedef MIXERCONTROLW MIXERCONTROL,*PMIXERCONTROL,*LPMIXERCONTROL; +typedef MIXERLINECONTROLSW MIXERLINECONTROLS,*PMIXERLINECONTROLS,*LPMIXERLINECONTROLS; +typedef MIXERCONTROLDETAILS_LISTTEXTW MIXERCONTROLDETAILS_LISTTEXT,*PMIXERCONTROLDETAILS_LISTTEXT,*LPMIXERCONTROLDETAILS_LISTTEXT; +typedef JOYCAPSW JOYCAPS,*PJOYCAPS,*LPJOYCAPS; +typedef MCI_OPEN_PARMSW MCI_OPEN_PARMS,*PMCI_OPEN_PARMS,*LPMCI_OPEN_PARMS; +typedef MCI_INFO_PARMSW MCI_INFO_PARMS,*LPMCI_INFO_PARMS; +typedef MCI_SYSINFO_PARMSW MCI_SYSINFO_PARMS,*PMCI_SYSINFO_PARMS,*LPMCI_SYSINFO_PARMS; +typedef MCI_SAVE_PARMSW MCI_SAVE_PARMS,*PMCI_SAVE_PARMS,*LPMCI_SAVE_PARMS; +typedef MCI_LOAD_PARMSW MCI_LOAD_PARMS,*PMCI_LOAD_PARMS,*LPMCI_LOAD_PARMS; +typedef MCI_VD_ESCAPE_PARMSW MCI_VD_ESCAPE_PARMS,*PMCI_VD_ESCAPE_PARMS,*LPMCI_VD_ESCAPE_PARMS; +typedef MCI_WAVE_OPEN_PARMSW MCI_WAVE_OPEN_PARMS,*PMCI_WAVE_OPEN_PARMS,*LPMCI_WAVE_OPEN_PARMS; +typedef MCI_ANIM_OPEN_PARMSW MCI_ANIM_OPEN_PARMS,*PMCI_ANIM_OPEN_PARMS,*LPMCI_ANIM_OPEN_PARMS; +typedef MCI_ANIM_WINDOW_PARMSW MCI_ANIM_WINDOW_PARMS,*PMCI_ANIM_WINDOW_PARMS,*LPMCI_ANIM_WINDOW_PARMS; +typedef MCI_OVLY_OPEN_PARMSW MCI_OVLY_OPEN_PARMS,*PMCI_OVLY_OPEN_PARMS,*LPMCI_OVLY_OPEN_PARMS; +typedef MCI_OVLY_WINDOW_PARMSW MCI_OVLY_WINDOW_PARMS,*PMCI_OVLY_WINDOW_PARMS,*LPMCI_OVLY_WINDOW_PARMS; +typedef MCI_OVLY_SAVE_PARMSW MCI_OVLY_SAVE_PARMS,*PMCI_OVLY_SAVE_PARMS,*LPMCI_OVLY_SAVE_PARMS; +#define sndPlaySound sndPlaySoundW +#define PlaySound PlaySoundW +#define waveOutGetDevCaps waveOutGetDevCapsW +#define waveOutGetErrorText waveOutGetErrorTextW +#define waveInGetDevCaps waveInGetDevCapsW +#define waveInGetErrorText waveInGetErrorTextW +#define midiOutGetDevCaps midiOutGetDevCapsW +#define midiOutGetErrorText midiOutGetErrorTextW +#define midiInGetDevCaps midiInGetDevCapsW +#define midiInGetErrorText midiInGetErrorTextW +#define auxGetDevCaps auxGetDevCapsW +#define mixerGetDevCaps mixerGetDevCapsW +#define mixerGetLineInfo mixerGetLineInfoW +#define mixerGetLineControls mixerGetLineControlsW +#define mixerGetControlDetails mixerGetControlDetailsW +#define joyGetDevCaps joyGetDevCapsW +#define mmioInstallIOProc mmioInstallIOProcW +#define mmioStringToFOURCC mmioStringToFOURCCW +#define mmioOpen mmioOpenW +#define mmioRename mmioRenameW +#define mciSendCommand mciSendCommandW +#define mciSendString mciSendStringW +#define mciGetDeviceID mciGetDeviceIDW +#define mciGetDeviceIDFromElementID mciGetDeviceIDFromElementIDW +#define mciGetErrorString mciGetErrorStringW +#else +typedef WAVEOUTCAPSA WAVEOUTCAPS,*PWAVEOUTCAPS,*LPWAVEOUTCAPS; +typedef WAVEINCAPSA WAVEINCAPS,*PWAVEINCAPS,*LPWAVEINCAPS; +typedef MIDIOUTCAPSA MIDIOUTCAPS,*PMIDIOUTCAPS,*LPMIDIOUTCAPS; +typedef MIDIINCAPSA MIDIINCAPS,*PMIDIINCAPS,*LPMIDIINCAPS; +typedef AUXCAPSA AUXCAPS,*PAUXCAPS,*LPAUXCAPS; +typedef MIXERCAPSA MIXERCAPS,*PMIXERCAPS,*LPMIXERCAPS; +typedef MIXERLINEA MIXERLINE,*PMIXERLINE,*LPMIXERLINE; +typedef MIXERCONTROLA MIXERCONTROL,*PMIXERCONTROL,*LPMIXERCONTROL; +typedef MIXERLINECONTROLSA MIXERLINECONTROLS,*PMIXERLINECONTROLS,*LPMIXERLINECONTROLS; +typedef MIXERCONTROLDETAILS_LISTTEXTA MIXERCONTROLDETAILS_LISTTEXT,*PMIXERCONTROLDETAILS_LISTTEXT,*LPMIXERCONTROLDETAILS_LISTTEXT; +typedef JOYCAPSA JOYCAPS,*PJOYCAPS,*LPJOYCAPS; +typedef MCI_OPEN_PARMSA MCI_OPEN_PARMS,*PMCI_OPEN_PARMS,*LPMCI_OPEN_PARMS; +typedef MCI_INFO_PARMSA MCI_INFO_PARMS,*LPMCI_INFO_PARMS; +typedef MCI_SYSINFO_PARMSA MCI_SYSINFO_PARMS,*PMCI_SYSINFO_PARMS,*LPMCI_SYSINFO_PARMS; +typedef MCI_SAVE_PARMSA MCI_SAVE_PARMS,*PMCI_SAVE_PARMS,*LPMCI_SAVE_PARMS; +typedef MCI_LOAD_PARMSA MCI_LOAD_PARMS,*PMCI_LOAD_PARMS,*LPMCI_LOAD_PARMS; +typedef MCI_VD_ESCAPE_PARMSA MCI_VD_ESCAPE_PARMS,*PMCI_VD_ESCAPE_PARMS,*LPMCI_VD_ESCAPE_PARMS; +typedef MCI_WAVE_OPEN_PARMSA MCI_WAVE_OPEN_PARMS,*PMCI_WAVE_OPEN_PARMS,*LPMCI_WAVE_OPEN_PARMS; +typedef MCI_ANIM_OPEN_PARMSA MCI_ANIM_OPEN_PARMS,*PMCI_ANIM_OPEN_PARMS,*LPMCI_ANIM_OPEN_PARMS; +typedef MCI_ANIM_WINDOW_PARMSA MCI_ANIM_WINDOW_PARMS,*PMCI_ANIM_WINDOW_PARMS,*LPMCI_ANIM_WINDOW_PARMS; +typedef MCI_OVLY_OPEN_PARMSA MCI_OVLY_OPEN_PARMS,*PMCI_OVLY_OPEN_PARMS,*LPMCI_OVLY_OPEN_PARMS; +typedef MCI_OVLY_WINDOW_PARMSA MCI_OVLY_WINDOW_PARMS,*PMCI_OVLY_WINDOW_PARMS,*LPMCI_OVLY_WINDOW_PARMS; +typedef MCI_OVLY_SAVE_PARMSA MCI_OVLY_SAVE_PARMS,*PMCI_OVLY_SAVE_PARMS,*LPMCI_OVLY_SAVE_PARMS; +#define sndPlaySound sndPlaySoundA +#define PlaySound PlaySoundA +#define waveOutGetDevCaps waveOutGetDevCapsA +#define waveOutGetErrorText waveOutGetErrorTextA +#define waveInGetDevCaps waveInGetDevCapsA +#define waveInGetErrorText waveInGetErrorTextA +#define midiOutGetDevCaps midiOutGetDevCapsA +#define midiOutGetErrorText midiOutGetErrorTextA +#define midiInGetDevCaps midiInGetDevCapsA +#define midiInGetErrorText midiInGetErrorTextA +#define auxGetDevCaps auxGetDevCapsA +#define mixerGetDevCaps mixerGetDevCapsA +#define mixerGetLineInfo mixerGetLineInfoA +#define mixerGetLineControls mixerGetLineControlsA +#define mixerGetControlDetails mixerGetControlDetailsA +#define joyGetDevCaps joyGetDevCapsA +#define mmioInstallIOProc mmioInstallIOProcA +#define mmioStringToFOURCC mmioStringToFOURCCA +#define mmioOpen mmioOpenA +#define mmioRename mmioRenameA +#define mciSendCommand mciSendCommandA +#define mciSendString mciSendStringA +#define mciGetDeviceID mciGetDeviceIDA +#define mciGetDeviceIDFromElementID mciGetDeviceIDFromElementIDA +#define mciGetErrorString mciGetErrorStringA +#endif +#ifdef __cplusplus +} +#endif +#pragma pack(pop) +#endif diff --git a/colorchord2/windows/symbol_enumerator.c b/colorchord2/windows/symbol_enumerator.c new file mode 100644 index 0000000..fcb3727 --- /dev/null +++ b/colorchord2/windows/symbol_enumerator.c @@ -0,0 +1,245 @@ +#include +#include "symbol_enumerator.h" + +#if defined( WIN32 ) || defined( WINDOWS ) || defined( USE_WINDOWS ) || defined( _WIN32 ) + +#include + +typedef struct _SYMBOL_INFO { + ULONG SizeOfStruct; + ULONG TypeIndex; + ULONG64 Reserved[2]; + ULONG Index; + ULONG Size; + ULONG64 ModBase; + ULONG Flags; + ULONG64 Value; + ULONG64 Address; + ULONG Register; + ULONG Scope; + ULONG Tag; + ULONG NameLen; + ULONG MaxNameLen; + TCHAR Name[1]; +} SYMBOL_INFO, *PSYMBOL_INFO; +typedef struct _IMAGEHLP_STACK_FRAME { + ULONG64 InstructionOffset; + ULONG64 ReturnOffset; + ULONG64 FrameOffset; + ULONG64 StackOffset; + ULONG64 BackingStoreOffset; + ULONG64 FuncTableEntry; + ULONG64 Params[4]; + ULONG64 Reserved[5]; + BOOL Virtual; + ULONG Reserved2; +} IMAGEHLP_STACK_FRAME, *PIMAGEHLP_STACK_FRAME; + + +typedef BOOL (*PSYM_ENUMERATESYMBOLS_CALLBACK)( + PSYMBOL_INFO pSymInfo, + ULONG SymbolSize, + PVOID UserContext + ); + +BOOL WINAPI SymEnumSymbols( + HANDLE hProcess, + ULONG64 BaseOfDll, + PCTSTR Mask, + PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, + const PVOID UserContext +); + +BOOL WINAPI SymInitialize( + HANDLE hProcess, + PCTSTR UserSearchPath, + BOOL fInvadeProcess +); + +BOOL WINAPI SymCleanup( + HANDLE hProcess +); + +BOOL CALLBACK __cdecl mycb( + PSYMBOL_INFO pSymInfo, + ULONG SymbolSize, + PVOID UserContext + ){ + SymEnumeratorCallback cb = (SymEnumeratorCallback)UserContext; + return !cb( "", &pSymInfo->Name[0], (void*)pSymInfo->Address, (long) pSymInfo->Size ); + } + +int EnumerateSymbols( SymEnumeratorCallback cb ) +{ + HANDLE proc = GetCurrentProcess(); + if( !SymInitialize( proc, 0, 1 ) ) return -1; + if( !SymEnumSymbols( proc, 0, "*!*", &mycb, (void*)cb ) ) + { + SymCleanup(proc); + return -2; + } + SymCleanup(proc); + return 0; +} + +#else + + +#include +#include +#include +#include +#include + +#ifndef __GNUC__ +#define __int128_t long long long +#endif + +#include +#include + +#define UINTS_PER_WORD (__WORDSIZE / (CHAR_BIT * sizeof (unsigned int))) + + + struct dl_phdr_info { + ElfW(Addr) dlpi_addr; /* Base address of object */ + const char *dlpi_name; /* (Null-terminated) name of + object */ + const ElfW(Phdr) *dlpi_phdr; /* Pointer to array of + ELF program headers + for this object */ + ElfW(Half) dlpi_phnum; /* # of items in dlpi_phdr */ + }; + + + +void dl_iterate_phdr( void*, void*); + + +static ElfW(Word) gnu_hashtab_symbol_count(const unsigned int *const table) +{ + const unsigned int *const bucket = table + 4 + table[2] * (unsigned int)(UINTS_PER_WORD); + unsigned int b = table[0]; + unsigned int max = 0U; + + while (b-->0U) + if (bucket[b] > max) + max = bucket[b]; + + return (ElfW(Word))max; +} + +static static void *dynamic_pointer(const ElfW(Addr) addr, + const ElfW(Addr) base, const ElfW(Phdr) *const header, const ElfW(Half) headers) +{ + if (addr) { + ElfW(Half) h; + + for (h = 0; h < headers; h++) + if (header[h].p_type == PT_LOAD) + if (addr >= base + header[h].p_vaddr && + addr < base + header[h].p_vaddr + header[h].p_memsz) + return (void *)addr; + } + + return NULL; +} + +//Mostly based off of http://stackoverflow.com/questions/29903049/get-names-and-addresses-of-exported-functions-from-in-linux +static int callback(struct dl_phdr_info *info, + size_t size, void *data) +{ + SymEnumeratorCallback cb = (SymEnumeratorCallback)data; + const ElfW(Addr) base = info->dlpi_addr; + const ElfW(Phdr) *const header = info->dlpi_phdr; + const ElfW(Half) headers = info->dlpi_phnum; + const char *libpath, *libname; + ElfW(Half) h; + + if (info->dlpi_name && info->dlpi_name[0]) + libpath = info->dlpi_name; + else + libpath = ""; + + libname = strrchr(libpath, '/'); + + if (libname && libname[0] == '/' && libname[1]) + libname++; + else + libname = libpath; + + for (h = 0; h < headers; h++) + { + if (header[h].p_type == PT_DYNAMIC) + { + const ElfW(Dyn) *entry = (const ElfW(Dyn) *)(base + header[h].p_vaddr); + const ElfW(Word) *hashtab; + const ElfW(Sym) *symtab = NULL; + const char *strtab = NULL; + ElfW(Word) symbol_count = 0; + + for (; entry->d_tag != DT_NULL; entry++) + { + switch (entry->d_tag) + { + case DT_HASH: + hashtab = dynamic_pointer(entry->d_un.d_ptr, base, header, headers); + if (hashtab) + symbol_count = hashtab[1]; + break; + case DT_GNU_HASH: + hashtab = dynamic_pointer(entry->d_un.d_ptr, base, header, headers); + if (hashtab) + { + ElfW(Word) count = gnu_hashtab_symbol_count(hashtab); + if (count > symbol_count) + symbol_count = count; + } + break; + case DT_STRTAB: + strtab = dynamic_pointer(entry->d_un.d_ptr, base, header, headers); + break; + case DT_SYMTAB: + symtab = dynamic_pointer(entry->d_un.d_ptr, base, header, headers); + break; + } + } + + if (symtab && strtab && symbol_count > 0) { + ElfW(Word) s; + + for (s = 0; s < symbol_count; s++) { + const char *name; + void *const ptr = dynamic_pointer(base + symtab[s].st_value, base, header, headers); + int result; + + if (!ptr) + continue; + + if (symtab[s].st_name) + name = strtab + symtab[s].st_name; + else + name = ""; + + result = cb( libpath, name, ptr, symtab[s].st_size ); + if( result ) return result; //Bail early. + } + } + } + } + return 0; +} + + + + + +int EnumerateSymbols( SymEnumeratorCallback cb ) +{ + dl_iterate_phdr( callback, cb ); +} + + + + +#endif diff --git a/colorchord2/windows/symbol_enumerator.h b/colorchord2/windows/symbol_enumerator.h new file mode 100644 index 0000000..87e033b --- /dev/null +++ b/colorchord2/windows/symbol_enumerator.h @@ -0,0 +1,12 @@ +#ifndef _SYMBOL_ENUMERATOR_H +#define _SYMBOL_ENUMERATOR_H + +//Enumerates all symbols in the currently loaded excutable. +//Don't forget to compile with -rdynamic! + +//Return 0 to continue search. 1 to stop. +typedef int (*SymEnumeratorCallback)( const char * path, const char * name, void * location, long size ); + +int EnumerateSymbols( SymEnumeratorCallback cb ); + +#endif diff --git a/colorchord2/windows/tcc_stubs.c b/colorchord2/windows/tcc_stubs.c new file mode 100644 index 0000000..c6dfc76 --- /dev/null +++ b/colorchord2/windows/tcc_stubs.c @@ -0,0 +1,80 @@ + +#include <_mingw.h> + +#define REMATH(x) double __cdecl x( double f ); float x##f(float v) { return x(v); } + +int SymnumCheck( const char * path, const char * name, void * location, long size ) +{ + if( strncmp( name, "REGISTER", 8 ) == 0 ) + { + typedef void (*sf)(); + sf fn = (sf)location; + fn(); + } + return 0; +} + + + +void ManuallyRegisterDevices() +{ + EnumerateSymbols( SymnumCheck ); +} + +REMATH( acos ); +REMATH( cos ); +REMATH( sin ); +REMATH( sqrt ); +REMATH( asin ); +REMATH( exp ); +REMATH( fmod ); +REMATH( pow ); + +double __cdecl strtod (const char* str, char** endptr); +float strtof( const char* str, char** endptr) +{ + return strtod( str, endptr ); +} + +double __cdecl atan2(double a, double b); +float atan2f(float a, float b) +{ + return atan2( a, b ); +} + +//From http://stackoverflow.com/questions/40159892/using-asprintf-on-windows +int __cdecl vsprintf_s( + char *buffer, + size_t numberOfElements, + const char *format, + va_list argptr +); + +int asprintf(char **strp, const char *fmt, ...) { + va_list ap; + va_start(ap, fmt); + int r = vasprintf(strp, fmt, ap); + va_end(ap); + return r; +} + +int vasprintf(char **strp, const char *fmt, va_list ap) { + // _vscprintf tells you how big the buffer needs to be + int len = _vscprintf(fmt, ap); + if (len == -1) { + return -1; + } + size_t size = (size_t)len + 1; + char *str = (char*)malloc(size); + if (!str) { + return -1; + } + // _vsprintf_s is the "secure" version of vsprintf + int r = vsprintf_s(str, len + 1, fmt, ap); + if (r == -1) { + free(str); + return -1; + } + *strp = str; + return r; +} \ No newline at end of file diff --git a/colorchord2/windows/winsock2.h b/colorchord2/windows/winsock2.h new file mode 100644 index 0000000..d318eb6 --- /dev/null +++ b/colorchord2/windows/winsock2.h @@ -0,0 +1,1303 @@ +/* + + Definitions for winsock 2 + + Contributed by the WINE project. + + Portions Copyright (c) 1980, 1983, 1988, 1993 + The Regents of the University of California. All rights reserved. + + Portions Copyright (c) 1993 by Digital Equipment Corporation. + */ + +#if !(defined _WINSOCK2_H || defined _WINSOCK_H) +#define _WINSOCK2_H +#define _WINSOCK_H /* to prevent later inclusion of winsock.h */ +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + +#define _GNU_H_WINDOWS32_SOCKETS + +#include + +#ifndef WINSOCK_API_LINKAGE +#ifdef __W32API_USE_DLLIMPORT__ +#define WINSOCK_API_LINKAGE DECLSPEC_IMPORT +#else +#define WINSOCK_API_LINKAGE +#endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif +/* Names common to Winsock1.1 and Winsock2 */ +#if !defined ( _BSDTYPES_DEFINED ) +/* also defined in gmon.h and in cygwin's sys/types */ +typedef unsigned char u_char; +typedef unsigned short u_short; +typedef unsigned int u_int; +typedef unsigned long u_long; +#define _BSDTYPES_DEFINED +#endif /* ! def _BSDTYPES_DEFINED */ +typedef u_int SOCKET; +#ifndef FD_SETSIZE +#define FD_SETSIZE 64 +#endif + +/* shutdown() how types */ +#define SD_RECEIVE 0x00 +#define SD_SEND 0x01 +#define SD_BOTH 0x02 + +#ifndef _SYS_TYPES_FD_SET +/* fd_set may be defined by the newlib + * if __USE_W32_SOCKETS not defined. + */ +#ifdef fd_set +#undef fd_set +#endif +typedef struct fd_set { + u_int fd_count; + SOCKET fd_array[FD_SETSIZE]; +} fd_set; +int PASCAL __WSAFDIsSet(SOCKET,fd_set*); +#ifndef FD_CLR +#define FD_CLR(fd,set) do { u_int __i;\ +for (__i = 0; __i < ((fd_set *)(set))->fd_count ; __i++) {\ + if (((fd_set *)(set))->fd_array[__i] == (fd)) {\ + while (__i < ((fd_set *)(set))->fd_count-1) {\ + ((fd_set*)(set))->fd_array[__i] = ((fd_set*)(set))->fd_array[__i+1];\ + __i++;\ + }\ + ((fd_set*)(set))->fd_count--;\ + break;\ + }\ +}\ +} while (0) +#endif +#ifndef FD_SET +/* this differs from the define in winsock.h and in cygwin sys/types.h */ +#define FD_SET(fd, set) do { u_int __i;\ +for (__i = 0; __i < ((fd_set *)(set))->fd_count ; __i++) {\ + if (((fd_set *)(set))->fd_array[__i] == (fd)) {\ + break;\ + }\ +}\ +if (__i == ((fd_set *)(set))->fd_count) {\ + if (((fd_set *)(set))->fd_count < FD_SETSIZE) {\ + ((fd_set *)(set))->fd_array[__i] = (fd);\ + ((fd_set *)(set))->fd_count++;\ + }\ +}\ +} while(0) +#endif +#ifndef FD_ZERO +#define FD_ZERO(set) (((fd_set *)(set))->fd_count=0) +#endif +#ifndef FD_ISSET +#define FD_ISSET(fd, set) __WSAFDIsSet((SOCKET)(fd), (fd_set *)(set)) +#endif +#elif !defined (USE_SYS_TYPES_FD_SET) +#warning "fd_set and associated macros have been defined in sys/types. \ + This may cause runtime problems with W32 sockets" +#endif /* ndef _SYS_TYPES_FD_SET */ +#if !(defined (__INSIDE_CYGWIN__) || (__INSIDE_MSYS__)) +#ifndef _TIMEVAL_DEFINED /* also in sys/time.h */ +#define _TIMEVAL_DEFINED +struct timeval { + long tv_sec; + long tv_usec; +}; +#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec) +#define timercmp(tvp, uvp, cmp) \ + (((tvp)->tv_sec != (uvp)->tv_sec) ? \ + ((tvp)->tv_sec cmp (uvp)->tv_sec) : \ + ((tvp)->tv_usec cmp (uvp)->tv_usec)) +#define timerclear(tvp) (tvp)->tv_sec = (tvp)->tv_usec = 0 +#endif /* _TIMEVAL_DEFINED */ +struct hostent { + char *h_name; + char **h_aliases; + short h_addrtype; + short h_length; + char **h_addr_list; +#define h_addr h_addr_list[0] +}; +struct linger { + u_short l_onoff; + u_short l_linger; +}; +#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */ +#define IOCPARM_MASK 0x7f +#define IOC_VOID 0x20000000 +#define IOC_OUT 0x40000000 +#define IOC_IN 0x80000000 +#define IOC_INOUT (IOC_IN|IOC_OUT) + +#if ! (defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__)) +#define _IO(x,y) (IOC_VOID|((x)<<8)|(y)) +#define _IOR(x,y,t) (IOC_OUT|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)) +#define _IOW(x,y,t) (IOC_IN|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)) +#define FIONBIO _IOW('f', 126, u_long) +#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */ + +#define FIONREAD _IOR('f', 127, u_long) +#define FIOASYNC _IOW('f', 125, u_long) +#define SIOCSHIWAT _IOW('s', 0, u_long) +#define SIOCGHIWAT _IOR('s', 1, u_long) +#define SIOCSLOWAT _IOW('s', 2, u_long) +#define SIOCGLOWAT _IOR('s', 3, u_long) +#define SIOCATMARK _IOR('s', 7, u_long) + +#if ! (defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__)) +struct netent { + char * n_name; + char **n_aliases; + short n_addrtype; + u_long n_net; +}; +struct servent { + char *s_name; + char **s_aliases; + short s_port; + char *s_proto; +}; +struct protoent { + char *p_name; + char **p_aliases; + short p_proto; +}; +#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */ + +#define IPPROTO_IP 0 +#define IPPROTO_ICMP 1 +#define IPPROTO_IGMP 2 +#define IPPROTO_GGP 3 +#define IPPROTO_TCP 6 +#define IPPROTO_PUP 12 +#define IPPROTO_UDP 17 +#define IPPROTO_IDP 22 +#define IPPROTO_ND 77 +#define IPPROTO_RAW 255 +#define IPPROTO_MAX 256 +/* IPv6 options */ +#define IPPROTO_HOPOPTS 0 /* IPv6 Hop-by-Hop options */ +#define IPPROTO_IPV6 41 /* IPv6 header */ +#define IPPROTO_ROUTING 43 /* IPv6 Routing header */ +#define IPPROTO_FRAGMENT 44 /* IPv6 fragmentation header */ +#define IPPROTO_ESP 50 /* encapsulating security payload */ +#define IPPROTO_AH 51 /* authentication header */ +#define IPPROTO_ICMPV6 58 /* ICMPv6 */ +#define IPPROTO_NONE 59 /* IPv6 no next header */ +#define IPPROTO_DSTOPTS 60 /* IPv6 Destination options */ +#define IPPORT_ECHO 7 +#define IPPORT_DISCARD 9 +#define IPPORT_SYSTAT 11 +#define IPPORT_DAYTIME 13 +#define IPPORT_NETSTAT 15 +#define IPPORT_FTP 21 +#define IPPORT_TELNET 23 +#define IPPORT_SMTP 25 +#define IPPORT_TIMESERVER 37 +#define IPPORT_NAMESERVER 42 +#define IPPORT_WHOIS 43 +#define IPPORT_MTP 57 +#define IPPORT_TFTP 69 +#define IPPORT_RJE 77 +#define IPPORT_FINGER 79 +#define IPPORT_TTYLINK 87 +#define IPPORT_SUPDUP 95 +#define IPPORT_EXECSERVER 512 +#define IPPORT_LOGINSERVER 513 +#define IPPORT_CMDSERVER 514 +#define IPPORT_EFSSERVER 520 +#define IPPORT_BIFFUDP 512 +#define IPPORT_WHOSERVER 513 +#define IPPORT_ROUTESERVER 520 +#define IPPORT_RESERVED 1024 +#define IMPLINK_IP 155 +#define IMPLINK_LOWEXPER 156 +#define IMPLINK_HIGHEXPER 158 +struct in_addr { + union { + struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b; + struct { u_short s_w1,s_w2; } S_un_w; + u_long S_addr; + } S_un; +#define s_addr S_un.S_addr +#define s_host S_un.S_un_b.s_b2 +#define s_net S_un.S_un_b.s_b1 +#define s_imp S_un.S_un_w.s_w2 +#define s_impno S_un.S_un_b.s_b4 +#define s_lh S_un.S_un_b.s_b3 +}; +#define IN_CLASSA(i) (((long)(i)&0x80000000) == 0) +#define IN_CLASSA_NET 0xff000000 +#define IN_CLASSA_NSHIFT 24 +#define IN_CLASSA_HOST 0x00ffffff +#define IN_CLASSA_MAX 128 +#define IN_CLASSB(i) (((long)(i)&0xc0000000)==0x80000000) +#define IN_CLASSB_NET 0xffff0000 +#define IN_CLASSB_NSHIFT 16 +#define IN_CLASSB_HOST 0x0000ffff +#define IN_CLASSB_MAX 65536 +#define IN_CLASSC(i) (((long)(i)&0xe0000000)==0xc0000000) +#define IN_CLASSC_NET 0xffffff00 +#define IN_CLASSC_NSHIFT 8 +#define IN_CLASSC_HOST 0xff +#define INADDR_ANY (u_long)0 +#define INADDR_LOOPBACK 0x7f000001 +#define INADDR_BROADCAST (u_long)0xffffffff +#define INADDR_NONE 0xffffffff +struct sockaddr_in { + short sin_family; + u_short sin_port; + struct in_addr sin_addr; + char sin_zero[8]; +}; +#define WSADESCRIPTION_LEN 256 +#define WSASYS_STATUS_LEN 128 +typedef struct WSAData { + WORD wVersion; + WORD wHighVersion; + char szDescription[WSADESCRIPTION_LEN+1]; + char szSystemStatus[WSASYS_STATUS_LEN+1]; + unsigned short iMaxSockets; + unsigned short iMaxUdpDg; + char * lpVendorInfo; +} WSADATA; +typedef WSADATA *LPWSADATA; + +#if ! (defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__)) +#define IP_OPTIONS 1 +#define SO_DEBUG 1 +#define SO_ACCEPTCONN 2 +#define SO_REUSEADDR 4 +#define SO_KEEPALIVE 8 +#define SO_DONTROUTE 16 +#define SO_BROADCAST 32 +#define SO_USELOOPBACK 64 +#define SO_LINGER 128 +#define SO_OOBINLINE 256 +#define SO_DONTLINGER (u_int)(~SO_LINGER) +#define SO_EXCLUSIVEADDRUSE ((u_int)(~SO_REUSEADDR)) +#define SO_SNDBUF 0x1001 +#define SO_RCVBUF 0x1002 +#define SO_SNDLOWAT 0x1003 +#define SO_RCVLOWAT 0x1004 +#define SO_SNDTIMEO 0x1005 +#define SO_RCVTIMEO 0x1006 +#define SO_ERROR 0x1007 +#define SO_TYPE 0x1008 +#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */ + +#define INVALID_SOCKET (SOCKET)(~0) +#define SOCKET_ERROR (-1) +#define SOCK_STREAM 1 +#define SOCK_DGRAM 2 +#define SOCK_RAW 3 +#define SOCK_RDM 4 +#define SOCK_SEQPACKET 5 +#define TCP_NODELAY 0x0001 +#define AF_UNSPEC 0 +#define AF_UNIX 1 +#define AF_INET 2 +#define AF_IMPLINK 3 +#define AF_PUP 4 +#define AF_CHAOS 5 +#define AF_IPX 6 +#define AF_NS 6 +#define AF_ISO 7 +#define AF_OSI AF_ISO +#define AF_ECMA 8 +#define AF_DATAKIT 9 +#define AF_CCITT 10 +#define AF_SNA 11 +#define AF_DECnet 12 +#define AF_DLI 13 +#define AF_LAT 14 +#define AF_HYLINK 15 +#define AF_APPLETALK 16 +#define AF_NETBIOS 17 +#define AF_VOICEVIEW 18 +#define AF_FIREFOX 19 +#define AF_UNKNOWN1 20 +#define AF_BAN 21 +#define AF_ATM 22 +#define AF_INET6 23 +#define AF_CLUSTER 24 +#define AF_12844 25 +#define AF_IRDA 26 +#define AF_NETDES 28 +#if !(defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__)) +#define AF_MAX 29 +struct sockaddr { + u_short sa_family; + char sa_data[14]; +}; + +/* Portable IPv6/IPv4 version of sockaddr. Based on RFC 2553. + Pad to force 8 byte alignment and maximum size of 128 bytes. */ + +/* + * Desired design of maximum size and alignment + */ +#define _SS_MAXSIZE 128 +#define _SS_ALIGNSIZE (sizeof (__int64)) +/* + * Definitions used for sockaddr_storage structure paddings design. + */ +#define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof (short)) +#define _SS_PAD2SIZE (_SS_MAXSIZE - (sizeof (short) \ + + _SS_PAD1SIZE \ + + _SS_ALIGNSIZE)) +struct sockaddr_storage { + short ss_family; + char __ss_pad1[_SS_PAD1SIZE]; /* pad to 8 */ + __int64 __ss_align; /* force alignment */ + char __ss_pad2[_SS_PAD2SIZE]; /* pad to 128 */ +}; +#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */ + +struct sockproto { + u_short sp_family; + u_short sp_protocol; +}; +#define PF_UNSPEC AF_UNSPEC +#define PF_UNIX AF_UNIX +#define PF_INET AF_INET +#define PF_IMPLINK AF_IMPLINK +#define PF_PUP AF_PUP +#define PF_CHAOS AF_CHAOS +#define PF_NS AF_NS +#define PF_IPX AF_IPX +#define PF_ISO AF_ISO +#define PF_OSI AF_OSI +#define PF_ECMA AF_ECMA +#define PF_DATAKIT AF_DATAKIT +#define PF_CCITT AF_CCITT +#define PF_SNA AF_SNA +#define PF_DECnet AF_DECnet +#define PF_DLI AF_DLI +#define PF_LAT AF_LAT +#define PF_HYLINK AF_HYLINK +#define PF_APPLETALK AF_APPLETALK +#define PF_VOICEVIEW AF_VOICEVIEW +#define PF_FIREFOX AF_FIREFOX +#define PF_UNKNOWN1 AF_UNKNOWN1 +#define PF_BAN AF_BAN +#define PF_ATM AF_ATM +#define PF_INET6 AF_INET6 +#define PF_MAX AF_MAX +#define SOL_SOCKET 0xffff +#if ! (defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__)) +#define SOMAXCONN 0x7fffffff /* (5) in WinSock1.1 */ +#define MSG_OOB 1 +#define MSG_PEEK 2 +#define MSG_DONTROUTE 4 +#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */ +#define MSG_MAXIOVLEN 16 +#define MSG_PARTIAL 0x8000 +#define MAXGETHOSTSTRUCT 1024 + +#define FD_READ_BIT 0 +#define FD_READ (1 << FD_READ_BIT) +#define FD_WRITE_BIT 1 +#define FD_WRITE (1 << FD_WRITE_BIT) +#define FD_OOB_BIT 2 +#define FD_OOB (1 << FD_OOB_BIT) +#define FD_ACCEPT_BIT 3 +#define FD_ACCEPT (1 << FD_ACCEPT_BIT) +#define FD_CONNECT_BIT 4 +#define FD_CONNECT (1 << FD_CONNECT_BIT) +#define FD_CLOSE_BIT 5 +#define FD_CLOSE (1 << FD_CLOSE_BIT) +/* winsock1.1 defines stop at FD_CLOSE (32) */ +#define FD_QOS_BIT 6 +#define FD_QOS (1 << FD_QOS_BIT) +#define FD_GROUP_QOS_BIT 7 +#define FD_GROUP_QOS (1 << FD_GROUP_QOS_BIT) +#define FD_ROUTING_INTERFACE_CHANGE_BIT 8 +#define FD_ROUTING_INTERFACE_CHANGE (1 << FD_ROUTING_INTERFACE_CHANGE_BIT) +#define FD_ADDRESS_LIST_CHANGE_BIT 9 +#define FD_ADDRESS_LIST_CHANGE (1 << FD_ADDRESS_LIST_CHANGE_BIT) +#define FD_MAX_EVENTS 10 +#define FD_ALL_EVENTS ((1 << FD_MAX_EVENTS) - 1) + +#ifndef WSABASEERR +#define WSABASEERR 10000 +#define WSAEINTR (WSABASEERR+4) +#define WSAEBADF (WSABASEERR+9) +#define WSAEACCES (WSABASEERR+13) +#define WSAEFAULT (WSABASEERR+14) +#define WSAEINVAL (WSABASEERR+22) +#define WSAEMFILE (WSABASEERR+24) +#define WSAEWOULDBLOCK (WSABASEERR+35) +#define WSAEINPROGRESS (WSABASEERR+36) /* deprecated on WinSock2 */ +#define WSAEALREADY (WSABASEERR+37) +#define WSAENOTSOCK (WSABASEERR+38) +#define WSAEDESTADDRREQ (WSABASEERR+39) +#define WSAEMSGSIZE (WSABASEERR+40) +#define WSAEPROTOTYPE (WSABASEERR+41) +#define WSAENOPROTOOPT (WSABASEERR+42) +#define WSAEPROTONOSUPPORT (WSABASEERR+43) +#define WSAESOCKTNOSUPPORT (WSABASEERR+44) +#define WSAEOPNOTSUPP (WSABASEERR+45) +#define WSAEPFNOSUPPORT (WSABASEERR+46) +#define WSAEAFNOSUPPORT (WSABASEERR+47) +#define WSAEADDRINUSE (WSABASEERR+48) +#define WSAEADDRNOTAVAIL (WSABASEERR+49) +#define WSAENETDOWN (WSABASEERR+50) +#define WSAENETUNREACH (WSABASEERR+51) +#define WSAENETRESET (WSABASEERR+52) +#define WSAECONNABORTED (WSABASEERR+53) +#define WSAECONNRESET (WSABASEERR+54) +#define WSAENOBUFS (WSABASEERR+55) +#define WSAEISCONN (WSABASEERR+56) +#define WSAENOTCONN (WSABASEERR+57) +#define WSAESHUTDOWN (WSABASEERR+58) +#define WSAETOOMANYREFS (WSABASEERR+59) +#define WSAETIMEDOUT (WSABASEERR+60) +#define WSAECONNREFUSED (WSABASEERR+61) +#define WSAELOOP (WSABASEERR+62) +#define WSAENAMETOOLONG (WSABASEERR+63) +#define WSAEHOSTDOWN (WSABASEERR+64) +#define WSAEHOSTUNREACH (WSABASEERR+65) +#define WSAENOTEMPTY (WSABASEERR+66) +#define WSAEPROCLIM (WSABASEERR+67) +#define WSAEUSERS (WSABASEERR+68) +#define WSAEDQUOT (WSABASEERR+69) +#define WSAESTALE (WSABASEERR+70) +#define WSAEREMOTE (WSABASEERR+71) +#define WSAEDISCON (WSABASEERR+101) +#define WSASYSNOTREADY (WSABASEERR+91) +#define WSAVERNOTSUPPORTED (WSABASEERR+92) +#define WSANOTINITIALISED (WSABASEERR+93) +#define WSAHOST_NOT_FOUND (WSABASEERR+1001) +#define WSATRY_AGAIN (WSABASEERR+1002) +#define WSANO_RECOVERY (WSABASEERR+1003) +#define WSANO_DATA (WSABASEERR+1004) + +/* WinSock2 specific error codes */ +#define WSAENOMORE (WSABASEERR+102) +#define WSAECANCELLED (WSABASEERR+103) +#define WSAEINVALIDPROCTABLE (WSABASEERR+104) +#define WSAEINVALIDPROVIDER (WSABASEERR+105) +#define WSAEPROVIDERFAILEDINIT (WSABASEERR+106) +#define WSASYSCALLFAILURE (WSABASEERR+107) +#define WSASERVICE_NOT_FOUND (WSABASEERR+108) +#define WSATYPE_NOT_FOUND (WSABASEERR+109) +#define WSA_E_NO_MORE (WSABASEERR+110) +#define WSA_E_CANCELLED (WSABASEERR+111) +#define WSAEREFUSED (WSABASEERR+112) + +/* WS QualityofService errors */ +#define WSA_QOS_RECEIVERS (WSABASEERR + 1005) +#define WSA_QOS_SENDERS (WSABASEERR + 1006) +#define WSA_QOS_NO_SENDERS (WSABASEERR + 1007) +#define WSA_QOS_NO_RECEIVERS (WSABASEERR + 1008) +#define WSA_QOS_REQUEST_CONFIRMED (WSABASEERR + 1009) +#define WSA_QOS_ADMISSION_FAILURE (WSABASEERR + 1010) +#define WSA_QOS_POLICY_FAILURE (WSABASEERR + 1011) +#define WSA_QOS_BAD_STYLE (WSABASEERR + 1012) +#define WSA_QOS_BAD_OBJECT (WSABASEERR + 1013) +#define WSA_QOS_TRAFFIC_CTRL_ERROR (WSABASEERR + 1014) +#define WSA_QOS_GENERIC_ERROR (WSABASEERR + 1015) +#define WSA_QOS_ESERVICETYPE (WSABASEERR + 1016) +#define WSA_QOS_EFLOWSPEC (WSABASEERR + 1017) +#define WSA_QOS_EPROVSPECBUF (WSABASEERR + 1018) +#define WSA_QOS_EFILTERSTYLE (WSABASEERR + 1019) +#define WSA_QOS_EFILTERTYPE (WSABASEERR + 1020) +#define WSA_QOS_EFILTERCOUNT (WSABASEERR + 1021) +#define WSA_QOS_EOBJLENGTH (WSABASEERR + 1022) +#define WSA_QOS_EFLOWCOUNT (WSABASEERR + 1023) +#define WSA_QOS_EUNKOWNPSOBJ (WSABASEERR + 1024) +#define WSA_QOS_EPOLICYOBJ (WSABASEERR + 1025) +#define WSA_QOS_EFLOWDESC (WSABASEERR + 1026) +#define WSA_QOS_EPSFLOWSPEC (WSABASEERR + 1027) +#define WSA_QOS_EPSFILTERSPEC (WSABASEERR + 1028) +#define WSA_QOS_ESDMODEOBJ (WSABASEERR + 1029) +#define WSA_QOS_ESHAPERATEOBJ (WSABASEERR + 1030) +#define WSA_QOS_RESERVED_PETYPE (WSABASEERR + 1031) + +#endif /* !WSABASEERR */ + +#define WSANO_ADDRESS WSANO_DATA +#if !(defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__)) +#define h_errno WSAGetLastError() +#define HOST_NOT_FOUND WSAHOST_NOT_FOUND +#define TRY_AGAIN WSATRY_AGAIN +#define NO_RECOVERY WSANO_RECOVERY +#define NO_DATA WSANO_DATA +#define NO_ADDRESS WSANO_ADDRESS +#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */ +WINSOCK_API_LINKAGE SOCKET PASCAL accept(SOCKET,struct sockaddr*,int*); +WINSOCK_API_LINKAGE int PASCAL bind(SOCKET,const struct sockaddr*,int); +WINSOCK_API_LINKAGE int PASCAL closesocket(SOCKET); +WINSOCK_API_LINKAGE int PASCAL connect(SOCKET,const struct sockaddr*,int); +WINSOCK_API_LINKAGE int PASCAL ioctlsocket(SOCKET,long,u_long *); +WINSOCK_API_LINKAGE int PASCAL getpeername(SOCKET,struct sockaddr*,int*); +WINSOCK_API_LINKAGE int PASCAL getsockname(SOCKET,struct sockaddr*,int*); +WINSOCK_API_LINKAGE int PASCAL getsockopt(SOCKET,int,int,char*,int*); +WINSOCK_API_LINKAGE unsigned long PASCAL inet_addr(const char*); +WINSOCK_API_LINKAGE DECLARE_STDCALL_P(char *) inet_ntoa(struct in_addr); +WINSOCK_API_LINKAGE int PASCAL listen(SOCKET,int); +WINSOCK_API_LINKAGE int PASCAL recv(SOCKET,char*,int,int); +WINSOCK_API_LINKAGE int PASCAL recvfrom(SOCKET,char*,int,int,struct sockaddr*,int*); +WINSOCK_API_LINKAGE int PASCAL send(SOCKET,const char*,int,int); +WINSOCK_API_LINKAGE int PASCAL sendto(SOCKET,const char*,int,int,const struct sockaddr*,int); +WINSOCK_API_LINKAGE int PASCAL setsockopt(SOCKET,int,int,const char*,int); +WINSOCK_API_LINKAGE int PASCAL shutdown(SOCKET,int); +WINSOCK_API_LINKAGE SOCKET PASCAL socket(int,int,int); +WINSOCK_API_LINKAGE DECLARE_STDCALL_P(struct hostent *) gethostbyaddr(const char*,int,int); +WINSOCK_API_LINKAGE DECLARE_STDCALL_P(struct hostent *) gethostbyname(const char*); +WINSOCK_API_LINKAGE DECLARE_STDCALL_P(struct servent *) getservbyport(int,const char*); +WINSOCK_API_LINKAGE DECLARE_STDCALL_P(struct servent *) getservbyname(const char*,const char*); +WINSOCK_API_LINKAGE DECLARE_STDCALL_P(struct protoent *) getprotobynumber(int); +WINSOCK_API_LINKAGE DECLARE_STDCALL_P(struct protoent *) getprotobyname(const char*); +typedef SOCKET (PASCAL * LPFN_ACCEPT)(SOCKET, struct sockaddr*,int *); +typedef int (PASCAL * LPFN_BIND)(SOCKET, const struct sockaddr*,int); +typedef int (PASCAL * LPFN_CLOSESOCKET)(SOCKET); +typedef int (PASCAL * LPFN_CONNECT)(SOCKET, const struct sockaddr*,int); +typedef int (PASCAL * LPFN_IOCTLSOCKET)(SOCKET, long, u_long*); +typedef int (PASCAL * LPFN_GETPEERNAME)(SOCKET, struct sockaddr*, int*); +typedef int(PASCAL * LPFN_GETSOCKNAME)(SOCKET, struct sockaddr*, int*); +typedef int(PASCAL * LPFN_GETSOCKOPT)(SOCKET, int, int, char*, int*); +typedef u_long(PASCAL * LPFN_HTONL)(u_long); +typedef u_short(PASCAL * LPFN_HTONS)(u_short); +typedef unsigned long(PASCAL * LPFN_INET_ADDR)(const char*); +typedef char*(PASCAL * LPFN_INET_NTOA)(struct in_addr); +typedef int(PASCAL * LPFN_LISTEN)(SOCKET, int); +typedef u_long(PASCAL * LPFN_NTOHL)(u_long); +typedef u_short(PASCAL * LPFN_NTOHS)(u_short); +typedef int(PASCAL * LPFN_RECV)(SOCKET, char*, int, int); +typedef int(PASCAL * LPFN_RECVFROM)(SOCKET, char*, int, int, struct sockaddr*, int*); +typedef int(PASCAL * LPFN_SELECT)(int, fd_set*, fd_set*, fd_set*, const struct timeval*); +typedef int(PASCAL * LPFN_SEND)(SOCKET, const char*, int, int); +typedef int(PASCAL * LPFN_SENDTO)(SOCKET, const char*, int, int, const struct sockaddr*, int); +typedef int(PASCAL * LPFN_SETSOCKOPT)(SOCKET, int, int, const char*, int); +typedef int(PASCAL * LPFN_SHUTDOWN)(SOCKET, int); +typedef SOCKET(PASCAL * LPFN_SOCKET)(int, int, int); +typedef struct hostent*(PASCAL * LPFN_GETHOSTBYADDR)( const char*, int, int); +typedef struct hostent*(PASCAL * LPFN_GETHOSTBYNAME)( const char*); +typedef int(PASCAL * LPFN_GETHOSTNAME)(char*, int); +typedef struct servent*(PASCAL * LPFN_GETSERVBYPORT)(int, const char*); +typedef struct servent*(PASCAL * LPFN_GETSERVBYNAME)(const char*, const char*); +typedef struct protoent*(PASCAL * LPFN_GETPROTOBYNUMBER)(int); +typedef struct protoent*(PASCAL * LPFN_GETPROTOBYNAME)(const char*); + +WINSOCK_API_LINKAGE int PASCAL WSAStartup(WORD,LPWSADATA); +WINSOCK_API_LINKAGE int PASCAL WSACleanup(void); +WINSOCK_API_LINKAGE void PASCAL WSASetLastError(int); +WINSOCK_API_LINKAGE int PASCAL WSAGetLastError(void); +WINSOCK_API_LINKAGE typedef int(PASCAL * LPFN_WSASTARTUP)(WORD, LPWSADATA); +typedef int(PASCAL * LPFN_WSACLEANUP)(void); +typedef void(PASCAL * LPFN_WSASETLASTERROR)(int); +typedef int(PASCAL * LPFN_WSAGETLASTERROR)(void); +/* + * Pseudo-blocking functions are deprecated in WinSock2 + * spec. Use threads instead. + */ +WINSOCK_API_LINKAGE BOOL PASCAL WSAIsBlocking(void); +WINSOCK_API_LINKAGE int PASCAL WSAUnhookBlockingHook(void); +WINSOCK_API_LINKAGE FARPROC PASCAL WSASetBlockingHook(FARPROC); +WINSOCK_API_LINKAGE int PASCAL WSACancelBlockingCall(void); +typedef BOOL(PASCAL * LPFN_WSAISBLOCKING)(void); +typedef int(PASCAL * LPFN_WSAUNHOOKBLOCKINGHOOK)(void); +typedef FARPROC (PASCAL * LPFN_WSASETBLOCKINGHOOK)(FARPROC); +typedef int(PASCAL * LPFN_WSACANCELBLOCKINGCALL)(void); + +WINSOCK_API_LINKAGE HANDLE PASCAL WSAAsyncGetServByName(HWND,u_int,const char*,const char*,char*,int); +WINSOCK_API_LINKAGE HANDLE PASCAL WSAAsyncGetServByPort(HWND,u_int,int,const char*,char*,int); +WINSOCK_API_LINKAGE HANDLE PASCAL WSAAsyncGetProtoByName(HWND,u_int,const char*,char*,int); +WINSOCK_API_LINKAGE HANDLE PASCAL WSAAsyncGetProtoByNumber(HWND,u_int,int,char*,int); +WINSOCK_API_LINKAGE HANDLE PASCAL WSAAsyncGetHostByName(HWND,u_int,const char*,char*,int); +WINSOCK_API_LINKAGE HANDLE PASCAL WSAAsyncGetHostByAddr(HWND,u_int,const char*,int,int,char*,int); +WINSOCK_API_LINKAGE int PASCAL WSACancelAsyncRequest(HANDLE); +WINSOCK_API_LINKAGE int PASCAL WSAAsyncSelect(SOCKET,HWND,u_int,long); +typedef HANDLE(PASCAL * LPFN_WSAASYNCGETSERVBYNAME)(HWND, u_int, const char *, const char *, char *, int); +typedef HANDLE(PASCAL * LPFN_WSAASYNCGETSERVBYPORT)(HWND, u_int, int, const char *, char *, int); +typedef HANDLE(PASCAL * LPFN_WSAASYNCGETPROTOBYNAME)(HWND, u_int, const char*, char*, int); +typedef HANDLE(PASCAL * LPFN_WSAASYNCGETPROTOBYNUMBER)(HWND, u_int, int, char*, int); +typedef HANDLE(PASCAL * LPFN_WSAASYNCGETHOSTBYADDR)(HWND, u_int, const char*, int, int, char*, int); +typedef int(PASCAL * LPFN_WSACANCELASYNCREQUEST)(HANDLE); +typedef int(PASCAL * LPFN_WSAASYNCSELECT)(SOCKET, HWND, u_int, long); +#if ! (defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__)) +WINSOCK_API_LINKAGE u_long PASCAL htonl(u_long); +WINSOCK_API_LINKAGE u_long PASCAL ntohl(u_long); +WINSOCK_API_LINKAGE u_short PASCAL htons(u_short); +WINSOCK_API_LINKAGE u_short PASCAL ntohs(u_short); +WINSOCK_API_LINKAGE int PASCAL select(int nfds,fd_set*,fd_set*,fd_set*,const struct timeval*); +#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */ + +int PASCAL gethostname(char*,int); + +#define WSAMAKEASYNCREPLY(b,e) MAKELONG(b,e) +#define WSAMAKESELECTREPLY(e,error) MAKELONG(e,error) +#define WSAGETASYNCBUFLEN(l) LOWORD(l) +#define WSAGETASYNCERROR(l) HIWORD(l) +#define WSAGETSELECTEVENT(l) LOWORD(l) +#define WSAGETSELECTERROR(l) HIWORD(l) + +typedef struct sockaddr SOCKADDR; +typedef struct sockaddr *PSOCKADDR; +typedef struct sockaddr *LPSOCKADDR; +typedef struct sockaddr_storage SOCKADDR_STORAGE, *PSOCKADDR_STORAGE; +typedef struct sockaddr_in SOCKADDR_IN; +typedef struct sockaddr_in *PSOCKADDR_IN; +typedef struct sockaddr_in *LPSOCKADDR_IN; +typedef struct linger LINGER; +typedef struct linger *PLINGER; +typedef struct linger *LPLINGER; +typedef struct in_addr IN_ADDR; +typedef struct in_addr *PIN_ADDR; +typedef struct in_addr *LPIN_ADDR; +typedef struct fd_set FD_SET; +typedef struct fd_set *PFD_SET; +typedef struct fd_set *LPFD_SET; +typedef struct hostent HOSTENT; +typedef struct hostent *PHOSTENT; +typedef struct hostent *LPHOSTENT; +typedef struct servent SERVENT; +typedef struct servent *PSERVENT; +typedef struct servent *LPSERVENT; +typedef struct protoent PROTOENT; +typedef struct protoent *PPROTOENT; +typedef struct protoent *LPPROTOENT; +typedef struct timeval TIMEVAL; +typedef struct timeval *PTIMEVAL; +typedef struct timeval *LPTIMEVAL; + +/* winsock2 additions */ +#define ADDR_ANY INADDR_ANY + +#define IN_CLASSD(i) (((long)(i) & 0xf0000000) == 0xe0000000) +#define IN_CLASSD_NET 0xf0000000 +#define IN_CLASSD_NSHIFT 28 +#define IN_CLASSD_HOST 0x0fffffff +#define IN_MULTICAST(i) IN_CLASSD(i) + +#define FROM_PROTOCOL_INFO (-1) + +#define SO_DONTLINGER (u_int)(~SO_LINGER) +#define SO_GROUP_ID 0x2001 +#define SO_GROUP_PRIORITY 0x2002 +#define SO_MAX_MSG_SIZE 0x2003 +#define SO_PROTOCOL_INFOA 0x2004 +#define SO_PROTOCOL_INFOW 0x2005 +#ifdef UNICODE +#define SO_PROTOCOL_INFO SO_PROTOCOL_INFOW +#else +#define SO_PROTOCOL_INFO SO_PROTOCOL_INFOA +#endif +#define PVD_CONFIG 0x3001 + +#define MSG_INTERRUPT 0x10 +#define MSG_MAXIOVLEN 16 + +#define WSAAPI WINAPI +#define WSAEVENT HANDLE +#define LPWSAEVENT LPHANDLE +#define WSAOVERLAPPED OVERLAPPED +typedef struct _OVERLAPPED *LPWSAOVERLAPPED; + +#define WSA_IO_PENDING (ERROR_IO_PENDING) +#define WSA_IO_INCOMPLETE (ERROR_IO_INCOMPLETE) +#define WSA_INVALID_HANDLE (ERROR_INVALID_HANDLE) +#define WSA_INVALID_PARAMETER (ERROR_INVALID_PARAMETER) +#define WSA_NOT_ENOUGH_MEMORY (ERROR_NOT_ENOUGH_MEMORY) +#define WSA_OPERATION_ABORTED (ERROR_OPERATION_ABORTED) + +#define WSA_INVALID_EVENT ((WSAEVENT)NULL) +#define WSA_MAXIMUM_WAIT_EVENTS (MAXIMUM_WAIT_OBJECTS) +#define WSA_WAIT_FAILED ((DWORD)-1L) +#define WSA_WAIT_EVENT_0 (WAIT_OBJECT_0) +#define WSA_WAIT_IO_COMPLETION (WAIT_IO_COMPLETION) +#define WSA_WAIT_TIMEOUT (WAIT_TIMEOUT) +#define WSA_INFINITE (INFINITE) + +typedef struct _WSABUF { + unsigned long len; + char *buf; +} WSABUF, *LPWSABUF; + +typedef enum +{ + BestEffortService, + ControlledLoadService, + PredictiveService, + GuaranteedDelayService, + GuaranteedService +} GUARANTEE; + +/* TODO: FLOWSPEC and related definitions belong in qos.h */ + +/* + Windows Sockets 2 Application Programming Interface, + revision 2.2.2 (1997) uses the type uint32 for SERVICETYPE + and the elements of _flowspec, but the type uint32 is not defined + or used anywhere else in the w32api. For now, just use + unsigned int, which is 32 bits on _WIN32 and _WIN64. +*/ + +typedef unsigned int SERVICETYPE; +typedef struct _flowspec +{ + unsigned int TokenRate; + unsigned int TokenBucketSize; + unsigned int PeakBandwidth; + unsigned int Latency; + unsigned int DelayVariation; + SERVICETYPE ServiceType; + unsigned int MaxSduSize; + unsigned int MinimumPolicedSize; + } FLOWSPEC, *PFLOWSPEC, *LPFLOWSPEC; + +typedef struct _QualityOfService +{ + FLOWSPEC SendingFlowspec; + FLOWSPEC ReceivingFlowspec; + WSABUF ProviderSpecific; +} QOS, *LPQOS; + +#define CF_ACCEPT 0x0000 +#define CF_REJECT 0x0001 +#define CF_DEFER 0x0002 +#define SD_RECEIVE 0x00 +#define SD_SEND 0x01 +#define SD_BOTH 0x02 +typedef unsigned int GROUP; + +#define SG_UNCONSTRAINED_GROUP 0x01 +#define SG_CONSTRAINED_GROUP 0x02 +typedef struct _WSANETWORKEVENTS { + long lNetworkEvents; + int iErrorCode[FD_MAX_EVENTS]; +} WSANETWORKEVENTS, *LPWSANETWORKEVENTS; + +#define MAX_PROTOCOL_CHAIN 7 + +#define BASE_PROTOCOL 1 +#define LAYERED_PROTOCOL 0 + +typedef enum _WSAESETSERVICEOP +{ + RNRSERVICE_REGISTER=0, + RNRSERVICE_DEREGISTER, + RNRSERVICE_DELETE +} WSAESETSERVICEOP, *PWSAESETSERVICEOP, *LPWSAESETSERVICEOP; + +typedef struct _AFPROTOCOLS { + INT iAddressFamily; + INT iProtocol; +} AFPROTOCOLS, *PAFPROTOCOLS, *LPAFPROTOCOLS; + +typedef enum _WSAEcomparator +{ + COMP_EQUAL = 0, + COMP_NOTLESS +} WSAECOMPARATOR, *PWSAECOMPARATOR, *LPWSAECOMPARATOR; + +typedef struct _WSAVersion +{ + DWORD dwVersion; + WSAECOMPARATOR ecHow; +} WSAVERSION, *PWSAVERSION, *LPWSAVERSION; + +#ifndef __CSADDR_T_DEFINED /* also in nspapi.h */ +#define __CSADDR_T_DEFINED +typedef struct _SOCKET_ADDRESS { + LPSOCKADDR lpSockaddr; + INT iSockaddrLength; +} SOCKET_ADDRESS,*PSOCKET_ADDRESS,*LPSOCKET_ADDRESS; +typedef struct _CSADDR_INFO { + SOCKET_ADDRESS LocalAddr; + SOCKET_ADDRESS RemoteAddr; + INT iSocketType; + INT iProtocol; +} CSADDR_INFO,*PCSADDR_INFO,*LPCSADDR_INFO; +#endif + +typedef struct _SOCKET_ADDRESS_LIST { + INT iAddressCount; + SOCKET_ADDRESS Address[1]; +} SOCKET_ADDRESS_LIST, * LPSOCKET_ADDRESS_LIST; + +#ifndef __BLOB_T_DEFINED /* also in wtypes.h and nspapi.h */ +#define __BLOB_T_DEFINED +typedef struct _BLOB { + ULONG cbSize; + BYTE *pBlobData; +} BLOB,*PBLOB,*LPBLOB; +#endif + +typedef struct _WSAQuerySetA +{ + DWORD dwSize; + LPSTR lpszServiceInstanceName; + LPGUID lpServiceClassId; + LPWSAVERSION lpVersion; + LPSTR lpszComment; + DWORD dwNameSpace; + LPGUID lpNSProviderId; + LPSTR lpszContext; + DWORD dwNumberOfProtocols; + LPAFPROTOCOLS lpafpProtocols; + LPSTR lpszQueryString; + DWORD dwNumberOfCsAddrs; + LPCSADDR_INFO lpcsaBuffer; + DWORD dwOutputFlags; + LPBLOB lpBlob; +} WSAQUERYSETA, *PWSAQUERYSETA, *LPWSAQUERYSETA; + +typedef struct _WSAQuerySetW +{ + DWORD dwSize; + LPWSTR lpszServiceInstanceName; + LPGUID lpServiceClassId; + LPWSAVERSION lpVersion; + LPWSTR lpszComment; + DWORD dwNameSpace; + LPGUID lpNSProviderId; + LPWSTR lpszContext; + DWORD dwNumberOfProtocols; + LPAFPROTOCOLS lpafpProtocols; + LPWSTR lpszQueryString; + DWORD dwNumberOfCsAddrs; + LPCSADDR_INFO lpcsaBuffer; + DWORD dwOutputFlags; + LPBLOB lpBlob; +} WSAQUERYSETW, *PWSAQUERYSETW, *LPWSAQUERYSETW; + +#ifdef UNICODE +typedef WSAQUERYSETW WSAQUERYSET; +typedef PWSAQUERYSETW PWSAQUERYSET; +typedef LPWSAQUERYSETW LPWSAQUERYSET; +#else +typedef WSAQUERYSETA WSAQUERYSET; +typedef PWSAQUERYSETA PWSAQUERYSET; +typedef LPWSAQUERYSETA LPWSAQUERYSET; +#endif + +#define LUP_DEEP 0x0001 +#define LUP_CONTAINERS 0x0002 +#define LUP_NOCONTAINERS 0x0004 +#define LUP_NEAREST 0x0008 +#define LUP_RETURN_NAME 0x0010 +#define LUP_RETURN_TYPE 0x0020 +#define LUP_RETURN_VERSION 0x0040 +#define LUP_RETURN_COMMENT 0x0080 +#define LUP_RETURN_ADDR 0x0100 +#define LUP_RETURN_BLOB 0x0200 +#define LUP_RETURN_ALIASES 0x0400 +#define LUP_RETURN_QUERY_STRING 0x0800 +#define LUP_RETURN_ALL 0x0FF0 +#define LUP_RES_SERVICE 0x8000 +#define LUP_FLUSHCACHE 0x1000 +#define LUP_FLUSHPREVIOUS 0x2000 + +typedef struct _WSANSClassInfoA +{ + LPSTR lpszName; + DWORD dwNameSpace; + DWORD dwValueType; + DWORD dwValueSize; + LPVOID lpValue; +} WSANSCLASSINFOA, *PWSANSCLASSINFOA, *LPWSANSCLASSINFOA; + +typedef struct _WSANSClassInfoW +{ + LPWSTR lpszName; + DWORD dwNameSpace; + DWORD dwValueType; + DWORD dwValueSize; + LPVOID lpValue; +} WSANSCLASSINFOW, *PWSANSCLASSINFOW, *LPWSANSCLASSINFOW; + +#ifdef UNICODE +typedef WSANSCLASSINFOW WSANSCLASSINFO; +typedef PWSANSCLASSINFOW PWSANSCLASSINFO; +typedef LPWSANSCLASSINFOW LPWSANSCLASSINFO; +#else +typedef WSANSCLASSINFOA WSANSCLASSINFO; +typedef PWSANSCLASSINFOA PWSANSCLASSINFO; +typedef LPWSANSCLASSINFOA LPWSANSCLASSINFO; +#endif + +typedef struct _WSAServiceClassInfoA +{ + LPGUID lpServiceClassId; + LPSTR lpszServiceClassName; + DWORD dwCount; + LPWSANSCLASSINFOA lpClassInfos; +} WSASERVICECLASSINFOA, *PWSASERVICECLASSINFOA, *LPWSASERVICECLASSINFOA; + +typedef struct _WSAServiceClassInfoW +{ + LPGUID lpServiceClassId; + LPWSTR lpszServiceClassName; + DWORD dwCount; + LPWSANSCLASSINFOW lpClassInfos; +} WSASERVICECLASSINFOW, *PWSASERVICECLASSINFOW, *LPWSASERVICECLASSINFOW; + +#ifdef UNICODE +typedef WSASERVICECLASSINFOW WSASERVICECLASSINFO; +typedef PWSASERVICECLASSINFOW PWSASERVICECLASSINFO; +typedef LPWSASERVICECLASSINFOW LPWSASERVICECLASSINFO; +#else +typedef WSASERVICECLASSINFOA WSASERVICECLASSINFO; +typedef PWSASERVICECLASSINFOA PWSASERVICECLASSINFO; +typedef LPWSASERVICECLASSINFOA LPWSASERVICECLASSINFO; +#endif + +typedef struct _WSANAMESPACE_INFOA { + GUID NSProviderId; + DWORD dwNameSpace; + BOOL fActive; + DWORD dwVersion; + LPSTR lpszIdentifier; +} WSANAMESPACE_INFOA, *PWSANAMESPACE_INFOA, *LPWSANAMESPACE_INFOA; + +typedef struct _WSANAMESPACE_INFOW { + GUID NSProviderId; + DWORD dwNameSpace; + BOOL fActive; + DWORD dwVersion; + LPWSTR lpszIdentifier; +} WSANAMESPACE_INFOW, *PWSANAMESPACE_INFOW, *LPWSANAMESPACE_INFOW; + +#ifdef UNICODE +typedef WSANAMESPACE_INFOW WSANAMESPACE_INFO; +typedef PWSANAMESPACE_INFOW PWSANAMESPACE_INFO; +typedef LPWSANAMESPACE_INFOW LPWSANAMESPACE_INFO; +#else +typedef WSANAMESPACE_INFOA WSANAMESPACE_INFO; +typedef PWSANAMESPACE_INFOA PWSANAMESPACE_INFO; +typedef LPWSANAMESPACE_INFOA LPWSANAMESPACE_INFO; +#endif + +typedef struct _WSAPROTOCOLCHAIN { + int ChainLen; + DWORD ChainEntries[MAX_PROTOCOL_CHAIN]; +} WSAPROTOCOLCHAIN, *LPWSAPROTOCOLCHAIN; + +#define WSAPROTOCOL_LEN 255 + +typedef struct _WSAPROTOCOL_INFOA { + DWORD dwServiceFlags1; + DWORD dwServiceFlags2; + DWORD dwServiceFlags3; + DWORD dwServiceFlags4; + DWORD dwProviderFlags; + GUID ProviderId; + DWORD dwCatalogEntryId; + WSAPROTOCOLCHAIN ProtocolChain; + int iVersion; + int iAddressFamily; + int iMaxSockAddr; + int iMinSockAddr; + int iSocketType; + int iProtocol; + int iProtocolMaxOffset; + int iNetworkByteOrder; + int iSecurityScheme; + DWORD dwMessageSize; + DWORD dwProviderReserved; + CHAR szProtocol[WSAPROTOCOL_LEN+1]; +} WSAPROTOCOL_INFOA, *LPWSAPROTOCOL_INFOA; + +typedef struct _WSAPROTOCOL_INFOW { + DWORD dwServiceFlags1; + DWORD dwServiceFlags2; + DWORD dwServiceFlags3; + DWORD dwServiceFlags4; + DWORD dwProviderFlags; + GUID ProviderId; + DWORD dwCatalogEntryId; + WSAPROTOCOLCHAIN ProtocolChain; + int iVersion; + int iAddressFamily; + int iMaxSockAddr; + int iMinSockAddr; + int iSocketType; + int iProtocol; + int iProtocolMaxOffset; + int iNetworkByteOrder; + int iSecurityScheme; + DWORD dwMessageSize; + DWORD dwProviderReserved; + WCHAR szProtocol[WSAPROTOCOL_LEN+1]; +} WSAPROTOCOL_INFOW, * LPWSAPROTOCOL_INFOW; + +typedef int (CALLBACK *LPCONDITIONPROC)(LPWSABUF, LPWSABUF, LPQOS, LPQOS, LPWSABUF, LPWSABUF, GROUP *, DWORD); +typedef void (WINAPI *LPWSAOVERLAPPED_COMPLETION_ROUTINE)(DWORD, DWORD, LPWSAOVERLAPPED, DWORD); + + +#ifdef UNICODE +typedef WSAPROTOCOL_INFOW WSAPROTOCOL_INFO; +typedef LPWSAPROTOCOL_INFOW LPWSAPROTOCOL_INFO; +#else +typedef WSAPROTOCOL_INFOA WSAPROTOCOL_INFO; +typedef LPWSAPROTOCOL_INFOA LPWSAPROTOCOL_INFO; +#endif + +/* Needed for XP & .NET Server function WSANSPIoctl. */ +typedef enum _WSACOMPLETIONTYPE { + NSP_NOTIFY_IMMEDIATELY = 0, + NSP_NOTIFY_HWND, + NSP_NOTIFY_EVENT, + NSP_NOTIFY_PORT, + NSP_NOTIFY_APC +} WSACOMPLETIONTYPE, * PWSACOMPLETIONTYPE, * LPWSACOMPLETIONTYPE; +typedef struct _WSACOMPLETION { + WSACOMPLETIONTYPE Type; + union { + struct { + HWND hWnd; + UINT uMsg; + WPARAM context; + } WindowMessage; + struct { + LPWSAOVERLAPPED lpOverlapped; + } Event; + struct { + LPWSAOVERLAPPED lpOverlapped; + LPWSAOVERLAPPED_COMPLETION_ROUTINE lpfnCompletionProc; + } Apc; + struct { + LPWSAOVERLAPPED lpOverlapped; + HANDLE hPort; + ULONG_PTR Key; + } Port; + } Parameters; +} WSACOMPLETION, *PWSACOMPLETION, *LPWSACOMPLETION; + +#define PFL_MULTIPLE_PROTO_ENTRIES 0x00000001 +#define PFL_RECOMMENDED_PROTO_ENTRY 0x00000002 +#define PFL_HIDDEN 0x00000004 +#define PFL_MATCHES_PROTOCOL_ZERO 0x00000008 +#define XP1_CONNECTIONLESS 0x00000001 +#define XP1_GUARANTEED_DELIVERY 0x00000002 +#define XP1_GUARANTEED_ORDER 0x00000004 +#define XP1_MESSAGE_ORIENTED 0x00000008 +#define XP1_PSEUDO_STREAM 0x00000010 +#define XP1_GRACEFUL_CLOSE 0x00000020 +#define XP1_EXPEDITED_DATA 0x00000040 +#define XP1_CONNECT_DATA 0x00000080 +#define XP1_DISCONNECT_DATA 0x00000100 +#define XP1_SUPPORT_BROADCAST 0x00000200 +#define XP1_SUPPORT_MULTIPOINT 0x00000400 +#define XP1_MULTIPOINT_CONTROL_PLANE 0x00000800 +#define XP1_MULTIPOINT_DATA_PLANE 0x00001000 +#define XP1_QOS_SUPPORTED 0x00002000 +#define XP1_INTERRUPT 0x00004000 +#define XP1_UNI_SEND 0x00008000 +#define XP1_UNI_RECV 0x00010000 +#define XP1_IFS_HANDLES 0x00020000 +#define XP1_PARTIAL_MESSAGE 0x00040000 + +#define BIGENDIAN 0x0000 +#define LITTLEENDIAN 0x0001 + +#define SECURITY_PROTOCOL_NONE 0x0000 +#define JL_SENDER_ONLY 0x01 +#define JL_RECEIVER_ONLY 0x02 +#define JL_BOTH 0x04 +#define WSA_FLAG_OVERLAPPED 0x01 +#define WSA_FLAG_MULTIPOINT_C_ROOT 0x02 +#define WSA_FLAG_MULTIPOINT_C_LEAF 0x04 +#define WSA_FLAG_MULTIPOINT_D_ROOT 0x08 +#define WSA_FLAG_MULTIPOINT_D_LEAF 0x10 +#define IOC_UNIX 0x00000000 +#define IOC_WS2 0x08000000 +#define IOC_PROTOCOL 0x10000000 +#define IOC_VENDOR 0x18000000 + +#define _WSAIO(x,y) (IOC_VOID|(x)|(y)) +#define _WSAIOR(x,y) (IOC_OUT|(x)|(y)) +#define _WSAIOW(x,y) (IOC_IN|(x)|(y)) +#define _WSAIORW(x,y) (IOC_INOUT|(x)|(y)) + +#define SIO_ASSOCIATE_HANDLE _WSAIOW(IOC_WS2,1) +#define SIO_ENABLE_CIRCULAR_QUEUEING _WSAIO(IOC_WS2,2) +#define SIO_FIND_ROUTE _WSAIOR(IOC_WS2,3) +#define SIO_FLUSH _WSAIO(IOC_WS2,4) +#define SIO_GET_BROADCAST_ADDRESS _WSAIOR(IOC_WS2,5) +#define SIO_GET_EXTENSION_FUNCTION_POINTER _WSAIORW(IOC_WS2,6) +#define SIO_GET_QOS _WSAIORW(IOC_WS2,7) +#define SIO_GET_GROUP_QOS _WSAIORW(IOC_WS2,8) +#define SIO_MULTIPOINT_LOOPBACK _WSAIOW(IOC_WS2,9) +#define SIO_MULTICAST_SCOPE _WSAIOW(IOC_WS2,10) +#define SIO_SET_QOS _WSAIOW(IOC_WS2,11) +#define SIO_SET_GROUP_QOS _WSAIOW(IOC_WS2,12) +#define SIO_TRANSLATE_HANDLE _WSAIORW(IOC_WS2,13) +#define SIO_ROUTING_INTERFACE_QUERY _WSAIORW(IOC_WS2,20) +#define SIO_ROUTING_INTERFACE_CHANGE _WSAIOW(IOC_WS2,21) +#define SIO_ADDRESS_LIST_QUERY _WSAIOR(IOC_WS2,22) +#define SIO_ADDRESS_LIST_CHANGE _WSAIO(IOC_WS2,23) +#define SIO_QUERY_TARGET_PNP_HANDLE _WSAIOR(IOC_WS2,24) +#define SIO_NSP_NOTIFY_CHANGE _WSAIOW(IOC_WS2,25) + +#define TH_NETDEV 0x00000001 +#define TH_TAPI 0x00000002 + +WINSOCK_API_LINKAGE SOCKET WINAPI WSAAccept(SOCKET, struct sockaddr *, LPINT, LPCONDITIONPROC, DWORD); +WINSOCK_API_LINKAGE INT WINAPI WSAAddressToStringA(LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFOA, LPSTR, LPDWORD); +WINSOCK_API_LINKAGE INT WINAPI WSAAddressToStringW(LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFOW, LPWSTR, LPDWORD); +WINSOCK_API_LINKAGE BOOL WINAPI WSACloseEvent(WSAEVENT); +WINSOCK_API_LINKAGE int WINAPI WSAConnect(SOCKET, const struct sockaddr *, int, LPWSABUF, LPWSABUF, LPQOS, LPQOS); +WINSOCK_API_LINKAGE WSAEVENT WINAPI WSACreateEvent(void); +WINSOCK_API_LINKAGE int WINAPI WSADuplicateSocketA(SOCKET, DWORD, LPWSAPROTOCOL_INFOA); +WINSOCK_API_LINKAGE int WINAPI WSADuplicateSocketW(SOCKET, DWORD, LPWSAPROTOCOL_INFOW); +WINSOCK_API_LINKAGE INT WINAPI WSAEnumNameSpaceProvidersA(LPDWORD, LPWSANAMESPACE_INFOA); +WINSOCK_API_LINKAGE INT WINAPI WSAEnumNameSpaceProvidersW(LPDWORD, LPWSANAMESPACE_INFOW); +WINSOCK_API_LINKAGE int WINAPI WSAEnumNetworkEvents(SOCKET, WSAEVENT, LPWSANETWORKEVENTS); +WINSOCK_API_LINKAGE int WINAPI WSAEnumProtocolsA(LPINT, LPWSAPROTOCOL_INFOA, LPDWORD); +WINSOCK_API_LINKAGE int WINAPI WSAEnumProtocolsW(LPINT, LPWSAPROTOCOL_INFOW, LPDWORD); +WINSOCK_API_LINKAGE int WINAPI WSAEventSelect(SOCKET, WSAEVENT, long); +WINSOCK_API_LINKAGE BOOL WINAPI WSAGetOverlappedResult(SOCKET, LPWSAOVERLAPPED, LPDWORD, BOOL, LPDWORD); +WINSOCK_API_LINKAGE BOOL WINAPI WSAGetQOSByName(SOCKET, LPWSABUF, LPQOS); +WINSOCK_API_LINKAGE INT WINAPI WSAGetServiceClassInfoA(LPGUID, LPGUID, LPDWORD, LPWSASERVICECLASSINFOA); +WINSOCK_API_LINKAGE INT WINAPI WSAGetServiceClassInfoW(LPGUID, LPGUID, LPDWORD, LPWSASERVICECLASSINFOW); +WINSOCK_API_LINKAGE INT WINAPI WSAGetServiceClassNameByClassIdA(LPGUID, LPSTR, LPDWORD); +WINSOCK_API_LINKAGE INT WINAPI WSAGetServiceClassNameByClassIdW(LPGUID, LPWSTR, LPDWORD); +WINSOCK_API_LINKAGE int WINAPI WSAHtonl(SOCKET, unsigned long, unsigned long *); +WINSOCK_API_LINKAGE int WINAPI WSAHtons(SOCKET, unsigned short, unsigned short *); +WINSOCK_API_LINKAGE INT WINAPI WSAInstallServiceClassA(LPWSASERVICECLASSINFOA); +WINSOCK_API_LINKAGE INT WINAPI WSAInstallServiceClassW(LPWSASERVICECLASSINFOW); +WINSOCK_API_LINKAGE int WINAPI WSAIoctl(SOCKET, DWORD, LPVOID, DWORD, LPVOID, DWORD, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); +WINSOCK_API_LINKAGE SOCKET WINAPI WSAJoinLeaf(SOCKET, const struct sockaddr *, int, LPWSABUF, LPWSABUF, LPQOS, LPQOS, DWORD); +WINSOCK_API_LINKAGE INT WINAPI WSALookupServiceBeginA(LPWSAQUERYSETA, DWORD, LPHANDLE); +WINSOCK_API_LINKAGE INT WINAPI WSALookupServiceBeginW(LPWSAQUERYSETW lpqsRestrictions, DWORD, LPHANDLE); +WINSOCK_API_LINKAGE INT WINAPI WSALookupServiceNextA(HANDLE, DWORD, LPDWORD, LPWSAQUERYSETA); +WINSOCK_API_LINKAGE INT WINAPI WSALookupServiceNextW(HANDLE, DWORD, LPDWORD, LPWSAQUERYSETW); +WINSOCK_API_LINKAGE INT WINAPI WSALookupServiceEnd(HANDLE); +WINSOCK_API_LINKAGE int WINAPI WSANSPIoctl(HANDLE,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPWSACOMPLETION); /* XP or .NET Server */ +WINSOCK_API_LINKAGE int WINAPI WSANtohl(SOCKET, unsigned long, unsigned long *); +WINSOCK_API_LINKAGE int WINAPI WSANtohs(SOCKET, unsigned short, unsigned short *); +WINSOCK_API_LINKAGE int WINAPI WSARecv(SOCKET, LPWSABUF, DWORD, LPDWORD, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); +WINSOCK_API_LINKAGE int WINAPI WSARecvDisconnect(SOCKET, LPWSABUF); +WINSOCK_API_LINKAGE int WINAPI WSARecvFrom(SOCKET, LPWSABUF, DWORD, LPDWORD, LPDWORD, struct sockaddr *, LPINT, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); +WINSOCK_API_LINKAGE INT WINAPI WSARemoveServiceClass(LPGUID); +WINSOCK_API_LINKAGE BOOL WINAPI WSAResetEvent(WSAEVENT); +WINSOCK_API_LINKAGE int WINAPI WSASend(SOCKET, LPWSABUF, DWORD, LPDWORD, DWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); +WINSOCK_API_LINKAGE int WINAPI WSASendDisconnect(SOCKET, LPWSABUF); +WINSOCK_API_LINKAGE int WINAPI WSASendTo(SOCKET, LPWSABUF, DWORD, LPDWORD, DWORD, const struct sockaddr *, int, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); +WINSOCK_API_LINKAGE BOOL WINAPI WSASetEvent(WSAEVENT); +WINSOCK_API_LINKAGE INT WSAAPI WSASetServiceA(LPWSAQUERYSETA, WSAESETSERVICEOP, DWORD); +WINSOCK_API_LINKAGE INT WINAPI WSASetServiceW(LPWSAQUERYSETW, WSAESETSERVICEOP, DWORD); +WINSOCK_API_LINKAGE SOCKET WINAPI WSASocketA(int, int, int, LPWSAPROTOCOL_INFOA, GROUP, DWORD); +WINSOCK_API_LINKAGE SOCKET WINAPI WSASocketW(int, int, int, LPWSAPROTOCOL_INFOW, GROUP, DWORD); +WINSOCK_API_LINKAGE INT WINAPI WSAStringToAddressA(LPSTR, INT, LPWSAPROTOCOL_INFOA, LPSOCKADDR, LPINT); +WINSOCK_API_LINKAGE INT WINAPI WSAStringToAddressW(LPWSTR, INT, LPWSAPROTOCOL_INFOW, LPSOCKADDR, LPINT); +WINSOCK_API_LINKAGE DWORD WINAPI WSAWaitForMultipleEvents(DWORD, const WSAEVENT *, BOOL, DWORD, BOOL); + +typedef SOCKET (WINAPI *LPFN_WSAACCEPT)(SOCKET, struct sockaddr *, LPINT, LPCONDITIONPROC, DWORD); +typedef INT (WINAPI *LPFN_WSAADDRESSTOSTRINGA)(LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFOA, LPSTR, LPDWORD); +typedef INT (WINAPI *LPFN_WSAADDRESSTOSTRINGW)(LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFOW, LPWSTR, LPDWORD); +typedef BOOL (WINAPI *LPFN_WSACLOSEEVENT)(WSAEVENT); +typedef int (WINAPI *LPFN_WSACONNECT)(SOCKET, const struct sockaddr *, int, LPWSABUF, LPWSABUF, LPQOS, LPQOS); +typedef WSAEVENT (WINAPI *LPFN_WSACREATEEVENT)(void); +typedef int (WINAPI *LPFN_WSADUPLICATESOCKETA)(SOCKET, DWORD, LPWSAPROTOCOL_INFOA); +typedef int (WINAPI *LPFN_WSADUPLICATESOCKETW)(SOCKET, DWORD, LPWSAPROTOCOL_INFOW); +typedef INT (WINAPI *LPFN_WSAENUMNAMESPACEPROVIDERSA)(LPDWORD, LPWSANAMESPACE_INFOA); +typedef INT (WINAPI *LPFN_WSAENUMNAMESPACEPROVIDERSW)(LPDWORD, LPWSANAMESPACE_INFOW); +typedef int (WINAPI *LPFN_WSAENUMNETWORKEVENTS)(SOCKET, WSAEVENT, LPWSANETWORKEVENTS); +typedef int (WINAPI *LPFN_WSAENUMPROTOCOLSA)(LPINT, LPWSAPROTOCOL_INFOA, LPDWORD); +typedef int (WINAPI *LPFN_WSAENUMPROTOCOLSW)(LPINT, LPWSAPROTOCOL_INFOW, LPDWORD); +typedef int (WINAPI *LPFN_WSAEVENTSELECT)(SOCKET, WSAEVENT, long); +typedef BOOL (WINAPI *LPFN_WSAGETOVERLAPPEDRESULT)(SOCKET, LPWSAOVERLAPPED, LPDWORD, BOOL, LPDWORD); +typedef BOOL (WINAPI *LPFN_WSAGETQOSBYNAME)(SOCKET, LPWSABUF, LPQOS); +typedef INT (WINAPI *LPFN_WSAGETSERVICECLASSINFOA)(LPGUID, LPGUID, LPDWORD, LPWSASERVICECLASSINFOA); +typedef INT (WINAPI *LPFN_WSAGETSERVICECLASSINFOW)(LPGUID, LPGUID, LPDWORD, LPWSASERVICECLASSINFOW); +typedef INT (WINAPI *LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDA)(LPGUID, LPSTR, LPDWORD); +typedef INT (WINAPI *LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDW)(LPGUID, LPWSTR, LPDWORD); +typedef int (WINAPI *LPFN_WSAHTONL)(SOCKET, unsigned long, unsigned long *); +typedef int (WINAPI *LPFN_WSAHTONS)(SOCKET, unsigned short, unsigned short *); +typedef INT (WINAPI *LPFN_WSAINSTALLSERVICECLASSA)(LPWSASERVICECLASSINFOA); +typedef INT (WINAPI *LPFN_WSAINSTALLSERVICECLASSW)(LPWSASERVICECLASSINFOW); +typedef int (WINAPI *LPFN_WSAIOCTL)(SOCKET, DWORD, LPVOID, DWORD, LPVOID, DWORD, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); +typedef SOCKET (WINAPI *LPFN_WSAJOINLEAF)(SOCKET, const struct sockaddr *, int, LPWSABUF, LPWSABUF, LPQOS, LPQOS, DWORD); +typedef INT (WINAPI *LPFN_WSALOOKUPSERVICEBEGINA)(LPWSAQUERYSETA, DWORD, LPHANDLE); +typedef INT (WINAPI *LPFN_WSALOOKUPSERVICEBEGINW)(LPWSAQUERYSETW, DWORD, LPHANDLE); +typedef INT (WINAPI *LPFN_WSALOOKUPSERVICENEXTA)(HANDLE, DWORD, LPDWORD, LPWSAQUERYSETA); +typedef INT (WINAPI *LPFN_WSALOOKUPSERVICENEXTW)(HANDLE, DWORD, LPDWORD, LPWSAQUERYSETW); +typedef INT (WINAPI *LPFN_WSALOOKUPSERVICEEND)(HANDLE); +typedef int (WINAPI *LPFN_WSANSPIoctl)(HANDLE, DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPWSACOMPLETION); +typedef int (WINAPI *LPFN_WSANTOHL)(SOCKET, unsigned long, unsigned long *); +typedef int (WINAPI *LPFN_WSANTOHS)(SOCKET, unsigned short, unsigned short *); +typedef int (WINAPI *LPFN_WSARECV)(SOCKET, LPWSABUF, DWORD, LPDWORD, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); +typedef int (WINAPI *LPFN_WSARECVDISCONNECT)(SOCKET, LPWSABUF); +typedef int (WINAPI *LPFN_WSARECVFROM)(SOCKET, LPWSABUF, DWORD, LPDWORD, LPDWORD, struct sockaddr *, LPINT, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); +typedef INT (WINAPI *LPFN_WSAREMOVESERVICECLASS)(LPGUID); +typedef BOOL (WINAPI *LPFN_WSARESETEVENT)(WSAEVENT); +typedef int (WINAPI *LPFN_WSASEND)(SOCKET, LPWSABUF, DWORD, LPDWORD, DWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); +typedef int (WINAPI *LPFN_WSASENDDISCONNECT)(SOCKET, LPWSABUF); +typedef int (WINAPI *LPFN_WSASENDTO)(SOCKET, LPWSABUF, DWORD, LPDWORD, DWORD, const struct sockaddr *, int, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); +typedef BOOL (WINAPI *LPFN_WSASETEVENT)(WSAEVENT); +typedef INT (WINAPI *LPFN_WSASETSERVICEA)(LPWSAQUERYSETA, WSAESETSERVICEOP, DWORD); +typedef INT (WINAPI *LPFN_WSASETSERVICEW)(LPWSAQUERYSETW, WSAESETSERVICEOP, DWORD); +typedef SOCKET (WINAPI *LPFN_WSASOCKETA)(int, int, int, LPWSAPROTOCOL_INFOA, GROUP, DWORD); +typedef SOCKET (WINAPI *LPFN_WSASOCKETW)(int, int, int, LPWSAPROTOCOL_INFOW, GROUP, DWORD); +typedef INT (WINAPI *LPFN_WSASTRINGTOADDRESSA)(LPSTR, INT, LPWSAPROTOCOL_INFOA, LPSOCKADDR, LPINT); +typedef INT (WINAPI *LPFN_WSASTRINGTOADDRESSW)(LPWSTR, INT, LPWSAPROTOCOL_INFOW, LPSOCKADDR, LPINT); +typedef DWORD (WINAPI *LPFN_WSAWAITFORMULTIPLEEVENTS)(DWORD, const WSAEVENT *, BOOL, DWORD, BOOL); + +#ifdef UNICODE +#define LPFN_WSAADDRESSTOSTRING LPFN_WSAADDRESSTOSTRINGW +#define LPFN_WSADUPLICATESOCKET LPFN_WSADUPLICATESOCKETW +#define LPFN_WSAENUMNAMESPACEPROVIDERS LPFN_WSAENUMNAMESPACEPROVIDERSW +#define LPFN_WSAENUMPROTOCOLS LPFN_WSAENUMPROTOCOLSW +#define LPFN_WSAGETSERVICECLASSINFO LPFN_WSAGETSERVICECLASSINFOW +#define LPFN_WSAGETSERVICECLASSNAMEBYCLASSID LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDW +#define LPFN_WSAINSTALLSERVICECLASS LPFN_WSAINSTALLSERVICECLASSW +#define LPFN_WSALOOKUPSERVICEBEGIN LPFN_WSALOOKUPSERVICEBEGINW +#define LPFN_WSALOOKUPSERVICENEXT LPFN_WSALOOKUPSERVICENEXTW +#define LPFN_WSASETSERVICE LPFN_WSASETSERVICEW +#define LPFN_WSASOCKET LPFN_WSASOCKETW +#define LPFN_WSASTRINGTOADDRESS LPFN_WSASTRINGTOADDRESSW +#define WSAAddressToString WSAAddressToStringW +#define WSADuplicateSocket WSADuplicateSocketW +#define WSAEnumNameSpaceProviders WSAEnumNameSpaceProvidersW +#define WSAEnumProtocols WSAEnumProtocolsW +#define WSAGetServiceClassInfo WSAGetServiceClassInfoW +#define WSAGetServiceClassNameByClassId WSAGetServiceClassNameByClassIdW +#define WSASetService WSASetServiceW +#define WSASocket WSASocketW +#define WSAStringToAddress WSAStringToAddressW +#define WSALookupServiceBegin WSALookupServiceBeginW +#define WSALookupServiceNext WSALookupServiceNextW +#define WSAInstallServiceClass WSAInstallServiceClassW +#else +#define LPFN_WSAADDRESSTOSTRING LPFN_WSAADDRESSTOSTRINGA +#define LPFN_WSADUPLICATESOCKET LPFN_WSADUPLICATESOCKETW +#define LPFN_WSAENUMNAMESPACEPROVIDERS LPFN_WSAENUMNAMESPACEPROVIDERSA +#define LPFN_WSAENUMPROTOCOLS LPFN_WSAENUMPROTOCOLSA +#define LPFN_WSAGETSERVICECLASSINFO LPFN_WSAGETSERVICECLASSINFOA +#define LPFN_WSAGETSERVICECLASSNAMEBYCLASSID LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDA +#define LPFN_WSAINSTALLSERVICECLASS LPFN_WSAINSTALLSERVICECLASSA +#define LPFN_WSALOOKUPSERVICEBEGIN LPFN_WSALOOKUPSERVICEBEGINA +#define LPFN_WSALOOKUPSERVICENEXT LPFN_WSALOOKUPSERVICENEXTA +#define LPFN_WSASETSERVICE LPFN_WSASETSERVICEA +#define LPFN_WSASOCKET LPFN_WSASOCKETA +#define LPFN_WSASTRINGTOADDRESS LPFN_WSASTRINGTOADDRESSA +#define WSAAddressToString WSAAddressToStringA +#define WSADuplicateSocket WSADuplicateSocketA +#define WSAEnumNameSpaceProviders WSAEnumNameSpaceProvidersA +#define WSAEnumProtocols WSAEnumProtocolsA +#define WSAGetServiceClassInfo WSAGetServiceClassInfoA +#define WSAGetServiceClassNameByClassId WSAGetServiceClassNameByClassIdA +#define WSAInstallServiceClass WSAInstallServiceClassA +#define WSALookupServiceBegin WSALookupServiceBeginA +#define WSALookupServiceNext WSALookupServiceNextA +#define WSASocket WSASocketA +#define WSAStringToAddress WSAStringToAddressA +#define WSASetService WSASetServiceA +#endif + +#ifdef __cplusplus +} +#endif +#endif