From b283b85d0b61ad5580686f9ab64876486ecbd687 Mon Sep 17 00:00:00 2001 From: toaster Date: Mon, 18 Nov 2019 13:27:02 +0000 Subject: [PATCH 001/141] In the absence of a proper revamp of the badnik, give the Deton the SPB sound from Kart when it sees the player, as a teaching shorthand and/or easter egg. --- src/info.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/info.c b/src/info.c index ed29fe2bf..7521c9484 100644 --- a/src/info.c +++ b/src/info.c @@ -4271,7 +4271,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_DETON1, // spawnstate 1, // spawnhealth S_DETON2, // seestate - sfx_None, // seesound + sfx_kc57, // seesound 1, // reactiontime sfx_deton, // attacksound S_NULL, // painstate From 420656a7167bd41bd2cf3067f64131d14815d768 Mon Sep 17 00:00:00 2001 From: toaster Date: Mon, 18 Nov 2019 22:05:05 +0000 Subject: [PATCH 002/141] As requested by MotorRoach and doublechecked with MascaraSnake, DrT's Minus resprite. --- src/dehacked.c | 8 -------- src/info.c | 26 +++++++++----------------- src/info.h | 8 -------- 3 files changed, 9 insertions(+), 33 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index be897b952..d3c0e9af0 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -4970,18 +4970,10 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_MINUS_UPWARD2", "S_MINUS_UPWARD3", "S_MINUS_UPWARD4", - "S_MINUS_UPWARD5", - "S_MINUS_UPWARD6", - "S_MINUS_UPWARD7", - "S_MINUS_UPWARD8", "S_MINUS_DOWNWARD1", "S_MINUS_DOWNWARD2", "S_MINUS_DOWNWARD3", "S_MINUS_DOWNWARD4", - "S_MINUS_DOWNWARD5", - "S_MINUS_DOWNWARD6", - "S_MINUS_DOWNWARD7", - "S_MINUS_DOWNWARD8", // Minus dirt "S_MINUSDIRT1", diff --git a/src/info.c b/src/info.c index b88d02932..4fb57c81d 100644 --- a/src/info.c +++ b/src/info.c @@ -1071,23 +1071,15 @@ state_t states[NUMSTATES] = {SPR_MNUD, 2|FF_ANIMATE, 5, {NULL}, 1, 2, S_MINUS_BURST4}, // S_MINUS_BURST3 {SPR_MNUD, 3|FF_ANIMATE, 5, {NULL}, 1, 2, S_MINUS_BURST5}, // S_MINUS_BURST4 {SPR_MNUD, 4|FF_ANIMATE, 5, {NULL}, 1, 2, S_MINUSDIRT2}, // S_MINUS_BURST5 - {SPR_MNUS, 0, 1, {A_MinusPopup}, 0, 0, S_MINUS_UPWARD1}, // S_MINUS_POPUP - {SPR_MNUS, 0, 1, {A_MinusCheck}, 0, 0, S_MINUS_UPWARD2}, // S_MINUS_UPWARD1 - {SPR_MNUS, 1, 1, {A_MinusCheck}, 0, 0, S_MINUS_UPWARD3}, // S_MINUS_UPWARD2 - {SPR_MNUS, 2, 1, {A_MinusCheck}, 0, 0, S_MINUS_UPWARD4}, // S_MINUS_UPWARD3 - {SPR_MNUS, 3, 1, {A_MinusCheck}, 0, 0, S_MINUS_UPWARD5}, // S_MINUS_UPWARD4 - {SPR_MNUS, 4, 1, {A_MinusCheck}, 0, 0, S_MINUS_UPWARD6}, // S_MINUS_UPWARD5 - {SPR_MNUS, 5, 1, {A_MinusCheck}, 0, 0, S_MINUS_UPWARD7}, // S_MINUS_UPWARD6 - {SPR_MNUS, 6, 1, {A_MinusCheck}, 0, 0, S_MINUS_UPWARD8}, // S_MINUS_UPWARD7 - {SPR_MNUS, 7, 1, {A_MinusCheck}, 0, 0, S_MINUS_UPWARD1}, // S_MINUS_UPWARD8 - {SPR_MNUS, 8, 1, {A_MinusCheck}, 0, 0, S_MINUS_DOWNWARD2}, // S_MINUS_DOWNWARD1 - {SPR_MNUS, 9, 1, {A_MinusCheck}, 0, 0, S_MINUS_DOWNWARD3}, // S_MINUS_DOWNWARD2 - {SPR_MNUS, 10, 1, {A_MinusCheck}, 0, 0, S_MINUS_DOWNWARD4}, // S_MINUS_DOWNWARD3 - {SPR_MNUS, 11, 1, {A_MinusCheck}, 0, 0, S_MINUS_DOWNWARD5}, // S_MINUS_DOWNWARD4 - {SPR_MNUS, 12, 1, {A_MinusCheck}, 0, 0, S_MINUS_DOWNWARD6}, // S_MINUS_DOWNWARD5 - {SPR_MNUS, 13, 1, {A_MinusCheck}, 0, 0, S_MINUS_DOWNWARD7}, // S_MINUS_DOWNWARD6 - {SPR_MNUS, 14, 1, {A_MinusCheck}, 0, 0, S_MINUS_DOWNWARD8}, // S_MINUS_DOWNWARD7 - {SPR_MNUS, 15, 1, {A_MinusCheck}, 0, 0, S_MINUS_DOWNWARD1}, // S_MINUS_DOWNWARD8 + {SPR_MNUS, 3, 1, {A_MinusPopup}, 0, 0, S_MINUS_UPWARD1}, // S_MINUS_POPUP + {SPR_MNUS, 0, 1, {A_MinusCheck}, 0, S_MINUS_DOWNWARD1, S_MINUS_UPWARD2}, // S_MINUS_UPWARD1 + {SPR_MNUS, 1, 1, {A_MinusCheck}, 0, S_MINUS_DOWNWARD2, S_MINUS_UPWARD3}, // S_MINUS_UPWARD2 + {SPR_MNUS, 2, 1, {A_MinusCheck}, 0, S_MINUS_DOWNWARD3, S_MINUS_UPWARD4}, // S_MINUS_UPWARD3 + {SPR_MNUS, 3, 1, {A_MinusCheck}, 0, S_MINUS_DOWNWARD4, S_MINUS_UPWARD1}, // S_MINUS_UPWARD4 + {SPR_MNUS, 4, 1, {A_MinusCheck}, 0, 0, S_MINUS_DOWNWARD2}, // S_MINUS_DOWNWARD1 + {SPR_MNUS, 5, 1, {A_MinusCheck}, 0, 0, S_MINUS_DOWNWARD3}, // S_MINUS_DOWNWARD2 + {SPR_MNUS, 6, 1, {A_MinusCheck}, 0, 0, S_MINUS_DOWNWARD4}, // S_MINUS_DOWNWARD3 + {SPR_MNUS, 7, 1, {A_MinusCheck}, 0, 0, S_MINUS_DOWNWARD1}, // S_MINUS_DOWNWARD4 {SPR_MNUD, FF_ANIMATE, 6, {NULL}, 1, 5, S_MINUSDIRT2}, // S_MINUSDIRT1 {SPR_MNUD, 5, 8, {NULL}, 3, 5, S_MINUSDIRT3}, // S_MINUSDIRT2 diff --git a/src/info.h b/src/info.h index fd9c45a1a..494276212 100644 --- a/src/info.h +++ b/src/info.h @@ -1268,18 +1268,10 @@ typedef enum state S_MINUS_UPWARD2, S_MINUS_UPWARD3, S_MINUS_UPWARD4, - S_MINUS_UPWARD5, - S_MINUS_UPWARD6, - S_MINUS_UPWARD7, - S_MINUS_UPWARD8, S_MINUS_DOWNWARD1, S_MINUS_DOWNWARD2, S_MINUS_DOWNWARD3, S_MINUS_DOWNWARD4, - S_MINUS_DOWNWARD5, - S_MINUS_DOWNWARD6, - S_MINUS_DOWNWARD7, - S_MINUS_DOWNWARD8, // Minus dirt S_MINUSDIRT1, From 2bfbfc1933eb0960b080077020c8fc4a6ffdef51 Mon Sep 17 00:00:00 2001 From: toaster Date: Mon, 18 Nov 2019 22:07:29 +0000 Subject: [PATCH 003/141] Left this in by mistake. --- src/info.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/info.c b/src/info.c index 4fb57c81d..b169f660b 100644 --- a/src/info.c +++ b/src/info.c @@ -1072,10 +1072,10 @@ state_t states[NUMSTATES] = {SPR_MNUD, 3|FF_ANIMATE, 5, {NULL}, 1, 2, S_MINUS_BURST5}, // S_MINUS_BURST4 {SPR_MNUD, 4|FF_ANIMATE, 5, {NULL}, 1, 2, S_MINUSDIRT2}, // S_MINUS_BURST5 {SPR_MNUS, 3, 1, {A_MinusPopup}, 0, 0, S_MINUS_UPWARD1}, // S_MINUS_POPUP - {SPR_MNUS, 0, 1, {A_MinusCheck}, 0, S_MINUS_DOWNWARD1, S_MINUS_UPWARD2}, // S_MINUS_UPWARD1 - {SPR_MNUS, 1, 1, {A_MinusCheck}, 0, S_MINUS_DOWNWARD2, S_MINUS_UPWARD3}, // S_MINUS_UPWARD2 - {SPR_MNUS, 2, 1, {A_MinusCheck}, 0, S_MINUS_DOWNWARD3, S_MINUS_UPWARD4}, // S_MINUS_UPWARD3 - {SPR_MNUS, 3, 1, {A_MinusCheck}, 0, S_MINUS_DOWNWARD4, S_MINUS_UPWARD1}, // S_MINUS_UPWARD4 + {SPR_MNUS, 0, 1, {A_MinusCheck}, 0, 0, S_MINUS_UPWARD2}, // S_MINUS_UPWARD1 + {SPR_MNUS, 1, 1, {A_MinusCheck}, 0, 0, S_MINUS_UPWARD3}, // S_MINUS_UPWARD2 + {SPR_MNUS, 2, 1, {A_MinusCheck}, 0, 0, S_MINUS_UPWARD4}, // S_MINUS_UPWARD3 + {SPR_MNUS, 3, 1, {A_MinusCheck}, 0, 0, S_MINUS_UPWARD1}, // S_MINUS_UPWARD4 {SPR_MNUS, 4, 1, {A_MinusCheck}, 0, 0, S_MINUS_DOWNWARD2}, // S_MINUS_DOWNWARD1 {SPR_MNUS, 5, 1, {A_MinusCheck}, 0, 0, S_MINUS_DOWNWARD3}, // S_MINUS_DOWNWARD2 {SPR_MNUS, 6, 1, {A_MinusCheck}, 0, 0, S_MINUS_DOWNWARD4}, // S_MINUS_DOWNWARD3 From 3ed8470b58645d7208b49930bcf5a1dbfdc736e8 Mon Sep 17 00:00:00 2001 From: Jaime Passos Date: Mon, 18 Nov 2019 19:22:46 -0300 Subject: [PATCH 004/141] remove unused levelwipes --- src/d_main.c | 8 ----- src/doomdef.h | 3 -- src/f_finale.h | 2 -- src/f_wipe.c | 56 ++------------------------------ src/g_game.c | 1 - src/hardware/hw_drv.h | 2 -- src/hardware/hw_main.c | 20 ------------ src/hardware/hw_main.h | 1 - src/hardware/r_opengl/r_opengl.c | 5 --- src/m_menu.c | 2 -- src/sdl/hwsym_sdl.c | 1 - src/sdl/i_video.c | 1 - src/st_stuff.c | 4 --- src/win32/win_dll.c | 2 -- 14 files changed, 3 insertions(+), 105 deletions(-) diff --git a/src/d_main.c b/src/d_main.c index e48b26ba8..728d227b3 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -420,12 +420,6 @@ static void D_Display(void) if (gamestate != GS_TIMEATTACK) CON_Drawer(); -#ifdef LEVELWIPES - // Running a level wipe - if (WipeInAction && WipeInLevel) - F_WipeTicker(); -#endif - M_Drawer(); // menu is drawn even on top of everything // focus lost moved to M_Drawer @@ -445,7 +439,6 @@ static void D_Display(void) { F_WipeEndScreen(); // Funny. -#ifndef LEVELWIPES if (WipeStageTitle && st_overlay) { lt_ticker--; @@ -454,7 +447,6 @@ static void D_Display(void) V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, levelfadecol); F_WipeStartScreen(); } -#endif F_RunWipe(wipetypepost, gamestate != GS_TIMEATTACK && gamestate != GS_TITLESCREEN); } diff --git a/src/doomdef.h b/src/doomdef.h index 8cf9e5d09..511dad858 100644 --- a/src/doomdef.h +++ b/src/doomdef.h @@ -628,9 +628,6 @@ extern const char *compdate, *comptime, *comprevision, *compbranch; #define ROTANGLES 24 // Needs to be a divisor of 360 (45, 60, 90, 120...) #define ROTANGDIFF (360 / ROTANGLES) -/// Level wipes -//#define LEVELWIPES - #ifndef HAVE_PNG #define NO_PNG_LUMPS #endif diff --git a/src/f_finale.h b/src/f_finale.h index 82a7e1408..b5334c29a 100644 --- a/src/f_finale.h +++ b/src/f_finale.h @@ -141,7 +141,6 @@ void F_MenuPresTicker(boolean run); #define FORCEWIPEOFF -2 extern boolean WipeInAction; -extern boolean WipeInLevel; extern boolean WipeStageTitle; typedef enum @@ -176,7 +175,6 @@ extern INT32 lastwipetic; void F_WipeStartScreen(void); void F_WipeEndScreen(void); void F_RunWipe(UINT8 wipetype, boolean drawMenu); -void F_WipeTicker(void); void F_WipeStageTitle(void); #define F_WipeColorFill(c) V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, (wipecolorfill = c)) tic_t F_GetWipeLength(UINT8 wipetype); diff --git a/src/f_wipe.c b/src/f_wipe.c index 17ffbe0c4..b2283c574 100644 --- a/src/f_wipe.c +++ b/src/f_wipe.c @@ -91,7 +91,6 @@ UINT8 wipedefs[NUMWIPEDEFS] = { //-------------------------------------------------------------------------- boolean WipeInAction = false; -boolean WipeInLevel = false; boolean WipeStageTitle = false; INT32 lastwipetic = 0; @@ -104,8 +103,6 @@ static UINT8 *wipe_scr_end; //screen 4 static UINT8 *wipe_scr; //screen 0 (main drawing) static fixed_t paldiv = 0; -static UINT8 curwipetype; -static UINT8 curwipeframe; UINT8 wipecolorfill = 31; /** Create fademask_t from lump @@ -349,8 +346,6 @@ static void F_DoWipe(fademask_t *fademask) free(scrxpos); free(scrypos); } - if (wipestyle == WIPESTYLE_LEVEL) - F_WipeStageTitle(); } #endif @@ -416,13 +411,6 @@ void F_RunWipe(UINT8 wipetype, boolean drawMenu) else wipestyle = WIPESTYLE_NORMAL; - curwipetype = wipetype; - curwipeframe = 0; -#ifdef LEVELWIPES - if (WipeInLevel) - return; -#endif - // lastwipetic should either be 0 or the tic we last wiped // on for fade-to-black for (;;) @@ -450,6 +438,9 @@ void F_RunWipe(UINT8 wipetype, boolean drawMenu) #endif F_DoWipe(fmask); + if (wipestyle == WIPESTYLE_LEVEL) + F_WipeStageTitle(); + I_OsPolling(); I_UpdateNoBlit(); @@ -463,47 +454,6 @@ void F_RunWipe(UINT8 wipetype, boolean drawMenu) } WipeInAction = false; - WipeInLevel = false; - WipeStageTitle = false; -#endif -} - -/** Run and display the fade with the level. - */ -void F_WipeTicker(void) -{ -#ifndef NOWIPE -#ifndef LEVELWIPES - WipeInAction = false; -#else - fademask_t *fmask; - - // Wait, what? - if (!WipeInAction) - return; - - if (rendermode == render_soft) - wipe_scr_start = wipe_scr_end = screens[0]; - - // get fademask first so we can tell if it exists or not - fmask = F_GetFadeMask(curwipetype, curwipeframe++); - if (!fmask) - { - // stop - WipeInAction = false; - WipeInLevel = false; - WipeStageTitle = false; - return; - } - -#ifdef HWRENDER - // send in the wipe type and wipe frame because we need to cache the graphic - if (rendermode == render_opengl) - HWR_DoLevelWipe(curwipetype, curwipeframe-1, wipecolorfill); // also send the wipe color - else -#endif - F_DoWipe(fmask); -#endif WipeStageTitle = false; #endif } diff --git a/src/g_game.c b/src/g_game.c index 5e1645901..3242db300 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -1728,7 +1728,6 @@ void G_StartTitleCard(void) // start the title card WipeStageTitle = (!titlemapinaction); - WipeInLevel = true; wipestyleflags |= WSF_FADEIN; wipestyleflags &= ~WSF_FADEOUT; } diff --git a/src/hardware/hw_drv.h b/src/hardware/hw_drv.h index 1e40a403d..aed1611f1 100644 --- a/src/hardware/hw_drv.h +++ b/src/hardware/hw_drv.h @@ -71,7 +71,6 @@ EXPORT void HWRAPI(FlushScreenTextures) (void); EXPORT void HWRAPI(StartScreenWipe) (void); EXPORT void HWRAPI(EndScreenWipe) (void); EXPORT void HWRAPI(DoScreenWipe) (void); -EXPORT void HWRAPI(DoScreenWipeLevel) (void); EXPORT void HWRAPI(DrawIntermissionBG) (void); EXPORT void HWRAPI(MakeScreenTexture) (void); EXPORT void HWRAPI(MakeScreenFinalTexture) (void); @@ -113,7 +112,6 @@ struct hwdriver_s StartScreenWipe pfnStartScreenWipe; EndScreenWipe pfnEndScreenWipe; DoScreenWipe pfnDoScreenWipe; - DoScreenWipeLevel pfnDoScreenWipeLevel; DrawIntermissionBG pfnDrawIntermissionBG; MakeScreenTexture pfnMakeScreenTexture; MakeScreenFinalTexture pfnMakeScreenFinalTexture; diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index 263344ebe..5f0c25a59 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -7085,26 +7085,6 @@ void HWR_DoTintedWipe(UINT8 wipenum, UINT8 scrnnum) HWR_DoWipe(wipenum, scrnnum); } -void HWR_DoLevelWipe(UINT8 wipenum, UINT8 scrnnum, UINT8 colfill) -{ -#ifndef LEVELWIPES - (void)wipenum; - (void)scrnnum; - (void)colfill; -#else - if (!HWR_WipeCheck(wipenum, scrnnum)) - return; - - HWR_EndScreenWipe(); - V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, colfill); - HWR_StartScreenWipe(); - HWR_GetFadeMask(wipelumpnum); - - HWD.pfnDoScreenWipeLevel(); - F_WipeStageTitle(); -#endif -} - void HWR_MakeScreenFinalTexture(void) { HWD.pfnMakeScreenFinalTexture(); diff --git a/src/hardware/hw_main.h b/src/hardware/hw_main.h index fb726f2f9..e19c557d0 100644 --- a/src/hardware/hw_main.h +++ b/src/hardware/hw_main.h @@ -67,7 +67,6 @@ void HWR_EndScreenWipe(void); void HWR_DrawIntermissionBG(void); void HWR_DoWipe(UINT8 wipenum, UINT8 scrnnum); void HWR_DoTintedWipe(UINT8 wipenum, UINT8 scrnnum); -void HWR_DoLevelWipe(UINT8 wipenum, UINT8 scrnnum, UINT8 wipecolorfill); void HWR_MakeScreenFinalTexture(void); void HWR_DrawScreenFinalTexture(int width, int height); diff --git a/src/hardware/r_opengl/r_opengl.c b/src/hardware/r_opengl/r_opengl.c index 323772cb0..8c0ca7155 100644 --- a/src/hardware/r_opengl/r_opengl.c +++ b/src/hardware/r_opengl/r_opengl.c @@ -2587,11 +2587,6 @@ EXPORT void HWRAPI(DoScreenWipe)(void) tex_downloaded = endScreenWipe; } -EXPORT void HWRAPI(DoScreenWipeLevel)(void) -{ - DoScreenWipe(); -} - // Create a texture from the screen. EXPORT void HWRAPI(MakeScreenTexture) (void) { diff --git a/src/m_menu.c b/src/m_menu.c index 7a5aa8ae6..9ffc1150c 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -3365,8 +3365,6 @@ boolean M_Responder(event_t *ev) void M_Drawer(void) { boolean wipe = WipeInAction; - if (WipeInLevel) - wipe = false; if (currentMenu == &MessageDef) menuactive = true; diff --git a/src/sdl/hwsym_sdl.c b/src/sdl/hwsym_sdl.c index 82a430ee6..5f040023a 100644 --- a/src/sdl/hwsym_sdl.c +++ b/src/sdl/hwsym_sdl.c @@ -97,7 +97,6 @@ void *hwSym(const char *funcName,void *handle) GETFUNC(StartScreenWipe); GETFUNC(EndScreenWipe); GETFUNC(DoScreenWipe); - GETFUNC(DoScreenWipeLevel); GETFUNC(DrawIntermissionBG); GETFUNC(MakeScreenTexture); GETFUNC(MakeScreenFinalTexture); diff --git a/src/sdl/i_video.c b/src/sdl/i_video.c index 5f162b00d..f22c79eca 100644 --- a/src/sdl/i_video.c +++ b/src/sdl/i_video.c @@ -1666,7 +1666,6 @@ void I_StartupGraphics(void) HWD.pfnStartScreenWipe = hwSym("StartScreenWipe",NULL); HWD.pfnEndScreenWipe = hwSym("EndScreenWipe",NULL); HWD.pfnDoScreenWipe = hwSym("DoScreenWipe",NULL); - HWD.pfnDoScreenWipeLevel= hwSym("DoScreenWipeLevel",NULL); HWD.pfnDrawIntermissionBG=hwSym("DrawIntermissionBG",NULL); HWD.pfnMakeScreenTexture= hwSym("MakeScreenTexture",NULL); HWD.pfnMakeScreenFinalTexture=hwSym("MakeScreenFinalTexture",NULL); diff --git a/src/st_stuff.c b/src/st_stuff.c index 4e8afa16a..621f67820 100644 --- a/src/st_stuff.c +++ b/src/st_stuff.c @@ -1294,10 +1294,8 @@ void ST_drawTitleCard(void) return; #endif -#ifndef LEVELWIPES if ((lt_ticker-lt_lasttic) > 1) lt_ticker = lt_lasttic+1; -#endif ST_cacheLevelTitle(); actpat = lt_patches[0]; @@ -1351,9 +1349,7 @@ luahook: void ST_preLevelTitleCardDrawer(tic_t ticker, boolean update) { V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, levelfadecol); -#ifndef LEVELWIPES if (ticker < PRELEVELTIME-1) -#endif ST_drawWipeTitleCard(); I_OsPolling(); diff --git a/src/win32/win_dll.c b/src/win32/win_dll.c index 1311b6870..5378bb52f 100644 --- a/src/win32/win_dll.c +++ b/src/win32/win_dll.c @@ -121,7 +121,6 @@ static loadfunc_t hwdFuncTable[] = { {"StartScreenWipe@0", &hwdriver.pfnStartScreenWipe}, {"EndScreenWipe@0", &hwdriver.pfnEndScreenWipe}, {"DoScreenWipe@4", &hwdriver.pfnDoScreenWipe}, - {"DoScreenWipeLevel@0", &hwdriver.pfnDoScreenWipeLevel}, {"DrawIntermissionBG@0",&hwdriver.pfnDrawIntermissionBG}, {"MakeScreenTexture@0", &hwdriver.pfnMakeScreenTexture}, {"MakeScreenFinalTexture@0", &hwdriver.pfnMakeScreenFinalTexture}, @@ -153,7 +152,6 @@ static loadfunc_t hwdFuncTable[] = { {"StartScreenWipe", &hwdriver.pfnStartScreenWipe}, {"EndScreenWipe", &hwdriver.pfnEndScreenWipe}, {"DoScreenWipe", &hwdriver.pfnDoScreenWipe}, - {"DoScreenWipeLevel", &hwdriver.pfnDoScreenWipeLevel}, {"DrawIntermissionBG", &hwdriver.pfnDrawIntermissionBG}, {"MakeScreenTexture", &hwdriver.pfnMakeScreenTexture}, {"MakeScreenFinalTexture", &hwdriver.pfnMakeScreenFinalTexture}, From 349dab0b4b1fd6a3db6763e625aea81e7e651f9a Mon Sep 17 00:00:00 2001 From: Jaime Passos Date: Mon, 18 Nov 2019 20:07:37 -0300 Subject: [PATCH 005/141] remove UINT8 wipecolorfill --- src/f_finale.h | 3 +-- src/f_wipe.c | 2 -- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/f_finale.h b/src/f_finale.h index b5334c29a..024b183b2 100644 --- a/src/f_finale.h +++ b/src/f_finale.h @@ -165,7 +165,6 @@ extern wipestyleflags_t wipestyleflags; #define FADEGREENFACTOR 15 #define FADEBLUEFACTOR 10 -extern UINT8 wipecolorfill; extern INT32 lastwipetic; // Don't know where else to place this constant @@ -176,7 +175,7 @@ void F_WipeStartScreen(void); void F_WipeEndScreen(void); void F_RunWipe(UINT8 wipetype, boolean drawMenu); void F_WipeStageTitle(void); -#define F_WipeColorFill(c) V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, (wipecolorfill = c)) +#define F_WipeColorFill(c) V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, c) tic_t F_GetWipeLength(UINT8 wipetype); boolean F_WipeExists(UINT8 wipetype); diff --git a/src/f_wipe.c b/src/f_wipe.c index b2283c574..20651cb1d 100644 --- a/src/f_wipe.c +++ b/src/f_wipe.c @@ -103,8 +103,6 @@ static UINT8 *wipe_scr_end; //screen 4 static UINT8 *wipe_scr; //screen 0 (main drawing) static fixed_t paldiv = 0; -UINT8 wipecolorfill = 31; - /** Create fademask_t from lump * * \param lump Lump name to get data from From 51e4153ec046f8e76a8e00571442de7fdb2c2ab5 Mon Sep 17 00:00:00 2001 From: Jaime Passos Date: Mon, 18 Nov 2019 21:44:02 -0300 Subject: [PATCH 006/141] fix subttl --- src/st_stuff.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/st_stuff.c b/src/st_stuff.c index 621f67820..60aadccfe 100644 --- a/src/st_stuff.c +++ b/src/st_stuff.c @@ -1333,7 +1333,7 @@ void ST_drawTitleCard(void) V_DrawLevelTitle(lvlttlxpos - ttlscroll, 80, V_PERPLAYER, lvlttl); if (!(mapheaderinfo[gamemap-1]->levelflags & LF_NOZONE)) V_DrawLevelTitle(zonexpos + ttlscroll, 104, V_PERPLAYER, M_GetText("Zone")); - V_DrawCenteredString(subttlxpos - ttlnumxpos, 128, V_PERPLAYER|V_ALLOWLOWERCASE, subttl); + V_DrawCenteredString(subttlxpos - ttlscroll, 128, V_PERPLAYER|V_ALLOWLOWERCASE, subttl); lt_lasttic = lt_ticker; From 9939e1f775dc6513198758470fcc4e188effe5af Mon Sep 17 00:00:00 2001 From: Jaime Passos Date: Mon, 18 Nov 2019 21:45:30 -0300 Subject: [PATCH 007/141] change vertical alignment --- src/st_stuff.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/st_stuff.c b/src/st_stuff.c index 60aadccfe..90e64798a 100644 --- a/src/st_stuff.c +++ b/src/st_stuff.c @@ -1333,7 +1333,7 @@ void ST_drawTitleCard(void) V_DrawLevelTitle(lvlttlxpos - ttlscroll, 80, V_PERPLAYER, lvlttl); if (!(mapheaderinfo[gamemap-1]->levelflags & LF_NOZONE)) V_DrawLevelTitle(zonexpos + ttlscroll, 104, V_PERPLAYER, M_GetText("Zone")); - V_DrawCenteredString(subttlxpos - ttlscroll, 128, V_PERPLAYER|V_ALLOWLOWERCASE, subttl); + V_DrawCenteredString(subttlxpos - ttlscroll, 152, V_PERPLAYER|V_ALLOWLOWERCASE, subttl); lt_lasttic = lt_ticker; From 17f2e83d4f68080a03344566757691aafd23fb6d Mon Sep 17 00:00:00 2001 From: toaster Date: Tue, 19 Nov 2019 13:36:33 +0000 Subject: [PATCH 008/141] MS Info packet tweaks. * Report a completely uppercase map title in SERVERINFO, as per the MS previously expected (resolves #300). * Ignore colour codes in map titles in SERVERINFO, since those now function like with console font. * Modulo the skin number provided in PLAYERINFO by 3 in DEVELOP builds, so it's safe to test with certain characters on the MS (AS LONG AS IT'S NOT A RELEASE BUILD). --- src/d_clisrv.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index aca37df1d..ece74ed4b 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -1302,7 +1302,19 @@ static void SV_SendServerInfo(INT32 node, tic_t servertime) M_Memcpy(netbuffer->u.serverinfo.mapmd5, mapmd5, 16); if (strcmp(mapheaderinfo[gamemap-1]->lvlttl, "")) - strncpy(netbuffer->u.serverinfo.maptitle, (char *)mapheaderinfo[gamemap-1]->lvlttl, 33); + { + char *read = mapheaderinfo[gamemap-1]->lvlttl, *writ = netbuffer->u.serverinfo.maptitle; + while (*read != '\0' && (read-mapheaderinfo[gamemap-1]->lvlttl) < 33) + { + if (!(*read & 0x80)) + { + *writ = toupper(*read); + writ++; + } + read++; + } + //strncpy(netbuffer->u.serverinfo.maptitle, (char *)mapheaderinfo[gamemap-1]->lvlttl, 33); + } else strncpy(netbuffer->u.serverinfo.maptitle, "UNKNOWN", 33); @@ -1358,7 +1370,11 @@ static void SV_SendPlayerInfo(INT32 node) netbuffer->u.playerinfo[i].score = LONG(players[i].score); netbuffer->u.playerinfo[i].timeinserver = SHORT((UINT16)(players[i].jointime / TICRATE)); - netbuffer->u.playerinfo[i].skin = (UINT8)players[i].skin; + netbuffer->u.playerinfo[i].skin = (UINT8)(players[i].skin +#ifdef DEVELOP // it's safe to do this only because PLAYERINFO isn't read by the game itself + % 3 +#endif + ); // Extra data netbuffer->u.playerinfo[i].data = 0; //players[i].skincolor; From 834a36c1ed8eff98cf90af351211e43dbf46905f Mon Sep 17 00:00:00 2001 From: toaster Date: Tue, 19 Nov 2019 13:40:07 +0000 Subject: [PATCH 009/141] lmao how did i forget a null terminator --- src/d_clisrv.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index ece74ed4b..cde0382f5 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -1304,7 +1304,7 @@ static void SV_SendServerInfo(INT32 node, tic_t servertime) if (strcmp(mapheaderinfo[gamemap-1]->lvlttl, "")) { char *read = mapheaderinfo[gamemap-1]->lvlttl, *writ = netbuffer->u.serverinfo.maptitle; - while (*read != '\0' && (read-mapheaderinfo[gamemap-1]->lvlttl) < 33) + while (*read != '\0' && (read-mapheaderinfo[gamemap-1]->lvlttl) < 32) { if (!(*read & 0x80)) { @@ -1313,6 +1313,7 @@ static void SV_SendServerInfo(INT32 node, tic_t servertime) } read++; } + *writ = '\0'; //strncpy(netbuffer->u.serverinfo.maptitle, (char *)mapheaderinfo[gamemap-1]->lvlttl, 33); } else From 0b7d613e609b838869d53d0bc4f8781d58b6271d Mon Sep 17 00:00:00 2001 From: toaster Date: Tue, 19 Nov 2019 14:09:24 +0000 Subject: [PATCH 010/141] Make the All Players linedef exectutor activator sector type more reliable for FOFs that span multiple sectors (resolves #301). --- src/p_spec.c | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/src/p_spec.c b/src/p_spec.c index f1a697399..bde941f29 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -4443,27 +4443,18 @@ void P_ProcessSpecialSector(player_t *player, sector_t *sector, sector_t *rovers { if (roversector) { - if (players[i].mo->subsector->sector == roversector) - ; - else if (sector->flags & SF_TRIGGERSPECIAL_TOUCH) + if (sector->flags & SF_TRIGGERSPECIAL_TOUCH) { - boolean insector = false; msecnode_t *node; for (node = players[i].mo->touching_sectorlist; node; node = node->m_sectorlist_next) { - if (node->m_sector == roversector) - { - insector = true; + if (P_ThingIsOnThe3DFloor(players[i].mo, sector, node->m_sector)) break; - } } - if (!insector) + if (!node) goto DoneSection2; } - else - goto DoneSection2; - - if (!P_ThingIsOnThe3DFloor(players[i].mo, sector, roversector)) + else if (players[i].mo->subsector && !P_ThingIsOnThe3DFloor(players[i].mo, sector, players[i].mo->subsector->sector)) // this function handles basically everything for us lmao goto DoneSection2; } else From d5d892004f04951bcfd82ff53f5d2a76dec4e193 Mon Sep 17 00:00:00 2001 From: toaster Date: Tue, 19 Nov 2019 15:59:24 +0000 Subject: [PATCH 011/141] As selected by Nev3r, implement option 2: Proximity Bastard for the Sea Egg to resolve #303. --- src/p_mobj.c | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index cbd6c3c7f..f2dd1a734 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -4538,23 +4538,29 @@ static void P_Boss3Thinker(mobj_t *mobj) } else if (mobj->movecount) // Firing mode { - // look for a new target - P_BossTargetPlayer(mobj, false); - - if (!mobj->target || !mobj->target->player) - return; - - // Always face your target. - A_FaceTarget(mobj); - // Check if the attack animation is running. If not, play it. if (mobj->state < &states[mobj->info->missilestate] || mobj->state > &states[mobj->info->raisestate]) { + // look for a new target + P_BossTargetPlayer(mobj, true); + + if (!mobj->target || !mobj->target->player) + return; + if (mobj->health <= mobj->info->damage) // pinch phase mobj->movecount--; // limited number of shots before diving again if (mobj->movecount) P_SetMobjState(mobj, mobj->info->missilestate+1); } + else if (mobj->target && mobj->target->player) + { + angle_t diff = R_PointToAngle2(mobj->x, mobj->y, mobj->target->x, mobj->target->y) - mobj->angle; + if (diff > ANGLE_180) + diff = InvAngle(InvAngle(diff)/4); + else + diff /= 4; + mobj->angle += diff; + } } else if (mobj->threshold >= 0) // Traveling mode { @@ -4669,13 +4675,10 @@ static void P_Boss3Thinker(mobj_t *mobj) S_StartSound(mobj, shock->info->seesound); // look for a new target - P_BossTargetPlayer(mobj, false); + P_BossTargetPlayer(mobj, true); if (mobj->target && mobj->target->player) - { - A_FaceTarget(mobj); P_SetMobjState(mobj, mobj->info->missilestate); - } } else if (mobj->flags2 & (MF2_STRONGBOX|MF2_CLASSICPUSH)) // just hit the bottom of your tube { From a76d50025bba8231ee66895a6644b784b8850fd3 Mon Sep 17 00:00:00 2001 From: toaster Date: Tue, 19 Nov 2019 20:24:44 +0000 Subject: [PATCH 012/141] Further cleanup. --- src/d_clisrv.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index cde0382f5..40703b557 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -1301,10 +1301,10 @@ static void SV_SendServerInfo(INT32 node, tic_t servertime) M_Memcpy(netbuffer->u.serverinfo.mapmd5, mapmd5, 16); - if (strcmp(mapheaderinfo[gamemap-1]->lvlttl, "")) + if (*mapheaderinfo[gamemap-1]->lvlttl) { char *read = mapheaderinfo[gamemap-1]->lvlttl, *writ = netbuffer->u.serverinfo.maptitle; - while (*read != '\0' && (read-mapheaderinfo[gamemap-1]->lvlttl) < 32) + while (writ < (netbuffer->u.serverinfo.maptitle+32) && *read != '\0') { if (!(*read & 0x80)) { @@ -1317,7 +1317,7 @@ static void SV_SendServerInfo(INT32 node, tic_t servertime) //strncpy(netbuffer->u.serverinfo.maptitle, (char *)mapheaderinfo[gamemap-1]->lvlttl, 33); } else - strncpy(netbuffer->u.serverinfo.maptitle, "UNKNOWN", 33); + strncpy(netbuffer->u.serverinfo.maptitle, "UNKNOWN", 32); netbuffer->u.serverinfo.maptitle[32] = '\0'; From 2db9a95189992a478902617f54acf68d68fc2f6a Mon Sep 17 00:00:00 2001 From: Louis-Antoine Date: Tue, 19 Nov 2019 22:44:33 +0100 Subject: [PATCH 013/141] Prevent drowning after completing the level --- src/p_mobj.c | 2 +- src/p_user.c | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index cbd6c3c7f..d73f11f81 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -3408,7 +3408,7 @@ void P_MobjCheckWater(mobj_t *mobj) // Drown timer setting if ((p->powers[pw_shield] & SH_PROTECTWATER) // Has water protection - || (p->exiting) // Or exiting + || (p->exiting) || (p->pflags & PF_FINISHED) // Or finished/exiting || (maptol & TOL_NIGHTS) // Or in NiGHTS mode || (mariomode)) // Or in Mario mode... { diff --git a/src/p_user.c b/src/p_user.c index 47812744e..672cf8aae 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -2153,6 +2153,10 @@ void P_DoPlayerFinish(player_t *player) if (netgame) CONS_Printf(M_GetText("%s has completed the level.\n"), player_names[player-players]); + + player->powers[pw_underwater] = 0; + player->powers[pw_spacetime] = 0; + P_RestoreMusic(player); } // @@ -2860,7 +2864,7 @@ static void P_CheckUnderwaterAndSpaceTimer(player_t *player) { tic_t timeleft = (player->powers[pw_spacetime]) ? player->powers[pw_spacetime] : player->powers[pw_underwater]; - if (player->exiting) + if (player->exiting || (player->pflags & PF_FINISHED)) player->powers[pw_underwater] = player->powers[pw_spacetime] = 0; timeleft--; // The original code was all n*TICRATE + 1, so let's remove 1 tic for simplicity From 2f5ab8df6aae2f702dbf9427c0a9fdc20369bce5 Mon Sep 17 00:00:00 2001 From: toaster Date: Wed, 20 Nov 2019 14:34:19 +0000 Subject: [PATCH 014/141] resolve #315 --- src/p_spec.c | 75 ++++++++++++++++++++++++++++------------------------ 1 file changed, 40 insertions(+), 35 deletions(-) diff --git a/src/p_spec.c b/src/p_spec.c index bde941f29..f814e89c6 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -4439,50 +4439,55 @@ void P_ProcessSpecialSector(player_t *player, sector_t *sector, sector_t *rovers case 3: // Linedef executor requires all players present /// \todo check continues for proper splitscreen support? for (i = 0; i < MAXPLAYERS; i++) - if (playeringame[i] && !players[i].bot && players[i].mo && (gametype != GT_COOP || players[i].lives > 0)) + { + if (!playeringame[i]) + continue; + if (!players[i].mo) + continue; + if (players[i].spectator) + continue; + if (players[i].bot) + continue; + if (gametype == GT_COOP && players[i].lives <= 0) + continue; + if (roversector) { - if (roversector) + if (sector->flags & SF_TRIGGERSPECIAL_TOUCH) { - if (sector->flags & SF_TRIGGERSPECIAL_TOUCH) + msecnode_t *node; + for (node = players[i].mo->touching_sectorlist; node; node = node->m_sectorlist_next) { - msecnode_t *node; - for (node = players[i].mo->touching_sectorlist; node; node = node->m_sectorlist_next) - { - if (P_ThingIsOnThe3DFloor(players[i].mo, sector, node->m_sector)) - break; - } - if (!node) - goto DoneSection2; + if (P_ThingIsOnThe3DFloor(players[i].mo, sector, node->m_sector)) + break; } - else if (players[i].mo->subsector && !P_ThingIsOnThe3DFloor(players[i].mo, sector, players[i].mo->subsector->sector)) // this function handles basically everything for us lmao + if (!node) + goto DoneSection2; + } + else if (players[i].mo->subsector && !P_ThingIsOnThe3DFloor(players[i].mo, sector, players[i].mo->subsector->sector)) // this function handles basically everything for us lmao + goto DoneSection2; + } + else + { + if (players[i].mo->subsector->sector == sector) + ; + else if (sector->flags & SF_TRIGGERSPECIAL_TOUCH) + { + msecnode_t *node; + for (node = players[i].mo->touching_sectorlist; node; node = node->m_sectorlist_next) + { + if (node->m_sector == sector) + break; + } + if (!node) goto DoneSection2; } else - { - if (players[i].mo->subsector->sector == sector) - ; - else if (sector->flags & SF_TRIGGERSPECIAL_TOUCH) - { - boolean insector = false; - msecnode_t *node; - for (node = players[i].mo->touching_sectorlist; node; node = node->m_sectorlist_next) - { - if (node->m_sector == sector) - { - insector = true; - break; - } - } - if (!insector) - goto DoneSection2; - } - else - goto DoneSection2; + goto DoneSection2; - if (special == 3 && !P_MobjReadyToTrigger(players[i].mo, sector)) - goto DoneSection2; - } + if (special == 3 && !P_MobjReadyToTrigger(players[i].mo, sector)) + goto DoneSection2; } + } /* FALLTHRU */ case 4: // Linedef executor that doesn't require touching floor case 5: // Linedef executor From 553e80332e38410b0cb9ad3292e889813e5e56b4 Mon Sep 17 00:00:00 2001 From: lachwright Date: Wed, 20 Nov 2019 23:45:34 +0800 Subject: [PATCH 015/141] Add bump sounds to rollout rock & add Newton's third law to jumping off them --- src/info.c | 2 +- src/p_enemy.c | 3 +++ src/p_map.c | 4 +++- src/p_user.c | 2 ++ 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/info.c b/src/info.c index 50da228e5..404958058 100644 --- a/src/info.c +++ b/src/info.c @@ -13448,7 +13448,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = sfx_None, // attacksound S_NULL, // painstate 12*TICRATE, // painchance (sets how long an unridden rock should last before disappearing - set to 0 to disable) - sfx_None, // painsound + sfx_s3k49, // painsound S_NULL, // meleestate S_NULL, // missilestate S_NULL, // deathstate diff --git a/src/p_enemy.c b/src/p_enemy.c index ea09533df..26d079cb4 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -14534,6 +14534,9 @@ void A_RolloutRock(mobj_t *actor) actor->friction = FRACUNIT; // turns out riding on solids sucks, so let's just make it easier on ourselves + if (actor->eflags & MFE_JUSTHITFLOOR) + S_StartSound(actor, actor->info->painsound); + if (actor->threshold) actor->threshold--; diff --git a/src/p_map.c b/src/p_map.c index 28c5ac955..97bff8156 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -1032,7 +1032,8 @@ static boolean PIT_CheckThing(mobj_t *thing) P_SetPlayerMobjState(tmthing, S_PLAY_WALK); tmthing->player->powers[pw_carry] = CR_ROLLOUT; P_SetTarget(&tmthing->tracer, thing); - P_SetObjectMomZ(thing, tmthing->momz, true); + if (!P_IsObjectOnGround(thing)) + thing->momz += tmthing->momz; return true; } } @@ -1063,6 +1064,7 @@ static boolean PIT_CheckThing(mobj_t *thing) thing->momy = tmthing->momy; tmthing->momx = tempmomx; tmthing->momy = tempmomy; + S_StartSound(thing, thing->info->painsound); } } diff --git a/src/p_user.c b/src/p_user.c index 47812744e..f79e51080 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -4428,6 +4428,8 @@ void P_DoJump(player_t *player, boolean soundandstate) player->mo->momz = 9*FRACUNIT; if (P_MobjFlip(player->mo->tracer)*player->mo->tracer->momz > 0) player->mo->momz += player->mo->tracer->momz; + if (!P_IsObjectOnGround(player->mo->tracer)) + P_SetObjectMomZ(player->mo->tracer, -9*FRACUNIT, true); player->powers[pw_carry] = CR_NONE; player->mo->tracer->flags |= MF_PUSHABLE; P_SetTarget(&player->mo->tracer->tracer, NULL); From a9326be8d741546cd10c3c3c6e6fa4c6c77181ce Mon Sep 17 00:00:00 2001 From: lachwright Date: Thu, 21 Nov 2019 01:05:22 +0800 Subject: [PATCH 016/141] Add GFZ debris; reorganize wood debris index --- src/dehacked.c | 7 ++-- src/info.c | 101 +++++++++++++++++++++++++++++++------------------ src/info.h | 11 +++--- 3 files changed, 74 insertions(+), 45 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index 45148d712..4b5640c02 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -7669,8 +7669,6 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_DUST3", "S_DUST4", - "S_WOODDEBRIS", - "S_ROCKSPAWN", "S_ROCKCRUMBLEA", @@ -7689,7 +7687,9 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_ROCKCRUMBLEN", "S_ROCKCRUMBLEO", "S_ROCKCRUMBLEP", + "S_GFZDEBRIS", "S_BRICKDEBRIS", + "S_WOODDEBRIS", #ifdef SEENAMES "S_NAMECHECK", @@ -8445,7 +8445,6 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_EXPLODE", // Robot Explosion "MT_UWEXPLODE", // Underwater Explosion "MT_DUST", - "MT_WOODDEBRIS", "MT_ROCKSPAWNER", "MT_FALLINGROCK", "MT_ROCKCRUMBLE1", @@ -8464,7 +8463,9 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_ROCKCRUMBLE14", "MT_ROCKCRUMBLE15", "MT_ROCKCRUMBLE16", + "MT_GFZDEBRIS", "MT_BRICKDEBRIS", + "MT_WOODDEBRIS", #ifdef SEENAMES "MT_NAMECHECK", diff --git a/src/info.c b/src/info.c index 50da228e5..fb74aba87 100644 --- a/src/info.c +++ b/src/info.c @@ -3883,8 +3883,6 @@ state_t states[NUMSTATES] = {SPR_DUST, 2|FF_TRANS60, 3, {NULL}, 0, 0, S_DUST4}, // S_DUST3 {SPR_DUST, 3|FF_TRANS70, 2, {NULL}, 0, 0, S_NULL}, // S_DUST4 - {SPR_WDDB, FF_ANIMATE, -1, {A_DebrisRandom}, 7, 2, S_NULL}, // S_WOODDEBRIS - {SPR_NULL, 0, 1, {A_RockSpawn}, 0, 0, S_ROCKSPAWN}, // S_ROCKSPAWN {SPR_ROIA, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_NULL}, // S_ROCKCRUMBLEA @@ -3904,7 +3902,9 @@ state_t states[NUMSTATES] = {SPR_ROIO, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 7, 2, S_NULL}, // S_ROCKCRUMBLEO {SPR_ROIP, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 7, 2, S_NULL}, // S_ROCKCRUMBLEP + {SPR_GFZD, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 31, 1, S_NULL}, // S_GFZDEBRIS {SPR_BRIC, FF_ANIMATE, -1, {A_DebrisRandom}, 7, 2, S_NULL}, // S_BRICKDEBRIS + {SPR_WDDB, FF_ANIMATE, -1, {A_DebrisRandom}, 7, 2, S_NULL}, // S_WOODDEBRIS #ifdef SEENAMES {SPR_NULL, 0, 1, {NULL}, 0, 0, S_NULL}, // S_NAMECHECK @@ -20960,33 +20960,6 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, - { // MT_WOODDEBRIS - -1, // doomednum - S_WOODDEBRIS, // spawnstate - 1, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 0, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 0, // display offset - 100, // mass - 0, // damage - sfx_wbreak, // activesound - MF_NOBLOCKMAP|MF_NOCLIPTHING|MF_RUNSPAWNFUNC|MF_NOCLIPHEIGHT|MF_SCENERY, // flags - S_NULL // raisestate - }, - { // MT_ROCKSPAWNER 1202, // doomednum S_ROCKSPAWN, // spawnstate @@ -21473,16 +21446,16 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, - { // MT_BRICKDEBRIS + { // MT_GFZDEBRIS -1, // doomednum - S_BRICKDEBRIS, // spawnstate - 1, // spawnhealth + S_GFZDEBRIS, // spawnstate + 1, // spawnhealth S_NULL, // seestate - sfx_None, // seesound + sfx_None, // seesound 0, // reactiontime sfx_None, // attacksound S_NULL, // painstate - 0, // painchance + 0, // painchance sfx_None, // painsound S_NULL, // meleestate S_NULL, // missilestate @@ -21490,16 +21463,70 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL, // xdeathstate sfx_None, // deathsound 0, // speed - 16*FRACUNIT, // radius + 32*FRACUNIT, // radius + 64*FRACUNIT, // height + 0, // display offset + 100, // mass + 0, // damage + sfx_wbreak, // activesound + MF_NOBLOCKMAP|MF_NOCLIPTHING|MF_RUNSPAWNFUNC|MF_NOCLIPHEIGHT|MF_SCENERY, // flags + S_NULL // raisestate + }, + + { // MT_BRICKDEBRIS + -1, // doomednum + S_BRICKDEBRIS, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 0, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16*FRACUNIT, // radius 16*FRACUNIT, // height 0, // display offset - 100, // mass + 100, // mass 0, // damage - sfx_None, // activesound + sfx_None, // activesound MF_NOBLOCKMAP|MF_NOCLIPTHING|MF_RUNSPAWNFUNC|MF_NOCLIPHEIGHT|MF_SCENERY, // flags S_NULL // raisestate }, + { // MT_WOODDEBRIS + -1, // doomednum + S_WOODDEBRIS, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 0, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16*FRACUNIT, // radius + 16*FRACUNIT, // height + 0, // display offset + 100, // mass + 0, // damage + sfx_wbreak, // activesound + MF_NOBLOCKMAP|MF_NOCLIPTHING|MF_RUNSPAWNFUNC|MF_NOCLIPHEIGHT|MF_SCENERY, // flags + S_NULL // raisestate + }, + #ifdef SEENAMES { // MT_NAMECHECK -1, // doomednum diff --git a/src/info.h b/src/info.h index e28a24ade..025ab55d2 100644 --- a/src/info.h +++ b/src/info.h @@ -3970,8 +3970,6 @@ typedef enum state S_DUST3, S_DUST4, - S_WOODDEBRIS, - S_ROCKSPAWN, S_ROCKCRUMBLEA, @@ -3991,8 +3989,10 @@ typedef enum state S_ROCKCRUMBLEO, S_ROCKCRUMBLEP, - // Bricks + // Level debris + S_GFZDEBRIS, S_BRICKDEBRIS, + S_WOODDEBRIS, #ifdef SEENAMES S_NAMECHECK, @@ -4768,7 +4768,6 @@ typedef enum mobj_type MT_EXPLODE, // Robot Explosion MT_UWEXPLODE, // Underwater Explosion MT_DUST, - MT_WOODDEBRIS, MT_ROCKSPAWNER, MT_FALLINGROCK, MT_ROCKCRUMBLE1, @@ -4788,8 +4787,10 @@ typedef enum mobj_type MT_ROCKCRUMBLE15, MT_ROCKCRUMBLE16, - // Bricks + // Level debris + MT_GFZDEBRIS, MT_BRICKDEBRIS, + MT_WOODDEBRIS, #ifdef SEENAMES MT_NAMECHECK, From eb80360850b7226af60a0390bb64b57b340ebabf Mon Sep 17 00:00:00 2001 From: lachwright Date: Thu, 21 Nov 2019 01:14:24 +0800 Subject: [PATCH 017/141] Add missing GFZD spriteset --- src/hardware/hw_light.c | 5 +++-- src/info.c | 7 ++++--- src/info.h | 7 ++++--- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/hardware/hw_light.c b/src/hardware/hw_light.c index 584c58463..4df71d145 100644 --- a/src/hardware/hw_light.c +++ b/src/hardware/hw_light.c @@ -586,7 +586,6 @@ light_t *t_lspr[NUMSPRITES] = &lspr[SUPERSPARK_L], // SPR_BOM3 &lspr[NOLIGHT], // SPR_BOM4 &lspr[REDBALL_L], // SPR_BMNB - &lspr[NOLIGHT], // SPR_WDDB // Crumbly rocks &lspr[NOLIGHT], // SPR_ROIA @@ -606,8 +605,10 @@ light_t *t_lspr[NUMSPRITES] = &lspr[NOLIGHT], // SPR_ROIO &lspr[NOLIGHT], // SPR_ROIP - // Bricks + // Level debris + &lspr[NOLIGHT], // SPR_GFZD &lspr[NOLIGHT], // SPR_BRIC + &lspr[NOLIGHT], // SPR_WDDB // Gravity Well Objects &lspr[NOLIGHT], // SPR_GWLG diff --git a/src/info.c b/src/info.c index fb74aba87..0a1911e5d 100644 --- a/src/info.c +++ b/src/info.c @@ -483,7 +483,6 @@ char sprnames[NUMSPRITES + 1][5] = "BOM3", // Boss Explosion 2 "BOM4", // Underwater Explosion "BMNB", // Mine Explosion - "WDDB", // Wood Debris // Crumbly rocks "ROIA", @@ -503,8 +502,10 @@ char sprnames[NUMSPRITES + 1][5] = "ROIO", "ROIP", - // Bricks - "BRIC", + // Level debris + "GFZD", // GFZ debris + "BRIC", // Bricks + "WDDB", // Wood Debris // Gravity Well Objects "GWLG", diff --git a/src/info.h b/src/info.h index 025ab55d2..102610336 100644 --- a/src/info.h +++ b/src/info.h @@ -748,7 +748,6 @@ typedef enum sprite SPR_BOM3, // Boss Explosion 2 SPR_BOM4, // Underwater Explosion SPR_BMNB, // Mine Explosion - SPR_WDDB, // Wood Debris // Crumbly rocks SPR_ROIA, @@ -768,8 +767,10 @@ typedef enum sprite SPR_ROIO, SPR_ROIP, - // Bricks - SPR_BRIC, + // Level debris + SPR_GFZD, // GFZ debris + SPR_BRIC, // Bricks + SPR_WDDB, // Wood Debris // Gravity Well Objects SPR_GWLG, From d1d814600147e594cec1380b580fa6aaf62669e2 Mon Sep 17 00:00:00 2001 From: lachwright Date: Thu, 21 Nov 2019 01:26:53 +0800 Subject: [PATCH 018/141] Correct sound for GFZ debris (copy-paste oversight) --- src/info.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/info.c b/src/info.c index 0a1911e5d..691fb5616 100644 --- a/src/info.c +++ b/src/info.c @@ -21469,7 +21469,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 0, // display offset 100, // mass 0, // damage - sfx_wbreak, // activesound + sfx_crumbl, // activesound MF_NOBLOCKMAP|MF_NOCLIPTHING|MF_RUNSPAWNFUNC|MF_NOCLIPHEIGHT|MF_SCENERY, // flags S_NULL // raisestate }, From c672dfc12d44e374b0935adb5f0b3f02e65d2a31 Mon Sep 17 00:00:00 2001 From: sphere Date: Thu, 21 Nov 2019 00:34:58 +0100 Subject: [PATCH 019/141] Move the main menu options around. --- src/m_menu.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/m_menu.c b/src/m_menu.c index 7a5aa8ae6..ef28b9ba9 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -474,16 +474,16 @@ static consvar_t cv_dummymares = {"dummymares", "Overall", CV_HIDEN|CV_CALL, dum // --------- static menuitem_t MainMenu[] = { - {IT_STRING|IT_CALL, NULL, "Secrets", M_SecretsMenu, 76}, - {IT_STRING|IT_CALL, NULL, "1 player", M_SinglePlayerMenu, 84}, + {IT_STRING|IT_CALL, NULL, "1 Player", M_SinglePlayerMenu, 76}, #ifndef NONET - {IT_STRING|IT_SUBMENU, NULL, "multiplayer", &MP_MainDef, 92}, + {IT_STRING|IT_SUBMENU, NULL, "Multiplayer", &MP_MainDef, 84}, #else - {IT_STRING|IT_CALL, NULL, "multiplayer", M_StartSplitServerMenu, 92}, + {IT_STRING|IT_CALL, NULL, "Multiplayer", M_StartSplitServerMenu, 84}, #endif - {IT_STRING|IT_CALL, NULL, "options", M_Options, 100}, - {IT_CALL |IT_STRING, NULL, "addons", M_Addons, 108}, - {IT_STRING|IT_CALL, NULL, "quit game", M_QuitSRB2, 116}, + {IT_STRING|IT_CALL, NULL, "Secrets", M_SecretsMenu, 92}, + {IT_CALL |IT_STRING, NULL, "Addons", M_Addons, 100}, + {IT_STRING|IT_CALL, NULL, "Options", M_Options, 108}, + {IT_STRING|IT_CALL, NULL, "Quit Game", M_QuitSRB2, 116}, }; typedef enum From f50785d1d64397992143d9a54e50f47935ec9c6f Mon Sep 17 00:00:00 2001 From: sphere Date: Thu, 21 Nov 2019 01:14:09 +0100 Subject: [PATCH 020/141] Reorganize sound options. --- src/m_menu.c | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/m_menu.c b/src/m_menu.c index ef28b9ba9..540482c82 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -1348,37 +1348,33 @@ static menuitem_t OP_OpenGLColorMenu[] = static menuitem_t OP_SoundOptionsMenu[] = { {IT_HEADER, NULL, "Game Audio", NULL, 0}, - {IT_STRING | IT_CVAR, NULL, "Sound Effects", &cv_gamesounds, 6}, - {IT_STRING | IT_CVAR | IT_CV_SLIDER, NULL, "Sound Volume", &cv_soundvolume, 11}, + {IT_STRING | IT_CVAR, NULL, "Sound Effects", &cv_gamesounds, 12}, + {IT_STRING | IT_CVAR | IT_CV_SLIDER, NULL, "Sound Volume", &cv_soundvolume, 22}, - {IT_STRING | IT_CVAR, NULL, "Digital Music", &cv_gamedigimusic, 21}, - {IT_STRING | IT_CVAR | IT_CV_SLIDER, NULL, "Digital Music Volume", &cv_digmusicvolume, 26}, + {IT_STRING | IT_CVAR, NULL, "Digital Music", &cv_gamedigimusic, 42}, + {IT_STRING | IT_CVAR | IT_CV_SLIDER, NULL, "Digital Music Volume", &cv_digmusicvolume, 52}, - {IT_STRING | IT_CVAR, NULL, "MIDI Music", &cv_gamemidimusic, 36}, - {IT_STRING | IT_CVAR | IT_CV_SLIDER, NULL, "MIDI Music Volume", &cv_midimusicvolume, 41}, + {IT_STRING | IT_CVAR, NULL, "MIDI Music", &cv_gamemidimusic, 72}, + {IT_STRING | IT_CVAR | IT_CV_SLIDER, NULL, "MIDI Music Volume", &cv_midimusicvolume, 82}, - {IT_HEADER, NULL, "Accessibility", NULL, 50}, - {IT_STRING | IT_CVAR, NULL, "Closed Captioning", &cv_closedcaptioning, 56}, - {IT_STRING | IT_CVAR, NULL, "Reset Music Upon Dying", &cv_resetmusic, 61}, - - {IT_STRING | IT_CVAR, NULL, "Play Sound Effects if Unfocused", &cv_playsoundsifunfocused, 71}, - {IT_STRING | IT_CVAR, NULL, "Play Music if Unfocused", &cv_playmusicifunfocused, 76}, + {IT_HEADER, NULL, "Accessibility", NULL, 102}, + {IT_STRING | IT_CVAR, NULL, "Closed Captioning", &cv_closedcaptioning, 114}, #ifdef HAVE_MIXERX - {IT_STRING | IT_SUBMENU, NULL, "Advanced Settings...", &OP_SoundAdvancedDef, 94}, + {IT_STRING | IT_SUBMENU, NULL, "Advanced Settings...", &OP_SoundAdvancedDef, 144}, #endif }; #ifdef HAVE_MIXERX #ifdef HAVE_OPENMPT -#define OPENMPT_MENUOFFSET 32 +#define OPENMPT_MENUOFFSET 16 #else #define OPENMPT_MENUOFFSET 0 #endif #ifdef HAVE_MIXERX -#define MIXERX_MENUOFFSET 81 +#define MIXERX_MENUOFFSET 40 #else #define MIXERX_MENUOFFSET 0 #endif @@ -1387,18 +1383,22 @@ static menuitem_t OP_SoundAdvancedMenu[] = { #ifdef HAVE_OPENMPT {IT_HEADER, NULL, "OpenMPT Settings", NULL, 10}, - {IT_STRING | IT_CVAR, NULL, "Instrument Filter", &cv_modfilter, 22}, + {IT_STRING | IT_CVAR, NULL, "Instrument Filter", &cv_modfilter, 16}, #endif #ifdef HAVE_MIXERX {IT_HEADER, NULL, "MIDI Settings", NULL, OPENMPT_MENUOFFSET+10}, - {IT_STRING | IT_CVAR, NULL, "MIDI Player", &cv_midiplayer, OPENMPT_MENUOFFSET+22}, - {IT_STRING | IT_CVAR | IT_CV_STRING, NULL, "FluidSynth Sound Font File", &cv_midisoundfontpath, OPENMPT_MENUOFFSET+34}, - {IT_STRING | IT_CVAR | IT_CV_STRING, NULL, "TiMidity++ Config Folder", &cv_miditimiditypath, OPENMPT_MENUOFFSET+61}, + {IT_STRING | IT_CVAR, NULL, "MIDI Player", &cv_midiplayer, OPENMPT_MENUOFFSET+16}, + {IT_STRING | IT_CVAR | IT_CV_STRING, NULL, "FluidSynth Sound Font File", &cv_midisoundfontpath, OPENMPT_MENUOFFSET+21}, + {IT_STRING | IT_CVAR | IT_CV_STRING, NULL, "TiMidity++ Config Folder", &cv_miditimiditypath, OPENMPT_MENUOFFSET+35}, #endif {IT_HEADER, NULL, "Miscellaneous", NULL, OPENMPT_MENUOFFSET+MIXERX_MENUOFFSET+10}, - {IT_STRING | IT_CVAR, NULL, "Let Levels Force Reset Music", &cv_resetmusicbyheader, OPENMPT_MENUOFFSET+MIXERX_MENUOFFSET+22}, + {IT_STRING | IT_CVAR, NULL, "Play Sound Effects if Unfocused", &cv_playsoundsifunfocused, OPENMPT_MENUOFFSET+MIXERX_MENUOFFSET+16}, + {IT_STRING | IT_CVAR, NULL, "Play Music if Unfocused", &cv_playmusicifunfocused, OPENMPT_MENUOFFSET+MIXERX_MENUOFFSET+21}, + + {IT_STRING | IT_CVAR, NULL, "Reset Music Upon Dying", &cv_resetmusic, OPENMPT_MENUOFFSET+MIXERX_MENUOFFSET+31}, + {IT_STRING | IT_CVAR, NULL, "Let Levels Force Reset Music", &cv_resetmusicbyheader, OPENMPT_MENUOFFSET+MIXERX_MENUOFFSET+36}, }; #undef OPENMPT_MENUOFFSET @@ -1992,11 +1992,11 @@ menu_t OP_ColorOptionsDef = 0, NULL }; -menu_t OP_SoundOptionsDef = DEFAULTSCROLLMENUSTYLE( +menu_t OP_SoundOptionsDef = DEFAULTMENUSTYLE( MN_OP_MAIN + (MN_OP_SOUND << 6), "M_SOUND", OP_SoundOptionsMenu, &OP_MainDef, 30, 30); #ifdef HAVE_MIXERX -menu_t OP_SoundAdvancedDef = DEFAULTMENUSTYLE(MN_OP_MAIN + (MN_OP_SOUND << 6), "M_SOUND", OP_SoundAdvancedMenu, &OP_SoundOptionsDef, 30, 30); +menu_t OP_SoundAdvancedDef = DEFAULTSCROLLMENUSTYLE(MN_OP_MAIN + (MN_OP_SOUND << 6), "M_SOUND", OP_SoundAdvancedMenu, &OP_SoundOptionsDef, 30, 30); #endif menu_t OP_ServerOptionsDef = DEFAULTSCROLLMENUSTYLE( From 693d6b5ca51ec6bd56e27ca46c3ec458a236c86f Mon Sep 17 00:00:00 2001 From: sphere Date: Thu, 21 Nov 2019 01:34:32 +0100 Subject: [PATCH 021/141] Rename "secrets" to "extras". --- src/d_netcmd.c | 4 ++-- src/dehacked.c | 2 +- src/f_finale.c | 2 +- src/m_menu.c | 8 ++++---- src/m_menu.h | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 4de166e41..f46468feb 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -4336,9 +4336,9 @@ static void Command_Isgamemodified_f(void) if (savemoddata) CONS_Printf(M_GetText("modifiedgame is true, but you can save emblem and time data in this mod.\n")); else if (modifiedgame) - CONS_Printf(M_GetText("modifiedgame is true, secrets will not be unlocked\n")); + CONS_Printf(M_GetText("modifiedgame is true, extras will not be unlocked\n")); else - CONS_Printf(M_GetText("modifiedgame is false, you can unlock secrets\n")); + CONS_Printf(M_GetText("modifiedgame is false, you can unlock extravalues\n")); } static void Command_Cheats_f(void) diff --git a/src/dehacked.c b/src/dehacked.c index 45148d712..7f0fa8557 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -8904,7 +8904,7 @@ static const char *const MENUTYPES_LIST[] = { "OP_SCREENSHOTS", "OP_ERASEDATA", - // Secrets + // Extras "SR_MAIN", "SR_PANDORA", "SR_LEVELSELECT", diff --git a/src/f_finale.c b/src/f_finale.c index e3809ea25..10d3d02b4 100644 --- a/src/f_finale.c +++ b/src/f_finale.c @@ -1386,7 +1386,7 @@ boolean F_CreditResponder(event_t *event) void F_StartGameEvaluation(void) { - // Credits option in secrets menu + // Credits option in extras menu if (cursaveslot == -1) { S_FadeOutStopMusic(2*MUSICRATE); diff --git a/src/m_menu.c b/src/m_menu.c index 540482c82..4ecc41d0b 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -480,7 +480,7 @@ static menuitem_t MainMenu[] = #else {IT_STRING|IT_CALL, NULL, "Multiplayer", M_StartSplitServerMenu, 84}, #endif - {IT_STRING|IT_CALL, NULL, "Secrets", M_SecretsMenu, 92}, + {IT_STRING|IT_CALL, NULL, "Extras", M_SecretsMenu, 92}, {IT_CALL |IT_STRING, NULL, "Addons", M_Addons, 100}, {IT_STRING|IT_CALL, NULL, "Options", M_Options, 108}, {IT_STRING|IT_CALL, NULL, "Quit Game", M_QuitSRB2, 116}, @@ -661,7 +661,7 @@ static menuitem_t SR_PandorasBox[] = // Sky Room Custom Unlocks static menuitem_t SR_MainMenu[] = { - {IT_STRING|IT_SUBMENU,NULL, "Secrets Checklist", &SR_UnlockChecklistDef, 0}, + {IT_STRING|IT_SUBMENU,NULL, "Extras Checklist", &SR_UnlockChecklistDef, 0}, {IT_DISABLED, NULL, "", NULL, 0}, // Custom1 {IT_DISABLED, NULL, "", NULL, 0}, // Custom2 {IT_DISABLED, NULL, "", NULL, 0}, // Custom3 @@ -1455,7 +1455,7 @@ enum static menuitem_t OP_EraseDataMenu[] = { {IT_STRING | IT_CALL, NULL, "Erase Record Data", M_EraseData, 10}, - {IT_STRING | IT_CALL, NULL, "Erase Secrets Data", M_EraseData, 20}, + {IT_STRING | IT_CALL, NULL, "Erase Extras Data", M_EraseData, 20}, {IT_STRING | IT_CALL, NULL, "\x85" "Erase ALL Data", M_EraseData, 40}, }; @@ -10910,7 +10910,7 @@ static void M_EraseData(INT32 choice) if (choice == 0) eschoice = M_GetText("Record Attack data"); else if (choice == 1) - eschoice = M_GetText("Secrets data"); + eschoice = M_GetText("Extras data"); else eschoice = M_GetText("ALL game data"); diff --git a/src/m_menu.h b/src/m_menu.h index ec7915cc2..ce7198d75 100644 --- a/src/m_menu.h +++ b/src/m_menu.h @@ -99,7 +99,7 @@ typedef enum MN_OP_SCREENSHOTS, MN_OP_ERASEDATA, - // Secrets + // Extras MN_SR_MAIN, MN_SR_PANDORA, MN_SR_LEVELSELECT, From a4b58efe28d267a91af91a6eec5e8260846952a0 Mon Sep 17 00:00:00 2001 From: sphere Date: Thu, 21 Nov 2019 02:19:31 +0100 Subject: [PATCH 022/141] Move SP and MP down if extras aren't unlocked yet. --- src/m_menu.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/m_menu.c b/src/m_menu.c index 4ecc41d0b..6cef107ff 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -488,11 +488,11 @@ static menuitem_t MainMenu[] = typedef enum { - secrets = 0, singleplr, multiplr, - options, + secrets = 2, addons, + options, quitdoom } main_e; @@ -3436,6 +3436,8 @@ void M_StartControlPanel(void) if (!Playing()) { // Secret menu! + MainMenu[singleplr].alphaKey = (M_AnySecretUnlocked()) ? 76 : 84; + MainMenu[multiplr].alphaKey = (M_AnySecretUnlocked()) ? 84 : 92; MainMenu[secrets].status = (M_AnySecretUnlocked()) ? (IT_STRING | IT_CALL) : (IT_DISABLED); currentMenu = &MainDef; From 3a2a1130e6d8b6494d003433905f16642609dd26 Mon Sep 17 00:00:00 2001 From: sphere Date: Thu, 21 Nov 2019 02:24:12 +0100 Subject: [PATCH 023/141] Reword some evaluation sentences. --- src/f_finale.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/f_finale.c b/src/f_finale.c index 10d3d02b4..2d20eb7f4 100644 --- a/src/f_finale.c +++ b/src/f_finale.c @@ -1541,9 +1541,9 @@ void F_GameEvaluationDrawer(void) } } else if (netgame) - V_DrawString(8, 96, V_YELLOWMAP, "Prizes only\nawarded in\nsingle player!"); + V_DrawString(8, 96, V_YELLOWMAP, "Multiplayer games\ncan't unlock\nextras!"); else - V_DrawString(8, 96, V_YELLOWMAP, "Prizes not\nawarded in\nmodified games!"); + V_DrawString(8, 96, V_YELLOWMAP, "Modified games\ncan't unlock\nextras!"); } #endif } @@ -1590,7 +1590,7 @@ void F_GameEvaluationTicker(void) { HU_SetCEchoFlags(V_YELLOWMAP|V_RETURN8); HU_SetCEchoDuration(6); - HU_DoCEcho("\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\Prizes only awarded in singleplayer!"); + HU_DoCEcho("\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\Multiplayer games can't unlock extras!"); S_StartSound(NULL, sfx_s3k68); } else if (!modifiedgame || savemoddata) @@ -1612,7 +1612,7 @@ void F_GameEvaluationTicker(void) { HU_SetCEchoFlags(V_YELLOWMAP|V_RETURN8); HU_SetCEchoDuration(6); - HU_DoCEcho("\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\Prizes not awarded in modified games!"); + HU_DoCEcho("\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\Modified games can't unlock extras!"); S_StartSound(NULL, sfx_s3k68); } } From 6f7edf8aa78b6d02f14c1fbec979773dda7cdbd0 Mon Sep 17 00:00:00 2001 From: sphere Date: Thu, 21 Nov 2019 02:43:07 +0100 Subject: [PATCH 024/141] Move tutorial to the bottom of the 1 Player menu. --- src/m_menu.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/m_menu.c b/src/m_menu.c index 6cef107ff..0db4afead 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -726,20 +726,20 @@ static menuitem_t SR_EmblemHintMenu[] = // Single Player Main static menuitem_t SP_MainMenu[] = { - {IT_CALL | IT_STRING, NULL, "Tutorial", M_StartTutorial, 84}, - {IT_CALL | IT_STRING, NULL, "Start Game", M_LoadGame, 92}, - {IT_SECRET, NULL, "Record Attack", M_TimeAttack, 100}, - {IT_SECRET, NULL, "NiGHTS Mode", M_NightsAttack, 108}, - {IT_CALL | IT_STRING | IT_CALL_NOTMODIFIED, NULL, "Statistics", M_Statistics, 116}, + {IT_CALL | IT_STRING, NULL, "Start Game", M_LoadGame, 84}, + {IT_SECRET, NULL, "Record Attack", M_TimeAttack, 92}, + {IT_SECRET, NULL, "NiGHTS Mode", M_NightsAttack, 100}, + {IT_CALL | IT_STRING | IT_CALL_NOTMODIFIED, NULL, "Statistics", M_Statistics, 108}, + {IT_CALL | IT_STRING, NULL, "Tutorial", M_StartTutorial, 116}, }; enum { - sptutorial, sploadgame, sprecordattack, spnightsmode, - spstatistics + spstatistics, + sptutorial }; // Single Player Load Game @@ -1666,7 +1666,7 @@ menu_t SP_MainDef = //CENTERMENUSTYLE(NULL, SP_MainMenu, &MainDef, 72); SP_MainMenu, M_DrawCenteredMenu, BASEVIDWIDTH/2, 72, - 1, // start at "Start Game" on first entry + 0, NULL }; From 3a7342e06dff5312e012c19d5c5aaa283cea5e8c Mon Sep 17 00:00:00 2001 From: Jaime Passos Date: Thu, 21 Nov 2019 02:16:09 -0300 Subject: [PATCH 025/141] Remove D_ProcessEvents call in G_PreLevelTitleCard --- src/d_clisrv.c | 2 +- src/d_main.c | 3 --- src/g_game.c | 3 --- 3 files changed, 1 insertion(+), 7 deletions(-) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index aca37df1d..cf9c34867 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -4602,7 +4602,7 @@ static void Local_Maketic(INT32 realtics) { I_OsPolling(); // I_Getevent D_ProcessEvents(); // menu responder, cons responder, - // game responder calls HU_Responder, AM_Responder, F_Responder, + // game responder calls HU_Responder, AM_Responder, // and G_MapEventsToControls if (!dedicated) rendergametic = gametic; // translate inputs (keyboard/mouse/joystick) into game controls diff --git a/src/d_main.c b/src/d_main.c index e48b26ba8..63413a207 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -180,9 +180,6 @@ void D_ProcessEvents(void) if (M_ScreenshotResponder(ev)) continue; // ate the event - if (WipeStageTitle) - continue; - if (gameaction == ga_nothing && gamestate == GS_TITLESCREEN) { if (cht_Responder(ev)) diff --git a/src/g_game.c b/src/g_game.c index 5e1645901..738210236 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -1749,9 +1749,6 @@ void G_PreLevelTitleCard(tic_t ticker, boolean update) I_Sleep(); lasttime = nowtime; - // Run some bullshit whatever - D_ProcessEvents(); - ST_runTitleCard(); ST_preLevelTitleCardDrawer(ticker, update); From 056cb494a6fc18c875c704f3a5af60221c929a62 Mon Sep 17 00:00:00 2001 From: toaster Date: Thu, 21 Nov 2019 13:12:54 +0000 Subject: [PATCH 026/141] Fix conditionset-based unlocks on the Sound Test. --- src/s_sound.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/s_sound.c b/src/s_sound.c index ef673c9af..8e4e7715d 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -1685,7 +1685,7 @@ boolean S_PrepareSoundTest(void) soundtestdefs[pos++] = def; if (def->soundtestcond > 0 && !(mapvisited[def->soundtestcond-1] & MV_BEATEN)) continue; - if (def->soundtestcond < 0 && !M_Achieved(1-def->soundtestcond)) + if (def->soundtestcond < 0 && !M_Achieved(-1-def->soundtestcond)) continue; def->allowed = true; } From 1407d367a11d3fb1013280395a07b7f4c5dfcf35 Mon Sep 17 00:00:00 2001 From: sphere Date: Thu, 21 Nov 2019 16:35:27 +0100 Subject: [PATCH 027/141] Remove unneeded HAVE_MIXERX checks. --- src/m_menu.c | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/m_menu.c b/src/m_menu.c index 0db4afead..5c224f044 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -312,9 +312,7 @@ menu_t OP_VideoOptionsDef, OP_VideoModeDef, OP_ColorOptionsDef; menu_t OP_OpenGLOptionsDef, OP_OpenGLFogDef, OP_OpenGLColorDef; #endif menu_t OP_SoundOptionsDef; -#ifdef HAVE_MIXERX menu_t OP_SoundAdvancedDef; -#endif //Misc menu_t OP_DataOptionsDef, OP_ScreenshotOptionsDef, OP_EraseDataDef; @@ -1360,13 +1358,9 @@ static menuitem_t OP_SoundOptionsMenu[] = {IT_HEADER, NULL, "Accessibility", NULL, 102}, {IT_STRING | IT_CVAR, NULL, "Closed Captioning", &cv_closedcaptioning, 114}, -#ifdef HAVE_MIXERX {IT_STRING | IT_SUBMENU, NULL, "Advanced Settings...", &OP_SoundAdvancedDef, 144}, -#endif }; -#ifdef HAVE_MIXERX - #ifdef HAVE_OPENMPT #define OPENMPT_MENUOFFSET 16 #else @@ -1403,7 +1397,6 @@ static menuitem_t OP_SoundAdvancedMenu[] = #undef OPENMPT_MENUOFFSET #undef MIXERX_MENUOFFSET -#endif static menuitem_t OP_DataOptionsMenu[] = { @@ -1995,9 +1988,7 @@ menu_t OP_ColorOptionsDef = menu_t OP_SoundOptionsDef = DEFAULTMENUSTYLE( MN_OP_MAIN + (MN_OP_SOUND << 6), "M_SOUND", OP_SoundOptionsMenu, &OP_MainDef, 30, 30); -#ifdef HAVE_MIXERX menu_t OP_SoundAdvancedDef = DEFAULTSCROLLMENUSTYLE(MN_OP_MAIN + (MN_OP_SOUND << 6), "M_SOUND", OP_SoundAdvancedMenu, &OP_SoundOptionsDef, 30, 30); -#endif menu_t OP_ServerOptionsDef = DEFAULTSCROLLMENUSTYLE( MN_OP_MAIN + (MN_OP_SERVER << 6), From 39e38747509964a297cb26a891218eec5026c4aa Mon Sep 17 00:00:00 2001 From: sphere Date: Thu, 21 Nov 2019 16:53:37 +0100 Subject: [PATCH 028/141] Re-reorganize sound options. --- src/m_menu.c | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/src/m_menu.c b/src/m_menu.c index 5c224f044..648fa17f6 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -1355,20 +1355,21 @@ static menuitem_t OP_SoundOptionsMenu[] = {IT_STRING | IT_CVAR, NULL, "MIDI Music", &cv_gamemidimusic, 72}, {IT_STRING | IT_CVAR | IT_CV_SLIDER, NULL, "MIDI Music Volume", &cv_midimusicvolume, 82}, - {IT_HEADER, NULL, "Accessibility", NULL, 102}, + {IT_HEADER, NULL, "Miscellaneous", NULL, 102}, {IT_STRING | IT_CVAR, NULL, "Closed Captioning", &cv_closedcaptioning, 114}, + {IT_STRING | IT_CVAR, NULL, "Reset Music Upon Dying", &cv_resetmusic, 124}, {IT_STRING | IT_SUBMENU, NULL, "Advanced Settings...", &OP_SoundAdvancedDef, 144}, }; #ifdef HAVE_OPENMPT -#define OPENMPT_MENUOFFSET 16 +#define OPENMPT_MENUOFFSET 32 #else #define OPENMPT_MENUOFFSET 0 #endif #ifdef HAVE_MIXERX -#define MIXERX_MENUOFFSET 40 +#define MIXERX_MENUOFFSET 81 #else #define MIXERX_MENUOFFSET 0 #endif @@ -1376,23 +1377,21 @@ static menuitem_t OP_SoundOptionsMenu[] = static menuitem_t OP_SoundAdvancedMenu[] = { #ifdef HAVE_OPENMPT - {IT_HEADER, NULL, "OpenMPT Settings", NULL, 10}, - {IT_STRING | IT_CVAR, NULL, "Instrument Filter", &cv_modfilter, 16}, + {IT_HEADER, NULL, "OpenMPT Settings", NULL, 0}, + {IT_STRING | IT_CVAR, NULL, "Instrument Filter", &cv_modfilter, 12}, #endif #ifdef HAVE_MIXERX - {IT_HEADER, NULL, "MIDI Settings", NULL, OPENMPT_MENUOFFSET+10}, - {IT_STRING | IT_CVAR, NULL, "MIDI Player", &cv_midiplayer, OPENMPT_MENUOFFSET+16}, - {IT_STRING | IT_CVAR | IT_CV_STRING, NULL, "FluidSynth Sound Font File", &cv_midisoundfontpath, OPENMPT_MENUOFFSET+21}, - {IT_STRING | IT_CVAR | IT_CV_STRING, NULL, "TiMidity++ Config Folder", &cv_miditimiditypath, OPENMPT_MENUOFFSET+35}, + {IT_HEADER, NULL, "MIDI Settings", NULL, OPENMPT_MENUOFFSET}, + {IT_STRING | IT_CVAR, NULL, "MIDI Player", &cv_midiplayer, OPENMPT_MENUOFFSET+12}, + {IT_STRING | IT_CVAR | IT_CV_STRING, NULL, "FluidSynth Sound Font File", &cv_midisoundfontpath, OPENMPT_MENUOFFSET+24}, + {IT_STRING | IT_CVAR | IT_CV_STRING, NULL, "TiMidity++ Config Folder", &cv_miditimiditypath, OPENMPT_MENUOFFSET+51}, #endif - {IT_HEADER, NULL, "Miscellaneous", NULL, OPENMPT_MENUOFFSET+MIXERX_MENUOFFSET+10}, - {IT_STRING | IT_CVAR, NULL, "Play Sound Effects if Unfocused", &cv_playsoundsifunfocused, OPENMPT_MENUOFFSET+MIXERX_MENUOFFSET+16}, - {IT_STRING | IT_CVAR, NULL, "Play Music if Unfocused", &cv_playmusicifunfocused, OPENMPT_MENUOFFSET+MIXERX_MENUOFFSET+21}, - - {IT_STRING | IT_CVAR, NULL, "Reset Music Upon Dying", &cv_resetmusic, OPENMPT_MENUOFFSET+MIXERX_MENUOFFSET+31}, - {IT_STRING | IT_CVAR, NULL, "Let Levels Force Reset Music", &cv_resetmusicbyheader, OPENMPT_MENUOFFSET+MIXERX_MENUOFFSET+36}, + {IT_HEADER, NULL, "Miscellaneous", NULL, OPENMPT_MENUOFFSET+MIXERX_MENUOFFSET}, + {IT_STRING | IT_CVAR, NULL, "Play Sound Effects if Unfocused", &cv_playsoundsifunfocused, OPENMPT_MENUOFFSET+MIXERX_MENUOFFSET+12}, + {IT_STRING | IT_CVAR, NULL, "Play Music if Unfocused", &cv_playmusicifunfocused, OPENMPT_MENUOFFSET+MIXERX_MENUOFFSET+22}, + {IT_STRING | IT_CVAR, NULL, "Let Levels Force Reset Music", &cv_resetmusicbyheader, OPENMPT_MENUOFFSET+MIXERX_MENUOFFSET+32}, }; #undef OPENMPT_MENUOFFSET @@ -1988,7 +1987,7 @@ menu_t OP_ColorOptionsDef = menu_t OP_SoundOptionsDef = DEFAULTMENUSTYLE( MN_OP_MAIN + (MN_OP_SOUND << 6), "M_SOUND", OP_SoundOptionsMenu, &OP_MainDef, 30, 30); -menu_t OP_SoundAdvancedDef = DEFAULTSCROLLMENUSTYLE(MN_OP_MAIN + (MN_OP_SOUND << 6), "M_SOUND", OP_SoundAdvancedMenu, &OP_SoundOptionsDef, 30, 30); +menu_t OP_SoundAdvancedDef = DEFAULTMENUSTYLE(MN_OP_MAIN + (MN_OP_SOUND << 6), "M_SOUND", OP_SoundAdvancedMenu, &OP_SoundOptionsDef, 30, 30); menu_t OP_ServerOptionsDef = DEFAULTSCROLLMENUSTYLE( MN_OP_MAIN + (MN_OP_SERVER << 6), From 342fe570e71a56d7fec120dd7b7d280affa7caa8 Mon Sep 17 00:00:00 2001 From: toaster Date: Thu, 21 Nov 2019 16:10:28 +0000 Subject: [PATCH 029/141] Do a whole bunch of cleanup for mapvisited and intermission related things. * Move the visitation flags, Record Attack/NiGHTS Attack data, and emblem checking to outside of Y_StartIntermission. * Y_CleanupScreenBuffer never got called for maps which skip the intermission, leading to a small memory leak; this is now fixed by moving it to G_AfterIntermission. * Y_FollowIntermission was just G_AfterIntermission with modeattacking specific behaviour, but this is desired for all places where G_AfterIntermission is called, so just merge this into G_AfterIntermission. Notably, these changes are necessary because there are now three maps in the main SP campaign which do not end with traditional intermissions. As a result, this fixes an issue where Black Core's tracks are not available in the Sound Test (due to MV_BEATEN never being applied). Also, since I was here: Remove "gotperfect" from recorddata_t. This is a duplicate of `mapvisited[gamemap-1] & MV_PERFECT` which uses more memory. I have kept the new spacing in the gamedata for compatibility with RC1 savedatas, but moved it across to the original method everywhere else. --- src/doomstat.h | 1 - src/g_game.c | 148 ++++++++++++++++++++++++++++++++--- src/m_menu.c | 5 +- src/y_inter.c | 206 +++---------------------------------------------- src/y_inter.h | 5 +- 5 files changed, 150 insertions(+), 215 deletions(-) diff --git a/src/doomstat.h b/src/doomstat.h index 84939a8db..877f5b50b 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -435,7 +435,6 @@ typedef struct tic_t time; ///< Time in which the level was finished. UINT32 score; ///< Score when the level was finished. UINT16 rings; ///< Rings when the level was finished. - boolean gotperfect; ///< Got perfect bonus? } recorddata_t; /** Setup for one NiGHTS map. diff --git a/src/g_game.c b/src/g_game.c index 5e1645901..cc82f5d5c 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -540,11 +540,99 @@ void G_AddTempNightsRecords(UINT32 pscore, tic_t ptime, UINT8 mare) ntemprecords.nummares = mare; } +// +// G_UpdateRecordReplays +// +// Update replay files/data, etc. for Record Attack +// See G_SetNightsRecords for NiGHTS Attack. +// +static void G_UpdateRecordReplays(void) +{ + const size_t glen = strlen(srb2home)+1+strlen("replay")+1+strlen(timeattackfolder)+1+strlen("MAPXX")+1; + char *gpath; + char lastdemo[256], bestdemo[256]; + UINT8 earnedEmblems; + + // Record new best time + if (!mainrecords[gamemap-1]) + G_AllocMainRecordData(gamemap-1); + + if (players[consoleplayer].score > mainrecords[gamemap-1]->score) + mainrecords[gamemap-1]->score = players[consoleplayer].score; + + if ((mainrecords[gamemap-1]->time == 0) || (players[consoleplayer].realtime < mainrecords[gamemap-1]->time)) + mainrecords[gamemap-1]->time = players[consoleplayer].realtime; + + if ((UINT16)(players[consoleplayer].rings) > mainrecords[gamemap-1]->rings) + mainrecords[gamemap-1]->rings = (UINT16)(players[consoleplayer].rings); + + // Save demo! + bestdemo[255] = '\0'; + lastdemo[255] = '\0'; + G_SetDemoTime(players[consoleplayer].realtime, players[consoleplayer].score, (UINT16)(players[consoleplayer].rings)); + G_CheckDemoStatus(); + + I_mkdir(va("%s"PATHSEP"replay", srb2home), 0755); + I_mkdir(va("%s"PATHSEP"replay"PATHSEP"%s", srb2home, timeattackfolder), 0755); + + if ((gpath = malloc(glen)) == NULL) + I_Error("Out of memory for replay filepath\n"); + + sprintf(gpath,"%s"PATHSEP"replay"PATHSEP"%s"PATHSEP"%s", srb2home, timeattackfolder, G_BuildMapName(gamemap)); + snprintf(lastdemo, 255, "%s-%s-last.lmp", gpath, skins[cv_chooseskin.value-1].name); + + if (FIL_FileExists(lastdemo)) + { + UINT8 *buf; + size_t len = FIL_ReadFile(lastdemo, &buf); + + snprintf(bestdemo, 255, "%s-%s-time-best.lmp", gpath, skins[cv_chooseskin.value-1].name); + if (!FIL_FileExists(bestdemo) || G_CmpDemoTime(bestdemo, lastdemo) & 1) + { // Better time, save this demo. + if (FIL_FileExists(bestdemo)) + remove(bestdemo); + FIL_WriteFile(bestdemo, buf, len); + CONS_Printf("\x83%s\x80 %s '%s'\n", M_GetText("NEW RECORD TIME!"), M_GetText("Saved replay as"), bestdemo); + } + + snprintf(bestdemo, 255, "%s-%s-score-best.lmp", gpath, skins[cv_chooseskin.value-1].name); + if (!FIL_FileExists(bestdemo) || (G_CmpDemoTime(bestdemo, lastdemo) & (1<<1))) + { // Better score, save this demo. + if (FIL_FileExists(bestdemo)) + remove(bestdemo); + FIL_WriteFile(bestdemo, buf, len); + CONS_Printf("\x83%s\x80 %s '%s'\n", M_GetText("NEW HIGH SCORE!"), M_GetText("Saved replay as"), bestdemo); + } + + snprintf(bestdemo, 255, "%s-%s-rings-best.lmp", gpath, skins[cv_chooseskin.value-1].name); + if (!FIL_FileExists(bestdemo) || (G_CmpDemoTime(bestdemo, lastdemo) & (1<<2))) + { // Better rings, save this demo. + if (FIL_FileExists(bestdemo)) + remove(bestdemo); + FIL_WriteFile(bestdemo, buf, len); + CONS_Printf("\x83%s\x80 %s '%s'\n", M_GetText("NEW MOST RINGS!"), M_GetText("Saved replay as"), bestdemo); + } + + //CONS_Printf("%s '%s'\n", M_GetText("Saved replay as"), lastdemo); + + Z_Free(buf); + } + free(gpath); + + // Check emblems when level data is updated + if ((earnedEmblems = M_CheckLevelEmblems())) + CONS_Printf(M_GetText("\x82" "Earned %hu emblem%s for Record Attack records.\n"), (UINT16)earnedEmblems, earnedEmblems > 1 ? "s" : ""); + + // Update timeattack menu's replay availability. + Nextmap_OnChange(); +} + void G_SetNightsRecords(void) { INT32 i; UINT32 totalscore = 0; tic_t totaltime = 0; + UINT8 earnedEmblems; const size_t glen = strlen(srb2home)+1+strlen("replay")+1+strlen(timeattackfolder)+1+strlen("MAPXX")+1; char *gpath; @@ -644,6 +732,9 @@ void G_SetNightsRecords(void) } free(gpath); + if ((earnedEmblems = M_CheckLevelEmblems())) + CONS_Printf(M_GetText("\x82" "Earned %hu emblem%s for NiGHTS records.\n"), (UINT16)earnedEmblems, earnedEmblems > 1 ? "s" : ""); + // If the mare count changed, this will update the score display Nextmap_OnChange(); } @@ -3128,6 +3219,7 @@ static INT16 RandMap(INT16 tolflags, INT16 pprevmap) static void G_DoCompleted(void) { INT32 i; + boolean spec = G_IsSpecialStage(gamemap); tokenlist = 0; // Reset the list @@ -3160,14 +3252,14 @@ static void G_DoCompleted(void) nextmap = (INT16)(mapheaderinfo[gamemap-1]->nextlevel-1); // Remember last map for when you come out of the special stage. - if (!G_IsSpecialStage(gamemap)) + if (!spec) lastmap = nextmap; // If nextmap is actually going to get used, make sure it points to // a map of the proper gametype -- skip levels that don't support // the current gametype. (Helps avoid playing boss levels in Race, // for instance). - if (!token && !G_IsSpecialStage(gamemap) + if (!token && !spec && (nextmap >= 0 && nextmap < NUMMAPS)) { register INT16 cm = nextmap; @@ -3231,7 +3323,7 @@ static void G_DoCompleted(void) gottoken = false; } - if (G_IsSpecialStage(gamemap) && !gottoken) + if (spec && !gottoken) nextmap = lastmap; // Exiting from a special stage? Go back to the game. Tails 08-11-2001 automapactive = false; @@ -3250,7 +3342,38 @@ static void G_DoCompleted(void) if (nextmap < NUMMAPS && !mapheaderinfo[nextmap]) P_AllocMapHeader(nextmap); - if (skipstats && !modeattacking) // Don't skip stats if we're in record attack + // Update visitation flags? + if ((!modifiedgame || savemoddata) // Not modified + && !multiplayer && !demoplayback && (gametype == GT_COOP) // SP/RA/NiGHTS mode + && !(spec && stagefailed)) // Not failed the special stage + { + UINT8 earnedEmblems; + + // Update visitation flags + mapvisited[gamemap-1] |= MV_BEATEN; + // eh, what the hell + if (ultimatemode) + mapvisited[gamemap-1] |= MV_ULTIMATE; + // may seem incorrect but IS possible in what the main game uses as special stages, and nummaprings will be -1 in NiGHTS + if (nummaprings > 0 && players[consoleplayer].rings >= nummaprings) + mapvisited[gamemap-1] |= MV_PERFECT; + if (!spec) + { + // not available to special stages because they can only really be done in one order in an unmodified game, so impossible for first six and trivial for seventh + if (ALL7EMERALDS(emeralds)) + mapvisited[gamemap-1] |= MV_ALLEMERALDS; + } + + if (modeattacking == ATTACKING_RECORD) + G_UpdateRecordReplays(); + else if (modeattacking == ATTACKING_NIGHTS) + G_SetNightsRecords(); + + if ((earnedEmblems = M_CompletionEmblems())) + CONS_Printf(M_GetText("\x82" "Earned %hu emblem%s for level completion.\n"), (UINT16)earnedEmblems, earnedEmblems > 1 ? "s" : ""); + } + + if ((skipstats && !modeattacking) || (spec && modeattacking && stagefailed)) G_AfterIntermission(); else { @@ -3261,6 +3384,14 @@ static void G_DoCompleted(void) void G_AfterIntermission(void) { + Y_CleanupScreenBuffer(); + + if (modeattacking) + { + M_EndModeAttackRun(); + return; + } + HU_ClearCEcho(); if (mapheaderinfo[gamemap-1]->cutscenenum && !modeattacking && skipstats <= 1) // Start a custom cutscene. @@ -3427,7 +3558,6 @@ void G_LoadGameData(void) UINT32 recscore; tic_t rectime; UINT16 recrings; - boolean gotperf; UINT8 recmares; INT32 curmare; @@ -3525,7 +3655,7 @@ void G_LoadGameData(void) recscore = READUINT32(save_p); rectime = (tic_t)READUINT32(save_p); recrings = READUINT16(save_p); - gotperf = (boolean)READUINT8(save_p); + save_p++; // compat if (recrings > 10000 || recscore > MAXSCORE) goto datacorrupt; @@ -3537,9 +3667,6 @@ void G_LoadGameData(void) mainrecords[i]->time = rectime; mainrecords[i]->rings = recrings; } - - if (gotperf) - mainrecords[i]->gotperfect = gotperf; } // Nights records @@ -3671,15 +3798,14 @@ void G_SaveGameData(void) WRITEUINT32(save_p, mainrecords[i]->score); WRITEUINT32(save_p, mainrecords[i]->time); WRITEUINT16(save_p, mainrecords[i]->rings); - WRITEUINT8(save_p, mainrecords[i]->gotperfect); } else { WRITEUINT32(save_p, 0); WRITEUINT32(save_p, 0); WRITEUINT16(save_p, 0); - WRITEUINT8(save_p, 0); } + WRITEUINT8(save_p, 0); // compat } // NiGHTS records diff --git a/src/m_menu.c b/src/m_menu.c index 7a5aa8ae6..5969dae27 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -9245,10 +9245,7 @@ void M_DrawTimeAttackMenu(void) V_DrawString(104-72, 73+lsheadingheight/2, V_YELLOWMAP, "RINGS:"); - if (!mainrecords[cv_nextmap.value-1] || !mainrecords[cv_nextmap.value-1]->gotperfect) - V_DrawRightAlignedString(104+64, 73+lsheadingheight/2, V_ALLOWLOWERCASE, beststr); - else - V_DrawRightAlignedString(104+64, 73+lsheadingheight/2, V_ALLOWLOWERCASE|V_YELLOWMAP, beststr); + V_DrawRightAlignedString(104+64, 73+lsheadingheight/2, V_ALLOWLOWERCASE|((mapvisited[cv_nextmap.value-1] & MV_PERFECT) ? V_YELLOWMAP : 0), beststr); V_DrawRightAlignedString(104+72, 83+lsheadingheight/2, V_ALLOWLOWERCASE, reqrings); } diff --git a/src/y_inter.c b/src/y_inter.c index 48d08a02e..32548d263 100644 --- a/src/y_inter.c +++ b/src/y_inter.c @@ -166,13 +166,11 @@ static INT32 endtic = -1; intertype_t intertype = int_none; static void Y_RescaleScreenBuffer(void); -static void Y_CleanupScreenBuffer(void); static void Y_AwardCoopBonuses(void); static void Y_AwardSpecialStageBonus(void); static void Y_CalculateCompetitionWinners(void); static void Y_CalculateTimeRaceWinners(void); static void Y_CalculateMatchWinners(void); -static void Y_FollowIntermission(void); static void Y_UnloadData(void); // Stuff copy+pasted from st_stuff.c @@ -293,7 +291,7 @@ static void Y_RescaleScreenBuffer(void) // // Free all related memory. // -static void Y_CleanupScreenBuffer(void) +void Y_CleanupScreenBuffer(void) { // Who knows? if (y_buffer == NULL) @@ -819,7 +817,7 @@ void Y_IntermissionDrawer(void) } } } - else if (intertype == int_classicrace) + else if (intertype == int_comp) { INT32 x = 4; INT32 y = 48; @@ -953,7 +951,7 @@ void Y_Ticker(void) if (!--timer) { Y_EndIntermission(); - Y_FollowIntermission(); + G_AfterIntermission(); return; } } @@ -961,7 +959,7 @@ void Y_Ticker(void) else if (intertic == endtic) { Y_EndIntermission(); - Y_FollowIntermission(); + G_AfterIntermission(); return; } @@ -1145,7 +1143,7 @@ void Y_Ticker(void) if (data.match.numplayers != D_NumPlayers()) Y_CalculateMatchWinners(); } - else if (intertype == int_race || intertype == int_classicrace) // race + else if (intertype == int_race || intertype == int_comp) // race { if (!intertic) // first time only S_ChangeMusicInternal("_inter", true); // loop it @@ -1154,96 +1152,6 @@ void Y_Ticker(void) } } -// -// Y_UpdateRecordReplays -// -// Update replay files/data, etc. for Record Attack -// See G_SetNightsRecords for NiGHTS Attack. -// -static void Y_UpdateRecordReplays(void) -{ - const size_t glen = strlen(srb2home)+1+strlen("replay")+1+strlen(timeattackfolder)+1+strlen("MAPXX")+1; - char *gpath; - char lastdemo[256], bestdemo[256]; - UINT8 earnedEmblems; - - // Record new best time - if (!mainrecords[gamemap-1]) - G_AllocMainRecordData(gamemap-1); - - if (players[consoleplayer].score > mainrecords[gamemap-1]->score) - mainrecords[gamemap-1]->score = players[consoleplayer].score; - - if ((mainrecords[gamemap-1]->time == 0) || (players[consoleplayer].realtime < mainrecords[gamemap-1]->time)) - mainrecords[gamemap-1]->time = players[consoleplayer].realtime; - - if ((UINT16)(players[consoleplayer].rings) > mainrecords[gamemap-1]->rings) - mainrecords[gamemap-1]->rings = (UINT16)(players[consoleplayer].rings); - - if (data.coop.gotperfbonus) - mainrecords[gamemap-1]->gotperfect = true; - - // Save demo! - bestdemo[255] = '\0'; - lastdemo[255] = '\0'; - G_SetDemoTime(players[consoleplayer].realtime, players[consoleplayer].score, (UINT16)(players[consoleplayer].rings)); - G_CheckDemoStatus(); - - I_mkdir(va("%s"PATHSEP"replay", srb2home), 0755); - I_mkdir(va("%s"PATHSEP"replay"PATHSEP"%s", srb2home, timeattackfolder), 0755); - - if ((gpath = malloc(glen)) == NULL) - I_Error("Out of memory for replay filepath\n"); - - sprintf(gpath,"%s"PATHSEP"replay"PATHSEP"%s"PATHSEP"%s", srb2home, timeattackfolder, G_BuildMapName(gamemap)); - snprintf(lastdemo, 255, "%s-%s-last.lmp", gpath, skins[cv_chooseskin.value-1].name); - - if (FIL_FileExists(lastdemo)) - { - UINT8 *buf; - size_t len = FIL_ReadFile(lastdemo, &buf); - - snprintf(bestdemo, 255, "%s-%s-time-best.lmp", gpath, skins[cv_chooseskin.value-1].name); - if (!FIL_FileExists(bestdemo) || G_CmpDemoTime(bestdemo, lastdemo) & 1) - { // Better time, save this demo. - if (FIL_FileExists(bestdemo)) - remove(bestdemo); - FIL_WriteFile(bestdemo, buf, len); - CONS_Printf("\x83%s\x80 %s '%s'\n", M_GetText("NEW RECORD TIME!"), M_GetText("Saved replay as"), bestdemo); - } - - snprintf(bestdemo, 255, "%s-%s-score-best.lmp", gpath, skins[cv_chooseskin.value-1].name); - if (!FIL_FileExists(bestdemo) || (G_CmpDemoTime(bestdemo, lastdemo) & (1<<1))) - { // Better score, save this demo. - if (FIL_FileExists(bestdemo)) - remove(bestdemo); - FIL_WriteFile(bestdemo, buf, len); - CONS_Printf("\x83%s\x80 %s '%s'\n", M_GetText("NEW HIGH SCORE!"), M_GetText("Saved replay as"), bestdemo); - } - - snprintf(bestdemo, 255, "%s-%s-rings-best.lmp", gpath, skins[cv_chooseskin.value-1].name); - if (!FIL_FileExists(bestdemo) || (G_CmpDemoTime(bestdemo, lastdemo) & (1<<2))) - { // Better rings, save this demo. - if (FIL_FileExists(bestdemo)) - remove(bestdemo); - FIL_WriteFile(bestdemo, buf, len); - CONS_Printf("\x83%s\x80 %s '%s'\n", M_GetText("NEW MOST RINGS!"), M_GetText("Saved replay as"), bestdemo); - } - - //CONS_Printf("%s '%s'\n", M_GetText("Saved replay as"), lastdemo); - - Z_Free(buf); - } - free(gpath); - - // Check emblems when level data is updated - if ((earnedEmblems = M_CheckLevelEmblems())) - CONS_Printf(M_GetText("\x82" "Earned %hu emblem%s for Record Attack records.\n"), (UINT16)earnedEmblems, earnedEmblems > 1 ? "s" : ""); - - // Update timeattack menu's replay availability. - Nextmap_OnChange(); -} - // // Y_StartIntermission // @@ -1252,7 +1160,6 @@ static void Y_UpdateRecordReplays(void) void Y_StartIntermission(void) { INT32 i; - UINT8 completionEmblems = M_CompletionEmblems(); intertic = -1; @@ -1265,10 +1172,7 @@ void Y_StartIntermission(void) { timer = 0; - if (G_IsSpecialStage(gamemap)) - intertype = (maptol & TOL_NIGHTS) ? int_nightsspec : int_spec; - else - intertype = (maptol & TOL_NIGHTS) ? int_nights : int_coop; + intertype = (G_IsSpecialStage(gamemap)) ? int_spec : int_coop; } else { @@ -1283,14 +1187,7 @@ void Y_StartIntermission(void) } if (gametype == GT_COOP) - { - // Nights intermission is single player only - // Don't add it here - if (G_IsSpecialStage(gamemap)) - intertype = int_spec; - else - intertype = int_coop; - } + intertype = (G_IsSpecialStage(gamemap)) ? int_spec : int_coop; else if (gametype == GT_TEAMMATCH) intertype = int_teammatch; else if (gametype == GT_MATCH @@ -1300,7 +1197,7 @@ void Y_StartIntermission(void) else if (gametype == GT_RACE) intertype = int_race; else if (gametype == GT_COMPETITION) - intertype = int_classicrace; + intertype = int_comp; else if (gametype == GT_CTF) intertype = int_ctf; } @@ -1315,20 +1212,6 @@ void Y_StartIntermission(void) switch (intertype) { - case int_nights: - // Can't fail - G_SetNightsRecords(); - - // Check records - { - UINT8 earnedEmblems = M_CheckLevelEmblems(); - if (earnedEmblems) - CONS_Printf(M_GetText("\x82" "Earned %hu emblem%s for NiGHTS records.\n"), (UINT16)earnedEmblems, earnedEmblems > 1 ? "s" : ""); - } - - // fall back into the coop intermission for now - intertype = int_coop; - /* FALLTHRU */ case int_coop: // coop or single player, normal level { // award time and ring bonuses @@ -1337,24 +1220,6 @@ void Y_StartIntermission(void) // setup time data data.coop.tics = players[consoleplayer].realtime; - if ((!modifiedgame || savemoddata) && !multiplayer && !demoplayback) - { - // Update visitation flags - mapvisited[gamemap-1] |= MV_BEATEN; - if (ALL7EMERALDS(emeralds)) - mapvisited[gamemap-1] |= MV_ALLEMERALDS; - if (ultimatemode) - mapvisited[gamemap-1] |= MV_ULTIMATE; - if (data.coop.gotperfbonus) - mapvisited[gamemap-1] |= MV_PERFECT; - - if (modeattacking == ATTACKING_RECORD) - Y_UpdateRecordReplays(); - - if (completionEmblems) - CONS_Printf(M_GetText("\x82" "Earned %hu emblem%s for level completion.\n"), (UINT16)completionEmblems, completionEmblems > 1 ? "s" : ""); - } - for (i = 0; i < 4; ++i) data.coop.bonuspatches[i] = W_CachePatchName(data.coop.bonuses[i].patch, PU_STATIC); data.coop.ptotal = W_CachePatchName("YB_TOTAL", PU_STATIC); @@ -1421,40 +1286,8 @@ void Y_StartIntermission(void) break; } - case int_nightsspec: - if (modeattacking && stagefailed) - { - // Nuh-uh. Get out of here. - Y_EndIntermission(); - Y_FollowIntermission(); - break; - } - if (!stagefailed) - G_SetNightsRecords(); - - // Check records - { - UINT8 earnedEmblems = M_CheckLevelEmblems(); - if (earnedEmblems) - CONS_Printf(M_GetText("\x82" "Earned %hu emblem%s for NiGHTS records.\n"), (UINT16)earnedEmblems, earnedEmblems > 1 ? "s" : ""); - } - - // fall back into the special stage intermission for now - intertype = int_spec; - /* FALLTHRU */ case int_spec: // coop or single player, special stage { - // Update visitation flags? - if ((!modifiedgame || savemoddata) && !multiplayer && !demoplayback) - { - if (!stagefailed) - mapvisited[gamemap-1] |= MV_BEATEN; - - // all emeralds/ultimate/perfect emblems won't be possible in ss, oh well? - if (completionEmblems) - CONS_Printf(M_GetText("\x82" "Earned %hu emblem%s for level completion.\n"), (UINT16)completionEmblems, completionEmblems > 1 ? "s" : ""); - } - // give out ring bonuses Y_AwardSpecialStageBonus(); @@ -1640,7 +1473,7 @@ void Y_StartIntermission(void) break; } - case int_classicrace: // classic (full race) + case int_comp: // classic (full race) { // find out who won Y_CalculateCompetitionWinners(); @@ -2195,23 +2028,6 @@ void Y_EndIntermission(void) usebuffer = false; } -// -// Y_FollowIntermission -// -static void Y_FollowIntermission(void) -{ - if (modeattacking) - { - M_EndModeAttackRun(); - return; - } - - // This handles whether to play a post-level cutscene, end the game, - // or simply go to the next level. - // No need to duplicate the code here! - G_AfterIntermission(); -} - #define UNLOAD(x) Z_ChangeTag(x, PU_CACHE); x = NULL // @@ -2224,8 +2040,6 @@ static void Y_UnloadData(void) if (rendermode != render_soft) return; - Y_CleanupScreenBuffer(); - // unload the background patches UNLOAD(bgpatch); UNLOAD(widebgpatch); @@ -2261,7 +2075,7 @@ static void Y_UnloadData(void) break; default: //without this default, - //int_none, int_tag, int_chaos, and int_classicrace + //int_none, int_tag, int_chaos, and int_comp //are not handled break; } diff --git a/src/y_inter.h b/src/y_inter.h index ccb48dbd4..b47f3b157 100644 --- a/src/y_inter.h +++ b/src/y_inter.h @@ -16,6 +16,7 @@ void Y_Ticker(void); void Y_StartIntermission(void); void Y_EndIntermission(void); void Y_ConsiderScreenBuffer(void); +void Y_CleanupScreenBuffer(void); typedef enum { @@ -26,9 +27,7 @@ typedef enum // int_tag, // Tag int_ctf, // CTF int_spec, // Special Stage - int_nights, // NiGHTS into Dreams - int_nightsspec,// NiGHTS special stage int_race, // Race - int_classicrace, // Competition + int_comp, // Competition } intertype_t; extern intertype_t intertype; From 3e750a4cbe044525cbb2d4f08472327fb3f62b42 Mon Sep 17 00:00:00 2001 From: toaster Date: Thu, 21 Nov 2019 22:50:04 +0000 Subject: [PATCH 030/141] Correct location of followmobj scale write to match read (resolves #322). Requires deleting all of RC1's Record Attack replays with followmobj characters, but I think you'll agree that's a reasonable price to pay. --- src/g_game.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/g_game.c b/src/g_game.c index 5e1645901..edae9ec64 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -4726,6 +4726,12 @@ void G_WriteGhostTic(mobj_t *ghost) oldghost.flags2 |= MF2_AMBUSH; } + if (ghost->player->followmobj->scale != ghost->scale) + { + followtic |= FZT_SCALE; + WRITEFIXED(demo_p,ghost->player->followmobj->scale); + } + temp = (INT16)((ghost->player->followmobj->x-ghost->x)>>8); WRITEINT16(demo_p,temp); temp = (INT16)((ghost->player->followmobj->y-ghost->y)>>8); @@ -4737,11 +4743,6 @@ void G_WriteGhostTic(mobj_t *ghost) WRITEUINT16(demo_p,ghost->player->followmobj->sprite); WRITEUINT8(demo_p,(ghost->player->followmobj->frame & FF_FRAMEMASK)); WRITEUINT8(demo_p,ghost->player->followmobj->color); - if (ghost->player->followmobj->scale != ghost->scale) - { - followtic |= FZT_SCALE; - WRITEFIXED(demo_p,ghost->player->followmobj->scale); - } *followtic_p = followtic; } From 897409242e463bde7b63e65b519f682b2fbcfbf6 Mon Sep 17 00:00:00 2001 From: toaster Date: Thu, 21 Nov 2019 23:38:33 +0000 Subject: [PATCH 031/141] Move all the visitation/emblems/record attack update stuff into a single function, and call that function in two different places depending on whether the tally screen is visited or not. --- src/g_game.c | 73 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 42 insertions(+), 31 deletions(-) diff --git a/src/g_game.c b/src/g_game.c index cc82f5d5c..a18967052 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -3213,6 +3213,44 @@ static INT16 RandMap(INT16 tolflags, INT16 pprevmap) return ix; } +// +// G_UpdateVisited +// +static void G_UpdateVisited(void) +{ + boolean spec = G_IsSpecialStage(gamemap); + // Update visitation flags? + if ((!modifiedgame || savemoddata) // Not modified + && !multiplayer && !demoplayback && (gametype == GT_COOP) // SP/RA/NiGHTS mode + && !(spec && stagefailed)) // Not failed the special stage + { + UINT8 earnedEmblems; + + // Update visitation flags + mapvisited[gamemap-1] |= MV_BEATEN; + // eh, what the hell + if (ultimatemode) + mapvisited[gamemap-1] |= MV_ULTIMATE; + // may seem incorrect but IS possible in what the main game uses as special stages, and nummaprings will be -1 in NiGHTS + if (nummaprings > 0 && players[consoleplayer].rings >= nummaprings) + mapvisited[gamemap-1] |= MV_PERFECT; + if (!spec) + { + // not available to special stages because they can only really be done in one order in an unmodified game, so impossible for first six and trivial for seventh + if (ALL7EMERALDS(emeralds)) + mapvisited[gamemap-1] |= MV_ALLEMERALDS; + } + + if (modeattacking == ATTACKING_RECORD) + G_UpdateRecordReplays(); + else if (modeattacking == ATTACKING_NIGHTS) + G_SetNightsRecords(); + + if ((earnedEmblems = M_CompletionEmblems())) + CONS_Printf(M_GetText("\x82" "Earned %hu emblem%s for level completion.\n"), (UINT16)earnedEmblems, earnedEmblems > 1 ? "s" : ""); + } +} + // // G_DoCompleted // @@ -3342,43 +3380,16 @@ static void G_DoCompleted(void) if (nextmap < NUMMAPS && !mapheaderinfo[nextmap]) P_AllocMapHeader(nextmap); - // Update visitation flags? - if ((!modifiedgame || savemoddata) // Not modified - && !multiplayer && !demoplayback && (gametype == GT_COOP) // SP/RA/NiGHTS mode - && !(spec && stagefailed)) // Not failed the special stage - { - UINT8 earnedEmblems; - - // Update visitation flags - mapvisited[gamemap-1] |= MV_BEATEN; - // eh, what the hell - if (ultimatemode) - mapvisited[gamemap-1] |= MV_ULTIMATE; - // may seem incorrect but IS possible in what the main game uses as special stages, and nummaprings will be -1 in NiGHTS - if (nummaprings > 0 && players[consoleplayer].rings >= nummaprings) - mapvisited[gamemap-1] |= MV_PERFECT; - if (!spec) - { - // not available to special stages because they can only really be done in one order in an unmodified game, so impossible for first six and trivial for seventh - if (ALL7EMERALDS(emeralds)) - mapvisited[gamemap-1] |= MV_ALLEMERALDS; - } - - if (modeattacking == ATTACKING_RECORD) - G_UpdateRecordReplays(); - else if (modeattacking == ATTACKING_NIGHTS) - G_SetNightsRecords(); - - if ((earnedEmblems = M_CompletionEmblems())) - CONS_Printf(M_GetText("\x82" "Earned %hu emblem%s for level completion.\n"), (UINT16)earnedEmblems, earnedEmblems > 1 ? "s" : ""); - } - if ((skipstats && !modeattacking) || (spec && modeattacking && stagefailed)) + { + G_UpdateVisited(); G_AfterIntermission(); + } else { G_SetGamestate(GS_INTERMISSION); Y_StartIntermission(); + G_UpdateVisited(); } } From da90ebcdfbc267da5fd96273465ba83f21a15fa0 Mon Sep 17 00:00:00 2001 From: sphere Date: Fri, 22 Nov 2019 04:12:38 +0100 Subject: [PATCH 032/141] fuck autocomplete --- src/d_netcmd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index f46468feb..cff9ced20 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -4338,7 +4338,7 @@ static void Command_Isgamemodified_f(void) else if (modifiedgame) CONS_Printf(M_GetText("modifiedgame is true, extras will not be unlocked\n")); else - CONS_Printf(M_GetText("modifiedgame is false, you can unlock extravalues\n")); + CONS_Printf(M_GetText("modifiedgame is false, you can unlock extras\n")); } static void Command_Cheats_f(void) From aa60a34e74ff2c67f728bb8c0627367ee1959ac3 Mon Sep 17 00:00:00 2001 From: lachwright Date: Fri, 22 Nov 2019 20:08:23 +0800 Subject: [PATCH 033/141] WIP intro graphics update --- src/f_finale.c | 263 ++++++++++++++++++++++++++++++------------------- 1 file changed, 162 insertions(+), 101 deletions(-) diff --git a/src/f_finale.c b/src/f_finale.c index e3809ea25..4396aca92 100644 --- a/src/f_finale.c +++ b/src/f_finale.c @@ -499,7 +499,7 @@ void F_StartIntro(void) CON_ToggleOff(); F_NewCutscene(introtext[0]); - intro_scenenum = 0; + intro_scenenum = 9; finalecount = animtimer = skullAnimCounter = stoptimer = 0; timetonext = introscenetime[intro_scenenum]; } @@ -509,91 +509,91 @@ void F_StartIntro(void) // static void F_IntroDrawScene(void) { - boolean highres = false; + boolean highres = true; INT32 cx = 8, cy = 128; patch_t *background = NULL; INT32 bgxoffs = 0; void *patch; // DRAW A FULL PIC INSTEAD OF FLAT! - if (intro_scenenum == 0); - else if (intro_scenenum == 1) - background = W_CachePatchName("INTRO1", PU_CACHE); - else if (intro_scenenum == 2) + switch (intro_scenenum) { - background = W_CachePatchName("INTRO2", PU_CACHE); - highres = true; - } - else if (intro_scenenum == 3) - background = W_CachePatchName("INTRO3", PU_CACHE); - else if (intro_scenenum == 4) - background = W_CachePatchName("INTRO4", PU_CACHE); - else if (intro_scenenum == 5) - { - if (intro_curtime >= 5*TICRATE) - background = W_CachePatchName("RADAR", PU_CACHE); - else + case 0: + break; + case 1: + background = W_CachePatchName("INTRO1", PU_CACHE); + break; + case 2: + background = W_CachePatchName("INTRO2", PU_CACHE); + break; + case 3: + background = W_CachePatchName("INTRO3", PU_CACHE); + break; + case 4: + background = W_CachePatchName("INTRO4", PU_CACHE); + highres = false; + break; + case 5: + if (intro_curtime >= 5*TICRATE) + background = W_CachePatchName("RADAR", PU_CACHE); + else + background = W_CachePatchName("DRAT", PU_CACHE); + break; + case 6: + background = W_CachePatchName("INTRO6", PU_CACHE); + cx = 180; + cy = 8; + break; + case 7: { - background = W_CachePatchName("DRAT", PU_CACHE); - highres = true; + if (intro_curtime >= 7*TICRATE + ((TICRATE/7)*2)) + background = W_CachePatchName("SGRASS5", PU_CACHE); + else if (intro_curtime >= 7*TICRATE + (TICRATE/7)) + background = W_CachePatchName("SGRASS4", PU_CACHE); + else if (intro_curtime >= 7*TICRATE) + background = W_CachePatchName("SGRASS3", PU_CACHE); + else if (intro_curtime >= 6*TICRATE) + background = W_CachePatchName("SGRASS2", PU_CACHE); + else + background = W_CachePatchName("SGRASS1", PU_CACHE); + break; } - } - else if (intro_scenenum == 6) - { - background = W_CachePatchName("INTRO6", PU_CACHE); - cx = 180; - cy = 8; - } - else if (intro_scenenum == 7) - { - if (intro_curtime >= 6*TICRATE) - background = W_CachePatchName("SGRASS5", PU_CACHE); - else - background = W_CachePatchName("SGRASS1", PU_CACHE); - } - else if (intro_scenenum == 8) - { - background = W_CachePatchName("WATCHING", PU_CACHE); - highres = true; - } - else if (intro_scenenum == 9) - { - background = W_CachePatchName("ZOOMING", PU_CACHE); - highres = true; - } - else if (intro_scenenum == 10); - else if (intro_scenenum == 11) - background = W_CachePatchName("INTRO5", PU_CACHE); - else if (intro_scenenum == 12) - { - if (intro_curtime >= 7*TICRATE) - background = W_CachePatchName("CONFRONT", PU_CACHE); - else - background = W_CachePatchName("REVENGE", PU_CACHE); - highres = true; - } - else if (intro_scenenum == 13) - { - background = W_CachePatchName("TAILSSAD", PU_CACHE); - highres = true; - bgxoffs = 144; - cx = 8; - cy = 8; - } - else if (intro_scenenum == 14) - { - if (intro_curtime >= 7*TICRATE) - background = W_CachePatchName("SONICDO2", PU_CACHE); - else - background = W_CachePatchName("SONICDO1", PU_CACHE); - highres = true; - cx = 224; - cy = 8; - } - else if (intro_scenenum == 15) - { - background = W_CachePatchName("INTRO7", PU_CACHE); - highres = true; + case 8: + background = W_CachePatchName("WATCHING", PU_CACHE); + break; + case 9: + background = W_CachePatchName("ZOOMING", PU_CACHE); + break; + case 10: + break; + case 11: + background = W_CachePatchName("INTRO5", PU_CACHE); + break; + case 12: + if (intro_curtime >= 7*TICRATE) + background = W_CachePatchName("CONFRONT", PU_CACHE); + else + background = W_CachePatchName("REVENGE", PU_CACHE); + break; + case 13: + background = W_CachePatchName("TAILSSAD", PU_CACHE); + bgxoffs = 144; + cx = 8; + cy = 8; + break; + case 14: + if (intro_curtime >= 7*TICRATE) + background = W_CachePatchName("SONICDO2", PU_CACHE); + else + background = W_CachePatchName("SONICDO1", PU_CACHE); + cx = 224; + cy = 8; + break; + case 15: + background = W_CachePatchName("INTRO7", PU_CACHE); + break; + default: + break; } V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, 31); @@ -731,8 +731,22 @@ static void F_IntroDrawScene(void) } else { + INT32 sonicx = (timetonext >> 2); + INT32 tailsx = 32 + 4*max(0, timetonext - (9*TICRATE >> 1)); + INT32 knucklesx = 96 + 4*max(0, timetonext - (5*TICRATE >> 1)); + INT32 tailsy = 12 + P_ReturnThrustX(NULL, finalecount * ANGLE_22h, 2); + INT32 knucklesy = 48 - (timetonext >> 3); + INT32 skyx = 2 * finalecount % 320; + INT32 grassx = 16 * finalecount % 320; menuanimtimer = animtimer; // Reusing this variable for the intro to fix the scrolling sky, better than changing the function around. - F_SkyScroll(80*4, 0, "TITLESKY"); + //F_SkyScroll(80*4, 0, "INTROSKY"); + V_DrawSmallScaledPatch(skyx, 0, 0, (patch = W_CachePatchName("INTROSKY", PU_CACHE))); + V_DrawSmallScaledPatch(skyx - 320, 0, 0, patch); + W_UnlockCachedPatch(patch); + V_DrawSmallScaledPatch(grassx, 0, 0, (patch = W_CachePatchName("INTROGRS", PU_CACHE))); + V_DrawSmallScaledPatch(grassx - 320, 0, 0, patch); + W_UnlockCachedPatch(patch); + if (timetonext == 6) { stoptimer = finalecount; @@ -746,37 +760,84 @@ static void F_IntroDrawScene(void) else { animtimer = finalecount % 16; - deplete = 160; + deplete = 96; } + sonicx += deplete; + tailsx += sonicx; + knucklesx += sonicx; + sonicx += P_ReturnThrustX(NULL, finalecount * ANG10, 3); if (finalecount & 1) { - V_DrawScaledPatch(deplete, 8, 0, (patch = W_CachePatchName("RUN2", PU_CACHE))); + // Sonic + V_DrawSmallScaledPatch(sonicx, 54, 0, (patch = W_CachePatchName("RUN2", PU_CACHE))); W_UnlockCachedPatch(patch); - V_DrawScaledPatch(deplete, 72, 0, (patch = W_CachePatchName("PEELOUT2", PU_CACHE))); + + // Appendages + if (finalecount & 2) + { + // Sonic's feet + V_DrawSmallScaledPatch(sonicx - 8, 92, 0, (patch = W_CachePatchName("PEELOUT4", PU_CACHE))); + W_UnlockCachedPatch(patch); + // Tails' tails + V_DrawSmallScaledPatch(tailsx, tailsy, 0, (patch = W_CachePatchName("HELICOP2", PU_CACHE))); + W_UnlockCachedPatch(patch); + } + else + { + // Sonic's feet + V_DrawSmallScaledPatch(sonicx - 8, 92, 0, (patch = W_CachePatchName("PEELOUT2", PU_CACHE))); + W_UnlockCachedPatch(patch); + // Tails' tails + V_DrawSmallScaledPatch(tailsx, tailsy, 0, (patch = W_CachePatchName("HELICOP1", PU_CACHE))); + W_UnlockCachedPatch(patch); + } + + // Tails + V_DrawSmallScaledPatch(tailsx, tailsy, 0, (patch = W_CachePatchName("FLY2", PU_CACHE))); + W_UnlockCachedPatch(patch); + + // Knuckles + V_DrawSmallScaledPatch(knucklesx, knucklesy, 0, (patch = W_CachePatchName("GLIDE2", PU_CACHE))); W_UnlockCachedPatch(patch); } else { - V_DrawScaledPatch(deplete, 8, 0, (patch = W_CachePatchName("RUN1", PU_CACHE))); + // Sonic + V_DrawSmallScaledPatch(sonicx, 54, 0, (patch = W_CachePatchName("RUN1", PU_CACHE))); W_UnlockCachedPatch(patch); - V_DrawScaledPatch(deplete, 72, 0, (patch = W_CachePatchName("PEELOUT1", PU_CACHE))); + + // Appendages + if (finalecount & 2) + { + // Sonic's feet + V_DrawSmallScaledPatch(sonicx - 8, 92, 0, (patch = W_CachePatchName("PEELOUT3", PU_CACHE))); + W_UnlockCachedPatch(patch); + // Tails' tails + V_DrawSmallScaledPatch(tailsx, tailsy, 0, (patch = W_CachePatchName("HELICOP2", PU_CACHE))); + W_UnlockCachedPatch(patch); + } + else + { + // Sonic's feet + V_DrawSmallScaledPatch(sonicx - 8, 92, 0, (patch = W_CachePatchName("PEELOUT1", PU_CACHE))); + W_UnlockCachedPatch(patch); + // Tails' tails + V_DrawSmallScaledPatch(tailsx, tailsy, 0, (patch = W_CachePatchName("HELICOP1", PU_CACHE))); + W_UnlockCachedPatch(patch); + } + + // Tails + V_DrawSmallScaledPatch(tailsx, tailsy, 0, (patch = W_CachePatchName("FLY1", PU_CACHE))); + W_UnlockCachedPatch(patch); + + // Knuckles + V_DrawSmallScaledPatch(knucklesx, knucklesy, 0, (patch = W_CachePatchName("GLIDE1", PU_CACHE))); W_UnlockCachedPatch(patch); } - { // Fixing up the black box rendering to look right in resolutions <16:10 -Red - INT32 y = 112; - INT32 h = BASEVIDHEIGHT - 112; - if (vid.height != BASEVIDHEIGHT * vid.dupy) - { - INT32 adjust = (vid.height/vid.dupy)-200; - adjust /= 2; - y += adjust; - h += adjust; - V_DrawFill(0, 0, BASEVIDWIDTH, adjust, 31); // Render a black bar on top so it keeps the "cinematic" windowboxing... I just prefer it this way. -Red - } - V_DrawFill(0, y, BASEVIDWIDTH, h, 31); - } + V_DrawFill(-80, 0, 80, 256, 31); + V_DrawFill(BASEVIDWIDTH, 0, 80, 256, 31); } } @@ -826,7 +887,7 @@ static void F_IntroDrawScene(void) if (animtimer) animtimer--; - if (intro_scenenum == 7 && intro_curtime > 7*TICRATE) + /*if (intro_scenenum == 7 && intro_curtime > 7*TICRATE) { patch_t *sgrass; @@ -839,7 +900,7 @@ static void F_IntroDrawScene(void) V_DrawScaledPatch(123, 4, 0, sgrass); W_UnlockCachedPatch(sgrass); - } + }*/ V_DrawString(cx, cy, V_ALLOWLOWERCASE, cutscene_disptext); } @@ -928,7 +989,7 @@ void F_IntroDrawer(void) F_WipeStartScreen(); F_WipeColorFill(31); - V_DrawScaledPatch(0, 0, 0, radar); + V_DrawSmallScaledPatch(0, 0, 0, radar); W_UnlockCachedPatch(radar); V_DrawString(8, 128, V_ALLOWLOWERCASE, cutscene_disptext); @@ -937,11 +998,11 @@ void F_IntroDrawer(void) } else if (intro_scenenum == 7 && intro_curtime == 6*TICRATE) // Force a wipe here { - patch_t *grass = W_CachePatchName("SGRASS5", PU_CACHE); + patch_t *grass = W_CachePatchName("SGRASS2", PU_CACHE); F_WipeStartScreen(); F_WipeColorFill(31); - V_DrawScaledPatch(0, 0, 0, grass); + V_DrawSmallScaledPatch(0, 0, 0, grass); W_UnlockCachedPatch(grass); V_DrawString(8, 128, V_ALLOWLOWERCASE, cutscene_disptext); From 0acbe21d497e8738744089d05a3e9c4e47318519 Mon Sep 17 00:00:00 2001 From: sphere Date: Fri, 22 Nov 2019 20:24:57 +0100 Subject: [PATCH 034/141] restore secrets = 0, not sure why i changed that --- src/m_menu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/m_menu.c b/src/m_menu.c index 648fa17f6..025637820 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -488,7 +488,7 @@ typedef enum { singleplr, multiplr, - secrets = 2, + secrets = 0, addons, options, quitdoom From 3e428a5176610a74b5216f3ece758ca6460861dd Mon Sep 17 00:00:00 2001 From: sphere Date: Fri, 22 Nov 2019 20:37:35 +0100 Subject: [PATCH 035/141] i'm a dumbass --- src/m_menu.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/m_menu.c b/src/m_menu.c index 025637820..ccfaa9a49 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -486,9 +486,9 @@ static menuitem_t MainMenu[] = typedef enum { - singleplr, + singleplr = 0, multiplr, - secrets = 0, + secrets, addons, options, quitdoom From 21880219aa57ebe95bc623b2d13b0713d62cbcb6 Mon Sep 17 00:00:00 2001 From: toaster Date: Fri, 22 Nov 2019 19:51:27 +0000 Subject: [PATCH 036/141] Resolve #310. --- src/p_user.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/p_user.c b/src/p_user.c index 0140bee4d..d61a179f5 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -7743,9 +7743,12 @@ void P_ElementalFire(player_t *player, boolean cropcircle) I_Assert(!P_MobjWasRemoved(player->mo)); if (player->mo->eflags & MFE_VERTICALFLIP) - ground = player->mo->ceilingz - FixedMul(mobjinfo[MT_SPINFIRE].height - 1, player->mo->scale); + ground = player->mo->ceilingz - FixedMul(mobjinfo[MT_SPINFIRE].height, player->mo->scale); else - ground = player->mo->floorz + 1; + ground = player->mo->floorz; + + if (cropcircle) + ground += P_MobjFlip(player->mo); if (cropcircle) { From b6172a2b2e1d83ccc9aac11e9d03e5b77b4d8fad Mon Sep 17 00:00:00 2001 From: sphere Date: Fri, 22 Nov 2019 21:00:03 +0100 Subject: [PATCH 037/141] Swap statistics and tutorial options in the 1 Player menu. --- src/m_menu.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/m_menu.c b/src/m_menu.c index ccfaa9a49..cc655b226 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -727,8 +727,8 @@ static menuitem_t SP_MainMenu[] = {IT_CALL | IT_STRING, NULL, "Start Game", M_LoadGame, 84}, {IT_SECRET, NULL, "Record Attack", M_TimeAttack, 92}, {IT_SECRET, NULL, "NiGHTS Mode", M_NightsAttack, 100}, - {IT_CALL | IT_STRING | IT_CALL_NOTMODIFIED, NULL, "Statistics", M_Statistics, 108}, - {IT_CALL | IT_STRING, NULL, "Tutorial", M_StartTutorial, 116}, + {IT_CALL | IT_STRING, NULL, "Tutorial", M_StartTutorial, 108}, + {IT_CALL | IT_STRING | IT_CALL_NOTMODIFIED, NULL, "Statistics", M_Statistics, 116} }; enum @@ -736,8 +736,8 @@ enum sploadgame, sprecordattack, spnightsmode, - spstatistics, - sptutorial + sptutorial, + spstatistics }; // Single Player Load Game From 99217974d016d3762bdf2488b9b53e5a16493d5e Mon Sep 17 00:00:00 2001 From: Jaime Passos Date: Fri, 22 Nov 2019 17:30:53 -0300 Subject: [PATCH 038/141] fix missing mmx check --- src/r_plane.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/r_plane.c b/src/r_plane.c index a3075c9d8..f21f49101 100644 --- a/src/r_plane.c +++ b/src/r_plane.c @@ -1007,6 +1007,8 @@ void R_DrawSinglePlane(visplane_t *pl) R_CheckFlatLength(W_LumpLength(levelflat->u.flat.lumpnum)); // Raw flats always have dimensions that are powers-of-two numbers. ds_powersoftwo = true; + if (spanfunc == basespanfunc) + spanfunc = mmxspanfunc; break; default: switch (type) From 476e6cc6ed4614a90fbcc5e58a886b9ef297b8a0 Mon Sep 17 00:00:00 2001 From: Jaime Passos Date: Fri, 22 Nov 2019 17:44:42 -0300 Subject: [PATCH 039/141] Fix crossfades Fixes NoReload using the wrong wipestyle. Also fixes non-titlemap title screen wipes using the wrong wipestyle. --- src/f_finale.h | 7 ++++--- src/f_wipe.c | 6 ++++-- src/g_game.c | 6 ++++-- src/p_setup.c | 2 +- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/f_finale.h b/src/f_finale.h index 024b183b2..0002cb3cf 100644 --- a/src/f_finale.h +++ b/src/f_finale.h @@ -152,9 +152,10 @@ extern wipestyle_t wipestyle; typedef enum { - WSF_FADEOUT = 1, - WSF_FADEIN = 1<<1, - WSF_TOWHITE = 1<<2, + WSF_FADEOUT = 1, + WSF_FADEIN = 1<<1, + WSF_TOWHITE = 1<<2, + WSF_CROSSFADE = 1<<3, } wipestyleflags_t; extern wipestyleflags_t wipestyleflags; diff --git a/src/f_wipe.c b/src/f_wipe.c index 20651cb1d..0c4c591c8 100644 --- a/src/f_wipe.c +++ b/src/f_wipe.c @@ -95,7 +95,7 @@ boolean WipeStageTitle = false; INT32 lastwipetic = 0; wipestyle_t wipestyle = WIPESTYLE_NORMAL; -wipestyleflags_t wipestyleflags = 0; +wipestyleflags_t wipestyleflags = WSF_CROSSFADE; #ifndef NOWIPE static UINT8 *wipe_scr_start; //screen 3 @@ -404,7 +404,9 @@ void F_RunWipe(UINT8 wipetype, boolean drawMenu) // don't know where else to put this. // this any good? - if (gamestate == GS_LEVEL || gamestate == GS_TITLESCREEN) + if ((gamestate == GS_LEVEL || gamestate == GS_TITLESCREEN) + && (wipestyleflags & (WSF_FADEIN|WSF_FADEOUT)) // only if wipestyleflags are actually set + && !(wipestyleflags & WSF_CROSSFADE)) // and if not crossfading wipestyle = WIPESTYLE_LEVEL; else wipestyle = WIPESTYLE_NORMAL; diff --git a/src/g_game.c b/src/g_game.c index 2fa70353e..963fc00f0 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -1803,6 +1803,9 @@ void G_DoLoadLevel(boolean resetplayer) // void G_StartTitleCard(void) { + wipestyleflags |= WSF_FADEIN; + wipestyleflags &= ~WSF_FADEOUT; + // The title card has been disabled for this map. // Oh well. if (mapheaderinfo[gamemap-1]->levelflags & LF_NOTITLECARD) @@ -1819,8 +1822,6 @@ void G_StartTitleCard(void) // start the title card WipeStageTitle = (!titlemapinaction); - wipestyleflags |= WSF_FADEIN; - wipestyleflags &= ~WSF_FADEOUT; } // @@ -2855,6 +2856,7 @@ void G_DoReborn(INT32 playernum) // Do a wipe wipegamestate = -1; + wipestyleflags = WSF_CROSSFADE; if (camera.chase) P_ResetCamera(&players[displayplayer], &camera); diff --git a/src/p_setup.c b/src/p_setup.c index e87a088d8..b729177aa 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -2725,7 +2725,7 @@ boolean P_SetupLevel(boolean skipprecip) S_FadeOutStopMusic(MUSICRATE/4); //FixedMul(FixedDiv(F_GetWipeLength(wipedefs[wipe_speclevel_towhite])*NEWTICRATERATIO, NEWTICRATE), MUSICRATE) F_WipeStartScreen(); - wipestyleflags |= WSF_FADEOUT|WSF_TOWHITE; + wipestyleflags |= (WSF_FADEOUT|WSF_TOWHITE); #ifdef HWRENDER // uh.......... From 8797e139eeb5df521897cdbc8c9789f6dfb4914c Mon Sep 17 00:00:00 2001 From: Jaime Passos Date: Fri, 22 Nov 2019 17:50:05 -0300 Subject: [PATCH 040/141] clarify comment --- src/f_wipe.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/f_wipe.c b/src/f_wipe.c index 0c4c591c8..b88b39ef0 100644 --- a/src/f_wipe.c +++ b/src/f_wipe.c @@ -405,7 +405,7 @@ void F_RunWipe(UINT8 wipetype, boolean drawMenu) // don't know where else to put this. // this any good? if ((gamestate == GS_LEVEL || gamestate == GS_TITLESCREEN) - && (wipestyleflags & (WSF_FADEIN|WSF_FADEOUT)) // only if wipestyleflags are actually set + && (wipestyleflags & (WSF_FADEIN|WSF_FADEOUT)) // only if one of those wipestyleflags are actually set && !(wipestyleflags & WSF_CROSSFADE)) // and if not crossfading wipestyle = WIPESTYLE_LEVEL; else From 0a49bab070ce998027edd472db2301c0829cd03f Mon Sep 17 00:00:00 2001 From: toaster Date: Fri, 22 Nov 2019 21:06:25 +0000 Subject: [PATCH 041/141] I was reading the Sonic 3 Unlocked blog by NeoHazard when I came across a very interesting post. https://s3unlocked.blogspot.com/2017/12/over-threshold.html It turns out that in Sonic 3 & Knuckles, the threshold for crossing into the super animation is increased compared to normal gameplay. This makes a lot of sense - however, both Sonic Mania and the Taxman/Stealth mobile remakes missed this. I quickly tested and confirmed that SRB2 had the same issue, so here's the fix. --- src/p_user.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/p_user.c b/src/p_user.c index 0140bee4d..0ba8efe95 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -2359,11 +2359,23 @@ boolean P_PlayerHitFloor(player_t *player, boolean dorollstuff) ; else if (player->panim != PA_IDLE && player->panim != PA_WALK && player->panim != PA_RUN && player->panim != PA_DASH) { + fixed_t runspd = FixedMul(player->runspeed, player->mo->scale); + + // See comments in P_MovePlayer for explanation of changes. + + if (player->powers[pw_super]) + runspd = FixedMul(runspd, 5*FRACUNIT/3); + + runspd = FixedMul(runspd, player->mo->movefactor); + + if (maptol & TOL_2D) + runspd = FixedMul(runspd, 2*FRACUNIT/3); + if (player->cmomx || player->cmomy) { if (player->charflags & SF_DASHMODE && player->dashmode >= DASHMODE_THRESHOLD && player->panim != PA_DASH) P_SetPlayerMobjState(player->mo, S_PLAY_DASH); - else if (player->speed >= FixedMul(player->runspeed, player->mo->scale) + else if (player->speed >= runspd && (player->panim != PA_RUN || player->mo->state-states == S_PLAY_FLOAT_RUN)) P_SetPlayerMobjState(player->mo, S_PLAY_RUN); else if ((player->rmomx || player->rmomy) @@ -2376,7 +2388,7 @@ boolean P_PlayerHitFloor(player_t *player, boolean dorollstuff) { if (player->charflags & SF_DASHMODE && player->dashmode >= DASHMODE_THRESHOLD && player->panim != PA_DASH) P_SetPlayerMobjState(player->mo, S_PLAY_DASH); - else if (player->speed >= FixedMul(player->runspeed, player->mo->scale) + else if (player->speed >= runspd && (player->panim != PA_RUN || player->mo->state-states == S_PLAY_FLOAT_RUN)) P_SetPlayerMobjState(player->mo, S_PLAY_RUN); else if ((player->mo->momx || player->mo->momy) @@ -7924,6 +7936,11 @@ static void P_MovePlayer(player_t *player) cmd = &player->cmd; runspd = FixedMul(player->runspeed, player->mo->scale); + // This was done in Sonic 3 & Knuckles, but has been missed in Sonic Mania and the Taxman/Stealth mobile remakes. Thanks to NeoHazard for his 2017 blogpost on the matter, because this oversight otherwise almost made it all the way to 2.2's release. + //https://s3unlocked.blogspot.com/2017/12/over-threshold.html + if (player->powers[pw_super]) + runspd = FixedMul(runspd, 5*FRACUNIT/3); + // Let's have some movement speed fun on low-friction surfaces, JUST for players... (high friction surfaces shouldn't have any adjustment, since the acceleration in this game is super high and that ends up cheesing high-friction surfaces.) runspd = FixedMul(runspd, player->mo->movefactor); From c583c87fc0f809c33d1fc05c378222c9a737dc9d Mon Sep 17 00:00:00 2001 From: toaster Date: Fri, 22 Nov 2019 16:27:22 -0500 Subject: [PATCH 042/141] Do Cobalt's suggestion, because this branch wasn't gonna get merged in its original state anyways. --- src/info.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/info.c b/src/info.c index 7521c9484..0583ac549 100644 --- a/src/info.c +++ b/src/info.c @@ -4271,7 +4271,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_DETON1, // spawnstate 1, // spawnhealth S_DETON2, // seestate - sfx_kc57, // seesound + sfx_s3k86, // seesound -- sfx_kc57 for a self-propelled deton... 1, // reactiontime sfx_deton, // attacksound S_NULL, // painstate From dbeec7dacc01efa82d1cb78563fc747787a19e6a Mon Sep 17 00:00:00 2001 From: toaster Date: Sat, 23 Nov 2019 14:20:41 +0000 Subject: [PATCH 043/141] Prevent Knuckles latching onto horizon special linedefs. Also, update all references to the horizon special to use a #defined constant instead of a magic number. --- src/hardware/hw_main.c | 2 +- src/p_map.c | 2 +- src/r_defs.h | 2 ++ src/r_segs.c | 4 ++-- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index 5f0c25a59..51c976973 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -1973,7 +1973,7 @@ static void HWR_StoreWallRange(double startfrac, double endfrac) { // Single sided line... Deal only with the middletexture (if one exists) gr_midtexture = R_GetTextureNum(gr_sidedef->midtexture); - if (gr_midtexture && gr_linedef->special != 41) // Ignore horizon line for OGL + if (gr_midtexture && gr_linedef->special != HORIZONSPECIAL) // Ignore horizon line for OGL { { fixed_t texturevpeg; diff --git a/src/p_map.c b/src/p_map.c index 97bff8156..753ce9eb5 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -3471,7 +3471,7 @@ isblocking: } // see about climbing on the wall - if (!(checkline->flags & ML_NOCLIMB)) + if (!(checkline->flags & ML_NOCLIMB) && checkline->special != HORIZONSPECIAL) { boolean canclimb; angle_t climbangle, climbline; diff --git a/src/r_defs.h b/src/r_defs.h index 4d41f4f70..6d0b10b70 100644 --- a/src/r_defs.h +++ b/src/r_defs.h @@ -410,6 +410,8 @@ typedef enum ST_NEGATIVE } slopetype_t; +#define HORIZONSPECIAL 41 + typedef struct line_s { // Vertices, from v1 to v2. diff --git a/src/r_segs.c b/src/r_segs.c index 6eb81ce7a..ee62bfc73 100644 --- a/src/r_segs.c +++ b/src/r_segs.c @@ -2694,7 +2694,7 @@ void R_StoreWallRange(INT32 start, INT32 stop) worldbottomslope >>= 4; #endif - if (linedef->special == 41) { // HORIZON LINES + if (linedef->special == HORIZONSPECIAL) { // HORIZON LINES topstep = bottomstep = 0; topfrac = bottomfrac = (centeryfrac>>4); topfrac++; // Prevent 1px HOM @@ -2825,7 +2825,7 @@ void R_StoreWallRange(INT32 start, INT32 stop) #ifdef ESLOPE ffloor[i].f_pos_slope >>= 4; #endif - if (linedef->special == 41) // Horizon lines extend FOFs in contact with them too. + if (linedef->special == HORIZONSPECIAL) // Horizon lines extend FOFs in contact with them too. { ffloor[i].f_step = 0; ffloor[i].f_frac = (centeryfrac>>4); From 75e714956f35242adba30a30acda1b0c503171a2 Mon Sep 17 00:00:00 2001 From: toaster Date: Sat, 23 Nov 2019 14:43:36 +0000 Subject: [PATCH 044/141] It's not safe to store a file-scope pointer to a mobj_t* without having any mechanism to clear it between map reloadings, so move the Tailsbot "press jump now to fly!" indicator into `tails->target`. Resolves #331, and likely also #330 and #309. --- src/b_bot.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/b_bot.c b/src/b_bot.c index 12cdc36a0..709a280b5 100644 --- a/src/b_bot.c +++ b/src/b_bot.c @@ -31,7 +31,6 @@ static boolean panic = false; static UINT8 flymode = 0; static boolean spinmode = false; static boolean thinkfly = false; -static mobj_t *overlay; static inline void B_ResetAI(void) { @@ -336,17 +335,20 @@ static inline void B_BuildTailsTiccmd(mobj_t *sonic, mobj_t *tails, ticcmd_t *cm // Thinkfly overlay if (thinkfly) { - if (overlay == NULL) + if (!tails->target) { - overlay = P_SpawnMobjFromMobj(tails, 0, 0, 0, MT_OVERLAY); - P_SetTarget(&overlay->target, tails); - P_SetMobjState(overlay, S_FLIGHTINDICATOR); + P_SetTarget(&tails->target, P_SpawnMobjFromMobj(tails, 0, 0, 0, MT_OVERLAY)); + if (tails->target) + { + P_SetTarget(&tails->target->target, tails); + P_SetMobjState(tails->target, S_FLIGHTINDICATOR); + } } } - else if (overlay != NULL) + else if (tails->target && tails->target->type == MT_OVERLAY && tails->target->state == states+S_FLIGHTINDICATOR) { - P_RemoveMobj(overlay); - overlay = NULL; + P_RemoveMobj(tails->target); + P_SetTarget(&tails->target, NULL); } // Turn the virtual keypresses into ticcmd_t. From 206f3ac51cbbdc4f1aa080a10f55065e2fccbb8a Mon Sep 17 00:00:00 2001 From: toaster Date: Sat, 23 Nov 2019 15:11:11 +0000 Subject: [PATCH 045/141] Have the vertical aiming focus on the signpost's z rather than continue to focus on the player even while the camera is forced to be near the signpost. (resolves #327) --- src/p_user.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/p_user.c b/src/p_user.c index 0140bee4d..9b3b8b9bd 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -10218,9 +10218,9 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall dist = FixedHypot(f1, f2); if (mo->eflags & MFE_VERTICALFLIP) - angle = R_PointToAngle2(0, thiscam->z + thiscam->height, dist, mo->z + mo->height - P_GetPlayerHeight(player)); + angle = R_PointToAngle2(0, thiscam->z + thiscam->height, dist, (sign ? sign->ceilingz : mo->z + mo->height) - P_GetPlayerHeight(player)); else - angle = R_PointToAngle2(0, thiscam->z, dist, mo->z + P_GetPlayerHeight(player)); + angle = R_PointToAngle2(0, thiscam->z, dist, (sign ? sign->floorz : mo->z) + P_GetPlayerHeight(player)); if (player->playerstate != PST_DEAD) angle += (focusaiming < ANGLE_180 ? focusaiming/2 : InvAngle(InvAngle(focusaiming)/2)); // overcomplicated version of '((signed)focusaiming)/2;' From ea5ac5bb6a9083987915dd7f2927bde998d219b0 Mon Sep 17 00:00:00 2001 From: toaster Date: Sat, 23 Nov 2019 15:23:42 +0000 Subject: [PATCH 046/141] Remove duplicate viewpointx/viewpointy set. --- src/p_user.c | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/p_user.c b/src/p_user.c index 9b3b8b9bd..dc3bcc113 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -10164,17 +10164,6 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall if (!camstill && !resetcalled && !paused) thiscam->angle = R_PointToAngle2(thiscam->x, thiscam->y, viewpointx, viewpointy); - if (sign) - { - viewpointx = sign->x + FixedMul(FINECOSINE((angle>>ANGLETOFINESHIFT) & FINEMASK), dist); - viewpointy = sign->y + FixedMul(FINESINE((angle>>ANGLETOFINESHIFT) & FINEMASK), dist); - } - else - { - viewpointx = mo->x + FixedMul(FINECOSINE((angle>>ANGLETOFINESHIFT) & FINEMASK), dist); - viewpointy = mo->y + FixedMul(FINESINE((angle>>ANGLETOFINESHIFT) & FINEMASK), dist); - } - /* if (twodlevel || (mo->flags2 & MF2_TWOD)) thiscam->angle = angle; From d252d82039a585bc6047374dc8a5e4f4e54bb84f Mon Sep 17 00:00:00 2001 From: toaster Date: Sat, 23 Nov 2019 15:40:32 +0000 Subject: [PATCH 047/141] Since I was tired of seeing NiGHTS players bump their head into the ceiling, and since similar camera enhancements have been made for the papersprite sign exit, implement a camera lock when exiting while NiGHTS. https://cdn.discordapp.com/attachments/359091121789468672/647821662003396609/srb20088.gif --- src/p_user.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/p_user.c b/src/p_user.c index 0140bee4d..68b99ae3e 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -9632,8 +9632,15 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall mo = player->mo; - if (player->exiting && mo->target && mo->target->type == MT_SIGN) - sign = mo->target; + if (player->exiting) + { + if (mo->target && mo->target->type == MT_SIGN && mo->target->spawnpoint) + sign = mo->target; + else if ((player->powers[pw_carry] == CR_NIGHTSMODE) + && !(player->mo->state >= &states[S_PLAY_NIGHTS_TRANS1] + && player->mo->state <= &states[S_PLAY_NIGHTS_TRANS6])) + return true; + } cameranoclip = (player->powers[pw_carry] == CR_NIGHTSMODE || player->pflags & PF_NOCLIP) || (mo->flags & (MF_NOCLIP|MF_NOCLIPHEIGHT)); // Noclipping player camera noclips too!! From e70f8b383eb6583226a99d289aed54b78ce56c71 Mon Sep 17 00:00:00 2001 From: MascaraSnake Date: Sat, 23 Nov 2019 18:51:32 +0100 Subject: [PATCH 048/141] Fixed a missing space in the "Speeding off to..." text --- src/p_setup.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/p_setup.c b/src/p_setup.c index b729177aa..83f1d475b 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -2809,7 +2809,7 @@ boolean P_SetupLevel(boolean skipprecip) snprintf(tx, 63, "%s%s%s", mapheaderinfo[gamemap-1]->lvlttl, (mapheaderinfo[gamemap-1]->levelflags & LF_NOZONE) ? "" : " Zone", - (mapheaderinfo[gamemap-1]->actnum > 0) ? va("%d",mapheaderinfo[gamemap-1]->actnum) : ""); + (mapheaderinfo[gamemap-1]->actnum > 0) ? va(" %d",mapheaderinfo[gamemap-1]->actnum) : ""); V_DrawSmallString(1, 195, V_ALLOWLOWERCASE|V_TRANSLUCENT, tx); I_UpdateNoVsync(); } From 142f799e82fdb05826326da1f6271edb0b9e67b0 Mon Sep 17 00:00:00 2001 From: FuriousFox Date: Sat, 23 Nov 2019 14:21:48 -0500 Subject: [PATCH 049/141] Updated sprite for Minus --- extras/conf/SRB2-22.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extras/conf/SRB2-22.cfg b/extras/conf/SRB2-22.cfg index f316cd032..ac93ed37d 100644 --- a/extras/conf/SRB2-22.cfg +++ b/extras/conf/SRB2-22.cfg @@ -3422,7 +3422,7 @@ thingtypes 121 { title = "Minus"; - sprite = "MNUSA1"; + sprite = "MNUSA0"; width = 24; height = 32; } From 7b5e6df63b9d4f1622afd50b8f616e55e1405c9c Mon Sep 17 00:00:00 2001 From: FuriousFox Date: Sat, 23 Nov 2019 15:04:59 -0500 Subject: [PATCH 050/141] Added Blue Gargoyle and Green Flame --- extras/conf/SRB2-22.cfg | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/extras/conf/SRB2-22.cfg b/extras/conf/SRB2-22.cfg index ac93ed37d..0a60eb2b9 100644 --- a/extras/conf/SRB2-22.cfg +++ b/extras/conf/SRB2-22.cfg @@ -5726,6 +5726,24 @@ thingtypes width = 24; height = 32; } + 1505 + { + title = "Green Flame"; + sprite = "CFLMA0E0"; + width = 8; + height = 32; + } + 1506 + { + arrow = 1; + blocking = 2; + title = "Blue Gargoyle"; + sprite = "BGARD1"; + width = 16; + height = 40; + flags4text = "[4] Slides when pushed"; + flags8text = "[8] Not pushable"; + } } dreamhill From 25712d95003d37eb17a18e702406f79528c8a79a Mon Sep 17 00:00:00 2001 From: Steel Titanium Date: Sat, 23 Nov 2019 16:09:02 -0500 Subject: [PATCH 051/141] No longer allow showhud to toggle FPS counter or ping bar --- src/sdl/i_video.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/sdl/i_video.c b/src/sdl/i_video.c index f22c79eca..95ddab3cc 100644 --- a/src/sdl/i_video.c +++ b/src/sdl/i_video.c @@ -1176,14 +1176,11 @@ void I_FinishUpdate(void) if (cv_closedcaptioning.value) SCR_ClosedCaptions(); - if (st_overlay) - { - if (cv_ticrate.value) - SCR_DisplayTicRate(); + if (cv_ticrate.value) + SCR_DisplayTicRate(); - if (cv_showping.value && netgame && consoleplayer != serverplayer) - SCR_DisplayLocalPing(); - } + if (cv_showping.value && netgame && consoleplayer != serverplayer) + SCR_DisplayLocalPing(); if (rendermode == render_soft && screens[0]) { From 4d18646881b039ddb55b2b3dea202f74dec2b6f3 Mon Sep 17 00:00:00 2001 From: Jaime Passos Date: Sat, 23 Nov 2019 18:15:09 -0300 Subject: [PATCH 052/141] fix RA fade --- src/g_game.c | 19 ++++++++++++++++++- src/g_game.h | 4 ++++ src/m_menu.c | 1 + src/p_setup.c | 7 +++++++ src/v_video.c | 5 ++++- 5 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/g_game.c b/src/g_game.c index 963fc00f0..faaed13c7 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -172,6 +172,7 @@ mapheader_t* mapheaderinfo[NUMMAPS] = {NULL}; static boolean exitgame = false; static boolean retrying = false; +static boolean retryingmodeattack = false; UINT8 stagefailed; // Used for GEMS BONUS? Also to see if you beat the stage. @@ -2015,7 +2016,7 @@ boolean G_Responder(event_t *ev) pausedelay = 1+(NEWTICRATE/2); else if (++pausedelay > 1+(NEWTICRATE/2)+(NEWTICRATE/3)) { - G_SetRetryFlag(); + G_SetModeAttackRetryFlag(); return true; } pausedelay++; // counteract subsequent subtraction this frame @@ -6925,6 +6926,22 @@ boolean G_GetRetryFlag(void) return retrying; } +void G_SetModeAttackRetryFlag(void) +{ + retryingmodeattack = true; + G_SetRetryFlag(); +} + +void G_ClearModeAttackRetryFlag(void) +{ + retryingmodeattack = false; +} + +boolean G_GetModeAttackRetryFlag(void) +{ + return retryingmodeattack; +} + // Time utility functions INT32 G_TicsToHours(tic_t tics) { diff --git a/src/g_game.h b/src/g_game.h index 87232c823..0a575c099 100644 --- a/src/g_game.h +++ b/src/g_game.h @@ -225,10 +225,14 @@ void G_AddPlayer(INT32 playernum); void G_SetExitGameFlag(void); void G_ClearExitGameFlag(void); boolean G_GetExitGameFlag(void); + void G_SetRetryFlag(void); void G_ClearRetryFlag(void); boolean G_GetRetryFlag(void); +void G_SetModeAttackRetryFlag(void); +void G_ClearModeAttackRetryFlag(void); +boolean G_GetModeAttackRetryFlag(void); void G_LoadGameData(void); void G_LoadGameSettings(void); diff --git a/src/m_menu.c b/src/m_menu.c index 52ee6b410..36be65db1 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -3535,6 +3535,7 @@ void M_StartControlPanel(void) void M_EndModeAttackRun(void) { + G_ClearModeAttackRetryFlag(); M_ModeAttackEndGame(0); } diff --git a/src/p_setup.c b/src/p_setup.c index 83f1d475b..5c792c73c 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -2757,6 +2757,13 @@ boolean P_SetupLevel(boolean skipprecip) ranspecialwipe = 1; } + if (G_GetModeAttackRetryFlag()) + { + if (modeattacking) + wipestyleflags |= (WSF_FADEOUT|WSF_TOWHITE); + G_ClearModeAttackRetryFlag(); + } + // Make sure all sounds are stopped before Z_FreeTags. S_StopSounds(); S_ClearSfx(); diff --git a/src/v_video.c b/src/v_video.c index 58244531e..e92375630 100644 --- a/src/v_video.c +++ b/src/v_video.c @@ -20,6 +20,7 @@ #include "v_video.h" #include "st_stuff.h" #include "hu_stuff.h" +#include "f_finale.h" #include "r_draw.h" #include "console.h" @@ -1861,7 +1862,9 @@ void V_DrawFadeScreen(UINT16 color, UINT8 strength) { const UINT8 *fadetable = ((color & 0xFF00) // Color is not palette index? - ? ((UINT8 *)colormaps + strength*256) // Do COLORMAP fade. + ? ((UINT8 *)(((color & 0x0F00) == 0x0A00) ? fadecolormap // Do fadecolormap fade. + : (((color & 0x0F00) == 0x0B00) ? fadecolormap + (256 * FADECOLORMAPROWS) // Do white fadecolormap fade. + : colormaps)) + strength*256) // Do COLORMAP fade. : ((UINT8 *)transtables + ((9-strength)< Date: Sat, 23 Nov 2019 16:37:33 -0500 Subject: [PATCH 053/141] Added Dragonbomber --- extras/conf/SRB2-22.cfg | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/extras/conf/SRB2-22.cfg b/extras/conf/SRB2-22.cfg index 0a60eb2b9..c75ee31b3 100644 --- a/extras/conf/SRB2-22.cfg +++ b/extras/conf/SRB2-22.cfg @@ -3457,6 +3457,13 @@ thingtypes height = 34; flags8text = "[8] Start on fire"; } + 137 + { + title = "Dragonbomber"; + sprite = "DRABA1"; + width = 28; + height = 48; + } 105 { title = "Jetty-Syn Bomber"; From 2527e851083617c2c2aa828cda7f46d043241435 Mon Sep 17 00:00:00 2001 From: Jaime Passos Date: Sat, 23 Nov 2019 18:41:28 -0300 Subject: [PATCH 054/141] fix showfps with st_translucency --- src/screen.c | 4 ++-- src/st_stuff.c | 2 +- src/v_video.h | 4 ++++ 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/screen.c b/src/screen.c index a1f6b7f55..5005118b6 100644 --- a/src/screen.c +++ b/src/screen.c @@ -421,9 +421,9 @@ void SCR_DisplayTicRate(void) else if (totaltics == TICRATE) ticcntcolor = V_GREENMAP; V_DrawString(vid.width-(72*vid.dupx), h, - V_YELLOWMAP|V_NOSCALESTART|V_HUDTRANS, "FPS:"); + V_YELLOWMAP|V_NOSCALESTART|V_USERHUDTRANS, "FPS:"); V_DrawString(vid.width-(40*vid.dupx), h, - ticcntcolor|V_NOSCALESTART|V_HUDTRANS, va("%02d/%02u", totaltics, TICRATE)); + ticcntcolor|V_NOSCALESTART|V_USERHUDTRANS, va("%02d/%02u", totaltics, TICRATE)); lasttic = ontic; } diff --git a/src/st_stuff.c b/src/st_stuff.c index 5ccf9bb52..6f75a25e7 100644 --- a/src/st_stuff.c +++ b/src/st_stuff.c @@ -198,7 +198,7 @@ void ST_Ticker(boolean run) // 0 is default, any others are special palettes. INT32 st_palette = 0; -INT32 st_translucency = 0; +INT32 st_translucency = 10; void ST_doPaletteStuff(void) { diff --git a/src/v_video.h b/src/v_video.h index cd32ac5f8..e3dbb75dc 100644 --- a/src/v_video.h +++ b/src/v_video.h @@ -106,6 +106,10 @@ extern RGBA_t *pMasterPalette; #define V_HUDTRANSHALF 0x000D0000 #define V_HUDTRANS 0x000E0000 // draw the hud translucent #define V_HUDTRANSDOUBLE 0x000F0000 +// Macros follow +#define V_USERHUDTRANSHALF ((10-(cv_translucenthud.value/2))< Date: Sun, 24 Nov 2019 15:58:03 +0800 Subject: [PATCH 055/141] Complete new intro --- src/f_finale.c | 119 +++++++++++++++++++++++-------------------------- 1 file changed, 57 insertions(+), 62 deletions(-) diff --git a/src/f_finale.c b/src/f_finale.c index 178aa7ab2..f319c6789 100644 --- a/src/f_finale.c +++ b/src/f_finale.c @@ -305,7 +305,7 @@ static void F_NewCutscene(const char *basetext) // ============= // INTRO SCENE // ============= -#define NUMINTROSCENES 16 +#define NUMINTROSCENES 17 INT32 intro_scenenum = 0; INT32 intro_curtime = 0; @@ -325,7 +325,8 @@ static tic_t introscenetime[NUMINTROSCENES] = 16*TICRATE, // Meanwhile, Sonic was tearing across the zones... 16*TICRATE + (TICRATE/2), // Sonic knew he was getting closer to the city... 17*TICRATE, // Greenflower City was gone... - 16*TICRATE + (TICRATE/2), // You're not quite as dead as we thought, huh?... + 7*TICRATE, // You're not quite as dead as we thought, huh?... + 8*TICRATE, // We'll see... let's give you a quick warm up... 18*TICRATE + (TICRATE/2), // Eggman took this as his cue and blasted off... 16*TICRATE, // Easy! We go find Eggman and stop his... 25*TICRATE, // I'm just finding what mission obje... @@ -436,14 +437,22 @@ void F_StartIntro(void) "had been obliterated.\n#"); introtext[12] = M_GetText( - "\xA7\"You're not quite as gone as we thought,\n" - "huh?\xBF Are you going to tell us your plan as\n" - "usual or will I \xA8\xB4'have to work it out'\xA7 or\n" - "something?\"\xD2\xD2\n" + "\xA7\"You're not\n" + "quite as gone\n" + "as we thought,\n" + "huh?\xBF Are you\n" + "going to tell\n" + "us your plan as\n" + "usual or will I\n" + "\xA8\xB4'have to work\n" + "it out'\xA7 or\n" + "something?\"\xD2\xD2\n#"); + + introtext[13] = M_GetText( "\"We'll see\xAA...\xA7\xBF let's give you a quick warm\n" "up, Sonic!\xA6\xC4 JETTYSYNS!\xA7\xBD Open fire!\"\n#"); - introtext[13] = M_GetText( + introtext[14] = M_GetText( "Eggman took this\n" "as his cue and\n" "blasted off,\n" @@ -457,7 +466,7 @@ void F_StartIntro(void) "\xA7\"Now\xB6 what do we\n" "do?\",\xA9 he asked.\n#"); - introtext[14] = M_GetText( + introtext[15] = M_GetText( "\xA7\"Easy!\xBF We go\n" "find Eggman\n" "and stop his\n" @@ -471,7 +480,7 @@ void F_StartIntro(void) "\xAA*ARE*\xA9 you\n" "doing?\"\n#"); - introtext[15] = M_GetText( + introtext[16] = M_GetText( "\xA8\"I'm just finding what mission obje\xAC\xB1...\xBF\n" "\xA6""a-\xB8""ha!\xBF Here it is!\xA8\xBF This will only give us\n" "the robot's primary objective.\xBF It says\xAC\xB1...\"\n" @@ -499,7 +508,7 @@ void F_StartIntro(void) CON_ToggleOff(); F_NewCutscene(introtext[0]); - intro_scenenum = 9; + intro_scenenum = 0; finalecount = animtimer = skullAnimCounter = stoptimer = 0; timetonext = introscenetime[intro_scenenum]; } @@ -570,18 +579,21 @@ static void F_IntroDrawScene(void) background = W_CachePatchName("INTRO5", PU_CACHE); break; case 12: - if (intro_curtime >= 7*TICRATE) - background = W_CachePatchName("CONFRONT", PU_CACHE); - else - background = W_CachePatchName("REVENGE", PU_CACHE); + background = W_CachePatchName("REVENGE", PU_CACHE); + cx = 208; + cy = 8; break; case 13: + background = W_CachePatchName("CONFRONT", PU_CACHE); + cy += 48; + break; + case 14: background = W_CachePatchName("TAILSSAD", PU_CACHE); bgxoffs = 144; cx = 8; cy = 8; break; - case 14: + case 15: if (intro_curtime >= 7*TICRATE) background = W_CachePatchName("SONICDO2", PU_CACHE); else @@ -589,7 +601,7 @@ static void F_IntroDrawScene(void) cx = 224; cy = 8; break; - case 15: + case 16: background = W_CachePatchName("INTRO7", PU_CACHE); break; default: @@ -731,15 +743,32 @@ static void F_IntroDrawScene(void) } else { - INT32 sonicx = (timetonext >> 2); - INT32 tailsx = 32 + 4*max(0, timetonext - (9*TICRATE >> 1)); - INT32 knucklesx = 96 + 4*max(0, timetonext - (5*TICRATE >> 1)); + tic_t sonicdelay = max(0, timetonext - 16*TICRATE); + tic_t tailsdelay = max(0, timetonext - (9*TICRATE >> 1)); + tic_t knucklesdelay = max(0, timetonext - (5*TICRATE >> 1)); + INT32 sonicx = (timetonext >> 2) + min(sonicdelay, TICRATE >> 1) * sonicdelay; + INT32 tailsx = 32 + min(tailsdelay, TICRATE >> 1) * tailsdelay; + INT32 knucklesx = 96 + min(knucklesdelay, TICRATE >> 1) * knucklesdelay; INT32 tailsy = 12 + P_ReturnThrustX(NULL, finalecount * ANGLE_22h, 2); INT32 knucklesy = 48 - (timetonext >> 3); - INT32 skyx = 2 * finalecount % 320; - INT32 grassx = 16 * finalecount % 320; - menuanimtimer = animtimer; // Reusing this variable for the intro to fix the scrolling sky, better than changing the function around. - //F_SkyScroll(80*4, 0, "INTROSKY"); + INT32 skyx, grassx; + + if (timetonext >= 0 && timetonext < 18) + { + deplete -= 16; + } + else + { + stoptimer = finalecount; + deplete = 96; + } + skyx = 2 * stoptimer % 320; + grassx = 16 * stoptimer % 320; + sonicx += deplete; + tailsx += sonicx; + knucklesx += sonicx; + sonicx += P_ReturnThrustX(NULL, finalecount * ANG10, 3); + V_DrawSmallScaledPatch(skyx, 0, 0, (patch = W_CachePatchName("INTROSKY", PU_CACHE))); V_DrawSmallScaledPatch(skyx - 320, 0, 0, patch); W_UnlockCachedPatch(patch); @@ -747,26 +776,6 @@ static void F_IntroDrawScene(void) V_DrawSmallScaledPatch(grassx - 320, 0, 0, patch); W_UnlockCachedPatch(patch); - if (timetonext == 6) - { - stoptimer = finalecount; - animtimer = finalecount % 16; - } - else if (timetonext >= 0 && timetonext < 6) - { - animtimer = stoptimer; - deplete -= 32; - } - else - { - animtimer = finalecount % 16; - deplete = 96; - } - sonicx += deplete; - tailsx += sonicx; - knucklesx += sonicx; - sonicx += P_ReturnThrustX(NULL, finalecount * ANG10, 3); - if (finalecount & 1) { // Sonic @@ -836,6 +845,7 @@ static void F_IntroDrawScene(void) W_UnlockCachedPatch(patch); } + // Black bars to hide the sky on widescreen V_DrawFill(-80, 0, 80, 256, 31); V_DrawFill(BASEVIDWIDTH, 0, 80, 256, 31); } @@ -887,21 +897,6 @@ static void F_IntroDrawScene(void) if (animtimer) animtimer--; - /*if (intro_scenenum == 7 && intro_curtime > 7*TICRATE) - { - patch_t *sgrass; - - if (intro_curtime >= 7*TICRATE + ((TICRATE/7)*2)) - sgrass = W_CachePatchName("SGRASS4", PU_CACHE); - else if (intro_curtime >= 7*TICRATE + (TICRATE/7)) - sgrass = W_CachePatchName("SGRASS3", PU_CACHE); - else - sgrass = W_CachePatchName("SGRASS2", PU_CACHE); - V_DrawScaledPatch(123, 4, 0, sgrass); - - W_UnlockCachedPatch(sgrass); - }*/ - V_DrawString(cx, cy, V_ALLOWLOWERCASE, cutscene_disptext); } @@ -936,7 +931,7 @@ void F_IntroDrawer(void) F_RunWipe(99,true); } } - else if (intro_scenenum == 15) + else if (intro_scenenum == 16) { if (rendermode != render_none) { @@ -1009,7 +1004,7 @@ void F_IntroDrawer(void) F_WipeEndScreen(); F_RunWipe(99,true); } - else if (intro_scenenum == 12 && intro_curtime == 7*TICRATE) + /*else if (intro_scenenum == 12 && intro_curtime == 7*TICRATE) { patch_t *confront = W_CachePatchName("CONFRONT", PU_CACHE); @@ -1021,8 +1016,8 @@ void F_IntroDrawer(void) F_WipeEndScreen(); F_RunWipe(99,true); - } - if (intro_scenenum == 14 && intro_curtime == 7*TICRATE) + }*/ + if (intro_scenenum == 15 && intro_curtime == 7*TICRATE) { patch_t *sdo = W_CachePatchName("SONICDO2", PU_CACHE); From 1b1b4e6c4e8c4de918025a3866c62b120b261120 Mon Sep 17 00:00:00 2001 From: MascaraSnake Date: Sun, 24 Nov 2019 10:22:00 +0100 Subject: [PATCH 056/141] Fixed crash when BASH's target disappears during chasing --- src/p_enemy.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/p_enemy.c b/src/p_enemy.c index 26d079cb4..967c4b96e 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -2476,12 +2476,8 @@ void A_VultureBlast(mobj_t *actor) void A_VultureFly(mobj_t *actor) { fixed_t speedmax = 18*FRACUNIT; - angle_t angledif = R_PointToAngle2(actor->x, actor->y, actor->target->x, actor->target->y) - actor->angle; - fixed_t dx = actor->target->x - actor->x; - fixed_t dy = actor->target->y - actor->y; - fixed_t dz = actor->target->z - actor->z; - fixed_t dxy = FixedHypot(dx, dy); - fixed_t dm; + angle_t angledif; + fixed_t dx, dy, dz, dxy, dm; mobj_t *dust; fixed_t momm; @@ -2490,6 +2486,18 @@ void A_VultureFly(mobj_t *actor) return; #endif + if (!actor->target || P_MobjWasRemoved(actor->target)) + { + P_SetMobjState(actor, actor->info->spawnstate); + return; + } + + angledif = R_PointToAngle2(actor->x, actor->y, actor->target->x, actor->target->y) - actor->angle; + dx = actor->target->x - actor->x; + dy = actor->target->y - actor->y; + dz = actor->target->z - actor->z; + dxy = FixedHypot(dx, dy); + if (leveltime % 4 == 0) S_StartSound(actor, actor->info->activesound); From 0234ed6b6a712fc74d48edff53b5ef48db0cadce Mon Sep 17 00:00:00 2001 From: lachwright Date: Sun, 24 Nov 2019 18:46:59 +0800 Subject: [PATCH 057/141] Make Metal's vertical float speed technically negative --- src/p_user.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/p_user.c b/src/p_user.c index 0838ff80e..0721c22b8 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -5550,7 +5550,7 @@ static void P_DoJumpStuff(player_t *player, ticcmd_t *cmd) else potentialmomz = ((player->speed < 10*player->mo->scale) ? (player->speed - 10*player->mo->scale)/5 - : 0); + : -1); if (P_MobjFlip(player->mo)*player->mo->momz < potentialmomz) player->mo->momz = P_MobjFlip(player->mo)*potentialmomz; player->pflags &= ~PF_SPINNING; From 7d15925069d2a0b40c18212e0be0ba9d6d37bf80 Mon Sep 17 00:00:00 2001 From: lachwright Date: Sun, 24 Nov 2019 19:30:20 +0800 Subject: [PATCH 058/141] Fix elemental stomp activating glide landing after emerging from goop; fix climbing boost-up not scaling properly with player scale --- src/p_user.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/p_user.c b/src/p_user.c index 0838ff80e..e08b30170 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -2296,7 +2296,7 @@ boolean P_PlayerHitFloor(player_t *player, boolean dorollstuff) else if (!player->skidtime) player->pflags &= ~PF_GLIDING; } - else if (player->charability == CA_GLIDEANDCLIMB && player->pflags & PF_THOKKED && !(player->pflags & PF_SHIELDABILITY) && player->mo->state-states == S_PLAY_FALL) + else if (player->charability == CA_GLIDEANDCLIMB && player->pflags & PF_THOKKED && !(player->pflags & (PF_JUMPED|PF_SHIELDABILITY)) && player->mo->state-states == S_PLAY_FALL) { if (player->mo->state-states != S_PLAY_GLIDE_LANDING) { @@ -3523,7 +3523,7 @@ static void P_DoClimbing(player_t *player) { P_SetObjectMomZ(player->mo, 2*FRACUNIT, true); if (cmd->forwardmove) - P_SetObjectMomZ(player->mo, 2*player->mo->momz/3, false); + player->mo->momz = 2*player->mo->momz/3; } if (thrust) P_Thrust(player->mo, player->mo->angle, FixedMul(4*FRACUNIT, player->mo->scale)); // Lil' boost up. From 3f40c7e4a77677df314a902f3297cc61a257919e Mon Sep 17 00:00:00 2001 From: toaster Date: Sun, 24 Nov 2019 13:24:37 +0000 Subject: [PATCH 059/141] * Resolve #345. * Prevent skincolours from being reset to the skin's prefcolour, but only for not-always-usable characters. --- src/d_main.c | 2 ++ src/d_netcmd.c | 19 +++++++++++-------- src/m_cond.c | 2 ++ 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/d_main.c b/src/d_main.c index 98e16a277..3b627482d 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -729,6 +729,8 @@ void D_StartTitle(void) for (i = 0; i < MAXPLAYERS; i++) CL_ClearPlayer(i); + players[consoleplayer].availabilities = players[1].availabilities = R_GetSkinAvailabilities(); // players[1] is supposed to be for 2p + splitscreen = false; SplitScreen_OnChange(); botingame = false; diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 2b6055873..75852ff2d 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -1228,16 +1228,16 @@ static void SendNameAndColor(void) } else if ((foundskin = R_SkinAvailable(cv_skin.string)) != -1 && R_SkinUsable(consoleplayer, foundskin)) { - boolean notsame; + //boolean notsame; cv_skin.value = foundskin; - notsame = (cv_skin.value != players[consoleplayer].skin); + //notsame = (cv_skin.value != players[consoleplayer].skin); SetPlayerSkin(consoleplayer, cv_skin.string); CV_StealthSet(&cv_skin, skins[cv_skin.value].name); - if (notsame) + /*if (notsame) { CV_StealthSetValue(&cv_playercolor, skins[cv_skin.value].prefcolor); @@ -1245,7 +1245,7 @@ static void SendNameAndColor(void) if (players[consoleplayer].mo) players[consoleplayer].mo->color = (UINT8)players[consoleplayer].skincolor; - } + }*/ } else { @@ -1356,15 +1356,16 @@ static void SendNameAndColor2(void) } else if ((foundskin = R_SkinAvailable(cv_skin2.string)) != -1 && R_SkinUsable(secondplaya, foundskin)) { - boolean notsame; + //boolean notsame; cv_skin2.value = foundskin; - notsame = (cv_skin2.value != players[secondplaya].skin); + //notsame = (cv_skin2.value != players[secondplaya].skin); SetPlayerSkin(secondplaya, cv_skin2.string); + CV_StealthSet(&cv_skin, skins[cv_skin2.value].name); - if (notsame) + /*if (notsame) { CV_StealthSetValue(&cv_playercolor2, skins[players[secondplaya].skin].prefcolor); @@ -1372,7 +1373,7 @@ static void SendNameAndColor2(void) if (players[secondplaya].mo) players[secondplaya].mo->color = players[secondplaya].skincolor; - } + }*/ } else { @@ -4289,6 +4290,8 @@ void Command_ExitGame_f(void) for (i = 0; i < MAXPLAYERS; i++) CL_ClearPlayer(i); + players[consoleplayer].availabilities = players[1].availabilities = R_GetSkinAvailabilities(); // players[1] is supposed to be for 2p + splitscreen = false; SplitScreen_OnChange(); botingame = false; diff --git a/src/m_cond.c b/src/m_cond.c index b7520aba7..8c4e3c0b7 100644 --- a/src/m_cond.c +++ b/src/m_cond.c @@ -284,6 +284,8 @@ void M_SilentUpdateUnlockablesAndEmblems(void) continue; unlockables[i].unlocked = M_Achieved(unlockables[i].conditionset - 1); } + + players[consoleplayer].availabilities = players[1].availabilities = R_GetSkinAvailabilities(); // players[1] is supposed to be for 2p } // Emblem unlocking shit From 53fee8e42898172c1142755a245cc59847cd2612 Mon Sep 17 00:00:00 2001 From: toaster Date: Sun, 24 Nov 2019 13:30:49 +0000 Subject: [PATCH 060/141] Make mouselook follow the first-person option when a spectator, even when other variables assume you're in third person (resolves #340). --- src/g_game.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/g_game.c b/src/g_game.c index faaed13c7..b43bcddf9 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -1019,11 +1019,11 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics) movebkey = PLAYER1INPUTDOWN(gc_backward); mouseaiming = (PLAYER1INPUTDOWN(gc_mouseaiming)) ^ - (cv_chasecam.value ? cv_chasefreelook.value : cv_alwaysfreelook.value); + ((cv_chasecam.value && !player->spectator) ? cv_chasefreelook.value : cv_alwaysfreelook.value); analogjoystickmove = cv_usejoystick.value && !Joystick.bGamepadStyle; gamepadjoystickmove = cv_usejoystick.value && Joystick.bGamepadStyle; - thisjoyaiming = (cv_chasecam.value) ? cv_chasefreelook.value : cv_alwaysfreelook.value; + thisjoyaiming = (cv_chasecam.value && !player->spectator) ? cv_chasefreelook.value : cv_alwaysfreelook.value; // Reset the vertical look if we're no longer joyaiming if (!thisjoyaiming && joyaiming) @@ -1348,11 +1348,11 @@ void G_BuildTiccmd2(ticcmd_t *cmd, INT32 realtics) movebkey = PLAYER2INPUTDOWN(gc_backward); mouseaiming = (PLAYER2INPUTDOWN(gc_mouseaiming)) ^ - (cv_chasecam2.value ? cv_chasefreelook2.value : cv_alwaysfreelook2.value); + ((cv_chasecam2.value && !player->spectator) ? cv_chasefreelook2.value : cv_alwaysfreelook2.value); analogjoystickmove = cv_usejoystick2.value && !Joystick2.bGamepadStyle; gamepadjoystickmove = cv_usejoystick2.value && Joystick2.bGamepadStyle; - thisjoyaiming = (cv_chasecam2.value) ? cv_chasefreelook2.value : cv_alwaysfreelook2.value; + thisjoyaiming = (cv_chasecam2.value && !player->spectator) ? cv_chasefreelook2.value : cv_alwaysfreelook2.value; // Reset the vertical look if we're no longer joyaiming if (!thisjoyaiming && joyaiming) From 1fe24405dbb594579d72ea21adcb68760d81366c Mon Sep 17 00:00:00 2001 From: toaster Date: Sun, 24 Nov 2019 13:35:26 +0000 Subject: [PATCH 061/141] Make cv_exitmove only have effect if gametype is GT_COOP, otherwise immediately exit (resolves #342). --- src/p_user.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/p_user.c b/src/p_user.c index 0838ff80e..ed2a1a446 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -11470,7 +11470,7 @@ void P_PlayerThink(player_t *player) if (player->pflags & PF_FINISHED) { - if (cv_exitmove.value && !G_EnoughPlayersFinished()) + if ((gametype == GT_COOP && cv_exitmove.value) && !G_EnoughPlayersFinished()) player->exiting = 0; else P_DoPlayerExit(player); From 4b9eb8fbe8832e94267908354c6746345fd79e52 Mon Sep 17 00:00:00 2001 From: toaster Date: Sun, 24 Nov 2019 13:51:53 +0000 Subject: [PATCH 062/141] Enable lowercase text for Statistics and Unlockable Checklist menus (resolves #339). --- src/dehacked.c | 134 ++++++++++++++++++++++++++----------------------- src/m_menu.c | 8 +-- 2 files changed, 74 insertions(+), 68 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index 29992fcd5..49ad5dc67 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -3184,7 +3184,6 @@ static void readextraemblemdata(MYFILE *f, INT32 num) // Now get the part after word2 = tmp += 2; - strupr(word2); value = atoi(word2); // used for numerical settings @@ -3196,22 +3195,26 @@ static void readextraemblemdata(MYFILE *f, INT32 num) sizeof (extraemblems[num-1].description), va("Extra emblem %d: objective", num)); else if (fastcmp(word, "CONDITIONSET")) extraemblems[num-1].conditionset = (UINT8)value; - else if (fastcmp(word, "SPRITE")) - { - if (word2[0] >= 'A' && word2[0] <= 'Z') - value = word2[0]; - else - value += 'A'-1; - - if (value < 'A' || value > 'Z') - deh_warning("Emblem %d: sprite must be from A - Z (1 - 26)", num); - else - extraemblems[num-1].sprite = (UINT8)value; - } - else if (fastcmp(word, "COLOR")) - extraemblems[num-1].color = get_number(word2); else - deh_warning("Extra emblem %d: unknown word '%s'", num, word); + { + strupr(word2); + if (fastcmp(word, "SPRITE")) + { + if (word2[0] >= 'A' && word2[0] <= 'Z') + value = word2[0]; + else + value += 'A'-1; + + if (value < 'A' || value > 'Z') + deh_warning("Emblem %d: sprite must be from A - Z (1 - 26)", num); + else + extraemblems[num-1].sprite = (UINT8)value; + } + else if (fastcmp(word, "COLOR")) + extraemblems[num-1].color = get_number(word2); + else + deh_warning("Extra emblem %d: unknown word '%s'", num, word); + } } } while (!myfeof(f)); @@ -3262,7 +3265,6 @@ static void readunlockable(MYFILE *f, INT32 num) // Now get the part after word2 = tmp += 2; - strupr(word2); i = atoi(word2); // used for numerical settings @@ -3272,54 +3274,58 @@ static void readunlockable(MYFILE *f, INT32 num) else if (fastcmp(word, "OBJECTIVE")) deh_strlcpy(unlockables[num].objective, word2, sizeof (unlockables[num].objective), va("Unlockable %d: objective", num)); - else if (fastcmp(word, "HEIGHT")) - unlockables[num].height = (UINT16)i; - else if (fastcmp(word, "CONDITIONSET")) - unlockables[num].conditionset = (UINT8)i; - else if (fastcmp(word, "NOCECHO")) - unlockables[num].nocecho = (UINT8)(i || word2[0] == 'T' || word2[0] == 'Y'); - else if (fastcmp(word, "NOCHECKLIST")) - unlockables[num].nochecklist = (UINT8)(i || word2[0] == 'T' || word2[0] == 'Y'); - else if (fastcmp(word, "TYPE")) - { - if (fastcmp(word2, "NONE")) - unlockables[num].type = SECRET_NONE; - else if (fastcmp(word2, "ITEMFINDER")) - unlockables[num].type = SECRET_ITEMFINDER; - else if (fastcmp(word2, "EMBLEMHINTS")) - unlockables[num].type = SECRET_EMBLEMHINTS; - else if (fastcmp(word2, "PANDORA")) - unlockables[num].type = SECRET_PANDORA; - else if (fastcmp(word2, "CREDITS")) - unlockables[num].type = SECRET_CREDITS; - else if (fastcmp(word2, "RECORDATTACK")) - unlockables[num].type = SECRET_RECORDATTACK; - else if (fastcmp(word2, "NIGHTSMODE")) - unlockables[num].type = SECRET_NIGHTSMODE; - else if (fastcmp(word2, "HEADER")) - unlockables[num].type = SECRET_HEADER; - else if (fastcmp(word2, "LEVELSELECT")) - unlockables[num].type = SECRET_LEVELSELECT; - else if (fastcmp(word2, "WARP")) - unlockables[num].type = SECRET_WARP; - else if (fastcmp(word2, "SOUNDTEST")) - unlockables[num].type = SECRET_SOUNDTEST; - else - unlockables[num].type = (INT16)i; - } - else if (fastcmp(word, "VAR")) - { - // Support using the actual map name, - // i.e., Level AB, Level FZ, etc. - - // Convert to map number - if (word2[0] >= 'A' && word2[0] <= 'Z') - i = M_MapNumber(word2[0], word2[1]); - - unlockables[num].variable = (INT16)i; - } else - deh_warning("Unlockable %d: unknown word '%s'", num+1, word); + { + strupr(word2); + if (fastcmp(word, "HEIGHT")) + unlockables[num].height = (UINT16)i; + else if (fastcmp(word, "CONDITIONSET")) + unlockables[num].conditionset = (UINT8)i; + else if (fastcmp(word, "NOCECHO")) + unlockables[num].nocecho = (UINT8)(i || word2[0] == 'T' || word2[0] == 'Y'); + else if (fastcmp(word, "NOCHECKLIST")) + unlockables[num].nochecklist = (UINT8)(i || word2[0] == 'T' || word2[0] == 'Y'); + else if (fastcmp(word, "TYPE")) + { + if (fastcmp(word2, "NONE")) + unlockables[num].type = SECRET_NONE; + else if (fastcmp(word2, "ITEMFINDER")) + unlockables[num].type = SECRET_ITEMFINDER; + else if (fastcmp(word2, "EMBLEMHINTS")) + unlockables[num].type = SECRET_EMBLEMHINTS; + else if (fastcmp(word2, "PANDORA")) + unlockables[num].type = SECRET_PANDORA; + else if (fastcmp(word2, "CREDITS")) + unlockables[num].type = SECRET_CREDITS; + else if (fastcmp(word2, "RECORDATTACK")) + unlockables[num].type = SECRET_RECORDATTACK; + else if (fastcmp(word2, "NIGHTSMODE")) + unlockables[num].type = SECRET_NIGHTSMODE; + else if (fastcmp(word2, "HEADER")) + unlockables[num].type = SECRET_HEADER; + else if (fastcmp(word2, "LEVELSELECT")) + unlockables[num].type = SECRET_LEVELSELECT; + else if (fastcmp(word2, "WARP")) + unlockables[num].type = SECRET_WARP; + else if (fastcmp(word2, "SOUNDTEST")) + unlockables[num].type = SECRET_SOUNDTEST; + else + unlockables[num].type = (INT16)i; + } + else if (fastcmp(word, "VAR")) + { + // Support using the actual map name, + // i.e., Level AB, Level FZ, etc. + + // Convert to map number + if (word2[0] >= 'A' && word2[0] <= 'Z') + i = M_MapNumber(word2[0], word2[1]); + + unlockables[num].variable = (INT16)i; + } + else + deh_warning("Unlockable %d: unknown word '%s'", num+1, word); + } } } while (!myfeof(f)); // finish when the line is empty diff --git a/src/m_menu.c b/src/m_menu.c index 7d62514e6..32efa3fed 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -6688,7 +6688,7 @@ static void M_DrawChecklist(void) || !unlockables[i].conditionset || unlockables[i].conditionset > MAXCONDITIONSETS) continue; - V_DrawString(currentMenu->x, y, ((unlockables[i].unlocked) ? V_GREENMAP : V_TRANSLUCENT), ((unlockables[i].unlocked || !unlockables[i].nochecklist) ? unlockables[i].name : M_CreateSecretMenuOption(unlockables[i].name))); + V_DrawString(currentMenu->x, y, ((unlockables[i].unlocked) ? V_GREENMAP : V_TRANSLUCENT)|V_ALLOWLOWERCASE, ((unlockables[i].unlocked || !unlockables[i].nochecklist) ? unlockables[i].name : M_CreateSecretMenuOption(unlockables[i].name))); for (j = i+1; j < MAXUNLOCKABLES; j++) { @@ -8855,9 +8855,9 @@ static void M_DrawStatsMaps(int location) M_DrawMapEmblems(mnum+1, 292, y); if (mapheaderinfo[mnum]->actnum != 0) - V_DrawString(20, y, V_YELLOWMAP, va("%s %d", mapheaderinfo[mnum]->lvlttl, mapheaderinfo[mnum]->actnum)); + V_DrawString(20, y, V_YELLOWMAP|V_ALLOWLOWERCASE, va("%s %d", mapheaderinfo[mnum]->lvlttl, mapheaderinfo[mnum]->actnum)); else - V_DrawString(20, y, V_YELLOWMAP, mapheaderinfo[mnum]->lvlttl); + V_DrawString(20, y, V_YELLOWMAP|V_ALLOWLOWERCASE, mapheaderinfo[mnum]->lvlttl); y += 8; @@ -8901,7 +8901,7 @@ static void M_DrawStatsMaps(int location) else V_DrawSmallScaledPatch(292, y, 0, W_CachePatchName("NEEDIT", PU_CACHE)); - V_DrawString(20, y, V_YELLOWMAP, va("%s", exemblem->description)); + V_DrawString(20, y, V_YELLOWMAP|V_ALLOWLOWERCASE, va("%s", exemblem->description)); } y += 8; From 86ff608cfd486f9893f346e67abf110af204fac2 Mon Sep 17 00:00:00 2001 From: lachwright Date: Sun, 24 Nov 2019 22:29:26 +0800 Subject: [PATCH 063/141] Have Minus rotate in mid-air --- src/dehacked.c | 12 ++++-------- src/info.c | 14 +++++--------- src/info.h | 12 ++++-------- src/p_mobj.c | 10 ++++++++++ 4 files changed, 23 insertions(+), 25 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index 29992fcd5..14bb6f405 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -4969,14 +4969,10 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_MINUS_BURST4", "S_MINUS_BURST5", "S_MINUS_POPUP", - "S_MINUS_UPWARD1", - "S_MINUS_UPWARD2", - "S_MINUS_UPWARD3", - "S_MINUS_UPWARD4", - "S_MINUS_DOWNWARD1", - "S_MINUS_DOWNWARD2", - "S_MINUS_DOWNWARD3", - "S_MINUS_DOWNWARD4", + "S_MINUS_AERIAL1", + "S_MINUS_AERIAL2", + "S_MINUS_AERIAL3", + "S_MINUS_AERIAL4", // Minus dirt "S_MINUSDIRT1", diff --git a/src/info.c b/src/info.c index e14abd575..2be4a8184 100644 --- a/src/info.c +++ b/src/info.c @@ -1074,15 +1074,11 @@ state_t states[NUMSTATES] = {SPR_MNUD, 2|FF_ANIMATE, 5, {NULL}, 1, 2, S_MINUS_BURST4}, // S_MINUS_BURST3 {SPR_MNUD, 3|FF_ANIMATE, 5, {NULL}, 1, 2, S_MINUS_BURST5}, // S_MINUS_BURST4 {SPR_MNUD, 4|FF_ANIMATE, 5, {NULL}, 1, 2, S_MINUSDIRT2}, // S_MINUS_BURST5 - {SPR_MNUS, 3, 1, {A_MinusPopup}, 0, 0, S_MINUS_UPWARD1}, // S_MINUS_POPUP - {SPR_MNUS, 0, 1, {A_MinusCheck}, 0, 0, S_MINUS_UPWARD2}, // S_MINUS_UPWARD1 - {SPR_MNUS, 1, 1, {A_MinusCheck}, 0, 0, S_MINUS_UPWARD3}, // S_MINUS_UPWARD2 - {SPR_MNUS, 2, 1, {A_MinusCheck}, 0, 0, S_MINUS_UPWARD4}, // S_MINUS_UPWARD3 - {SPR_MNUS, 3, 1, {A_MinusCheck}, 0, 0, S_MINUS_UPWARD1}, // S_MINUS_UPWARD4 - {SPR_MNUS, 4, 1, {A_MinusCheck}, 0, 0, S_MINUS_DOWNWARD2}, // S_MINUS_DOWNWARD1 - {SPR_MNUS, 5, 1, {A_MinusCheck}, 0, 0, S_MINUS_DOWNWARD3}, // S_MINUS_DOWNWARD2 - {SPR_MNUS, 6, 1, {A_MinusCheck}, 0, 0, S_MINUS_DOWNWARD4}, // S_MINUS_DOWNWARD3 - {SPR_MNUS, 7, 1, {A_MinusCheck}, 0, 0, S_MINUS_DOWNWARD1}, // S_MINUS_DOWNWARD4 + {SPR_MNUS, 3, 1, {A_MinusPopup}, 0, 0, S_MINUS_AERIAL1}, // S_MINUS_POPUP + {SPR_MNUS, 0, 1, {A_MinusCheck}, 0, 0, S_MINUS_AERIAL2}, // S_MINUS_AERIAL1 + {SPR_MNUS, 1, 1, {A_MinusCheck}, 0, 0, S_MINUS_AERIAL3}, // S_MINUS_AERIAL2 + {SPR_MNUS, 2, 1, {A_MinusCheck}, 0, 0, S_MINUS_AERIAL4}, // S_MINUS_AERIAL3 + {SPR_MNUS, 3, 1, {A_MinusCheck}, 0, 0, S_MINUS_AERIAL1}, // S_MINUS_AERIAL4 {SPR_MNUD, FF_ANIMATE, 6, {NULL}, 1, 5, S_MINUSDIRT2}, // S_MINUSDIRT1 {SPR_MNUD, 5, 8, {NULL}, 3, 5, S_MINUSDIRT3}, // S_MINUSDIRT2 diff --git a/src/info.h b/src/info.h index ff346412e..f3f50fab7 100644 --- a/src/info.h +++ b/src/info.h @@ -1270,14 +1270,10 @@ typedef enum state S_MINUS_BURST4, S_MINUS_BURST5, S_MINUS_POPUP, - S_MINUS_UPWARD1, - S_MINUS_UPWARD2, - S_MINUS_UPWARD3, - S_MINUS_UPWARD4, - S_MINUS_DOWNWARD1, - S_MINUS_DOWNWARD2, - S_MINUS_DOWNWARD3, - S_MINUS_DOWNWARD4, + S_MINUS_AERIAL1, + S_MINUS_AERIAL2, + S_MINUS_AERIAL3, + S_MINUS_AERIAL4, // Minus dirt S_MINUSDIRT1, diff --git a/src/p_mobj.c b/src/p_mobj.c index f2dd1a734..e1c731696 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -9709,6 +9709,16 @@ void P_MobjThinker(mobj_t *mobj) #undef DRAGONTURNSPEED } break; + case MT_MINUS: +#ifdef ROTSPRITE + { + if (P_IsObjectOnGround(mobj)) + mobj->rollangle = 0; + else + mobj->rollangle = R_PointToAngle2(0, 0, mobj->momz, (mobj->scale << 1) - min(abs(mobj->momz), mobj->scale << 1)); + } +#endif + break; case MT_SPINFIRE: if (mobj->flags & MF_NOGRAVITY) { From e0c6fe7326d9ac578c002b63e65cabe55507853e Mon Sep 17 00:00:00 2001 From: toaster Date: Sun, 24 Nov 2019 15:19:15 +0000 Subject: [PATCH 064/141] Woops --- src/d_netcmd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 75852ff2d..f9ec6c351 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -1363,7 +1363,7 @@ static void SendNameAndColor2(void) //notsame = (cv_skin2.value != players[secondplaya].skin); SetPlayerSkin(secondplaya, cv_skin2.string); - CV_StealthSet(&cv_skin, skins[cv_skin2.value].name); + CV_StealthSet(&cv_skin2, skins[cv_skin2.value].name); /*if (notsame) { From 4a23d46bce208de3757e028dd837261f98927ef5 Mon Sep 17 00:00:00 2001 From: lachwright Date: Sun, 24 Nov 2019 23:42:27 +0800 Subject: [PATCH 065/141] Have Minus spawn debris upon landing, as suggested --- src/info.c | 8 ++++---- src/p_enemy.c | 21 +++++++++++++++++---- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/info.c b/src/info.c index 2be4a8184..a09eb5bcc 100644 --- a/src/info.c +++ b/src/info.c @@ -1075,10 +1075,10 @@ state_t states[NUMSTATES] = {SPR_MNUD, 3|FF_ANIMATE, 5, {NULL}, 1, 2, S_MINUS_BURST5}, // S_MINUS_BURST4 {SPR_MNUD, 4|FF_ANIMATE, 5, {NULL}, 1, 2, S_MINUSDIRT2}, // S_MINUS_BURST5 {SPR_MNUS, 3, 1, {A_MinusPopup}, 0, 0, S_MINUS_AERIAL1}, // S_MINUS_POPUP - {SPR_MNUS, 0, 1, {A_MinusCheck}, 0, 0, S_MINUS_AERIAL2}, // S_MINUS_AERIAL1 - {SPR_MNUS, 1, 1, {A_MinusCheck}, 0, 0, S_MINUS_AERIAL3}, // S_MINUS_AERIAL2 - {SPR_MNUS, 2, 1, {A_MinusCheck}, 0, 0, S_MINUS_AERIAL4}, // S_MINUS_AERIAL3 - {SPR_MNUS, 3, 1, {A_MinusCheck}, 0, 0, S_MINUS_AERIAL1}, // S_MINUS_AERIAL4 + {SPR_MNUS, 0, 1, {A_MinusCheck}, 0, 1, S_MINUS_AERIAL2}, // S_MINUS_AERIAL1 + {SPR_MNUS, 1, 1, {A_MinusCheck}, 0, 1, S_MINUS_AERIAL3}, // S_MINUS_AERIAL2 + {SPR_MNUS, 2, 1, {A_MinusCheck}, 0, 1, S_MINUS_AERIAL4}, // S_MINUS_AERIAL3 + {SPR_MNUS, 3, 1, {A_MinusCheck}, 0, 1, S_MINUS_AERIAL1}, // S_MINUS_AERIAL4 {SPR_MNUD, FF_ANIMATE, 6, {NULL}, 1, 5, S_MINUSDIRT2}, // S_MINUSDIRT1 {SPR_MNUD, 5, 8, {NULL}, 3, 5, S_MINUSDIRT3}, // S_MINUSDIRT2 diff --git a/src/p_enemy.c b/src/p_enemy.c index 26d079cb4..75d5e67e7 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -5664,10 +5664,10 @@ void A_MinusPopup(mobj_t *actor) S_StartSound(actor, sfx_s3k82); for (i = 1; i <= num; i++) { - mobj_t *rock = P_SpawnMobj(actor->x, actor->y, actor->z + actor->height/4, MT_ROCKCRUMBLE1); + mobj_t *rock = P_SpawnMobjFromMobj(actor, 0, 0, actor->height/4, MT_ROCKCRUMBLE1); P_Thrust(rock, ani*i, FRACUNIT); - rock->momz = 3*FRACUNIT; - P_SetScale(rock, FRACUNIT/3); + P_SetObjectMomZ(rock, 3*FRACUNIT, false); + P_SetScale(rock, rock->scale/3); } P_RadiusAttack(actor, actor, 2*actor->radius, 0); if (actor->tracer) @@ -5681,11 +5681,12 @@ void A_MinusPopup(mobj_t *actor) // Description: If the minus hits the floor, dig back into the ground. // // var1 = State to switch to (if 0, use seestate). -// var2 = unused +// var2 = If not 0, spawn debris when hitting the floor. // void A_MinusCheck(mobj_t *actor) { INT32 locvar1 = var1; + INT32 locvar2 = var2; #ifdef HAVE_BLUA if (LUA_CallAction("A_MinusCheck", actor)) @@ -5696,6 +5697,18 @@ void A_MinusCheck(mobj_t *actor) { P_SetMobjState(actor, locvar1 ? (statenum_t)locvar1 : actor->info->seestate); actor->flags = actor->info->flags; + if (locvar2) + { + INT32 i, num = 6; + angle_t ani = FixedAngle(FRACUNIT*360/num); + for (i = 1; i <= num; i++) + { + mobj_t *rock = P_SpawnMobjFromMobj(actor, 0, 0, actor->height/4, MT_ROCKCRUMBLE1); + P_Thrust(rock, ani*i, FRACUNIT); + P_SetObjectMomZ(rock, 3*FRACUNIT, false); + P_SetScale(rock, rock->scale/3); + } + } } } From bfdb0e300c0f7f6500784e5c7260b2f903d8a67d Mon Sep 17 00:00:00 2001 From: lachwright Date: Sun, 24 Nov 2019 23:46:37 +0800 Subject: [PATCH 066/141] Shhhhh, Fang --- src/sounds.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sounds.c b/src/sounds.c index ba2402eb9..c9aff6edc 100644 --- a/src/sounds.c +++ b/src/sounds.c @@ -92,7 +92,7 @@ sfxinfo_t S_sfx[NUMSFX] = {"pstop", false, 100, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Crusher stomp"}, {"steam1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Steam jet"}, // Tails 06-19-2001 {"steam2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Steam jet"}, // Tails 06-19-2001 - {"wbreak", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Wood breaking"}, + {"wbreak", true, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Wood breaking"}, {"ambmac", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Machinery"}, {"spsmsh", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Heavy impact"}, From 155b29694c58cb09979a30050646b165bbc82884 Mon Sep 17 00:00:00 2001 From: toaster Date: Sun, 24 Nov 2019 16:42:13 +0000 Subject: [PATCH 067/141] Courteousy of fickle, an adjustment to papersprite rendering that prevents the object's x1 and x2 being slightly off where they should be. Not perfect, but absolutely better than it was! Also, tweak the Minecart segment spawning position, since this was originally placed based on the awkward rendering. --- src/p_mobj.c | 2 +- src/r_things.c | 62 +++++++++++++++++++++++++++++++------------------- 2 files changed, 39 insertions(+), 25 deletions(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index f2dd1a734..f1984783b 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -7082,7 +7082,7 @@ static void P_SpawnMinecartSegments(mobj_t *mobj, boolean mode) seg = P_SpawnMobj(x, y, z, MT_MINECARTSEG); P_SetMobjState(seg, (statenum_t)(S_MINECARTSEG_FRONT + i)); if (i >= 2) - seg->extravalue1 = (i == 2) ? -18 : 18; + seg->extravalue1 = (i == 2) ? -20 : 20; else { seg->extravalue2 = (i == 0) ? 24 : -24; diff --git a/src/r_things.c b/src/r_things.c index c89d87bf4..9763648cd 100644 --- a/src/r_things.c +++ b/src/r_things.c @@ -1137,8 +1137,6 @@ static void R_ProjectSprite(mobj_t *thing) UINT32 rollangle = AngleFixed(arollangle)>>FRACBITS; #endif - fixed_t ang_scale = FRACUNIT; - // transform the origin point tr_x = thing->x - viewx; tr_y = thing->y - viewy; @@ -1223,8 +1221,6 @@ static void R_ProjectSprite(mobj_t *thing) if (sprframe->rotate != SRF_SINGLE || papersprite) { ang = R_PointToAngle (thing->x, thing->y) - (thing->player ? thing->player->drawangle : thing->angle); - if (papersprite) - ang_scale = abs(FINESINE(ang>>ANGLETOFINESHIFT)); } if (sprframe->rotate == SRF_SINGLE) @@ -1286,24 +1282,11 @@ static void R_ProjectSprite(mobj_t *thing) else offset = -spr_offset; offset = FixedMul(offset, this_scale); - tx += FixedMul(offset, ang_scale); - x1 = (centerxfrac + FixedMul (tx,xscale)) >>FRACBITS; - - // off the right side? - if (x1 > viewwidth) - return; - offset2 = FixedMul(spr_width, this_scale); - tx += FixedMul(offset2, ang_scale); - x2 = ((centerxfrac + FixedMul (tx,xscale)) >> FRACBITS) - (papersprite ? 2 : 1); - - // off the left side - if (x2 < 0) - return; if (papersprite) { - fixed_t yscale2, cosmul, sinmul, tz2; + fixed_t xscale2, yscale2, cosmul, sinmul, tz2; INT32 range; if (ang >= ANGLE_180) @@ -1323,6 +1306,16 @@ static void R_ProjectSprite(mobj_t *thing) yscale = FixedDiv(projectiony, tz); if (yscale < 64) return; // Fix some funky visuals + gxt = -FixedMul(tr_x, viewsin); + gyt = FixedMul(tr_y, viewcos); + tx = -(gyt + gxt); + xscale = FixedDiv(projection, tz); + x1 = (centerxfrac + FixedMul(tx,xscale))>>FRACBITS; + + // off the right side? + if (x1 > viewwidth) + return; + tr_x += FixedMul(offset2, cosmul); tr_y += FixedMul(offset2, sinmul); gxt = FixedMul(tr_x, viewcos); @@ -1331,15 +1324,25 @@ static void R_ProjectSprite(mobj_t *thing) yscale2 = FixedDiv(projectiony, tz2); if (yscale2 < 64) return; // ditto + gxt = -FixedMul(tr_x, viewsin); + gyt = FixedMul(tr_y, viewcos); + tx = -(gyt + gxt); + xscale2 = FixedDiv(projection, tz2); + x2 = (centerxfrac + FixedMul(tx,xscale2))>>FRACBITS; x2--; + + // off the left side + if (x2 < 0) + return; + if (max(tz, tz2) < FixedMul(MINZ, this_scale)) // non-papersprite clipping is handled earlier return; - if (x2 > x1) - range = (x2 - x1); - else + if ((range = x2 - x1) <= 0) range = 1; - scalestep = (yscale2 - yscale)/range ?: 1; + scalestep = (yscale2 - yscale)/range; + scalestep = scalestep ? scalestep : 1; + xscale = FixedDiv(range<>FRACBITS; - xscale = FixedMul(xscale, ang_scale); + // off the right side? + if (x1 > viewwidth) + return; + + tx += offset2; + x2 = ((centerxfrac + FixedMul(tx,xscale))>>FRACBITS); x2--; + + // off the left side + if (x2 < 0) + return; + } if ((thing->flags2 & MF2_LINKDRAW) && thing->tracer) // toast 16/09/16 (SYMMETRY) { From 6cdcb24360adf3df5befd4aeb2b2a6127b587c4f Mon Sep 17 00:00:00 2001 From: Jaime Passos Date: Sun, 24 Nov 2019 17:37:11 -0300 Subject: [PATCH 068/141] Fix FreeMipmapColormap crash --- src/hardware/hw_cache.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/hardware/hw_cache.c b/src/hardware/hw_cache.c index 6eaafca6d..2d4704b8b 100644 --- a/src/hardware/hw_cache.c +++ b/src/hardware/hw_cache.c @@ -771,18 +771,25 @@ void HWR_InitTextureCache(void) gr_textures2 = NULL; } - // Callback function for HWR_FreeTextureCache. static void FreeMipmapColormap(INT32 patchnum, void *patch) { - GLPatch_t* const grpatch = patch; + GLPatch_t* const pat = patch; (void)patchnum; //unused - while (grpatch->mipmap->nextcolormap) + while (pat->mipmap && pat->mipmap->nextcolormap) // The mipmap must be valid, obviously { - GLMipmap_t *grmip = grpatch->mipmap->nextcolormap; - grpatch->mipmap->nextcolormap = grmip->nextcolormap; - if (grmip->grInfo.data) Z_Free(grmip->grInfo.data); - free(grmip); + // Confusing at first, but pat->mipmap->nextcolormap + // at the beginning of the loop is the first colormap + // from the linked list of colormaps + GLMipmap_t *next = pat->mipmap->nextcolormap; + // Set the first colormap + // to the one that comes after it + pat->mipmap->nextcolormap = next->nextcolormap; + // Free image data from memory + if (next->grInfo.data) + Z_Free(next->grInfo.data); + // Free the old colormap from memory + free(next); } } @@ -799,7 +806,7 @@ void HWR_FreeTextureCache(void) // Alam: free the Z_Blocks before freeing it's users - // free all skin after each level: must be done after pfnClearMipMapCache! + // free all patch colormaps after each level: must be done after ClearMipMapCache! for (i = 0; i < numwadfiles; i++) M_AATreeIterate(wadfiles[i]->hwrcache, FreeMipmapColormap); From 995451efaae885e0ab20cbcb6ff39d958e26c81d Mon Sep 17 00:00:00 2001 From: FuriousFox Date: Sun, 24 Nov 2019 15:43:49 -0500 Subject: [PATCH 069/141] Updated the list of which skies are associated with which maps, rearranged the list of character to match the character select in-game, and added myself to the file's credits. (Re-did all of this because I think I messed up the branches and stuff last time. --- extras/conf/SRB2-22.cfg | 50 +++++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/extras/conf/SRB2-22.cfg b/extras/conf/SRB2-22.cfg index c75ee31b3..74117f91c 100644 --- a/extras/conf/SRB2-22.cfg +++ b/extras/conf/SRB2-22.cfg @@ -3,6 +3,7 @@ For Sonic Robo Blast 2 Version 2.2 Contributors (alphabetical): * Foxboy + * FuriousFox * JJames19119 * Kalaron * Kristos @@ -44,27 +45,32 @@ formatinterface = "SRB2MapSetIO"; //Sky textures for vanilla maps defaultskytextures { - SKY1 = "MAP01,MAP02,MAP03,MAP50,MAPA1,MAPA2,MAPA5,MAPA6,MAPA9,MAPAA,MAPAB,MAPAC,MAPAD,MAPAE,MAPAG,MAPAJ,MAPAK,MAPF0,MAPF1,MAPFA,MAPM0,MAPM8,MAPMA,MAPMB,MAPMC"; - SKY4 = "MAP04,MAP06,MAP51,MAPF8,MAPM1"; - SKY6 = "MAP05"; - SKY7 = "MAP07,MAP08,MAP09,MAP52,MAPM2,MAPM5"; - SKY10 = "MAP12,MAP53,MAPM3"; - SKY11 = "MAP10,MAP11,MAP16,MAP55,MAPF2,MAPF5,MAPF6,MAPF9,MAPM7"; - SKY13 = "MAP13,MAP54,MAPAS"; - SKY21 = "MAPAF,MAPF7,MAPM4"; - SKY22 = "MAP22,MAP23,MAP24,MAP25,MAP56,MAPAN,MAPAO,MAPF4,MAPM6"; - SKY29 = "MAP58,MAPAV"; + SKY1 = "MAP01,MAP02,MAP03,MAP33,MAP50,MAP60,MAPF0,MAPM0"; + SKY2 = "MAPM7,MAPMB" + SKY4 = "MAP04,MAP06,MAP61,MAPF6,MAPM1"; + SKY6 = "MAP05,MAP51,MAPMA"; + SKY7 = "MAPM2,MAPM5"; + SKY8 = "MAP07,MAP08,MAP09,MAP52,MAP62,MAPF1"; + SKY10 = "MAP10,MAP12,MAP53,MAP63,MAPM3"; + SKY11 = "MAP11,MAPF7"; + SKY13 = "MAP13,MAP64"; + SKY14 = "MAP14"; + SKY15 = "MAP15,MAP54"; + SKY17 = "MAP70"; + SKY20 = "MAP32,MAP55,MAP65,MAPF2,MAPF5"; + SKY21 = "MAPM4"; + SKY22 = "MAP22,MAP23,MAP25,MAP26,MAP27,MAP56,MAP66,MAPF4,MAPM6"; SKY30 = "MAP30"; - SKY35 = "MAP41"; - SKY40 = "MAP40"; - SKY55 = "MAPF3,MAPM9"; - SKY66 = "MAPAT"; - SKY99 = "MAP57"; - SKY103 = "MAPA3,MAPA4,MAPAU"; - SKY107 = "MAPA7,MAPA8"; - SKY117 = "MAPAH,MAPAI"; - SKY127 = "MAPAR"; - SKY132 = "MAPAW"; + SKY31 = "MAP31"; + SKY35 = "MAP42"; + SKY40 = "MAP41,MAP71,MAPM9"; + SKY55 = "MAPF3,MAPM8"; + SKY68 = "MAPF8"; + SKY99 = "MAP57,MAPZ0"; + SKY159 = "MAP16"; + SKY172 = "MAP40"; + SKY300 = "MAP72"; + SKY301 = "MAP73"; } // Default lump name for new map @@ -90,9 +96,9 @@ skins Sonic; Tails; Knuckles; - Metalsonic; - Fang; Amy; + Fang; + Metalsonic; } // Gametypes From dd01248c9c0d9f6791e7ad3350457e55ad2494a0 Mon Sep 17 00:00:00 2001 From: FuriousFox Date: Sun, 24 Nov 2019 16:09:18 -0500 Subject: [PATCH 070/141] Missed a semicolon --- extras/conf/SRB2-22.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extras/conf/SRB2-22.cfg b/extras/conf/SRB2-22.cfg index 74117f91c..7a8f31d5a 100644 --- a/extras/conf/SRB2-22.cfg +++ b/extras/conf/SRB2-22.cfg @@ -46,7 +46,7 @@ formatinterface = "SRB2MapSetIO"; defaultskytextures { SKY1 = "MAP01,MAP02,MAP03,MAP33,MAP50,MAP60,MAPF0,MAPM0"; - SKY2 = "MAPM7,MAPMB" + SKY2 = "MAPM7,MAPMB"; SKY4 = "MAP04,MAP06,MAP61,MAPF6,MAPM1"; SKY6 = "MAP05,MAP51,MAPMA"; SKY7 = "MAPM2,MAPM5"; From 1d68b6b2ba60e2c0e0fcb43113e765356084aa76 Mon Sep 17 00:00:00 2001 From: Steel Titanium Date: Sun, 24 Nov 2019 16:37:13 -0500 Subject: [PATCH 071/141] Fix time emblem overlapping best time on NiGHTS Mode menu (Resolves #353) --- src/m_menu.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/m_menu.c b/src/m_menu.c index 7d62514e6..bc457f588 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -9388,6 +9388,7 @@ void M_DrawNightsAttackMenu(void) { emblem_t *em; INT32 yHeight; + INT32 xpos; patch_t *PictureOfLevel; lumpnum_t lumpnum; char beststr[40]; @@ -9447,17 +9448,23 @@ void M_DrawNightsAttackMenu(void) { switch (em->type) { - case ET_NGRADE: yHeight = 48; break; - case ET_NTIME: yHeight = 68; break; + case ET_NGRADE: + xpos = 104+38; + yHeight = 48; + break; + case ET_NTIME: + xpos = 104+76; + yHeight = 68; + break; default: goto skipThisOne; } if (em->collected) - V_DrawSmallMappedPatch(104+38, yHeight+lsheadingheight/2, 0, W_CachePatchName(M_GetEmblemPatch(em, false), PU_CACHE), + V_DrawSmallMappedPatch(xpos, yHeight+lsheadingheight/2, 0, W_CachePatchName(M_GetEmblemPatch(em, false), PU_CACHE), R_GetTranslationColormap(TC_DEFAULT, M_GetEmblemColor(em), GTC_CACHE)); else - V_DrawSmallScaledPatch(104+38, yHeight+lsheadingheight/2, 0, W_CachePatchName("NEEDIT", PU_CACHE)); + V_DrawSmallScaledPatch(xpos, yHeight+lsheadingheight/2, 0, W_CachePatchName("NEEDIT", PU_CACHE)); skipThisOne: em = M_GetLevelEmblems(-1); From 2ad057d9b9b72c06589eac31e2387c23d0fc708e Mon Sep 17 00:00:00 2001 From: MascaraSnake Date: Sun, 24 Nov 2019 23:01:17 +0100 Subject: [PATCH 072/141] Give RVZ lavafalls fire damage --- src/info.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/info.c b/src/info.c index e14abd575..2937d2ba2 100644 --- a/src/info.c +++ b/src/info.c @@ -13373,7 +13373,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 100, // mass 0, // damage sfx_None, // activesound - MF_SPECIAL|MF_PAIN|MF_NOGRAVITY, // flags + MF_SPECIAL|MF_PAIN|MF_NOGRAVITY|MF_FIRE, // flags S_NULL // raisestate }, From d8ce67a6c89a50efb27be2278953c66fb67877ec Mon Sep 17 00:00:00 2001 From: toaster Date: Sun, 24 Nov 2019 22:38:26 +0000 Subject: [PATCH 073/141] A bunch of spike tweaks. * Make it possible to break them in reverse gravity (resolves #348) by making the spikes break in a circle around the spike touched, rather than in a circle around the player. * Fix the spike chunks spawned not being flipped in reverse gravity by using P_SpawnMobjFromMobj. * Make their breaking sound singular (prevents eardrum destruction). --- src/p_inter.c | 21 ++++----------------- src/p_map.c | 16 ++++++++-------- src/sounds.c | 2 +- 3 files changed, 13 insertions(+), 26 deletions(-) diff --git a/src/p_inter.c b/src/p_inter.c index a51a4e8e6..d1ea02c80 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -2814,13 +2814,10 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget if (flip) momz *= -1; #define makechunk(angtweak, xmov, ymov) \ - chunk = P_SpawnMobj(target->x, target->y, target->z, MT_SPIKE);\ - chunk->eflags |= flip;\ + chunk = P_SpawnMobjFromMobj(target, 0, 0, 0, MT_SPIKE);\ P_SetMobjState(chunk, target->info->xdeathstate);\ chunk->health = 0;\ chunk->angle = angtweak;\ - chunk->destscale = scale;\ - P_SetScale(chunk, scale);\ P_UnsetThingPosition(chunk);\ chunk->flags = MF_NOCLIP;\ chunk->x += xmov;\ @@ -2839,14 +2836,10 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget if (flip) momz *= -1; - chunk = P_SpawnMobj(target->x, target->y, target->z, MT_SPIKE); - chunk->eflags |= flip; - + chunk = P_SpawnMobjFromMobj(target, 0, 0, 0, MT_SPIKE); P_SetMobjState(chunk, target->info->deathstate); chunk->health = 0; chunk->angle = ang + ANGLE_180; - chunk->destscale = scale; - P_SetScale(chunk, scale); P_UnsetThingPosition(chunk); chunk->flags = MF_NOCLIP; chunk->x -= xoffs; @@ -2889,13 +2882,10 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget sprflip = P_RandomChance(FRACUNIT/2); #define makechunk(angtweak, xmov, ymov) \ - chunk = P_SpawnMobj(target->x, target->y, target->z, MT_WALLSPIKE);\ - chunk->eflags |= flip;\ + chunk = P_SpawnMobjFromMobj(target, 0, 0, 0, MT_WALLSPIKE);\ P_SetMobjState(chunk, target->info->xdeathstate);\ chunk->health = 0;\ chunk->angle = target->angle;\ - chunk->destscale = scale;\ - P_SetScale(chunk, scale);\ P_UnsetThingPosition(chunk);\ chunk->flags = MF_NOCLIP;\ chunk->x += xmov - forwardxoffs;\ @@ -2917,14 +2907,11 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget sprflip = P_RandomChance(FRACUNIT/2); - chunk = P_SpawnMobj(target->x, target->y, target->z, MT_WALLSPIKE); - chunk->eflags |= flip; + chunk = P_SpawnMobjFromMobj(target, 0, 0, 0, MT_WALLSPIKE); P_SetMobjState(chunk, target->info->deathstate); chunk->health = 0; chunk->angle = target->angle; - chunk->destscale = scale; - P_SetScale(chunk, scale); P_UnsetThingPosition(chunk); chunk->flags = MF_NOCLIP; chunk->x += forwardxoffs - xoffs; diff --git a/src/p_map.c b/src/p_map.c index 753ce9eb5..c7120535c 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -784,12 +784,12 @@ static boolean PIT_CheckThing(mobj_t *thing) if (thing->type == MT_SPIKE || thing->type == MT_WALLSPIKE) { - mobjtype_t type = thing->type; + mobj_t *iter; if (thing->flags & MF_SOLID) S_StartSound(tmthing, thing->info->deathsound); - for (thing = thing->subsector->sector->thinglist; thing; thing = thing->snext) - if (thing->type == type && thing->health > 0 && thing->flags & MF_SOLID && P_AproxDistance(P_AproxDistance(thing->x - tmthing->x, thing->y - tmthing->y), thing->z - tmthing->z) < 56*thing->scale)//FixedMul(56*FRACUNIT, thing->scale)) - P_KillMobj(thing, tmthing, tmthing, 0); + for (iter = thing->subsector->sector->thinglist; iter; iter = iter->snext) + if (iter->type == thing->type && iter->health > 0 && iter->flags & MF_SOLID && (iter == thing || P_AproxDistance(P_AproxDistance(thing->x - iter->x, thing->y - iter->y), thing->z - iter->z) < 56*thing->scale))//FixedMul(56*FRACUNIT, thing->scale)) + P_KillMobj(iter, tmthing, tmthing, 0); } else { @@ -823,12 +823,12 @@ static boolean PIT_CheckThing(mobj_t *thing) if (thing->type == MT_SPIKE || thing->type == MT_WALLSPIKE) { - mobjtype_t type = thing->type; + mobj_t *iter; if (thing->flags & MF_SOLID) S_StartSound(tmthing, thing->info->deathsound); - for (thing = thing->subsector->sector->thinglist; thing; thing = thing->snext) - if (thing->type == type && thing->health > 0 && thing->flags & MF_SOLID && P_AproxDistance(P_AproxDistance(thing->x - tmthing->x, thing->y - tmthing->y), thing->z - tmthing->z) < 56*thing->scale)//FixedMul(56*FRACUNIT, thing->scale)) - P_KillMobj(thing, tmthing, tmthing, 0); + for (iter = thing->subsector->sector->thinglist; iter; iter = iter->snext) + if (iter->type == thing->type && iter->health > 0 && iter->flags & MF_SOLID && (iter == thing || P_AproxDistance(P_AproxDistance(thing->x - iter->x, thing->y - iter->y), thing->z - iter->z) < 56*thing->scale))//FixedMul(56*FRACUNIT, thing->scale)) + P_KillMobj(iter, tmthing, tmthing, 0); } else { diff --git a/src/sounds.c b/src/sounds.c index ba2402eb9..a249ccf4f 100644 --- a/src/sounds.c +++ b/src/sounds.c @@ -208,7 +208,7 @@ sfxinfo_t S_sfx[NUMSFX] = {"shrpsp", true, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Spincushion"}, {"shrpgo", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Launch"}, {"mswarp", false, 60, 16, -1, NULL, 0, -1, -1, LUMPERROR, "Spinning out"}, - {"mspogo", false, 60, 8, -1, NULL, 0, -1, -1, LUMPERROR, "Breaking through"}, + {"mspogo", true, 60, 8, -1, NULL, 0, -1, -1, LUMPERROR, "Breaking through"}, {"boingf", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Bouncing"}, {"corkp", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Cork fired"}, {"corkh", false, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Cork hit"}, From 7977a344c7668b644a85d947c9ff9d54b8a1f761 Mon Sep 17 00:00:00 2001 From: Louis-Antoine Date: Sun, 24 Nov 2019 23:40:40 +0100 Subject: [PATCH 074/141] Account for exiting but non-finished players in G_EnoughPlayersFinished --- src/g_game.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/g_game.c b/src/g_game.c index faaed13c7..d0ea9728b 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -2997,7 +2997,7 @@ boolean G_EnoughPlayersFinished(void) continue; total++; - if (players[i].pflags & PF_FINISHED) + if ((players[i].pflags & PF_FINISHED) || players[i].exiting) exiting++; } From 875fe6575c49fc67adeb56465f863c949af56d3e Mon Sep 17 00:00:00 2001 From: toaster Date: Sun, 24 Nov 2019 22:55:37 +0000 Subject: [PATCH 075/141] Go from spindash into ordinary roll if player's speed is suddenly above the speed you're allowed to roll at. --- src/p_user.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/p_user.c b/src/p_user.c index 0838ff80e..656f2f935 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -4613,6 +4613,13 @@ static void P_DoSpinAbility(player_t *player, ticcmd_t *cmd) // Revving else if ((cmd->buttons & BT_USE) && (player->pflags & PF_STARTDASH)) { + if (player->speed > 5*player->mo->scale) + { + player->pflags &= ~PF_STARTDASH; + P_SetPlayerMobjState(player->mo, S_PLAY_ROLL); + S_StartSound(player->mo, sfx_spin); + break; + } if (player->dashspeed < player->maxdash) { #define chargecalculation (6*(player->dashspeed - player->mindash))/(player->maxdash - player->mindash) @@ -4628,7 +4635,6 @@ static void P_DoSpinAbility(player_t *player, ticcmd_t *cmd) G_GhostAddRev(); } } - // If not moving up or down, and travelling faster than a speed of five while not holding // down the spin button and not spinning. // AKA Just go into a spin on the ground, you idiot. ;) @@ -4780,10 +4786,10 @@ static void P_DoSpinAbility(player_t *player, ticcmd_t *cmd) // Rolling normally if (onground && player->pflags & PF_SPINNING && !(player->pflags & PF_STARTDASH) - && player->speed < FixedMul(5*FRACUNIT,player->mo->scale) && canstand) + && player->speed < 5*player->mo->scale && canstand) { if (GETSECSPECIAL(player->mo->subsector->sector->special, 4) == 7 || (player->mo->ceilingz - player->mo->floorz < P_GetPlayerHeight(player))) - P_InstaThrust(player->mo, player->mo->angle, FixedMul(10*FRACUNIT, player->mo->scale)); + P_InstaThrust(player->mo, player->mo->angle, 10*player->mo->scale); else { player->skidtime = 0; From 2ab899192b8589c4f4bc66bb31e3ad3d978c2c43 Mon Sep 17 00:00:00 2001 From: toaster Date: Mon, 25 Nov 2019 00:08:38 +0000 Subject: [PATCH 076/141] Fix Tutorial prompt being incorrect size in GL (resolves #349). --- src/v_video.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/v_video.c b/src/v_video.c index e92375630..0b2edde33 100644 --- a/src/v_video.c +++ b/src/v_video.c @@ -1902,14 +1902,15 @@ void V_DrawPromptBack(INT32 boxheight, INT32 color) { UINT8 *deststop, *buf; - boxheight = ((boxheight * 4) + (boxheight/2)*5); - if (color >= 256 && color < 512) { + boxheight = ((boxheight * 4) + (boxheight/2)*5); V_DrawFill((BASEVIDWIDTH-(vid.width/vid.dupx))/2, BASEVIDHEIGHT-boxheight, (vid.width/vid.dupx),boxheight, (color-256)|V_SNAPTOBOTTOM); return; } + boxheight *= vid.dupy; + if (color == INT32_MAX) color = cons_backcolor.value; @@ -1951,7 +1952,7 @@ void V_DrawPromptBack(INT32 boxheight, INT32 color) // heavily simplified -- we don't need to know x or y position, // just the start and stop positions deststop = screens[0] + vid.rowbytes * vid.height; - buf = deststop - vid.rowbytes * boxheight * vid.dupy; // 4 lines of space plus gaps between and some leeway + buf = deststop - vid.rowbytes * ((boxheight * 4) + (boxheight/2)*5); // 4 lines of space plus gaps between and some leeway for (; buf < deststop; ++buf) *buf = promptbgmap[*buf]; } From aac5e41f3d5fd76c70054c05732049dc242d5b02 Mon Sep 17 00:00:00 2001 From: Louis-Antoine Date: Mon, 25 Nov 2019 01:09:00 +0100 Subject: [PATCH 077/141] Revert "Render title map on connecting to server screen too" This reverts commit 502c72e975df20ee2fde2d8e5f27b51f2e0b6513. --- src/d_main.c | 117 +++++++++++++++++++++++++------------------------ src/d_main.h | 3 -- src/f_finale.c | 12 +++-- 3 files changed, 65 insertions(+), 67 deletions(-) diff --git a/src/d_main.c b/src/d_main.c index 98e16a277..a68f9c09c 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -291,8 +291,11 @@ static void D_Display(void) switch (gamestate) { case GS_TITLESCREEN: - F_TitleScreenDrawer(); - break; + if (!titlemapinaction || !curbghide) { + F_TitleScreenDrawer(); + break; + } + /* FALLTHRU */ case GS_LEVEL: if (!gametic) break; @@ -363,11 +366,56 @@ static void D_Display(void) // clean up border stuff // see if the border needs to be initially drawn - if (gamestate == GS_LEVEL) + if (gamestate == GS_LEVEL || (gamestate == GS_TITLESCREEN && titlemapinaction && curbghide && (!hidetitlemap))) { // draw the view directly - D_Render(); + if (!automapactive && !dedicated && cv_renderview.value) + { + if (players[displayplayer].mo || players[displayplayer].playerstate == PST_DEAD) + { + topleft = screens[0] + viewwindowy*vid.width + viewwindowx; + objectsdrawn = 0; + #ifdef HWRENDER + if (rendermode != render_soft) + HWR_RenderPlayerView(0, &players[displayplayer]); + else + #endif + if (rendermode != render_none) + R_RenderPlayerView(&players[displayplayer]); + } + + // render the second screen + if (splitscreen && players[secondarydisplayplayer].mo) + { + #ifdef HWRENDER + if (rendermode != render_soft) + HWR_RenderPlayerView(1, &players[secondarydisplayplayer]); + else + #endif + if (rendermode != render_none) + { + viewwindowy = vid.height / 2; + M_Memcpy(ylookup, ylookup2, viewheight*sizeof (ylookup[0])); + + topleft = screens[0] + viewwindowy*vid.width + viewwindowx; + + R_RenderPlayerView(&players[secondarydisplayplayer]); + + viewwindowy = 0; + M_Memcpy(ylookup, ylookup1, viewheight*sizeof (ylookup[0])); + } + } + + // Image postprocessing effect + if (rendermode == render_soft) + { + if (postimgtype) + V_DoPostProcessor(0, postimgtype, postimgparam); + if (postimgtype2) + V_DoPostProcessor(1, postimgtype2, postimgparam2); + } + } if (lastdraw) { @@ -380,9 +428,14 @@ static void D_Display(void) lastdraw = false; } - ST_Drawer(); - F_TextPromptDrawer(); - HU_Drawer(); + if (gamestate == GS_LEVEL) + { + ST_Drawer(); + F_TextPromptDrawer(); + HU_Drawer(); + } + else + F_TitleScreenDrawer(); } } @@ -494,56 +547,6 @@ static void D_Display(void) } } -void D_Render(void) -{ - if (!automapactive && !dedicated && cv_renderview.value) - { - if (players[displayplayer].mo || players[displayplayer].playerstate == PST_DEAD) - { - topleft = screens[0] + viewwindowy*vid.width + viewwindowx; - objectsdrawn = 0; -#ifdef HWRENDER - if (rendermode != render_soft) - HWR_RenderPlayerView(0, &players[displayplayer]); - else -#endif - if (rendermode != render_none) - R_RenderPlayerView(&players[displayplayer]); - } - - // render the second screen - if (splitscreen && players[secondarydisplayplayer].mo) - { -#ifdef HWRENDER - if (rendermode != render_soft) - HWR_RenderPlayerView(1, &players[secondarydisplayplayer]); - else -#endif - if (rendermode != render_none) - { - viewwindowy = vid.height / 2; - M_Memcpy(ylookup, ylookup2, viewheight*sizeof (ylookup[0])); - - topleft = screens[0] + viewwindowy*vid.width + viewwindowx; - - R_RenderPlayerView(&players[secondarydisplayplayer]); - - viewwindowy = 0; - M_Memcpy(ylookup, ylookup1, viewheight*sizeof (ylookup[0])); - } - } - - // Image postprocessing effect - if (rendermode == render_soft) - { - if (postimgtype) - V_DoPostProcessor(0, postimgtype, postimgparam); - if (postimgtype2) - V_DoPostProcessor(1, postimgtype2, postimgparam2); - } - } -} - // ========================================================================= // D_SRB2Loop // ========================================================================= diff --git a/src/d_main.h b/src/d_main.h index 65c51802a..d67a5bb49 100644 --- a/src/d_main.h +++ b/src/d_main.h @@ -54,7 +54,4 @@ const char *D_Home(void); void D_AdvanceDemo(void); void D_StartTitle(void); -/* Here for title maps */ -void D_Render(void); - #endif //__D_MAIN__ diff --git a/src/f_finale.c b/src/f_finale.c index 2d20eb7f4..4a0b0826f 100644 --- a/src/f_finale.c +++ b/src/f_finale.c @@ -2588,9 +2588,7 @@ void F_TitleScreenDrawer(void) // Draw that sky! if (curbgcolor >= 0) V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, curbgcolor); - else if (titlemapinaction && curbghide && ! hidetitlemap) - D_Render(); - else + else if (!curbghide || !titlemapinaction || gamestate == GS_WAITINGPLAYERS) F_SkyScroll(curbgxspeed, curbgyspeed, curbgname); // Don't draw outside of the title screen, or if the patch isn't there. @@ -3350,6 +3348,10 @@ void F_TitleScreenTicker(boolean run) if (run) finalecount++; + // don't trigger if doing anything besides idling on title + if (gameaction != ga_nothing || gamestate != GS_TITLESCREEN) + return; + // Execute the titlemap camera settings if (titlemapinaction) { @@ -3396,10 +3398,6 @@ void F_TitleScreenTicker(boolean run) } } - // don't trigger if doing anything besides idling on title - if (gameaction != ga_nothing || gamestate != GS_TITLESCREEN) - return; - // no demos to play? or, are they disabled? if (!cv_rollingdemos.value || !numDemos) return; From 4c276b86deda2c492abdd2de7bdb90e19cf5eb34 Mon Sep 17 00:00:00 2001 From: toaster Date: Mon, 25 Nov 2019 14:33:15 +0000 Subject: [PATCH 078/141] Fix a bunch of shit with MP special stages! * Prevent an infinite quantity of Emeralds being spawned when P_GiveEmerald is called while a MP Special Stage is in session (resolves #347). * Fix FuriousFox's ridiculous timer on special stage spawn (mentioned in the comments of the previous issue) by correctly marking spectator players in special stages as finished, and preventing the underflow. --- src/g_game.c | 2 +- src/p_mobj.c | 2 +- src/p_tick.c | 5 ++--- src/p_user.c | 4 +++- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/g_game.c b/src/g_game.c index faaed13c7..11ad1862d 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -2978,7 +2978,7 @@ void G_AddPlayer(INT32 playernum) if (G_GametypeUsesLives() || ((netgame || multiplayer) && gametype == GT_COOP)) p->lives = cv_startinglives.value; - if (countplayers && !notexiting) + if ((countplayers && !notexiting) || G_IsSpecialStage(gamemap)) P_DoPlayerExit(p); } diff --git a/src/p_mobj.c b/src/p_mobj.c index f2dd1a734..b5af077b5 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -11294,7 +11294,7 @@ void P_SpawnPlayer(INT32 playernum) mobj->radius = FixedMul(skins[p->skin].radius, mobj->scale); mobj->height = P_GetPlayerHeight(p); - if (!leveltime && ((maptol & TOL_NIGHTS) == TOL_NIGHTS) != (G_IsSpecialStage(gamemap))) // non-special NiGHTS stage or special non-NiGHTS stage + if (!leveltime && !p->spectator && ((maptol & TOL_NIGHTS) == TOL_NIGHTS) != (G_IsSpecialStage(gamemap))) // non-special NiGHTS stage or special non-NiGHTS stage { if (maptol & TOL_NIGHTS) { diff --git a/src/p_tick.c b/src/p_tick.c index e02b11f49..60a776cbc 100644 --- a/src/p_tick.c +++ b/src/p_tick.c @@ -476,7 +476,7 @@ static inline void P_DoSpecialStageStuff(void) // Count up the rings of all the players and see if // they've collected the required amount. for (i = 0; i < MAXPLAYERS; i++) - if (playeringame[i]) + if (playeringame[i] && players[i].nightstime) { tic_t oldnightstime = players[i].nightstime; countspheres += players[i].spheres; @@ -506,12 +506,11 @@ static inline void P_DoSpecialStageStuff(void) { // Halt all the players for (i = 0; i < MAXPLAYERS; i++) - if (playeringame[i]) + if (playeringame[i] && !players[i].exiting) { players[i].mo->momx = players[i].mo->momy = 0; players[i].exiting = (14*TICRATE)/5 + 1; } - sstimer = 0; P_GiveEmerald(true); P_RestoreMusic(&players[consoleplayer]); diff --git a/src/p_user.c b/src/p_user.c index ed2a1a446..115ecc667 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -343,13 +343,15 @@ void P_GiveEmerald(boolean spawnObj) continue; emmo = P_SpawnMobjFromMobj(players[i].mo, 0, 0, players[i].mo->height, MT_GOTEMERALD); + if (!emmo) + continue; P_SetTarget(&emmo->target, players[i].mo); P_SetMobjState(emmo, mobjinfo[MT_GOTEMERALD].meleestate + em); P_SetTarget(&players[i].mo->tracer, emmo); if (pnum == 255) { - i = pnum; + pnum = i; continue; } From bb918c88f7c8404c7e44d7e9605c50cc36eaa021 Mon Sep 17 00:00:00 2001 From: toaster Date: Mon, 25 Nov 2019 14:59:06 +0000 Subject: [PATCH 079/141] Fix extra lives given to game-overed players not re-entering them into the action when cv_coopstarposts is 0. --- src/p_user.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/p_user.c b/src/p_user.c index ed2a1a446..cdfc073c6 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -1223,6 +1223,7 @@ void P_GivePlayerSpheres(player_t *player, INT32 num_spheres) // void P_GivePlayerLives(player_t *player, INT32 numlives) { + UINT8 prevlives = player->lives; if (!player) return; @@ -1239,10 +1240,9 @@ void P_GivePlayerLives(player_t *player, INT32 numlives) if ((netgame || multiplayer) && gametype == GT_COOP && cv_cooplives.value == 0) { - UINT8 prevlives = player->lives; P_GivePlayerRings(player, 100*numlives); if (player->lives - prevlives >= numlives) - return; + goto docooprespawn; numlives = (numlives + prevlives - player->lives); } @@ -1256,6 +1256,15 @@ void P_GivePlayerLives(player_t *player, INT32 numlives) player->lives = 99; else if (player->lives < 1) player->lives = 1; + +docooprespawn: + if (cv_coopstarposts.value) + return; + if (prevlives > 0) + return; + if (!player->spectator) + return; + P_SpectatorJoinGame(player); } void P_GiveCoopLives(player_t *player, INT32 numlives, boolean sound) From 2b2d2a84413ffc2bb91ca53faf4e3d4958a3185b Mon Sep 17 00:00:00 2001 From: toaster Date: Mon, 25 Nov 2019 16:04:03 +0000 Subject: [PATCH 080/141] Correct two instances where "Zone" is forced uppercase. --- src/d_clisrv.c | 2 +- src/m_misc.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index 2a89116a1..635bd7ee9 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -1633,7 +1633,7 @@ static void CL_LoadReceivedSavegame(void) { CONS_Printf(": %s", mapheaderinfo[gamemap-1]->lvlttl); if (!(mapheaderinfo[gamemap-1]->levelflags & LF_NOZONE)) - CONS_Printf(M_GetText(" ZONE")); + CONS_Printf(M_GetText(" Zone")); if (actnum > 0) CONS_Printf(" %2d", actnum); } diff --git a/src/m_misc.c b/src/m_misc.c index 5cfb20f0f..ca9b3a8e1 100644 --- a/src/m_misc.c +++ b/src/m_misc.c @@ -789,7 +789,7 @@ static void M_PNGText(png_structp png_ptr, png_infop png_info_ptr, PNG_CONST png if (gamestate == GS_LEVEL && mapheaderinfo[gamemap-1]->lvlttl[0] != '\0') snprintf(lvlttltext, 48, "%s%s%s", mapheaderinfo[gamemap-1]->lvlttl, - (mapheaderinfo[gamemap-1]->levelflags & LF_NOZONE) ? "" : " ZONE", + (mapheaderinfo[gamemap-1]->levelflags & LF_NOZONE) ? "" : " Zone", (mapheaderinfo[gamemap-1]->actnum > 0) ? va(" %d",mapheaderinfo[gamemap-1]->actnum) : ""); else snprintf(lvlttltext, 48, "Unknown"); From 82e393ab735ddd536dcae83090f3a1ba9102038e Mon Sep 17 00:00:00 2001 From: lachwright Date: Tue, 26 Nov 2019 00:16:46 +0800 Subject: [PATCH 081/141] Fix 'Speeding off to...' placement in non-greeen resolutions --- src/p_setup.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/p_setup.c b/src/p_setup.c index 5c792c73c..2216334e7 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -2812,12 +2812,12 @@ boolean P_SetupLevel(boolean skipprecip) { // Don't include these in the fade! char tx[64]; - V_DrawSmallString(1, 191, V_ALLOWLOWERCASE|V_TRANSLUCENT, M_GetText("Speeding off to...")); + V_DrawSmallString(1, 191, V_ALLOWLOWERCASE|V_TRANSLUCENT|V_SNAPTOLEFT|V_SNAPTOBOTTOM, M_GetText("Speeding off to...")); snprintf(tx, 63, "%s%s%s", mapheaderinfo[gamemap-1]->lvlttl, (mapheaderinfo[gamemap-1]->levelflags & LF_NOZONE) ? "" : " Zone", (mapheaderinfo[gamemap-1]->actnum > 0) ? va(" %d",mapheaderinfo[gamemap-1]->actnum) : ""); - V_DrawSmallString(1, 195, V_ALLOWLOWERCASE|V_TRANSLUCENT, tx); + V_DrawSmallString(1, 195, V_ALLOWLOWERCASE|V_TRANSLUCENT|V_SNAPTOLEFT|V_SNAPTOBOTTOM, tx); I_UpdateNoVsync(); } From bf46194ab651ae31763dfb25e03855a76c198397 Mon Sep 17 00:00:00 2001 From: lachwright Date: Tue, 26 Nov 2019 00:20:43 +0800 Subject: [PATCH 082/141] Add comment --- src/p_user.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/p_user.c b/src/p_user.c index 0721c22b8..7d7cc48c1 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -5550,7 +5550,7 @@ static void P_DoJumpStuff(player_t *player, ticcmd_t *cmd) else potentialmomz = ((player->speed < 10*player->mo->scale) ? (player->speed - 10*player->mo->scale)/5 - : -1); + : -1); // Should be 0, but made negative to ensure P_PlayerHitFloor runs upon touching ground if (P_MobjFlip(player->mo)*player->mo->momz < potentialmomz) player->mo->momz = P_MobjFlip(player->mo)*potentialmomz; player->pflags &= ~PF_SPINNING; From 88def9b8e81123aad76868a9516c5b9a6807751e Mon Sep 17 00:00:00 2001 From: Louis-Antoine Date: Mon, 25 Nov 2019 17:23:35 +0100 Subject: [PATCH 083/141] Do not focus the camera on the end sign if exitmove is active --- src/p_user.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/p_user.c b/src/p_user.c index ed2a1a446..d649c5679 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -9654,7 +9654,8 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall if (player->exiting) { - if (mo->target && mo->target->type == MT_SIGN && mo->target->spawnpoint) + if (mo->target && mo->target->type == MT_SIGN && mo->target->spawnpoint + && !(gametype == GT_COOP && (netgame || multiplayer) && cv_exitmove.value)) sign = mo->target; else if ((player->powers[pw_carry] == CR_NIGHTSMODE) && !(player->mo->state >= &states[S_PLAY_NIGHTS_TRANS1] From 518976f81d4c0a8f6a143c9d333d396b8d32ef55 Mon Sep 17 00:00:00 2001 From: toaster Date: Mon, 25 Nov 2019 16:45:54 +0000 Subject: [PATCH 084/141] Allow character select for NiGHTS stages on the Secret Level Select now that every character has NiGHTS sprites. (think of this as the collorary to 358, not a direct change) --- src/m_menu.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/m_menu.c b/src/m_menu.c index 7d62514e6..44a06ca04 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -8340,10 +8340,7 @@ static void M_SetupChoosePlayer(INT32 choice) char *and; (void)choice; - if (!(mapheaderinfo[startmap-1] - && (mapheaderinfo[startmap-1]->forcecharacter[0] != '\0' - || (mapheaderinfo[startmap-1]->typeoflevel & TOL_NIGHTS)) // remove this later when everyone gets their own nights sprites, maybe - )) + if (!mapheaderinfo[startmap-1] || mapheaderinfo[startmap-1]->forcecharacter[0] == '\0') { for (i = 0; i < 32; i++) // Handle charsels, availability, and unlocks. { @@ -8406,17 +8403,16 @@ static void M_SetupChoosePlayer(INT32 choice) } } - if (firstvalid != 255) - { // One last bit of order we can't do in the iteration above. - description[firstvalid].prev = lastvalid; - description[lastvalid].next = firstvalid; - } - else // We're being forced into a specific character, so might as well just skip it. + if (firstvalid == 255) // We're being forced into a specific character, so might as well just skip it. { M_ChoosePlayer(-1); return; } + // One last bit of order we can't do in the iteration above. + description[firstvalid].prev = lastvalid; + description[lastvalid].next = firstvalid; + M_ChangeMenuMusic("_chsel", true); /* the menus suck -James */ From 13ee2476d88049fd69d63baaf0f41312635005e9 Mon Sep 17 00:00:00 2001 From: toaster Date: Mon, 25 Nov 2019 16:55:06 +0000 Subject: [PATCH 085/141] Skip tagteam characters (ie, Sonic&Tails) for NiGHTS secret map character selection. --- src/m_menu.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/m_menu.c b/src/m_menu.c index 44a06ca04..38b072870 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -8350,6 +8350,8 @@ static void M_SetupChoosePlayer(INT32 choice) if (and) { char firstskin[SKINNAMESIZE+1]; + if (mapheaderinfo[startmap-1]->typeoflevel & TOL_NIGHTS) // skip tagteam characters for NiGHTS levels + continue; strncpy(firstskin, description[i].skinname, (and - description[i].skinname)); firstskin[(and - description[i].skinname)] = '\0'; description[i].skinnum[0] = R_SkinAvailable(firstskin); From fea05765ec96f82a5edf325d7ff8060a739dcb0c Mon Sep 17 00:00:00 2001 From: toaster Date: Mon, 25 Nov 2019 17:05:58 +0000 Subject: [PATCH 086/141] Skip character select entirely if only one character is available on the list. --- src/m_menu.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/m_menu.c b/src/m_menu.c index 38b072870..355e38ea1 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -8334,8 +8334,7 @@ static void M_SetupChoosePlayer(INT32 choice) { INT32 skinnum; UINT8 i; - UINT8 firstvalid = 255; - UINT8 lastvalid = 0; + UINT8 firstvalid = 255, lastvalid = 255; boolean allowed = false; char *and; (void)choice; @@ -8405,9 +8404,9 @@ static void M_SetupChoosePlayer(INT32 choice) } } - if (firstvalid == 255) // We're being forced into a specific character, so might as well just skip it. + if (firstvalid == lastvalid) // We're being forced into a specific character, so might as well just skip it. { - M_ChoosePlayer(-1); + M_ChoosePlayer(firstvalid); return; } @@ -8741,7 +8740,7 @@ static void M_ChoosePlayer(INT32 choice) UINT8 skinnum; // skip this if forcecharacter or no characters available - if (choice == -1) + if (choice == 255) { skinnum = botskin = 0; botingame = false; From 937cd7688a71a936fcc4a0507b92c1cd93e305df Mon Sep 17 00:00:00 2001 From: toaster Date: Mon, 25 Nov 2019 18:52:38 +0000 Subject: [PATCH 087/141] Fix Continue sprites not working for custom characters (incorrect SPR2_XTRA bounds check). Also, change all the references to XTRA_ constants to consistently check for > its value, instead of >= its value plus one (or that there's any frames at all) - for extra clarity/consistency, and capacity for re-ordering later. --- src/f_finale.c | 2 +- src/m_menu.c | 4 ++-- src/st_stuff.c | 4 ++-- src/v_video.c | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/f_finale.c b/src/f_finale.c index 4a0b0826f..9da09e2f2 100644 --- a/src/f_finale.c +++ b/src/f_finale.c @@ -1683,7 +1683,7 @@ void F_StartEnding(void) UINT8 skinnum = players[consoleplayer].skin; spritedef_t *sprdef; spriteframe_t *sprframe; - if (skins[skinnum].sprites[SPR2_XTRA].numframes >= (XTRA_ENDING+2)+1) + if (skins[skinnum].sprites[SPR2_XTRA].numframes > (XTRA_ENDING+2)) { sprdef = &skins[skinnum].sprites[SPR2_XTRA]; // character head, skin specific diff --git a/src/m_menu.c b/src/m_menu.c index ee6c896d2..3ce34ffde 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -8381,7 +8381,7 @@ static void M_SetupChoosePlayer(INT32 choice) if (!(description[i].picname[0])) { - if (skins[skinnum].sprites[SPR2_XTRA].numframes >= XTRA_CHARSEL+1) + if (skins[skinnum].sprites[SPR2_XTRA].numframes > XTRA_CHARSEL) { spritedef_t *sprdef = &skins[skinnum].sprites[SPR2_XTRA]; spriteframe_t *sprframe = &sprdef->spriteframes[XTRA_CHARSEL]; @@ -9112,7 +9112,7 @@ void M_DrawTimeAttackMenu(void) // Character face! { - if (skins[cv_chooseskin.value-1].sprites[SPR2_XTRA].numframes >= XTRA_CHARSEL+1) + if (skins[cv_chooseskin.value-1].sprites[SPR2_XTRA].numframes > XTRA_CHARSEL) { spritedef_t *sprdef = &skins[cv_chooseskin.value-1].sprites[SPR2_XTRA]; spriteframe_t *sprframe = &sprdef->spriteframes[XTRA_CHARSEL]; diff --git a/src/st_stuff.c b/src/st_stuff.c index 6f75a25e7..8b3ceac9d 100644 --- a/src/st_stuff.c +++ b/src/st_stuff.c @@ -353,12 +353,12 @@ void ST_LoadGraphics(void) // made separate so that skins code can reload custom face graphics void ST_LoadFaceGraphics(INT32 skinnum) { - if (skins[skinnum].sprites[SPR2_XTRA].numframes) + if (skins[skinnum].sprites[SPR2_XTRA].numframes > XTRA_LIFEPIC) { spritedef_t *sprdef = &skins[skinnum].sprites[SPR2_XTRA]; spriteframe_t *sprframe = &sprdef->spriteframes[XTRA_LIFEPIC]; faceprefix[skinnum] = W_CachePatchNum(sprframe->lumppat[0], PU_HUDGFX); - if (skins[skinnum].sprites[(SPR2_XTRA|FF_SPR2SUPER)].numframes) + if (skins[skinnum].sprites[(SPR2_XTRA|FF_SPR2SUPER)].numframes > XTRA_LIFEPIC) { sprdef = &skins[skinnum].sprites[SPR2_XTRA|FF_SPR2SUPER]; sprframe = &sprdef->spriteframes[0]; diff --git a/src/v_video.c b/src/v_video.c index 0b2edde33..5813a451b 100644 --- a/src/v_video.c +++ b/src/v_video.c @@ -1076,7 +1076,7 @@ void V_DrawCroppedPatch(fixed_t x, fixed_t y, fixed_t pscale, INT32 scrn, patch_ // void V_DrawContinueIcon(INT32 x, INT32 y, INT32 flags, INT32 skinnum, UINT8 skincolor) { - if (skinnum >= 0 && skinnum < numskins && skins[skinnum].sprites[SPR2_XTRA].numframes >= 4) + if (skinnum >= 0 && skinnum < numskins && skins[skinnum].sprites[SPR2_XTRA].numframes > XTRA_CONTINUE) { spritedef_t *sprdef = &skins[skinnum].sprites[SPR2_XTRA]; spriteframe_t *sprframe = &sprdef->spriteframes[XTRA_CONTINUE]; From 380715810ba66ad329cf471777a49f0be49476ca Mon Sep 17 00:00:00 2001 From: Nev3r Date: Mon, 25 Nov 2019 20:30:06 +0100 Subject: [PATCH 088/141] Fix the "play from nowhere as long as you're in the tagged areas" behavior in the Play Sound line executor. --- src/p_spec.c | 43 +++++++++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/src/p_spec.c b/src/p_spec.c index f814e89c6..ed5034a87 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -2721,6 +2721,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec) if (line->tag != 0) // Do special stuff only if a non-zero linedef tag is set { + // Play sounds from tagged sectors' origins. if (line->flags & ML_EFFECT5) // Repeat Midtexture { // Additionally play the sound from tagged sectors' soundorgs @@ -2732,31 +2733,45 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec) S_StartSound(&sec->soundorg, sfxnum); } } - else if (mo) // A mobj must have triggered the executor + + // Play the sound without origin for anyone, as long as they're inside tagged areas. + else { - // Only trigger if mobj is touching the tag + UINT i = 0; + mobj_t* camobj = players[displayplayer].mo; ffloor_t *rover; boolean foundit = false; - for(rover = mo->subsector->sector->ffloors; rover; rover = rover->next) + for (i = 0; i < 2; camobj = players[secondarydisplayplayer].mo, i++) { - if (rover->master->frontsector->tag != line->tag) + if (!camobj) continue; - if (mo->z > P_GetSpecialTopZ(mo, sectors + rover->secnum, mo->subsector->sector)) - continue; + if (foundit || (camobj->subsector->sector->tag == line->tag)) + { + foundit = true; + break; + } - if (mo->z + mo->height < P_GetSpecialBottomZ(mo, sectors + rover->secnum, mo->subsector->sector)) - continue; + // Only trigger if mobj is touching the tag + for(rover = camobj->subsector->sector->ffloors; rover; rover = rover->next) + { + if (rover->master->frontsector->tag != line->tag) + continue; - foundit = true; + if (camobj->z > P_GetSpecialTopZ(camobj, sectors + rover->secnum, camobj->subsector->sector)) + continue; + + if (camobj->z + camobj->height < P_GetSpecialBottomZ(camobj, sectors + rover->secnum, camobj->subsector->sector)) + continue; + + foundit = true; + break; + } } - if (mo->subsector->sector->tag == line->tag) - foundit = true; - - if (!foundit) - return; + if (foundit) + S_StartSound(NULL, sfxnum); } } else From 99e016a774304cb640cbe0dc2e99c08d8cd58288 Mon Sep 17 00:00:00 2001 From: toaster Date: Mon, 25 Nov 2019 20:12:42 +0000 Subject: [PATCH 089/141] SMOOTH PAPERCOLLISION TIME!!!!!!!! resolves #273, damn i feel good --- src/p_map.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/p_map.c b/src/p_map.c index c7120535c..3f140e1d5 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -3758,6 +3758,33 @@ void P_SlideMove(mobj_t *mo) v2.x = tmhitthing->x + cosradius; v2.y = tmhitthing->y + sinradius; + // Can we box collision our way into smooth movement..? + if (mo->y + mo->radius <= min(v1.y, v2.y)) + { + mo->momy = 0; + P_TryMove(mo, mo->x + mo->momx, min(v1.y, v2.y) - mo->radius, true); + return; + } + else if (mo->y - mo->radius >= max(v1.y, v2.y)) + { + mo->momy = 0; + P_TryMove(mo, mo->x + mo->momx, max(v1.y, v2.y) + mo->radius, true); + return; + } + else if (mo->x + mo->radius <= min(v1.x, v2.x)) + { + mo->momx = 0; + P_TryMove(mo, min(v1.x, v2.x) - mo->radius, mo->y + mo->momy, true); + return; + } + else if (mo->x - mo->radius >= max(v1.x, v2.x)) + { + mo->momx = 0; + P_TryMove(mo, max(v1.x, v2.x) + mo->radius, mo->y + mo->momy, true); + return; + } + + // nope, gotta fuck around with a fake linedef! junk.v1 = &v1; junk.v2 = &v2; junk.dx = 2*cosradius; // v2.x - v1.x; From 0261148cb39b1f203fbad058e55e13e5701487f9 Mon Sep 17 00:00:00 2001 From: MascaraSnake Date: Mon, 25 Nov 2019 22:35:40 +0100 Subject: [PATCH 090/141] -Fix player being able to push up spikes -Minor tweaks to make paper collision slightly more reliable --- src/p_map.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/p_map.c b/src/p_map.c index 3f140e1d5..d4c753dfc 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -1719,8 +1719,8 @@ static boolean PIT_CheckThing(mobj_t *thing) } } - if ((tmthing->flags & MF_SPRING || tmthing->type == MT_STEAM) && (thing->player)) - ; // springs and gas jets should never be able to step up onto a player + if ((tmthing->flags & MF_SPRING || tmthing->type == MT_STEAM || tmthing->type == MT_SPIKE || tmthing->type == MT_WALLSPIKE) && (thing->player)) + ; // springs, gas jets and springs should never be able to step up onto a player // z checking at last // Treat noclip things as non-solid! else if ((thing->flags & (MF_SOLID|MF_NOCLIP)) == MF_SOLID @@ -3759,25 +3759,25 @@ void P_SlideMove(mobj_t *mo) v2.y = tmhitthing->y + sinradius; // Can we box collision our way into smooth movement..? - if (mo->y + mo->radius <= min(v1.y, v2.y)) + if (sinradius && mo->y + mo->radius <= min(v1.y, v2.y)) { mo->momy = 0; P_TryMove(mo, mo->x + mo->momx, min(v1.y, v2.y) - mo->radius, true); return; } - else if (mo->y - mo->radius >= max(v1.y, v2.y)) + else if (sinradius && mo->y - mo->radius >= max(v1.y, v2.y)) { mo->momy = 0; P_TryMove(mo, mo->x + mo->momx, max(v1.y, v2.y) + mo->radius, true); return; } - else if (mo->x + mo->radius <= min(v1.x, v2.x)) + else if (cosradius && mo->x + mo->radius <= min(v1.x, v2.x)) { mo->momx = 0; P_TryMove(mo, min(v1.x, v2.x) - mo->radius, mo->y + mo->momy, true); return; } - else if (mo->x - mo->radius >= max(v1.x, v2.x)) + else if (cosradius && mo->x - mo->radius >= max(v1.x, v2.x)) { mo->momx = 0; P_TryMove(mo, max(v1.x, v2.x) + mo->radius, mo->y + mo->momy, true); From 9178660d34c93507425dceaa062ea49fbf43a2fd Mon Sep 17 00:00:00 2001 From: Jaime Passos Date: Mon, 25 Nov 2019 20:16:17 -0300 Subject: [PATCH 091/141] Fix stuck closed captioning --- src/d_main.c | 1 + src/s_sound.c | 41 +++++++++++++++++++++-------------------- src/s_sound.h | 1 + 3 files changed, 23 insertions(+), 20 deletions(-) diff --git a/src/d_main.c b/src/d_main.c index ed28c2228..5853fccf0 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -667,6 +667,7 @@ void D_SRB2Loop(void) // consoleplayer -> displayplayer (hear sounds from viewpoint) S_UpdateSounds(); // move positional sounds + S_UpdateClosedCaptions(); // check for media change, loop music.. I_UpdateCD(); diff --git a/src/s_sound.c b/src/s_sound.c index 8e4e7715d..2f88349f1 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -860,7 +860,6 @@ static INT32 actualmidimusicvolume; void S_UpdateSounds(void) { INT32 audible, cnum, volume, sep, pitch; - UINT8 i; channel_t *c; listener_t listener; @@ -1017,28 +1016,30 @@ void S_UpdateSounds(void) notinlevel: I_UpdateSound(); +} +void S_UpdateClosedCaptions(void) +{ + UINT8 i; + boolean gamestopped = (paused || P_AutoPause()); + for (i = 0; i < NUMCAPTIONS; i++) // update captions { - boolean gamestopped = (paused || P_AutoPause()); - for (i = 0; i < NUMCAPTIONS; i++) // update captions + if (!closedcaptions[i].s) + continue; + + if (i == 0 && (closedcaptions[0].s-S_sfx == sfx_None) && gamestopped) + continue; + + if (!(--closedcaptions[i].t)) { - if (!closedcaptions[i].s) - continue; - - if (i == 0 && (closedcaptions[0].s-S_sfx == sfx_None) && gamestopped) - continue; - - if (!(--closedcaptions[i].t)) - { - closedcaptions[i].c = NULL; - closedcaptions[i].s = NULL; - } - else if (closedcaptions[i].c && !I_SoundIsPlaying(closedcaptions[i].c->handle)) - { - closedcaptions[i].c = NULL; - if (closedcaptions[i].t > CAPTIONFADETICS) - closedcaptions[i].t = CAPTIONFADETICS; - } + closedcaptions[i].c = NULL; + closedcaptions[i].s = NULL; + } + else if (closedcaptions[i].c && !I_SoundIsPlaying(closedcaptions[i].c->handle)) + { + closedcaptions[i].c = NULL; + if (closedcaptions[i].t > CAPTIONFADETICS) + closedcaptions[i].t = CAPTIONFADETICS; } } } diff --git a/src/s_sound.h b/src/s_sound.h index d1551df0b..f9bbf6767 100644 --- a/src/s_sound.h +++ b/src/s_sound.h @@ -303,6 +303,7 @@ boolean S_FadeOutStopMusic(UINT32 ms); // Updates music & sounds // void S_UpdateSounds(void); +void S_UpdateClosedCaptions(void); FUNCMATH fixed_t S_CalculateSoundDistance(fixed_t px1, fixed_t py1, fixed_t pz1, fixed_t px2, fixed_t py2, fixed_t pz2); From 93e1fdd0bbc581b5ec012be6d91a44cd61c4d1a1 Mon Sep 17 00:00:00 2001 From: toaster Date: Tue, 26 Nov 2019 10:11:52 +0000 Subject: [PATCH 092/141] Fix issue where you can get stuck in pain frames after stepping up, or after sliding (resolves #369). --- src/p_user.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/p_user.c b/src/p_user.c index 7a80031b8..a3264b675 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -5962,6 +5962,8 @@ static void P_3dMovement(player_t *player) // When sliding, don't allow forward/back if (player->pflags & PF_SLIDING) cmd->forwardmove = 0; + else if (onground && player->mo->state == states+S_PLAY_PAIN) + P_SetPlayerMobjState(player->mo, S_PLAY_WALK); player->aiming = cmd->aiming< Date: Tue, 26 Nov 2019 11:53:49 +0000 Subject: [PATCH 093/141] Prevent Tailsbot from considering flight when Sonic is exiting. --- src/b_bot.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/b_bot.c b/src/b_bot.c index 709a280b5..895c8d18d 100644 --- a/src/b_bot.c +++ b/src/b_bot.c @@ -135,7 +135,7 @@ static inline void B_BuildTailsTiccmd(mobj_t *sonic, mobj_t *tails, ticcmd_t *cm // ******** // FLY MODE // spinmode check - if (spinmode) + if (spinmode || player->exiting) thinkfly = false; else { From 644ba73c5b93e36535d090d18c9eabbdc8de50e6 Mon Sep 17 00:00:00 2001 From: toaster Date: Tue, 26 Nov 2019 11:55:31 +0000 Subject: [PATCH 094/141] Make P_CanPickupItem check whether Sonic is in a state to recieve it when Tailsbot tries to get it. Specfically, this fixes the case where Sonic runs into something hazardous and spills his rings, but Tailsbot is immediately behind and ends up picking them all up the tic before they also get hurt. --- src/p_inter.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/p_inter.c b/src/p_inter.c index d1ea02c80..a81be3c3a 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -148,15 +148,21 @@ void P_ResetStarposts(void) // boolean P_CanPickupItem(player_t *player, boolean weapon) { - if (player->bot && weapon) +soniccheck: + if (!player->mo || player->mo->health <= 0) return false; + if (player->bot) + { + if (weapon || players[consoleplayer].bot) + return false; + player = &players[consoleplayer]; + goto soniccheck; + } + if (player->powers[pw_flashing] > (flashingtics/4)*3 && player->powers[pw_flashing] < UINT16_MAX) return false; - if (player->mo && player->mo->health <= 0) - return false; - return true; } From d61cf9a938588235fb124ae36222fb648ba4b757 Mon Sep 17 00:00:00 2001 From: toaster Date: Tue, 26 Nov 2019 12:30:32 +0000 Subject: [PATCH 095/141] Instead of making conditions which check for death individually check for special stages to prevent lives loss, just set G_GametypeUsesLives to false in a special stage. --- src/g_game.c | 2 +- src/p_inter.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/g_game.c b/src/g_game.c index 6988a011a..2fa52e7c0 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -3099,7 +3099,7 @@ boolean G_GametypeUsesLives(void) // Coop, Competitive if ((gametype == GT_COOP || gametype == GT_COMPETITION) && !(modeattacking || metalrecording) // No lives in Time Attack - //&& !G_IsSpecialStage(gamemap) + && !G_IsSpecialStage(gamemap) && !(maptol & TOL_NIGHTS)) // No lives in NiGHTS return true; return false; diff --git a/src/p_inter.c b/src/p_inter.c index d1ea02c80..325070b35 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -2521,7 +2521,7 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget if ((target->player->lives <= 1) && (netgame || multiplayer) && (gametype == GT_COOP) && (cv_cooplives.value == 0)) ; - else if (!target->player->bot && !target->player->spectator && !G_IsSpecialStage(gamemap) && (target->player->lives != INFLIVES) + else if (!target->player->bot && !target->player->spectator && (target->player->lives != INFLIVES) && G_GametypeUsesLives()) { target->player->lives -= 1; // Lose a life Tails 03-11-2000 From b2426e7668309b8eeb5a6c7ae5092116ae678b90 Mon Sep 17 00:00:00 2001 From: toaster Date: Tue, 26 Nov 2019 12:33:56 +0000 Subject: [PATCH 096/141] * Prevent that GOD AWFUL random camera turn that happens sometimes during the fade after you die (when you input camera turn stuff after death) by locking the camera during PST_REBORN. * Remove whitespace in P_DeathThink. --- src/p_user.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/p_user.c b/src/p_user.c index 7a80031b8..2be24fbfd 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -9499,7 +9499,6 @@ static void P_DeathThink(player_t *player) } else if ((netgame || multiplayer) && player->deadtimer >= 8*TICRATE) { - INT32 i, deadtimercheck = INT32_MAX; // In a net/multiplayer game, and out of lives @@ -9664,7 +9663,7 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall fixed_t f1, f2; // We probably shouldn't move the camera if there is no player or player mobj somehow - if (!player || !player->mo) + if (!player || !player->mo || player->playerstate == PST_REBORN) return true; mo = player->mo; From 49de43afafc67db3ef864b3434735289bdde72fa Mon Sep 17 00:00:00 2001 From: toaster Date: Tue, 26 Nov 2019 12:37:57 +0000 Subject: [PATCH 097/141] Change the default value of cv_coopstarposts (as per #321), and make it NOT a cheat to change since the other options are in effect more restrictive. (Leaving cv_cooplives at its current value for now, though.) --- src/d_netcmd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index f9ec6c351..8fa4b2e0b 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -355,7 +355,7 @@ static CV_PossibleValue_t inttime_cons_t[] = {{0, "MIN"}, {3600, "MAX"}, {0, NUL consvar_t cv_inttime = {"inttime", "10", CV_NETVAR, inttime_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; static CV_PossibleValue_t coopstarposts_cons_t[] = {{0, "Per-player"}, {1, "Shared"}, {2, "Teamwork"}, {0, NULL}}; -consvar_t cv_coopstarposts = {"coopstarposts", "Teamwork", CV_NETVAR|CV_CALL|CV_CHEAT, coopstarposts_cons_t, CoopStarposts_OnChange, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_coopstarposts = {"coopstarposts", "Per-player", CV_NETVAR|CV_CALL, coopstarposts_cons_t, CoopStarposts_OnChange, 0, NULL, NULL, 0, 0, NULL}; static CV_PossibleValue_t cooplives_cons_t[] = {{0, "Infinite"}, {1, "Per-player"}, {2, "Avoid Game Over"}, {3, "Single pool"}, {0, NULL}}; consvar_t cv_cooplives = {"cooplives", "Avoid Game Over", CV_NETVAR|CV_CALL|CV_CHEAT, cooplives_cons_t, CoopLives_OnChange, 0, NULL, NULL, 0, 0, NULL}; From b177507be273eb16747013c5fa391dbd3e77db7e Mon Sep 17 00:00:00 2001 From: toaster Date: Tue, 26 Nov 2019 17:06:30 +0000 Subject: [PATCH 098/141] Resolve #374. --- src/p_enemy.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/p_enemy.c b/src/p_enemy.c index d87945547..785d19fb4 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -14611,6 +14611,9 @@ void A_RolloutRock(mobj_t *actor) actor->frame = actor->reactiontime % maxframes; // set frame + if (!actor->tracer || P_MobjWasRemoved(actor->tracer) || !actor->tracer->health) + actor->flags |= MF_PUSHABLE; + if (!(actor->flags & MF_PUSHABLE)) // if being ridden, don't disappear actor->fuse = 0; else if (!actor->fuse && actor->movecount == 1) // otherwise if rock has moved, set its fuse From 0b790acb4212fc8b9056c14554858791bd4052ca Mon Sep 17 00:00:00 2001 From: toaster Date: Tue, 26 Nov 2019 17:56:42 +0000 Subject: [PATCH 099/141] Move the fireball despawn to later so its target/tracer isn't nulled until AFTER the enemy it touches is killed, allowing for correct point delivery (resolves #373). --- src/p_map.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/p_map.c b/src/p_map.c index d4c753dfc..8220f3818 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -1303,11 +1303,6 @@ static boolean PIT_CheckThing(mobj_t *thing) return false; } - // Fireball touched an enemy - // Don't bounce though, just despawn right there - if ((tmthing->type == MT_FIREBALL) && (thing->flags & MF_ENEMY)) - P_KillMobj(tmthing, NULL, NULL, 0); - // damage / explode if (tmthing->flags & MF_ENEMY) // An actual ENEMY! (Like the deton, for example) P_DamageMobj(thing, tmthing, tmthing, 1, 0); @@ -1356,6 +1351,11 @@ static boolean PIT_CheckThing(mobj_t *thing) P_DamageMobj(thing, tmthing, tmthing->target, 1, damagetype); } + // Fireball touched an enemy + // Don't bounce though, just despawn right there + if ((tmthing->type == MT_FIREBALL) && (thing->flags & MF_ENEMY)) + P_KillMobj(tmthing, NULL, NULL, 0); + // don't traverse any more if (tmthing->type == MT_SHELL) From 33a79ae8c0097f25966ebac4efdcda463eb52ed3 Mon Sep 17 00:00:00 2001 From: toaster Date: Tue, 26 Nov 2019 18:25:36 +0000 Subject: [PATCH 100/141] Now we have mixed case level title font, and since we had a question mark graphic in that for a while, make the continue screen a tad nicer. --- src/f_finale.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/f_finale.c b/src/f_finale.c index 9da09e2f2..8c63def18 100644 --- a/src/f_finale.c +++ b/src/f_finale.c @@ -3550,7 +3550,7 @@ void F_ContinueDrawer(void) if (timetonext >= (11*TICRATE)+10) return; - V_DrawLevelTitle(x - (V_LevelNameWidth("CONTINUE")>>1), 16, 0, "CONTINUE"); + V_DrawLevelTitle(x - (V_LevelNameWidth("Continue?")>>1), 16, 0, "Continue?"); // Two stars... patch = W_CachePatchName("CONTSTAR", PU_CACHE); From 665a778054b6e51b59de7679b8dceae72beaea96 Mon Sep 17 00:00:00 2001 From: toaster Date: Tue, 26 Nov 2019 17:10:59 -0500 Subject: [PATCH 101/141] MascaraSnake is a bully and will make a pariah out of me in front of his doctoral student colleagues if I don't change this --- src/p_inter.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/p_inter.c b/src/p_inter.c index a81be3c3a..0ff75b3eb 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -148,16 +148,14 @@ void P_ResetStarposts(void) // boolean P_CanPickupItem(player_t *player, boolean weapon) { -soniccheck: if (!player->mo || player->mo->health <= 0) return false; if (player->bot) { - if (weapon || players[consoleplayer].bot) + if (weapon) return false; - player = &players[consoleplayer]; - goto soniccheck; + return P_CanPickupItem(&players[consoleplayer], true); // weapon is true to prevent infinite recursion if p1 is bot - doesn't occur in vanilla, but may be relevant for mods } if (player->powers[pw_flashing] > (flashingtics/4)*3 && player->powers[pw_flashing] < UINT16_MAX) From 1544049af03084559037448a0d0809bf5f017492 Mon Sep 17 00:00:00 2001 From: toaster Date: Wed, 27 Nov 2019 09:03:21 +0000 Subject: [PATCH 102/141] Resolve #378, because I knew as soon as I saw that issue name that it was my fault. --- src/p_tick.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/p_tick.c b/src/p_tick.c index 60a776cbc..237d6b593 100644 --- a/src/p_tick.c +++ b/src/p_tick.c @@ -476,11 +476,14 @@ static inline void P_DoSpecialStageStuff(void) // Count up the rings of all the players and see if // they've collected the required amount. for (i = 0; i < MAXPLAYERS; i++) - if (playeringame[i] && players[i].nightstime) + if (playeringame[i]) { tic_t oldnightstime = players[i].nightstime; countspheres += players[i].spheres; + if (!oldnightstime) + continue; + // If in water, deplete timer 6x as fast. if (players[i].mo->eflags & (MFE_TOUCHWATER|MFE_UNDERWATER) && !(players[i].powers[pw_shield] & SH_PROTECTWATER)) players[i].nightstime -= 5; From ff26826ca0ad4ad89587d26e9411f06f59739052 Mon Sep 17 00:00:00 2001 From: toaster Date: Wed, 27 Nov 2019 12:29:31 +0000 Subject: [PATCH 103/141] Make camerascale have no effect in 2D mode (resolves #359 and resolves #363). --- src/p_user.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/p_user.c b/src/p_user.c index bddf24d42..ef33584ed 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -9768,7 +9768,7 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall camorbit = cv_cam_orbit.value; camrotate = cv_cam_rotate.value; camdist = FixedMul(cv_cam_dist.value, mo->scale); - camheight = FixedMul(cv_cam_height.value, FixedMul(player->camerascale, mo->scale)); + camheight = FixedMul(cv_cam_height.value, mo->scale); } else // Camera 2 { @@ -9777,9 +9777,12 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall camorbit = cv_cam2_orbit.value; camrotate = cv_cam2_rotate.value; camdist = FixedMul(cv_cam2_dist.value, mo->scale); - camheight = FixedMul(cv_cam2_height.value, FixedMul(player->camerascale, mo->scale)); + camheight = FixedMul(cv_cam2_height.value, mo->scale); } + if (!(twodlevel || (mo->flags2 & MF2_TWOD)) && !(player->powers[pw_carry] == CR_NIGHTSMODE)) + camheight = FixedMul(camheight, player->camerascale); + #ifdef REDSANALOG if (P_AnalogMove(player) && (player->cmd.buttons & (BT_CAMLEFT|BT_CAMRIGHT)) == (BT_CAMLEFT|BT_CAMRIGHT)) { camstill = true; @@ -9890,9 +9893,10 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall dist <<= 1; } + if (!(twodlevel || (mo->flags2 & MF2_TWOD)) && !(player->powers[pw_carry] == CR_NIGHTSMODE)) + dist = FixedMul(dist, player->camerascale); - - checkdist = (dist = FixedMul(dist, player->camerascale)); + checkdist = dist; if (checkdist < 128*FRACUNIT) checkdist = 128*FRACUNIT; From 50ae50a2a551e4e6efeb7b51464dee8e0575ae85 Mon Sep 17 00:00:00 2001 From: toaster Date: Wed, 27 Nov 2019 12:54:00 +0000 Subject: [PATCH 104/141] Correct tutorialmode case doubling up on camerascale. --- src/p_user.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/p_user.c b/src/p_user.c index ef33584ed..b999f1f72 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -9759,7 +9759,7 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall camorbit = (!stricmp(cv_cam_orbit.defaultvalue, "off")) ? false : true; camrotate = atoi(cv_cam_rotate.defaultvalue); camdist = FixedMul((INT32)(atof(cv_cam_dist.defaultvalue) * FRACUNIT), mo->scale); - camheight = FixedMul((INT32)(atof(cv_cam_height.defaultvalue) * FRACUNIT), FixedMul(player->camerascale, mo->scale)); + camheight = FixedMul((INT32)(atof(cv_cam_height.defaultvalue) * FRACUNIT), mo->scale); } else if (thiscam == &camera) { From 300159143ac238e9b5c416f5125522fd099dd918 Mon Sep 17 00:00:00 2001 From: toaster Date: Wed, 27 Nov 2019 13:37:03 +0000 Subject: [PATCH 105/141] Fix camera not being flipped when camera is stopped due to game design hack reasons (resolves #383). --- src/p_local.h | 1 + src/p_mobj.c | 39 +++++++++++++++++++++++---------------- src/p_user.c | 12 +++++++++++- 3 files changed, 35 insertions(+), 17 deletions(-) diff --git a/src/p_local.h b/src/p_local.h index b718c43f1..646fa70f2 100644 --- a/src/p_local.h +++ b/src/p_local.h @@ -323,6 +323,7 @@ SINT8 P_MobjFlip(mobj_t *mobj); fixed_t P_GetMobjGravity(mobj_t *mo); FUNCMATH boolean P_WeaponOrPanel(mobjtype_t type); +void P_CalcChasePostImg(player_t *player, camera_t *thiscam); boolean P_CameraThinker(player_t *player, camera_t *thiscam, boolean resetcalled); void P_Attract(mobj_t *source, mobj_t *enemy, boolean nightsgrab); diff --git a/src/p_mobj.c b/src/p_mobj.c index c31b88940..74df95cb2 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -3724,17 +3724,10 @@ void P_DestroyRobots(void) } } -// P_CameraThinker -// -// Process the mobj-ish required functions of the camera -boolean P_CameraThinker(player_t *player, camera_t *thiscam, boolean resetcalled) +// the below is chasecam only, if you're curious. check out P_CalcPostImg in p_user.c for first person +void P_CalcChasePostImg(player_t *player, camera_t *thiscam) { - boolean itsatwodlevel = false; postimg_t postimg = postimg_none; - if (twodlevel - || (thiscam == &camera && players[displayplayer].mo && (players[displayplayer].mo->flags2 & MF2_TWOD)) - || (thiscam == &camera2 && players[secondarydisplayplayer].mo && (players[secondarydisplayplayer].mo->flags2 & MF2_TWOD))) - itsatwodlevel = true; if (player->pflags & PF_FLIPCAM && !(player->powers[pw_carry] == CR_NIGHTSMODE) && player->mo->eflags & MFE_VERTICALFLIP) postimg = postimg_flip; @@ -3762,13 +3755,27 @@ boolean P_CameraThinker(player_t *player, camera_t *thiscam, boolean resetcalled postimg = postimg_heat; } - if (postimg != postimg_none) - { - if (splitscreen && player == &players[secondarydisplayplayer]) - postimgtype2 = postimg; - else - postimgtype = postimg; - } + if (postimg == postimg_none) + return; + + if (splitscreen && player == &players[secondarydisplayplayer]) + postimgtype2 = postimg; + else + postimgtype = postimg; +} + +// P_CameraThinker +// +// Process the mobj-ish required functions of the camera +boolean P_CameraThinker(player_t *player, camera_t *thiscam, boolean resetcalled) +{ + boolean itsatwodlevel = false; + if (twodlevel + || (thiscam == &camera && players[displayplayer].mo && (players[displayplayer].mo->flags2 & MF2_TWOD)) + || (thiscam == &camera2 && players[secondarydisplayplayer].mo && (players[secondarydisplayplayer].mo->flags2 & MF2_TWOD))) + itsatwodlevel = true; + + P_CalcChasePostImg(player, thiscam); if (thiscam->momx || thiscam->momy) { diff --git a/src/p_user.c b/src/p_user.c index b999f1f72..6f3981630 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -9665,11 +9665,17 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall fixed_t f1, f2; // We probably shouldn't move the camera if there is no player or player mobj somehow - if (!player || !player->mo || player->playerstate == PST_REBORN) + if (!player || !player->mo) return true; mo = player->mo; + if (player->playerstate == PST_REBORN) + { + P_CalcChasePostImg(player, thiscam); + return true; + } + if (player->exiting) { if (mo->target && mo->target->type == MT_SIGN && mo->target->spawnpoint @@ -9678,7 +9684,10 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall else if ((player->powers[pw_carry] == CR_NIGHTSMODE) && !(player->mo->state >= &states[S_PLAY_NIGHTS_TRANS1] && player->mo->state <= &states[S_PLAY_NIGHTS_TRANS6])) + { + P_CalcChasePostImg(player, thiscam); return true; + } } cameranoclip = (player->powers[pw_carry] == CR_NIGHTSMODE || player->pflags & PF_NOCLIP) || (mo->flags & (MF_NOCLIP|MF_NOCLIPHEIGHT)); // Noclipping player camera noclips too!! @@ -10419,6 +10428,7 @@ boolean P_SpectatorJoinGame(player_t *player) return false; } +// the below is first person only, if you're curious. check out P_CalcChasePostImg in p_mobj.c for chasecam static void P_CalcPostImg(player_t *player) { sector_t *sector = player->mo->subsector->sector; From 2c2169f3c36f96db45de17045076c741de105690 Mon Sep 17 00:00:00 2001 From: toaster Date: Wed, 27 Nov 2019 13:47:38 +0000 Subject: [PATCH 106/141] Change SPR_NFLT default to superised SPR2_FALL (resolves code side of #382). --- src/info.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/info.c b/src/info.c index 7755404a0..45a4c88d9 100644 --- a/src/info.c +++ b/src/info.c @@ -635,7 +635,7 @@ playersprite_t spr2defaults[NUMPLAYERSPRITES] = { 0, // SPR2_TRNS, FF_SPR2SUPER|SPR2_STND, // SPR2_NSTD, - FF_SPR2SUPER|SPR2_FLT , // SPR2_NFLT, + FF_SPR2SUPER|SPR2_FALL, // SPR2_NFLT, 0, // SPR2_NFLY, (will never be referenced unless skin 0 lacks this) SPR2_NFLY, // SPR2_NDRL, FF_SPR2SUPER|SPR2_STUN, // SPR2_NSTN, From 4d4aca1082e8302a7ea22d474741f0a8f4381723 Mon Sep 17 00:00:00 2001 From: toaster Date: Wed, 27 Nov 2019 13:54:13 +0000 Subject: [PATCH 107/141] Change required for Tails' tails to behave like falling sprite. --- src/p_mobj.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index c31b88940..19ad48b90 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -255,7 +255,6 @@ boolean P_SetPlayerMobjState(mobj_t *mobj, statenum_t state) case S_PLAY_WALK: case S_PLAY_SKID: case S_PLAY_FLOAT: - case S_PLAY_NIGHTS_FLOAT: player->panim = PA_WALK; break; case S_PLAY_RUN: @@ -281,6 +280,7 @@ boolean P_SetPlayerMobjState(mobj_t *mobj, statenum_t state) player->panim = PA_SPRING; break; case S_PLAY_FALL: + case S_PLAY_NIGHTS_FLOAT: player->panim = PA_FALL; break; case S_PLAY_FLY: From 41a6cf5d2685508aa535e9badab78c2954541950 Mon Sep 17 00:00:00 2001 From: Louis-Antoine Date: Wed, 27 Nov 2019 17:32:02 +0100 Subject: [PATCH 108/141] Keep counting players as finished even after dying --- src/g_game.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/g_game.c b/src/g_game.c index 2fa52e7c0..340babb10 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -2323,6 +2323,9 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps) outofcoop = players[player].outofcoop; pflags = (players[player].pflags & (PF_FLIPCAM|PF_ANALOGMODE|PF_DIRECTIONCHAR|PF_AUTOBRAKE|PF_TAGIT|PF_GAMETYPEOVER)); + if (!betweenmaps) + pflags |= (players[player].pflags & PF_FINISHED); + // As long as we're not in multiplayer, carry over cheatcodes from map to map if (!(netgame || multiplayer)) pflags |= (players[player].pflags & (PF_GODMODE|PF_NOCLIP|PF_INVIS)); From 3f5b91d11bd80166313d4f5425e6ef7f3265e023 Mon Sep 17 00:00:00 2001 From: toaster Date: Thu, 28 Nov 2019 19:10:59 +0000 Subject: [PATCH 109/141] Update ending cutscene(s) to linger for an additional two seconds, so that the music can properly fade out (resolves #384). --- src/f_finale.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/f_finale.c b/src/f_finale.c index 8c63def18..b8c9dd5f2 100644 --- a/src/f_finale.c +++ b/src/f_finale.c @@ -1625,6 +1625,7 @@ void F_GameEvaluationTicker(void) // ========== #define INFLECTIONPOINT (6*TICRATE) +#define STOPPINGPOINT (14*TICRATE) #define SPARKLLOOPTIME 15 // must be odd void F_StartEnding(void) @@ -1716,7 +1717,7 @@ void F_StartEnding(void) void F_EndingTicker(void) { - if (++finalecount > INFLECTIONPOINT*2) + if (++finalecount > STOPPINGPOINT) { F_StartCredits(); wipetypepre = INT16_MAX; @@ -2112,26 +2113,26 @@ void F_EndingDrawer(void) if (finalecount < 10) trans = (10-finalecount)/2; - else if (finalecount > (2*INFLECTIONPOINT) - 20) + else if (finalecount > STOPPINGPOINT - 20) { - trans = 10 + (finalecount/2) - INFLECTIONPOINT; + trans = 10 + (finalecount - STOPPINGPOINT)/2; donttouch = true; } - if (trans != 10) + if (trans < 10) { //colset(linkmap, 164, 165, 169); -- the ideal purple colour to represent a clicked in-game link, but not worth it just for a soundtest-controlled secret V_DrawCenteredString(BASEVIDWIDTH/2, 8, V_ALLOWLOWERCASE|(trans<'|(trans<= (2*INFLECTIONPOINT)-TICRATE) ? V_PURPLEMAP : V_BLUEMAP)|(trans<"); + V_DrawString(40, ((finalecount == STOPPINGPOINT-(20+TICRATE)) ? 1 : 0)+BASEVIDHEIGHT-16, ((timesBeaten || finalecount >= STOPPINGPOINT-TICRATE) ? V_PURPLEMAP : V_BLUEMAP)|(trans<"); } - if (finalecount > (2*INFLECTIONPOINT)-(20+(2*TICRATE))) + if (finalecount > STOPPINGPOINT-(20+(2*TICRATE))) { INT32 trans2 = abs((5*FINECOSINE((FixedAngle((finalecount*5)<>ANGLETOFINESHIFT & FINEMASK)))>>FRACBITS)+2; if (!donttouch) { - trans = 10 + ((2*INFLECTIONPOINT)-(20+(2*TICRATE))) - finalecount; + trans = 10 + (STOPPINGPOINT-(20+(2*TICRATE))) - finalecount; if (trans > trans2) trans2 = trans; } From d73c70955675bb5ce177bbac996c88b25ece9e49 Mon Sep 17 00:00:00 2001 From: James R Date: Thu, 28 Nov 2019 12:10:57 -0800 Subject: [PATCH 110/141] Holy shit --- src/p_spec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/p_spec.c b/src/p_spec.c index ed5034a87..605638bd3 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -2737,7 +2737,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec) // Play the sound without origin for anyone, as long as they're inside tagged areas. else { - UINT i = 0; + UINT8 i = 0; mobj_t* camobj = players[displayplayer].mo; ffloor_t *rover; boolean foundit = false; From 76eae5c2376ecc9727f7e2b755fb50c00a0e7a40 Mon Sep 17 00:00:00 2001 From: toaster Date: Fri, 29 Nov 2019 15:25:55 +0000 Subject: [PATCH 111/141] Fix screen buffer not being cleared if a map command is used during the intermission. --- src/g_game.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/g_game.c b/src/g_game.c index 340babb10..b754e88ae 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -4135,6 +4135,8 @@ void G_InitNew(UINT8 pultmode, const char *mapname, boolean resetplayer, boolean { INT32 i; + Y_CleanupScreenBuffer(); + if (paused) { paused = false; From d74991ded1e25ceac3efc1a88159e2b34728b2c2 Mon Sep 17 00:00:00 2001 From: toaster Date: Fri, 29 Nov 2019 15:58:37 +0000 Subject: [PATCH 112/141] Don't flip P1 of a two-character save card, for aesthetique reasons. --- src/m_menu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/m_menu.c b/src/m_menu.c index 7c635a137..edba61f30 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -7832,7 +7832,7 @@ static void M_DrawLoadGameData(void) Z_Free(colormap); tempx -= (20< Date: Fri, 29 Nov 2019 19:11:17 +0000 Subject: [PATCH 113/141] Prevent exit sectors having any effect whatsoever outside of platform gametypes (resolve #396). --- src/p_spec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/p_spec.c b/src/p_spec.c index 605638bd3..cf5ac0afd 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -4674,7 +4674,7 @@ DoneSection2: } case 2: // Special stage GOAL sector / Exit Sector / CTF Flag Return - if (player->bot) + if (player->bot || !G_PlatformGametype()) break; if (!(maptol & TOL_NIGHTS) && G_IsSpecialStage(gamemap) && player->nightstime > 6) { From 0f21a18159c5095acf6dbc2af0c4d308f6983d63 Mon Sep 17 00:00:00 2001 From: toaster Date: Fri, 29 Nov 2019 19:18:05 +0000 Subject: [PATCH 114/141] Give the Robo-Hood a cute jump sound whenever it's fleeing you. --- src/info.c | 2 +- src/p_enemy.c | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/info.c b/src/info.c index 45a4c88d9..e5dba9e54 100644 --- a/src/info.c +++ b/src/info.c @@ -4692,7 +4692,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_ROBOHOOD_STAND, // seestate sfx_None, // seesound TICRATE, // reactiontime - sfx_None, // attacksound + sfx_ngjump, // attacksound S_NULL, // painstate 0, // painchance sfx_None, // painsound diff --git a/src/p_enemy.c b/src/p_enemy.c index 785d19fb4..6883257fa 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -1731,6 +1731,7 @@ void A_HoodThink(mobj_t *actor) // Target dangerously close to robohood, retreat then. if ((dm < 256<info->attacksound); P_SetMobjState(actor, actor->info->raisestate); return; } From 0c20a68c2369eaa4c4c1755cf853be1167b7c459 Mon Sep 17 00:00:00 2001 From: toaster Date: Fri, 29 Nov 2019 20:04:14 +0000 Subject: [PATCH 115/141] Make Cobalt-picked sound effect audible from far away, like the original. --- src/sounds.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sounds.c b/src/sounds.c index 596ed74f2..48f929b73 100644 --- a/src/sounds.c +++ b/src/sounds.c @@ -528,7 +528,7 @@ sfxinfo_t S_sfx[NUMSFX] = {"s3k83", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Collapsing"}, {"s3k84", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Powering up"}, {"s3k85", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Powering down"}, - {"s3k86", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Alarm"}, + {"s3k86", false, 128, 8, -1, NULL, 0, -1, -1, LUMPERROR, "Alarm"}, {"s3k87", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Bounce"}, {"s3k88", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Metallic squeak"}, {"s3k89", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Advanced tech"}, From 2aafcf9e5ba14ddf26eb3a5916b966f264b8b97a Mon Sep 17 00:00:00 2001 From: toaster Date: Fri, 29 Nov 2019 20:35:59 +0000 Subject: [PATCH 116/141] Match final countdown timer to timer (resolves #400). --- src/st_stuff.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/st_stuff.c b/src/st_stuff.c index 8b3ceac9d..954ba022d 100644 --- a/src/st_stuff.c +++ b/src/st_stuff.c @@ -696,9 +696,9 @@ static void ST_drawTime(void) // Counting down the hidetime? if ((gametype == GT_TAG || gametype == GT_HIDEANDSEEK) && (stplyr->realtime <= (hidetime*TICRATE))) { - tics = (hidetime*TICRATE - stplyr->realtime); - if (tics < 3*TICRATE) - ST_drawRaceNum(tics); + tics = (hidetime*TICRATE + (TICRATE-1) - stplyr->realtime); + if ((tics+1-TICRATE) < 3*TICRATE) + ST_drawRaceNum(tics+1-TICRATE); downwards = true; } else @@ -713,8 +713,8 @@ static void ST_drawTime(void) if (timelimitintics >= stplyr->realtime) { tics = (timelimitintics + (TICRATE-1) - stplyr->realtime); - if (tics < 3*TICRATE) - ST_drawRaceNum(tics); + if ((tics+1-TICRATE) && (tics+1-TICRATE) < 3*TICRATE) + ST_drawRaceNum(tics+1-TICRATE); } else // Overtime! tics = 0; From 0f287c9b3021197bc44ff3256e8c69d89c87bec3 Mon Sep 17 00:00:00 2001 From: toaster Date: Fri, 29 Nov 2019 20:41:13 +0000 Subject: [PATCH 117/141] Actually, wait; this is way better and cleaner. --- src/st_stuff.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/st_stuff.c b/src/st_stuff.c index 954ba022d..3a8a4d2f1 100644 --- a/src/st_stuff.c +++ b/src/st_stuff.c @@ -696,9 +696,10 @@ static void ST_drawTime(void) // Counting down the hidetime? if ((gametype == GT_TAG || gametype == GT_HIDEANDSEEK) && (stplyr->realtime <= (hidetime*TICRATE))) { - tics = (hidetime*TICRATE + (TICRATE-1) - stplyr->realtime); - if ((tics+1-TICRATE) < 3*TICRATE) - ST_drawRaceNum(tics+1-TICRATE); + tics = (hidetime*TICRATE - stplyr->realtime); + if (tics < 3*TICRATE) + ST_drawRaceNum(tics); + tics += (TICRATE-1); // match the race num downwards = true; } else @@ -710,11 +711,12 @@ static void ST_drawTime(void) // Time limit? if (gametype != GT_COOP && gametype != GT_RACE && gametype != GT_COMPETITION && cv_timelimit.value && timelimitintics > 0) { - if (timelimitintics >= stplyr->realtime) + if (timelimitintics > stplyr->realtime) { - tics = (timelimitintics + (TICRATE-1) - stplyr->realtime); - if ((tics+1-TICRATE) && (tics+1-TICRATE) < 3*TICRATE) - ST_drawRaceNum(tics+1-TICRATE); + tics = (timelimitintics - stplyr->realtime); + if (tics < 3*TICRATE) + ST_drawRaceNum(tics); + tics += (TICRATE-1); // match the race num } else // Overtime! tics = 0; From e3c8f7bcd371e7ed87fbdd59a29189b019e8ee3a Mon Sep 17 00:00:00 2001 From: toaster Date: Fri, 29 Nov 2019 21:55:25 +0000 Subject: [PATCH 118/141] This Black Eggman? ***YEET*** Resolve issue #399 in the silliest way possible: by having Brak be yeeted off the platform by an explosion at his feet, preventing the downed mech from being anywhere near the escape pod. --- src/info.c | 12 ++++++------ src/p_enemy.c | 31 ++++++++++++++++++++++--------- src/p_mobj.c | 21 +++++++++++++++++++++ 3 files changed, 49 insertions(+), 15 deletions(-) diff --git a/src/info.c b/src/info.c index 45a4c88d9..7ebf23176 100644 --- a/src/info.c +++ b/src/info.c @@ -1619,13 +1619,13 @@ state_t states[NUMSTATES] = {SPR_BRAK, 18, 0, {A_CheckHealth}, 3, S_CYBRAKDEMON_PAIN3, S_CYBRAKDEMON_CHOOSE_ATTACK1}, // S_CYBRAKDEMON_PAIN2 {SPR_BRAK, 18, 0, {A_LinedefExecute}, LE_PINCHPHASE, 0, S_CYBRAKDEMON_CHOOSE_ATTACK1}, // S_CYBRAKDEMON_PAIN3 {SPR_BRAK, 18, 1, {A_Repeat}, 1, S_CYBRAKDEMON_DIE1, S_CYBRAKDEMON_DIE2}, // S_CYBRAKDEMON_DIE1 - {SPR_BRAK, 18, 2, {A_BossScream}, 0, 0, S_CYBRAKDEMON_DIE3}, // S_CYBRAKDEMON_DIE2 + {SPR_BRAK, 18, 2, {A_BossScream}, 2, 0, S_CYBRAKDEMON_DIE3}, // S_CYBRAKDEMON_DIE2 {SPR_BRAK, 18, 0, {A_Repeat}, 52, S_CYBRAKDEMON_DIE2, S_CYBRAKDEMON_DIE4}, // S_CYBRAKDEMON_DIE3 - {SPR_BRAK, 13, 14, {A_PlaySound}, sfx_bedie2, 0, S_CYBRAKDEMON_DIE5}, // S_CYBRAKDEMON_DIE4 - {SPR_BRAK, 14, 7, {NULL}, 0, 0, S_CYBRAKDEMON_DIE6}, // S_CYBRAKDEMON_DIE5 - {SPR_BRAK, 15, 5, {NULL}, 0, 0, S_CYBRAKDEMON_DIE7}, // S_CYBRAKDEMON_DIE6 - {SPR_BRAK, 16, 3, {A_PlaySound}, sfx_bgxpld, 0, S_CYBRAKDEMON_DIE8}, // S_CYBRAKDEMON_DIE7 - {SPR_BRAK, 17, -1, {A_BossDeath}, 0, 0, S_NULL}, // S_CYBRAKDEMON_DIE8 + {SPR_BRAK, 13, 34, {A_BossDeath}, 0, 0, S_CYBRAKDEMON_DIE5}, // S_CYBRAKDEMON_DIE4 + {SPR_BRAK, 14, 34, {NULL}, 0, 0, S_CYBRAKDEMON_DIE6}, // S_CYBRAKDEMON_DIE5 + {SPR_BRAK, 15, 34, {NULL}, 0, 0, S_CYBRAKDEMON_DIE7}, // S_CYBRAKDEMON_DIE6 + {SPR_BRAK, 16, 34, {NULL}, 0, 0, S_CYBRAKDEMON_DIE8}, // S_CYBRAKDEMON_DIE7 + {SPR_BRAK, 17, 34, {NULL}, sfx_befall, 0, S_CYBRAKDEMON_DIE8}, // S_CYBRAKDEMON_DIE8 {SPR_BRAK, 0, 0, {A_SetObjectFlags}, MF_SPECIAL|MF_SHOOTABLE, 2, S_CYBRAKDEMON_IDLE}, // S_CYBRAKDEMON_DEINVINCIBLERIZE {SPR_BRAK, 0, 0, {A_SetObjectFlags}, MF_SPECIAL|MF_SHOOTABLE, 1, S_CYBRAKDEMON_IDLE}, // S_CYBRAKDEMON_INVINCIBLERIZE diff --git a/src/p_enemy.c b/src/p_enemy.c index 785d19fb4..9aecd9a27 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -3474,18 +3474,14 @@ void A_BossScream(mobj_t *actor) if (LUA_CallAction("A_BossScream", actor)) return; #endif - switch (locvar1) + if (locvar1 & 1) { - default: - case 0: actor->movecount += 4*16; actor->movecount %= 360; fa = (FixedAngle(actor->movecount*FRACUNIT)>>ANGLETOFINESHIFT) & FINEMASK; - break; - case 1: - fa = (FixedAngle(P_RandomKey(360)*FRACUNIT)>>ANGLETOFINESHIFT) & FINEMASK; - break; } + else + fa = (FixedAngle(P_RandomKey(360)*FRACUNIT)>>ANGLETOFINESHIFT) & FINEMASK; x = actor->x + FixedMul(FINECOSINE(fa),actor->radius); y = actor->y + FixedMul(FINESINE(fa),actor->radius); @@ -3495,7 +3491,9 @@ void A_BossScream(mobj_t *actor) else explodetype = (mobjtype_t)locvar2; - if (actor->eflags & MFE_VERTICALFLIP) + if (locvar1 & 2) + z = actor->z + (P_RandomKey((actor->height - mobjinfo[explodetype].height)>>FRACBITS)<eflags & MFE_VERTICALFLIP) z = actor->z + actor->height - mobjinfo[explodetype].height - FixedMul((P_RandomByte()<<(FRACBITS-2)) - 8*FRACUNIT, actor->scale); else z = actor->z + FixedMul((P_RandomByte()<<(FRACBITS-2)) - 8*FRACUNIT, actor->scale); @@ -4048,7 +4046,6 @@ bossjustdie: switch (mo->type) { case MT_BLACKEGGMAN: - case MT_CYBRAKDEMON: { mo->flags |= MF_NOCLIP; mo->flags &= ~MF_SPECIAL; @@ -4056,6 +4053,22 @@ bossjustdie: S_StartSound(NULL, sfx_befall); break; } + case MT_CYBRAKDEMON: + { + mo->flags |= MF_NOCLIP; + mo->flags &= ~(MF_SPECIAL|MF_NOGRAVITY|MF_NOCLIPHEIGHT); + + S_StartSound(NULL, sfx_bedie2); + if (mo->spawnpoint && !(mo->spawnpoint->options & MTF_EXTRA)) + { + P_SpawnMobjFromMobj(mo, 0, 0, 0, MT_CYBRAKDEMON_VILE_EXPLOSION); + mo->z += P_MobjFlip(mo); + P_SetObjectMomZ(mo, 12*FRACUNIT, false); + P_InstaThrust(mo, R_PointToAngle2(0, 0, mo->x, mo->y), 14*FRACUNIT); + S_StartSound(mo, sfx_bgxpld); + } + break; + } case MT_KOOPA: { junk.tag = LE_KOOPA; diff --git a/src/p_mobj.c b/src/p_mobj.c index 6a250a783..8b1066941 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -1572,6 +1572,7 @@ fixed_t P_GetMobjGravity(mobj_t *mo) } break; case MT_WATERDROP: + case MT_CYBRAKDEMON: gravityadd >>= 1; default: break; @@ -8191,6 +8192,26 @@ void P_MobjThinker(mobj_t *mobj) else if (mobj->target) P_InstaThrust(mobj, mobj->angle, FixedMul(12*FRACUNIT, mobj->scale)); } + if (mobj->type == MT_CYBRAKDEMON && !mobj->health) + { + if (!(mobj->tics & 1)) + { + var1 = 2; + var2 = 0; + A_BossScream(mobj); + } + if (mobj->momz && mobj->z+mobj->momz <= mobj->floorz) + { + if (P_CheckDeathPitCollide(mobj)) + { + P_RemoveMobj(mobj); + return; + } + S_StartSound(mobj, sfx_befall); + if (mobj->state != states+S_CYBRAKDEMON_DIE8) + P_SetMobjState(mobj, S_CYBRAKDEMON_DIE8); + } + } } else if (mobj->health <= 0) // Dead things think differently than the living. switch (mobj->type) From cd2cc43bc46a379d7fa050f7b94e5aea1293787b Mon Sep 17 00:00:00 2001 From: toaster Date: Fri, 29 Nov 2019 21:59:06 +0000 Subject: [PATCH 119/141] Edit config to account for new behaviour (plus add gold mode for the Eggman Statue, which I forgot to add earlier). --- extras/conf/SRB2-22.cfg | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/extras/conf/SRB2-22.cfg b/extras/conf/SRB2-22.cfg index 7a8f31d5a..0c82a61ce 100644 --- a/extras/conf/SRB2-22.cfg +++ b/extras/conf/SRB2-22.cfg @@ -3626,7 +3626,7 @@ thingtypes } 206 { - title = "Brak Eggman (Old)"; + title = "Black Eggman (Old)"; sprite = "BRAKB1"; width = 48; height = 160; @@ -3651,10 +3651,11 @@ thingtypes } 209 { - title = "Brak Eggman"; + title = "Black Eggman"; sprite = "BRAK01"; width = 48; height = 160; + flags1text = "[1] No origin-fling death"; flags4text = "[4] End level on death"; flags8text = "[8] Electric barrier"; } @@ -4912,6 +4913,7 @@ thingtypes sprite = "ESTAA1"; width = 32; height = 240; + flags1text = "[1] Solid gold"; flags4text = "[4] Slides when pushed"; flags8text = "[8] Not pushable"; } From bd5b30b54e0eb7f7723e6077efb1f014f1c81cf1 Mon Sep 17 00:00:00 2001 From: lachwright Date: Sat, 30 Nov 2019 12:31:23 +0800 Subject: [PATCH 120/141] Make INTRO4 display at high res --- src/f_finale.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/f_finale.c b/src/f_finale.c index 210adaca8..f089b4ead 100644 --- a/src/f_finale.c +++ b/src/f_finale.c @@ -540,7 +540,6 @@ static void F_IntroDrawScene(void) break; case 4: background = W_CachePatchName("INTRO4", PU_CACHE); - highres = false; break; case 5: if (intro_curtime >= 5*TICRATE) From 987aa7a5be5bbae93bd075b95542ce93eb049e01 Mon Sep 17 00:00:00 2001 From: toaster Date: Sat, 30 Nov 2019 05:07:33 -0500 Subject: [PATCH 121/141] (Temporary?) config name reversion to allow brakyeet merger --- extras/conf/SRB2-22.cfg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extras/conf/SRB2-22.cfg b/extras/conf/SRB2-22.cfg index 0c82a61ce..e31402a6c 100644 --- a/extras/conf/SRB2-22.cfg +++ b/extras/conf/SRB2-22.cfg @@ -3626,7 +3626,7 @@ thingtypes } 206 { - title = "Black Eggman (Old)"; + title = "Brak Eggman (Old)"; sprite = "BRAKB1"; width = 48; height = 160; @@ -3651,7 +3651,7 @@ thingtypes } 209 { - title = "Black Eggman"; + title = "Brak Eggman"; sprite = "BRAK01"; width = 48; height = 160; From bffeb25e5b17d56c017b2c5345a86894a813f364 Mon Sep 17 00:00:00 2001 From: toaster Date: Sat, 30 Nov 2019 10:12:45 +0000 Subject: [PATCH 122/141] Discovered this was wrong when working on the config for brakyeet, MS objected to the hack so he's updating the tutorial map accordingly. --- src/p_mobj.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index 6a250a783..b1f82627d 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -11977,7 +11977,7 @@ You should think about modifying the deathmatch starts to take full advantage of skyboxviewpnts[mthing->extrainfo] = mobj; break; case MT_EGGSTATUE: - if (tutorialmode != (mthing->options & MTF_OBJECTSPECIAL)) + if (mthing->options & MTF_EXTRA) { mobj->color = SKINCOLOR_GOLD; mobj->colorized = true; From d45334857733e56ee4caf3e575503f132bfbadaa Mon Sep 17 00:00:00 2001 From: toaster Date: Sat, 30 Nov 2019 10:14:59 +0000 Subject: [PATCH 123/141] Gold statue in config. --- extras/conf/SRB2-22.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/extras/conf/SRB2-22.cfg b/extras/conf/SRB2-22.cfg index 7a8f31d5a..39cfb70d0 100644 --- a/extras/conf/SRB2-22.cfg +++ b/extras/conf/SRB2-22.cfg @@ -4912,6 +4912,7 @@ thingtypes sprite = "ESTAA1"; width = 32; height = 240; + flags1text = "[1] Solid gold"; flags4text = "[4] Slides when pushed"; flags8text = "[8] Not pushable"; } From 72525461007f70d3e203c3e823d76da0843a79a7 Mon Sep 17 00:00:00 2001 From: toaster Date: Sat, 30 Nov 2019 10:29:51 +0000 Subject: [PATCH 124/141] Fix the flung Brak not being removed on deathpits. --- src/p_mobj.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index 5ab11ba2c..2bd3950a9 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -8200,13 +8200,13 @@ void P_MobjThinker(mobj_t *mobj) var2 = 0; A_BossScream(mobj); } + if (P_CheckDeathPitCollide(mobj)) + { + P_RemoveMobj(mobj); + return; + } if (mobj->momz && mobj->z+mobj->momz <= mobj->floorz) { - if (P_CheckDeathPitCollide(mobj)) - { - P_RemoveMobj(mobj); - return; - } S_StartSound(mobj, sfx_befall); if (mobj->state != states+S_CYBRAKDEMON_DIE8) P_SetMobjState(mobj, S_CYBRAKDEMON_DIE8); From d6ed463227cd431649f63f86e8e3bc523d62e176 Mon Sep 17 00:00:00 2001 From: toaster Date: Sat, 30 Nov 2019 10:31:18 +0000 Subject: [PATCH 125/141] Make the fling always occur, and only have the horizontal momentum apply if not MTF_EXTRA. --- src/p_enemy.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/p_enemy.c b/src/p_enemy.c index 9aecd9a27..9942862e9 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -4059,14 +4059,12 @@ bossjustdie: mo->flags &= ~(MF_SPECIAL|MF_NOGRAVITY|MF_NOCLIPHEIGHT); S_StartSound(NULL, sfx_bedie2); + P_SpawnMobjFromMobj(mo, 0, 0, 0, MT_CYBRAKDEMON_VILE_EXPLOSION); + mo->z += P_MobjFlip(mo); + P_SetObjectMomZ(mo, 12*FRACUNIT, false); + S_StartSound(mo, sfx_bgxpld); if (mo->spawnpoint && !(mo->spawnpoint->options & MTF_EXTRA)) - { - P_SpawnMobjFromMobj(mo, 0, 0, 0, MT_CYBRAKDEMON_VILE_EXPLOSION); - mo->z += P_MobjFlip(mo); - P_SetObjectMomZ(mo, 12*FRACUNIT, false); P_InstaThrust(mo, R_PointToAngle2(0, 0, mo->x, mo->y), 14*FRACUNIT); - S_StartSound(mo, sfx_bgxpld); - } break; } case MT_KOOPA: From 41dc496551525568cd46036519783d4c3add4d2c Mon Sep 17 00:00:00 2001 From: lachwright Date: Sat, 30 Nov 2019 19:30:58 +0800 Subject: [PATCH 126/141] Restore spindash sounds to DSSPNDSH --- src/p_user.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/p_user.c b/src/p_user.c index 37f1a5ec5..eaca94328 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -4623,7 +4623,7 @@ static void P_DoSpinAbility(player_t *player, ticcmd_t *cmd) player->dashspeed = player->mindash; P_SetPlayerMobjState(player->mo, S_PLAY_SPINDASH); if (!player->spectator) - S_StartSound(player->mo, sfx_s3kab); // Make the rev sound! Previously sfx_spndsh. + S_StartSound(player->mo, sfx_spndsh); // Make the rev sound! } // Revving else if ((cmd->buttons & BT_USE) && (player->pflags & PF_STARTDASH)) @@ -4641,7 +4641,7 @@ static void P_DoSpinAbility(player_t *player, ticcmd_t *cmd) fixed_t soundcalculation = chargecalculation; player->dashspeed += FRACUNIT; if (!player->spectator && soundcalculation != chargecalculation) - S_StartSound(player->mo, sfx_s3kab); // Make the rev sound! Previously sfx_spndsh. + S_StartSound(player->mo, sfx_spndsh); // Make the rev sound! #undef chargecalculation } if (player->revitem && !(leveltime % 5)) // Now spawn the color thok circle. From 65269d78cd340e3d68f38e5b7e3e140ef5dae6a8 Mon Sep 17 00:00:00 2001 From: lachwright Date: Sat, 30 Nov 2019 22:07:21 +0800 Subject: [PATCH 127/141] Fix intro's BRITEGG/DARKEGG scale --- src/f_finale.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/f_finale.c b/src/f_finale.c index f089b4ead..318668b59 100644 --- a/src/f_finale.c +++ b/src/f_finale.c @@ -720,7 +720,7 @@ static void F_IntroDrawScene(void) else background = W_CachePatchName("DARKEGG1", PU_CACHE); - V_DrawScaledPatch(0, 0, 0, background); + V_DrawSmallScaledPatch(0, 0, 0, background); } else if (timetonext > 3*TICRATE && timetonext < 4*TICRATE) { @@ -729,7 +729,7 @@ static void F_IntroDrawScene(void) else background = W_CachePatchName("DARKEGG2", PU_CACHE); - V_DrawScaledPatch(0, 0, 0, background); + V_DrawSmallScaledPatch(0, 0, 0, background); } else if (timetonext > 1*TICRATE && timetonext < 2*TICRATE) { @@ -738,7 +738,7 @@ static void F_IntroDrawScene(void) else background = W_CachePatchName("DARKEGG3", PU_CACHE); - V_DrawScaledPatch(0, 0, 0, background); + V_DrawSmallScaledPatch(0, 0, 0, background); } else { From 390d40ba6d8a33c37598e25dee1a902569dd455e Mon Sep 17 00:00:00 2001 From: toaster Date: Sat, 30 Nov 2019 14:37:21 +0000 Subject: [PATCH 128/141] ...why is Metal overwriting his movecount to spawn explosions? --- src/p_mobj.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index 2bd3950a9..d1ff7ae36 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -6001,7 +6001,7 @@ static void P_Boss9Thinker(mobj_t *mobj) if (mobj->health <= mobj->info->damage && mobj->fuse && !(mobj->fuse%TICRATE)) { - var1 = 1; + var1 = 0; var2 = 0; A_BossScream(mobj); } From 4f380175987a0a9d85bcf0cb3290552b93b474db Mon Sep 17 00:00:00 2001 From: toaster Date: Sat, 30 Nov 2019 14:56:43 +0000 Subject: [PATCH 129/141] Wait, no, I'm an idiot. --- src/p_enemy.c | 8 ++++---- src/p_mobj.c | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/p_enemy.c b/src/p_enemy.c index 9942862e9..1e9a2b0db 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -3457,8 +3457,8 @@ void A_BossZoom(mobj_t *actor) // Description: Spawns explosions and plays appropriate sounds around the defeated boss. // // var1: -// 0 - Use movecount to spawn explosions evenly -// 1 - Use P_Random to spawn explosions at complete random +// & 1 - Use P_Random to spawn explosions at complete random +// & 2 - Use entire vertical range of object to spawn // var2 = Object to spawn. Default is MT_SONIC3KBOSSEXPLODE. // void A_BossScream(mobj_t *actor) @@ -3475,13 +3475,13 @@ void A_BossScream(mobj_t *actor) return; #endif if (locvar1 & 1) + fa = (FixedAngle(P_RandomKey(360)*FRACUNIT)>>ANGLETOFINESHIFT) & FINEMASK; + else { actor->movecount += 4*16; actor->movecount %= 360; fa = (FixedAngle(actor->movecount*FRACUNIT)>>ANGLETOFINESHIFT) & FINEMASK; } - else - fa = (FixedAngle(P_RandomKey(360)*FRACUNIT)>>ANGLETOFINESHIFT) & FINEMASK; x = actor->x + FixedMul(FINECOSINE(fa),actor->radius); y = actor->y + FixedMul(FINESINE(fa),actor->radius); diff --git a/src/p_mobj.c b/src/p_mobj.c index d1ff7ae36..2bd3950a9 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -6001,7 +6001,7 @@ static void P_Boss9Thinker(mobj_t *mobj) if (mobj->health <= mobj->info->damage && mobj->fuse && !(mobj->fuse%TICRATE)) { - var1 = 0; + var1 = 1; var2 = 0; A_BossScream(mobj); } From cfa49f72efa861408339fb906da4b6deb33b9727 Mon Sep 17 00:00:00 2001 From: toaster Date: Sat, 30 Nov 2019 15:28:25 +0000 Subject: [PATCH 130/141] Remove tracer nulling, likely a leftover from when P_LookForEnemies set tracer directly. --- src/p_user.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/p_user.c b/src/p_user.c index 37f1a5ec5..99d8734b7 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -4738,7 +4738,6 @@ static void P_DoSpinAbility(player_t *player, ticcmd_t *cmd) player->drawangle = player->mo->angle; #undef zpos - P_SetTarget(&player->mo->tracer, NULL); player->mo->momx >>= 1; player->mo->momy >>= 1; player->pflags |= PF_USEDOWN; From 51a5f918e9ae150cea1b69aa5378db523df94599 Mon Sep 17 00:00:00 2001 From: toaster Date: Sat, 30 Nov 2019 15:52:41 +0000 Subject: [PATCH 131/141] Change the order of operations such that savedata info is loaded before mapthings are spawned, so that if you have all the emeralds, the emerald objects won't spawn in BCZ2 if you use the SP savefile's level select to go to it directly. --- src/p_setup.c | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/src/p_setup.c b/src/p_setup.c index 2216334e7..47262ec5a 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -2862,6 +2862,17 @@ boolean P_SetupLevel(boolean skipprecip) loadprecip = 0; loademblems = 0; } + else if (savedata.lives > 0) + { + numgameovers = savedata.numgameovers; + players[consoleplayer].continues = savedata.continues; + players[consoleplayer].lives = savedata.lives; + players[consoleplayer].score = savedata.score; + if ((botingame = ((botskin = savedata.botskin) != 0))) + botcolor = skins[botskin-1].prefcolor; + emeralds = savedata.emeralds; + savedata.lives = 0; + } // internal game map maplumpname = G_BuildMapName(gamemap); @@ -3225,18 +3236,6 @@ boolean P_SetupLevel(boolean skipprecip) lastmaploaded = gamemap; // HAS to be set after saving!! - if (savedata.lives > 0) - { - numgameovers = savedata.numgameovers; - players[consoleplayer].continues = savedata.continues; - players[consoleplayer].lives = savedata.lives; - players[consoleplayer].score = savedata.score; - if ((botingame = ((botskin = savedata.botskin) != 0))) - botcolor = skins[botskin-1].prefcolor; - emeralds = savedata.emeralds; - savedata.lives = 0; - } - if (loadprecip) // uglier hack { // to make a newly loaded level start on the second frame. INT32 buf = gametic % BACKUPTICS; From 728c08d70504aa118366a1ce962fceb7cb16469a Mon Sep 17 00:00:00 2001 From: mazmazz Date: Sat, 30 Nov 2019 11:53:45 -0500 Subject: [PATCH 132/141] Clean up music error messages --- src/s_sound.c | 26 +++++++------------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/src/s_sound.c b/src/s_sound.c index 2f88349f1..3fb5e8ab0 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -2095,21 +2095,8 @@ static lumpnum_t S_GetMusicLumpNum(const char *mname) return W_GetNumForName(va("o_%s", mname)); else if (!S_MIDIMusicDisabled() && S_MIDIExists(mname)) return W_GetNumForName(va("d_%s", mname)); - else if (S_DigMusicDisabled() && S_DigExists(mname)) - { - //CONS_Alert(CONS_NOTICE, "Digital music is disabled!\n"); - return LUMPERROR; - } - else if (S_MIDIMusicDisabled() && S_MIDIExists(mname)) - { - //CONS_Alert(CONS_NOTICE, "MIDI music is disabled!\n"); - return LUMPERROR; - } else - { - CONS_Alert(CONS_ERROR, M_GetText("Music lump %.6s not found!\n"), mname); return LUMPERROR; - } } static boolean S_LoadMusic(const char *mname) @@ -2123,7 +2110,10 @@ static boolean S_LoadMusic(const char *mname) mlumpnum = S_GetMusicLumpNum(mname); if (mlumpnum == LUMPERROR) + { + CONS_Alert(CONS_ERROR, "Music %.6s could not be loaded: lump not found!\n", mname); return false; + } // load & register it mdata = W_CacheLumpNum(mlumpnum, PU_MUSIC); @@ -2148,7 +2138,10 @@ static boolean S_LoadMusic(const char *mname) return true; } else + { + CONS_Alert(CONS_ERROR, "Music %.6s could not be loaded: engine failure!\n", mname); return false; + } } static void S_UnloadMusic(void) @@ -2173,6 +2166,7 @@ static boolean S_PlayMusic(boolean looping, UINT32 fadeinms) if ((!fadeinms && !I_PlaySong(looping)) || (fadeinms && !I_FadeInPlaySong(fadeinms, looping))) { + CONS_Alert(CONS_ERROR, "Music %.6s could not be played: engine failure!\n", music_name); S_UnloadMusic(); return false; } @@ -2249,19 +2243,13 @@ void S_ChangeMusicEx(const char *mmusic, UINT16 mflags, boolean looping, UINT32 S_StopMusic(); if (!S_LoadMusic(newmusic)) - { - CONS_Alert(CONS_ERROR, "Music %.6s could not be loaded!\n", newmusic); return; - } music_flags = mflags; music_looping = looping; if (!S_PlayMusic(looping, fadeinms)) - { - CONS_Alert(CONS_ERROR, "Music %.6s could not be played!\n", newmusic); return; - } if (position) I_SetSongPosition(position); From 562dfb89068dfc647b9254eabd6e5b3453121aee Mon Sep 17 00:00:00 2001 From: toaster Date: Sat, 30 Nov 2019 16:54:51 +0000 Subject: [PATCH 133/141] Attempt to detect Tailsbot and Sonic spawning at the same coords and restrict some undesirable stuff happening, just in case we miss any situations (or for the sake of mods). --- src/b_bot.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/b_bot.c b/src/b_bot.c index 895c8d18d..2a546b119 100644 --- a/src/b_bot.c +++ b/src/b_bot.c @@ -56,7 +56,7 @@ static inline void B_BuildTailsTiccmd(mobj_t *sonic, mobj_t *tails, ticcmd_t *cm fixed_t dist = P_AproxDistance(sonic->x - tails->x, sonic->y - tails->y); fixed_t zdist = flip * (sonic->z - tails->z); - angle_t ang = R_PointToAngle2(tails->x, tails->y, sonic->x, sonic->y); + angle_t ang = sonic->angle; fixed_t pmom = P_AproxDistance(sonic->momx, sonic->momy); fixed_t bmom = P_AproxDistance(tails->momx, tails->momy); fixed_t followmax = 128 * 8 * scale; // Max follow distance before AI begins to enter "panic" state @@ -65,6 +65,10 @@ static inline void B_BuildTailsTiccmd(mobj_t *sonic, mobj_t *tails, ticcmd_t *cm fixed_t comfortheight = 96 * scale; fixed_t touchdist = 24 * scale; boolean stalled = (bmom < scale >> 1) && dist > followthres; // Helps to see if the AI is having trouble catching up + boolean samepos = (sonic->x == tails->x && sonic->y == tails->y); + + if (!samepos) + ang = R_PointToAngle2(tails->x, tails->y, sonic->x, sonic->y); // We can't follow Sonic if he's not around! if (!sonic || sonic->health <= 0) @@ -154,7 +158,7 @@ static inline void B_BuildTailsTiccmd(mobj_t *sonic, mobj_t *tails, ticcmd_t *cm // Check positioning // Thinker for co-op flight if (!(water || pmom || bmom) - && (dist < touchdist) + && (dist < touchdist && !samepos) && !(pcmd->forwardmove || pcmd->sidemove || player->dashspeed) && P_IsObjectOnGround(sonic) && P_IsObjectOnGround(tails) && !(player->pflags & PF_STASIS) From 2f51c759316604c716f776891c7907ec58f88669 Mon Sep 17 00:00:00 2001 From: toaster Date: Sat, 30 Nov 2019 20:02:51 +0000 Subject: [PATCH 134/141] Fix emerald coordinate overflow in failed SS tally (resolves #421). --- src/y_inter.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/y_inter.c b/src/y_inter.c index 32548d263..340e8be4c 100644 --- a/src/y_inter.c +++ b/src/y_inter.c @@ -603,8 +603,7 @@ void Y_IntermissionDrawer(void) { if (emeraldbounces < 3) { - emeraldmomy += 1; - emeraldy += emeraldmomy; + emeraldy += (++emeraldmomy); if (emeraldy > 74) { S_StartSound(NULL, sfx_tink); // tink @@ -616,9 +615,11 @@ void Y_IntermissionDrawer(void) } else { - emeraldmomy += 1; - emeraldy += emeraldmomy; - emeraldx += intertic - 6; + if (emeraldy < (vid.height/vid.dupy)+16) + { + emeraldy += (++emeraldmomy); + emeraldx += intertic - 6; + } if (emeraldbounces < 1 && emeraldy > 74) { S_StartSound(NULL, sfx_shldls); // nope From 00da2b32650d1d939da580283489c010d8078351 Mon Sep 17 00:00:00 2001 From: toaster Date: Sun, 1 Dec 2019 13:21:41 +0000 Subject: [PATCH 135/141] Nail a likely culprit in papersprite rendering for #427 and #375. --- src/r_things.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/r_things.c b/src/r_things.c index 9763648cd..afdc3b223 100644 --- a/src/r_things.c +++ b/src/r_things.c @@ -1338,7 +1338,7 @@ static void R_ProjectSprite(mobj_t *thing) return; if ((range = x2 - x1) <= 0) - range = 1; + return; scalestep = (yscale2 - yscale)/range; scalestep = scalestep ? scalestep : 1; From 986175006818f5730c52fdb9f127d084673b22ec Mon Sep 17 00:00:00 2001 From: toaster Date: Sun, 1 Dec 2019 13:31:33 +0000 Subject: [PATCH 136/141] Allow re-grabbing Tails AI mid-flight (resolves #428) --- src/b_bot.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/b_bot.c b/src/b_bot.c index 895c8d18d..b286dfff9 100644 --- a/src/b_bot.c +++ b/src/b_bot.c @@ -163,6 +163,12 @@ static inline void B_BuildTailsTiccmd(mobj_t *sonic, mobj_t *tails, ticcmd_t *cm else thinkfly = false; + // Set carried state + if (player->powers[pw_carry] == CR_PLAYER && sonic->tracer == tails) + { + flymode = 2; + } + // Ready for takeoff if (flymode == 1) { @@ -175,12 +181,6 @@ static inline void B_BuildTailsTiccmd(mobj_t *sonic, mobj_t *tails, ticcmd_t *cm // Abort if the player moves away or spins if (dist > followthres || player->dashspeed) flymode = 0; - - // Set carried state - if (player->powers[pw_carry] == CR_PLAYER && sonic->tracer == tails) - { - flymode = 2; - } } // Read player inputs while carrying else if (flymode == 2) From c65b02896b7f5315d5a2015bd84d2450a692d5da Mon Sep 17 00:00:00 2001 From: lachwright Date: Mon, 2 Dec 2019 22:24:05 +0800 Subject: [PATCH 137/141] - Remove y coordinate from struct for credits_pics - Update x coordinates for credits_pics entries - Reorder credits_pics entries (what even was the previous order lol) - Add zig zag graphics to credits roll - Attempt to scale the y positions of credits graphics with the length of the credits roll - New escape character for credits entries: \2, which centers the text and makes it yellow - Add support for colored text to V_DrawStringAtFixed --- src/f_finale.c | 73 ++++++++++++++++++++++++++++++++++++++------------ src/v_video.c | 12 ++++++++- 2 files changed, 67 insertions(+), 18 deletions(-) diff --git a/src/f_finale.c b/src/f_finale.c index 318668b59..306dad4e9 100644 --- a/src/f_finale.c +++ b/src/f_finale.c @@ -1253,30 +1253,41 @@ static const char *credits[] = { "\1Published By", "A 28K dialup modem", "", - "\1Thank you", - "\1for playing!", + "\1Thank you ", + "\1for playing! ", NULL }; +#define CREDITS_LEFT 8 +#define CREDITS_RIGHT ((BASEVIDWIDTH) - 8) + static struct { - UINT32 x, y; + UINT32 x; const char *patch; } credits_pics[] = { - { 8, 80+200* 1, "CREDIT01"}, - { 4, 80+200* 2, "CREDIT13"}, - {250, 80+200* 3, "CREDIT12"}, - { 8, 80+200* 4, "CREDIT03"}, - {248, 80+200* 5, "CREDIT11"}, - { 8, 80+200* 6, "CREDIT04"}, - {112, 80+200* 7, "CREDIT10"}, - {240, 80+200* 8, "CREDIT05"}, - {120, 80+200* 9, "CREDIT06"}, - { 8, 80+200*10, "CREDIT07"}, - { 8, 80+200*11, "CREDIT08"}, - {112, 80+200*12, "CREDIT09"}, - {0, 0, NULL} + {CREDITS_LEFT, "CREDIT01"}, + {CREDITS_RIGHT - (271 >> 1), "CREDIT02"}, + {CREDITS_LEFT, "CREDIT03"}, + {CREDITS_RIGHT - (316 >> 1), "CREDIT04"}, + {CREDITS_LEFT, "CREDIT05"}, + {CREDITS_RIGHT - (399 >> 1), "CREDIT06"}, + {CREDITS_LEFT, "CREDIT07"}, + {CREDITS_RIGHT - (302 >> 1), "CREDIT08"}, + {CREDITS_LEFT, "CREDIT09"}, + {CREDITS_RIGHT - (250 >> 1), "CREDIT10"}, + {CREDITS_LEFT, "CREDIT11"}, + {CREDITS_RIGHT - (279 >> 1), "CREDIT12"}, + //{(BASEVIDWIDTH - (279 >> 1)) >> 1, "CREDIT12"}, + // CREDIT13 is extra art and is not shown by default + {0, NULL} }; +#undef CREDITS_LEFT +#undef CREDITS_RIGHT + +static UINT32 credits_height = 0; +static const UINT8 credits_numpics = sizeof(credits_pics)/sizeof(credits_pics[0]) - 1; + void F_StartCredits(void) { G_SetGamestate(GS_CREDITS); @@ -1310,13 +1321,20 @@ void F_StartCredits(void) void F_CreditDrawer(void) { UINT16 i; + INT16 zagpos = (timetonext - finalecount - animtimer) % 32; fixed_t y = (80<>1); + V_DrawSciencePatch(credits_pics[i].x<>1); // Dim the background V_DrawFadeScreen(0xFF00, 16); @@ -1334,6 +1352,11 @@ void F_CreditDrawer(void) V_DrawCreditString((160 - (V_CreditStringWidth(&credits[i][1])>>1))<>FRACBITS > -10) + V_DrawStringAtFixed((BASEVIDWIDTH-V_StringWidth(&credits[i][1], V_ALLOWLOWERCASE|V_YELLOWMAP))<>1, y, V_ALLOWLOWERCASE|V_YELLOWMAP, &credits[i][1]); + y += 12<>FRACBITS > -10) V_DrawStringAtFixed(32< Date: Mon, 2 Dec 2019 12:12:26 -0500 Subject: [PATCH 138/141] Fixup compiling errors --- src/b_bot.c | 2 +- src/hardware/r_opengl/r_opengl.c | 8 ++++++++ src/p_enemy.c | 4 ++-- src/p_mobj.c | 2 +- src/p_setup.c | 2 +- 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/b_bot.c b/src/b_bot.c index 895c8d18d..f67d0db87 100644 --- a/src/b_bot.c +++ b/src/b_bot.c @@ -43,7 +43,7 @@ static inline void B_ResetAI(void) thinkfly = false; } -static inline void B_BuildTailsTiccmd(mobj_t *sonic, mobj_t *tails, ticcmd_t *cmd) +static void B_BuildTailsTiccmd(mobj_t *sonic, mobj_t *tails, ticcmd_t *cmd) { boolean forward=false, backward=false, left=false, right=false, jump=false, spin=false; diff --git a/src/hardware/r_opengl/r_opengl.c b/src/hardware/r_opengl/r_opengl.c index 8c0ca7155..c009d3459 100644 --- a/src/hardware/r_opengl/r_opengl.c +++ b/src/hardware/r_opengl/r_opengl.c @@ -417,6 +417,14 @@ static PFNglClientActiveTexture pglClientActiveTexture; #define GL_TEXTURE1 0x84C1 #endif +/* 1.5 Parms */ +#ifndef GL_ARRAY_BUFFER +#define GL_ARRAY_BUFFER 0x8892 +#endif +#ifndef GL_STATIC_DRAW +#define GL_STATIC_DRAW 0x88E4 +#endif + boolean SetupGLfunc(void) { #ifndef STATIC_OPENGL diff --git a/src/p_enemy.c b/src/p_enemy.c index fa09354d6..738ce46ac 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -3342,7 +3342,7 @@ void A_SkullAttack(mobj_t *actor) INT32 i, j; static INT32 k;/* static for (at least) GCC 9.1 weirdness */ boolean allow; - angle_t testang; + angle_t testang = 0; mobjinfo[MT_NULL].spawnstate = S_INVISIBLE; mobjinfo[MT_NULL].flags = MF_NOGRAVITY|MF_NOTHINK|MF_NOCLIPTHING|MF_NOBLOCKMAP; @@ -13379,7 +13379,7 @@ void A_Boss5MakeJunk(mobj_t *actor) { INT32 locvar1 = var1; INT32 locvar2 = var2; - mobj_t *broked; + mobj_t *broked = NULL; angle_t ang; INT32 i = ((locvar2 & 1) ? 8 : 1); #ifdef HAVE_BLUA diff --git a/src/p_mobj.c b/src/p_mobj.c index 2bd3950a9..4ffaf22c7 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -4652,7 +4652,7 @@ static void P_Boss3Thinker(mobj_t *mobj) { UINT8 i, numtospawn = 24; angle_t ang = 0, interval = FixedAngle((360 << FRACBITS) / numtospawn); - mobj_t *shock, *sfirst, *sprev = NULL; + mobj_t *shock, *sfirst = NULL, *sprev = NULL; mobj->movecount = mobj->health+1; mobj->movefactor = -512*FRACUNIT; diff --git a/src/p_setup.c b/src/p_setup.c index 2216334e7..7f44d11c6 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -3071,7 +3071,7 @@ boolean P_SetupLevel(boolean skipprecip) #endif && !(netgame || multiplayer) && gamemap == 0x1d35-016464) { - P_SpawnMobj(0640370000, 0x11000000, 0b11000110000000000000000000, MT_LETTER)->angle = ANGLE_90; + P_SpawnMobj(0640370000, 0x11000000, 0x3180000, MT_LETTER)->angle = ANGLE_90; if (textprompts[199]->page[1].backcolor != 259) { char *buf = W_CacheLumpName("WATERMAP", PU_STATIC), *b = buf; From f926e55b37507afb590afe582ca2d252df26ff60 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Mon, 2 Dec 2019 12:29:11 -0500 Subject: [PATCH 139/141] libs: clean up libpng --- libs/libpng-src/Makefile | 2428 ---- libs/libpng-src/config.h | 127 - libs/libpng-src/config.status | 2026 --- .../contrib/libtests/.deps/.dirstamp | 0 .../contrib/libtests/.deps/pngimage.Po | 112 - .../contrib/libtests/.deps/pngstest.Po | 111 - .../contrib/libtests/.deps/pngunknown.Po | 95 - .../contrib/libtests/.deps/pngvalid.Po | 150 - .../contrib/libtests/.deps/timepng.Po | 100 - libs/libpng-src/contrib/libtests/.dirstamp | 0 libs/libpng-src/contrib/tools/.deps/.dirstamp | 0 .../contrib/tools/.deps/png-fix-itxt.Po | 93 - libs/libpng-src/contrib/tools/.deps/pngcp.Po | 144 - libs/libpng-src/contrib/tools/.deps/pngfix.Po | 139 - libs/libpng-src/contrib/tools/.dirstamp | 0 libs/libpng-src/intel/.dirstamp | 0 libs/libpng-src/libpng.pc | 12 - libs/libpng-src/libtool | 11661 ---------------- libs/libpng-src/mips/.dirstamp | 0 libs/libpng-src/pnglibconf.h | 220 - libs/libpng-src/powerpc/.dirstamp | 0 libs/libpng-src/stamp-h1 | 1 - 22 files changed, 17419 deletions(-) delete mode 100644 libs/libpng-src/Makefile delete mode 100644 libs/libpng-src/config.h delete mode 100644 libs/libpng-src/config.status delete mode 100644 libs/libpng-src/contrib/libtests/.deps/.dirstamp delete mode 100644 libs/libpng-src/contrib/libtests/.deps/pngimage.Po delete mode 100644 libs/libpng-src/contrib/libtests/.deps/pngstest.Po delete mode 100644 libs/libpng-src/contrib/libtests/.deps/pngunknown.Po delete mode 100644 libs/libpng-src/contrib/libtests/.deps/pngvalid.Po delete mode 100644 libs/libpng-src/contrib/libtests/.deps/timepng.Po delete mode 100644 libs/libpng-src/contrib/libtests/.dirstamp delete mode 100644 libs/libpng-src/contrib/tools/.deps/.dirstamp delete mode 100644 libs/libpng-src/contrib/tools/.deps/png-fix-itxt.Po delete mode 100644 libs/libpng-src/contrib/tools/.deps/pngcp.Po delete mode 100644 libs/libpng-src/contrib/tools/.deps/pngfix.Po delete mode 100644 libs/libpng-src/contrib/tools/.dirstamp delete mode 100644 libs/libpng-src/intel/.dirstamp delete mode 100644 libs/libpng-src/libpng.pc delete mode 100644 libs/libpng-src/libtool delete mode 100644 libs/libpng-src/mips/.dirstamp delete mode 100644 libs/libpng-src/pnglibconf.h delete mode 100644 libs/libpng-src/powerpc/.dirstamp delete mode 100644 libs/libpng-src/stamp-h1 diff --git a/libs/libpng-src/Makefile b/libs/libpng-src/Makefile deleted file mode 100644 index 4b02abacf..000000000 --- a/libs/libpng-src/Makefile +++ /dev/null @@ -1,2428 +0,0 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. -# Makefile. Generated from Makefile.in by configure. - -# Copyright (C) 1994-2018 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - - -# Makefile.am, the source file for Makefile.in (and hence Makefile), is -# -# Copyright (c) 2018 Cosmin Truta -# Copyright (c) 2004-2016 Glenn Randers-Pehrson -# -# This code is released under the libpng license. -# For conditions of distribution and use, see the disclaimer -# and license in png.h - - - - - - -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/libpng -pkglibdir = $(libdir)/libpng -pkglibexecdir = $(libexecdir)/libpng -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = i686-w64-mingw32 -host_triplet = i686-w64-mingw32 -check_PROGRAMS = pngtest$(EXEEXT) pngunknown$(EXEEXT) \ - pngstest$(EXEEXT) pngvalid$(EXEEXT) pngimage$(EXEEXT) \ - pngcp$(EXEEXT) $(am__EXEEXT_1) -am__append_1 = timepng -bin_PROGRAMS = pngfix$(EXEEXT) png-fix-itxt$(EXEEXT) -#am__append_2 = arm/arm_init.c\ -# arm/filter_neon.S arm/filter_neon_intrinsics.c \ -# arm/palette_neon_intrinsics.c - -am__append_3 = mips/mips_init.c\ - mips/filter_msa_intrinsics.c - -am__append_4 = intel/intel_init.c\ - intel/filter_sse2_intrinsics.c - -am__append_5 = powerpc/powerpc_init.c\ - powerpc/filter_vsx_intrinsics.c - - -# Versioned symbols and restricted exports -##am__append_6 = -Wl,-M -Wl,libpng.vers -#am__append_7 = -Wl,--version-script=libpng.vers -# Only restricted exports when possible -am__append_8 = -export-symbols libpng.sym -#am__append_9 = -DPNG_PREFIX='' -subdir = . -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/scripts/libtool.m4 \ - $(top_srcdir)/scripts/ltoptions.m4 \ - $(top_srcdir)/scripts/ltsugar.m4 \ - $(top_srcdir)/scripts/ltversion.m4 \ - $(top_srcdir)/scripts/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ - $(am__configure_deps) $(pkginclude_HEADERS) $(am__DIST_COMMON) -am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ - configure.lineno config.status.lineno -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = config.h -CONFIG_CLEAN_FILES = libpng.pc libpng-config -CONFIG_CLEAN_VPATH_FILES = -am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libdir)" \ - "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man3dir)" \ - "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(pkgconfigdir)" \ - "$(DESTDIR)$(pkgincludedir)" "$(DESTDIR)$(pkgincludedir)" -am__EXEEXT_1 = timepng$(EXEEXT) -PROGRAMS = $(bin_PROGRAMS) -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -LTLIBRARIES = $(lib_LTLIBRARIES) -libpng16_la_LIBADD = -am__libpng16_la_SOURCES_DIST = png.c \ - pngerror.c pngget.c pngmem.c pngpread.c pngread.c pngrio.c \ - pngrtran.c pngrutil.c pngset.c pngtrans.c pngwio.c pngwrite.c \ - pngwtran.c pngwutil.c png.h pngconf.h pngdebug.h pnginfo.h \ - pngpriv.h pngstruct.h pngusr.dfa arm/arm_init.c \ - arm/filter_neon.S arm/filter_neon_intrinsics.c \ - arm/palette_neon_intrinsics.c mips/mips_init.c \ - mips/filter_msa_intrinsics.c intel/intel_init.c \ - intel/filter_sse2_intrinsics.c powerpc/powerpc_init.c \ - powerpc/filter_vsx_intrinsics.c -am__dirstamp = $(am__leading_dot)dirstamp -#am__objects_1 = arm/arm_init.lo arm/filter_neon.lo \ -# arm/filter_neon_intrinsics.lo \ -# arm/palette_neon_intrinsics.lo -am__objects_2 = mips/mips_init.lo \ - mips/filter_msa_intrinsics.lo -am__objects_3 = intel/intel_init.lo \ - intel/filter_sse2_intrinsics.lo -am__objects_4 = powerpc/powerpc_init.lo \ - powerpc/filter_vsx_intrinsics.lo -am_libpng16_la_OBJECTS = png.lo pngerror.lo \ - pngget.lo pngmem.lo pngpread.lo pngread.lo pngrio.lo \ - pngrtran.lo pngrutil.lo pngset.lo pngtrans.lo pngwio.lo \ - pngwrite.lo pngwtran.lo pngwutil.lo $(am__objects_1) \ - $(am__objects_2) $(am__objects_3) $(am__objects_4) -nodist_libpng16_la_OBJECTS = -libpng16_la_OBJECTS = \ - $(am_libpng16_la_OBJECTS) \ - $(nodist_libpng16_la_OBJECTS) -AM_V_lt = $(am__v_lt_$(V)) -am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) -am__v_lt_0 = --silent -am__v_lt_1 = -libpng16_la_LINK = $(LIBTOOL) $(AM_V_lt) \ - --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \ - $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(libpng16_la_LDFLAGS) $(LDFLAGS) -o \ - $@ -am_png_fix_itxt_OBJECTS = contrib/tools/png-fix-itxt.$(OBJEXT) -png_fix_itxt_OBJECTS = $(am_png_fix_itxt_OBJECTS) -png_fix_itxt_LDADD = $(LDADD) -am_pngcp_OBJECTS = contrib/tools/pngcp.$(OBJEXT) -pngcp_OBJECTS = $(am_pngcp_OBJECTS) -pngcp_DEPENDENCIES = libpng16.la -am_pngfix_OBJECTS = contrib/tools/pngfix.$(OBJEXT) -pngfix_OBJECTS = $(am_pngfix_OBJECTS) -pngfix_DEPENDENCIES = libpng16.la -am_pngimage_OBJECTS = contrib/libtests/pngimage.$(OBJEXT) -pngimage_OBJECTS = $(am_pngimage_OBJECTS) -pngimage_DEPENDENCIES = libpng16.la -am_pngstest_OBJECTS = contrib/libtests/pngstest.$(OBJEXT) -pngstest_OBJECTS = $(am_pngstest_OBJECTS) -pngstest_DEPENDENCIES = libpng16.la -am_pngtest_OBJECTS = pngtest.$(OBJEXT) -pngtest_OBJECTS = $(am_pngtest_OBJECTS) -pngtest_DEPENDENCIES = libpng16.la -am_pngunknown_OBJECTS = contrib/libtests/pngunknown.$(OBJEXT) -pngunknown_OBJECTS = $(am_pngunknown_OBJECTS) -pngunknown_DEPENDENCIES = libpng16.la -am_pngvalid_OBJECTS = contrib/libtests/pngvalid.$(OBJEXT) -pngvalid_OBJECTS = $(am_pngvalid_OBJECTS) -pngvalid_DEPENDENCIES = libpng16.la -am_timepng_OBJECTS = contrib/libtests/timepng.$(OBJEXT) -timepng_OBJECTS = $(am_timepng_OBJECTS) -timepng_DEPENDENCIES = libpng16.la -SCRIPTS = $(bin_SCRIPTS) -AM_V_P = $(am__v_P_$(V)) -am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_$(V)) -am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_$(V)) -am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) -am__v_at_0 = @ -am__v_at_1 = -DEFAULT_INCLUDES = -I. -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__maybe_remake_depfiles = depfiles -am__depfiles_remade = ./$(DEPDIR)/png.Plo ./$(DEPDIR)/pngerror.Plo \ - ./$(DEPDIR)/pngget.Plo ./$(DEPDIR)/pngmem.Plo \ - ./$(DEPDIR)/pngpread.Plo ./$(DEPDIR)/pngread.Plo \ - ./$(DEPDIR)/pngrio.Plo ./$(DEPDIR)/pngrtran.Plo \ - ./$(DEPDIR)/pngrutil.Plo ./$(DEPDIR)/pngset.Plo \ - ./$(DEPDIR)/pngtest.Po ./$(DEPDIR)/pngtrans.Plo \ - ./$(DEPDIR)/pngwio.Plo ./$(DEPDIR)/pngwrite.Plo \ - ./$(DEPDIR)/pngwtran.Plo ./$(DEPDIR)/pngwutil.Plo \ - arm/$(DEPDIR)/arm_init.Plo arm/$(DEPDIR)/filter_neon.Plo \ - arm/$(DEPDIR)/filter_neon_intrinsics.Plo \ - arm/$(DEPDIR)/palette_neon_intrinsics.Plo \ - contrib/libtests/$(DEPDIR)/pngimage.Po \ - contrib/libtests/$(DEPDIR)/pngstest.Po \ - contrib/libtests/$(DEPDIR)/pngunknown.Po \ - contrib/libtests/$(DEPDIR)/pngvalid.Po \ - contrib/libtests/$(DEPDIR)/timepng.Po \ - contrib/tools/$(DEPDIR)/png-fix-itxt.Po \ - contrib/tools/$(DEPDIR)/pngcp.Po \ - contrib/tools/$(DEPDIR)/pngfix.Po \ - intel/$(DEPDIR)/filter_sse2_intrinsics.Plo \ - intel/$(DEPDIR)/intel_init.Plo \ - mips/$(DEPDIR)/filter_msa_intrinsics.Plo \ - mips/$(DEPDIR)/mips_init.Plo \ - powerpc/$(DEPDIR)/filter_vsx_intrinsics.Plo \ - powerpc/$(DEPDIR)/powerpc_init.Plo -am__mv = mv -f -CPPASCOMPILE = $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -LTCPPASCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CCASFLAGS) $(CCASFLAGS) -AM_V_CPPAS = $(am__v_CPPAS_$(V)) -am__v_CPPAS_ = $(am__v_CPPAS_$(AM_DEFAULT_VERBOSITY)) -am__v_CPPAS_0 = @echo " CPPAS " $@; -am__v_CPPAS_1 = -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_$(V)) -am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_$(V)) -am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = $(libpng16_la_SOURCES) \ - $(nodist_libpng16_la_SOURCES) \ - $(png_fix_itxt_SOURCES) $(pngcp_SOURCES) $(pngfix_SOURCES) \ - $(pngimage_SOURCES) $(pngstest_SOURCES) $(pngtest_SOURCES) \ - $(pngunknown_SOURCES) $(pngvalid_SOURCES) $(timepng_SOURCES) -DIST_SOURCES = \ - $(am__libpng16_la_SOURCES_DIST) \ - $(png_fix_itxt_SOURCES) $(pngcp_SOURCES) $(pngfix_SOURCES) \ - $(pngimage_SOURCES) $(pngstest_SOURCES) $(pngtest_SOURCES) \ - $(pngunknown_SOURCES) $(pngvalid_SOURCES) $(timepng_SOURCES) -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -man3dir = $(mandir)/man3 -man5dir = $(mandir)/man5 -NROFF = nroff -MANS = $(dist_man_MANS) -DATA = $(pkgconfig_DATA) -HEADERS = $(nodist_pkginclude_HEADERS) $(pkginclude_HEADERS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ - $(LISP)config.h.in -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -CSCOPE = cscope -AM_RECURSIVE_TARGETS = cscope check recheck -am__tty_colors_dummy = \ - mgn= red= grn= lgn= blu= brg= std=; \ - am__color_tests=no -am__tty_colors = { \ - $(am__tty_colors_dummy); \ - if test "X$(AM_COLOR_TESTS)" = Xno; then \ - am__color_tests=no; \ - elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ - am__color_tests=yes; \ - elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ - am__color_tests=yes; \ - fi; \ - if test $$am__color_tests = yes; then \ - red=''; \ - grn=''; \ - lgn=''; \ - blu=''; \ - mgn=''; \ - brg=''; \ - std=''; \ - fi; \ -} -am__recheck_rx = ^[ ]*:recheck:[ ]* -am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* -am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* -# A command that, given a newline-separated list of test names on the -# standard input, print the name of the tests that are to be re-run -# upon "make recheck". -am__list_recheck_tests = $(AWK) '{ \ - recheck = 1; \ - while ((rc = (getline line < ($$0 ".trs"))) != 0) \ - { \ - if (rc < 0) \ - { \ - if ((getline line2 < ($$0 ".log")) < 0) \ - recheck = 0; \ - break; \ - } \ - else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ - { \ - recheck = 0; \ - break; \ - } \ - else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ - { \ - break; \ - } \ - }; \ - if (recheck) \ - print $$0; \ - close ($$0 ".trs"); \ - close ($$0 ".log"); \ -}' -# A command that, given a newline-separated list of test names on the -# standard input, create the global log from their .trs and .log files. -am__create_global_log = $(AWK) ' \ -function fatal(msg) \ -{ \ - print "fatal: making $@: " msg | "cat >&2"; \ - exit 1; \ -} \ -function rst_section(header) \ -{ \ - print header; \ - len = length(header); \ - for (i = 1; i <= len; i = i + 1) \ - printf "="; \ - printf "\n\n"; \ -} \ -{ \ - copy_in_global_log = 1; \ - global_test_result = "RUN"; \ - while ((rc = (getline line < ($$0 ".trs"))) != 0) \ - { \ - if (rc < 0) \ - fatal("failed to read from " $$0 ".trs"); \ - if (line ~ /$(am__global_test_result_rx)/) \ - { \ - sub("$(am__global_test_result_rx)", "", line); \ - sub("[ ]*$$", "", line); \ - global_test_result = line; \ - } \ - else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ - copy_in_global_log = 0; \ - }; \ - if (copy_in_global_log) \ - { \ - rst_section(global_test_result ": " $$0); \ - while ((rc = (getline line < ($$0 ".log"))) != 0) \ - { \ - if (rc < 0) \ - fatal("failed to read from " $$0 ".log"); \ - print line; \ - }; \ - printf "\n"; \ - }; \ - close ($$0 ".trs"); \ - close ($$0 ".log"); \ -}' -# Restructured Text title. -am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } -# Solaris 10 'make', and several other traditional 'make' implementations, -# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it -# by disabling -e (using the XSI extension "set +e") if it's set. -am__sh_e_setup = case $$- in *e*) set +e;; esac -# Default flags passed to test drivers. -am__common_driver_flags = \ - --color-tests "$$am__color_tests" \ - --enable-hard-errors "$$am__enable_hard_errors" \ - --expect-failure "$$am__expect_failure" -# To be inserted before the command running the test. Creates the -# directory for the log if needed. Stores in $dir the directory -# containing $f, in $tst the test, in $log the log. Executes the -# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and -# passes TESTS_ENVIRONMENT. Set up options for the wrapper that -# will run the test scripts (or their associated LOG_COMPILER, if -# thy have one). -am__check_pre = \ -$(am__sh_e_setup); \ -$(am__vpath_adj_setup) $(am__vpath_adj) \ -$(am__tty_colors); \ -srcdir=$(srcdir); export srcdir; \ -case "$@" in \ - */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ - *) am__odir=.;; \ -esac; \ -test "x$$am__odir" = x"." || test -d "$$am__odir" \ - || $(MKDIR_P) "$$am__odir" || exit $$?; \ -if test -f "./$$f"; then dir=./; \ -elif test -f "$$f"; then dir=; \ -else dir="$(srcdir)/"; fi; \ -tst=$$dir$$f; log='$@'; \ -if test -n '$(DISABLE_HARD_ERRORS)'; then \ - am__enable_hard_errors=no; \ -else \ - am__enable_hard_errors=yes; \ -fi; \ -case " $(XFAIL_TESTS) " in \ - *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ - am__expect_failure=yes;; \ - *) \ - am__expect_failure=no;; \ -esac; \ -$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) -# A shell command to get the names of the tests scripts with any registered -# extension removed (i.e., equivalently, the names of the test logs, with -# the '.log' extension removed). The result is saved in the shell variable -# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, -# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", -# since that might cause problem with VPATH rewrites for suffix-less tests. -# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. -am__set_TESTS_bases = \ - bases='$(TEST_LOGS)'; \ - bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ - bases=`echo $$bases` -RECHECK_LOGS = $(TEST_LOGS) -TEST_SUITE_LOG = test-suite.log -TEST_EXTENSIONS = .exe .test -LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver -LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) -am__set_b = \ - case '$@' in \ - */*) \ - case '$*' in \ - */*) b='$*';; \ - *) b=`echo '$@' | sed 's/\.log$$//'`; \ - esac;; \ - *) \ - b='$*';; \ - esac -am__test_logs1 = $(TESTS:=.log) -am__test_logs2 = $(am__test_logs1:.exe.log=.log) -TEST_LOGS = $(am__test_logs2:.test.log=.log) -TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver -TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ - $(TEST_LOG_FLAGS) -am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in \ - $(srcdir)/config.h.in $(srcdir)/libpng-config.in \ - $(srcdir)/libpng.pc.in AUTHORS INSTALL README TODO compile \ - config.guess config.sub depcomp install-sh ltmain.sh missing \ - test-driver -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -distdir = $(PACKAGE)-$(VERSION) -top_distdir = $(distdir) -am__remove_distdir = \ - if test -d "$(distdir)"; then \ - find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -rf "$(distdir)" \ - || { sleep 5 && rm -rf "$(distdir)"; }; \ - else :; fi -am__post_remove_distdir = $(am__remove_distdir) -DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.xz -GZIP_ENV = --best -DIST_TARGETS = dist-xz dist-gzip -distuninstallcheck_listfiles = find . -type f -print -am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ - | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' -distcleancheck_listfiles = find . -type f -print - -#distribute headers in /usr/include/libpng/* -pkgincludedir = $(includedir)/$(PNGLIB_BASENAME) -ACLOCAL = ${SHELL} /f/lpng1637/missing aclocal-1.16 -AMTAR = $${TAR-tar} -AM_DEFAULT_VERBOSITY = 1 -AR = ar -AS = as -AUTOCONF = ${SHELL} /f/lpng1637/missing autoconf -AUTOHEADER = ${SHELL} /f/lpng1637/missing autoheader -AUTOMAKE = ${SHELL} /f/lpng1637/missing automake-1.16 -AWK = gawk -CC = gcc -CCAS = gcc -CCASDEPMODE = depmode=gcc3 -CCASFLAGS = -g -O2 -CCDEPMODE = depmode=gcc3 -CFLAGS = -g -O2 -CPP = gcc -E -CPPFLAGS = -CYGPATH_W = cygpath -w -DEFS = -DHAVE_CONFIG_H -DEPDIR = .deps - -# DFNCPP is normally just CPP - the C preprocessor - but on Solaris and maybe -# other operating systems (NeXT?) the C preprocessor selected by configure -# checks input tokens for validity - effectively it performs part of the ANSI-C -# parsing - and therefore fails with the .df files. configure.ac has special -# checks for this and sets DFNCPP appropriately. -DFNCPP = gcc -E -DLLTOOL = dlltool -DSYMUTIL = -DUMPBIN = -ECHO_C = -ECHO_N = -n -ECHO_T = -EGREP = /usr/bin/grep -E -EXEEXT = .exe -FGREP = /usr/bin/grep -F -GREP = /usr/bin/grep -INSTALL = /usr/bin/install -c -INSTALL_DATA = ${INSTALL} -m 644 -INSTALL_PROGRAM = ${INSTALL} -INSTALL_SCRIPT = ${INSTALL} -INSTALL_STRIP_PROGRAM = $(install_sh) -c -s -LD = C:/msys64/mingw32/i686-w64-mingw32/bin/ld.exe -LDFLAGS = -LIBOBJS = -LIBS = -lz -LIBTOOL = $(SHELL) $(top_builddir)/libtool -LIPO = -LN_S = cp -pR -LTLIBOBJS = -LT_SYS_LIBRARY_PATH = -MAINT = # -MAKEINFO = ${SHELL} /f/lpng1637/missing makeinfo -MANIFEST_TOOL = : -MKDIR_P = /usr/bin/mkdir -p -NM = /mingw32/bin/nm -B -NMEDIT = -OBJDUMP = objdump -OBJEXT = o -OTOOL = -OTOOL64 = -PACKAGE = libpng -PACKAGE_BUGREPORT = png-mng-implement@lists.sourceforge.net -PACKAGE_NAME = libpng -PACKAGE_STRING = libpng 1.6.37 -PACKAGE_TARNAME = libpng -PACKAGE_URL = -PACKAGE_VERSION = 1.6.37 -PATH_SEPARATOR = : -PNGLIB_MAJOR = 1 -PNGLIB_MINOR = 6 -PNGLIB_RELEASE = 37 -PNGLIB_VERSION = 1.6.37 - -# PNG_COPTS give extra options for the C compiler to be used on all compilation -# steps (unless targe_CFLAGS is specified; that will take precedence over -# AM_CFLAGS) -PNG_COPTS = -PNG_PREFIX = -POW_LIB = -RANLIB = ranlib -SED = /usr/bin/sed -SET_MAKE = -SHELL = /bin/sh -STRIP = strip -SYMBOL_PREFIX = -VERSION = 1.6.37 -abs_builddir = /f/lpng1637 -abs_srcdir = /f/lpng1637 -abs_top_builddir = /f/lpng1637 -abs_top_srcdir = /f/lpng1637 -ac_ct_AR = ar -ac_ct_CC = gcc -ac_ct_DUMPBIN = -am__include = include -am__leading_dot = . -am__quote = -am__tar = $${TAR-tar} chof - "$$tardir" -am__untar = $${TAR-tar} xf - - -# generate the -config scripts if required -binconfigs = libpng16-config -bindir = ${exec_prefix}/bin -build = i686-w64-mingw32 -build_alias = i686-w64-mingw32 -build_cpu = i686 -build_os = mingw32 -build_vendor = w64 -builddir = . -datadir = ${datarootdir} -datarootdir = ${prefix}/share -docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} -dvidir = ${docdir} -exec_prefix = ${prefix} -host = i686-w64-mingw32 -host_alias = -host_cpu = i686 -host_os = mingw32 -host_vendor = w64 -htmldir = ${docdir} -includedir = ${prefix}/include -infodir = ${datarootdir}/info -install_sh = ${SHELL} /f/lpng1637/install-sh -libdir = ${exec_prefix}/lib -libexecdir = ${exec_prefix}/libexec -localedir = ${datarootdir}/locale -localstatedir = ${prefix}/var -mandir = ${datarootdir}/man -mkdir_p = $(MKDIR_P) -oldincludedir = /usr/include -pdfdir = ${docdir} - -# pkg-config stuff, note that libpng.pc is always required in order -# to get the correct library -pkgconfigdir = ${libdir}/pkgconfig -prefix = /mingw32 -program_transform_name = s,x,x, -psdir = ${docdir} -sbindir = ${exec_prefix}/sbin -sharedstatedir = ${prefix}/com -srcdir = . -sysconfdir = ${prefix}/etc -target_alias = -top_build_prefix = -top_builddir = . -top_srcdir = . -PNGLIB_BASENAME = libpng16 -ACLOCAL_AMFLAGS = -I scripts - -# This ensures that pnglibconf.h gets built at the start of 'make all' or -# 'make check', but it does not add dependencies to the individual programs, -# this is done below. -# -# IMPORTANT: always add the object modules of new programs to the list below -# because otherwise the sequence 'configure; make new-program' will *sometimes* -# result in the installed (system) pnglibconf.h being used and the result is -# always wrong and always very confusing. -BUILT_SOURCES = pnglibconf.h -pngtest_SOURCES = pngtest.c -pngtest_LDADD = libpng16.la -pngvalid_SOURCES = contrib/libtests/pngvalid.c -pngvalid_LDADD = libpng16.la -pngstest_SOURCES = contrib/libtests/pngstest.c -pngstest_LDADD = libpng16.la -pngunknown_SOURCES = contrib/libtests/pngunknown.c -pngunknown_LDADD = libpng16.la -pngimage_SOURCES = contrib/libtests/pngimage.c -pngimage_LDADD = libpng16.la -timepng_SOURCES = contrib/libtests/timepng.c -timepng_LDADD = libpng16.la -pngfix_SOURCES = contrib/tools/pngfix.c -pngfix_LDADD = libpng16.la -png_fix_itxt_SOURCES = contrib/tools/png-fix-itxt.c -pngcp_SOURCES = contrib/tools/pngcp.c -pngcp_LDADD = libpng16.la - -# Generally these are single line shell scripts to run a test with a particular -# set of parameters: -TESTS = \ - tests/pngtest\ - tests/pngtest-badpngs\ - tests/pngvalid-gamma-16-to-8 tests/pngvalid-gamma-alpha-mode\ - tests/pngvalid-gamma-background tests/pngvalid-gamma-expand16-alpha-mode\ - tests/pngvalid-gamma-expand16-background\ - tests/pngvalid-gamma-expand16-transform tests/pngvalid-gamma-sbit\ - tests/pngvalid-gamma-threshold tests/pngvalid-gamma-transform\ - tests/pngvalid-progressive-size\ - tests/pngvalid-progressive-interlace-standard\ - tests/pngvalid-transform\ - tests/pngvalid-progressive-standard tests/pngvalid-standard\ - tests/pngstest-1.8 tests/pngstest-1.8-alpha tests/pngstest-linear\ - tests/pngstest-linear-alpha tests/pngstest-none tests/pngstest-none-alpha\ - tests/pngstest-sRGB tests/pngstest-sRGB-alpha tests/pngunknown-IDAT\ - tests/pngunknown-discard tests/pngunknown-if-safe tests/pngunknown-sAPI\ - tests/pngunknown-sTER tests/pngunknown-save tests/pngunknown-vpAg\ - tests/pngimage-quick tests/pngimage-full - - -# man pages -dist_man_MANS = libpng.3 libpngpf.3 png.5 -EXTRA_SCRIPTS = libpng-config libpng16-config -bin_SCRIPTS = ${binconfigs} - -# rules to build libpng, only build the old library on request -lib_LTLIBRARIES = libpng16.la -# EXTRA_LTLIBRARIES= libpng.la -libpng16_la_SOURCES = png.c pngerror.c \ - pngget.c pngmem.c pngpread.c pngread.c pngrio.c pngrtran.c \ - pngrutil.c pngset.c pngtrans.c pngwio.c pngwrite.c pngwtran.c \ - pngwutil.c png.h pngconf.h pngdebug.h pnginfo.h pngpriv.h \ - pngstruct.h pngusr.dfa $(am__append_2) $(am__append_3) \ - $(am__append_4) $(am__append_5) -nodist_libpng16_la_SOURCES = pnglibconf.h -libpng16_la_LDFLAGS = -no-undefined \ - -export-dynamic -version-number \ - 16:37:0 \ - $(am__append_6) $(am__append_7) $(am__append_8) -libpng16_la_DEPENDENCIES = libpng.sym -#libpng16_la_DEPENDENCIES = libpng.vers -pkginclude_HEADERS = png.h pngconf.h -nodist_pkginclude_HEADERS = pnglibconf.h -pkgconfig_DATA = libpng16.pc - -# Extra source distribution files, '${srcdir}' is used below to stop build files -# from those directories being included. This only works if the configure is -# not done in the source directory! -EXTRA_DIST = \ - ANNOUNCE AUTHORS CHANGES INSTALL LICENSE README TODO TRADEMARK \ - pngtest.png pngbar.png pngnow.png pngbar.jpg autogen.sh \ - ${srcdir}/contrib ${srcdir}/projects ${srcdir}/scripts \ - $(TESTS) $(XFAIL_TESTS) tests/pngstest \ - CMakeLists.txt example.c libpng-manual.txt - -SCRIPT_CLEANFILES = scripts/*.out scripts/*.chk -CLEANFILES = *.tf? pngout.png libpng16.pc \ - libpng16-config libpng.vers libpng.sym \ - check.new pnglibconf.h pngprefix.h symbols.new pngtest-log.txt \ - pnglibconf.out pnglibconf.c pnglibconf.pre pnglibconf.dfn \ - $(SCRIPT_CLEANFILES) - -MAINTAINERCLEANFILES = Makefile.in aclocal.m4 config.guess config.h.in \ -config.sub configure depcomp install-sh ltmain.sh missing - -AM_CFLAGS = ${PNG_COPTS} -SUFFIXES = .chk .out - -# We must use -DPNG_NO_USE_READ_MACROS here even when the library may actually -# be built with PNG_USE_READ_MACROS; this prevents the read macros from -# interfering with the symbol file format. -SYMBOL_CFLAGS = -DPNGLIB_LIBNAME='PNG16_0' \ - -DPNGLIB_VERSION='1.6.37' \ - -DSYMBOL_PREFIX='$(SYMBOL_PREFIX)' -DPNG_NO_USE_READ_MACROS \ - -DPNG_BUILDING_SYMBOL_TABLE $(am__append_9) - -# EXT_LIST is a list of the possibly library directory extensions, this exists -# because we can't find a good way of discovering the file extensions that are -# actually installed on a given system, so instead we check for every extension -# we have seen. -EXT_LIST = a dll.a so so.16.37 la sl dylib -all: $(BUILT_SOURCES) config.h - $(MAKE) $(AM_MAKEFLAGS) all-am - -.SUFFIXES: -.SUFFIXES: .chk .out .S .c .lo .log .o .obj .test .test$(EXEEXT) .trs -am--refresh: Makefile - @: -$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ - $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - echo ' $(SHELL) ./config.status'; \ - $(SHELL) ./config.status;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - $(SHELL) ./config.status --recheck - -$(top_srcdir)/configure: # $(am__configure_deps) - $(am__cd) $(srcdir) && $(AUTOCONF) -$(ACLOCAL_M4): # $(am__aclocal_m4_deps) - $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) -$(am__aclocal_m4_deps): - -config.h: stamp-h1 - @test -f $@ || rm -f stamp-h1 - @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 - -stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status - @rm -f stamp-h1 - cd $(top_builddir) && $(SHELL) ./config.status config.h -$(srcdir)/config.h.in: # $(am__configure_deps) - ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) - rm -f stamp-h1 - touch $@ - -distclean-hdr: - -rm -f config.h stamp-h1 -libpng.pc: $(top_builddir)/config.status $(srcdir)/libpng.pc.in - cd $(top_builddir) && $(SHELL) ./config.status $@ -libpng-config: $(top_builddir)/config.status $(srcdir)/libpng-config.in - cd $(top_builddir) && $(SHELL) ./config.status $@ -install-binPROGRAMS: $(bin_PROGRAMS) - @$(NORMAL_INSTALL) - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ - fi; \ - for p in $$list; do echo "$$p $$p"; done | \ - sed 's/$(EXEEXT)$$//' | \ - while read p p1; do if test -f $$p \ - || test -f $$p1 \ - ; then echo "$$p"; echo "$$p"; else :; fi; \ - done | \ - sed -e 'p;s,.*/,,;n;h' \ - -e 's|.*|.|' \ - -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ - sed 'N;N;N;s,\n, ,g' | \ - $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ - { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ - if ($$2 == $$4) files[d] = files[d] " " $$1; \ - else { print "f", $$3 "/" $$4, $$1; } } \ - END { for (d in files) print "f", d, files[d] }' | \ - while read type dir files; do \ - if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ - test -z "$$files" || { \ - echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ - $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ - } \ - ; done - -uninstall-binPROGRAMS: - @$(NORMAL_UNINSTALL) - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - files=`for p in $$list; do echo "$$p"; done | \ - sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ - -e 's/$$/$(EXEEXT)/' \ - `; \ - test -n "$$list" || exit 0; \ - echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(bindir)" && rm -f $$files - -clean-binPROGRAMS: - @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ - echo " rm -f" $$list; \ - rm -f $$list || exit $$?; \ - test -n "$(EXEEXT)" || exit 0; \ - list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f" $$list; \ - rm -f $$list - -clean-checkPROGRAMS: - @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ - echo " rm -f" $$list; \ - rm -f $$list || exit $$?; \ - test -n "$(EXEEXT)" || exit 0; \ - list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f" $$list; \ - rm -f $$list - -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - list2=; for p in $$list; do \ - if test -f $$p; then \ - list2="$$list2 $$p"; \ - else :; fi; \ - done; \ - test -z "$$list2" || { \ - echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ - } - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ - done - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - @list='$(lib_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } -arm/$(am__dirstamp): - @$(MKDIR_P) arm - @: > arm/$(am__dirstamp) -arm/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) arm/$(DEPDIR) - @: > arm/$(DEPDIR)/$(am__dirstamp) -arm/arm_init.lo: arm/$(am__dirstamp) arm/$(DEPDIR)/$(am__dirstamp) -arm/filter_neon.lo: arm/$(am__dirstamp) arm/$(DEPDIR)/$(am__dirstamp) -arm/filter_neon_intrinsics.lo: arm/$(am__dirstamp) \ - arm/$(DEPDIR)/$(am__dirstamp) -arm/palette_neon_intrinsics.lo: arm/$(am__dirstamp) \ - arm/$(DEPDIR)/$(am__dirstamp) -mips/$(am__dirstamp): - @$(MKDIR_P) mips - @: > mips/$(am__dirstamp) -mips/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) mips/$(DEPDIR) - @: > mips/$(DEPDIR)/$(am__dirstamp) -mips/mips_init.lo: mips/$(am__dirstamp) mips/$(DEPDIR)/$(am__dirstamp) -mips/filter_msa_intrinsics.lo: mips/$(am__dirstamp) \ - mips/$(DEPDIR)/$(am__dirstamp) -intel/$(am__dirstamp): - @$(MKDIR_P) intel - @: > intel/$(am__dirstamp) -intel/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) intel/$(DEPDIR) - @: > intel/$(DEPDIR)/$(am__dirstamp) -intel/intel_init.lo: intel/$(am__dirstamp) \ - intel/$(DEPDIR)/$(am__dirstamp) -intel/filter_sse2_intrinsics.lo: intel/$(am__dirstamp) \ - intel/$(DEPDIR)/$(am__dirstamp) -powerpc/$(am__dirstamp): - @$(MKDIR_P) powerpc - @: > powerpc/$(am__dirstamp) -powerpc/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) powerpc/$(DEPDIR) - @: > powerpc/$(DEPDIR)/$(am__dirstamp) -powerpc/powerpc_init.lo: powerpc/$(am__dirstamp) \ - powerpc/$(DEPDIR)/$(am__dirstamp) -powerpc/filter_vsx_intrinsics.lo: powerpc/$(am__dirstamp) \ - powerpc/$(DEPDIR)/$(am__dirstamp) - -libpng16.la: $(libpng16_la_OBJECTS) $(libpng16_la_DEPENDENCIES) $(EXTRA_libpng16_la_DEPENDENCIES) - $(AM_V_CCLD)$(libpng16_la_LINK) -rpath $(libdir) $(libpng16_la_OBJECTS) $(libpng16_la_LIBADD) $(LIBS) -contrib/tools/$(am__dirstamp): - @$(MKDIR_P) contrib/tools - @: > contrib/tools/$(am__dirstamp) -contrib/tools/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) contrib/tools/$(DEPDIR) - @: > contrib/tools/$(DEPDIR)/$(am__dirstamp) -contrib/tools/png-fix-itxt.$(OBJEXT): contrib/tools/$(am__dirstamp) \ - contrib/tools/$(DEPDIR)/$(am__dirstamp) - -png-fix-itxt$(EXEEXT): $(png_fix_itxt_OBJECTS) $(png_fix_itxt_DEPENDENCIES) $(EXTRA_png_fix_itxt_DEPENDENCIES) - @rm -f png-fix-itxt$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(png_fix_itxt_OBJECTS) $(png_fix_itxt_LDADD) $(LIBS) -contrib/tools/pngcp.$(OBJEXT): contrib/tools/$(am__dirstamp) \ - contrib/tools/$(DEPDIR)/$(am__dirstamp) - -pngcp$(EXEEXT): $(pngcp_OBJECTS) $(pngcp_DEPENDENCIES) $(EXTRA_pngcp_DEPENDENCIES) - @rm -f pngcp$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(pngcp_OBJECTS) $(pngcp_LDADD) $(LIBS) -contrib/tools/pngfix.$(OBJEXT): contrib/tools/$(am__dirstamp) \ - contrib/tools/$(DEPDIR)/$(am__dirstamp) - -pngfix$(EXEEXT): $(pngfix_OBJECTS) $(pngfix_DEPENDENCIES) $(EXTRA_pngfix_DEPENDENCIES) - @rm -f pngfix$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(pngfix_OBJECTS) $(pngfix_LDADD) $(LIBS) -contrib/libtests/$(am__dirstamp): - @$(MKDIR_P) contrib/libtests - @: > contrib/libtests/$(am__dirstamp) -contrib/libtests/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) contrib/libtests/$(DEPDIR) - @: > contrib/libtests/$(DEPDIR)/$(am__dirstamp) -contrib/libtests/pngimage.$(OBJEXT): contrib/libtests/$(am__dirstamp) \ - contrib/libtests/$(DEPDIR)/$(am__dirstamp) - -pngimage$(EXEEXT): $(pngimage_OBJECTS) $(pngimage_DEPENDENCIES) $(EXTRA_pngimage_DEPENDENCIES) - @rm -f pngimage$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(pngimage_OBJECTS) $(pngimage_LDADD) $(LIBS) -contrib/libtests/pngstest.$(OBJEXT): contrib/libtests/$(am__dirstamp) \ - contrib/libtests/$(DEPDIR)/$(am__dirstamp) - -pngstest$(EXEEXT): $(pngstest_OBJECTS) $(pngstest_DEPENDENCIES) $(EXTRA_pngstest_DEPENDENCIES) - @rm -f pngstest$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(pngstest_OBJECTS) $(pngstest_LDADD) $(LIBS) - -pngtest$(EXEEXT): $(pngtest_OBJECTS) $(pngtest_DEPENDENCIES) $(EXTRA_pngtest_DEPENDENCIES) - @rm -f pngtest$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(pngtest_OBJECTS) $(pngtest_LDADD) $(LIBS) -contrib/libtests/pngunknown.$(OBJEXT): \ - contrib/libtests/$(am__dirstamp) \ - contrib/libtests/$(DEPDIR)/$(am__dirstamp) - -pngunknown$(EXEEXT): $(pngunknown_OBJECTS) $(pngunknown_DEPENDENCIES) $(EXTRA_pngunknown_DEPENDENCIES) - @rm -f pngunknown$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(pngunknown_OBJECTS) $(pngunknown_LDADD) $(LIBS) -contrib/libtests/pngvalid.$(OBJEXT): contrib/libtests/$(am__dirstamp) \ - contrib/libtests/$(DEPDIR)/$(am__dirstamp) - -pngvalid$(EXEEXT): $(pngvalid_OBJECTS) $(pngvalid_DEPENDENCIES) $(EXTRA_pngvalid_DEPENDENCIES) - @rm -f pngvalid$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(pngvalid_OBJECTS) $(pngvalid_LDADD) $(LIBS) -contrib/libtests/timepng.$(OBJEXT): contrib/libtests/$(am__dirstamp) \ - contrib/libtests/$(DEPDIR)/$(am__dirstamp) - -timepng$(EXEEXT): $(timepng_OBJECTS) $(timepng_DEPENDENCIES) $(EXTRA_timepng_DEPENDENCIES) - @rm -f timepng$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(timepng_OBJECTS) $(timepng_LDADD) $(LIBS) -install-binSCRIPTS: $(bin_SCRIPTS) - @$(NORMAL_INSTALL) - @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ - done | \ - sed -e 'p;s,.*/,,;n' \ - -e 'h;s|.*|.|' \ - -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ - $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ - { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ - if ($$2 == $$4) { files[d] = files[d] " " $$1; \ - if (++n[d] == $(am__install_max)) { \ - print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ - else { print "f", d "/" $$4, $$1 } } \ - END { for (d in files) print "f", d, files[d] }' | \ - while read type dir files; do \ - if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ - test -z "$$files" || { \ - echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ - $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ - } \ - ; done - -uninstall-binSCRIPTS: - @$(NORMAL_UNINSTALL) - @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ - files=`for p in $$list; do echo "$$p"; done | \ - sed -e 's,.*/,,;$(transform)'`; \ - dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -rm -f arm/*.$(OBJEXT) - -rm -f arm/*.lo - -rm -f contrib/libtests/*.$(OBJEXT) - -rm -f contrib/tools/*.$(OBJEXT) - -rm -f intel/*.$(OBJEXT) - -rm -f intel/*.lo - -rm -f mips/*.$(OBJEXT) - -rm -f mips/*.lo - -rm -f powerpc/*.$(OBJEXT) - -rm -f powerpc/*.lo - -distclean-compile: - -rm -f *.tab.c - -include ./$(DEPDIR)/png.Plo # am--include-marker -include ./$(DEPDIR)/pngerror.Plo # am--include-marker -include ./$(DEPDIR)/pngget.Plo # am--include-marker -include ./$(DEPDIR)/pngmem.Plo # am--include-marker -include ./$(DEPDIR)/pngpread.Plo # am--include-marker -include ./$(DEPDIR)/pngread.Plo # am--include-marker -include ./$(DEPDIR)/pngrio.Plo # am--include-marker -include ./$(DEPDIR)/pngrtran.Plo # am--include-marker -include ./$(DEPDIR)/pngrutil.Plo # am--include-marker -include ./$(DEPDIR)/pngset.Plo # am--include-marker -include ./$(DEPDIR)/pngtest.Po # am--include-marker -include ./$(DEPDIR)/pngtrans.Plo # am--include-marker -include ./$(DEPDIR)/pngwio.Plo # am--include-marker -include ./$(DEPDIR)/pngwrite.Plo # am--include-marker -include ./$(DEPDIR)/pngwtran.Plo # am--include-marker -include ./$(DEPDIR)/pngwutil.Plo # am--include-marker -include arm/$(DEPDIR)/arm_init.Plo # am--include-marker -include arm/$(DEPDIR)/filter_neon.Plo # am--include-marker -include arm/$(DEPDIR)/filter_neon_intrinsics.Plo # am--include-marker -include arm/$(DEPDIR)/palette_neon_intrinsics.Plo # am--include-marker -include contrib/libtests/$(DEPDIR)/pngimage.Po # am--include-marker -include contrib/libtests/$(DEPDIR)/pngstest.Po # am--include-marker -include contrib/libtests/$(DEPDIR)/pngunknown.Po # am--include-marker -include contrib/libtests/$(DEPDIR)/pngvalid.Po # am--include-marker -include contrib/libtests/$(DEPDIR)/timepng.Po # am--include-marker -include contrib/tools/$(DEPDIR)/png-fix-itxt.Po # am--include-marker -include contrib/tools/$(DEPDIR)/pngcp.Po # am--include-marker -include contrib/tools/$(DEPDIR)/pngfix.Po # am--include-marker -include intel/$(DEPDIR)/filter_sse2_intrinsics.Plo # am--include-marker -include intel/$(DEPDIR)/intel_init.Plo # am--include-marker -include mips/$(DEPDIR)/filter_msa_intrinsics.Plo # am--include-marker -include mips/$(DEPDIR)/mips_init.Plo # am--include-marker -include powerpc/$(DEPDIR)/filter_vsx_intrinsics.Plo # am--include-marker -include powerpc/$(DEPDIR)/powerpc_init.Plo # am--include-marker - -$(am__depfiles_remade): - @$(MKDIR_P) $(@D) - @echo '# dummy' >$@-t && $(am__mv) $@-t $@ - -am--depfiles: $(am__depfiles_remade) - -.S.o: - $(AM_V_CPPAS)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ - $(CPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - $(am__mv) $$depbase.Tpo $$depbase.Po -# $(AM_V_CPPAS)source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) \ -# $(AM_V_CPPAS_no)$(CPPASCOMPILE) -c -o $@ $< - -.S.obj: - $(AM_V_CPPAS)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ - $(CPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ - $(am__mv) $$depbase.Tpo $$depbase.Po -# $(AM_V_CPPAS)source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) \ -# $(AM_V_CPPAS_no)$(CPPASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.S.lo: - $(AM_V_CPPAS)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ - $(LTCPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - $(am__mv) $$depbase.Tpo $$depbase.Plo -# $(AM_V_CPPAS)source='$<' object='$@' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) \ -# $(AM_V_CPPAS_no)$(LTCPPASCOMPILE) -c -o $@ $< - -.c.o: - $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ - $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - $(am__mv) $$depbase.Tpo $$depbase.Po -# $(AM_V_CC)source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(COMPILE) -c -o $@ $< - -.c.obj: - $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ - $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ - $(am__mv) $$depbase.Tpo $$depbase.Po -# $(AM_V_CC)source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.c.lo: - $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ - $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - $(am__mv) $$depbase.Tpo $$depbase.Plo -# $(AM_V_CC)source='$<' object='$@' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -rm -rf arm/.libs arm/_libs - -rm -rf intel/.libs intel/_libs - -rm -rf mips/.libs mips/_libs - -rm -rf powerpc/.libs powerpc/_libs - -distclean-libtool: - -rm -f libtool config.lt -install-man3: $(dist_man_MANS) - @$(NORMAL_INSTALL) - @list1=''; \ - list2='$(dist_man_MANS)'; \ - test -n "$(man3dir)" \ - && test -n "`echo $$list1$$list2`" \ - || exit 0; \ - echo " $(MKDIR_P) '$(DESTDIR)$(man3dir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(man3dir)" || exit 1; \ - { for i in $$list1; do echo "$$i"; done; \ - if test -n "$$list2"; then \ - for i in $$list2; do echo "$$i"; done \ - | sed -n '/\.3[a-z]*$$/p'; \ - fi; \ - } | while read p; do \ - if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; echo "$$p"; \ - done | \ - sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ - -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ - sed 'N;N;s,\n, ,g' | { \ - list=; while read file base inst; do \ - if test "$$base" = "$$inst"; then list="$$list $$file"; else \ - echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \ - $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst" || exit $$?; \ - fi; \ - done; \ - for i in $$list; do echo "$$i"; done | $(am__base_list) | \ - while read files; do \ - test -z "$$files" || { \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man3dir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(man3dir)" || exit $$?; }; \ - done; } - -uninstall-man3: - @$(NORMAL_UNINSTALL) - @list=''; test -n "$(man3dir)" || exit 0; \ - files=`{ for i in $$list; do echo "$$i"; done; \ - l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ - sed -n '/\.3[a-z]*$$/p'; \ - } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ - -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ - dir='$(DESTDIR)$(man3dir)'; $(am__uninstall_files_from_dir) -install-man5: $(dist_man_MANS) - @$(NORMAL_INSTALL) - @list1=''; \ - list2='$(dist_man_MANS)'; \ - test -n "$(man5dir)" \ - && test -n "`echo $$list1$$list2`" \ - || exit 0; \ - echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \ - { for i in $$list1; do echo "$$i"; done; \ - if test -n "$$list2"; then \ - for i in $$list2; do echo "$$i"; done \ - | sed -n '/\.5[a-z]*$$/p'; \ - fi; \ - } | while read p; do \ - if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; echo "$$p"; \ - done | \ - sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ - -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ - sed 'N;N;s,\n, ,g' | { \ - list=; while read file base inst; do \ - if test "$$base" = "$$inst"; then list="$$list $$file"; else \ - echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \ - $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \ - fi; \ - done; \ - for i in $$list; do echo "$$i"; done | $(am__base_list) | \ - while read files; do \ - test -z "$$files" || { \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \ - done; } - -uninstall-man5: - @$(NORMAL_UNINSTALL) - @list=''; test -n "$(man5dir)" || exit 0; \ - files=`{ for i in $$list; do echo "$$i"; done; \ - l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ - sed -n '/\.5[a-z]*$$/p'; \ - } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ - -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ - dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir) -install-pkgconfigDATA: $(pkgconfig_DATA) - @$(NORMAL_INSTALL) - @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ - done - -uninstall-pkgconfigDATA: - @$(NORMAL_UNINSTALL) - @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) -install-nodist_pkgincludeHEADERS: $(nodist_pkginclude_HEADERS) - @$(NORMAL_INSTALL) - @list='$(nodist_pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ - done - -uninstall-nodist_pkgincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(nodist_pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) -install-pkgincludeHEADERS: $(pkginclude_HEADERS) - @$(NORMAL_INSTALL) - @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ - done - -uninstall-pkgincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscope: cscope.files - test ! -s cscope.files \ - || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) -clean-cscope: - -rm -f cscope.files -cscope.files: clean-cscope cscopelist -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -rm -f cscope.out cscope.in.out cscope.po.out cscope.files - -# Recover from deleted '.trs' file; this should ensure that -# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create -# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells -# to avoid problems with "make -n". -.log.trs: - rm -f $< $@ - $(MAKE) $(AM_MAKEFLAGS) $< - -# Leading 'am--fnord' is there to ensure the list of targets does not -# expand to empty, as could happen e.g. with make check TESTS=''. -am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) -am--force-recheck: - @: - -$(TEST_SUITE_LOG): $(TEST_LOGS) - @$(am__set_TESTS_bases); \ - am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ - redo_bases=`for i in $$bases; do \ - am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ - done`; \ - if test -n "$$redo_bases"; then \ - redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ - redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ - if $(am__make_dryrun); then :; else \ - rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ - fi; \ - fi; \ - if test -n "$$am__remaking_logs"; then \ - echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ - "recursion detected" >&2; \ - elif test -n "$$redo_logs"; then \ - am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ - fi; \ - if $(am__make_dryrun); then :; else \ - st=0; \ - errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ - for i in $$redo_bases; do \ - test -f $$i.trs && test -r $$i.trs \ - || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ - test -f $$i.log && test -r $$i.log \ - || { echo "$$errmsg $$i.log" >&2; st=1; }; \ - done; \ - test $$st -eq 0 || exit 1; \ - fi - @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ - ws='[ ]'; \ - results=`for b in $$bases; do echo $$b.trs; done`; \ - test -n "$$results" || results=/dev/null; \ - all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ - pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ - fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ - skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ - xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ - xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ - error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ - if test `expr $$fail + $$xpass + $$error` -eq 0; then \ - success=true; \ - else \ - success=false; \ - fi; \ - br='==================='; br=$$br$$br$$br$$br; \ - result_count () \ - { \ - if test x"$$1" = x"--maybe-color"; then \ - maybe_colorize=yes; \ - elif test x"$$1" = x"--no-color"; then \ - maybe_colorize=no; \ - else \ - echo "$@: invalid 'result_count' usage" >&2; exit 4; \ - fi; \ - shift; \ - desc=$$1 count=$$2; \ - if test $$maybe_colorize = yes && test $$count -gt 0; then \ - color_start=$$3 color_end=$$std; \ - else \ - color_start= color_end=; \ - fi; \ - echo "$${color_start}# $$desc $$count$${color_end}"; \ - }; \ - create_testsuite_report () \ - { \ - result_count $$1 "TOTAL:" $$all "$$brg"; \ - result_count $$1 "PASS: " $$pass "$$grn"; \ - result_count $$1 "SKIP: " $$skip "$$blu"; \ - result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ - result_count $$1 "FAIL: " $$fail "$$red"; \ - result_count $$1 "XPASS:" $$xpass "$$red"; \ - result_count $$1 "ERROR:" $$error "$$mgn"; \ - }; \ - { \ - echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ - $(am__rst_title); \ - create_testsuite_report --no-color; \ - echo; \ - echo ".. contents:: :depth: 2"; \ - echo; \ - for b in $$bases; do echo $$b; done \ - | $(am__create_global_log); \ - } >$(TEST_SUITE_LOG).tmp || exit 1; \ - mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ - if $$success; then \ - col="$$grn"; \ - else \ - col="$$red"; \ - test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ - fi; \ - echo "$${col}$$br$${std}"; \ - echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ - echo "$${col}$$br$${std}"; \ - create_testsuite_report --maybe-color; \ - echo "$$col$$br$$std"; \ - if $$success; then :; else \ - echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ - if test -n "$(PACKAGE_BUGREPORT)"; then \ - echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ - fi; \ - echo "$$col$$br$$std"; \ - fi; \ - $$success || exit 1 - -check-TESTS: $(check_PROGRAMS) - @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list - @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list - @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) - @set +e; $(am__set_TESTS_bases); \ - log_list=`for i in $$bases; do echo $$i.log; done`; \ - trs_list=`for i in $$bases; do echo $$i.trs; done`; \ - log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ - $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ - exit $$?; -recheck: all $(check_PROGRAMS) - @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) - @set +e; $(am__set_TESTS_bases); \ - bases=`for i in $$bases; do echo $$i; done \ - | $(am__list_recheck_tests)` || exit 1; \ - log_list=`for i in $$bases; do echo $$i.log; done`; \ - log_list=`echo $$log_list`; \ - $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ - am__force_recheck=am--force-recheck \ - TEST_LOGS="$$log_list"; \ - exit $$? -tests/pngtest.log: tests/pngtest - @p='tests/pngtest'; \ - b='tests/pngtest'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/pngtest-badpngs.log: tests/pngtest-badpngs - @p='tests/pngtest-badpngs'; \ - b='tests/pngtest-badpngs'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/pngvalid-gamma-16-to-8.log: tests/pngvalid-gamma-16-to-8 - @p='tests/pngvalid-gamma-16-to-8'; \ - b='tests/pngvalid-gamma-16-to-8'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/pngvalid-gamma-alpha-mode.log: tests/pngvalid-gamma-alpha-mode - @p='tests/pngvalid-gamma-alpha-mode'; \ - b='tests/pngvalid-gamma-alpha-mode'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/pngvalid-gamma-background.log: tests/pngvalid-gamma-background - @p='tests/pngvalid-gamma-background'; \ - b='tests/pngvalid-gamma-background'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/pngvalid-gamma-expand16-alpha-mode.log: tests/pngvalid-gamma-expand16-alpha-mode - @p='tests/pngvalid-gamma-expand16-alpha-mode'; \ - b='tests/pngvalid-gamma-expand16-alpha-mode'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/pngvalid-gamma-expand16-background.log: tests/pngvalid-gamma-expand16-background - @p='tests/pngvalid-gamma-expand16-background'; \ - b='tests/pngvalid-gamma-expand16-background'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/pngvalid-gamma-expand16-transform.log: tests/pngvalid-gamma-expand16-transform - @p='tests/pngvalid-gamma-expand16-transform'; \ - b='tests/pngvalid-gamma-expand16-transform'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/pngvalid-gamma-sbit.log: tests/pngvalid-gamma-sbit - @p='tests/pngvalid-gamma-sbit'; \ - b='tests/pngvalid-gamma-sbit'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/pngvalid-gamma-threshold.log: tests/pngvalid-gamma-threshold - @p='tests/pngvalid-gamma-threshold'; \ - b='tests/pngvalid-gamma-threshold'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/pngvalid-gamma-transform.log: tests/pngvalid-gamma-transform - @p='tests/pngvalid-gamma-transform'; \ - b='tests/pngvalid-gamma-transform'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/pngvalid-progressive-size.log: tests/pngvalid-progressive-size - @p='tests/pngvalid-progressive-size'; \ - b='tests/pngvalid-progressive-size'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/pngvalid-progressive-interlace-standard.log: tests/pngvalid-progressive-interlace-standard - @p='tests/pngvalid-progressive-interlace-standard'; \ - b='tests/pngvalid-progressive-interlace-standard'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/pngvalid-transform.log: tests/pngvalid-transform - @p='tests/pngvalid-transform'; \ - b='tests/pngvalid-transform'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/pngvalid-progressive-standard.log: tests/pngvalid-progressive-standard - @p='tests/pngvalid-progressive-standard'; \ - b='tests/pngvalid-progressive-standard'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/pngvalid-standard.log: tests/pngvalid-standard - @p='tests/pngvalid-standard'; \ - b='tests/pngvalid-standard'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/pngstest-1.8.log: tests/pngstest-1.8 - @p='tests/pngstest-1.8'; \ - b='tests/pngstest-1.8'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/pngstest-1.8-alpha.log: tests/pngstest-1.8-alpha - @p='tests/pngstest-1.8-alpha'; \ - b='tests/pngstest-1.8-alpha'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/pngstest-linear.log: tests/pngstest-linear - @p='tests/pngstest-linear'; \ - b='tests/pngstest-linear'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/pngstest-linear-alpha.log: tests/pngstest-linear-alpha - @p='tests/pngstest-linear-alpha'; \ - b='tests/pngstest-linear-alpha'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/pngstest-none.log: tests/pngstest-none - @p='tests/pngstest-none'; \ - b='tests/pngstest-none'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/pngstest-none-alpha.log: tests/pngstest-none-alpha - @p='tests/pngstest-none-alpha'; \ - b='tests/pngstest-none-alpha'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/pngstest-sRGB.log: tests/pngstest-sRGB - @p='tests/pngstest-sRGB'; \ - b='tests/pngstest-sRGB'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/pngstest-sRGB-alpha.log: tests/pngstest-sRGB-alpha - @p='tests/pngstest-sRGB-alpha'; \ - b='tests/pngstest-sRGB-alpha'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/pngunknown-IDAT.log: tests/pngunknown-IDAT - @p='tests/pngunknown-IDAT'; \ - b='tests/pngunknown-IDAT'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/pngunknown-discard.log: tests/pngunknown-discard - @p='tests/pngunknown-discard'; \ - b='tests/pngunknown-discard'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/pngunknown-if-safe.log: tests/pngunknown-if-safe - @p='tests/pngunknown-if-safe'; \ - b='tests/pngunknown-if-safe'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/pngunknown-sAPI.log: tests/pngunknown-sAPI - @p='tests/pngunknown-sAPI'; \ - b='tests/pngunknown-sAPI'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/pngunknown-sTER.log: tests/pngunknown-sTER - @p='tests/pngunknown-sTER'; \ - b='tests/pngunknown-sTER'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/pngunknown-save.log: tests/pngunknown-save - @p='tests/pngunknown-save'; \ - b='tests/pngunknown-save'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/pngunknown-vpAg.log: tests/pngunknown-vpAg - @p='tests/pngunknown-vpAg'; \ - b='tests/pngunknown-vpAg'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/pngimage-quick.log: tests/pngimage-quick - @p='tests/pngimage-quick'; \ - b='tests/pngimage-quick'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/pngimage-full.log: tests/pngimage-full - @p='tests/pngimage-full'; \ - b='tests/pngimage-full'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -.test.log: - @p='$<'; \ - $(am__set_b); \ - $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -.test$(EXEEXT).log: - @p='$<'; \ - $(am__set_b); \ - $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) - -distdir: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) distdir-am - -distdir-am: $(DISTFILES) - $(am__remove_distdir) - test -d "$(distdir)" || mkdir "$(distdir)" - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$(top_distdir)" distdir="$(distdir)" \ - dist-hook - -test -n "$(am__skip_mode_fix)" \ - || find "$(distdir)" -type d ! -perm -755 \ - -exec chmod u+rwx,go+rx {} \; -o \ - ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r "$(distdir)" -dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz - $(am__post_remove_distdir) - -dist-bzip2: distdir - tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 - $(am__post_remove_distdir) - -dist-lzip: distdir - tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz - $(am__post_remove_distdir) -dist-xz: distdir - tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz - $(am__post_remove_distdir) - -dist-tarZ: distdir - @echo WARNING: "Support for distribution archives compressed with" \ - "legacy program 'compress' is deprecated." >&2 - @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 - tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z - $(am__post_remove_distdir) - -dist-shar: distdir - @echo WARNING: "Support for shar distribution archives is" \ - "deprecated." >&2 - @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 - shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz - $(am__post_remove_distdir) - -dist-zip: distdir - -rm -f $(distdir).zip - zip -rq $(distdir).zip $(distdir) - $(am__post_remove_distdir) - -dist dist-all: - $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' - $(am__post_remove_distdir) - -# This target untars the dist file and tries a VPATH configuration. Then -# it guarantees that the distribution is self-contained by making another -# tarfile. -distcheck: dist - case '$(DIST_ARCHIVES)' in \ - *.tar.gz*) \ - eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ - *.tar.bz2*) \ - bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ - *.tar.lz*) \ - lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ - *.tar.xz*) \ - xz -dc $(distdir).tar.xz | $(am__untar) ;;\ - *.tar.Z*) \ - uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ - *.shar.gz*) \ - eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ - *.zip*) \ - unzip $(distdir).zip ;;\ - esac - chmod -R a-w $(distdir) - chmod u+w $(distdir) - mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst - chmod a-w $(distdir) - test -d $(distdir)/_build || exit 0; \ - dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ - && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && am__cwd=`pwd` \ - && $(am__cd) $(distdir)/_build/sub \ - && ../../configure \ - $(AM_DISTCHECK_CONFIGURE_FLAGS) \ - $(DISTCHECK_CONFIGURE_FLAGS) \ - --srcdir=../.. --prefix="$$dc_install_base" \ - && $(MAKE) $(AM_MAKEFLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) dvi \ - && $(MAKE) $(AM_MAKEFLAGS) check \ - && $(MAKE) $(AM_MAKEFLAGS) install \ - && $(MAKE) $(AM_MAKEFLAGS) installcheck \ - && $(MAKE) $(AM_MAKEFLAGS) uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ - distuninstallcheck \ - && chmod -R a-w "$$dc_install_base" \ - && ({ \ - (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ - distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ - } || { rm -rf "$$dc_destdir"; exit 1; }) \ - && rm -rf "$$dc_destdir" \ - && $(MAKE) $(AM_MAKEFLAGS) dist \ - && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ - && cd "$$am__cwd" \ - || exit 1 - $(am__post_remove_distdir) - @(echo "$(distdir) archives ready for distribution: "; \ - list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ - sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' -distuninstallcheck: - @test -n '$(distuninstallcheck_dir)' || { \ - echo 'ERROR: trying to run $@ with an empty' \ - '$$(distuninstallcheck_dir)' >&2; \ - exit 1; \ - }; \ - $(am__cd) '$(distuninstallcheck_dir)' || { \ - echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ - exit 1; \ - }; \ - test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left after uninstall:" ; \ - if test -n "$(DESTDIR)"; then \ - echo " (check DESTDIR support)"; \ - fi ; \ - $(distuninstallcheck_listfiles) ; \ - exit 1; } >&2 -distcleancheck: distclean - @if test '$(srcdir)' = . ; then \ - echo "ERROR: distcleancheck can only run from a VPATH build" ; \ - exit 1 ; \ - fi - @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left in build directory after distclean:" ; \ - $(distcleancheck_listfiles) ; \ - exit 1; } >&2 -check-am: all-am - $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) - $(MAKE) $(AM_MAKEFLAGS) check-TESTS -check: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) check-am -all-am: Makefile $(PROGRAMS) $(LTLIBRARIES) $(SCRIPTS) $(MANS) $(DATA) \ - $(HEADERS) config.h -install-binPROGRAMS: install-libLTLIBRARIES - -installdirs: - for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(pkgincludedir)" "$(DESTDIR)$(pkgincludedir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) - -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) - -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -rm -f arm/$(DEPDIR)/$(am__dirstamp) - -rm -f arm/$(am__dirstamp) - -rm -f contrib/libtests/$(DEPDIR)/$(am__dirstamp) - -rm -f contrib/libtests/$(am__dirstamp) - -rm -f contrib/tools/$(DEPDIR)/$(am__dirstamp) - -rm -f contrib/tools/$(am__dirstamp) - -rm -f intel/$(DEPDIR)/$(am__dirstamp) - -rm -f intel/$(am__dirstamp) - -rm -f mips/$(DEPDIR)/$(am__dirstamp) - -rm -f mips/$(am__dirstamp) - -rm -f powerpc/$(DEPDIR)/$(am__dirstamp) - -rm -f powerpc/$(am__dirstamp) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." - -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) - -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) -##install-exec-hook: -##install-data-hook: -###uninstall-hook: -clean: clean-am - -clean-am: clean-binPROGRAMS clean-checkPROGRAMS clean-generic \ - clean-libLTLIBRARIES clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -f ./$(DEPDIR)/png.Plo - -rm -f ./$(DEPDIR)/pngerror.Plo - -rm -f ./$(DEPDIR)/pngget.Plo - -rm -f ./$(DEPDIR)/pngmem.Plo - -rm -f ./$(DEPDIR)/pngpread.Plo - -rm -f ./$(DEPDIR)/pngread.Plo - -rm -f ./$(DEPDIR)/pngrio.Plo - -rm -f ./$(DEPDIR)/pngrtran.Plo - -rm -f ./$(DEPDIR)/pngrutil.Plo - -rm -f ./$(DEPDIR)/pngset.Plo - -rm -f ./$(DEPDIR)/pngtest.Po - -rm -f ./$(DEPDIR)/pngtrans.Plo - -rm -f ./$(DEPDIR)/pngwio.Plo - -rm -f ./$(DEPDIR)/pngwrite.Plo - -rm -f ./$(DEPDIR)/pngwtran.Plo - -rm -f ./$(DEPDIR)/pngwutil.Plo - -rm -f arm/$(DEPDIR)/arm_init.Plo - -rm -f arm/$(DEPDIR)/filter_neon.Plo - -rm -f arm/$(DEPDIR)/filter_neon_intrinsics.Plo - -rm -f arm/$(DEPDIR)/palette_neon_intrinsics.Plo - -rm -f contrib/libtests/$(DEPDIR)/pngimage.Po - -rm -f contrib/libtests/$(DEPDIR)/pngstest.Po - -rm -f contrib/libtests/$(DEPDIR)/pngunknown.Po - -rm -f contrib/libtests/$(DEPDIR)/pngvalid.Po - -rm -f contrib/libtests/$(DEPDIR)/timepng.Po - -rm -f contrib/tools/$(DEPDIR)/png-fix-itxt.Po - -rm -f contrib/tools/$(DEPDIR)/pngcp.Po - -rm -f contrib/tools/$(DEPDIR)/pngfix.Po - -rm -f intel/$(DEPDIR)/filter_sse2_intrinsics.Plo - -rm -f intel/$(DEPDIR)/intel_init.Plo - -rm -f mips/$(DEPDIR)/filter_msa_intrinsics.Plo - -rm -f mips/$(DEPDIR)/mips_init.Plo - -rm -f powerpc/$(DEPDIR)/filter_vsx_intrinsics.Plo - -rm -f powerpc/$(DEPDIR)/powerpc_init.Plo - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-hdr distclean-libtool distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-man install-nodist_pkgincludeHEADERS \ - install-pkgconfigDATA install-pkgincludeHEADERS - @$(NORMAL_INSTALL) - $(MAKE) $(AM_MAKEFLAGS) install-data-hook -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: install-binPROGRAMS install-binSCRIPTS \ - install-libLTLIBRARIES - @$(NORMAL_INSTALL) - $(MAKE) $(AM_MAKEFLAGS) install-exec-hook -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: install-man3 install-man5 - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf $(top_srcdir)/autom4te.cache - -rm -f ./$(DEPDIR)/png.Plo - -rm -f ./$(DEPDIR)/pngerror.Plo - -rm -f ./$(DEPDIR)/pngget.Plo - -rm -f ./$(DEPDIR)/pngmem.Plo - -rm -f ./$(DEPDIR)/pngpread.Plo - -rm -f ./$(DEPDIR)/pngread.Plo - -rm -f ./$(DEPDIR)/pngrio.Plo - -rm -f ./$(DEPDIR)/pngrtran.Plo - -rm -f ./$(DEPDIR)/pngrutil.Plo - -rm -f ./$(DEPDIR)/pngset.Plo - -rm -f ./$(DEPDIR)/pngtest.Po - -rm -f ./$(DEPDIR)/pngtrans.Plo - -rm -f ./$(DEPDIR)/pngwio.Plo - -rm -f ./$(DEPDIR)/pngwrite.Plo - -rm -f ./$(DEPDIR)/pngwtran.Plo - -rm -f ./$(DEPDIR)/pngwutil.Plo - -rm -f arm/$(DEPDIR)/arm_init.Plo - -rm -f arm/$(DEPDIR)/filter_neon.Plo - -rm -f arm/$(DEPDIR)/filter_neon_intrinsics.Plo - -rm -f arm/$(DEPDIR)/palette_neon_intrinsics.Plo - -rm -f contrib/libtests/$(DEPDIR)/pngimage.Po - -rm -f contrib/libtests/$(DEPDIR)/pngstest.Po - -rm -f contrib/libtests/$(DEPDIR)/pngunknown.Po - -rm -f contrib/libtests/$(DEPDIR)/pngvalid.Po - -rm -f contrib/libtests/$(DEPDIR)/timepng.Po - -rm -f contrib/tools/$(DEPDIR)/png-fix-itxt.Po - -rm -f contrib/tools/$(DEPDIR)/pngcp.Po - -rm -f contrib/tools/$(DEPDIR)/pngfix.Po - -rm -f intel/$(DEPDIR)/filter_sse2_intrinsics.Plo - -rm -f intel/$(DEPDIR)/intel_init.Plo - -rm -f mips/$(DEPDIR)/filter_msa_intrinsics.Plo - -rm -f mips/$(DEPDIR)/mips_init.Plo - -rm -f powerpc/$(DEPDIR)/filter_vsx_intrinsics.Plo - -rm -f powerpc/$(DEPDIR)/powerpc_init.Plo - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \ - uninstall-libLTLIBRARIES uninstall-man \ - uninstall-nodist_pkgincludeHEADERS uninstall-pkgconfigDATA \ - uninstall-pkgincludeHEADERS - @$(NORMAL_INSTALL) - $(MAKE) $(AM_MAKEFLAGS) uninstall-hook -uninstall-man: uninstall-man3 uninstall-man5 - -.MAKE: all check check-am install install-am install-data-am \ - install-exec-am install-strip uninstall-am - -.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles am--refresh check \ - check-TESTS check-am clean clean-binPROGRAMS \ - clean-checkPROGRAMS clean-cscope clean-generic \ - clean-libLTLIBRARIES clean-libtool cscope cscopelist-am ctags \ - ctags-am dist dist-all dist-bzip2 dist-gzip dist-hook \ - dist-lzip dist-shar dist-tarZ dist-xz dist-zip distcheck \ - distclean distclean-compile distclean-generic distclean-hdr \ - distclean-libtool distclean-tags distcleancheck distdir \ - distuninstallcheck dvi dvi-am html html-am info info-am \ - install install-am install-binPROGRAMS install-binSCRIPTS \ - install-data install-data-am install-data-hook install-dvi \ - install-dvi-am install-exec install-exec-am install-exec-hook \ - install-html install-html-am install-info install-info-am \ - install-libLTLIBRARIES install-man install-man3 install-man5 \ - install-nodist_pkgincludeHEADERS install-pdf install-pdf-am \ - install-pkgconfigDATA install-pkgincludeHEADERS install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am recheck tags tags-am \ - uninstall uninstall-am uninstall-binPROGRAMS \ - uninstall-binSCRIPTS uninstall-hook uninstall-libLTLIBRARIES \ - uninstall-man uninstall-man3 uninstall-man5 \ - uninstall-nodist_pkgincludeHEADERS uninstall-pkgconfigDATA \ - uninstall-pkgincludeHEADERS - -.PRECIOUS: Makefile - - -$(PNGLIB_BASENAME).pc: libpng.pc - cp libpng.pc $@ - -$(PNGLIB_BASENAME)-config: libpng-config - cp libpng-config $@ - -scripts/sym.out scripts/vers.out: png.h pngconf.h pnglibconf.h -scripts/prefix.out: png.h pngconf.h pnglibconf.out -scripts/symbols.out: png.h pngconf.h $(srcdir)/scripts/pnglibconf.h.prebuilt -scripts/intprefix.out: pnglibconf.h - -libpng.sym: scripts/sym.out - rm -f $@ - cp $? $@ -libpng.vers: scripts/vers.out - rm -f $@ - cp $? $@ - -# Rename functions in scripts/prefix.out with a PNG_PREFIX prefix. -# Rename macros in scripts/macro.lst from PNG_PREFIXpng_ to PNG_ (the actual -# implementation of the macro). -#pnglibconf.h: pnglibconf.out scripts/prefix.out scripts/macro.lst -# rm -f $@ -# $(AWK) 's==0 && NR>1{print prev}\ -# s==0{prev=$$0}\ -# s==1{print "#define", $$1, "" $$1}\ -# s==2{print "#define png_" $$1, "PNG_" $$1}\ -# END{print prev}' s=0 pnglibconf.out s=1 scripts/prefix.out\ -# s=2 ${srcdir}/scripts/macro.lst >pnglibconf.tf8 -# mv pnglibconf.tf8 $@ - -#pngprefix.h: scripts/intprefix.out -# rm -f pngprefix.tf1 -# $(AWK) '{print "#define", $$1, "" $$1}' $? >pngprefix.tf1 -# mv pngprefix.tf1 $@ -pnglibconf.h: pnglibconf.out - rm -f $@ - cp $? $@ - -pngprefix.h: # is empty - :>$@ - -$(srcdir)/scripts/pnglibconf.h.prebuilt: - @echo "Attempting to build $@" >&2 - @echo "This is a machine generated file, but if you want to make" >&2 - @echo "a new one simply make 'scripts/pnglibconf.out', copy that" >&2 - @echo "AND set PNG_ZLIB_VERNUM to 0 (you MUST do this)" >&2 - @exit 1 - -# The following is necessary to ensure that the local pnglibconf.h is used, not -# an installed one (this can happen immediately after on a clean system if -# 'make test' is the first thing the user does.) Only files which include -# one of the png source files (typically png.h or pngpriv.h) need to be listed -# here: -pngtest.o: pnglibconf.h - -contrib/libtests/makepng.o: pnglibconf.h -contrib/libtests/pngstest.o: pnglibconf.h -contrib/libtests/pngunknown.o: pnglibconf.h -contrib/libtests/pngimage.o: pnglibconf.h -contrib/libtests/pngvalid.o: pnglibconf.h -contrib/libtests/readpng.o: pnglibconf.h -contrib/libtests/tarith.o: pnglibconf.h -contrib/libtests/timepng.o: pnglibconf.h - -contrib/tools/makesRGB.o: pnglibconf.h -contrib/tools/pngfix.o: pnglibconf.h -contrib/tools/pngcp.o: pnglibconf.h - -.c.out: - rm -f $@ $*.tf[12] - test -d scripts || mkdir scripts || test -d scripts - $(DFNCPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)\ - $(CPPFLAGS) $(SYMBOL_CFLAGS) $< > $*.tf1 - $(AWK) -f "${srcdir}/scripts/dfn.awk" out="$*.tf2" $*.tf1 1>&2 - rm -f $*.tf1 - mv $*.tf2 $@ - -# The .c file for pnglibconf.h is machine generated -pnglibconf.c: scripts/pnglibconf.dfa scripts/options.awk pngconf.h pngusr.dfa $(DFA_XTRA) - rm -f $@ $*.tf[45] - $(AWK) -f ${srcdir}/scripts/options.awk out=$*.tf4 version=search\ - ${srcdir}/pngconf.h ${srcdir}/scripts/pnglibconf.dfa\ - ${srcdir}/pngusr.dfa $(DFA_XTRA) 1>&2 - $(AWK) -f ${srcdir}/scripts/options.awk out=$*.tf5 $*.tf4 1>&2 - rm $*.tf4 - mv $*.tf5 $@ - -# Symbol checks (.def and .out files should match) -scripts/symbols.chk: scripts/checksym.awk scripts/symbols.def scripts/symbols.out - -.out.chk: - rm -f $@ $*.new - $(AWK) -f ${srcdir}/scripts/checksym.awk ${srcdir}/scripts/${*F}.def\ - of="$*.new" $< >&2 - mv $*.new $@ - -# used on demand to regenerate the standard header, CPPFLAGS should -# be empty - no non-standard defines -scripts/pnglibconf.c: scripts/pnglibconf.dfa scripts/options.awk pngconf.h - rm -f $@ pnglibconf.tf[67] - test -z "$(CPPFLAGS)" - echo "com 1.6.37 STANDARD API DEFINITION" |\ - $(AWK) -f ${srcdir}/scripts/options.awk out=pnglibconf.tf6\ - logunsupported=1 version=search ${srcdir}/pngconf.h -\ - ${srcdir}/scripts/pnglibconf.dfa 1>&2 - $(AWK) -f ${srcdir}/scripts/options.awk out=pnglibconf.tf7\ - pnglibconf.tf6 1>&2 - rm pnglibconf.tf6 - mv pnglibconf.tf7 $@ - -$(libpng16_la_OBJECTS): png.h pngconf.h \ - pnglibconf.h pngpriv.h pngdebug.h pnginfo.h pngstruct.h pngprefix.h - -test: check-am - -# Extra checks -check: scripts/symbols.chk - -# Don't distribute the generated script files -dist-hook: - cd '$(top_distdir)'; rm -f $(SCRIPT_CLEANFILES) - -# Make links between installed files with release-specific names and the generic -# file names. If this install rule is run the generic names will be deleted and -# recreated - this has obvious issues for systems with multiple installations. - -install-header-links: - @set -ex; cd '$(DESTDIR)$(includedir)'; for f in $(HEADERS); do \ - rm -f "$$f"; $(LN_S) "$(PNGLIB_BASENAME)/$$f" "$$f"; done - -uninstall-header-links: - cd '$(DESTDIR)$(includedir)'; rm -f $(HEADERS) - -install-libpng-pc: - @set -ex; cd '$(DESTDIR)$(pkgconfigdir)'; rm -f libpng.pc; \ - $(LN_S) '$(PNGLIB_BASENAME).pc' libpng.pc - -uninstall-libpng-pc: - rm -f '$(DESTDIR)$(pkgconfigdir)/libpng.pc' - -install-library-links: - @set -x; cd '$(DESTDIR)$(libdir)';\ - for ext in $(EXT_LIST); do\ - rm -f "libpng.$$ext";\ - if test -f "$(PNGLIB_BASENAME).$$ext"; then\ - $(LN_S) "$(PNGLIB_BASENAME).$$ext" "libpng.$$ext" || exit 1;\ - fi;\ - done - -uninstall-library-links: - @set -x; cd '$(DESTDIR)$(libdir)'; for ext in $(EXT_LIST); do\ - rm -f "libpng.$$ext"; done - -install-libpng-config: - @set -ex; cd '$(DESTDIR)$(bindir)'; rm -f libpng-config; \ - $(LN_S) '$(PNGLIB_BASENAME)-config' libpng-config - -uninstall-libpng-config: - rm -f '$(DESTDIR)$(bindir)/libpng-config' - -# If --enable-unversioned-links is specified the header and lib file links -# will be automatically made on a 'make install': - -install-data-hook: install-header-links -uninstall-hook: uninstall-header-links -install-exec-hook: install-library-links -uninstall-hook: uninstall-library-links - -# Likewise, --install-pc causes libpng.pc to be constructed: - -install-data-hook: install-libpng-pc -uninstall-hook: uninstall-libpng-pc - -# And --install-config: - -install-exec-hook: install-libpng-config -uninstall-hook: uninstall-libpng-config - -# The following addition ensures that 'make all' always builds the test programs -# too. It used to, but some change either in libpng or configure stopped this -# working. -all-am: $(check_PROGRAMS) - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/libs/libpng-src/config.h b/libs/libpng-src/config.h deleted file mode 100644 index 54a395c26..000000000 --- a/libs/libpng-src/config.h +++ /dev/null @@ -1,127 +0,0 @@ -/* config.h. Generated from config.h.in by configure. */ -/* config.h.in. Generated from configure.ac by autoheader. */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_DLFCN_H */ - -/* Define to 1 if you have the `feenableexcept' function. */ -/* #undef HAVE_FEENABLEEXCEPT */ - -/* Define to 1 if you have the header file. */ -#define HAVE_INTTYPES_H 1 - -/* Define to 1 if you have the `m' library (-lm). */ -/* #undef HAVE_LIBM */ - -/* Define to 1 if you have the `z' library (-lz). */ -#define HAVE_LIBZ 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_MEMORY_H 1 - -/* Define to 1 if you have the `pow' function. */ -#define HAVE_POW 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDINT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDLIB_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STRINGS_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STRING_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_STAT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_TYPES_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_UNISTD_H 1 - -/* Define to the sub-directory where libtool stores uninstalled libraries. */ -#define LT_OBJDIR ".libs/" - -/* Name of package */ -#define PACKAGE "libpng" - -/* Define to the address where bug reports for this package should be sent. */ -#define PACKAGE_BUGREPORT "png-mng-implement@lists.sourceforge.net" - -/* Define to the full name of this package. */ -#define PACKAGE_NAME "libpng" - -/* Define to the full name and version of this package. */ -#define PACKAGE_STRING "libpng 1.6.37" - -/* Define to the one symbol short name of this package. */ -#define PACKAGE_TARNAME "libpng" - -/* Define to the home page for this package. */ -#define PACKAGE_URL "" - -/* Define to the version of this package. */ -#define PACKAGE_VERSION "1.6.37" - -/* Turn on ARM Neon optimizations at run-time */ -/* #undef PNG_ARM_NEON_API_SUPPORTED */ - -/* Check for ARM Neon support at run-time */ -/* #undef PNG_ARM_NEON_CHECK_SUPPORTED */ - -/* Enable ARM Neon optimizations */ -/* #undef PNG_ARM_NEON_OPT */ - -/* Enable Intel SSE optimizations */ -/* #undef PNG_INTEL_SSE_OPT */ - -/* Turn on MIPS MSA optimizations at run-time */ -/* #undef PNG_MIPS_MSA_API_SUPPORTED */ - -/* Check for MIPS MSA support at run-time */ -/* #undef PNG_MIPS_MSA_CHECK_SUPPORTED */ - -/* Enable MIPS MSA optimizations */ -/* #undef PNG_MIPS_MSA_OPT */ - -/* Turn on POWERPC VSX optimizations at run-time */ -/* #undef PNG_POWERPC_VSX_API_SUPPORTED */ - -/* Check for POWERPC VSX support at run-time */ -/* #undef PNG_POWERPC_VSX_CHECK_SUPPORTED */ - -/* Enable POWERPC VSX optimizations */ -/* #undef PNG_POWERPC_VSX_OPT */ - -/* Define to 1 if you have the ANSI C header files. */ -#define STDC_HEADERS 1 - -/* Define to 1 if your declares `struct tm'. */ -/* #undef TM_IN_SYS_TIME */ - -/* Version number of package */ -#define VERSION "1.6.37" - -/* Define to empty if `const' does not conform to ANSI C. */ -/* #undef const */ - -/* Define to the equivalent of the C99 'restrict' keyword, or to - nothing if this is not supported. Do not define if restrict is - supported directly. */ -#define restrict __restrict -/* Work around a bug in Sun C++: it does not support _Restrict or - __restrict__, even though the corresponding Sun C compiler ends up with - "#define restrict _Restrict" or "#define restrict __restrict__" in the - previous line. Perhaps some future version of Sun C++ will work with - restrict; if so, hopefully it defines __RESTRICT like Sun C does. */ -#if defined __SUNPRO_CC && !defined __RESTRICT -# define _Restrict -# define __restrict__ -#endif - -/* Define to `unsigned int' if does not define. */ -/* #undef size_t */ diff --git a/libs/libpng-src/config.status b/libs/libpng-src/config.status deleted file mode 100644 index e9a33afa2..000000000 --- a/libs/libpng-src/config.status +++ /dev/null @@ -1,2026 +0,0 @@ -#! /bin/sh -# Generated by configure. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -pR' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -pR' - fi -else - as_ln_s='cp -pR' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - - -# as_fn_executable_p FILE -# ----------------------- -# Test if FILE is an executable regular file. -as_fn_executable_p () -{ - test -f "$1" && test -x "$1" -} # as_fn_executable_p -as_test_x='test -x' -as_executable_p=as_fn_executable_p - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by libpng $as_me 1.6.37, which was -generated by GNU Autoconf 2.69. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -# Files that config.status was made for. -config_files=" Makefile libpng.pc:libpng.pc.in libpng-config:libpng-config.in" -config_headers=" config.h" -config_commands=" depfiles libtool" - -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Configuration commands: -$config_commands - -Report bugs to ." - -ac_cs_config="" -ac_cs_version="\ -libpng config.status 1.6.37 -configured by ./configure, generated by GNU Autoconf 2.69, - with options \"$ac_cs_config\" - -Copyright (C) 2012 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='/f/lpng1637' -srcdir='.' -INSTALL='/usr/bin/install -c' -MKDIR_P='/usr/bin/mkdir -p' -AWK='gawk' -test -n "$AWK" || AWK=awk -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=?*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - --*=) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg= - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - '') as_fn_error $? "missing file argument" ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_HEADERS " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - as_fn_error $? "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; - --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -if $ac_cs_recheck; then - set X /bin/sh './configure' $ac_configure_extra_args --no-create --no-recursion - shift - $as_echo "running CONFIG_SHELL=/bin/sh $*" >&6 - CONFIG_SHELL='/bin/sh' - export CONFIG_SHELL - exec "$@" -fi - -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -# -# INIT-COMMANDS -# -AMDEP_TRUE="" MAKE="make" - - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='s/\(["`$\\]\)/\\\1/g' -double_quote_subst='s/\(["`\\]\)/\\\1/g' -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' -SED='/usr/bin/sed' -Xsed='/usr/bin/sed -e 1s/^X//' -GREP='/usr/bin/grep' -EGREP='/usr/bin/grep -E' -FGREP='/usr/bin/grep -F' -SHELL='/bin/sh' -ECHO='printf %s\n' -LD='C:/msys64/mingw32/i686-w64-mingw32/bin/ld.exe' -macro_version='2.4.6' -macro_revision='2.4.6' -AS='as' -DLLTOOL='dlltool' -OBJDUMP='objdump' -enable_shared='yes' -enable_static='yes' -pic_mode='default' -enable_fast_install='needless' -shared_archive_member_spec='' -PATH_SEPARATOR=':' -host_alias='' -host='i686-w64-mingw32' -host_os='mingw32' -build_alias='i686-w64-mingw32' -build='i686-w64-mingw32' -build_os='mingw32' -NM='/mingw32/bin/nm -B' -LN_S='cp -pR' -max_cmd_len='8192' -ac_objext='o' -exeext='' -lt_unset='unset' -lt_SP2NL='tr \040 \012' -lt_NL2SP='tr \015\012 \040\040' -lt_cv_to_host_file_cmd='func_convert_file_msys_to_w32' -lt_cv_to_tool_file_cmd='func_convert_file_msys_to_w32' -reload_flag=' -r' -reload_cmds='$LD$reload_flag -o $output$reload_objs' -deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' -file_magic_cmd='func_win32_libid' -file_magic_glob='' -want_nocaseglob='yes' -sharedlib_from_linklib_cmd='func_cygming_dll_for_implib' -AR='ar' -AR_FLAGS='cru' -archiver_list_spec='@' -STRIP='strip' -RANLIB='ranlib' -old_postinstall_cmds='chmod 644 $oldlib~$RANLIB $tool_oldlib' -old_postuninstall_cmds='' -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs~$RANLIB $tool_oldlib' -lock_old_archive_extraction='no' -CC='gcc' -CFLAGS='-g -O2' -compiler='gcc' -GCC='yes' -lt_cv_sys_global_symbol_pipe='sed -n -e '\''s/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*_\([_A-Za-z][_A-Za-z0-9]*\) \{0,1\}$/\1 _\2 \2/p'\'' | sed '\''/ __gnu_lto/d'\''' -lt_cv_sys_global_symbol_to_cdecl='sed -n -e '\''s/^T .* \(.*\)$/extern int \1();/p'\'' -e '\''s/^[ABCDGIRSTW][ABCDGIRSTW]* .* \(.*\)$/extern char \1;/p'\''' -lt_cv_sys_global_symbol_to_import='' -lt_cv_sys_global_symbol_to_c_name_address='sed -n -e '\''s/^: \(.*\) .*$/ {"\1", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW][ABCDGIRSTW]* .* \(.*\)$/ {"\1", (void *) \&\1},/p'\''' -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='sed -n -e '\''s/^: \(.*\) .*$/ {"\1", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW][ABCDGIRSTW]* .* \(lib.*\)$/ {"\1", (void *) \&\1},/p'\'' -e '\''s/^[ABCDGIRSTW][ABCDGIRSTW]* .* \(.*\)$/ {"lib\1", (void *) \&\1},/p'\''' -lt_cv_nm_interface='BSD nm' -nm_file_list_spec='@' -lt_sysroot='' -lt_cv_truncate_bin='/usr/bin/sed -e 4q' -objdir='.libs' -MAGIC_CMD='file' -lt_prog_compiler_no_builtin_flag=' -fno-builtin' -lt_prog_compiler_pic=' -DDLL_EXPORT -DPIC' -lt_prog_compiler_wl='-Wl,' -lt_prog_compiler_static='-static' -lt_cv_prog_compiler_c_o='yes' -need_locks='no' -MANIFEST_TOOL=':' -DSYMUTIL='' -NMEDIT='' -LIPO='' -OTOOL='' -OTOOL64='' -libext='a' -shrext_cmds='.dll' -extract_expsyms_cmds='' -archive_cmds_need_lc='yes' -enable_shared_with_static_runtimes='yes' -export_dynamic_flag_spec='$wl--export-all-symbols' -whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' -compiler_needs_object='no' -old_archive_from_new_cmds='' -old_archive_from_expsyms_cmds='' -archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' -archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' -module_cmds='' -module_expsym_cmds='' -with_gnu_ld='yes' -allow_undefined_flag='unsupported' -no_undefined_flag='' -hardcode_libdir_flag_spec='-L$libdir' -hardcode_libdir_separator='' -hardcode_direct='no' -hardcode_direct_absolute='no' -hardcode_minus_L='no' -hardcode_shlibpath_var='unsupported' -hardcode_automatic='no' -inherit_rpath='no' -link_all_deplibs='unknown' -always_export_symbols='no' -export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' -exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' -include_expsyms='' -prelink_cmds='' -postlink_cmds='' -file_list_spec='' -variables_saved_for_relink='PATH PATH LD_RUN_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH' -need_lib_prefix='no' -need_version='no' -version_type='windows' -runpath_var='LD_RUN_PATH' -shlibpath_var='PATH' -shlibpath_overrides_runpath='yes' -libname_spec='lib$name' -library_names_spec='$libname.dll.a' -soname_spec='$libname`echo $release | $SED -e s/[.]/-/g`$versuffix$shared_ext' -install_override_mode='' -postinstall_cmds='base_file=`basename \$file`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' -postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' -finish_cmds='' -finish_eval='' -hardcode_into_libs='no' -sys_lib_search_path_spec='C:/msys64/mingw32/lib/gcc/i686-w64-mingw32/9.1.0 C:/msys64/mingw32/lib/gcc C:/msys64/mingw32/i686-w64-mingw32/lib C:/msys64/mingw32/lib ' -configure_time_dlsearch_path='/lib /usr/lib' -configure_time_lt_sys_library_path='' -hardcode_action='immediate' -enable_dlopen='unknown' -enable_dlopen_self='unknown' -enable_dlopen_self_static='unknown' -old_striplib='strip --strip-debug' -striplib='strip --strip-unneeded' - -LTCC='gcc' -LTCFLAGS='-g -O2' -compiler='gcc' - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' -} - -# Quote evaled strings. -for var in SED GREP EGREP FGREP SHELL ECHO LD AS DLLTOOL OBJDUMP PATH_SEPARATOR NM LN_S lt_SP2NL lt_NL2SP reload_flag deplibs_check_method file_magic_cmd file_magic_glob want_nocaseglob sharedlib_from_linklib_cmd AR AR_FLAGS archiver_list_spec STRIP RANLIB CC CFLAGS compiler lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl lt_cv_sys_global_symbol_to_import lt_cv_sys_global_symbol_to_c_name_address lt_cv_sys_global_symbol_to_c_name_address_lib_prefix lt_cv_nm_interface nm_file_list_spec lt_cv_truncate_bin lt_prog_compiler_no_builtin_flag lt_prog_compiler_pic lt_prog_compiler_wl lt_prog_compiler_static lt_cv_prog_compiler_c_o need_locks MANIFEST_TOOL DSYMUTIL NMEDIT LIPO OTOOL OTOOL64 shrext_cmds export_dynamic_flag_spec whole_archive_flag_spec compiler_needs_object with_gnu_ld allow_undefined_flag no_undefined_flag hardcode_libdir_flag_spec hardcode_libdir_separator exclude_expsyms include_expsyms file_list_spec variables_saved_for_relink libname_spec library_names_spec soname_spec install_override_mode finish_eval old_striplib striplib; do - case `eval \\$ECHO \\""\\$$var"\\"` in - *[\\\`\"\$]*) - eval "lt_$var=\\\"\`\$ECHO \"\$$var\" | \$SED \"\$sed_quote_subst\"\`\\\"" ## exclude from sc_prohibit_nested_quotes - ;; - *) - eval "lt_$var=\\\"\$$var\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in reload_cmds old_postinstall_cmds old_postuninstall_cmds old_archive_cmds extract_expsyms_cmds old_archive_from_new_cmds old_archive_from_expsyms_cmds archive_cmds archive_expsym_cmds module_cmds module_expsym_cmds export_symbols_cmds prelink_cmds postlink_cmds postinstall_cmds postuninstall_cmds finish_cmds sys_lib_search_path_spec configure_time_dlsearch_path configure_time_lt_sys_library_path; do - case `eval \\$ECHO \\""\\$$var"\\"` in - *[\\\`\"\$]*) - eval "lt_$var=\\\"\`\$ECHO \"\$$var\" | \$SED -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ## exclude from sc_prohibit_nested_quotes - ;; - *) - eval "lt_$var=\\\"\$$var\\\"" - ;; - esac -done - -ac_aux_dir='.' - -# See if we are running on zsh, and set the options that allow our -# commands through without removal of \ escapes INIT. -if test -n "${ZSH_VERSION+set}"; then - setopt NO_GLOB_SUBST -fi - - - PACKAGE='libpng' - VERSION='1.6.37' - RM='rm -f' - ofile='libtool' - - - - - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; - "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "libpng.pc") CONFIG_FILES="$CONFIG_FILES libpng.pc:libpng.pc.in" ;; - "libpng-config") CONFIG_FILES="$CONFIG_FILES libpng-config:libpng-config.in" ;; - - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= ac_tmp= - trap 'exit_status=$? - : "${ac_tmp:=$tmp}" - { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 -ac_tmp=$tmp - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$ac_tmp/subs1.awk" && -cat >>"$ac_tmp/subs1.awk" <<\_ACAWK && -S["am__EXEEXT_FALSE"]="#" -S["am__EXEEXT_TRUE"]="" -S["LTLIBOBJS"]="" -S["PNG_POWERPC_VSX_FALSE"]="#" -S["PNG_POWERPC_VSX_TRUE"]="" -S["PNG_INTEL_SSE_FALSE"]="#" -S["PNG_INTEL_SSE_TRUE"]="" -S["PNG_MIPS_MSA_FALSE"]="#" -S["PNG_MIPS_MSA_TRUE"]="" -S["PNG_ARM_NEON_FALSE"]="" -S["PNG_ARM_NEON_TRUE"]="#" -S["DO_INSTALL_LIBPNG_CONFIG_FALSE"]="#" -S["DO_INSTALL_LIBPNG_CONFIG_TRUE"]="" -S["DO_INSTALL_LIBPNG_PC_FALSE"]="#" -S["DO_INSTALL_LIBPNG_PC_TRUE"]="" -S["DO_INSTALL_LINKS_FALSE"]="#" -S["DO_INSTALL_LINKS_TRUE"]="" -S["DO_PNG_PREFIX_FALSE"]="" -S["DO_PNG_PREFIX_TRUE"]="#" -S["PNG_PREFIX"]="" -S["binconfigs"]="${binconfigs}" -S["pkgconfigdir"]="${libdir}/pkgconfig" -S["PNGLIB_RELEASE"]="37" -S["PNGLIB_MINOR"]="6" -S["PNGLIB_MAJOR"]="1" -S["PNGLIB_VERSION"]="1.6.37" -S["SYMBOL_PREFIX"]="" -S["HAVE_LD_VERSION_SCRIPT_FALSE"]="" -S["HAVE_LD_VERSION_SCRIPT_TRUE"]="#" -S["HAVE_SOLARIS_LD_FALSE"]="" -S["HAVE_SOLARIS_LD_TRUE"]="#" -S["HAVE_CLOCK_GETTIME_FALSE"]="#" -S["HAVE_CLOCK_GETTIME_TRUE"]="" -S["LIBOBJS"]="" -S["POW_LIB"]="" -S["PNG_COPTS"]="" -S["DFNCPP"]="gcc -E" -S["LT_SYS_LIBRARY_PATH"]="" -S["OTOOL64"]="" -S["OTOOL"]="" -S["LIPO"]="" -S["NMEDIT"]="" -S["DSYMUTIL"]="" -S["MANIFEST_TOOL"]=":" -S["RANLIB"]="ranlib" -S["ac_ct_AR"]="ar" -S["AR"]="ar" -S["NM"]="/mingw32/bin/nm -B" -S["ac_ct_DUMPBIN"]="" -S["DUMPBIN"]="" -S["LIBTOOL"]="$(SHELL) $(top_builddir)/libtool" -S["OBJDUMP"]="objdump" -S["DLLTOOL"]="dlltool" -S["AS"]="as" -S["LN_S"]="cp -pR" -S["CPP"]="gcc -E" -S["LD"]="C:/msys64/mingw32/i686-w64-mingw32/bin/ld.exe" -S["FGREP"]="/usr/bin/grep -F" -S["EGREP"]="/usr/bin/grep -E" -S["GREP"]="/usr/bin/grep" -S["SED"]="/usr/bin/sed" -S["host_os"]="mingw32" -S["host_vendor"]="w64" -S["host_cpu"]="i686" -S["host"]="i686-w64-mingw32" -S["build_os"]="mingw32" -S["build_vendor"]="w64" -S["build_cpu"]="i686" -S["build"]="i686-w64-mingw32" -S["am__fastdepCCAS_FALSE"]="#" -S["am__fastdepCCAS_TRUE"]="" -S["CCASDEPMODE"]="depmode=gcc3" -S["CCASFLAGS"]="-g -O2" -S["CCAS"]="gcc" -S["am__fastdepCC_FALSE"]="#" -S["am__fastdepCC_TRUE"]="" -S["CCDEPMODE"]="depmode=gcc3" -S["am__nodep"]="_no" -S["AMDEPBACKSLASH"]="\\" -S["AMDEP_FALSE"]="#" -S["AMDEP_TRUE"]="" -S["am__include"]="include" -S["DEPDIR"]=".deps" -S["OBJEXT"]="o" -S["EXEEXT"]=".exe" -S["ac_ct_CC"]="gcc" -S["CPPFLAGS"]="" -S["LDFLAGS"]="" -S["CFLAGS"]="-g -O2" -S["CC"]="gcc" -S["MAINT"]="#" -S["MAINTAINER_MODE_FALSE"]="" -S["MAINTAINER_MODE_TRUE"]="#" -S["AM_BACKSLASH"]="\\" -S["AM_DEFAULT_VERBOSITY"]="1" -S["AM_DEFAULT_V"]="$(AM_DEFAULT_VERBOSITY)" -S["AM_V"]="$(V)" -S["am__untar"]="$${TAR-tar} xf -" -S["am__tar"]="$${TAR-tar} chof - \"$$tardir\"" -S["AMTAR"]="$${TAR-tar}" -S["am__leading_dot"]="." -S["SET_MAKE"]="" -S["AWK"]="gawk" -S["mkdir_p"]="$(MKDIR_P)" -S["MKDIR_P"]="/usr/bin/mkdir -p" -S["INSTALL_STRIP_PROGRAM"]="$(install_sh) -c -s" -S["STRIP"]="strip" -S["install_sh"]="${SHELL} /f/lpng1637/install-sh" -S["MAKEINFO"]="${SHELL} /f/lpng1637/missing makeinfo" -S["AUTOHEADER"]="${SHELL} /f/lpng1637/missing autoheader" -S["AUTOMAKE"]="${SHELL} /f/lpng1637/missing automake-1.16" -S["AUTOCONF"]="${SHELL} /f/lpng1637/missing autoconf" -S["ACLOCAL"]="${SHELL} /f/lpng1637/missing aclocal-1.16" -S["VERSION"]="1.6.37" -S["PACKAGE"]="libpng" -S["CYGPATH_W"]="cygpath -w" -S["am__isrc"]="" -S["INSTALL_DATA"]="${INSTALL} -m 644" -S["INSTALL_SCRIPT"]="${INSTALL}" -S["INSTALL_PROGRAM"]="${INSTALL}" -S["target_alias"]="" -S["host_alias"]="" -S["build_alias"]="i686-w64-mingw32" -S["LIBS"]="-lz " -S["ECHO_T"]="" -S["ECHO_N"]="-n" -S["ECHO_C"]="" -S["DEFS"]="-DHAVE_CONFIG_H" -S["mandir"]="${datarootdir}/man" -S["localedir"]="${datarootdir}/locale" -S["libdir"]="${exec_prefix}/lib" -S["psdir"]="${docdir}" -S["pdfdir"]="${docdir}" -S["dvidir"]="${docdir}" -S["htmldir"]="${docdir}" -S["infodir"]="${datarootdir}/info" -S["docdir"]="${datarootdir}/doc/${PACKAGE_TARNAME}" -S["oldincludedir"]="/usr/include" -S["includedir"]="${prefix}/include" -S["localstatedir"]="${prefix}/var" -S["sharedstatedir"]="${prefix}/com" -S["sysconfdir"]="${prefix}/etc" -S["datadir"]="${datarootdir}" -S["datarootdir"]="${prefix}/share" -S["libexecdir"]="${exec_prefix}/libexec" -S["sbindir"]="${exec_prefix}/sbin" -S["bindir"]="${exec_prefix}/bin" -S["program_transform_name"]="s,x,x," -S["prefix"]="/mingw32" -S["exec_prefix"]="${prefix}" -S["PACKAGE_URL"]="" -S["PACKAGE_BUGREPORT"]="png-mng-implement@lists.sourceforge.net" -S["PACKAGE_STRING"]="libpng 1.6.37" -S["PACKAGE_VERSION"]="1.6.37" -S["PACKAGE_TARNAME"]="libpng" -S["PACKAGE_NAME"]="libpng" -S["PATH_SEPARATOR"]=":" -S["SHELL"]="/bin/sh" -S["am__quote"]="" -_ACAWK -cat >>"$ac_tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ - || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 -fi # test -n "$CONFIG_FILES" - -# Set up the scripts for CONFIG_HEADERS section. -# No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. -if test -n "$CONFIG_HEADERS"; then -cat >"$ac_tmp/defines.awk" <<\_ACAWK || -BEGIN { -D["PACKAGE_NAME"]=" \"libpng\"" -D["PACKAGE_TARNAME"]=" \"libpng\"" -D["PACKAGE_VERSION"]=" \"1.6.37\"" -D["PACKAGE_STRING"]=" \"libpng 1.6.37\"" -D["PACKAGE_BUGREPORT"]=" \"png-mng-implement@lists.sourceforge.net\"" -D["PACKAGE_URL"]=" \"\"" -D["PACKAGE"]=" \"libpng\"" -D["VERSION"]=" \"1.6.37\"" -D["STDC_HEADERS"]=" 1" -D["HAVE_SYS_TYPES_H"]=" 1" -D["HAVE_SYS_STAT_H"]=" 1" -D["HAVE_STDLIB_H"]=" 1" -D["HAVE_STRING_H"]=" 1" -D["HAVE_MEMORY_H"]=" 1" -D["HAVE_STRINGS_H"]=" 1" -D["HAVE_INTTYPES_H"]=" 1" -D["HAVE_STDINT_H"]=" 1" -D["HAVE_UNISTD_H"]=" 1" -D["LT_OBJDIR"]=" \".libs/\"" -D["STDC_HEADERS"]=" 1" -D["restrict"]=" __restrict" -D["HAVE_POW"]=" 1" -D["HAVE_LIBZ"]=" 1" - for (key in D) D_is_set[key] = 1 - FS = "" -} -/^[\t ]*#[\t ]*(define|undef)[\t ]+[_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ][_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]*([\t (]|$)/ { - line = $ 0 - split(line, arg, " ") - if (arg[1] == "#") { - defundef = arg[2] - mac1 = arg[3] - } else { - defundef = substr(arg[1], 2) - mac1 = arg[2] - } - split(mac1, mac2, "(") #) - macro = mac2[1] - prefix = substr(line, 1, index(line, defundef) - 1) - if (D_is_set[macro]) { - # Preserve the white space surrounding the "#". - print prefix "define", macro P[macro] D[macro] - next - } else { - # Replace #undef with comments. This is necessary, for example, - # in the case of _POSIX_SOURCE, which is predefined and required - # on some systems where configure will not decide to define it. - if (defundef == "undef") { - print "/*", prefix defundef, macro, "*/" - next - } - } -} -{ print } -_ACAWK - as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 -fi # test -n "$CONFIG_HEADERS" - - -eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$ac_tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$ac_tmp/stdin" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac - ac_MKDIR_P=$MKDIR_P - case $MKDIR_P in - [\\/$]* | ?:[\\/]* ) ;; - */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; - esac -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} - ac_datarootdir_hack=' - s&@datadir@&${datarootdir}&g - s&@docdir@&${datarootdir}/doc/${PACKAGE_TARNAME}&g - s&@infodir@&${datarootdir}/info&g - s&@localedir@&${datarootdir}/locale&g - s&@mandir@&${datarootdir}/man&g - s&\${datarootdir}&${prefix}/share&g' ;; -esac -ac_sed_extra="/^[ ]*VPATH[ ]*=[ ]*/{ -h -s/// -s/^/:/ -s/[ ]*$/:/ -s/:\$(srcdir):/:/g -s/:\${srcdir}:/:/g -s/:@srcdir@:/:/g -s/^:*// -s/:*$// -x -s/\(=[ ]*\).*/\1/ -G -s/\n// -s/^[^=]*=[ ]*$// -} - -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -s&@MKDIR_P@&$ac_MKDIR_P&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ - >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ - "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&2;} - - rm -f "$ac_tmp/stdin" - case $ac_file in - -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; - *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; - esac \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - ;; - :H) - # - # CONFIG_HEADER - # - if test x"$ac_file" != x-; then - { - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" - } >"$ac_tmp/config.h" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f "$ac_file" - mv "$ac_tmp/config.h" "$ac_file" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - fi - else - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ - || as_fn_error $? "could not create -" "$LINENO" 5 - fi -# Compute "$ac_file"'s index in $config_headers. -_am_arg="$ac_file" -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || -$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$_am_arg" : 'X\(//\)[^/]' \| \ - X"$_am_arg" : 'X\(//\)$' \| \ - X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$_am_arg" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'`/stamp-h$_am_stamp_count - ;; - - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} - ;; - esac - - - case $ac_file$ac_mode in - "depfiles":C) test x"$AMDEP_TRUE" != x"" || { - # Older Autoconf quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - # TODO: see whether this extra hack can be removed once we start - # requiring Autoconf 2.70 or later. - case $CONFIG_FILES in #( - *\'*) : - eval set x "$CONFIG_FILES" ;; #( - *) : - set x $CONFIG_FILES ;; #( - *) : - ;; -esac - shift - # Used to flag and report bootstrapping failures. - am_rc=0 - for am_mf - do - # Strip MF so we end up with the name of the file. - am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile which includes - # dependency-tracking related rules and includes. - # Grep'ing the whole file directly is not great: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ - || continue - am_dirpart=`$as_dirname -- "$am_mf" || -$as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$am_mf" : 'X\(//\)[^/]' \| \ - X"$am_mf" : 'X\(//\)$' \| \ - X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$am_mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - am_filepart=`$as_basename -- "$am_mf" || -$as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ - X"$am_mf" : 'X\(//\)$' \| \ - X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$am_mf" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - { echo "$as_me:$LINENO: cd "$am_dirpart" \ - && sed -e '/# am--include-marker/d' "$am_filepart" \ - | $MAKE -f - am--depfiles" >&5 - (cd "$am_dirpart" \ - && sed -e '/# am--include-marker/d' "$am_filepart" \ - | $MAKE -f - am--depfiles) >&5 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } || am_rc=$? - done - if test $am_rc -ne 0; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. Try re-running configure with the - '--disable-dependency-tracking' option to at least be able to build - the package (albeit without support for automatic dependency tracking). -See \`config.log' for more details" "$LINENO" 5; } - fi - { am_dirpart=; unset am_dirpart;} - { am_filepart=; unset am_filepart;} - { am_mf=; unset am_mf;} - { am_rc=; unset am_rc;} - rm -f conftest-deps.mk -} - ;; - "libtool":C) - - # See if we are running on zsh, and set the options that allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}"; then - setopt NO_GLOB_SUBST - fi - - cfgfile=${ofile}T - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL -# Generated automatically by $as_me ($PACKAGE) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. - -# Provide generalized library-building support services. -# Written by Gordon Matzigkeit, 1996 - -# Copyright (C) 2014 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. There is NO -# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# GNU Libtool is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of of the License, or -# (at your option) any later version. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program or library that is built -# using GNU Libtool, you may include this file under the same -# distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - - -# The names of the tagged configurations supported by this script. -available_tags='' - -# Configured defaults for sys_lib_dlsearch_path munging. -: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} - -# ### BEGIN LIBTOOL CONFIG - -# A sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="\$SED -e 1s/^X//" - -# A grep program that handles long lines. -GREP=$lt_GREP - -# An ERE matcher. -EGREP=$lt_EGREP - -# A literal string matcher. -FGREP=$lt_FGREP - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# An echo program that protects backslashes. -ECHO=$lt_ECHO - -# Which release of libtool.m4 was used? -macro_version=$macro_version -macro_revision=$macro_revision - -# Assembler program. -AS=$lt_AS - -# DLL creation program. -DLLTOOL=$lt_DLLTOOL - -# Object dumper program. -OBJDUMP=$lt_OBJDUMP - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# What type of objects to build. -pic_mode=$pic_mode - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# Shared archive member basename,for filename based shared library versioning on AIX. -shared_archive_member_spec=$shared_archive_member_spec - -# The PATH separator for the build system. -PATH_SEPARATOR=$lt_PATH_SEPARATOR - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# A BSD- or MS-compatible name lister. -NM=$lt_NM - -# Whether we need soft or hard links. -LN_S=$lt_LN_S - -# What is the maximum length of a command? -max_cmd_len=$max_cmd_len - -# Object file suffix (normally "o"). -objext=$ac_objext - -# Executable file suffix (normally ""). -exeext=$exeext - -# whether the shell understands "unset". -lt_unset=$lt_unset - -# turn spaces into newlines. -SP2NL=$lt_lt_SP2NL - -# turn newlines into spaces. -NL2SP=$lt_lt_NL2SP - -# convert \$build file names to \$host format. -to_host_file_cmd=$lt_cv_to_host_file_cmd - -# convert \$build files to toolchain format. -to_tool_file_cmd=$lt_cv_to_tool_file_cmd - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method = "file_magic". -file_magic_cmd=$lt_file_magic_cmd - -# How to find potential files when deplibs_check_method = "file_magic". -file_magic_glob=$lt_file_magic_glob - -# Find potential files using nocaseglob when deplibs_check_method = "file_magic". -want_nocaseglob=$lt_want_nocaseglob - -# Command to associate shared and link libraries. -sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd - -# The archiver. -AR=$lt_AR - -# Flags to create an archive. -AR_FLAGS=$lt_AR_FLAGS - -# How to feed a file listing to the archiver. -archiver_list_spec=$lt_archiver_list_spec - -# A symbol stripping program. -STRIP=$lt_STRIP - -# Commands used to install an old-style archive. -RANLIB=$lt_RANLIB -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Whether to use a lock for old archive extraction. -lock_old_archive_extraction=$lock_old_archive_extraction - -# A C compiler. -LTCC=$lt_CC - -# LTCC compiler flags. -LTCFLAGS=$lt_CFLAGS - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration. -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm into a list of symbols to manually relocate. -global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import - -# Transform the output of nm in a C name address pair. -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# Transform the output of nm in a C name address pair when lib prefix is needed. -global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix - -# The name lister interface. -nm_interface=$lt_lt_cv_nm_interface - -# Specify filename containing input files for \$NM. -nm_file_list_spec=$lt_nm_file_list_spec - -# The root where to search for dependent libraries,and where our libraries should be installed. -lt_sysroot=$lt_sysroot - -# Command to truncate a binary pipe. -lt_truncate_bin=$lt_lt_cv_truncate_bin - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# Used to examine libraries when file_magic_cmd begins with "file". -MAGIC_CMD=$MAGIC_CMD - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Manifest tool. -MANIFEST_TOOL=$lt_MANIFEST_TOOL - -# Tool to manipulate archived DWARF debug symbol files on Mac OS X. -DSYMUTIL=$lt_DSYMUTIL - -# Tool to change global to local symbols on Mac OS X. -NMEDIT=$lt_NMEDIT - -# Tool to manipulate fat objects and archives on Mac OS X. -LIPO=$lt_LIPO - -# ldd/readelf like tool for Mach-O binaries on Mac OS X. -OTOOL=$lt_OTOOL - -# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. -OTOOL64=$lt_OTOOL64 - -# Old archive suffix (normally "a"). -libext=$libext - -# Shared library suffix (normally ".so"). -shrext_cmds=$lt_shrext_cmds - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at link time. -variables_saved_for_relink=$lt_variables_saved_for_relink - -# Do we need the "lib" prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Library versioning type. -version_type=$version_type - -# Shared library runtime path variable. -runpath_var=$runpath_var - -# Shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Permission mode override for installation of shared libraries. -install_override_mode=$lt_install_override_mode - -# Command to use after installation of a shared archive. -postinstall_cmds=$lt_postinstall_cmds - -# Command to use after uninstallation of a shared archive. -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# As "finish_cmds", except a single script fragment to be evaled but -# not shown. -finish_eval=$lt_finish_eval - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Compile-time system search path for libraries. -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Detected run-time system search path for libraries. -sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path - -# Explicit LT_SYS_LIBRARY_PATH set during ./configure time. -configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - - -# The linker used to build libraries. -LD=$lt_LD - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# Commands used to build an old-style archive. -old_archive_cmds=$lt_old_archive_cmds - -# A language specific compiler. -CC=$lt_compiler - -# Is the compiler the GNU compiler? -with_gcc=$GCC - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object=$lt_compiler_needs_object - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds - -# Commands used to build a shared archive. -archive_cmds=$lt_archive_cmds -archive_expsym_cmds=$lt_archive_expsym_cmds - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds=$lt_module_cmds -module_expsym_cmds=$lt_module_expsym_cmds - -# Whether we are building with GNU ld or not. -with_gnu_ld=$lt_with_gnu_ld - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag - -# Flag that enforces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator - -# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=$hardcode_direct - -# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \$shlibpath_var if the -# library is relocated. -hardcode_direct_absolute=$hardcode_direct_absolute - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=$hardcode_minus_L - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=$hardcode_automatic - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=$inherit_rpath - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs - -# Set to "yes" if exported symbols are required. -always_export_symbols=$always_export_symbols - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds=$lt_prelink_cmds - -# Commands necessary for finishing linking programs. -postlink_cmds=$lt_postlink_cmds - -# Specify filename containing input files. -file_list_spec=$lt_file_list_spec - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action - -# ### END LIBTOOL CONFIG - -_LT_EOF - - cat <<'_LT_EOF' >> "$cfgfile" - -# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE - -# func_munge_path_list VARIABLE PATH -# ----------------------------------- -# VARIABLE is name of variable containing _space_ separated list of -# directories to be munged by the contents of PATH, which is string -# having a format: -# "DIR[:DIR]:" -# string "DIR[ DIR]" will be prepended to VARIABLE -# ":DIR[:DIR]" -# string "DIR[ DIR]" will be appended to VARIABLE -# "DIRP[:DIRP]::[DIRA:]DIRA" -# string "DIRP[ DIRP]" will be prepended to VARIABLE and string -# "DIRA[ DIRA]" will be appended to VARIABLE -# "DIR[:DIR]" -# VARIABLE will be replaced by "DIR[ DIR]" -func_munge_path_list () -{ - case x$2 in - x) - ;; - *:) - eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" - ;; - x:*) - eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" - ;; - *::*) - eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" - eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" - ;; - *) - eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" - ;; - esac -} - - -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. -func_cc_basename () -{ - for cc_temp in $*""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac - done - func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` -} - - -# ### END FUNCTIONS SHARED WITH CONFIGURE - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test set != "${COLLECT_NAMES+set}"; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - -ltmain=$ac_aux_dir/ltmain.sh - - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" - - ;; - "libpng-config":F) chmod +x libpng-config ;; - - esac -done # for ac_tag - - -as_fn_exit 0 diff --git a/libs/libpng-src/contrib/libtests/.deps/.dirstamp b/libs/libpng-src/contrib/libtests/.deps/.dirstamp deleted file mode 100644 index e69de29bb..000000000 diff --git a/libs/libpng-src/contrib/libtests/.deps/pngimage.Po b/libs/libpng-src/contrib/libtests/.deps/pngimage.Po deleted file mode 100644 index b338ccbd7..000000000 --- a/libs/libpng-src/contrib/libtests/.deps/pngimage.Po +++ /dev/null @@ -1,112 +0,0 @@ -contrib/libtests/pngimage.o: contrib/libtests/pngimage.c \ - C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include/stdarg.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/stdarg.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/vadefs.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_directx.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/stdlib.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h \ - C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include-fixed/limits.h \ - C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include-fixed/syslimits.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/limits.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/malloc.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/string.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/errno.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/stdio.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/assert.h config.h \ - F:/lpng1637/png.h F:/lpng1637/pnglibconf.h F:/lpng1637/pngconf.h \ - C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include/stddef.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/stddef.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/setjmp.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/time.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_timeval.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sys/timeb.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/pthread_time.h - -C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include/stdarg.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/stdarg.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/vadefs.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_directx.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/stdlib.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h: - -C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include-fixed/limits.h: - -C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include-fixed/syslimits.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/limits.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/crtdefs.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/malloc.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/string.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/errno.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/stdio.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/swprintf.inl: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/assert.h: - -config.h: - -F:/lpng1637/png.h: - -F:/lpng1637/pnglibconf.h: - -F:/lpng1637/pngconf.h: - -C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include/stddef.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/stddef.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/setjmp.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/time.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_timeval.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sys/timeb.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/pthread_time.h: diff --git a/libs/libpng-src/contrib/libtests/.deps/pngstest.Po b/libs/libpng-src/contrib/libtests/.deps/pngstest.Po deleted file mode 100644 index f4fb40c1b..000000000 --- a/libs/libpng-src/contrib/libtests/.deps/pngstest.Po +++ /dev/null @@ -1,111 +0,0 @@ -contrib/libtests/pngstest.o: contrib/libtests/pngstest.c \ - C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include/stddef.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/stddef.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/vadefs.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_directx.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/stdlib.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h \ - C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include-fixed/limits.h \ - C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include-fixed/syslimits.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/limits.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/malloc.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/string.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/stdio.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/errno.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/ctype.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/math.h config.h \ - F:/lpng1637/png.h F:/lpng1637/pnglibconf.h F:/lpng1637/pngconf.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/setjmp.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/time.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_timeval.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sys/timeb.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/pthread_time.h \ - contrib/libtests/../tools/sRGB.h contrib/libtests/pngstest-errors.h - -C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include/stddef.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/stddef.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/crtdefs.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/vadefs.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_directx.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/stdlib.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h: - -C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include-fixed/limits.h: - -C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include-fixed/syslimits.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/limits.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/malloc.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/string.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/stdio.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/swprintf.inl: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/errno.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/ctype.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/math.h: - -config.h: - -F:/lpng1637/png.h: - -F:/lpng1637/pnglibconf.h: - -F:/lpng1637/pngconf.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/setjmp.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/time.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_timeval.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sys/timeb.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/pthread_time.h: - -contrib/libtests/../tools/sRGB.h: - -contrib/libtests/pngstest-errors.h: diff --git a/libs/libpng-src/contrib/libtests/.deps/pngunknown.Po b/libs/libpng-src/contrib/libtests/.deps/pngunknown.Po deleted file mode 100644 index 5f746e311..000000000 --- a/libs/libpng-src/contrib/libtests/.deps/pngunknown.Po +++ /dev/null @@ -1,95 +0,0 @@ -contrib/libtests/pngunknown.o: contrib/libtests/pngunknown.c \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/stdlib.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/vadefs.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_directx.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h \ - C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include-fixed/limits.h \ - C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include-fixed/syslimits.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/limits.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/malloc.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/string.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/stdio.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/setjmp.h F:/lpng1637/png.h \ - F:/lpng1637/pnglibconf.h F:/lpng1637/pngconf.h \ - C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include/stddef.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/stddef.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/time.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_timeval.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sys/timeb.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/pthread_time.h - -C:/msys64/mingw64/x86_64-w64-mingw32/include/stdlib.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/vadefs.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_directx.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h: - -C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include-fixed/limits.h: - -C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include-fixed/syslimits.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/limits.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/crtdefs.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/malloc.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/string.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/stdio.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/swprintf.inl: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/setjmp.h: - -F:/lpng1637/png.h: - -F:/lpng1637/pnglibconf.h: - -F:/lpng1637/pngconf.h: - -C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include/stddef.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/stddef.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/time.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_timeval.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sys/timeb.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/pthread_time.h: diff --git a/libs/libpng-src/contrib/libtests/.deps/pngvalid.Po b/libs/libpng-src/contrib/libtests/.deps/pngvalid.Po deleted file mode 100644 index 23b00108e..000000000 --- a/libs/libpng-src/contrib/libtests/.deps/pngvalid.Po +++ /dev/null @@ -1,150 +0,0 @@ -contrib/libtests/pngvalid.o: contrib/libtests/pngvalid.c \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/signal.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/vadefs.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_directx.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/pthread_signal.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/stdio.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h config.h \ - F:/lpng1637/png.h F:/lpng1637/pnglibconf.h F:/lpng1637/pngconf.h \ - C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include-fixed/limits.h \ - C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include-fixed/syslimits.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/limits.h \ - C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include/stddef.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/stddef.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/setjmp.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/time.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_timeval.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sys/timeb.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/pthread_time.h \ - C:/msys64/mingw64/include/zlib.h C:/msys64/mingw64/include/zconf.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sys/types.h \ - C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include/stdarg.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/stdarg.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/unistd.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/io.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/string.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/process.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/getopt.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h \ - C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include/float.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/float.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/stdlib.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/malloc.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/math.h \ - contrib/libtests/../visupng/cexcept.h - -C:/msys64/mingw64/x86_64-w64-mingw32/include/signal.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/crtdefs.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/vadefs.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_directx.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/pthread_signal.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/stdio.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/swprintf.inl: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h: - -config.h: - -F:/lpng1637/png.h: - -F:/lpng1637/pnglibconf.h: - -F:/lpng1637/pngconf.h: - -C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include-fixed/limits.h: - -C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include-fixed/syslimits.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/limits.h: - -C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include/stddef.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/stddef.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/setjmp.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/time.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_timeval.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sys/timeb.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/pthread_time.h: - -C:/msys64/mingw64/include/zlib.h: - -C:/msys64/mingw64/include/zconf.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sys/types.h: - -C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include/stdarg.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/stdarg.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/unistd.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/io.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/string.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/process.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/getopt.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h: - -C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include/float.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/float.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/stdlib.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/malloc.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/math.h: - -contrib/libtests/../visupng/cexcept.h: diff --git a/libs/libpng-src/contrib/libtests/.deps/timepng.Po b/libs/libpng-src/contrib/libtests/.deps/timepng.Po deleted file mode 100644 index 096e7382b..000000000 --- a/libs/libpng-src/contrib/libtests/.deps/timepng.Po +++ /dev/null @@ -1,100 +0,0 @@ -contrib/libtests/timepng.o: contrib/libtests/timepng.c \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/stdlib.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/vadefs.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_directx.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h \ - C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include-fixed/limits.h \ - C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include-fixed/syslimits.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/limits.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/malloc.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/stdio.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/string.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/errno.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/time.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_timeval.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sys/timeb.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/pthread_time.h config.h \ - F:/lpng1637/png.h F:/lpng1637/pnglibconf.h F:/lpng1637/pngconf.h \ - C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include/stddef.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/stddef.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/setjmp.h - -C:/msys64/mingw64/x86_64-w64-mingw32/include/stdlib.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/vadefs.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_directx.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h: - -C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include-fixed/limits.h: - -C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include-fixed/syslimits.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/limits.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/crtdefs.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/malloc.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/stdio.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/swprintf.inl: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/string.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/errno.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/time.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_timeval.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sys/timeb.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/pthread_time.h: - -config.h: - -F:/lpng1637/png.h: - -F:/lpng1637/pnglibconf.h: - -F:/lpng1637/pngconf.h: - -C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include/stddef.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/stddef.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/setjmp.h: diff --git a/libs/libpng-src/contrib/libtests/.dirstamp b/libs/libpng-src/contrib/libtests/.dirstamp deleted file mode 100644 index e69de29bb..000000000 diff --git a/libs/libpng-src/contrib/tools/.deps/.dirstamp b/libs/libpng-src/contrib/tools/.deps/.dirstamp deleted file mode 100644 index e69de29bb..000000000 diff --git a/libs/libpng-src/contrib/tools/.deps/png-fix-itxt.Po b/libs/libpng-src/contrib/tools/.deps/png-fix-itxt.Po deleted file mode 100644 index 4913d70ef..000000000 --- a/libs/libpng-src/contrib/tools/.deps/png-fix-itxt.Po +++ /dev/null @@ -1,93 +0,0 @@ -contrib/tools/png-fix-itxt.o: contrib/tools/png-fix-itxt.c \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/stdio.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/vadefs.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_directx.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h \ - C:/msys64/mingw64/include/zlib.h C:/msys64/mingw64/include/zconf.h \ - C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include/stddef.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/stddef.h \ - C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include-fixed/limits.h \ - C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include-fixed/syslimits.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/limits.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sys/types.h \ - C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include/stdarg.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/stdarg.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/unistd.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/io.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/string.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/process.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/getopt.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h - -C:/msys64/mingw64/x86_64-w64-mingw32/include/stdio.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/crtdefs.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/vadefs.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_directx.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/swprintf.inl: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h: - -C:/msys64/mingw64/include/zlib.h: - -C:/msys64/mingw64/include/zconf.h: - -C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include/stddef.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/stddef.h: - -C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include-fixed/limits.h: - -C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include-fixed/syslimits.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/limits.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sys/types.h: - -C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include/stdarg.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/stdarg.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/unistd.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/io.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/string.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/process.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/getopt.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h: diff --git a/libs/libpng-src/contrib/tools/.deps/pngcp.Po b/libs/libpng-src/contrib/tools/.deps/pngcp.Po deleted file mode 100644 index 42514750f..000000000 --- a/libs/libpng-src/contrib/tools/.deps/pngcp.Po +++ /dev/null @@ -1,144 +0,0 @@ -contrib/tools/pngcp.o: contrib/tools/pngcp.c pnglibconf.h config.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/stdio.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/vadefs.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_directx.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h \ - F:/lpng1637/png.h F:/lpng1637/pngconf.h \ - C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include-fixed/limits.h \ - C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include-fixed/syslimits.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/limits.h \ - C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include/stddef.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/stddef.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/setjmp.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/time.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_timeval.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sys/timeb.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/pthread_time.h \ - C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include/stdarg.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/stdarg.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/stdlib.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/malloc.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/string.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/errno.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/assert.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/unistd.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/io.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/process.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sys/types.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/getopt.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sys/stat.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_stat64.h \ - C:/msys64/mingw64/include/zlib.h C:/msys64/mingw64/include/zconf.h - -pnglibconf.h: - -config.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/stdio.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/crtdefs.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/vadefs.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_directx.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/swprintf.inl: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h: - -F:/lpng1637/png.h: - -F:/lpng1637/pngconf.h: - -C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include-fixed/limits.h: - -C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include-fixed/syslimits.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/limits.h: - -C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include/stddef.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/stddef.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/setjmp.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/time.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_timeval.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sys/timeb.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/pthread_time.h: - -C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include/stdarg.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/stdarg.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/stdlib.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/malloc.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/string.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/errno.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/assert.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/unistd.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/io.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/process.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sys/types.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/getopt.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sys/stat.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_stat64.h: - -C:/msys64/mingw64/include/zlib.h: - -C:/msys64/mingw64/include/zconf.h: diff --git a/libs/libpng-src/contrib/tools/.deps/pngfix.Po b/libs/libpng-src/contrib/tools/.deps/pngfix.Po deleted file mode 100644 index 3b2068ff9..000000000 --- a/libs/libpng-src/contrib/tools/.deps/pngfix.Po +++ /dev/null @@ -1,139 +0,0 @@ -contrib/tools/pngfix.o: contrib/tools/pngfix.c \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/stdlib.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/vadefs.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_directx.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h \ - C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include-fixed/limits.h \ - C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include-fixed/syslimits.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/limits.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/malloc.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/stdio.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/string.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/ctype.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/errno.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/assert.h F:/lpng1637/png.h \ - F:/lpng1637/pnglibconf.h F:/lpng1637/pngconf.h \ - C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include/stddef.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/stddef.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/setjmp.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/time.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_timeval.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sys/timeb.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/pthread_time.h \ - C:/msys64/mingw64/include/zlib.h C:/msys64/mingw64/include/zconf.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/sys/types.h \ - C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include/stdarg.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/stdarg.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/unistd.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/io.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/process.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/getopt.h \ - C:/msys64/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h - -C:/msys64/mingw64/x86_64-w64-mingw32/include/stdlib.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/vadefs.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_directx.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h: - -C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include-fixed/limits.h: - -C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include-fixed/syslimits.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/limits.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/crtdefs.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/malloc.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/stdio.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/swprintf.inl: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/string.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/ctype.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/errno.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/assert.h: - -F:/lpng1637/png.h: - -F:/lpng1637/pnglibconf.h: - -F:/lpng1637/pngconf.h: - -C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include/stddef.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/stddef.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/setjmp.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/time.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_timeval.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sys/timeb.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/pthread_time.h: - -C:/msys64/mingw64/include/zlib.h: - -C:/msys64/mingw64/include/zconf.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/sys/types.h: - -C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/9.1.0/include/stdarg.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/stdarg.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/unistd.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/io.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/process.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/getopt.h: - -C:/msys64/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h: diff --git a/libs/libpng-src/contrib/tools/.dirstamp b/libs/libpng-src/contrib/tools/.dirstamp deleted file mode 100644 index e69de29bb..000000000 diff --git a/libs/libpng-src/intel/.dirstamp b/libs/libpng-src/intel/.dirstamp deleted file mode 100644 index e69de29bb..000000000 diff --git a/libs/libpng-src/libpng.pc b/libs/libpng-src/libpng.pc deleted file mode 100644 index a7176ca27..000000000 --- a/libs/libpng-src/libpng.pc +++ /dev/null @@ -1,12 +0,0 @@ -prefix=/mingw32 -exec_prefix=${prefix} -libdir=${exec_prefix}/lib -includedir=${prefix}/include/libpng16 - -Name: libpng -Description: Loads and saves PNG files -Version: 1.6.37 -Requires: zlib -Libs: -L${libdir} -lpng16 -Libs.private: -lz -Cflags: -I${includedir} diff --git a/libs/libpng-src/libtool b/libs/libpng-src/libtool deleted file mode 100644 index 8c0474ada..000000000 --- a/libs/libpng-src/libtool +++ /dev/null @@ -1,11661 +0,0 @@ -#! /bin/sh -# Generated automatically by config.status (libpng) 1.6.37 -# Libtool was configured on host SteelT-PC: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. - -# Provide generalized library-building support services. -# Written by Gordon Matzigkeit, 1996 - -# Copyright (C) 2014 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. There is NO -# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# GNU Libtool is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of of the License, or -# (at your option) any later version. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program or library that is built -# using GNU Libtool, you may include this file under the same -# distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - - -# The names of the tagged configurations supported by this script. -available_tags='' - -# Configured defaults for sys_lib_dlsearch_path munging. -: ${LT_SYS_LIBRARY_PATH=""} - -# ### BEGIN LIBTOOL CONFIG - -# A sed program that does not truncate output. -SED="/usr/bin/sed" - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="$SED -e 1s/^X//" - -# A grep program that handles long lines. -GREP="/usr/bin/grep" - -# An ERE matcher. -EGREP="/usr/bin/grep -E" - -# A literal string matcher. -FGREP="/usr/bin/grep -F" - -# Shell to use when invoking shell scripts. -SHELL="/bin/sh" - -# An echo program that protects backslashes. -ECHO="printf %s\\n" - -# Which release of libtool.m4 was used? -macro_version=2.4.6 -macro_revision=2.4.6 - -# Assembler program. -AS="as" - -# DLL creation program. -DLLTOOL="dlltool" - -# Object dumper program. -OBJDUMP="objdump" - -# Whether or not to build shared libraries. -build_libtool_libs=yes - -# Whether or not to build static libraries. -build_old_libs=yes - -# What type of objects to build. -pic_mode=default - -# Whether or not to optimize for fast installation. -fast_install=needless - -# Shared archive member basename,for filename based shared library versioning on AIX. -shared_archive_member_spec= - -# The PATH separator for the build system. -PATH_SEPARATOR=":" - -# The host system. -host_alias= -host=i686-w64-mingw32 -host_os=mingw32 - -# The build system. -build_alias=i686-w64-mingw32 -build=i686-w64-mingw32 -build_os=mingw32 - -# A BSD- or MS-compatible name lister. -NM="/mingw32/bin/nm -B" - -# Whether we need soft or hard links. -LN_S="cp -pR" - -# What is the maximum length of a command? -max_cmd_len=8192 - -# Object file suffix (normally "o"). -objext=o - -# Executable file suffix (normally ""). -exeext= - -# whether the shell understands "unset". -lt_unset=unset - -# turn spaces into newlines. -SP2NL="tr \\040 \\012" - -# turn newlines into spaces. -NL2SP="tr \\015\\012 \\040\\040" - -# convert $build file names to $host format. -to_host_file_cmd=func_convert_file_msys_to_w32 - -# convert $build files to toolchain format. -to_tool_file_cmd=func_convert_file_msys_to_w32 - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method="file_magic ^x86 archive import|^x86 DLL" - -# Command to use when deplibs_check_method = "file_magic". -file_magic_cmd="func_win32_libid" - -# How to find potential files when deplibs_check_method = "file_magic". -file_magic_glob="" - -# Find potential files using nocaseglob when deplibs_check_method = "file_magic". -want_nocaseglob="yes" - -# Command to associate shared and link libraries. -sharedlib_from_linklib_cmd="func_cygming_dll_for_implib" - -# The archiver. -AR="ar" - -# Flags to create an archive. -AR_FLAGS="cru" - -# How to feed a file listing to the archiver. -archiver_list_spec="@" - -# A symbol stripping program. -STRIP="strip" - -# Commands used to install an old-style archive. -RANLIB="ranlib" -old_postinstall_cmds="chmod 644 \$oldlib~\$RANLIB \$tool_oldlib" -old_postuninstall_cmds="" - -# Whether to use a lock for old archive extraction. -lock_old_archive_extraction=no - -# A C compiler. -LTCC="gcc" - -# LTCC compiler flags. -LTCFLAGS="-g -O2" - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe="sed -n -e 's/^.*[ ]\\([ABCDGIRSTW][ABCDGIRSTW]*\\)[ ][ ]*_\\([_A-Za-z][_A-Za-z0-9]*\\)\\{0,1\\}\$/\\1 _\\2 \\2/p' | sed '/ __gnu_lto/d'" - -# Transform the output of nm in a proper C declaration. -global_symbol_to_cdecl="sed -n -e 's/^T .* \\(.*\\)\$/extern int \\1();/p' -e 's/^[ABCDGIRSTW][ABCDGIRSTW]* .* \\(.*\\)\$/extern char \\1;/p'" - -# Transform the output of nm into a list of symbols to manually relocate. -global_symbol_to_import="" - -# Transform the output of nm in a C name address pair. -global_symbol_to_c_name_address="sed -n -e 's/^: \\(.*\\) .*\$/ {\"\\1\", (void *) 0},/p' -e 's/^[ABCDGIRSTW][ABCDGIRSTW]* .* \\(.*\\)\$/ {\"\\1\", (void *) \\&\\1},/p'" - -# Transform the output of nm in a C name address pair when lib prefix is needed. -global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \\(.*\\) .*\$/ {\"\\1\", (void *) 0},/p' -e 's/^[ABCDGIRSTW][ABCDGIRSTW]* .* \\(lib.*\\)\$/ {\"\\1\", (void *) \\&\\1},/p' -e 's/^[ABCDGIRSTW][ABCDGIRSTW]* .* \\(.*\\)\$/ {\"lib\\1\", (void *) \\&\\1},/p'" - -# The name lister interface. -nm_interface="BSD nm" - -# Specify filename containing input files for $NM. -nm_file_list_spec="@" - -# The root where to search for dependent libraries,and where our libraries should be installed. -lt_sysroot= - -# Command to truncate a binary pipe. -lt_truncate_bin="/usr/bin/sed -e 4q" - -# The name of the directory that contains temporary libtool files. -objdir=.libs - -# Used to examine libraries when file_magic_cmd begins with "file". -MAGIC_CMD=file - -# Must we lock files when doing compilation? -need_locks="no" - -# Manifest tool. -MANIFEST_TOOL=":" - -# Tool to manipulate archived DWARF debug symbol files on Mac OS X. -DSYMUTIL="" - -# Tool to change global to local symbols on Mac OS X. -NMEDIT="" - -# Tool to manipulate fat objects and archives on Mac OS X. -LIPO="" - -# ldd/readelf like tool for Mach-O binaries on Mac OS X. -OTOOL="" - -# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. -OTOOL64="" - -# Old archive suffix (normally "a"). -libext=a - -# Shared library suffix (normally ".so"). -shrext_cmds=".dll" - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds="" - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at link time. -variables_saved_for_relink="PATH PATH LD_RUN_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" - -# Do we need the "lib" prefix for modules? -need_lib_prefix=no - -# Do we need a version for libraries? -need_version=no - -# Library versioning type. -version_type=windows - -# Shared library runtime path variable. -runpath_var=LD_RUN_PATH - -# Shared library path variable. -shlibpath_var=PATH - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=yes - -# Format of library name prefix. -libname_spec="lib\$name" - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME -library_names_spec="\$libname.dll.a" - -# The coded name of the library, if different from the real name. -soname_spec="\$libname\`echo \$release | \$SED -e s/[.]/-/g\`\$versuffix\$shared_ext" - -# Permission mode override for installation of shared libraries. -install_override_mode="" - -# Command to use after installation of a shared archive. -postinstall_cmds="base_file=\\\`basename \\\$file\\\`~ - dlpath=\\\`\$SHELL 2>&1 -c '. \$dir/'\\\$base_file'i; echo \\\$dlname'\\\`~ - dldir=\$destdir/\\\`dirname \\\$dlpath\\\`~ - test -d \\\$dldir || mkdir -p \\\$dldir~ - \$install_prog \$dir/\$dlname \\\$dldir/\$dlname~ - chmod a+x \\\$dldir/\$dlname~ - if test -n '\$stripme' && test -n '\$striplib'; then - eval '\$striplib \\\$dldir/\$dlname' || exit \\\$?; - fi" - -# Command to use after uninstallation of a shared archive. -postuninstall_cmds="dldll=\\\`\$SHELL 2>&1 -c '. \$file; echo \\\$dlname'\\\`~ - dlpath=\$dir/\\\$dldll~ - \$RM \\\$dlpath" - -# Commands used to finish a libtool library installation in a directory. -finish_cmds="" - -# As "finish_cmds", except a single script fragment to be evaled but -# not shown. -finish_eval="" - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=no - -# Compile-time system search path for libraries. -sys_lib_search_path_spec="C:/msys64/mingw32/lib/gcc/i686-w64-mingw32/9.1.0 C:/msys64/mingw32/lib/gcc C:/msys64/mingw32/i686-w64-mingw32/lib C:/msys64/mingw32/lib " - -# Detected run-time system search path for libraries. -sys_lib_dlsearch_path_spec="/lib /usr/lib" - -# Explicit LT_SYS_LIBRARY_PATH set during ./configure time. -configure_time_lt_sys_library_path="" - -# Whether dlopen is supported. -dlopen_support=unknown - -# Whether dlopen of programs is supported. -dlopen_self=unknown - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=unknown - -# Commands to strip libraries. -old_striplib="strip --strip-debug" -striplib="strip --strip-unneeded" - - -# The linker used to build libraries. -LD="C:/msys64/mingw32/i686-w64-mingw32/bin/ld.exe" - -# How to create reloadable object files. -reload_flag=" -r" -reload_cmds="\$LD\$reload_flag -o \$output\$reload_objs" - -# Commands used to build an old-style archive. -old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs~\$RANLIB \$tool_oldlib" - -# A language specific compiler. -CC="gcc" - -# Is the compiler the GNU compiler? -with_gcc=yes - -# Compiler flag to turn off builtin functions. -no_builtin_flag=" -fno-builtin" - -# Additional compiler flags for building library objects. -pic_flag=" -DDLL_EXPORT -DPIC" - -# How to pass a linker flag through the compiler. -wl="-Wl," - -# Compiler flag to prevent dynamic linking. -link_static_flag="-static" - -# Does compiler simultaneously support -c and -o options? -compiler_c_o="yes" - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=yes - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=yes - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec="\$wl--export-all-symbols" - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec="\$wl--whole-archive\$convenience \$wl--no-whole-archive" - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object="no" - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds="" - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds="" - -# Commands used to build a shared archive. -archive_cmds="\$CC -shared \$libobjs \$deplibs \$compiler_flags -o \$output_objdir/\$soname \$wl--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib" -archive_expsym_cmds="if test DEF = \\\"\\\`\$SED -n -e 's/^[ ]*//' -e '/^\\\\(;.*\\\\)*\$/d' -e 's/^\\\\(EXPORTS\\\\|LIBRARY\\\\)\\\\([ ].*\\\\)*\$/DEF/p' -e q \$export_symbols\\\`\\\" ; then - cp \$export_symbols \$output_objdir/\$soname.def; - else - echo EXPORTS > \$output_objdir/\$soname.def; - cat \$export_symbols >> \$output_objdir/\$soname.def; - fi~ - \$CC -shared \$output_objdir/\$soname.def \$libobjs \$deplibs \$compiler_flags -o \$output_objdir/\$soname \$wl--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib" - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds="" -module_expsym_cmds="" - -# Whether we are building with GNU ld or not. -with_gnu_ld="yes" - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag="unsupported" - -# Flag that enforces no undefined symbols. -no_undefined_flag="" - -# Flag to hardcode $libdir into a binary during linking. -# This must work even if $libdir does not exist -hardcode_libdir_flag_spec="-L\$libdir" - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator="" - -# Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=no - -# Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting $shlibpath_var if the -# library is relocated. -hardcode_direct_absolute=no - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=no - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=unsupported - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=no - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=no - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=unknown - -# Set to "yes" if exported symbols are required. -always_export_symbols=no - -# The commands to list exported symbols. -export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | \$SED -e '/^[BCDGRS][ ]/s/.*[ ]\\\\([^ ]*\\\\)/\\\\1 DATA/;s/^.*[ ]__nm__\\\\([^ ]*\\\\)[ ][^ ]*/\\\\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //' | sort | uniq > \$export_symbols" - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms="[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname" - -# Symbols that must always be exported. -include_expsyms="" - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds="" - -# Commands necessary for finishing linking programs. -postlink_cmds="" - -# Specify filename containing input files. -file_list_spec="" - -# How to hardcode a shared library path into an executable. -hardcode_action=immediate - -# ### END LIBTOOL CONFIG - - -# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE - -# func_munge_path_list VARIABLE PATH -# ----------------------------------- -# VARIABLE is name of variable containing _space_ separated list of -# directories to be munged by the contents of PATH, which is string -# having a format: -# "DIR[:DIR]:" -# string "DIR[ DIR]" will be prepended to VARIABLE -# ":DIR[:DIR]" -# string "DIR[ DIR]" will be appended to VARIABLE -# "DIRP[:DIRP]::[DIRA:]DIRA" -# string "DIRP[ DIRP]" will be prepended to VARIABLE and string -# "DIRA[ DIRA]" will be appended to VARIABLE -# "DIR[:DIR]" -# VARIABLE will be replaced by "DIR[ DIR]" -func_munge_path_list () -{ - case x$2 in - x) - ;; - *:) - eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" - ;; - x:*) - eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" - ;; - *::*) - eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" - eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" - ;; - *) - eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" - ;; - esac -} - - -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. -func_cc_basename () -{ - for cc_temp in $*""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac - done - func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` -} - - -# ### END FUNCTIONS SHARED WITH CONFIGURE - -#! /bin/sh -## DO NOT EDIT - This file generated from ./build-aux/ltmain.in -## by inline-source v2014-01-03.01 - -# libtool (GNU libtool) 2.4.6 -# Provide generalized library-building support services. -# Written by Gordon Matzigkeit , 1996 - -# Copyright (C) 1996-2015 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. There is NO -# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# GNU Libtool is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - - -PROGRAM=libtool -PACKAGE=libtool -VERSION=2.4.6 -package_revision=2.4.6 - - -## ------ ## -## Usage. ## -## ------ ## - -# Run './libtool --help' for help with using this script from the -# command line. - - -## ------------------------------- ## -## User overridable command paths. ## -## ------------------------------- ## - -# After configure completes, it has a better idea of some of the -# shell tools we need than the defaults used by the functions shared -# with bootstrap, so set those here where they can still be over- -# ridden by the user, but otherwise take precedence. - -: ${AUTOCONF="autoconf"} -: ${AUTOMAKE="automake"} - - -## -------------------------- ## -## Source external libraries. ## -## -------------------------- ## - -# Much of our low-level functionality needs to be sourced from external -# libraries, which are installed to $pkgauxdir. - -# Set a version string for this script. -scriptversion=2015-01-20.17; # UTC - -# General shell script boiler plate, and helper functions. -# Written by Gary V. Vaughan, 2004 - -# Copyright (C) 2004-2015 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. There is NO -# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. - -# As a special exception to the GNU General Public License, if you distribute -# this file as part of a program or library that is built using GNU Libtool, -# you may include this file under the same distribution terms that you use -# for the rest of that program. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# Please report bugs or propose patches to gary@gnu.org. - - -## ------ ## -## Usage. ## -## ------ ## - -# Evaluate this file near the top of your script to gain access to -# the functions and variables defined here: -# -# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh -# -# If you need to override any of the default environment variable -# settings, do that before evaluating this file. - - -## -------------------- ## -## Shell normalisation. ## -## -------------------- ## - -# Some shells need a little help to be as Bourne compatible as possible. -# Before doing anything else, make sure all that help has been provided! - -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac -fi - -# NLS nuisances: We save the old values in case they are required later. -_G_user_locale= -_G_safe_locale= -for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES -do - eval "if test set = \"\${$_G_var+set}\"; then - save_$_G_var=\$$_G_var - $_G_var=C - export $_G_var - _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" - _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" - fi" -done - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -# Make sure IFS has a sensible default -sp=' ' -nl=' -' -IFS="$sp $nl" - -# There are apparently some retarded systems that use ';' as a PATH separator! -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - - -## ------------------------- ## -## Locate command utilities. ## -## ------------------------- ## - - -# func_executable_p FILE -# ---------------------- -# Check that FILE is an executable regular file. -func_executable_p () -{ - test -f "$1" && test -x "$1" -} - - -# func_path_progs PROGS_LIST CHECK_FUNC [PATH] -# -------------------------------------------- -# Search for either a program that responds to --version with output -# containing "GNU", or else returned by CHECK_FUNC otherwise, by -# trying all the directories in PATH with each of the elements of -# PROGS_LIST. -# -# CHECK_FUNC should accept the path to a candidate program, and -# set $func_check_prog_result if it truncates its output less than -# $_G_path_prog_max characters. -func_path_progs () -{ - _G_progs_list=$1 - _G_check_func=$2 - _G_PATH=${3-"$PATH"} - - _G_path_prog_max=0 - _G_path_prog_found=false - _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} - for _G_dir in $_G_PATH; do - IFS=$_G_save_IFS - test -z "$_G_dir" && _G_dir=. - for _G_prog_name in $_G_progs_list; do - for _exeext in '' .EXE; do - _G_path_prog=$_G_dir/$_G_prog_name$_exeext - func_executable_p "$_G_path_prog" || continue - case `"$_G_path_prog" --version 2>&1` in - *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; - *) $_G_check_func $_G_path_prog - func_path_progs_result=$func_check_prog_result - ;; - esac - $_G_path_prog_found && break 3 - done - done - done - IFS=$_G_save_IFS - test -z "$func_path_progs_result" && { - echo "no acceptable sed could be found in \$PATH" >&2 - exit 1 - } -} - - -# We want to be able to use the functions in this file before configure -# has figured out where the best binaries are kept, which means we have -# to search for them ourselves - except when the results are already set -# where we skip the searches. - -# Unless the user overrides by setting SED, search the path for either GNU -# sed, or the sed that truncates its output the least. -test -z "$SED" && { - _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for _G_i in 1 2 3 4 5 6 7; do - _G_sed_script=$_G_sed_script$nl$_G_sed_script - done - echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed - _G_sed_script= - - func_check_prog_sed () - { - _G_path_prog=$1 - - _G_count=0 - printf 0123456789 >conftest.in - while : - do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo '' >> conftest.nl - "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break - diff conftest.out conftest.nl >/dev/null 2>&1 || break - _G_count=`expr $_G_count + 1` - if test "$_G_count" -gt "$_G_path_prog_max"; then - # Best one so far, save it but keep looking for a better one - func_check_prog_result=$_G_path_prog - _G_path_prog_max=$_G_count - fi - # 10*(2^10) chars as input seems more than enough - test 10 -lt "$_G_count" && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out - } - - func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin - rm -f conftest.sed - SED=$func_path_progs_result -} - - -# Unless the user overrides by setting GREP, search the path for either GNU -# grep, or the grep that truncates its output the least. -test -z "$GREP" && { - func_check_prog_grep () - { - _G_path_prog=$1 - - _G_count=0 - _G_path_prog_max=0 - printf 0123456789 >conftest.in - while : - do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo 'GREP' >> conftest.nl - "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break - diff conftest.out conftest.nl >/dev/null 2>&1 || break - _G_count=`expr $_G_count + 1` - if test "$_G_count" -gt "$_G_path_prog_max"; then - # Best one so far, save it but keep looking for a better one - func_check_prog_result=$_G_path_prog - _G_path_prog_max=$_G_count - fi - # 10*(2^10) chars as input seems more than enough - test 10 -lt "$_G_count" && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out - } - - func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin - GREP=$func_path_progs_result -} - - -## ------------------------------- ## -## User overridable command paths. ## -## ------------------------------- ## - -# All uppercase variable names are used for environment variables. These -# variables can be overridden by the user before calling a script that -# uses them if a suitable command of that name is not already available -# in the command search PATH. - -: ${CP="cp -f"} -: ${ECHO="printf %s\n"} -: ${EGREP="$GREP -E"} -: ${FGREP="$GREP -F"} -: ${LN_S="ln -s"} -: ${MAKE="make"} -: ${MKDIR="mkdir"} -: ${MV="mv -f"} -: ${RM="rm -f"} -: ${SHELL="${CONFIG_SHELL-/bin/sh}"} - - -## -------------------- ## -## Useful sed snippets. ## -## -------------------- ## - -sed_dirname='s|/[^/]*$||' -sed_basename='s|^.*/||' - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -sed_quote_subst='s|\([`"$\\]\)|\\\1|g' - -# Same as above, but do not quote variable references. -sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution that turns a string into a regex matching for the -# string literally. -sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' - -# Sed substitution that converts a w32 file name or path -# that contains forward slashes, into one that contains -# (escaped) backslashes. A very naive implementation. -sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - -# Re-'\' parameter expansions in output of sed_double_quote_subst that -# were '\'-ed in input to the same. If an odd number of '\' preceded a -# '$' in input to sed_double_quote_subst, that '$' was protected from -# expansion. Since each input '\' is now two '\'s, look for any number -# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. -_G_bs='\\' -_G_bs2='\\\\' -_G_bs4='\\\\\\\\' -_G_dollar='\$' -sed_double_backslash="\ - s/$_G_bs4/&\\ -/g - s/^$_G_bs2$_G_dollar/$_G_bs&/ - s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g - s/\n//g" - - -## ----------------- ## -## Global variables. ## -## ----------------- ## - -# Except for the global variables explicitly listed below, the following -# functions in the '^func_' namespace, and the '^require_' namespace -# variables initialised in the 'Resource management' section, sourcing -# this file will not pollute your global namespace with anything -# else. There's no portable way to scope variables in Bourne shell -# though, so actually running these functions will sometimes place -# results into a variable named after the function, and often use -# temporary variables in the '^_G_' namespace. If you are careful to -# avoid using those namespaces casually in your sourcing script, things -# should continue to work as you expect. And, of course, you can freely -# overwrite any of the functions or variables defined here before -# calling anything to customize them. - -EXIT_SUCCESS=0 -EXIT_FAILURE=1 -EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. -EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. - -# Allow overriding, eg assuming that you follow the convention of -# putting '$debug_cmd' at the start of all your functions, you can get -# bash to show function call trace with: -# -# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name -debug_cmd=${debug_cmd-":"} -exit_cmd=: - -# By convention, finish your script with: -# -# exit $exit_status -# -# so that you can set exit_status to non-zero if you want to indicate -# something went wrong during execution without actually bailing out at -# the point of failure. -exit_status=$EXIT_SUCCESS - -# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh -# is ksh but when the shell is invoked as "sh" and the current value of -# the _XPG environment variable is not equal to 1 (one), the special -# positional parameter $0, within a function call, is the name of the -# function. -progpath=$0 - -# The name of this program. -progname=`$ECHO "$progpath" |$SED "$sed_basename"` - -# Make sure we have an absolute progpath for reexecution: -case $progpath in - [\\/]*|[A-Za-z]:\\*) ;; - *[\\/]*) - progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` - progdir=`cd "$progdir" && pwd` - progpath=$progdir/$progname - ;; - *) - _G_IFS=$IFS - IFS=${PATH_SEPARATOR-:} - for progdir in $PATH; do - IFS=$_G_IFS - test -x "$progdir/$progname" && break - done - IFS=$_G_IFS - test -n "$progdir" || progdir=`pwd` - progpath=$progdir/$progname - ;; -esac - - -## ----------------- ## -## Standard options. ## -## ----------------- ## - -# The following options affect the operation of the functions defined -# below, and should be set appropriately depending on run-time para- -# meters passed on the command line. - -opt_dry_run=false -opt_quiet=false -opt_verbose=false - -# Categories 'all' and 'none' are always available. Append any others -# you will pass as the first argument to func_warning from your own -# code. -warning_categories= - -# By default, display warnings according to 'opt_warning_types'. Set -# 'warning_func' to ':' to elide all warnings, or func_fatal_error to -# treat the next displayed warning as a fatal error. -warning_func=func_warn_and_continue - -# Set to 'all' to display all warnings, 'none' to suppress all -# warnings, or a space delimited list of some subset of -# 'warning_categories' to display only the listed warnings. -opt_warning_types=all - - -## -------------------- ## -## Resource management. ## -## -------------------- ## - -# This section contains definitions for functions that each ensure a -# particular resource (a file, or a non-empty configuration variable for -# example) is available, and if appropriate to extract default values -# from pertinent package files. Call them using their associated -# 'require_*' variable to ensure that they are executed, at most, once. -# -# It's entirely deliberate that calling these functions can set -# variables that don't obey the namespace limitations obeyed by the rest -# of this file, in order that that they be as useful as possible to -# callers. - - -# require_term_colors -# ------------------- -# Allow display of bold text on terminals that support it. -require_term_colors=func_require_term_colors -func_require_term_colors () -{ - $debug_cmd - - test -t 1 && { - # COLORTERM and USE_ANSI_COLORS environment variables take - # precedence, because most terminfo databases neglect to describe - # whether color sequences are supported. - test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} - - if test 1 = "$USE_ANSI_COLORS"; then - # Standard ANSI escape sequences - tc_reset='' - tc_bold=''; tc_standout='' - tc_red=''; tc_green='' - tc_blue=''; tc_cyan='' - else - # Otherwise trust the terminfo database after all. - test -n "`tput sgr0 2>/dev/null`" && { - tc_reset=`tput sgr0` - test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` - tc_standout=$tc_bold - test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` - test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` - test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` - test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` - test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` - } - fi - } - - require_term_colors=: -} - - -## ----------------- ## -## Function library. ## -## ----------------- ## - -# This section contains a variety of useful functions to call in your -# scripts. Take note of the portable wrappers for features provided by -# some modern shells, which will fall back to slower equivalents on -# less featureful shells. - - -# func_append VAR VALUE -# --------------------- -# Append VALUE onto the existing contents of VAR. - - # We should try to minimise forks, especially on Windows where they are - # unreasonably slow, so skip the feature probes when bash or zsh are - # being used: - if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then - : ${_G_HAVE_ARITH_OP="yes"} - : ${_G_HAVE_XSI_OPS="yes"} - # The += operator was introduced in bash 3.1 - case $BASH_VERSION in - [12].* | 3.0 | 3.0*) ;; - *) - : ${_G_HAVE_PLUSEQ_OP="yes"} - ;; - esac - fi - - # _G_HAVE_PLUSEQ_OP - # Can be empty, in which case the shell is probed, "yes" if += is - # useable or anything else if it does not work. - test -z "$_G_HAVE_PLUSEQ_OP" \ - && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ - && _G_HAVE_PLUSEQ_OP=yes - -if test yes = "$_G_HAVE_PLUSEQ_OP" -then - # This is an XSI compatible shell, allowing a faster implementation... - eval 'func_append () - { - $debug_cmd - - eval "$1+=\$2" - }' -else - # ...otherwise fall back to using expr, which is often a shell builtin. - func_append () - { - $debug_cmd - - eval "$1=\$$1\$2" - } -fi - - -# func_append_quoted VAR VALUE -# ---------------------------- -# Quote VALUE and append to the end of shell variable VAR, separated -# by a space. -if test yes = "$_G_HAVE_PLUSEQ_OP"; then - eval 'func_append_quoted () - { - $debug_cmd - - func_quote_for_eval "$2" - eval "$1+=\\ \$func_quote_for_eval_result" - }' -else - func_append_quoted () - { - $debug_cmd - - func_quote_for_eval "$2" - eval "$1=\$$1\\ \$func_quote_for_eval_result" - } -fi - - -# func_append_uniq VAR VALUE -# -------------------------- -# Append unique VALUE onto the existing contents of VAR, assuming -# entries are delimited by the first character of VALUE. For example: -# -# func_append_uniq options " --another-option option-argument" -# -# will only append to $options if " --another-option option-argument " -# is not already present somewhere in $options already (note spaces at -# each end implied by leading space in second argument). -func_append_uniq () -{ - $debug_cmd - - eval _G_current_value='`$ECHO $'$1'`' - _G_delim=`expr "$2" : '\(.\)'` - - case $_G_delim$_G_current_value$_G_delim in - *"$2$_G_delim"*) ;; - *) func_append "$@" ;; - esac -} - - -# func_arith TERM... -# ------------------ -# Set func_arith_result to the result of evaluating TERMs. - test -z "$_G_HAVE_ARITH_OP" \ - && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ - && _G_HAVE_ARITH_OP=yes - -if test yes = "$_G_HAVE_ARITH_OP"; then - eval 'func_arith () - { - $debug_cmd - - func_arith_result=$(( $* )) - }' -else - func_arith () - { - $debug_cmd - - func_arith_result=`expr "$@"` - } -fi - - -# func_basename FILE -# ------------------ -# Set func_basename_result to FILE with everything up to and including -# the last / stripped. -if test yes = "$_G_HAVE_XSI_OPS"; then - # If this shell supports suffix pattern removal, then use it to avoid - # forking. Hide the definitions single quotes in case the shell chokes - # on unsupported syntax... - _b='func_basename_result=${1##*/}' - _d='case $1 in - */*) func_dirname_result=${1%/*}$2 ;; - * ) func_dirname_result=$3 ;; - esac' - -else - # ...otherwise fall back to using sed. - _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' - _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` - if test "X$func_dirname_result" = "X$1"; then - func_dirname_result=$3 - else - func_append func_dirname_result "$2" - fi' -fi - -eval 'func_basename () -{ - $debug_cmd - - '"$_b"' -}' - - -# func_dirname FILE APPEND NONDIR_REPLACEMENT -# ------------------------------------------- -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -eval 'func_dirname () -{ - $debug_cmd - - '"$_d"' -}' - - -# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT -# -------------------------------------------------------- -# Perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# For efficiency, we do not delegate to the functions above but instead -# duplicate the functionality here. -eval 'func_dirname_and_basename () -{ - $debug_cmd - - '"$_b"' - '"$_d"' -}' - - -# func_echo ARG... -# ---------------- -# Echo program name prefixed message. -func_echo () -{ - $debug_cmd - - _G_message=$* - - func_echo_IFS=$IFS - IFS=$nl - for _G_line in $_G_message; do - IFS=$func_echo_IFS - $ECHO "$progname: $_G_line" - done - IFS=$func_echo_IFS -} - - -# func_echo_all ARG... -# -------------------- -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "$*" -} - - -# func_echo_infix_1 INFIX ARG... -# ------------------------------ -# Echo program name, followed by INFIX on the first line, with any -# additional lines not showing INFIX. -func_echo_infix_1 () -{ - $debug_cmd - - $require_term_colors - - _G_infix=$1; shift - _G_indent=$_G_infix - _G_prefix="$progname: $_G_infix: " - _G_message=$* - - # Strip color escape sequences before counting printable length - for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" - do - test -n "$_G_tc" && { - _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` - _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` - } - done - _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes - - func_echo_infix_1_IFS=$IFS - IFS=$nl - for _G_line in $_G_message; do - IFS=$func_echo_infix_1_IFS - $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 - _G_prefix=$_G_indent - done - IFS=$func_echo_infix_1_IFS -} - - -# func_error ARG... -# ----------------- -# Echo program name prefixed message to standard error. -func_error () -{ - $debug_cmd - - $require_term_colors - - func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 -} - - -# func_fatal_error ARG... -# ----------------------- -# Echo program name prefixed message to standard error, and exit. -func_fatal_error () -{ - $debug_cmd - - func_error "$*" - exit $EXIT_FAILURE -} - - -# func_grep EXPRESSION FILENAME -# ----------------------------- -# Check whether EXPRESSION matches any line of FILENAME, without output. -func_grep () -{ - $debug_cmd - - $GREP "$1" "$2" >/dev/null 2>&1 -} - - -# func_len STRING -# --------------- -# Set func_len_result to the length of STRING. STRING may not -# start with a hyphen. - test -z "$_G_HAVE_XSI_OPS" \ - && (eval 'x=a/b/c; - test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ - && _G_HAVE_XSI_OPS=yes - -if test yes = "$_G_HAVE_XSI_OPS"; then - eval 'func_len () - { - $debug_cmd - - func_len_result=${#1} - }' -else - func_len () - { - $debug_cmd - - func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` - } -fi - - -# func_mkdir_p DIRECTORY-PATH -# --------------------------- -# Make sure the entire path to DIRECTORY-PATH is available. -func_mkdir_p () -{ - $debug_cmd - - _G_directory_path=$1 - _G_dir_list= - - if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then - - # Protect directory names starting with '-' - case $_G_directory_path in - -*) _G_directory_path=./$_G_directory_path ;; - esac - - # While some portion of DIR does not yet exist... - while test ! -d "$_G_directory_path"; do - # ...make a list in topmost first order. Use a colon delimited - # list incase some portion of path contains whitespace. - _G_dir_list=$_G_directory_path:$_G_dir_list - - # If the last portion added has no slash in it, the list is done - case $_G_directory_path in */*) ;; *) break ;; esac - - # ...otherwise throw away the child directory and loop - _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` - done - _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` - - func_mkdir_p_IFS=$IFS; IFS=: - for _G_dir in $_G_dir_list; do - IFS=$func_mkdir_p_IFS - # mkdir can fail with a 'File exist' error if two processes - # try to create one of the directories concurrently. Don't - # stop in that case! - $MKDIR "$_G_dir" 2>/dev/null || : - done - IFS=$func_mkdir_p_IFS - - # Bail out if we (or some other process) failed to create a directory. - test -d "$_G_directory_path" || \ - func_fatal_error "Failed to create '$1'" - fi -} - - -# func_mktempdir [BASENAME] -# ------------------------- -# Make a temporary directory that won't clash with other running -# libtool processes, and avoids race conditions if possible. If -# given, BASENAME is the basename for that directory. -func_mktempdir () -{ - $debug_cmd - - _G_template=${TMPDIR-/tmp}/${1-$progname} - - if test : = "$opt_dry_run"; then - # Return a directory name, but don't create it in dry-run mode - _G_tmpdir=$_G_template-$$ - else - - # If mktemp works, use that first and foremost - _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` - - if test ! -d "$_G_tmpdir"; then - # Failing that, at least try and use $RANDOM to avoid a race - _G_tmpdir=$_G_template-${RANDOM-0}$$ - - func_mktempdir_umask=`umask` - umask 0077 - $MKDIR "$_G_tmpdir" - umask $func_mktempdir_umask - fi - - # If we're not in dry-run mode, bomb out on failure - test -d "$_G_tmpdir" || \ - func_fatal_error "cannot create temporary directory '$_G_tmpdir'" - fi - - $ECHO "$_G_tmpdir" -} - - -# func_normal_abspath PATH -# ------------------------ -# Remove doubled-up and trailing slashes, "." path components, -# and cancel out any ".." path components in PATH after making -# it an absolute path. -func_normal_abspath () -{ - $debug_cmd - - # These SED scripts presuppose an absolute path with a trailing slash. - _G_pathcar='s|^/\([^/]*\).*$|\1|' - _G_pathcdr='s|^/[^/]*||' - _G_removedotparts=':dotsl - s|/\./|/|g - t dotsl - s|/\.$|/|' - _G_collapseslashes='s|/\{1,\}|/|g' - _G_finalslash='s|/*$|/|' - - # Start from root dir and reassemble the path. - func_normal_abspath_result= - func_normal_abspath_tpath=$1 - func_normal_abspath_altnamespace= - case $func_normal_abspath_tpath in - "") - # Empty path, that just means $cwd. - func_stripname '' '/' "`pwd`" - func_normal_abspath_result=$func_stripname_result - return - ;; - # The next three entries are used to spot a run of precisely - # two leading slashes without using negated character classes; - # we take advantage of case's first-match behaviour. - ///*) - # Unusual form of absolute path, do nothing. - ;; - //*) - # Not necessarily an ordinary path; POSIX reserves leading '//' - # and for example Cygwin uses it to access remote file shares - # over CIFS/SMB, so we conserve a leading double slash if found. - func_normal_abspath_altnamespace=/ - ;; - /*) - # Absolute path, do nothing. - ;; - *) - # Relative path, prepend $cwd. - func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath - ;; - esac - - # Cancel out all the simple stuff to save iterations. We also want - # the path to end with a slash for ease of parsing, so make sure - # there is one (and only one) here. - func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` - while :; do - # Processed it all yet? - if test / = "$func_normal_abspath_tpath"; then - # If we ascended to the root using ".." the result may be empty now. - if test -z "$func_normal_abspath_result"; then - func_normal_abspath_result=/ - fi - break - fi - func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$_G_pathcar"` - func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$_G_pathcdr"` - # Figure out what to do with it - case $func_normal_abspath_tcomponent in - "") - # Trailing empty path component, ignore it. - ;; - ..) - # Parent dir; strip last assembled component from result. - func_dirname "$func_normal_abspath_result" - func_normal_abspath_result=$func_dirname_result - ;; - *) - # Actual path component, append it. - func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" - ;; - esac - done - # Restore leading double-slash if one was found on entry. - func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result -} - - -# func_notquiet ARG... -# -------------------- -# Echo program name prefixed message only when not in quiet mode. -func_notquiet () -{ - $debug_cmd - - $opt_quiet || func_echo ${1+"$@"} - - # A bug in bash halts the script if the last line of a function - # fails when set -e is in force, so we need another command to - # work around that: - : -} - - -# func_relative_path SRCDIR DSTDIR -# -------------------------------- -# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. -func_relative_path () -{ - $debug_cmd - - func_relative_path_result= - func_normal_abspath "$1" - func_relative_path_tlibdir=$func_normal_abspath_result - func_normal_abspath "$2" - func_relative_path_tbindir=$func_normal_abspath_result - - # Ascend the tree starting from libdir - while :; do - # check if we have found a prefix of bindir - case $func_relative_path_tbindir in - $func_relative_path_tlibdir) - # found an exact match - func_relative_path_tcancelled= - break - ;; - $func_relative_path_tlibdir*) - # found a matching prefix - func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" - func_relative_path_tcancelled=$func_stripname_result - if test -z "$func_relative_path_result"; then - func_relative_path_result=. - fi - break - ;; - *) - func_dirname $func_relative_path_tlibdir - func_relative_path_tlibdir=$func_dirname_result - if test -z "$func_relative_path_tlibdir"; then - # Have to descend all the way to the root! - func_relative_path_result=../$func_relative_path_result - func_relative_path_tcancelled=$func_relative_path_tbindir - break - fi - func_relative_path_result=../$func_relative_path_result - ;; - esac - done - - # Now calculate path; take care to avoid doubling-up slashes. - func_stripname '' '/' "$func_relative_path_result" - func_relative_path_result=$func_stripname_result - func_stripname '/' '/' "$func_relative_path_tcancelled" - if test -n "$func_stripname_result"; then - func_append func_relative_path_result "/$func_stripname_result" - fi - - # Normalisation. If bindir is libdir, return '.' else relative path. - if test -n "$func_relative_path_result"; then - func_stripname './' '' "$func_relative_path_result" - func_relative_path_result=$func_stripname_result - fi - - test -n "$func_relative_path_result" || func_relative_path_result=. - - : -} - - -# func_quote_for_eval ARG... -# -------------------------- -# Aesthetically quote ARGs to be evaled later. -# This function returns two values: -# i) func_quote_for_eval_result -# double-quoted, suitable for a subsequent eval -# ii) func_quote_for_eval_unquoted_result -# has all characters that are still active within double -# quotes backslashified. -func_quote_for_eval () -{ - $debug_cmd - - func_quote_for_eval_unquoted_result= - func_quote_for_eval_result= - while test 0 -lt $#; do - case $1 in - *[\\\`\"\$]*) - _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; - *) - _G_unquoted_arg=$1 ;; - esac - if test -n "$func_quote_for_eval_unquoted_result"; then - func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" - else - func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" - fi - - case $_G_unquoted_arg in - # Double-quote args containing shell metacharacters to delay - # word splitting, command substitution and variable expansion - # for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - _G_quoted_arg=\"$_G_unquoted_arg\" - ;; - *) - _G_quoted_arg=$_G_unquoted_arg - ;; - esac - - if test -n "$func_quote_for_eval_result"; then - func_append func_quote_for_eval_result " $_G_quoted_arg" - else - func_append func_quote_for_eval_result "$_G_quoted_arg" - fi - shift - done -} - - -# func_quote_for_expand ARG -# ------------------------- -# Aesthetically quote ARG to be evaled later; same as above, -# but do not quote variable references. -func_quote_for_expand () -{ - $debug_cmd - - case $1 in - *[\\\`\"]*) - _G_arg=`$ECHO "$1" | $SED \ - -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; - *) - _G_arg=$1 ;; - esac - - case $_G_arg in - # Double-quote args containing shell metacharacters to delay - # word splitting and command substitution for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - _G_arg=\"$_G_arg\" - ;; - esac - - func_quote_for_expand_result=$_G_arg -} - - -# func_stripname PREFIX SUFFIX NAME -# --------------------------------- -# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -if test yes = "$_G_HAVE_XSI_OPS"; then - eval 'func_stripname () - { - $debug_cmd - - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary variable first. - func_stripname_result=$3 - func_stripname_result=${func_stripname_result#"$1"} - func_stripname_result=${func_stripname_result%"$2"} - }' -else - func_stripname () - { - $debug_cmd - - case $2 in - .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; - *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; - esac - } -fi - - -# func_show_eval CMD [FAIL_EXP] -# ----------------------------- -# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. -func_show_eval () -{ - $debug_cmd - - _G_cmd=$1 - _G_fail_exp=${2-':'} - - func_quote_for_expand "$_G_cmd" - eval "func_notquiet $func_quote_for_expand_result" - - $opt_dry_run || { - eval "$_G_cmd" - _G_status=$? - if test 0 -ne "$_G_status"; then - eval "(exit $_G_status); $_G_fail_exp" - fi - } -} - - -# func_show_eval_locale CMD [FAIL_EXP] -# ------------------------------------ -# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. Use the saved locale for evaluation. -func_show_eval_locale () -{ - $debug_cmd - - _G_cmd=$1 - _G_fail_exp=${2-':'} - - $opt_quiet || { - func_quote_for_expand "$_G_cmd" - eval "func_echo $func_quote_for_expand_result" - } - - $opt_dry_run || { - eval "$_G_user_locale - $_G_cmd" - _G_status=$? - eval "$_G_safe_locale" - if test 0 -ne "$_G_status"; then - eval "(exit $_G_status); $_G_fail_exp" - fi - } -} - - -# func_tr_sh -# ---------- -# Turn $1 into a string suitable for a shell variable name. -# Result is stored in $func_tr_sh_result. All characters -# not in the set a-zA-Z0-9_ are replaced with '_'. Further, -# if $1 begins with a digit, a '_' is prepended as well. -func_tr_sh () -{ - $debug_cmd - - case $1 in - [0-9]* | *[!a-zA-Z0-9_]*) - func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` - ;; - * ) - func_tr_sh_result=$1 - ;; - esac -} - - -# func_verbose ARG... -# ------------------- -# Echo program name prefixed message in verbose mode only. -func_verbose () -{ - $debug_cmd - - $opt_verbose && func_echo "$*" - - : -} - - -# func_warn_and_continue ARG... -# ----------------------------- -# Echo program name prefixed warning message to standard error. -func_warn_and_continue () -{ - $debug_cmd - - $require_term_colors - - func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 -} - - -# func_warning CATEGORY ARG... -# ---------------------------- -# Echo program name prefixed warning message to standard error. Warning -# messages can be filtered according to CATEGORY, where this function -# elides messages where CATEGORY is not listed in the global variable -# 'opt_warning_types'. -func_warning () -{ - $debug_cmd - - # CATEGORY must be in the warning_categories list! - case " $warning_categories " in - *" $1 "*) ;; - *) func_internal_error "invalid warning category '$1'" ;; - esac - - _G_category=$1 - shift - - case " $opt_warning_types " in - *" $_G_category "*) $warning_func ${1+"$@"} ;; - esac -} - - -# func_sort_ver VER1 VER2 -# ----------------------- -# 'sort -V' is not generally available. -# Note this deviates from the version comparison in automake -# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a -# but this should suffice as we won't be specifying old -# version formats or redundant trailing .0 in bootstrap.conf. -# If we did want full compatibility then we should probably -# use m4_version_compare from autoconf. -func_sort_ver () -{ - $debug_cmd - - printf '%s\n%s\n' "$1" "$2" \ - | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n -} - -# func_lt_ver PREV CURR -# --------------------- -# Return true if PREV and CURR are in the correct order according to -# func_sort_ver, otherwise false. Use it like this: -# -# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." -func_lt_ver () -{ - $debug_cmd - - test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` -} - - -# Local variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'before-save-hook 'time-stamp) -# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" -# time-stamp-time-zone: "UTC" -# End: -#! /bin/sh - -# Set a version string for this script. -scriptversion=2014-01-07.03; # UTC - -# A portable, pluggable option parser for Bourne shell. -# Written by Gary V. Vaughan, 2010 - -# Copyright (C) 2010-2015 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. There is NO -# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# Please report bugs or propose patches to gary@gnu.org. - - -## ------ ## -## Usage. ## -## ------ ## - -# This file is a library for parsing options in your shell scripts along -# with assorted other useful supporting features that you can make use -# of too. -# -# For the simplest scripts you might need only: -# -# #!/bin/sh -# . relative/path/to/funclib.sh -# . relative/path/to/options-parser -# scriptversion=1.0 -# func_options ${1+"$@"} -# eval set dummy "$func_options_result"; shift -# ...rest of your script... -# -# In order for the '--version' option to work, you will need to have a -# suitably formatted comment like the one at the top of this file -# starting with '# Written by ' and ending with '# warranty; '. -# -# For '-h' and '--help' to work, you will also need a one line -# description of your script's purpose in a comment directly above the -# '# Written by ' line, like the one at the top of this file. -# -# The default options also support '--debug', which will turn on shell -# execution tracing (see the comment above debug_cmd below for another -# use), and '--verbose' and the func_verbose function to allow your script -# to display verbose messages only when your user has specified -# '--verbose'. -# -# After sourcing this file, you can plug processing for additional -# options by amending the variables from the 'Configuration' section -# below, and following the instructions in the 'Option parsing' -# section further down. - -## -------------- ## -## Configuration. ## -## -------------- ## - -# You should override these variables in your script after sourcing this -# file so that they reflect the customisations you have added to the -# option parser. - -# The usage line for option parsing errors and the start of '-h' and -# '--help' output messages. You can embed shell variables for delayed -# expansion at the time the message is displayed, but you will need to -# quote other shell meta-characters carefully to prevent them being -# expanded when the contents are evaled. -usage='$progpath [OPTION]...' - -# Short help message in response to '-h' and '--help'. Add to this or -# override it after sourcing this library to reflect the full set of -# options your script accepts. -usage_message="\ - --debug enable verbose shell tracing - -W, --warnings=CATEGORY - report the warnings falling in CATEGORY [all] - -v, --verbose verbosely report processing - --version print version information and exit - -h, --help print short or long help message and exit -" - -# Additional text appended to 'usage_message' in response to '--help'. -long_help_message=" -Warning categories include: - 'all' show all warnings - 'none' turn off all the warnings - 'error' warnings are treated as fatal errors" - -# Help message printed before fatal option parsing errors. -fatal_help="Try '\$progname --help' for more information." - - - -## ------------------------- ## -## Hook function management. ## -## ------------------------- ## - -# This section contains functions for adding, removing, and running hooks -# to the main code. A hook is just a named list of of function, that can -# be run in order later on. - -# func_hookable FUNC_NAME -# ----------------------- -# Declare that FUNC_NAME will run hooks added with -# 'func_add_hook FUNC_NAME ...'. -func_hookable () -{ - $debug_cmd - - func_append hookable_fns " $1" -} - - -# func_add_hook FUNC_NAME HOOK_FUNC -# --------------------------------- -# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must -# first have been declared "hookable" by a call to 'func_hookable'. -func_add_hook () -{ - $debug_cmd - - case " $hookable_fns " in - *" $1 "*) ;; - *) func_fatal_error "'$1' does not accept hook functions." ;; - esac - - eval func_append ${1}_hooks '" $2"' -} - - -# func_remove_hook FUNC_NAME HOOK_FUNC -# ------------------------------------ -# Remove HOOK_FUNC from the list of functions called by FUNC_NAME. -func_remove_hook () -{ - $debug_cmd - - eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' -} - - -# func_run_hooks FUNC_NAME [ARG]... -# --------------------------------- -# Run all hook functions registered to FUNC_NAME. -# It is assumed that the list of hook functions contains nothing more -# than a whitespace-delimited list of legal shell function names, and -# no effort is wasted trying to catch shell meta-characters or preserve -# whitespace. -func_run_hooks () -{ - $debug_cmd - - case " $hookable_fns " in - *" $1 "*) ;; - *) func_fatal_error "'$1' does not support hook funcions.n" ;; - esac - - eval _G_hook_fns=\$$1_hooks; shift - - for _G_hook in $_G_hook_fns; do - eval $_G_hook '"$@"' - - # store returned options list back into positional - # parameters for next 'cmd' execution. - eval _G_hook_result=\$${_G_hook}_result - eval set dummy "$_G_hook_result"; shift - done - - func_quote_for_eval ${1+"$@"} - func_run_hooks_result=$func_quote_for_eval_result -} - - - -## --------------- ## -## Option parsing. ## -## --------------- ## - -# In order to add your own option parsing hooks, you must accept the -# full positional parameter list in your hook function, remove any -# options that you action, and then pass back the remaining unprocessed -# options in '_result', escaped suitably for -# 'eval'. Like this: -# -# my_options_prep () -# { -# $debug_cmd -# -# # Extend the existing usage message. -# usage_message=$usage_message' -# -s, --silent don'\''t print informational messages -# ' -# -# func_quote_for_eval ${1+"$@"} -# my_options_prep_result=$func_quote_for_eval_result -# } -# func_add_hook func_options_prep my_options_prep -# -# -# my_silent_option () -# { -# $debug_cmd -# -# # Note that for efficiency, we parse as many options as we can -# # recognise in a loop before passing the remainder back to the -# # caller on the first unrecognised argument we encounter. -# while test $# -gt 0; do -# opt=$1; shift -# case $opt in -# --silent|-s) opt_silent=: ;; -# # Separate non-argument short options: -# -s*) func_split_short_opt "$_G_opt" -# set dummy "$func_split_short_opt_name" \ -# "-$func_split_short_opt_arg" ${1+"$@"} -# shift -# ;; -# *) set dummy "$_G_opt" "$*"; shift; break ;; -# esac -# done -# -# func_quote_for_eval ${1+"$@"} -# my_silent_option_result=$func_quote_for_eval_result -# } -# func_add_hook func_parse_options my_silent_option -# -# -# my_option_validation () -# { -# $debug_cmd -# -# $opt_silent && $opt_verbose && func_fatal_help "\ -# '--silent' and '--verbose' options are mutually exclusive." -# -# func_quote_for_eval ${1+"$@"} -# my_option_validation_result=$func_quote_for_eval_result -# } -# func_add_hook func_validate_options my_option_validation -# -# You'll alse need to manually amend $usage_message to reflect the extra -# options you parse. It's preferable to append if you can, so that -# multiple option parsing hooks can be added safely. - - -# func_options [ARG]... -# --------------------- -# All the functions called inside func_options are hookable. See the -# individual implementations for details. -func_hookable func_options -func_options () -{ - $debug_cmd - - func_options_prep ${1+"$@"} - eval func_parse_options \ - ${func_options_prep_result+"$func_options_prep_result"} - eval func_validate_options \ - ${func_parse_options_result+"$func_parse_options_result"} - - eval func_run_hooks func_options \ - ${func_validate_options_result+"$func_validate_options_result"} - - # save modified positional parameters for caller - func_options_result=$func_run_hooks_result -} - - -# func_options_prep [ARG]... -# -------------------------- -# All initialisations required before starting the option parse loop. -# Note that when calling hook functions, we pass through the list of -# positional parameters. If a hook function modifies that list, and -# needs to propogate that back to rest of this script, then the complete -# modified list must be put in 'func_run_hooks_result' before -# returning. -func_hookable func_options_prep -func_options_prep () -{ - $debug_cmd - - # Option defaults: - opt_verbose=false - opt_warning_types= - - func_run_hooks func_options_prep ${1+"$@"} - - # save modified positional parameters for caller - func_options_prep_result=$func_run_hooks_result -} - - -# func_parse_options [ARG]... -# --------------------------- -# The main option parsing loop. -func_hookable func_parse_options -func_parse_options () -{ - $debug_cmd - - func_parse_options_result= - - # this just eases exit handling - while test $# -gt 0; do - # Defer to hook functions for initial option parsing, so they - # get priority in the event of reusing an option name. - func_run_hooks func_parse_options ${1+"$@"} - - # Adjust func_parse_options positional parameters to match - eval set dummy "$func_run_hooks_result"; shift - - # Break out of the loop if we already parsed every option. - test $# -gt 0 || break - - _G_opt=$1 - shift - case $_G_opt in - --debug|-x) debug_cmd='set -x' - func_echo "enabling shell trace mode" - $debug_cmd - ;; - - --no-warnings|--no-warning|--no-warn) - set dummy --warnings none ${1+"$@"} - shift - ;; - - --warnings|--warning|-W) - test $# = 0 && func_missing_arg $_G_opt && break - case " $warning_categories $1" in - *" $1 "*) - # trailing space prevents matching last $1 above - func_append_uniq opt_warning_types " $1" - ;; - *all) - opt_warning_types=$warning_categories - ;; - *none) - opt_warning_types=none - warning_func=: - ;; - *error) - opt_warning_types=$warning_categories - warning_func=func_fatal_error - ;; - *) - func_fatal_error \ - "unsupported warning category: '$1'" - ;; - esac - shift - ;; - - --verbose|-v) opt_verbose=: ;; - --version) func_version ;; - -\?|-h) func_usage ;; - --help) func_help ;; - - # Separate optargs to long options (plugins may need this): - --*=*) func_split_equals "$_G_opt" - set dummy "$func_split_equals_lhs" \ - "$func_split_equals_rhs" ${1+"$@"} - shift - ;; - - # Separate optargs to short options: - -W*) - func_split_short_opt "$_G_opt" - set dummy "$func_split_short_opt_name" \ - "$func_split_short_opt_arg" ${1+"$@"} - shift - ;; - - # Separate non-argument short options: - -\?*|-h*|-v*|-x*) - func_split_short_opt "$_G_opt" - set dummy "$func_split_short_opt_name" \ - "-$func_split_short_opt_arg" ${1+"$@"} - shift - ;; - - --) break ;; - -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; - *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; - esac - done - - # save modified positional parameters for caller - func_quote_for_eval ${1+"$@"} - func_parse_options_result=$func_quote_for_eval_result -} - - -# func_validate_options [ARG]... -# ------------------------------ -# Perform any sanity checks on option settings and/or unconsumed -# arguments. -func_hookable func_validate_options -func_validate_options () -{ - $debug_cmd - - # Display all warnings if -W was not given. - test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" - - func_run_hooks func_validate_options ${1+"$@"} - - # Bail if the options were screwed! - $exit_cmd $EXIT_FAILURE - - # save modified positional parameters for caller - func_validate_options_result=$func_run_hooks_result -} - - - -## ----------------- ## -## Helper functions. ## -## ----------------- ## - -# This section contains the helper functions used by the rest of the -# hookable option parser framework in ascii-betical order. - - -# func_fatal_help ARG... -# ---------------------- -# Echo program name prefixed message to standard error, followed by -# a help hint, and exit. -func_fatal_help () -{ - $debug_cmd - - eval \$ECHO \""Usage: $usage"\" - eval \$ECHO \""$fatal_help"\" - func_error ${1+"$@"} - exit $EXIT_FAILURE -} - - -# func_help -# --------- -# Echo long help message to standard output and exit. -func_help () -{ - $debug_cmd - - func_usage_message - $ECHO "$long_help_message" - exit 0 -} - - -# func_missing_arg ARGNAME -# ------------------------ -# Echo program name prefixed message to standard error and set global -# exit_cmd. -func_missing_arg () -{ - $debug_cmd - - func_error "Missing argument for '$1'." - exit_cmd=exit -} - - -# func_split_equals STRING -# ------------------------ -# Set func_split_equals_lhs and func_split_equals_rhs shell variables after -# splitting STRING at the '=' sign. -test -z "$_G_HAVE_XSI_OPS" \ - && (eval 'x=a/b/c; - test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ - && _G_HAVE_XSI_OPS=yes - -if test yes = "$_G_HAVE_XSI_OPS" -then - # This is an XSI compatible shell, allowing a faster implementation... - eval 'func_split_equals () - { - $debug_cmd - - func_split_equals_lhs=${1%%=*} - func_split_equals_rhs=${1#*=} - test "x$func_split_equals_lhs" = "x$1" \ - && func_split_equals_rhs= - }' -else - # ...otherwise fall back to using expr, which is often a shell builtin. - func_split_equals () - { - $debug_cmd - - func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` - func_split_equals_rhs= - test "x$func_split_equals_lhs" = "x$1" \ - || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` - } -fi #func_split_equals - - -# func_split_short_opt SHORTOPT -# ----------------------------- -# Set func_split_short_opt_name and func_split_short_opt_arg shell -# variables after splitting SHORTOPT after the 2nd character. -if test yes = "$_G_HAVE_XSI_OPS" -then - # This is an XSI compatible shell, allowing a faster implementation... - eval 'func_split_short_opt () - { - $debug_cmd - - func_split_short_opt_arg=${1#??} - func_split_short_opt_name=${1%"$func_split_short_opt_arg"} - }' -else - # ...otherwise fall back to using expr, which is often a shell builtin. - func_split_short_opt () - { - $debug_cmd - - func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` - func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` - } -fi #func_split_short_opt - - -# func_usage -# ---------- -# Echo short help message to standard output and exit. -func_usage () -{ - $debug_cmd - - func_usage_message - $ECHO "Run '$progname --help |${PAGER-more}' for full usage" - exit 0 -} - - -# func_usage_message -# ------------------ -# Echo short help message to standard output. -func_usage_message () -{ - $debug_cmd - - eval \$ECHO \""Usage: $usage"\" - echo - $SED -n 's|^# || - /^Written by/{ - x;p;x - } - h - /^Written by/q' < "$progpath" - echo - eval \$ECHO \""$usage_message"\" -} - - -# func_version -# ------------ -# Echo version message to standard output and exit. -func_version () -{ - $debug_cmd - - printf '%s\n' "$progname $scriptversion" - $SED -n ' - /(C)/!b go - :more - /\./!{ - N - s|\n# | | - b more - } - :go - /^# Written by /,/# warranty; / { - s|^# || - s|^# *$|| - s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| - p - } - /^# Written by / { - s|^# || - p - } - /^warranty; /q' < "$progpath" - - exit $? -} - - -# Local variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'before-save-hook 'time-stamp) -# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" -# time-stamp-time-zone: "UTC" -# End: - -# Set a version string. -scriptversion='(GNU libtool) 2.4.6' - - -# func_echo ARG... -# ---------------- -# Libtool also displays the current mode in messages, so override -# funclib.sh func_echo with this custom definition. -func_echo () -{ - $debug_cmd - - _G_message=$* - - func_echo_IFS=$IFS - IFS=$nl - for _G_line in $_G_message; do - IFS=$func_echo_IFS - $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" - done - IFS=$func_echo_IFS -} - - -# func_warning ARG... -# ------------------- -# Libtool warnings are not categorized, so override funclib.sh -# func_warning with this simpler definition. -func_warning () -{ - $debug_cmd - - $warning_func ${1+"$@"} -} - - -## ---------------- ## -## Options parsing. ## -## ---------------- ## - -# Hook in the functions to make sure our own options are parsed during -# the option parsing loop. - -usage='$progpath [OPTION]... [MODE-ARG]...' - -# Short help message in response to '-h'. -usage_message="Options: - --config show all configuration variables - --debug enable verbose shell tracing - -n, --dry-run display commands without modifying any files - --features display basic configuration information and exit - --mode=MODE use operation mode MODE - --no-warnings equivalent to '-Wnone' - --preserve-dup-deps don't remove duplicate dependency libraries - --quiet, --silent don't print informational messages - --tag=TAG use configuration variables from tag TAG - -v, --verbose print more informational messages than default - --version print version information - -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] - -h, --help, --help-all print short, long, or detailed help message -" - -# Additional text appended to 'usage_message' in response to '--help'. -func_help () -{ - $debug_cmd - - func_usage_message - $ECHO "$long_help_message - -MODE must be one of the following: - - clean remove files from the build directory - compile compile a source file into a libtool object - execute automatically set library path, then run a program - finish complete the installation of libtool libraries - install install libraries or executables - link create a library or an executable - uninstall remove libraries from an installed directory - -MODE-ARGS vary depending on the MODE. When passed as first option, -'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. -Try '$progname --help --mode=MODE' for a more detailed description of MODE. - -When reporting a bug, please describe a test case to reproduce it and -include the following information: - - host-triplet: $host - shell: $SHELL - compiler: $LTCC - compiler flags: $LTCFLAGS - linker: $LD (gnu? $with_gnu_ld) - version: $progname (GNU libtool) 2.4.6 - automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` - autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` - -Report bugs to . -GNU libtool home page: . -General help using GNU software: ." - exit 0 -} - - -# func_lo2o OBJECT-NAME -# --------------------- -# Transform OBJECT-NAME from a '.lo' suffix to the platform specific -# object suffix. - -lo2o=s/\\.lo\$/.$objext/ -o2lo=s/\\.$objext\$/.lo/ - -if test yes = "$_G_HAVE_XSI_OPS"; then - eval 'func_lo2o () - { - case $1 in - *.lo) func_lo2o_result=${1%.lo}.$objext ;; - * ) func_lo2o_result=$1 ;; - esac - }' - - # func_xform LIBOBJ-OR-SOURCE - # --------------------------- - # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) - # suffix to a '.lo' libtool-object suffix. - eval 'func_xform () - { - func_xform_result=${1%.*}.lo - }' -else - # ...otherwise fall back to using sed. - func_lo2o () - { - func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` - } - - func_xform () - { - func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` - } -fi - - -# func_fatal_configuration ARG... -# ------------------------------- -# Echo program name prefixed message to standard error, followed by -# a configuration failure hint, and exit. -func_fatal_configuration () -{ - func__fatal_error ${1+"$@"} \ - "See the $PACKAGE documentation for more information." \ - "Fatal configuration error." -} - - -# func_config -# ----------- -# Display the configuration for all the tags in this script. -func_config () -{ - re_begincf='^# ### BEGIN LIBTOOL' - re_endcf='^# ### END LIBTOOL' - - # Default configuration. - $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" - - # Now print the configurations for the tags. - for tagname in $taglist; do - $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" - done - - exit $? -} - - -# func_features -# ------------- -# Display the features supported by this script. -func_features () -{ - echo "host: $host" - if test yes = "$build_libtool_libs"; then - echo "enable shared libraries" - else - echo "disable shared libraries" - fi - if test yes = "$build_old_libs"; then - echo "enable static libraries" - else - echo "disable static libraries" - fi - - exit $? -} - - -# func_enable_tag TAGNAME -# ----------------------- -# Verify that TAGNAME is valid, and either flag an error and exit, or -# enable the TAGNAME tag. We also add TAGNAME to the global $taglist -# variable here. -func_enable_tag () -{ - # Global variable: - tagname=$1 - - re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" - re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" - sed_extractcf=/$re_begincf/,/$re_endcf/p - - # Validate tagname. - case $tagname in - *[!-_A-Za-z0-9,/]*) - func_fatal_error "invalid tag name: $tagname" - ;; - esac - - # Don't test for the "default" C tag, as we know it's - # there but not specially marked. - case $tagname in - CC) ;; - *) - if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then - taglist="$taglist $tagname" - - # Evaluate the configuration. Be careful to quote the path - # and the sed script, to avoid splitting on whitespace, but - # also don't use non-portable quotes within backquotes within - # quotes we have to do it in 2 steps: - extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` - eval "$extractedcf" - else - func_error "ignoring unknown tag $tagname" - fi - ;; - esac -} - - -# func_check_version_match -# ------------------------ -# Ensure that we are using m4 macros, and libtool script from the same -# release of libtool. -func_check_version_match () -{ - if test "$package_revision" != "$macro_revision"; then - if test "$VERSION" != "$macro_version"; then - if test -z "$macro_version"; then - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from an older release. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - fi - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, -$progname: but the definition of this LT_INIT comes from revision $macro_revision. -$progname: You should recreate aclocal.m4 with macros from revision $package_revision -$progname: of $PACKAGE $VERSION and run autoconf again. -_LT_EOF - fi - - exit $EXIT_MISMATCH - fi -} - - -# libtool_options_prep [ARG]... -# ----------------------------- -# Preparation for options parsed by libtool. -libtool_options_prep () -{ - $debug_mode - - # Option defaults: - opt_config=false - opt_dlopen= - opt_dry_run=false - opt_help=false - opt_mode= - opt_preserve_dup_deps=false - opt_quiet=false - - nonopt= - preserve_args= - - # Shorthand for --mode=foo, only valid as the first argument - case $1 in - clean|clea|cle|cl) - shift; set dummy --mode clean ${1+"$@"}; shift - ;; - compile|compil|compi|comp|com|co|c) - shift; set dummy --mode compile ${1+"$@"}; shift - ;; - execute|execut|execu|exec|exe|ex|e) - shift; set dummy --mode execute ${1+"$@"}; shift - ;; - finish|finis|fini|fin|fi|f) - shift; set dummy --mode finish ${1+"$@"}; shift - ;; - install|instal|insta|inst|ins|in|i) - shift; set dummy --mode install ${1+"$@"}; shift - ;; - link|lin|li|l) - shift; set dummy --mode link ${1+"$@"}; shift - ;; - uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) - shift; set dummy --mode uninstall ${1+"$@"}; shift - ;; - esac - - # Pass back the list of options. - func_quote_for_eval ${1+"$@"} - libtool_options_prep_result=$func_quote_for_eval_result -} -func_add_hook func_options_prep libtool_options_prep - - -# libtool_parse_options [ARG]... -# --------------------------------- -# Provide handling for libtool specific options. -libtool_parse_options () -{ - $debug_cmd - - # Perform our own loop to consume as many options as possible in - # each iteration. - while test $# -gt 0; do - _G_opt=$1 - shift - case $_G_opt in - --dry-run|--dryrun|-n) - opt_dry_run=: - ;; - - --config) func_config ;; - - --dlopen|-dlopen) - opt_dlopen="${opt_dlopen+$opt_dlopen -}$1" - shift - ;; - - --preserve-dup-deps) - opt_preserve_dup_deps=: ;; - - --features) func_features ;; - - --finish) set dummy --mode finish ${1+"$@"}; shift ;; - - --help) opt_help=: ;; - - --help-all) opt_help=': help-all' ;; - - --mode) test $# = 0 && func_missing_arg $_G_opt && break - opt_mode=$1 - case $1 in - # Valid mode arguments: - clean|compile|execute|finish|install|link|relink|uninstall) ;; - - # Catch anything else as an error - *) func_error "invalid argument for $_G_opt" - exit_cmd=exit - break - ;; - esac - shift - ;; - - --no-silent|--no-quiet) - opt_quiet=false - func_append preserve_args " $_G_opt" - ;; - - --no-warnings|--no-warning|--no-warn) - opt_warning=false - func_append preserve_args " $_G_opt" - ;; - - --no-verbose) - opt_verbose=false - func_append preserve_args " $_G_opt" - ;; - - --silent|--quiet) - opt_quiet=: - opt_verbose=false - func_append preserve_args " $_G_opt" - ;; - - --tag) test $# = 0 && func_missing_arg $_G_opt && break - opt_tag=$1 - func_append preserve_args " $_G_opt $1" - func_enable_tag "$1" - shift - ;; - - --verbose|-v) opt_quiet=false - opt_verbose=: - func_append preserve_args " $_G_opt" - ;; - - # An option not handled by this hook function: - *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; - esac - done - - - # save modified positional parameters for caller - func_quote_for_eval ${1+"$@"} - libtool_parse_options_result=$func_quote_for_eval_result -} -func_add_hook func_parse_options libtool_parse_options - - - -# libtool_validate_options [ARG]... -# --------------------------------- -# Perform any sanity checks on option settings and/or unconsumed -# arguments. -libtool_validate_options () -{ - # save first non-option argument - if test 0 -lt $#; then - nonopt=$1 - shift - fi - - # preserve --debug - test : = "$debug_cmd" || func_append preserve_args " --debug" - - case $host in - # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 - # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 - *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) - # don't eliminate duplications in $postdeps and $predeps - opt_duplicate_compiler_generated_deps=: - ;; - *) - opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps - ;; - esac - - $opt_help || { - # Sanity checks first: - func_check_version_match - - test yes != "$build_libtool_libs" \ - && test yes != "$build_old_libs" \ - && func_fatal_configuration "not configured to build any kind of library" - - # Darwin sucks - eval std_shrext=\"$shrext_cmds\" - - # Only execute mode is allowed to have -dlopen flags. - if test -n "$opt_dlopen" && test execute != "$opt_mode"; then - func_error "unrecognized option '-dlopen'" - $ECHO "$help" 1>&2 - exit $EXIT_FAILURE - fi - - # Change the help message to a mode-specific one. - generic_help=$help - help="Try '$progname --help --mode=$opt_mode' for more information." - } - - # Pass back the unparsed argument list - func_quote_for_eval ${1+"$@"} - libtool_validate_options_result=$func_quote_for_eval_result -} -func_add_hook func_validate_options libtool_validate_options - - -# Process options as early as possible so that --help and --version -# can return quickly. -func_options ${1+"$@"} -eval set dummy "$func_options_result"; shift - - - -## ----------- ## -## Main. ## -## ----------- ## - -magic='%%%MAGIC variable%%%' -magic_exe='%%%MAGIC EXE variable%%%' - -# Global variables. -extracted_archives= -extracted_serial=0 - -# If this variable is set in any of the actions, the command in it -# will be execed at the end. This prevents here-documents from being -# left over by shells. -exec_cmd= - - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' -} - -# func_generated_by_libtool -# True iff stdin has been generated by Libtool. This function is only -# a basic sanity check; it will hardly flush out determined imposters. -func_generated_by_libtool_p () -{ - $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 -} - -# func_lalib_p file -# True iff FILE is a libtool '.la' library or '.lo' object file. -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_lalib_p () -{ - test -f "$1" && - $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p -} - -# func_lalib_unsafe_p file -# True iff FILE is a libtool '.la' library or '.lo' object file. -# This function implements the same check as func_lalib_p without -# resorting to external programs. To this end, it redirects stdin and -# closes it afterwards, without saving the original file descriptor. -# As a safety measure, use it only where a negative result would be -# fatal anyway. Works if 'file' does not exist. -func_lalib_unsafe_p () -{ - lalib_p=no - if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then - for lalib_p_l in 1 2 3 4 - do - read lalib_p_line - case $lalib_p_line in - \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; - esac - done - exec 0<&5 5<&- - fi - test yes = "$lalib_p" -} - -# func_ltwrapper_script_p file -# True iff FILE is a libtool wrapper script -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_script_p () -{ - test -f "$1" && - $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p -} - -# func_ltwrapper_executable_p file -# True iff FILE is a libtool wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_executable_p () -{ - func_ltwrapper_exec_suffix= - case $1 in - *.exe) ;; - *) func_ltwrapper_exec_suffix=.exe ;; - esac - $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 -} - -# func_ltwrapper_scriptname file -# Assumes file is an ltwrapper_executable -# uses $file to determine the appropriate filename for a -# temporary ltwrapper_script. -func_ltwrapper_scriptname () -{ - func_dirname_and_basename "$1" "" "." - func_stripname '' '.exe' "$func_basename_result" - func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper -} - -# func_ltwrapper_p file -# True iff FILE is a libtool wrapper script or wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_p () -{ - func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" -} - - -# func_execute_cmds commands fail_cmd -# Execute tilde-delimited COMMANDS. -# If FAIL_CMD is given, eval that upon failure. -# FAIL_CMD may read-access the current command in variable CMD! -func_execute_cmds () -{ - $debug_cmd - - save_ifs=$IFS; IFS='~' - for cmd in $1; do - IFS=$sp$nl - eval cmd=\"$cmd\" - IFS=$save_ifs - func_show_eval "$cmd" "${2-:}" - done - IFS=$save_ifs -} - - -# func_source file -# Source FILE, adding directory component if necessary. -# Note that it is not necessary on cygwin/mingw to append a dot to -# FILE even if both FILE and FILE.exe exist: automatic-append-.exe -# behavior happens only for exec(3), not for open(2)! Also, sourcing -# 'FILE.' does not work on cygwin managed mounts. -func_source () -{ - $debug_cmd - - case $1 in - */* | *\\*) . "$1" ;; - *) . "./$1" ;; - esac -} - - -# func_resolve_sysroot PATH -# Replace a leading = in PATH with a sysroot. Store the result into -# func_resolve_sysroot_result -func_resolve_sysroot () -{ - func_resolve_sysroot_result=$1 - case $func_resolve_sysroot_result in - =*) - func_stripname '=' '' "$func_resolve_sysroot_result" - func_resolve_sysroot_result=$lt_sysroot$func_stripname_result - ;; - esac -} - -# func_replace_sysroot PATH -# If PATH begins with the sysroot, replace it with = and -# store the result into func_replace_sysroot_result. -func_replace_sysroot () -{ - case $lt_sysroot:$1 in - ?*:"$lt_sysroot"*) - func_stripname "$lt_sysroot" '' "$1" - func_replace_sysroot_result='='$func_stripname_result - ;; - *) - # Including no sysroot. - func_replace_sysroot_result=$1 - ;; - esac -} - -# func_infer_tag arg -# Infer tagged configuration to use if any are available and -# if one wasn't chosen via the "--tag" command line option. -# Only attempt this if the compiler in the base compile -# command doesn't match the default compiler. -# arg is usually of the form 'gcc ...' -func_infer_tag () -{ - $debug_cmd - - if test -n "$available_tags" && test -z "$tagname"; then - CC_quoted= - for arg in $CC; do - func_append_quoted CC_quoted "$arg" - done - CC_expanded=`func_echo_all $CC` - CC_quoted_expanded=`func_echo_all $CC_quoted` - case $@ in - # Blanks in the command may have been stripped by the calling shell, - # but not from the CC environment variable when configure was run. - " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ - " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; - # Blanks at the start of $base_compile will cause this to fail - # if we don't check for them as well. - *) - for z in $available_tags; do - if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then - # Evaluate the configuration. - eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" - CC_quoted= - for arg in $CC; do - # Double-quote args containing other shell metacharacters. - func_append_quoted CC_quoted "$arg" - done - CC_expanded=`func_echo_all $CC` - CC_quoted_expanded=`func_echo_all $CC_quoted` - case "$@ " in - " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ - " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) - # The compiler in the base compile command matches - # the one in the tagged configuration. - # Assume this is the tagged configuration we want. - tagname=$z - break - ;; - esac - fi - done - # If $tagname still isn't set, then no tagged configuration - # was found and let the user know that the "--tag" command - # line option must be used. - if test -z "$tagname"; then - func_echo "unable to infer tagged configuration" - func_fatal_error "specify a tag with '--tag'" -# else -# func_verbose "using $tagname tagged configuration" - fi - ;; - esac - fi -} - - - -# func_write_libtool_object output_name pic_name nonpic_name -# Create a libtool object file (analogous to a ".la" file), -# but don't create it if we're doing a dry run. -func_write_libtool_object () -{ - write_libobj=$1 - if test yes = "$build_libtool_libs"; then - write_lobj=\'$2\' - else - write_lobj=none - fi - - if test yes = "$build_old_libs"; then - write_oldobj=\'$3\' - else - write_oldobj=none - fi - - $opt_dry_run || { - cat >${write_libobj}T </dev/null` - if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then - func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | - $SED -e "$sed_naive_backslashify"` - else - func_convert_core_file_wine_to_w32_result= - fi - fi -} -# end: func_convert_core_file_wine_to_w32 - - -# func_convert_core_path_wine_to_w32 ARG -# Helper function used by path conversion functions when $build is *nix, and -# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly -# configured wine environment available, with the winepath program in $build's -# $PATH. Assumes ARG has no leading or trailing path separator characters. -# -# ARG is path to be converted from $build format to win32. -# Result is available in $func_convert_core_path_wine_to_w32_result. -# Unconvertible file (directory) names in ARG are skipped; if no directory names -# are convertible, then the result may be empty. -func_convert_core_path_wine_to_w32 () -{ - $debug_cmd - - # unfortunately, winepath doesn't convert paths, only file names - func_convert_core_path_wine_to_w32_result= - if test -n "$1"; then - oldIFS=$IFS - IFS=: - for func_convert_core_path_wine_to_w32_f in $1; do - IFS=$oldIFS - func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" - if test -n "$func_convert_core_file_wine_to_w32_result"; then - if test -z "$func_convert_core_path_wine_to_w32_result"; then - func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result - else - func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" - fi - fi - done - IFS=$oldIFS - fi -} -# end: func_convert_core_path_wine_to_w32 - - -# func_cygpath ARGS... -# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when -# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) -# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or -# (2), returns the Cygwin file name or path in func_cygpath_result (input -# file name or path is assumed to be in w32 format, as previously converted -# from $build's *nix or MSYS format). In case (3), returns the w32 file name -# or path in func_cygpath_result (input file name or path is assumed to be in -# Cygwin format). Returns an empty string on error. -# -# ARGS are passed to cygpath, with the last one being the file name or path to -# be converted. -# -# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH -# environment variable; do not put it in $PATH. -func_cygpath () -{ - $debug_cmd - - if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then - func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` - if test "$?" -ne 0; then - # on failure, ensure result is empty - func_cygpath_result= - fi - else - func_cygpath_result= - func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" - fi -} -#end: func_cygpath - - -# func_convert_core_msys_to_w32 ARG -# Convert file name or path ARG from MSYS format to w32 format. Return -# result in func_convert_core_msys_to_w32_result. -func_convert_core_msys_to_w32 () -{ - $debug_cmd - - # awkward: cmd appends spaces to result - func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | - $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` -} -#end: func_convert_core_msys_to_w32 - - -# func_convert_file_check ARG1 ARG2 -# Verify that ARG1 (a file name in $build format) was converted to $host -# format in ARG2. Otherwise, emit an error message, but continue (resetting -# func_to_host_file_result to ARG1). -func_convert_file_check () -{ - $debug_cmd - - if test -z "$2" && test -n "$1"; then - func_error "Could not determine host file name corresponding to" - func_error " '$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback: - func_to_host_file_result=$1 - fi -} -# end func_convert_file_check - - -# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH -# Verify that FROM_PATH (a path in $build format) was converted to $host -# format in TO_PATH. Otherwise, emit an error message, but continue, resetting -# func_to_host_file_result to a simplistic fallback value (see below). -func_convert_path_check () -{ - $debug_cmd - - if test -z "$4" && test -n "$3"; then - func_error "Could not determine the host path corresponding to" - func_error " '$3'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback. This is a deliberately simplistic "conversion" and - # should not be "improved". See libtool.info. - if test "x$1" != "x$2"; then - lt_replace_pathsep_chars="s|$1|$2|g" - func_to_host_path_result=`echo "$3" | - $SED -e "$lt_replace_pathsep_chars"` - else - func_to_host_path_result=$3 - fi - fi -} -# end func_convert_path_check - - -# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG -# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT -# and appending REPL if ORIG matches BACKPAT. -func_convert_path_front_back_pathsep () -{ - $debug_cmd - - case $4 in - $1 ) func_to_host_path_result=$3$func_to_host_path_result - ;; - esac - case $4 in - $2 ) func_append func_to_host_path_result "$3" - ;; - esac -} -# end func_convert_path_front_back_pathsep - - -################################################## -# $build to $host FILE NAME CONVERSION FUNCTIONS # -################################################## -# invoked via '$to_host_file_cmd ARG' -# -# In each case, ARG is the path to be converted from $build to $host format. -# Result will be available in $func_to_host_file_result. - - -# func_to_host_file ARG -# Converts the file name ARG from $build format to $host format. Return result -# in func_to_host_file_result. -func_to_host_file () -{ - $debug_cmd - - $to_host_file_cmd "$1" -} -# end func_to_host_file - - -# func_to_tool_file ARG LAZY -# converts the file name ARG from $build format to toolchain format. Return -# result in func_to_tool_file_result. If the conversion in use is listed -# in (the comma separated) LAZY, no conversion takes place. -func_to_tool_file () -{ - $debug_cmd - - case ,$2, in - *,"$to_tool_file_cmd",*) - func_to_tool_file_result=$1 - ;; - *) - $to_tool_file_cmd "$1" - func_to_tool_file_result=$func_to_host_file_result - ;; - esac -} -# end func_to_tool_file - - -# func_convert_file_noop ARG -# Copy ARG to func_to_host_file_result. -func_convert_file_noop () -{ - func_to_host_file_result=$1 -} -# end func_convert_file_noop - - -# func_convert_file_msys_to_w32 ARG -# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic -# conversion to w32 is not available inside the cwrapper. Returns result in -# func_to_host_file_result. -func_convert_file_msys_to_w32 () -{ - $debug_cmd - - func_to_host_file_result=$1 - if test -n "$1"; then - func_convert_core_msys_to_w32 "$1" - func_to_host_file_result=$func_convert_core_msys_to_w32_result - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_msys_to_w32 - - -# func_convert_file_cygwin_to_w32 ARG -# Convert file name ARG from Cygwin to w32 format. Returns result in -# func_to_host_file_result. -func_convert_file_cygwin_to_w32 () -{ - $debug_cmd - - func_to_host_file_result=$1 - if test -n "$1"; then - # because $build is cygwin, we call "the" cygpath in $PATH; no need to use - # LT_CYGPATH in this case. - func_to_host_file_result=`cygpath -m "$1"` - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_cygwin_to_w32 - - -# func_convert_file_nix_to_w32 ARG -# Convert file name ARG from *nix to w32 format. Requires a wine environment -# and a working winepath. Returns result in func_to_host_file_result. -func_convert_file_nix_to_w32 () -{ - $debug_cmd - - func_to_host_file_result=$1 - if test -n "$1"; then - func_convert_core_file_wine_to_w32 "$1" - func_to_host_file_result=$func_convert_core_file_wine_to_w32_result - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_nix_to_w32 - - -# func_convert_file_msys_to_cygwin ARG -# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. -# Returns result in func_to_host_file_result. -func_convert_file_msys_to_cygwin () -{ - $debug_cmd - - func_to_host_file_result=$1 - if test -n "$1"; then - func_convert_core_msys_to_w32 "$1" - func_cygpath -u "$func_convert_core_msys_to_w32_result" - func_to_host_file_result=$func_cygpath_result - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_msys_to_cygwin - - -# func_convert_file_nix_to_cygwin ARG -# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed -# in a wine environment, working winepath, and LT_CYGPATH set. Returns result -# in func_to_host_file_result. -func_convert_file_nix_to_cygwin () -{ - $debug_cmd - - func_to_host_file_result=$1 - if test -n "$1"; then - # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. - func_convert_core_file_wine_to_w32 "$1" - func_cygpath -u "$func_convert_core_file_wine_to_w32_result" - func_to_host_file_result=$func_cygpath_result - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_nix_to_cygwin - - -############################################# -# $build to $host PATH CONVERSION FUNCTIONS # -############################################# -# invoked via '$to_host_path_cmd ARG' -# -# In each case, ARG is the path to be converted from $build to $host format. -# The result will be available in $func_to_host_path_result. -# -# Path separators are also converted from $build format to $host format. If -# ARG begins or ends with a path separator character, it is preserved (but -# converted to $host format) on output. -# -# All path conversion functions are named using the following convention: -# file name conversion function : func_convert_file_X_to_Y () -# path conversion function : func_convert_path_X_to_Y () -# where, for any given $build/$host combination the 'X_to_Y' value is the -# same. If conversion functions are added for new $build/$host combinations, -# the two new functions must follow this pattern, or func_init_to_host_path_cmd -# will break. - - -# func_init_to_host_path_cmd -# Ensures that function "pointer" variable $to_host_path_cmd is set to the -# appropriate value, based on the value of $to_host_file_cmd. -to_host_path_cmd= -func_init_to_host_path_cmd () -{ - $debug_cmd - - if test -z "$to_host_path_cmd"; then - func_stripname 'func_convert_file_' '' "$to_host_file_cmd" - to_host_path_cmd=func_convert_path_$func_stripname_result - fi -} - - -# func_to_host_path ARG -# Converts the path ARG from $build format to $host format. Return result -# in func_to_host_path_result. -func_to_host_path () -{ - $debug_cmd - - func_init_to_host_path_cmd - $to_host_path_cmd "$1" -} -# end func_to_host_path - - -# func_convert_path_noop ARG -# Copy ARG to func_to_host_path_result. -func_convert_path_noop () -{ - func_to_host_path_result=$1 -} -# end func_convert_path_noop - - -# func_convert_path_msys_to_w32 ARG -# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic -# conversion to w32 is not available inside the cwrapper. Returns result in -# func_to_host_path_result. -func_convert_path_msys_to_w32 () -{ - $debug_cmd - - func_to_host_path_result=$1 - if test -n "$1"; then - # Remove leading and trailing path separator characters from ARG. MSYS - # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; - # and winepath ignores them completely. - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" - func_to_host_path_result=$func_convert_core_msys_to_w32_result - func_convert_path_check : ";" \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" - fi -} -# end func_convert_path_msys_to_w32 - - -# func_convert_path_cygwin_to_w32 ARG -# Convert path ARG from Cygwin to w32 format. Returns result in -# func_to_host_file_result. -func_convert_path_cygwin_to_w32 () -{ - $debug_cmd - - func_to_host_path_result=$1 - if test -n "$1"; then - # See func_convert_path_msys_to_w32: - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` - func_convert_path_check : ";" \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" - fi -} -# end func_convert_path_cygwin_to_w32 - - -# func_convert_path_nix_to_w32 ARG -# Convert path ARG from *nix to w32 format. Requires a wine environment and -# a working winepath. Returns result in func_to_host_file_result. -func_convert_path_nix_to_w32 () -{ - $debug_cmd - - func_to_host_path_result=$1 - if test -n "$1"; then - # See func_convert_path_msys_to_w32: - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" - func_to_host_path_result=$func_convert_core_path_wine_to_w32_result - func_convert_path_check : ";" \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" - fi -} -# end func_convert_path_nix_to_w32 - - -# func_convert_path_msys_to_cygwin ARG -# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. -# Returns result in func_to_host_file_result. -func_convert_path_msys_to_cygwin () -{ - $debug_cmd - - func_to_host_path_result=$1 - if test -n "$1"; then - # See func_convert_path_msys_to_w32: - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" - func_cygpath -u -p "$func_convert_core_msys_to_w32_result" - func_to_host_path_result=$func_cygpath_result - func_convert_path_check : : \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" : "$1" - fi -} -# end func_convert_path_msys_to_cygwin - - -# func_convert_path_nix_to_cygwin ARG -# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a -# a wine environment, working winepath, and LT_CYGPATH set. Returns result in -# func_to_host_file_result. -func_convert_path_nix_to_cygwin () -{ - $debug_cmd - - func_to_host_path_result=$1 - if test -n "$1"; then - # Remove leading and trailing path separator characters from - # ARG. msys behavior is inconsistent here, cygpath turns them - # into '.;' and ';.', and winepath ignores them completely. - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" - func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" - func_to_host_path_result=$func_cygpath_result - func_convert_path_check : : \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" : "$1" - fi -} -# end func_convert_path_nix_to_cygwin - - -# func_dll_def_p FILE -# True iff FILE is a Windows DLL '.def' file. -# Keep in sync with _LT_DLL_DEF_P in libtool.m4 -func_dll_def_p () -{ - $debug_cmd - - func_dll_def_p_tmp=`$SED -n \ - -e 's/^[ ]*//' \ - -e '/^\(;.*\)*$/d' \ - -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ - -e q \ - "$1"` - test DEF = "$func_dll_def_p_tmp" -} - - -# func_mode_compile arg... -func_mode_compile () -{ - $debug_cmd - - # Get the compilation command and the source file. - base_compile= - srcfile=$nonopt # always keep a non-empty value in "srcfile" - suppress_opt=yes - suppress_output= - arg_mode=normal - libobj= - later= - pie_flag= - - for arg - do - case $arg_mode in - arg ) - # do not "continue". Instead, add this to base_compile - lastarg=$arg - arg_mode=normal - ;; - - target ) - libobj=$arg - arg_mode=normal - continue - ;; - - normal ) - # Accept any command-line options. - case $arg in - -o) - test -n "$libobj" && \ - func_fatal_error "you cannot specify '-o' more than once" - arg_mode=target - continue - ;; - - -pie | -fpie | -fPIE) - func_append pie_flag " $arg" - continue - ;; - - -shared | -static | -prefer-pic | -prefer-non-pic) - func_append later " $arg" - continue - ;; - - -no-suppress) - suppress_opt=no - continue - ;; - - -Xcompiler) - arg_mode=arg # the next one goes into the "base_compile" arg list - continue # The current "srcfile" will either be retained or - ;; # replaced later. I would guess that would be a bug. - - -Wc,*) - func_stripname '-Wc,' '' "$arg" - args=$func_stripname_result - lastarg= - save_ifs=$IFS; IFS=, - for arg in $args; do - IFS=$save_ifs - func_append_quoted lastarg "$arg" - done - IFS=$save_ifs - func_stripname ' ' '' "$lastarg" - lastarg=$func_stripname_result - - # Add the arguments to base_compile. - func_append base_compile " $lastarg" - continue - ;; - - *) - # Accept the current argument as the source file. - # The previous "srcfile" becomes the current argument. - # - lastarg=$srcfile - srcfile=$arg - ;; - esac # case $arg - ;; - esac # case $arg_mode - - # Aesthetically quote the previous argument. - func_append_quoted base_compile "$lastarg" - done # for arg - - case $arg_mode in - arg) - func_fatal_error "you must specify an argument for -Xcompile" - ;; - target) - func_fatal_error "you must specify a target with '-o'" - ;; - *) - # Get the name of the library object. - test -z "$libobj" && { - func_basename "$srcfile" - libobj=$func_basename_result - } - ;; - esac - - # Recognize several different file suffixes. - # If the user specifies -o file.o, it is replaced with file.lo - case $libobj in - *.[cCFSifmso] | \ - *.ada | *.adb | *.ads | *.asm | \ - *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ - *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) - func_xform "$libobj" - libobj=$func_xform_result - ;; - esac - - case $libobj in - *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; - *) - func_fatal_error "cannot determine name of library object from '$libobj'" - ;; - esac - - func_infer_tag $base_compile - - for arg in $later; do - case $arg in - -shared) - test yes = "$build_libtool_libs" \ - || func_fatal_configuration "cannot build a shared library" - build_old_libs=no - continue - ;; - - -static) - build_libtool_libs=no - build_old_libs=yes - continue - ;; - - -prefer-pic) - pic_mode=yes - continue - ;; - - -prefer-non-pic) - pic_mode=no - continue - ;; - esac - done - - func_quote_for_eval "$libobj" - test "X$libobj" != "X$func_quote_for_eval_result" \ - && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ - && func_warning "libobj name '$libobj' may not contain shell special characters." - func_dirname_and_basename "$obj" "/" "" - objname=$func_basename_result - xdir=$func_dirname_result - lobj=$xdir$objdir/$objname - - test -z "$base_compile" && \ - func_fatal_help "you must specify a compilation command" - - # Delete any leftover library objects. - if test yes = "$build_old_libs"; then - removelist="$obj $lobj $libobj ${libobj}T" - else - removelist="$lobj $libobj ${libobj}T" - fi - - # On Cygwin there's no "real" PIC flag so we must build both object types - case $host_os in - cygwin* | mingw* | pw32* | os2* | cegcc*) - pic_mode=default - ;; - esac - if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then - # non-PIC code in shared libraries is not supported - pic_mode=default - fi - - # Calculate the filename of the output object if compiler does - # not support -o with -c - if test no = "$compiler_c_o"; then - output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext - lockfile=$output_obj.lock - else - output_obj= - need_locks=no - lockfile= - fi - - # Lock this critical section if it is needed - # We use this script file to make the link, it avoids creating a new file - if test yes = "$need_locks"; then - until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do - func_echo "Waiting for $lockfile to be removed" - sleep 2 - done - elif test warn = "$need_locks"; then - if test -f "$lockfile"; then - $ECHO "\ -*** ERROR, $lockfile exists and contains: -`cat $lockfile 2>/dev/null` - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support '-c' and '-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - func_append removelist " $output_obj" - $ECHO "$srcfile" > "$lockfile" - fi - - $opt_dry_run || $RM $removelist - func_append removelist " $lockfile" - trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 - - func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 - srcfile=$func_to_tool_file_result - func_quote_for_eval "$srcfile" - qsrcfile=$func_quote_for_eval_result - - # Only build a PIC object if we are building libtool libraries. - if test yes = "$build_libtool_libs"; then - # Without this assignment, base_compile gets emptied. - fbsd_hideous_sh_bug=$base_compile - - if test no != "$pic_mode"; then - command="$base_compile $qsrcfile $pic_flag" - else - # Don't build PIC code - command="$base_compile $qsrcfile" - fi - - func_mkdir_p "$xdir$objdir" - - if test -z "$output_obj"; then - # Place PIC objects in $objdir - func_append command " -o $lobj" - fi - - func_show_eval_locale "$command" \ - 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' - - if test warn = "$need_locks" && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support '-c' and '-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed, then go on to compile the next one - if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then - func_show_eval '$MV "$output_obj" "$lobj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - - # Allow error messages only from the first compilation. - if test yes = "$suppress_opt"; then - suppress_output=' >/dev/null 2>&1' - fi - fi - - # Only build a position-dependent object if we build old libraries. - if test yes = "$build_old_libs"; then - if test yes != "$pic_mode"; then - # Don't build PIC code - command="$base_compile $qsrcfile$pie_flag" - else - command="$base_compile $qsrcfile $pic_flag" - fi - if test yes = "$compiler_c_o"; then - func_append command " -o $obj" - fi - - # Suppress compiler output if we already did a PIC compilation. - func_append command "$suppress_output" - func_show_eval_locale "$command" \ - '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' - - if test warn = "$need_locks" && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support '-c' and '-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed - if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then - func_show_eval '$MV "$output_obj" "$obj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - fi - - $opt_dry_run || { - func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" - - # Unlock the critical section if it was locked - if test no != "$need_locks"; then - removelist=$lockfile - $RM "$lockfile" - fi - } - - exit $EXIT_SUCCESS -} - -$opt_help || { - test compile = "$opt_mode" && func_mode_compile ${1+"$@"} -} - -func_mode_help () -{ - # We need to display help for each of the modes. - case $opt_mode in - "") - # Generic help is extracted from the usage comments - # at the start of this file. - func_help - ;; - - clean) - $ECHO \ -"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... - -Remove files from the build directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed -to RM. - -If FILE is a libtool library, object or program, all the files associated -with it are deleted. Otherwise, only FILE itself is deleted using RM." - ;; - - compile) - $ECHO \ -"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE - -Compile a source file into a libtool library object. - -This mode accepts the following additional options: - - -o OUTPUT-FILE set the output file name to OUTPUT-FILE - -no-suppress do not suppress compiler output for multiple passes - -prefer-pic try to build PIC objects only - -prefer-non-pic try to build non-PIC objects only - -shared do not build a '.o' file suitable for static linking - -static only build a '.o' file suitable for static linking - -Wc,FLAG pass FLAG directly to the compiler - -COMPILE-COMMAND is a command to be used in creating a 'standard' object file -from the given SOURCEFILE. - -The output file name is determined by removing the directory component from -SOURCEFILE, then substituting the C source code suffix '.c' with the -library object suffix, '.lo'." - ;; - - execute) - $ECHO \ -"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... - -Automatically set library path, then run a program. - -This mode accepts the following additional options: - - -dlopen FILE add the directory containing FILE to the library path - -This mode sets the library path environment variable according to '-dlopen' -flags. - -If any of the ARGS are libtool executable wrappers, then they are translated -into their corresponding uninstalled binary, and any of their required library -directories are added to the library path. - -Then, COMMAND is executed, with ARGS as arguments." - ;; - - finish) - $ECHO \ -"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... - -Complete the installation of libtool libraries. - -Each LIBDIR is a directory that contains libtool libraries. - -The commands that this mode executes may require superuser privileges. Use -the '--dry-run' option if you just want to see what would be executed." - ;; - - install) - $ECHO \ -"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... - -Install executables or libraries. - -INSTALL-COMMAND is the installation command. The first component should be -either the 'install' or 'cp' program. - -The following components of INSTALL-COMMAND are treated specially: - - -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation - -The rest of the components are interpreted as arguments to that command (only -BSD-compatible install options are recognized)." - ;; - - link) - $ECHO \ -"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... - -Link object files or libraries together to form another library, or to -create an executable program. - -LINK-COMMAND is a command using the C compiler that you would use to create -a program from several object files. - -The following components of LINK-COMMAND are treated specially: - - -all-static do not do any dynamic linking at all - -avoid-version do not add a version suffix if possible - -bindir BINDIR specify path to binaries directory (for systems where - libraries must be found in the PATH setting at runtime) - -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime - -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols - -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) - -export-symbols SYMFILE - try to export only the symbols listed in SYMFILE - -export-symbols-regex REGEX - try to export only the symbols matching REGEX - -LLIBDIR search LIBDIR for required installed libraries - -lNAME OUTPUT-FILE requires the installed library libNAME - -module build a library that can dlopened - -no-fast-install disable the fast-install mode - -no-install link a not-installable executable - -no-undefined declare that a library does not refer to external symbols - -o OUTPUT-FILE create OUTPUT-FILE from the specified objects - -objectlist FILE use a list of object files found in FILE to specify objects - -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) - -precious-files-regex REGEX - don't remove output files matching REGEX - -release RELEASE specify package release information - -rpath LIBDIR the created library will eventually be installed in LIBDIR - -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries - -shared only do dynamic linking of libtool libraries - -shrext SUFFIX override the standard shared library file extension - -static do not do any dynamic linking of uninstalled libtool libraries - -static-libtool-libs - do not do any dynamic linking of libtool libraries - -version-info CURRENT[:REVISION[:AGE]] - specify library version info [each variable defaults to 0] - -weak LIBNAME declare that the target provides the LIBNAME interface - -Wc,FLAG - -Xcompiler FLAG pass linker-specific FLAG directly to the compiler - -Wl,FLAG - -Xlinker FLAG pass linker-specific FLAG directly to the linker - -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) - -All other options (arguments beginning with '-') are ignored. - -Every other argument is treated as a filename. Files ending in '.la' are -treated as uninstalled libtool libraries, other files are standard or library -object files. - -If the OUTPUT-FILE ends in '.la', then a libtool library is created, -only library objects ('.lo' files) may be specified, and '-rpath' is -required, except when creating a convenience library. - -If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created -using 'ar' and 'ranlib', or on Windows using 'lib'. - -If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file -is created, otherwise an executable program is created." - ;; - - uninstall) - $ECHO \ -"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... - -Remove libraries from an installation directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed -to RM. - -If FILE is a libtool library, all the files associated with it are deleted. -Otherwise, only FILE itself is deleted using RM." - ;; - - *) - func_fatal_help "invalid operation mode '$opt_mode'" - ;; - esac - - echo - $ECHO "Try '$progname --help' for more information about other modes." -} - -# Now that we've collected a possible --mode arg, show help if necessary -if $opt_help; then - if test : = "$opt_help"; then - func_mode_help - else - { - func_help noexit - for opt_mode in compile link execute install finish uninstall clean; do - func_mode_help - done - } | $SED -n '1p; 2,$s/^Usage:/ or: /p' - { - func_help noexit - for opt_mode in compile link execute install finish uninstall clean; do - echo - func_mode_help - done - } | - $SED '1d - /^When reporting/,/^Report/{ - H - d - } - $x - /information about other modes/d - /more detailed .*MODE/d - s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' - fi - exit $? -fi - - -# func_mode_execute arg... -func_mode_execute () -{ - $debug_cmd - - # The first argument is the command name. - cmd=$nonopt - test -z "$cmd" && \ - func_fatal_help "you must specify a COMMAND" - - # Handle -dlopen flags immediately. - for file in $opt_dlopen; do - test -f "$file" \ - || func_fatal_help "'$file' is not a file" - - dir= - case $file in - *.la) - func_resolve_sysroot "$file" - file=$func_resolve_sysroot_result - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "'$lib' is not a valid libtool archive" - - # Read the libtool library. - dlname= - library_names= - func_source "$file" - - # Skip this library if it cannot be dlopened. - if test -z "$dlname"; then - # Warn if it was a shared library. - test -n "$library_names" && \ - func_warning "'$file' was not linked with '-export-dynamic'" - continue - fi - - func_dirname "$file" "" "." - dir=$func_dirname_result - - if test -f "$dir/$objdir/$dlname"; then - func_append dir "/$objdir" - else - if test ! -f "$dir/$dlname"; then - func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" - fi - fi - ;; - - *.lo) - # Just add the directory containing the .lo file. - func_dirname "$file" "" "." - dir=$func_dirname_result - ;; - - *) - func_warning "'-dlopen' is ignored for non-libtool libraries and objects" - continue - ;; - esac - - # Get the absolute pathname. - absdir=`cd "$dir" && pwd` - test -n "$absdir" && dir=$absdir - - # Now add the directory to shlibpath_var. - if eval "test -z \"\$$shlibpath_var\""; then - eval "$shlibpath_var=\"\$dir\"" - else - eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" - fi - done - - # This variable tells wrapper scripts just to set shlibpath_var - # rather than running their programs. - libtool_execute_magic=$magic - - # Check if any of the arguments is a wrapper script. - args= - for file - do - case $file in - -* | *.la | *.lo ) ;; - *) - # Do a test to see if this is really a libtool program. - if func_ltwrapper_script_p "$file"; then - func_source "$file" - # Transform arg to wrapped name. - file=$progdir/$program - elif func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - func_source "$func_ltwrapper_scriptname_result" - # Transform arg to wrapped name. - file=$progdir/$program - fi - ;; - esac - # Quote arguments (to preserve shell metacharacters). - func_append_quoted args "$file" - done - - if $opt_dry_run; then - # Display what would be done. - if test -n "$shlibpath_var"; then - eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" - echo "export $shlibpath_var" - fi - $ECHO "$cmd$args" - exit $EXIT_SUCCESS - else - if test -n "$shlibpath_var"; then - # Export the shlibpath_var. - eval "export $shlibpath_var" - fi - - # Restore saved environment variables - for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES - do - eval "if test \"\${save_$lt_var+set}\" = set; then - $lt_var=\$save_$lt_var; export $lt_var - else - $lt_unset $lt_var - fi" - done - - # Now prepare to actually exec the command. - exec_cmd=\$cmd$args - fi -} - -test execute = "$opt_mode" && func_mode_execute ${1+"$@"} - - -# func_mode_finish arg... -func_mode_finish () -{ - $debug_cmd - - libs= - libdirs= - admincmds= - - for opt in "$nonopt" ${1+"$@"} - do - if test -d "$opt"; then - func_append libdirs " $opt" - - elif test -f "$opt"; then - if func_lalib_unsafe_p "$opt"; then - func_append libs " $opt" - else - func_warning "'$opt' is not a valid libtool archive" - fi - - else - func_fatal_error "invalid argument '$opt'" - fi - done - - if test -n "$libs"; then - if test -n "$lt_sysroot"; then - sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` - sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" - else - sysroot_cmd= - fi - - # Remove sysroot references - if $opt_dry_run; then - for lib in $libs; do - echo "removing references to $lt_sysroot and '=' prefixes from $lib" - done - else - tmpdir=`func_mktempdir` - for lib in $libs; do - $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ - > $tmpdir/tmp-la - mv -f $tmpdir/tmp-la $lib - done - ${RM}r "$tmpdir" - fi - fi - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - for libdir in $libdirs; do - if test -n "$finish_cmds"; then - # Do each command in the finish commands. - func_execute_cmds "$finish_cmds" 'admincmds="$admincmds -'"$cmd"'"' - fi - if test -n "$finish_eval"; then - # Do the single finish_eval. - eval cmds=\"$finish_eval\" - $opt_dry_run || eval "$cmds" || func_append admincmds " - $cmds" - fi - done - fi - - # Exit here if they wanted silent mode. - $opt_quiet && exit $EXIT_SUCCESS - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - echo "----------------------------------------------------------------------" - echo "Libraries have been installed in:" - for libdir in $libdirs; do - $ECHO " $libdir" - done - echo - echo "If you ever happen to want to link against installed libraries" - echo "in a given directory, LIBDIR, you must either use libtool, and" - echo "specify the full pathname of the library, or use the '-LLIBDIR'" - echo "flag during linking and do at least one of the following:" - if test -n "$shlibpath_var"; then - echo " - add LIBDIR to the '$shlibpath_var' environment variable" - echo " during execution" - fi - if test -n "$runpath_var"; then - echo " - add LIBDIR to the '$runpath_var' environment variable" - echo " during linking" - fi - if test -n "$hardcode_libdir_flag_spec"; then - libdir=LIBDIR - eval flag=\"$hardcode_libdir_flag_spec\" - - $ECHO " - use the '$flag' linker flag" - fi - if test -n "$admincmds"; then - $ECHO " - have your system administrator run these commands:$admincmds" - fi - if test -f /etc/ld.so.conf; then - echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" - fi - echo - - echo "See any operating system documentation about shared libraries for" - case $host in - solaris2.[6789]|solaris2.1[0-9]) - echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" - echo "pages." - ;; - *) - echo "more information, such as the ld(1) and ld.so(8) manual pages." - ;; - esac - echo "----------------------------------------------------------------------" - fi - exit $EXIT_SUCCESS -} - -test finish = "$opt_mode" && func_mode_finish ${1+"$@"} - - -# func_mode_install arg... -func_mode_install () -{ - $debug_cmd - - # There may be an optional sh(1) argument at the beginning of - # install_prog (especially on Windows NT). - if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || - # Allow the use of GNU shtool's install command. - case $nonopt in *shtool*) :;; *) false;; esac - then - # Aesthetically quote it. - func_quote_for_eval "$nonopt" - install_prog="$func_quote_for_eval_result " - arg=$1 - shift - else - install_prog= - arg=$nonopt - fi - - # The real first argument should be the name of the installation program. - # Aesthetically quote it. - func_quote_for_eval "$arg" - func_append install_prog "$func_quote_for_eval_result" - install_shared_prog=$install_prog - case " $install_prog " in - *[\\\ /]cp\ *) install_cp=: ;; - *) install_cp=false ;; - esac - - # We need to accept at least all the BSD install flags. - dest= - files= - opts= - prev= - install_type= - isdir=false - stripme= - no_mode=: - for arg - do - arg2= - if test -n "$dest"; then - func_append files " $dest" - dest=$arg - continue - fi - - case $arg in - -d) isdir=: ;; - -f) - if $install_cp; then :; else - prev=$arg - fi - ;; - -g | -m | -o) - prev=$arg - ;; - -s) - stripme=" -s" - continue - ;; - -*) - ;; - *) - # If the previous option needed an argument, then skip it. - if test -n "$prev"; then - if test X-m = "X$prev" && test -n "$install_override_mode"; then - arg2=$install_override_mode - no_mode=false - fi - prev= - else - dest=$arg - continue - fi - ;; - esac - - # Aesthetically quote the argument. - func_quote_for_eval "$arg" - func_append install_prog " $func_quote_for_eval_result" - if test -n "$arg2"; then - func_quote_for_eval "$arg2" - fi - func_append install_shared_prog " $func_quote_for_eval_result" - done - - test -z "$install_prog" && \ - func_fatal_help "you must specify an install program" - - test -n "$prev" && \ - func_fatal_help "the '$prev' option requires an argument" - - if test -n "$install_override_mode" && $no_mode; then - if $install_cp; then :; else - func_quote_for_eval "$install_override_mode" - func_append install_shared_prog " -m $func_quote_for_eval_result" - fi - fi - - if test -z "$files"; then - if test -z "$dest"; then - func_fatal_help "no file or destination specified" - else - func_fatal_help "you must specify a destination" - fi - fi - - # Strip any trailing slash from the destination. - func_stripname '' '/' "$dest" - dest=$func_stripname_result - - # Check to see that the destination is a directory. - test -d "$dest" && isdir=: - if $isdir; then - destdir=$dest - destname= - else - func_dirname_and_basename "$dest" "" "." - destdir=$func_dirname_result - destname=$func_basename_result - - # Not a directory, so check to see that there is only one file specified. - set dummy $files; shift - test "$#" -gt 1 && \ - func_fatal_help "'$dest' is not a directory" - fi - case $destdir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - for file in $files; do - case $file in - *.lo) ;; - *) - func_fatal_help "'$destdir' must be an absolute directory name" - ;; - esac - done - ;; - esac - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic=$magic - - staticlibs= - future_libdirs= - current_libdirs= - for file in $files; do - - # Do each installation. - case $file in - *.$libext) - # Do the static libraries later. - func_append staticlibs " $file" - ;; - - *.la) - func_resolve_sysroot "$file" - file=$func_resolve_sysroot_result - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "'$file' is not a valid libtool archive" - - library_names= - old_library= - relink_command= - func_source "$file" - - # Add the libdir to current_libdirs if it is the destination. - if test "X$destdir" = "X$libdir"; then - case "$current_libdirs " in - *" $libdir "*) ;; - *) func_append current_libdirs " $libdir" ;; - esac - else - # Note the libdir as a future libdir. - case "$future_libdirs " in - *" $libdir "*) ;; - *) func_append future_libdirs " $libdir" ;; - esac - fi - - func_dirname "$file" "/" "" - dir=$func_dirname_result - func_append dir "$objdir" - - if test -n "$relink_command"; then - # Determine the prefix the user has applied to our future dir. - inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` - - # Don't allow the user to place us outside of our expected - # location b/c this prevents finding dependent libraries that - # are installed to the same prefix. - # At present, this check doesn't affect windows .dll's that - # are installed into $libdir/../bin (currently, that works fine) - # but it's something to keep an eye on. - test "$inst_prefix_dir" = "$destdir" && \ - func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" - - if test -n "$inst_prefix_dir"; then - # Stick the inst_prefix_dir data into the link command. - relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` - else - relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` - fi - - func_warning "relinking '$file'" - func_show_eval "$relink_command" \ - 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' - fi - - # See the names of the shared library. - set dummy $library_names; shift - if test -n "$1"; then - realname=$1 - shift - - srcname=$realname - test -n "$relink_command" && srcname=${realname}T - - # Install the shared library and build the symlinks. - func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ - 'exit $?' - tstripme=$stripme - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - case $realname in - *.dll.a) - tstripme= - ;; - esac - ;; - os2*) - case $realname in - *_dll.a) - tstripme= - ;; - esac - ;; - esac - if test -n "$tstripme" && test -n "$striplib"; then - func_show_eval "$striplib $destdir/$realname" 'exit $?' - fi - - if test "$#" -gt 0; then - # Delete the old symlinks, and create new ones. - # Try 'ln -sf' first, because the 'ln' binary might depend on - # the symlink we replace! Solaris /bin/ln does not understand -f, - # so we also need to try rm && ln -s. - for linkname - do - test "$linkname" != "$realname" \ - && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" - done - fi - - # Do each command in the postinstall commands. - lib=$destdir/$realname - func_execute_cmds "$postinstall_cmds" 'exit $?' - fi - - # Install the pseudo-library for information purposes. - func_basename "$file" - name=$func_basename_result - instname=$dir/${name}i - func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' - - # Maybe install the static library, too. - test -n "$old_library" && func_append staticlibs " $dir/$old_library" - ;; - - *.lo) - # Install (i.e. copy) a libtool object. - - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile=$destdir/$destname - else - func_basename "$file" - destfile=$func_basename_result - destfile=$destdir/$destfile - fi - - # Deduce the name of the destination old-style object file. - case $destfile in - *.lo) - func_lo2o "$destfile" - staticdest=$func_lo2o_result - ;; - *.$objext) - staticdest=$destfile - destfile= - ;; - *) - func_fatal_help "cannot copy a libtool object to '$destfile'" - ;; - esac - - # Install the libtool object if requested. - test -n "$destfile" && \ - func_show_eval "$install_prog $file $destfile" 'exit $?' - - # Install the old object if enabled. - if test yes = "$build_old_libs"; then - # Deduce the name of the old-style object file. - func_lo2o "$file" - staticobj=$func_lo2o_result - func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' - fi - exit $EXIT_SUCCESS - ;; - - *) - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile=$destdir/$destname - else - func_basename "$file" - destfile=$func_basename_result - destfile=$destdir/$destfile - fi - - # If the file is missing, and there is a .exe on the end, strip it - # because it is most likely a libtool script we actually want to - # install - stripped_ext= - case $file in - *.exe) - if test ! -f "$file"; then - func_stripname '' '.exe' "$file" - file=$func_stripname_result - stripped_ext=.exe - fi - ;; - esac - - # Do a test to see if this is really a libtool program. - case $host in - *cygwin* | *mingw*) - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - wrapper=$func_ltwrapper_scriptname_result - else - func_stripname '' '.exe' "$file" - wrapper=$func_stripname_result - fi - ;; - *) - wrapper=$file - ;; - esac - if func_ltwrapper_script_p "$wrapper"; then - notinst_deplibs= - relink_command= - - func_source "$wrapper" - - # Check the variables that should have been set. - test -z "$generated_by_libtool_version" && \ - func_fatal_error "invalid libtool wrapper script '$wrapper'" - - finalize=: - for lib in $notinst_deplibs; do - # Check to see that each library is installed. - libdir= - if test -f "$lib"; then - func_source "$lib" - fi - libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` - if test -n "$libdir" && test ! -f "$libfile"; then - func_warning "'$lib' has not been installed in '$libdir'" - finalize=false - fi - done - - relink_command= - func_source "$wrapper" - - outputname= - if test no = "$fast_install" && test -n "$relink_command"; then - $opt_dry_run || { - if $finalize; then - tmpdir=`func_mktempdir` - func_basename "$file$stripped_ext" - file=$func_basename_result - outputname=$tmpdir/$file - # Replace the output file specification. - relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` - - $opt_quiet || { - func_quote_for_expand "$relink_command" - eval "func_echo $func_quote_for_expand_result" - } - if eval "$relink_command"; then : - else - func_error "error: relink '$file' with the above command before installing it" - $opt_dry_run || ${RM}r "$tmpdir" - continue - fi - file=$outputname - else - func_warning "cannot relink '$file'" - fi - } - else - # Install the binary that we compiled earlier. - file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` - fi - fi - - # remove .exe since cygwin /usr/bin/install will append another - # one anyway - case $install_prog,$host in - */usr/bin/install*,*cygwin*) - case $file:$destfile in - *.exe:*.exe) - # this is ok - ;; - *.exe:*) - destfile=$destfile.exe - ;; - *:*.exe) - func_stripname '' '.exe' "$destfile" - destfile=$func_stripname_result - ;; - esac - ;; - esac - func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' - $opt_dry_run || if test -n "$outputname"; then - ${RM}r "$tmpdir" - fi - ;; - esac - done - - for file in $staticlibs; do - func_basename "$file" - name=$func_basename_result - - # Set up the ranlib parameters. - oldlib=$destdir/$name - func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 - tool_oldlib=$func_to_tool_file_result - - func_show_eval "$install_prog \$file \$oldlib" 'exit $?' - - if test -n "$stripme" && test -n "$old_striplib"; then - func_show_eval "$old_striplib $tool_oldlib" 'exit $?' - fi - - # Do each command in the postinstall commands. - func_execute_cmds "$old_postinstall_cmds" 'exit $?' - done - - test -n "$future_libdirs" && \ - func_warning "remember to run '$progname --finish$future_libdirs'" - - if test -n "$current_libdirs"; then - # Maybe just do a dry run. - $opt_dry_run && current_libdirs=" -n$current_libdirs" - exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' - else - exit $EXIT_SUCCESS - fi -} - -test install = "$opt_mode" && func_mode_install ${1+"$@"} - - -# func_generate_dlsyms outputname originator pic_p -# Extract symbols from dlprefiles and create ${outputname}S.o with -# a dlpreopen symbol table. -func_generate_dlsyms () -{ - $debug_cmd - - my_outputname=$1 - my_originator=$2 - my_pic_p=${3-false} - my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` - my_dlsyms= - - if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then - if test -n "$NM" && test -n "$global_symbol_pipe"; then - my_dlsyms=${my_outputname}S.c - else - func_error "not configured to extract global symbols from dlpreopened files" - fi - fi - - if test -n "$my_dlsyms"; then - case $my_dlsyms in - "") ;; - *.c) - # Discover the nlist of each of the dlfiles. - nlist=$output_objdir/$my_outputname.nm - - func_show_eval "$RM $nlist ${nlist}S ${nlist}T" - - # Parse the name list into a source file. - func_verbose "creating $output_objdir/$my_dlsyms" - - $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ -/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ -/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ - -#ifdef __cplusplus -extern \"C\" { -#endif - -#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) -#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" -#endif - -/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE -/* DATA imports from DLLs on WIN32 can't be const, because runtime - relocations are performed -- see ld's documentation on pseudo-relocs. */ -# define LT_DLSYM_CONST -#elif defined __osf__ -/* This system does not cope well with relocations in const data. */ -# define LT_DLSYM_CONST -#else -# define LT_DLSYM_CONST const -#endif - -#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) - -/* External symbol declarations for the compiler. */\ -" - - if test yes = "$dlself"; then - func_verbose "generating symbol list for '$output'" - - $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" - - # Add our own program objects to the symbol list. - progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` - for progfile in $progfiles; do - func_to_tool_file "$progfile" func_convert_file_msys_to_w32 - func_verbose "extracting global C symbols from '$func_to_tool_file_result'" - $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" - done - - if test -n "$exclude_expsyms"; then - $opt_dry_run || { - eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - if test -n "$export_symbols_regex"; then - $opt_dry_run || { - eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - export_symbols=$output_objdir/$outputname.exp - $opt_dry_run || { - $RM $export_symbols - eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' - case $host in - *cygwin* | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' - ;; - esac - } - else - $opt_dry_run || { - eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' - eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - case $host in - *cygwin* | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' - ;; - esac - } - fi - fi - - for dlprefile in $dlprefiles; do - func_verbose "extracting global C symbols from '$dlprefile'" - func_basename "$dlprefile" - name=$func_basename_result - case $host in - *cygwin* | *mingw* | *cegcc* ) - # if an import library, we need to obtain dlname - if func_win32_import_lib_p "$dlprefile"; then - func_tr_sh "$dlprefile" - eval "curr_lafile=\$libfile_$func_tr_sh_result" - dlprefile_dlbasename= - if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then - # Use subshell, to avoid clobbering current variable values - dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` - if test -n "$dlprefile_dlname"; then - func_basename "$dlprefile_dlname" - dlprefile_dlbasename=$func_basename_result - else - # no lafile. user explicitly requested -dlpreopen . - $sharedlib_from_linklib_cmd "$dlprefile" - dlprefile_dlbasename=$sharedlib_from_linklib_result - fi - fi - $opt_dry_run || { - if test -n "$dlprefile_dlbasename"; then - eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' - else - func_warning "Could not compute DLL name from $name" - eval '$ECHO ": $name " >> "$nlist"' - fi - func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | - $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" - } - else # not an import lib - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } - fi - ;; - *) - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } - ;; - esac - done - - $opt_dry_run || { - # Make sure we have at least an empty file. - test -f "$nlist" || : > "$nlist" - - if test -n "$exclude_expsyms"; then - $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T - $MV "$nlist"T "$nlist" - fi - - # Try sorting and uniquifying the output. - if $GREP -v "^: " < "$nlist" | - if sort -k 3 /dev/null 2>&1; then - sort -k 3 - else - sort +2 - fi | - uniq > "$nlist"S; then - : - else - $GREP -v "^: " < "$nlist" > "$nlist"S - fi - - if test -f "$nlist"S; then - eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' - else - echo '/* NONE */' >> "$output_objdir/$my_dlsyms" - fi - - func_show_eval '$RM "${nlist}I"' - if test -n "$global_symbol_to_import"; then - eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' - fi - - echo >> "$output_objdir/$my_dlsyms" "\ - -/* The mapping between symbol names and symbols. */ -typedef struct { - const char *name; - void *address; -} lt_dlsymlist; -extern LT_DLSYM_CONST lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[];\ -" - - if test -s "$nlist"I; then - echo >> "$output_objdir/$my_dlsyms" "\ -static void lt_syminit(void) -{ - LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; - for (; symbol->name; ++symbol) - {" - $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" - echo >> "$output_objdir/$my_dlsyms" "\ - } -}" - fi - echo >> "$output_objdir/$my_dlsyms" "\ -LT_DLSYM_CONST lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[] = -{ {\"$my_originator\", (void *) 0}," - - if test -s "$nlist"I; then - echo >> "$output_objdir/$my_dlsyms" "\ - {\"@INIT@\", (void *) <_syminit}," - fi - - case $need_lib_prefix in - no) - eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - *) - eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - esac - echo >> "$output_objdir/$my_dlsyms" "\ - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt_${my_prefix}_LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif\ -" - } # !$opt_dry_run - - pic_flag_for_symtable= - case "$compile_command " in - *" -static "*) ;; - *) - case $host in - # compiling the symbol table file with pic_flag works around - # a FreeBSD bug that causes programs to crash when -lm is - # linked before any other PIC object. But we must not use - # pic_flag when linking with -static. The problem exists in - # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. - *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) - pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; - *-*-hpux*) - pic_flag_for_symtable=" $pic_flag" ;; - *) - $my_pic_p && pic_flag_for_symtable=" $pic_flag" - ;; - esac - ;; - esac - symtab_cflags= - for arg in $LTCFLAGS; do - case $arg in - -pie | -fpie | -fPIE) ;; - *) func_append symtab_cflags " $arg" ;; - esac - done - - # Now compile the dynamic symbol file. - func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' - - # Clean up the generated files. - func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' - - # Transform the symbol file into the correct name. - symfileobj=$output_objdir/${my_outputname}S.$objext - case $host in - *cygwin* | *mingw* | *cegcc* ) - if test -f "$output_objdir/$my_outputname.def"; then - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - else - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` - fi - ;; - *) - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` - ;; - esac - ;; - *) - func_fatal_error "unknown suffix for '$my_dlsyms'" - ;; - esac - else - # We keep going just in case the user didn't refer to - # lt_preloaded_symbols. The linker will fail if global_symbol_pipe - # really was required. - - # Nullify the symbol file. - compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` - fi -} - -# func_cygming_gnu_implib_p ARG -# This predicate returns with zero status (TRUE) if -# ARG is a GNU/binutils-style import library. Returns -# with nonzero status (FALSE) otherwise. -func_cygming_gnu_implib_p () -{ - $debug_cmd - - func_to_tool_file "$1" func_convert_file_msys_to_w32 - func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` - test -n "$func_cygming_gnu_implib_tmp" -} - -# func_cygming_ms_implib_p ARG -# This predicate returns with zero status (TRUE) if -# ARG is an MS-style import library. Returns -# with nonzero status (FALSE) otherwise. -func_cygming_ms_implib_p () -{ - $debug_cmd - - func_to_tool_file "$1" func_convert_file_msys_to_w32 - func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` - test -n "$func_cygming_ms_implib_tmp" -} - -# func_win32_libid arg -# return the library type of file 'arg' -# -# Need a lot of goo to handle *both* DLLs and import libs -# Has to be a shell function in order to 'eat' the argument -# that is supplied when $file_magic_command is called. -# Despite the name, also deal with 64 bit binaries. -func_win32_libid () -{ - $debug_cmd - - win32_libid_type=unknown - win32_fileres=`file -L $1 2>/dev/null` - case $win32_fileres in - *ar\ archive\ import\ library*) # definitely import - win32_libid_type="x86 archive import" - ;; - *ar\ archive*) # could be an import, or static - # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. - if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | - $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then - case $nm_interface in - "MS dumpbin") - if func_cygming_ms_implib_p "$1" || - func_cygming_gnu_implib_p "$1" - then - win32_nmres=import - else - win32_nmres= - fi - ;; - *) - func_to_tool_file "$1" func_convert_file_msys_to_w32 - win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | - $SED -n -e ' - 1,100{ - / I /{ - s|.*|import| - p - q - } - }'` - ;; - esac - case $win32_nmres in - import*) win32_libid_type="x86 archive import";; - *) win32_libid_type="x86 archive static";; - esac - fi - ;; - *DLL*) - win32_libid_type="x86 DLL" - ;; - *executable*) # but shell scripts are "executable" too... - case $win32_fileres in - *MS\ Windows\ PE\ Intel*) - win32_libid_type="x86 DLL" - ;; - esac - ;; - esac - $ECHO "$win32_libid_type" -} - -# func_cygming_dll_for_implib ARG -# -# Platform-specific function to extract the -# name of the DLL associated with the specified -# import library ARG. -# Invoked by eval'ing the libtool variable -# $sharedlib_from_linklib_cmd -# Result is available in the variable -# $sharedlib_from_linklib_result -func_cygming_dll_for_implib () -{ - $debug_cmd - - sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` -} - -# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs -# -# The is the core of a fallback implementation of a -# platform-specific function to extract the name of the -# DLL associated with the specified import library LIBNAME. -# -# SECTION_NAME is either .idata$6 or .idata$7, depending -# on the platform and compiler that created the implib. -# -# Echos the name of the DLL associated with the -# specified import library. -func_cygming_dll_for_implib_fallback_core () -{ - $debug_cmd - - match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` - $OBJDUMP -s --section "$1" "$2" 2>/dev/null | - $SED '/^Contents of section '"$match_literal"':/{ - # Place marker at beginning of archive member dllname section - s/.*/====MARK====/ - p - d - } - # These lines can sometimes be longer than 43 characters, but - # are always uninteresting - /:[ ]*file format pe[i]\{,1\}-/d - /^In archive [^:]*:/d - # Ensure marker is printed - /^====MARK====/p - # Remove all lines with less than 43 characters - /^.\{43\}/!d - # From remaining lines, remove first 43 characters - s/^.\{43\}//' | - $SED -n ' - # Join marker and all lines until next marker into a single line - /^====MARK====/ b para - H - $ b para - b - :para - x - s/\n//g - # Remove the marker - s/^====MARK====// - # Remove trailing dots and whitespace - s/[\. \t]*$// - # Print - /./p' | - # we now have a list, one entry per line, of the stringified - # contents of the appropriate section of all members of the - # archive that possess that section. Heuristic: eliminate - # all those that have a first or second character that is - # a '.' (that is, objdump's representation of an unprintable - # character.) This should work for all archives with less than - # 0x302f exports -- but will fail for DLLs whose name actually - # begins with a literal '.' or a single character followed by - # a '.'. - # - # Of those that remain, print the first one. - $SED -e '/^\./d;/^.\./d;q' -} - -# func_cygming_dll_for_implib_fallback ARG -# Platform-specific function to extract the -# name of the DLL associated with the specified -# import library ARG. -# -# This fallback implementation is for use when $DLLTOOL -# does not support the --identify-strict option. -# Invoked by eval'ing the libtool variable -# $sharedlib_from_linklib_cmd -# Result is available in the variable -# $sharedlib_from_linklib_result -func_cygming_dll_for_implib_fallback () -{ - $debug_cmd - - if func_cygming_gnu_implib_p "$1"; then - # binutils import library - sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` - elif func_cygming_ms_implib_p "$1"; then - # ms-generated import library - sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` - else - # unknown - sharedlib_from_linklib_result= - fi -} - - -# func_extract_an_archive dir oldlib -func_extract_an_archive () -{ - $debug_cmd - - f_ex_an_ar_dir=$1; shift - f_ex_an_ar_oldlib=$1 - if test yes = "$lock_old_archive_extraction"; then - lockfile=$f_ex_an_ar_oldlib.lock - until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do - func_echo "Waiting for $lockfile to be removed" - sleep 2 - done - fi - func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ - 'stat=$?; rm -f "$lockfile"; exit $stat' - if test yes = "$lock_old_archive_extraction"; then - $opt_dry_run || rm -f "$lockfile" - fi - if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then - : - else - func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" - fi -} - - -# func_extract_archives gentop oldlib ... -func_extract_archives () -{ - $debug_cmd - - my_gentop=$1; shift - my_oldlibs=${1+"$@"} - my_oldobjs= - my_xlib= - my_xabs= - my_xdir= - - for my_xlib in $my_oldlibs; do - # Extract the objects. - case $my_xlib in - [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; - *) my_xabs=`pwd`"/$my_xlib" ;; - esac - func_basename "$my_xlib" - my_xlib=$func_basename_result - my_xlib_u=$my_xlib - while :; do - case " $extracted_archives " in - *" $my_xlib_u "*) - func_arith $extracted_serial + 1 - extracted_serial=$func_arith_result - my_xlib_u=lt$extracted_serial-$my_xlib ;; - *) break ;; - esac - done - extracted_archives="$extracted_archives $my_xlib_u" - my_xdir=$my_gentop/$my_xlib_u - - func_mkdir_p "$my_xdir" - - case $host in - *-darwin*) - func_verbose "Extracting $my_xabs" - # Do not bother doing anything if just a dry run - $opt_dry_run || { - darwin_orig_dir=`pwd` - cd $my_xdir || exit $? - darwin_archive=$my_xabs - darwin_curdir=`pwd` - func_basename "$darwin_archive" - darwin_base_archive=$func_basename_result - darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` - if test -n "$darwin_arches"; then - darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` - darwin_arch= - func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" - for darwin_arch in $darwin_arches; do - func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" - $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" - cd "unfat-$$/$darwin_base_archive-$darwin_arch" - func_extract_an_archive "`pwd`" "$darwin_base_archive" - cd "$darwin_curdir" - $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" - done # $darwin_arches - ## Okay now we've a bunch of thin objects, gotta fatten them up :) - darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` - darwin_file= - darwin_files= - for darwin_file in $darwin_filelist; do - darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` - $LIPO -create -output "$darwin_file" $darwin_files - done # $darwin_filelist - $RM -rf unfat-$$ - cd "$darwin_orig_dir" - else - cd $darwin_orig_dir - func_extract_an_archive "$my_xdir" "$my_xabs" - fi # $darwin_arches - } # !$opt_dry_run - ;; - *) - func_extract_an_archive "$my_xdir" "$my_xabs" - ;; - esac - my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` - done - - func_extract_archives_result=$my_oldobjs -} - - -# func_emit_wrapper [arg=no] -# -# Emit a libtool wrapper script on stdout. -# Don't directly open a file because we may want to -# incorporate the script contents within a cygwin/mingw -# wrapper executable. Must ONLY be called from within -# func_mode_link because it depends on a number of variables -# set therein. -# -# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR -# variable will take. If 'yes', then the emitted script -# will assume that the directory where it is stored is -# the $objdir directory. This is a cygwin/mingw-specific -# behavior. -func_emit_wrapper () -{ - func_emit_wrapper_arg1=${1-no} - - $ECHO "\ -#! $SHELL - -# $output - temporary wrapper script for $objdir/$outputname -# Generated by $PROGRAM (GNU $PACKAGE) $VERSION -# -# The $output program cannot be directly executed until all the libtool -# libraries that it depends on are installed. -# -# This wrapper script should never be moved out of the build directory. -# If it is, it will not operate correctly. - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -sed_quote_subst='$sed_quote_subst' - -# Be Bourne compatible -if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -relink_command=\"$relink_command\" - -# This environment variable determines our operation mode. -if test \"\$libtool_install_magic\" = \"$magic\"; then - # install mode needs the following variables: - generated_by_libtool_version='$macro_version' - notinst_deplibs='$notinst_deplibs' -else - # When we are sourced in execute mode, \$file and \$ECHO are already set. - if test \"\$libtool_execute_magic\" != \"$magic\"; then - file=\"\$0\"" - - qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` - $ECHO "\ - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -\$1 -_LTECHO_EOF' -} - ECHO=\"$qECHO\" - fi - -# Very basic option parsing. These options are (a) specific to -# the libtool wrapper, (b) are identical between the wrapper -# /script/ and the wrapper /executable/ that is used only on -# windows platforms, and (c) all begin with the string "--lt-" -# (application programs are unlikely to have options that match -# this pattern). -# -# There are only two supported options: --lt-debug and -# --lt-dump-script. There is, deliberately, no --lt-help. -# -# The first argument to this parsing function should be the -# script's $0 value, followed by "$@". -lt_option_debug= -func_parse_lt_options () -{ - lt_script_arg0=\$0 - shift - for lt_opt - do - case \"\$lt_opt\" in - --lt-debug) lt_option_debug=1 ;; - --lt-dump-script) - lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` - test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. - lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` - cat \"\$lt_dump_D/\$lt_dump_F\" - exit 0 - ;; - --lt-*) - \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 - exit 1 - ;; - esac - done - - # Print the debug banner immediately: - if test -n \"\$lt_option_debug\"; then - echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 - fi -} - -# Used when --lt-debug. Prints its arguments to stdout -# (redirection is the responsibility of the caller) -func_lt_dump_args () -{ - lt_dump_args_N=1; - for lt_arg - do - \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" - lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` - done -} - -# Core function for launching the target application -func_exec_program_core () -{ -" - case $host in - # Backslashes separate directories on plain windows - *-*-mingw | *-*-os2* | *-cegcc*) - $ECHO "\ - if test -n \"\$lt_option_debug\"; then - \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 - func_lt_dump_args \${1+\"\$@\"} 1>&2 - fi - exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} -" - ;; - - *) - $ECHO "\ - if test -n \"\$lt_option_debug\"; then - \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 - func_lt_dump_args \${1+\"\$@\"} 1>&2 - fi - exec \"\$progdir/\$program\" \${1+\"\$@\"} -" - ;; - esac - $ECHO "\ - \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 - exit 1 -} - -# A function to encapsulate launching the target application -# Strips options in the --lt-* namespace from \$@ and -# launches target application with the remaining arguments. -func_exec_program () -{ - case \" \$* \" in - *\\ --lt-*) - for lt_wr_arg - do - case \$lt_wr_arg in - --lt-*) ;; - *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; - esac - shift - done ;; - esac - func_exec_program_core \${1+\"\$@\"} -} - - # Parse options - func_parse_lt_options \"\$0\" \${1+\"\$@\"} - - # Find the directory that this script lives in. - thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` - test \"x\$thisdir\" = \"x\$file\" && thisdir=. - - # Follow symbolic links until we get to the real thisdir. - file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` - while test -n \"\$file\"; do - destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` - - # If there was a directory component, then change thisdir. - if test \"x\$destdir\" != \"x\$file\"; then - case \"\$destdir\" in - [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; - *) thisdir=\"\$thisdir/\$destdir\" ;; - esac - fi - - file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` - file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` - done - - # Usually 'no', except on cygwin/mingw when embedded into - # the cwrapper. - WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 - if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then - # special case for '.' - if test \"\$thisdir\" = \".\"; then - thisdir=\`pwd\` - fi - # remove .libs from thisdir - case \"\$thisdir\" in - *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; - $objdir ) thisdir=. ;; - esac - fi - - # Try to get the absolute directory name. - absdir=\`cd \"\$thisdir\" && pwd\` - test -n \"\$absdir\" && thisdir=\"\$absdir\" -" - - if test yes = "$fast_install"; then - $ECHO "\ - program=lt-'$outputname'$exeext - progdir=\"\$thisdir/$objdir\" - - if test ! -f \"\$progdir/\$program\" || - { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ - test \"X\$file\" != \"X\$progdir/\$program\"; }; then - - file=\"\$\$-\$program\" - - if test ! -d \"\$progdir\"; then - $MKDIR \"\$progdir\" - else - $RM \"\$progdir/\$file\" - fi" - - $ECHO "\ - - # relink executable if necessary - if test -n \"\$relink_command\"; then - if relink_command_output=\`eval \$relink_command 2>&1\`; then : - else - \$ECHO \"\$relink_command_output\" >&2 - $RM \"\$progdir/\$file\" - exit 1 - fi - fi - - $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || - { $RM \"\$progdir/\$program\"; - $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } - $RM \"\$progdir/\$file\" - fi" - else - $ECHO "\ - program='$outputname' - progdir=\"\$thisdir/$objdir\" -" - fi - - $ECHO "\ - - if test -f \"\$progdir/\$program\"; then" - - # fixup the dll searchpath if we need to. - # - # Fix the DLL searchpath if we need to. Do this before prepending - # to shlibpath, because on Windows, both are PATH and uninstalled - # libraries must come first. - if test -n "$dllsearchpath"; then - $ECHO "\ - # Add the dll search path components to the executable PATH - PATH=$dllsearchpath:\$PATH -" - fi - - # Export our shlibpath_var if we have one. - if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then - $ECHO "\ - # Add our own library path to $shlibpath_var - $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" - - # Some systems cannot cope with colon-terminated $shlibpath_var - # The second colon is a workaround for a bug in BeOS R4 sed - $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` - - export $shlibpath_var -" - fi - - $ECHO "\ - if test \"\$libtool_execute_magic\" != \"$magic\"; then - # Run the actual program with our arguments. - func_exec_program \${1+\"\$@\"} - fi - else - # The program doesn't exist. - \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 - \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 - \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 - exit 1 - fi -fi\ -" -} - - -# func_emit_cwrapperexe_src -# emit the source code for a wrapper executable on stdout -# Must ONLY be called from within func_mode_link because -# it depends on a number of variable set therein. -func_emit_cwrapperexe_src () -{ - cat < -#include -#ifdef _MSC_VER -# include -# include -# include -#else -# include -# include -# ifdef __CYGWIN__ -# include -# endif -#endif -#include -#include -#include -#include -#include -#include -#include -#include - -#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) - -/* declarations of non-ANSI functions */ -#if defined __MINGW32__ -# ifdef __STRICT_ANSI__ -int _putenv (const char *); -# endif -#elif defined __CYGWIN__ -# ifdef __STRICT_ANSI__ -char *realpath (const char *, char *); -int putenv (char *); -int setenv (const char *, const char *, int); -# endif -/* #elif defined other_platform || defined ... */ -#endif - -/* portability defines, excluding path handling macros */ -#if defined _MSC_VER -# define setmode _setmode -# define stat _stat -# define chmod _chmod -# define getcwd _getcwd -# define putenv _putenv -# define S_IXUSR _S_IEXEC -#elif defined __MINGW32__ -# define setmode _setmode -# define stat _stat -# define chmod _chmod -# define getcwd _getcwd -# define putenv _putenv -#elif defined __CYGWIN__ -# define HAVE_SETENV -# define FOPEN_WB "wb" -/* #elif defined other platforms ... */ -#endif - -#if defined PATH_MAX -# define LT_PATHMAX PATH_MAX -#elif defined MAXPATHLEN -# define LT_PATHMAX MAXPATHLEN -#else -# define LT_PATHMAX 1024 -#endif - -#ifndef S_IXOTH -# define S_IXOTH 0 -#endif -#ifndef S_IXGRP -# define S_IXGRP 0 -#endif - -/* path handling portability macros */ -#ifndef DIR_SEPARATOR -# define DIR_SEPARATOR '/' -# define PATH_SEPARATOR ':' -#endif - -#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ - defined __OS2__ -# define HAVE_DOS_BASED_FILE_SYSTEM -# define FOPEN_WB "wb" -# ifndef DIR_SEPARATOR_2 -# define DIR_SEPARATOR_2 '\\' -# endif -# ifndef PATH_SEPARATOR_2 -# define PATH_SEPARATOR_2 ';' -# endif -#endif - -#ifndef DIR_SEPARATOR_2 -# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) -#else /* DIR_SEPARATOR_2 */ -# define IS_DIR_SEPARATOR(ch) \ - (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) -#endif /* DIR_SEPARATOR_2 */ - -#ifndef PATH_SEPARATOR_2 -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) -#else /* PATH_SEPARATOR_2 */ -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) -#endif /* PATH_SEPARATOR_2 */ - -#ifndef FOPEN_WB -# define FOPEN_WB "w" -#endif -#ifndef _O_BINARY -# define _O_BINARY 0 -#endif - -#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) -#define XFREE(stale) do { \ - if (stale) { free (stale); stale = 0; } \ -} while (0) - -#if defined LT_DEBUGWRAPPER -static int lt_debug = 1; -#else -static int lt_debug = 0; -#endif - -const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ - -void *xmalloc (size_t num); -char *xstrdup (const char *string); -const char *base_name (const char *name); -char *find_executable (const char *wrapper); -char *chase_symlinks (const char *pathspec); -int make_executable (const char *path); -int check_executable (const char *path); -char *strendzap (char *str, const char *pat); -void lt_debugprintf (const char *file, int line, const char *fmt, ...); -void lt_fatal (const char *file, int line, const char *message, ...); -static const char *nonnull (const char *s); -static const char *nonempty (const char *s); -void lt_setenv (const char *name, const char *value); -char *lt_extend_str (const char *orig_value, const char *add, int to_end); -void lt_update_exe_path (const char *name, const char *value); -void lt_update_lib_path (const char *name, const char *value); -char **prepare_spawn (char **argv); -void lt_dump_script (FILE *f); -EOF - - cat <= 0) - && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) - return 1; - else - return 0; -} - -int -make_executable (const char *path) -{ - int rval = 0; - struct stat st; - - lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", - nonempty (path)); - if ((!path) || (!*path)) - return 0; - - if (stat (path, &st) >= 0) - { - rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); - } - return rval; -} - -/* Searches for the full path of the wrapper. Returns - newly allocated full path name if found, NULL otherwise - Does not chase symlinks, even on platforms that support them. -*/ -char * -find_executable (const char *wrapper) -{ - int has_slash = 0; - const char *p; - const char *p_next; - /* static buffer for getcwd */ - char tmp[LT_PATHMAX + 1]; - size_t tmp_len; - char *concat_name; - - lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", - nonempty (wrapper)); - - if ((wrapper == NULL) || (*wrapper == '\0')) - return NULL; - - /* Absolute path? */ -#if defined HAVE_DOS_BASED_FILE_SYSTEM - if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - else - { -#endif - if (IS_DIR_SEPARATOR (wrapper[0])) - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } -#if defined HAVE_DOS_BASED_FILE_SYSTEM - } -#endif - - for (p = wrapper; *p; p++) - if (*p == '/') - { - has_slash = 1; - break; - } - if (!has_slash) - { - /* no slashes; search PATH */ - const char *path = getenv ("PATH"); - if (path != NULL) - { - for (p = path; *p; p = p_next) - { - const char *q; - size_t p_len; - for (q = p; *q; q++) - if (IS_PATH_SEPARATOR (*q)) - break; - p_len = (size_t) (q - p); - p_next = (*q == '\0' ? q : q + 1); - if (p_len == 0) - { - /* empty path: current directory */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", - nonnull (strerror (errno))); - tmp_len = strlen (tmp); - concat_name = - XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - } - else - { - concat_name = - XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, p, p_len); - concat_name[p_len] = '/'; - strcpy (concat_name + p_len + 1, wrapper); - } - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - } - /* not found in PATH; assume curdir */ - } - /* Relative path | not found in path: prepend cwd */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", - nonnull (strerror (errno))); - tmp_len = strlen (tmp); - concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - return NULL; -} - -char * -chase_symlinks (const char *pathspec) -{ -#ifndef S_ISLNK - return xstrdup (pathspec); -#else - char buf[LT_PATHMAX]; - struct stat s; - char *tmp_pathspec = xstrdup (pathspec); - char *p; - int has_symlinks = 0; - while (strlen (tmp_pathspec) && !has_symlinks) - { - lt_debugprintf (__FILE__, __LINE__, - "checking path component for symlinks: %s\n", - tmp_pathspec); - if (lstat (tmp_pathspec, &s) == 0) - { - if (S_ISLNK (s.st_mode) != 0) - { - has_symlinks = 1; - break; - } - - /* search backwards for last DIR_SEPARATOR */ - p = tmp_pathspec + strlen (tmp_pathspec) - 1; - while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - p--; - if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - { - /* no more DIR_SEPARATORS left */ - break; - } - *p = '\0'; - } - else - { - lt_fatal (__FILE__, __LINE__, - "error accessing file \"%s\": %s", - tmp_pathspec, nonnull (strerror (errno))); - } - } - XFREE (tmp_pathspec); - - if (!has_symlinks) - { - return xstrdup (pathspec); - } - - tmp_pathspec = realpath (pathspec, buf); - if (tmp_pathspec == 0) - { - lt_fatal (__FILE__, __LINE__, - "could not follow symlinks for %s", pathspec); - } - return xstrdup (tmp_pathspec); -#endif -} - -char * -strendzap (char *str, const char *pat) -{ - size_t len, patlen; - - assert (str != NULL); - assert (pat != NULL); - - len = strlen (str); - patlen = strlen (pat); - - if (patlen <= len) - { - str += len - patlen; - if (STREQ (str, pat)) - *str = '\0'; - } - return str; -} - -void -lt_debugprintf (const char *file, int line, const char *fmt, ...) -{ - va_list args; - if (lt_debug) - { - (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); - va_start (args, fmt); - (void) vfprintf (stderr, fmt, args); - va_end (args); - } -} - -static void -lt_error_core (int exit_status, const char *file, - int line, const char *mode, - const char *message, va_list ap) -{ - fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); - vfprintf (stderr, message, ap); - fprintf (stderr, ".\n"); - - if (exit_status >= 0) - exit (exit_status); -} - -void -lt_fatal (const char *file, int line, const char *message, ...) -{ - va_list ap; - va_start (ap, message); - lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); - va_end (ap); -} - -static const char * -nonnull (const char *s) -{ - return s ? s : "(null)"; -} - -static const char * -nonempty (const char *s) -{ - return (s && !*s) ? "(empty)" : nonnull (s); -} - -void -lt_setenv (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_setenv) setting '%s' to '%s'\n", - nonnull (name), nonnull (value)); - { -#ifdef HAVE_SETENV - /* always make a copy, for consistency with !HAVE_SETENV */ - char *str = xstrdup (value); - setenv (name, str, 1); -#else - size_t len = strlen (name) + 1 + strlen (value) + 1; - char *str = XMALLOC (char, len); - sprintf (str, "%s=%s", name, value); - if (putenv (str) != EXIT_SUCCESS) - { - XFREE (str); - } -#endif - } -} - -char * -lt_extend_str (const char *orig_value, const char *add, int to_end) -{ - char *new_value; - if (orig_value && *orig_value) - { - size_t orig_value_len = strlen (orig_value); - size_t add_len = strlen (add); - new_value = XMALLOC (char, add_len + orig_value_len + 1); - if (to_end) - { - strcpy (new_value, orig_value); - strcpy (new_value + orig_value_len, add); - } - else - { - strcpy (new_value, add); - strcpy (new_value + add_len, orig_value); - } - } - else - { - new_value = xstrdup (add); - } - return new_value; -} - -void -lt_update_exe_path (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", - nonnull (name), nonnull (value)); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - /* some systems can't cope with a ':'-terminated path #' */ - size_t len = strlen (new_value); - while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) - { - new_value[--len] = '\0'; - } - lt_setenv (name, new_value); - XFREE (new_value); - } -} - -void -lt_update_lib_path (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", - nonnull (name), nonnull (value)); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - lt_setenv (name, new_value); - XFREE (new_value); - } -} - -EOF - case $host_os in - mingw*) - cat <<"EOF" - -/* Prepares an argument vector before calling spawn(). - Note that spawn() does not by itself call the command interpreter - (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : - ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - GetVersionEx(&v); - v.dwPlatformId == VER_PLATFORM_WIN32_NT; - }) ? "cmd.exe" : "command.com"). - Instead it simply concatenates the arguments, separated by ' ', and calls - CreateProcess(). We must quote the arguments since Win32 CreateProcess() - interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a - special way: - - Space and tab are interpreted as delimiters. They are not treated as - delimiters if they are surrounded by double quotes: "...". - - Unescaped double quotes are removed from the input. Their only effect is - that within double quotes, space and tab are treated like normal - characters. - - Backslashes not followed by double quotes are not special. - - But 2*n+1 backslashes followed by a double quote become - n backslashes followed by a double quote (n >= 0): - \" -> " - \\\" -> \" - \\\\\" -> \\" - */ -#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" -#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" -char ** -prepare_spawn (char **argv) -{ - size_t argc; - char **new_argv; - size_t i; - - /* Count number of arguments. */ - for (argc = 0; argv[argc] != NULL; argc++) - ; - - /* Allocate new argument vector. */ - new_argv = XMALLOC (char *, argc + 1); - - /* Put quoted arguments into the new argument vector. */ - for (i = 0; i < argc; i++) - { - const char *string = argv[i]; - - if (string[0] == '\0') - new_argv[i] = xstrdup ("\"\""); - else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) - { - int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); - size_t length; - unsigned int backslashes; - const char *s; - char *quoted_string; - char *p; - - length = 0; - backslashes = 0; - if (quote_around) - length++; - for (s = string; *s != '\0'; s++) - { - char c = *s; - if (c == '"') - length += backslashes + 1; - length++; - if (c == '\\') - backslashes++; - else - backslashes = 0; - } - if (quote_around) - length += backslashes + 1; - - quoted_string = XMALLOC (char, length + 1); - - p = quoted_string; - backslashes = 0; - if (quote_around) - *p++ = '"'; - for (s = string; *s != '\0'; s++) - { - char c = *s; - if (c == '"') - { - unsigned int j; - for (j = backslashes + 1; j > 0; j--) - *p++ = '\\'; - } - *p++ = c; - if (c == '\\') - backslashes++; - else - backslashes = 0; - } - if (quote_around) - { - unsigned int j; - for (j = backslashes; j > 0; j--) - *p++ = '\\'; - *p++ = '"'; - } - *p = '\0'; - - new_argv[i] = quoted_string; - } - else - new_argv[i] = (char *) string; - } - new_argv[argc] = NULL; - - return new_argv; -} -EOF - ;; - esac - - cat <<"EOF" -void lt_dump_script (FILE* f) -{ -EOF - func_emit_wrapper yes | - $SED -n -e ' -s/^\(.\{79\}\)\(..*\)/\1\ -\2/ -h -s/\([\\"]\)/\\\1/g -s/$/\\n/ -s/\([^\n]*\).*/ fputs ("\1", f);/p -g -D' - cat <<"EOF" -} -EOF -} -# end: func_emit_cwrapperexe_src - -# func_win32_import_lib_p ARG -# True if ARG is an import lib, as indicated by $file_magic_cmd -func_win32_import_lib_p () -{ - $debug_cmd - - case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in - *import*) : ;; - *) false ;; - esac -} - -# func_suncc_cstd_abi -# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! -# Several compiler flags select an ABI that is incompatible with the -# Cstd library. Avoid specifying it if any are in CXXFLAGS. -func_suncc_cstd_abi () -{ - $debug_cmd - - case " $compile_command " in - *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) - suncc_use_cstd_abi=no - ;; - *) - suncc_use_cstd_abi=yes - ;; - esac -} - -# func_mode_link arg... -func_mode_link () -{ - $debug_cmd - - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - # It is impossible to link a dll without this setting, and - # we shouldn't force the makefile maintainer to figure out - # what system we are compiling for in order to pass an extra - # flag for every libtool invocation. - # allow_undefined=no - - # FIXME: Unfortunately, there are problems with the above when trying - # to make a dll that has undefined symbols, in which case not - # even a static library is built. For now, we need to specify - # -no-undefined on the libtool link line when we can be certain - # that all symbols are satisfied, otherwise we get a static library. - allow_undefined=yes - ;; - *) - allow_undefined=yes - ;; - esac - libtool_args=$nonopt - base_compile="$nonopt $@" - compile_command=$nonopt - finalize_command=$nonopt - - compile_rpath= - finalize_rpath= - compile_shlibpath= - finalize_shlibpath= - convenience= - old_convenience= - deplibs= - old_deplibs= - compiler_flags= - linker_flags= - dllsearchpath= - lib_search_path=`pwd` - inst_prefix_dir= - new_inherited_linker_flags= - - avoid_version=no - bindir= - dlfiles= - dlprefiles= - dlself=no - export_dynamic=no - export_symbols= - export_symbols_regex= - generated= - libobjs= - ltlibs= - module=no - no_install=no - objs= - os2dllname= - non_pic_objects= - precious_files_regex= - prefer_static_libs=no - preload=false - prev= - prevarg= - release= - rpath= - xrpath= - perm_rpath= - temp_rpath= - thread_safe=no - vinfo= - vinfo_number=no - weak_libs= - single_module=$wl-single_module - func_infer_tag $base_compile - - # We need to know -static, to get the right output filenames. - for arg - do - case $arg in - -shared) - test yes != "$build_libtool_libs" \ - && func_fatal_configuration "cannot build a shared library" - build_old_libs=no - break - ;; - -all-static | -static | -static-libtool-libs) - case $arg in - -all-static) - if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then - func_warning "complete static linking is impossible in this configuration" - fi - if test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - -static) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=built - ;; - -static-libtool-libs) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - esac - build_libtool_libs=no - build_old_libs=yes - break - ;; - esac - done - - # See if our shared archives depend on static archives. - test -n "$old_archive_from_new_cmds" && build_old_libs=yes - - # Go through the arguments, transforming them on the way. - while test "$#" -gt 0; do - arg=$1 - shift - func_quote_for_eval "$arg" - qarg=$func_quote_for_eval_unquoted_result - func_append libtool_args " $func_quote_for_eval_result" - - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - case $prev in - output) - func_append compile_command " @OUTPUT@" - func_append finalize_command " @OUTPUT@" - ;; - esac - - case $prev in - bindir) - bindir=$arg - prev= - continue - ;; - dlfiles|dlprefiles) - $preload || { - # Add the symbol object into the linking commands. - func_append compile_command " @SYMFILE@" - func_append finalize_command " @SYMFILE@" - preload=: - } - case $arg in - *.la | *.lo) ;; # We handle these cases below. - force) - if test no = "$dlself"; then - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - self) - if test dlprefiles = "$prev"; then - dlself=yes - elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then - dlself=yes - else - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - *) - if test dlfiles = "$prev"; then - func_append dlfiles " $arg" - else - func_append dlprefiles " $arg" - fi - prev= - continue - ;; - esac - ;; - expsyms) - export_symbols=$arg - test -f "$arg" \ - || func_fatal_error "symbol file '$arg' does not exist" - prev= - continue - ;; - expsyms_regex) - export_symbols_regex=$arg - prev= - continue - ;; - framework) - case $host in - *-*-darwin*) - case "$deplibs " in - *" $qarg.ltframework "*) ;; - *) func_append deplibs " $qarg.ltframework" # this is fixed later - ;; - esac - ;; - esac - prev= - continue - ;; - inst_prefix) - inst_prefix_dir=$arg - prev= - continue - ;; - mllvm) - # Clang does not use LLVM to link, so we can simply discard any - # '-mllvm $arg' options when doing the link step. - prev= - continue - ;; - objectlist) - if test -f "$arg"; then - save_arg=$arg - moreargs= - for fil in `cat "$save_arg"` - do -# func_append moreargs " $fil" - arg=$fil - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test none = "$pic_object" && - test none = "$non_pic_object"; then - func_fatal_error "cannot find name of object for '$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir=$func_dirname_result - - if test none != "$pic_object"; then - # Prepend the subdirectory the object is found in. - pic_object=$xdir$pic_object - - if test dlfiles = "$prev"; then - if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then - func_append dlfiles " $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test dlprefiles = "$prev"; then - # Preload the old-style object. - func_append dlprefiles " $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg=$pic_object - fi - - # Non-PIC object. - if test none != "$non_pic_object"; then - # Prepend the subdirectory the object is found in. - non_pic_object=$xdir$non_pic_object - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test none = "$pic_object"; then - arg=$non_pic_object - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object=$pic_object - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir=$func_dirname_result - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "'$arg' is not a valid libtool object" - fi - fi - done - else - func_fatal_error "link input file '$arg' does not exist" - fi - arg=$save_arg - prev= - continue - ;; - os2dllname) - os2dllname=$arg - prev= - continue - ;; - precious_regex) - precious_files_regex=$arg - prev= - continue - ;; - release) - release=-$arg - prev= - continue - ;; - rpath | xrpath) - # We need an absolute path. - case $arg in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - if test rpath = "$prev"; then - case "$rpath " in - *" $arg "*) ;; - *) func_append rpath " $arg" ;; - esac - else - case "$xrpath " in - *" $arg "*) ;; - *) func_append xrpath " $arg" ;; - esac - fi - prev= - continue - ;; - shrext) - shrext_cmds=$arg - prev= - continue - ;; - weak) - func_append weak_libs " $arg" - prev= - continue - ;; - xcclinker) - func_append linker_flags " $qarg" - func_append compiler_flags " $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xcompiler) - func_append compiler_flags " $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xlinker) - func_append linker_flags " $qarg" - func_append compiler_flags " $wl$qarg" - prev= - func_append compile_command " $wl$qarg" - func_append finalize_command " $wl$qarg" - continue - ;; - *) - eval "$prev=\"\$arg\"" - prev= - continue - ;; - esac - fi # test -n "$prev" - - prevarg=$arg - - case $arg in - -all-static) - if test -n "$link_static_flag"; then - # See comment for -static flag below, for more details. - func_append compile_command " $link_static_flag" - func_append finalize_command " $link_static_flag" - fi - continue - ;; - - -allow-undefined) - # FIXME: remove this flag sometime in the future. - func_fatal_error "'-allow-undefined' must not be used because it is the default" - ;; - - -avoid-version) - avoid_version=yes - continue - ;; - - -bindir) - prev=bindir - continue - ;; - - -dlopen) - prev=dlfiles - continue - ;; - - -dlpreopen) - prev=dlprefiles - continue - ;; - - -export-dynamic) - export_dynamic=yes - continue - ;; - - -export-symbols | -export-symbols-regex) - if test -n "$export_symbols" || test -n "$export_symbols_regex"; then - func_fatal_error "more than one -exported-symbols argument is not allowed" - fi - if test X-export-symbols = "X$arg"; then - prev=expsyms - else - prev=expsyms_regex - fi - continue - ;; - - -framework) - prev=framework - continue - ;; - - -inst-prefix-dir) - prev=inst_prefix - continue - ;; - - # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* - # so, if we see these flags be careful not to treat them like -L - -L[A-Z][A-Z]*:*) - case $with_gcc/$host in - no/*-*-irix* | /*-*-irix*) - func_append compile_command " $arg" - func_append finalize_command " $arg" - ;; - esac - continue - ;; - - -L*) - func_stripname "-L" '' "$arg" - if test -z "$func_stripname_result"; then - if test "$#" -gt 0; then - func_fatal_error "require no space between '-L' and '$1'" - else - func_fatal_error "need path for '-L' option" - fi - fi - func_resolve_sysroot "$func_stripname_result" - dir=$func_resolve_sysroot_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - absdir=`cd "$dir" && pwd` - test -z "$absdir" && \ - func_fatal_error "cannot determine absolute directory name of '$dir'" - dir=$absdir - ;; - esac - case "$deplibs " in - *" -L$dir "* | *" $arg "*) - # Will only happen for absolute or sysroot arguments - ;; - *) - # Preserve sysroot, but never include relative directories - case $dir in - [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; - *) func_append deplibs " -L$dir" ;; - esac - func_append lib_search_path " $dir" - ;; - esac - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$dir:"*) ;; - ::) dllsearchpath=$dir;; - *) func_append dllsearchpath ":$dir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) func_append dllsearchpath ":$testbindir";; - esac - ;; - esac - continue - ;; - - -l*) - if test X-lc = "X$arg" || test X-lm = "X$arg"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) - # These systems don't actually have a C or math library (as such) - continue - ;; - *-*-os2*) - # These systems don't actually have a C library (as such) - test X-lc = "X$arg" && continue - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) - # Do not include libc due to us having libc/libc_r. - test X-lc = "X$arg" && continue - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C and math libraries are in the System framework - func_append deplibs " System.ltframework" - continue - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - test X-lc = "X$arg" && continue - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - test X-lc = "X$arg" && continue - ;; - esac - elif test X-lc_r = "X$arg"; then - case $host in - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) - # Do not include libc_r directly, use -pthread flag. - continue - ;; - esac - fi - func_append deplibs " $arg" - continue - ;; - - -mllvm) - prev=mllvm - continue - ;; - - -module) - module=yes - continue - ;; - - # Tru64 UNIX uses -model [arg] to determine the layout of C++ - # classes, name mangling, and exception handling. - # Darwin uses the -arch flag to determine output architecture. - -model|-arch|-isysroot|--sysroot) - func_append compiler_flags " $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - prev=xcompiler - continue - ;; - - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ - |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) - func_append compiler_flags " $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - case "$new_inherited_linker_flags " in - *" $arg "*) ;; - * ) func_append new_inherited_linker_flags " $arg" ;; - esac - continue - ;; - - -multi_module) - single_module=$wl-multi_module - continue - ;; - - -no-fast-install) - fast_install=no - continue - ;; - - -no-install) - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) - # The PATH hackery in wrapper scripts is required on Windows - # and Darwin in order for the loader to find any dlls it needs. - func_warning "'-no-install' is ignored for $host" - func_warning "assuming '-no-fast-install' instead" - fast_install=no - ;; - *) no_install=yes ;; - esac - continue - ;; - - -no-undefined) - allow_undefined=no - continue - ;; - - -objectlist) - prev=objectlist - continue - ;; - - -os2dllname) - prev=os2dllname - continue - ;; - - -o) prev=output ;; - - -precious-files-regex) - prev=precious_regex - continue - ;; - - -release) - prev=release - continue - ;; - - -rpath) - prev=rpath - continue - ;; - - -R) - prev=xrpath - continue - ;; - - -R*) - func_stripname '-R' '' "$arg" - dir=$func_stripname_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - =*) - func_stripname '=' '' "$dir" - dir=$lt_sysroot$func_stripname_result - ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - case "$xrpath " in - *" $dir "*) ;; - *) func_append xrpath " $dir" ;; - esac - continue - ;; - - -shared) - # The effects of -shared are defined in a previous loop. - continue - ;; - - -shrext) - prev=shrext - continue - ;; - - -static | -static-libtool-libs) - # The effects of -static are defined in a previous loop. - # We used to do the same as -all-static on platforms that - # didn't have a PIC flag, but the assumption that the effects - # would be equivalent was wrong. It would break on at least - # Digital Unix and AIX. - continue - ;; - - -thread-safe) - thread_safe=yes - continue - ;; - - -version-info) - prev=vinfo - continue - ;; - - -version-number) - prev=vinfo - vinfo_number=yes - continue - ;; - - -weak) - prev=weak - continue - ;; - - -Wc,*) - func_stripname '-Wc,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs=$IFS; IFS=, - for flag in $args; do - IFS=$save_ifs - func_quote_for_eval "$flag" - func_append arg " $func_quote_for_eval_result" - func_append compiler_flags " $func_quote_for_eval_result" - done - IFS=$save_ifs - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Wl,*) - func_stripname '-Wl,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs=$IFS; IFS=, - for flag in $args; do - IFS=$save_ifs - func_quote_for_eval "$flag" - func_append arg " $wl$func_quote_for_eval_result" - func_append compiler_flags " $wl$func_quote_for_eval_result" - func_append linker_flags " $func_quote_for_eval_result" - done - IFS=$save_ifs - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Xcompiler) - prev=xcompiler - continue - ;; - - -Xlinker) - prev=xlinker - continue - ;; - - -XCClinker) - prev=xcclinker - continue - ;; - - # -msg_* for osf cc - -msg_*) - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result - ;; - - # Flags to be passed through unchanged, with rationale: - # -64, -mips[0-9] enable 64-bit mode for the SGI compiler - # -r[0-9][0-9]* specify processor for the SGI compiler - # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler - # +DA*, +DD* enable 64-bit mode for the HP compiler - # -q* compiler args for the IBM compiler - # -m*, -t[45]*, -txscale* architecture-specific flags for GCC - # -F/path path to uninstalled frameworks, gcc on darwin - # -p, -pg, --coverage, -fprofile-* profiling flags for GCC - # -fstack-protector* stack protector flags for GCC - # @file GCC response files - # -tp=* Portland pgcc target processor selection - # --sysroot=* for sysroot support - # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization - # -stdlib=* select c++ std lib with clang - -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ - -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ - -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*) - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result - func_append compile_command " $arg" - func_append finalize_command " $arg" - func_append compiler_flags " $arg" - continue - ;; - - -Z*) - if test os2 = "`expr $host : '.*\(os2\)'`"; then - # OS/2 uses -Zxxx to specify OS/2-specific options - compiler_flags="$compiler_flags $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - case $arg in - -Zlinker | -Zstack) - prev=xcompiler - ;; - esac - continue - else - # Otherwise treat like 'Some other compiler flag' below - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result - fi - ;; - - # Some other compiler flag. - -* | +*) - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result - ;; - - *.$objext) - # A standard object. - func_append objs " $arg" - ;; - - *.lo) - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test none = "$pic_object" && - test none = "$non_pic_object"; then - func_fatal_error "cannot find name of object for '$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir=$func_dirname_result - - test none = "$pic_object" || { - # Prepend the subdirectory the object is found in. - pic_object=$xdir$pic_object - - if test dlfiles = "$prev"; then - if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then - func_append dlfiles " $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test dlprefiles = "$prev"; then - # Preload the old-style object. - func_append dlprefiles " $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg=$pic_object - } - - # Non-PIC object. - if test none != "$non_pic_object"; then - # Prepend the subdirectory the object is found in. - non_pic_object=$xdir$non_pic_object - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test none = "$pic_object"; then - arg=$non_pic_object - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object=$pic_object - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir=$func_dirname_result - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "'$arg' is not a valid libtool object" - fi - fi - ;; - - *.$libext) - # An archive. - func_append deplibs " $arg" - func_append old_deplibs " $arg" - continue - ;; - - *.la) - # A libtool-controlled library. - - func_resolve_sysroot "$arg" - if test dlfiles = "$prev"; then - # This library was specified with -dlopen. - func_append dlfiles " $func_resolve_sysroot_result" - prev= - elif test dlprefiles = "$prev"; then - # The library was specified with -dlpreopen. - func_append dlprefiles " $func_resolve_sysroot_result" - prev= - else - func_append deplibs " $func_resolve_sysroot_result" - fi - continue - ;; - - # Some other compiler argument. - *) - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result - ;; - esac # arg - - # Now actually substitute the argument into the commands. - if test -n "$arg"; then - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - done # argument parsing loop - - test -n "$prev" && \ - func_fatal_help "the '$prevarg' option requires an argument" - - if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then - eval arg=\"$export_dynamic_flag_spec\" - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - - oldlibs= - # calculate the name of the file, without its directory - func_basename "$output" - outputname=$func_basename_result - libobjs_save=$libobjs - - if test -n "$shlibpath_var"; then - # get the directories listed in $shlibpath_var - eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` - else - shlib_search_path= - fi - eval sys_lib_search_path=\"$sys_lib_search_path_spec\" - eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" - - # Definition is injected by LT_CONFIG during libtool generation. - func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" - - func_dirname "$output" "/" "" - output_objdir=$func_dirname_result$objdir - func_to_tool_file "$output_objdir/" - tool_output_objdir=$func_to_tool_file_result - # Create the object directory. - func_mkdir_p "$output_objdir" - - # Determine the type of output - case $output in - "") - func_fatal_help "you must specify an output file" - ;; - *.$libext) linkmode=oldlib ;; - *.lo | *.$objext) linkmode=obj ;; - *.la) linkmode=lib ;; - *) linkmode=prog ;; # Anything else should be a program. - esac - - specialdeplibs= - - libs= - # Find all interdependent deplibs by searching for libraries - # that are linked more than once (e.g. -la -lb -la) - for deplib in $deplibs; do - if $opt_preserve_dup_deps; then - case "$libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append libs " $deplib" - done - - if test lib = "$linkmode"; then - libs="$predeps $libs $compiler_lib_search_path $postdeps" - - # Compute libraries that are listed more than once in $predeps - # $postdeps and mark them as special (i.e., whose duplicates are - # not to be eliminated). - pre_post_deps= - if $opt_duplicate_compiler_generated_deps; then - for pre_post_dep in $predeps $postdeps; do - case "$pre_post_deps " in - *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; - esac - func_append pre_post_deps " $pre_post_dep" - done - fi - pre_post_deps= - fi - - deplibs= - newdependency_libs= - newlib_search_path= - need_relink=no # whether we're linking any uninstalled libtool libraries - notinst_deplibs= # not-installed libtool libraries - notinst_path= # paths that contain not-installed libtool libraries - - case $linkmode in - lib) - passes="conv dlpreopen link" - for file in $dlfiles $dlprefiles; do - case $file in - *.la) ;; - *) - func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" - ;; - esac - done - ;; - prog) - compile_deplibs= - finalize_deplibs= - alldeplibs=false - newdlfiles= - newdlprefiles= - passes="conv scan dlopen dlpreopen link" - ;; - *) passes="conv" - ;; - esac - - for pass in $passes; do - # The preopen pass in lib mode reverses $deplibs; put it back here - # so that -L comes before libs that need it for instance... - if test lib,link = "$linkmode,$pass"; then - ## FIXME: Find the place where the list is rebuilt in the wrong - ## order, and fix it there properly - tmp_deplibs= - for deplib in $deplibs; do - tmp_deplibs="$deplib $tmp_deplibs" - done - deplibs=$tmp_deplibs - fi - - if test lib,link = "$linkmode,$pass" || - test prog,scan = "$linkmode,$pass"; then - libs=$deplibs - deplibs= - fi - if test prog = "$linkmode"; then - case $pass in - dlopen) libs=$dlfiles ;; - dlpreopen) libs=$dlprefiles ;; - link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; - esac - fi - if test lib,dlpreopen = "$linkmode,$pass"; then - # Collect and forward deplibs of preopened libtool libs - for lib in $dlprefiles; do - # Ignore non-libtool-libs - dependency_libs= - func_resolve_sysroot "$lib" - case $lib in - *.la) func_source "$func_resolve_sysroot_result" ;; - esac - - # Collect preopened libtool deplibs, except any this library - # has declared as weak libs - for deplib in $dependency_libs; do - func_basename "$deplib" - deplib_base=$func_basename_result - case " $weak_libs " in - *" $deplib_base "*) ;; - *) func_append deplibs " $deplib" ;; - esac - done - done - libs=$dlprefiles - fi - if test dlopen = "$pass"; then - # Collect dlpreopened libraries - save_deplibs=$deplibs - deplibs= - fi - - for deplib in $libs; do - lib= - found=false - case $deplib in - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ - |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) - if test prog,link = "$linkmode,$pass"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - func_append compiler_flags " $deplib" - if test lib = "$linkmode"; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) func_append new_inherited_linker_flags " $deplib" ;; - esac - fi - fi - continue - ;; - -l*) - if test lib != "$linkmode" && test prog != "$linkmode"; then - func_warning "'-l' is ignored for archives/objects" - continue - fi - func_stripname '-l' '' "$deplib" - name=$func_stripname_result - if test lib = "$linkmode"; then - searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" - else - searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" - fi - for searchdir in $searchdirs; do - for search_ext in .la $std_shrext .so .a; do - # Search the libtool library - lib=$searchdir/lib$name$search_ext - if test -f "$lib"; then - if test .la = "$search_ext"; then - found=: - else - found=false - fi - break 2 - fi - done - done - if $found; then - # deplib is a libtool library - # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, - # We need to do some special things here, and not later. - if test yes = "$allow_libtool_libs_with_static_runtimes"; then - case " $predeps $postdeps " in - *" $deplib "*) - if func_lalib_p "$lib"; then - library_names= - old_library= - func_source "$lib" - for l in $old_library $library_names; do - ll=$l - done - if test "X$ll" = "X$old_library"; then # only static version available - found=false - func_dirname "$lib" "" "." - ladir=$func_dirname_result - lib=$ladir/$old_library - if test prog,link = "$linkmode,$pass"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi - fi - ;; - *) ;; - esac - fi - else - # deplib doesn't seem to be a libtool library - if test prog,link = "$linkmode,$pass"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi - ;; # -l - *.ltframework) - if test prog,link = "$linkmode,$pass"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - if test lib = "$linkmode"; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) func_append new_inherited_linker_flags " $deplib" ;; - esac - fi - fi - continue - ;; - -L*) - case $linkmode in - lib) - deplibs="$deplib $deplibs" - test conv = "$pass" && continue - newdependency_libs="$deplib $newdependency_libs" - func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - func_append newlib_search_path " $func_resolve_sysroot_result" - ;; - prog) - if test conv = "$pass"; then - deplibs="$deplib $deplibs" - continue - fi - if test scan = "$pass"; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - func_append newlib_search_path " $func_resolve_sysroot_result" - ;; - *) - func_warning "'-L' is ignored for archives/objects" - ;; - esac # linkmode - continue - ;; # -L - -R*) - if test link = "$pass"; then - func_stripname '-R' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - dir=$func_resolve_sysroot_result - # Make sure the xrpath contains only unique directories. - case "$xrpath " in - *" $dir "*) ;; - *) func_append xrpath " $dir" ;; - esac - fi - deplibs="$deplib $deplibs" - continue - ;; - *.la) - func_resolve_sysroot "$deplib" - lib=$func_resolve_sysroot_result - ;; - *.$libext) - if test conv = "$pass"; then - deplibs="$deplib $deplibs" - continue - fi - case $linkmode in - lib) - # Linking convenience modules into shared libraries is allowed, - # but linking other static libraries is non-portable. - case " $dlpreconveniencelibs " in - *" $deplib "*) ;; - *) - valid_a_lib=false - case $deplibs_check_method in - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ - | $EGREP "$match_pattern_regex" > /dev/null; then - valid_a_lib=: - fi - ;; - pass_all) - valid_a_lib=: - ;; - esac - if $valid_a_lib; then - echo - $ECHO "*** Warning: Linking the shared library $output against the" - $ECHO "*** static library $deplib is not portable!" - deplibs="$deplib $deplibs" - else - echo - $ECHO "*** Warning: Trying to link with static lib archive $deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because the file extensions .$libext of this argument makes me believe" - echo "*** that it is just a static archive that I should not use here." - fi - ;; - esac - continue - ;; - prog) - if test link != "$pass"; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - continue - ;; - esac # linkmode - ;; # *.$libext - *.lo | *.$objext) - if test conv = "$pass"; then - deplibs="$deplib $deplibs" - elif test prog = "$linkmode"; then - if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then - # If there is no dlopen support or we're linking statically, - # we need to preload. - func_append newdlprefiles " $deplib" - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - func_append newdlfiles " $deplib" - fi - fi - continue - ;; - %DEPLIBS%) - alldeplibs=: - continue - ;; - esac # case $deplib - - $found || test -f "$lib" \ - || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$lib" \ - || func_fatal_error "'$lib' is not a valid libtool archive" - - func_dirname "$lib" "" "." - ladir=$func_dirname_result - - dlname= - dlopen= - dlpreopen= - libdir= - library_names= - old_library= - inherited_linker_flags= - # If the library was installed with an old release of libtool, - # it will not redefine variables installed, or shouldnotlink - installed=yes - shouldnotlink=no - avoidtemprpath= - - - # Read the .la file - func_source "$lib" - - # Convert "-framework foo" to "foo.ltframework" - if test -n "$inherited_linker_flags"; then - tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` - for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do - case " $new_inherited_linker_flags " in - *" $tmp_inherited_linker_flag "*) ;; - *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; - esac - done - fi - dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - if test lib,link = "$linkmode,$pass" || - test prog,scan = "$linkmode,$pass" || - { test prog != "$linkmode" && test lib != "$linkmode"; }; then - test -n "$dlopen" && func_append dlfiles " $dlopen" - test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" - fi - - if test conv = "$pass"; then - # Only check for convenience libraries - deplibs="$lib $deplibs" - if test -z "$libdir"; then - if test -z "$old_library"; then - func_fatal_error "cannot find name of link library for '$lib'" - fi - # It is a libtool convenience library, so add in its objects. - func_append convenience " $ladir/$objdir/$old_library" - func_append old_convenience " $ladir/$objdir/$old_library" - elif test prog != "$linkmode" && test lib != "$linkmode"; then - func_fatal_error "'$lib' is not a convenience library" - fi - tmp_libs= - for deplib in $dependency_libs; do - deplibs="$deplib $deplibs" - if $opt_preserve_dup_deps; then - case "$tmp_libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append tmp_libs " $deplib" - done - continue - fi # $pass = conv - - - # Get the name of the library we link against. - linklib= - if test -n "$old_library" && - { test yes = "$prefer_static_libs" || - test built,no = "$prefer_static_libs,$installed"; }; then - linklib=$old_library - else - for l in $old_library $library_names; do - linklib=$l - done - fi - if test -z "$linklib"; then - func_fatal_error "cannot find name of link library for '$lib'" - fi - - # This library was specified with -dlopen. - if test dlopen = "$pass"; then - test -z "$libdir" \ - && func_fatal_error "cannot -dlopen a convenience library: '$lib'" - if test -z "$dlname" || - test yes != "$dlopen_support" || - test no = "$build_libtool_libs" - then - # If there is no dlname, no dlopen support or we're linking - # statically, we need to preload. We also need to preload any - # dependent libraries so libltdl's deplib preloader doesn't - # bomb out in the load deplibs phase. - func_append dlprefiles " $lib $dependency_libs" - else - func_append newdlfiles " $lib" - fi - continue - fi # $pass = dlopen - - # We need an absolute path. - case $ladir in - [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; - *) - abs_ladir=`cd "$ladir" && pwd` - if test -z "$abs_ladir"; then - func_warning "cannot determine absolute directory name of '$ladir'" - func_warning "passing it literally to the linker, although it might fail" - abs_ladir=$ladir - fi - ;; - esac - func_basename "$lib" - laname=$func_basename_result - - # Find the relevant object directory and library name. - if test yes = "$installed"; then - if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then - func_warning "library '$lib' was moved." - dir=$ladir - absdir=$abs_ladir - libdir=$abs_ladir - else - dir=$lt_sysroot$libdir - absdir=$lt_sysroot$libdir - fi - test yes = "$hardcode_automatic" && avoidtemprpath=yes - else - if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then - dir=$ladir - absdir=$abs_ladir - # Remove this search path later - func_append notinst_path " $abs_ladir" - else - dir=$ladir/$objdir - absdir=$abs_ladir/$objdir - # Remove this search path later - func_append notinst_path " $abs_ladir" - fi - fi # $installed = yes - func_stripname 'lib' '.la' "$laname" - name=$func_stripname_result - - # This library was specified with -dlpreopen. - if test dlpreopen = "$pass"; then - if test -z "$libdir" && test prog = "$linkmode"; then - func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" - fi - case $host in - # special handling for platforms with PE-DLLs. - *cygwin* | *mingw* | *cegcc* ) - # Linker will automatically link against shared library if both - # static and shared are present. Therefore, ensure we extract - # symbols from the import library if a shared library is present - # (otherwise, the dlopen module name will be incorrect). We do - # this by putting the import library name into $newdlprefiles. - # We recover the dlopen module name by 'saving' the la file - # name in a special purpose variable, and (later) extracting the - # dlname from the la file. - if test -n "$dlname"; then - func_tr_sh "$dir/$linklib" - eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" - func_append newdlprefiles " $dir/$linklib" - else - func_append newdlprefiles " $dir/$old_library" - # Keep a list of preopened convenience libraries to check - # that they are being used correctly in the link pass. - test -z "$libdir" && \ - func_append dlpreconveniencelibs " $dir/$old_library" - fi - ;; - * ) - # Prefer using a static library (so that no silly _DYNAMIC symbols - # are required to link). - if test -n "$old_library"; then - func_append newdlprefiles " $dir/$old_library" - # Keep a list of preopened convenience libraries to check - # that they are being used correctly in the link pass. - test -z "$libdir" && \ - func_append dlpreconveniencelibs " $dir/$old_library" - # Otherwise, use the dlname, so that lt_dlopen finds it. - elif test -n "$dlname"; then - func_append newdlprefiles " $dir/$dlname" - else - func_append newdlprefiles " $dir/$linklib" - fi - ;; - esac - fi # $pass = dlpreopen - - if test -z "$libdir"; then - # Link the convenience library - if test lib = "$linkmode"; then - deplibs="$dir/$old_library $deplibs" - elif test prog,link = "$linkmode,$pass"; then - compile_deplibs="$dir/$old_library $compile_deplibs" - finalize_deplibs="$dir/$old_library $finalize_deplibs" - else - deplibs="$lib $deplibs" # used for prog,scan pass - fi - continue - fi - - - if test prog = "$linkmode" && test link != "$pass"; then - func_append newlib_search_path " $ladir" - deplibs="$lib $deplibs" - - linkalldeplibs=false - if test no != "$link_all_deplibs" || test -z "$library_names" || - test no = "$build_libtool_libs"; then - linkalldeplibs=: - fi - - tmp_libs= - for deplib in $dependency_libs; do - case $deplib in - -L*) func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - func_append newlib_search_path " $func_resolve_sysroot_result" - ;; - esac - # Need to link against all dependency_libs? - if $linkalldeplibs; then - deplibs="$deplib $deplibs" - else - # Need to hardcode shared library paths - # or/and link against static libraries - newdependency_libs="$deplib $newdependency_libs" - fi - if $opt_preserve_dup_deps; then - case "$tmp_libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append tmp_libs " $deplib" - done # for deplib - continue - fi # $linkmode = prog... - - if test prog,link = "$linkmode,$pass"; then - if test -n "$library_names" && - { { test no = "$prefer_static_libs" || - test built,yes = "$prefer_static_libs,$installed"; } || - test -z "$old_library"; }; then - # We need to hardcode the library path - if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then - # Make sure the rpath contains only unique directories. - case $temp_rpath: in - *"$absdir:"*) ;; - *) func_append temp_rpath "$absdir:" ;; - esac - fi - - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) func_append compile_rpath " $absdir" ;; - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - ;; - esac - fi # $linkmode,$pass = prog,link... - - if $alldeplibs && - { test pass_all = "$deplibs_check_method" || - { test yes = "$build_libtool_libs" && - test -n "$library_names"; }; }; then - # We only need to search for static libraries - continue - fi - fi - - link_static=no # Whether the deplib will be linked statically - use_static_libs=$prefer_static_libs - if test built = "$use_static_libs" && test yes = "$installed"; then - use_static_libs=no - fi - if test -n "$library_names" && - { test no = "$use_static_libs" || test -z "$old_library"; }; then - case $host in - *cygwin* | *mingw* | *cegcc* | *os2*) - # No point in relinking DLLs because paths are not encoded - func_append notinst_deplibs " $lib" - need_relink=no - ;; - *) - if test no = "$installed"; then - func_append notinst_deplibs " $lib" - need_relink=yes - fi - ;; - esac - # This is a shared library - - # Warn about portability, can't link against -module's on some - # systems (darwin). Don't bleat about dlopened modules though! - dlopenmodule= - for dlpremoduletest in $dlprefiles; do - if test "X$dlpremoduletest" = "X$lib"; then - dlopenmodule=$dlpremoduletest - break - fi - done - if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then - echo - if test prog = "$linkmode"; then - $ECHO "*** Warning: Linking the executable $output against the loadable module" - else - $ECHO "*** Warning: Linking the shared library $output against the loadable module" - fi - $ECHO "*** $linklib is not portable!" - fi - if test lib = "$linkmode" && - test yes = "$hardcode_into_libs"; then - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) func_append compile_rpath " $absdir" ;; - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - ;; - esac - fi - - if test -n "$old_archive_from_expsyms_cmds"; then - # figure out the soname - set dummy $library_names - shift - realname=$1 - shift - libname=`eval "\\$ECHO \"$libname_spec\""` - # use dlname if we got it. it's perfectly good, no? - if test -n "$dlname"; then - soname=$dlname - elif test -n "$soname_spec"; then - # bleh windows - case $host in - *cygwin* | mingw* | *cegcc* | *os2*) - func_arith $current - $age - major=$func_arith_result - versuffix=-$major - ;; - esac - eval soname=\"$soname_spec\" - else - soname=$realname - fi - - # Make a new name for the extract_expsyms_cmds to use - soroot=$soname - func_basename "$soroot" - soname=$func_basename_result - func_stripname 'lib' '.dll' "$soname" - newlib=libimp-$func_stripname_result.a - - # If the library has no export list, then create one now - if test -f "$output_objdir/$soname-def"; then : - else - func_verbose "extracting exported symbol list from '$soname'" - func_execute_cmds "$extract_expsyms_cmds" 'exit $?' - fi - - # Create $newlib - if test -f "$output_objdir/$newlib"; then :; else - func_verbose "generating import library for '$soname'" - func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' - fi - # make sure the library variables are pointing to the new library - dir=$output_objdir - linklib=$newlib - fi # test -n "$old_archive_from_expsyms_cmds" - - if test prog = "$linkmode" || test relink != "$opt_mode"; then - add_shlibpath= - add_dir= - add= - lib_linked=yes - case $hardcode_action in - immediate | unsupported) - if test no = "$hardcode_direct"; then - add=$dir/$linklib - case $host in - *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; - *-*-sysv4*uw2*) add_dir=-L$dir ;; - *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ - *-*-unixware7*) add_dir=-L$dir ;; - *-*-darwin* ) - # if the lib is a (non-dlopened) module then we cannot - # link against it, someone is ignoring the earlier warnings - if /usr/bin/file -L $add 2> /dev/null | - $GREP ": [^:]* bundle" >/dev/null; then - if test "X$dlopenmodule" != "X$lib"; then - $ECHO "*** Warning: lib $linklib is a module, not a shared library" - if test -z "$old_library"; then - echo - echo "*** And there doesn't seem to be a static archive available" - echo "*** The link will probably fail, sorry" - else - add=$dir/$old_library - fi - elif test -n "$old_library"; then - add=$dir/$old_library - fi - fi - esac - elif test no = "$hardcode_minus_L"; then - case $host in - *-*-sunos*) add_shlibpath=$dir ;; - esac - add_dir=-L$dir - add=-l$name - elif test no = "$hardcode_shlibpath_var"; then - add_shlibpath=$dir - add=-l$name - else - lib_linked=no - fi - ;; - relink) - if test yes = "$hardcode_direct" && - test no = "$hardcode_direct_absolute"; then - add=$dir/$linklib - elif test yes = "$hardcode_minus_L"; then - add_dir=-L$absdir - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - func_append add_dir " -L$inst_prefix_dir$libdir" - ;; - esac - fi - add=-l$name - elif test yes = "$hardcode_shlibpath_var"; then - add_shlibpath=$dir - add=-l$name - else - lib_linked=no - fi - ;; - *) lib_linked=no ;; - esac - - if test yes != "$lib_linked"; then - func_fatal_configuration "unsupported hardcode properties" - fi - - if test -n "$add_shlibpath"; then - case :$compile_shlibpath: in - *":$add_shlibpath:"*) ;; - *) func_append compile_shlibpath "$add_shlibpath:" ;; - esac - fi - if test prog = "$linkmode"; then - test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" - test -n "$add" && compile_deplibs="$add $compile_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - if test yes != "$hardcode_direct" && - test yes != "$hardcode_minus_L" && - test yes = "$hardcode_shlibpath_var"; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) func_append finalize_shlibpath "$libdir:" ;; - esac - fi - fi - fi - - if test prog = "$linkmode" || test relink = "$opt_mode"; then - add_shlibpath= - add_dir= - add= - # Finalize command for both is simple: just hardcode it. - if test yes = "$hardcode_direct" && - test no = "$hardcode_direct_absolute"; then - add=$libdir/$linklib - elif test yes = "$hardcode_minus_L"; then - add_dir=-L$libdir - add=-l$name - elif test yes = "$hardcode_shlibpath_var"; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) func_append finalize_shlibpath "$libdir:" ;; - esac - add=-l$name - elif test yes = "$hardcode_automatic"; then - if test -n "$inst_prefix_dir" && - test -f "$inst_prefix_dir$libdir/$linklib"; then - add=$inst_prefix_dir$libdir/$linklib - else - add=$libdir/$linklib - fi - else - # We cannot seem to hardcode it, guess we'll fake it. - add_dir=-L$libdir - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - func_append add_dir " -L$inst_prefix_dir$libdir" - ;; - esac - fi - add=-l$name - fi - - if test prog = "$linkmode"; then - test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" - test -n "$add" && finalize_deplibs="$add $finalize_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - fi - fi - elif test prog = "$linkmode"; then - # Here we assume that one of hardcode_direct or hardcode_minus_L - # is not unsupported. This is valid on all known static and - # shared platforms. - if test unsupported != "$hardcode_direct"; then - test -n "$old_library" && linklib=$old_library - compile_deplibs="$dir/$linklib $compile_deplibs" - finalize_deplibs="$dir/$linklib $finalize_deplibs" - else - compile_deplibs="-l$name -L$dir $compile_deplibs" - finalize_deplibs="-l$name -L$dir $finalize_deplibs" - fi - elif test yes = "$build_libtool_libs"; then - # Not a shared library - if test pass_all != "$deplibs_check_method"; then - # We're trying link a shared library against a static one - # but the system doesn't support it. - - # Just print a warning and add the library to dependency_libs so - # that the program can be linked against the static library. - echo - $ECHO "*** Warning: This system cannot link to static lib archive $lib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have." - if test yes = "$module"; then - echo "*** But as you try to build a module library, libtool will still create " - echo "*** a static module, that should work as long as the dlopening application" - echo "*** is linked with the -dlopen flag to resolve symbols at runtime." - if test -z "$global_symbol_pipe"; then - echo - echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using 'nm' or equivalent, but libtool could" - echo "*** not find such a program. So, this module is probably useless." - echo "*** 'nm' from GNU binutils and a full rebuild may help." - fi - if test no = "$build_old_libs"; then - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - else - deplibs="$dir/$old_library $deplibs" - link_static=yes - fi - fi # link shared/static library? - - if test lib = "$linkmode"; then - if test -n "$dependency_libs" && - { test yes != "$hardcode_into_libs" || - test yes = "$build_old_libs" || - test yes = "$link_static"; }; then - # Extract -R from dependency_libs - temp_deplibs= - for libdir in $dependency_libs; do - case $libdir in - -R*) func_stripname '-R' '' "$libdir" - temp_xrpath=$func_stripname_result - case " $xrpath " in - *" $temp_xrpath "*) ;; - *) func_append xrpath " $temp_xrpath";; - esac;; - *) func_append temp_deplibs " $libdir";; - esac - done - dependency_libs=$temp_deplibs - fi - - func_append newlib_search_path " $absdir" - # Link against this library - test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" - # ... and its dependency_libs - tmp_libs= - for deplib in $dependency_libs; do - newdependency_libs="$deplib $newdependency_libs" - case $deplib in - -L*) func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result";; - *) func_resolve_sysroot "$deplib" ;; - esac - if $opt_preserve_dup_deps; then - case "$tmp_libs " in - *" $func_resolve_sysroot_result "*) - func_append specialdeplibs " $func_resolve_sysroot_result" ;; - esac - fi - func_append tmp_libs " $func_resolve_sysroot_result" - done - - if test no != "$link_all_deplibs"; then - # Add the search paths of all dependency libraries - for deplib in $dependency_libs; do - path= - case $deplib in - -L*) path=$deplib ;; - *.la) - func_resolve_sysroot "$deplib" - deplib=$func_resolve_sysroot_result - func_dirname "$deplib" "" "." - dir=$func_dirname_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; - *) - absdir=`cd "$dir" && pwd` - if test -z "$absdir"; then - func_warning "cannot determine absolute directory name of '$dir'" - absdir=$dir - fi - ;; - esac - if $GREP "^installed=no" $deplib > /dev/null; then - case $host in - *-*-darwin*) - depdepl= - eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` - if test -n "$deplibrary_names"; then - for tmp in $deplibrary_names; do - depdepl=$tmp - done - if test -f "$absdir/$objdir/$depdepl"; then - depdepl=$absdir/$objdir/$depdepl - darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - if test -z "$darwin_install_name"; then - darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - fi - func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" - func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" - path= - fi - fi - ;; - *) - path=-L$absdir/$objdir - ;; - esac - else - eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - test -z "$libdir" && \ - func_fatal_error "'$deplib' is not a valid libtool archive" - test "$absdir" != "$libdir" && \ - func_warning "'$deplib' seems to be moved" - - path=-L$absdir - fi - ;; - esac - case " $deplibs " in - *" $path "*) ;; - *) deplibs="$path $deplibs" ;; - esac - done - fi # link_all_deplibs != no - fi # linkmode = lib - done # for deplib in $libs - if test link = "$pass"; then - if test prog = "$linkmode"; then - compile_deplibs="$new_inherited_linker_flags $compile_deplibs" - finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" - else - compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - fi - fi - dependency_libs=$newdependency_libs - if test dlpreopen = "$pass"; then - # Link the dlpreopened libraries before other libraries - for deplib in $save_deplibs; do - deplibs="$deplib $deplibs" - done - fi - if test dlopen != "$pass"; then - test conv = "$pass" || { - # Make sure lib_search_path contains only unique directories. - lib_search_path= - for dir in $newlib_search_path; do - case "$lib_search_path " in - *" $dir "*) ;; - *) func_append lib_search_path " $dir" ;; - esac - done - newlib_search_path= - } - - if test prog,link = "$linkmode,$pass"; then - vars="compile_deplibs finalize_deplibs" - else - vars=deplibs - fi - for var in $vars dependency_libs; do - # Add libraries to $var in reverse order - eval tmp_libs=\"\$$var\" - new_libs= - for deplib in $tmp_libs; do - # FIXME: Pedantically, this is the right thing to do, so - # that some nasty dependency loop isn't accidentally - # broken: - #new_libs="$deplib $new_libs" - # Pragmatically, this seems to cause very few problems in - # practice: - case $deplib in - -L*) new_libs="$deplib $new_libs" ;; - -R*) ;; - *) - # And here is the reason: when a library appears more - # than once as an explicit dependence of a library, or - # is implicitly linked in more than once by the - # compiler, it is considered special, and multiple - # occurrences thereof are not removed. Compare this - # with having the same library being listed as a - # dependency of multiple other libraries: in this case, - # we know (pedantically, we assume) the library does not - # need to be listed more than once, so we keep only the - # last copy. This is not always right, but it is rare - # enough that we require users that really mean to play - # such unportable linking tricks to link the library - # using -Wl,-lname, so that libtool does not consider it - # for duplicate removal. - case " $specialdeplibs " in - *" $deplib "*) new_libs="$deplib $new_libs" ;; - *) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$deplib $new_libs" ;; - esac - ;; - esac - ;; - esac - done - tmp_libs= - for deplib in $new_libs; do - case $deplib in - -L*) - case " $tmp_libs " in - *" $deplib "*) ;; - *) func_append tmp_libs " $deplib" ;; - esac - ;; - *) func_append tmp_libs " $deplib" ;; - esac - done - eval $var=\"$tmp_libs\" - done # for var - fi - - # Add Sun CC postdeps if required: - test CXX = "$tagname" && { - case $host_os in - linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C++ 5.9 - func_suncc_cstd_abi - - if test no != "$suncc_use_cstd_abi"; then - func_append postdeps ' -library=Cstd -library=Crun' - fi - ;; - esac - ;; - - solaris*) - func_cc_basename "$CC" - case $func_cc_basename_result in - CC* | sunCC*) - func_suncc_cstd_abi - - if test no != "$suncc_use_cstd_abi"; then - func_append postdeps ' -library=Cstd -library=Crun' - fi - ;; - esac - ;; - esac - } - - # Last step: remove runtime libs from dependency_libs - # (they stay in deplibs) - tmp_libs= - for i in $dependency_libs; do - case " $predeps $postdeps $compiler_lib_search_path " in - *" $i "*) - i= - ;; - esac - if test -n "$i"; then - func_append tmp_libs " $i" - fi - done - dependency_libs=$tmp_libs - done # for pass - if test prog = "$linkmode"; then - dlfiles=$newdlfiles - fi - if test prog = "$linkmode" || test lib = "$linkmode"; then - dlprefiles=$newdlprefiles - fi - - case $linkmode in - oldlib) - if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then - func_warning "'-dlopen' is ignored for archives" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "'-l' and '-L' are ignored for archives" ;; - esac - - test -n "$rpath" && \ - func_warning "'-rpath' is ignored for archives" - - test -n "$xrpath" && \ - func_warning "'-R' is ignored for archives" - - test -n "$vinfo" && \ - func_warning "'-version-info/-version-number' is ignored for archives" - - test -n "$release" && \ - func_warning "'-release' is ignored for archives" - - test -n "$export_symbols$export_symbols_regex" && \ - func_warning "'-export-symbols' is ignored for archives" - - # Now set the variables for building old libraries. - build_libtool_libs=no - oldlibs=$output - func_append objs "$old_deplibs" - ;; - - lib) - # Make sure we only generate libraries of the form 'libNAME.la'. - case $outputname in - lib*) - func_stripname 'lib' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - ;; - *) - test no = "$module" \ - && func_fatal_help "libtool library '$output' must begin with 'lib'" - - if test no != "$need_lib_prefix"; then - # Add the "lib" prefix for modules if required - func_stripname '' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - else - func_stripname '' '.la' "$outputname" - libname=$func_stripname_result - fi - ;; - esac - - if test -n "$objs"; then - if test pass_all != "$deplibs_check_method"; then - func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" - else - echo - $ECHO "*** Warning: Linking the shared library $output against the non-libtool" - $ECHO "*** objects $objs is not portable!" - func_append libobjs " $objs" - fi - fi - - test no = "$dlself" \ - || func_warning "'-dlopen self' is ignored for libtool libraries" - - set dummy $rpath - shift - test 1 -lt "$#" \ - && func_warning "ignoring multiple '-rpath's for a libtool library" - - install_libdir=$1 - - oldlibs= - if test -z "$rpath"; then - if test yes = "$build_libtool_libs"; then - # Building a libtool convenience library. - # Some compilers have problems with a '.al' extension so - # convenience libraries should have the same extension an - # archive normally would. - oldlibs="$output_objdir/$libname.$libext $oldlibs" - build_libtool_libs=convenience - build_old_libs=yes - fi - - test -n "$vinfo" && \ - func_warning "'-version-info/-version-number' is ignored for convenience libraries" - - test -n "$release" && \ - func_warning "'-release' is ignored for convenience libraries" - else - - # Parse the version information argument. - save_ifs=$IFS; IFS=: - set dummy $vinfo 0 0 0 - shift - IFS=$save_ifs - - test -n "$7" && \ - func_fatal_help "too many parameters to '-version-info'" - - # convert absolute version numbers to libtool ages - # this retains compatibility with .la files and attempts - # to make the code below a bit more comprehensible - - case $vinfo_number in - yes) - number_major=$1 - number_minor=$2 - number_revision=$3 - # - # There are really only two kinds -- those that - # use the current revision as the major version - # and those that subtract age and use age as - # a minor version. But, then there is irix - # that has an extra 1 added just for fun - # - case $version_type in - # correct linux to gnu/linux during the next big refactor - darwin|freebsd-elf|linux|osf|windows|none) - func_arith $number_major + $number_minor - current=$func_arith_result - age=$number_minor - revision=$number_revision - ;; - freebsd-aout|qnx|sunos) - current=$number_major - revision=$number_minor - age=0 - ;; - irix|nonstopux) - func_arith $number_major + $number_minor - current=$func_arith_result - age=$number_minor - revision=$number_minor - lt_irix_increment=no - ;; - esac - ;; - no) - current=$1 - revision=$2 - age=$3 - ;; - esac - - # Check that each of the things are valid numbers. - case $current in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "CURRENT '$current' must be a nonnegative integer" - func_fatal_error "'$vinfo' is not valid version information" - ;; - esac - - case $revision in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "REVISION '$revision' must be a nonnegative integer" - func_fatal_error "'$vinfo' is not valid version information" - ;; - esac - - case $age in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "AGE '$age' must be a nonnegative integer" - func_fatal_error "'$vinfo' is not valid version information" - ;; - esac - - if test "$age" -gt "$current"; then - func_error "AGE '$age' is greater than the current interface number '$current'" - func_fatal_error "'$vinfo' is not valid version information" - fi - - # Calculate the version variables. - major= - versuffix= - verstring= - case $version_type in - none) ;; - - darwin) - # Like Linux, but with the current version available in - # verstring for coding it into the library header - func_arith $current - $age - major=.$func_arith_result - versuffix=$major.$age.$revision - # Darwin ld doesn't like 0 for these options... - func_arith $current + 1 - minor_current=$func_arith_result - xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" - verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" - # On Darwin other compilers - case $CC in - nagfor*) - verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" - ;; - *) - verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" - ;; - esac - ;; - - freebsd-aout) - major=.$current - versuffix=.$current.$revision - ;; - - freebsd-elf) - func_arith $current - $age - major=.$func_arith_result - versuffix=$major.$age.$revision - ;; - - irix | nonstopux) - if test no = "$lt_irix_increment"; then - func_arith $current - $age - else - func_arith $current - $age + 1 - fi - major=$func_arith_result - - case $version_type in - nonstopux) verstring_prefix=nonstopux ;; - *) verstring_prefix=sgi ;; - esac - verstring=$verstring_prefix$major.$revision - - # Add in all the interfaces that we are compatible with. - loop=$revision - while test 0 -ne "$loop"; do - func_arith $revision - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring=$verstring_prefix$major.$iface:$verstring - done - - # Before this point, $major must not contain '.'. - major=.$major - versuffix=$major.$revision - ;; - - linux) # correct to gnu/linux during the next big refactor - func_arith $current - $age - major=.$func_arith_result - versuffix=$major.$age.$revision - ;; - - osf) - func_arith $current - $age - major=.$func_arith_result - versuffix=.$current.$age.$revision - verstring=$current.$age.$revision - - # Add in all the interfaces that we are compatible with. - loop=$age - while test 0 -ne "$loop"; do - func_arith $current - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring=$verstring:$iface.0 - done - - # Make executables depend on our current version. - func_append verstring ":$current.0" - ;; - - qnx) - major=.$current - versuffix=.$current - ;; - - sco) - major=.$current - versuffix=.$current - ;; - - sunos) - major=.$current - versuffix=.$current.$revision - ;; - - windows) - # Use '-' rather than '.', since we only want one - # extension on DOS 8.3 file systems. - func_arith $current - $age - major=$func_arith_result - versuffix=-$major - ;; - - *) - func_fatal_configuration "unknown library version type '$version_type'" - ;; - esac - - # Clear the version info if we defaulted, and they specified a release. - if test -z "$vinfo" && test -n "$release"; then - major= - case $version_type in - darwin) - # we can't check for "0.0" in archive_cmds due to quoting - # problems, so we reset it completely - verstring= - ;; - *) - verstring=0.0 - ;; - esac - if test no = "$need_version"; then - versuffix= - else - versuffix=.0.0 - fi - fi - - # Remove version info from name if versioning should be avoided - if test yes,no = "$avoid_version,$need_version"; then - major= - versuffix= - verstring= - fi - - # Check to see if the archive will have undefined symbols. - if test yes = "$allow_undefined"; then - if test unsupported = "$allow_undefined_flag"; then - if test yes = "$build_old_libs"; then - func_warning "undefined symbols not allowed in $host shared libraries; building static only" - build_libtool_libs=no - else - func_fatal_error "can't build $host shared library unless -no-undefined is specified" - fi - fi - else - # Don't allow undefined symbols. - allow_undefined_flag=$no_undefined_flag - fi - - fi - - func_generate_dlsyms "$libname" "$libname" : - func_append libobjs " $symfileobj" - test " " = "$libobjs" && libobjs= - - if test relink != "$opt_mode"; then - # Remove our outputs, but don't remove object files since they - # may have been created when compiling PIC objects. - removelist= - tempremovelist=`$ECHO "$output_objdir/*"` - for p in $tempremovelist; do - case $p in - *.$objext | *.gcno) - ;; - $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) - if test -n "$precious_files_regex"; then - if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 - then - continue - fi - fi - func_append removelist " $p" - ;; - *) ;; - esac - done - test -n "$removelist" && \ - func_show_eval "${RM}r \$removelist" - fi - - # Now set the variables for building old libraries. - if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then - func_append oldlibs " $output_objdir/$libname.$libext" - - # Transform .lo files to .o files. - oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` - fi - - # Eliminate all temporary directories. - #for path in $notinst_path; do - # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` - # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` - # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` - #done - - if test -n "$xrpath"; then - # If the user specified any rpath flags, then add them. - temp_xrpath= - for libdir in $xrpath; do - func_replace_sysroot "$libdir" - func_append temp_xrpath " -R$func_replace_sysroot_result" - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - done - if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then - dependency_libs="$temp_xrpath $dependency_libs" - fi - fi - - # Make sure dlfiles contains only unique files that won't be dlpreopened - old_dlfiles=$dlfiles - dlfiles= - for lib in $old_dlfiles; do - case " $dlprefiles $dlfiles " in - *" $lib "*) ;; - *) func_append dlfiles " $lib" ;; - esac - done - - # Make sure dlprefiles contains only unique files - old_dlprefiles=$dlprefiles - dlprefiles= - for lib in $old_dlprefiles; do - case "$dlprefiles " in - *" $lib "*) ;; - *) func_append dlprefiles " $lib" ;; - esac - done - - if test yes = "$build_libtool_libs"; then - if test -n "$rpath"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) - # these systems don't actually have a c library (as such)! - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C library is in the System framework - func_append deplibs " System.ltframework" - ;; - *-*-netbsd*) - # Don't link with libc until the a.out ld.so is fixed. - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - ;; - *) - # Add libc to deplibs on all other systems if necessary. - if test yes = "$build_libtool_need_lc"; then - func_append deplibs " -lc" - fi - ;; - esac - fi - - # Transform deplibs into only deplibs that can be linked in shared. - name_save=$name - libname_save=$libname - release_save=$release - versuffix_save=$versuffix - major_save=$major - # I'm not sure if I'm treating the release correctly. I think - # release should show up in the -l (ie -lgmp5) so we don't want to - # add it in twice. Is that correct? - release= - versuffix= - major= - newdeplibs= - droppeddeps=no - case $deplibs_check_method in - pass_all) - # Don't check for shared/static. Everything works. - # This might be a little naive. We might want to check - # whether the library exists or not. But this is on - # osf3 & osf4 and I'm not really sure... Just - # implementing what was already the behavior. - newdeplibs=$deplibs - ;; - test_compile) - # This code stresses the "libraries are programs" paradigm to its - # limits. Maybe even breaks it. We compile a program, linking it - # against the deplibs as a proxy for the library. Then we can check - # whether they linked in statically or dynamically with ldd. - $opt_dry_run || $RM conftest.c - cat > conftest.c </dev/null` - $nocaseglob - else - potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` - fi - for potent_lib in $potential_libs; do - # Follow soft links. - if ls -lLd "$potent_lib" 2>/dev/null | - $GREP " -> " >/dev/null; then - continue - fi - # The statement above tries to avoid entering an - # endless loop below, in case of cyclic links. - # We might still enter an endless loop, since a link - # loop can be closed while we follow links, - # but so what? - potlib=$potent_lib - while test -h "$potlib" 2>/dev/null; do - potliblink=`ls -ld $potlib | $SED 's/.* -> //'` - case $potliblink in - [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; - *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; - esac - done - if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | - $SED -e 10q | - $EGREP "$file_magic_regex" > /dev/null; then - func_append newdeplibs " $a_deplib" - a_deplib= - break 2 - fi - done - done - fi - if test -n "$a_deplib"; then - droppeddeps=yes - echo - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib"; then - $ECHO "*** with $libname but no candidates were found. (...for file magic test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a file magic. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - func_append newdeplibs " $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - for a_deplib in $deplibs; do - case $a_deplib in - -l*) - func_stripname -l '' "$a_deplib" - name=$func_stripname_result - if test yes = "$allow_libtool_libs_with_static_runtimes"; then - case " $predeps $postdeps " in - *" $a_deplib "*) - func_append newdeplibs " $a_deplib" - a_deplib= - ;; - esac - fi - if test -n "$a_deplib"; then - libname=`eval "\\$ECHO \"$libname_spec\""` - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - potential_libs=`ls $i/$libname[.-]* 2>/dev/null` - for potent_lib in $potential_libs; do - potlib=$potent_lib # see symlink-check above in file_magic test - if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ - $EGREP "$match_pattern_regex" > /dev/null; then - func_append newdeplibs " $a_deplib" - a_deplib= - break 2 - fi - done - done - fi - if test -n "$a_deplib"; then - droppeddeps=yes - echo - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib"; then - $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a regex pattern. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - func_append newdeplibs " $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - none | unknown | *) - newdeplibs= - tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` - if test yes = "$allow_libtool_libs_with_static_runtimes"; then - for i in $predeps $postdeps; do - # can't use Xsed below, because $i might contain '/' - tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` - done - fi - case $tmp_deplibs in - *[!\ \ ]*) - echo - if test none = "$deplibs_check_method"; then - echo "*** Warning: inter-library dependencies are not supported in this platform." - else - echo "*** Warning: inter-library dependencies are not known to be supported." - fi - echo "*** All declared inter-library dependencies are being dropped." - droppeddeps=yes - ;; - esac - ;; - esac - versuffix=$versuffix_save - major=$major_save - release=$release_save - libname=$libname_save - name=$name_save - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library with the System framework - newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` - ;; - esac - - if test yes = "$droppeddeps"; then - if test yes = "$module"; then - echo - echo "*** Warning: libtool could not satisfy all declared inter-library" - $ECHO "*** dependencies of module $libname. Therefore, libtool will create" - echo "*** a static module, that should work as long as the dlopening" - echo "*** application is linked with the -dlopen flag." - if test -z "$global_symbol_pipe"; then - echo - echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using 'nm' or equivalent, but libtool could" - echo "*** not find such a program. So, this module is probably useless." - echo "*** 'nm' from GNU binutils and a full rebuild may help." - fi - if test no = "$build_old_libs"; then - oldlibs=$output_objdir/$libname.$libext - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - else - echo "*** The inter-library dependencies that have been dropped here will be" - echo "*** automatically added whenever a program is linked with this library" - echo "*** or is declared to -dlopen it." - - if test no = "$allow_undefined"; then - echo - echo "*** Since this library must not contain undefined symbols," - echo "*** because either the platform does not support them or" - echo "*** it was explicitly requested with -no-undefined," - echo "*** libtool will only create a static version of it." - if test no = "$build_old_libs"; then - oldlibs=$output_objdir/$libname.$libext - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - fi - fi - # Done checking deplibs! - deplibs=$newdeplibs - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - case $host in - *-*-darwin*) - newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $deplibs " in - *" -L$path/$objdir "*) - func_append new_libs " -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) func_append new_libs " $deplib" ;; - esac - ;; - *) func_append new_libs " $deplib" ;; - esac - done - deplibs=$new_libs - - # All the library-specific variables (install_libdir is set above). - library_names= - old_library= - dlname= - - # Test again, we may have decided not to build it any more - if test yes = "$build_libtool_libs"; then - # Remove $wl instances when linking with ld. - # FIXME: should test the right _cmds variable. - case $archive_cmds in - *\$LD\ *) wl= ;; - esac - if test yes = "$hardcode_into_libs"; then - # Hardcode the library paths - hardcode_libdirs= - dep_rpath= - rpath=$finalize_rpath - test relink = "$opt_mode" || rpath=$compile_rpath$rpath - for libdir in $rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - func_replace_sysroot "$libdir" - libdir=$func_replace_sysroot_result - if test -z "$hardcode_libdirs"; then - hardcode_libdirs=$libdir - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append dep_rpath " $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) func_append perm_rpath " $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir=$hardcode_libdirs - eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" - fi - if test -n "$runpath_var" && test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - func_append rpath "$dir:" - done - eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" - fi - test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" - fi - - shlibpath=$finalize_shlibpath - test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath - if test -n "$shlibpath"; then - eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" - fi - - # Get the real and link names of the library. - eval shared_ext=\"$shrext_cmds\" - eval library_names=\"$library_names_spec\" - set dummy $library_names - shift - realname=$1 - shift - - if test -n "$soname_spec"; then - eval soname=\"$soname_spec\" - else - soname=$realname - fi - if test -z "$dlname"; then - dlname=$soname - fi - - lib=$output_objdir/$realname - linknames= - for link - do - func_append linknames " $link" - done - - # Use standard objects if they are pic - test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` - test "X$libobjs" = "X " && libobjs= - - delfiles= - if test -n "$export_symbols" && test -n "$include_expsyms"; then - $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" - export_symbols=$output_objdir/$libname.uexp - func_append delfiles " $export_symbols" - fi - - orig_export_symbols= - case $host_os in - cygwin* | mingw* | cegcc*) - if test -n "$export_symbols" && test -z "$export_symbols_regex"; then - # exporting using user supplied symfile - func_dll_def_p "$export_symbols" || { - # and it's NOT already a .def file. Must figure out - # which of the given symbols are data symbols and tag - # them as such. So, trigger use of export_symbols_cmds. - # export_symbols gets reassigned inside the "prepare - # the list of exported symbols" if statement, so the - # include_expsyms logic still works. - orig_export_symbols=$export_symbols - export_symbols= - always_export_symbols=yes - } - fi - ;; - esac - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then - func_verbose "generating symbol list for '$libname.la'" - export_symbols=$output_objdir/$libname.exp - $opt_dry_run || $RM $export_symbols - cmds=$export_symbols_cmds - save_ifs=$IFS; IFS='~' - for cmd1 in $cmds; do - IFS=$save_ifs - # Take the normal branch if the nm_file_list_spec branch - # doesn't work or if tool conversion is not needed. - case $nm_file_list_spec~$to_tool_file_cmd in - *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) - try_normal_branch=yes - eval cmd=\"$cmd1\" - func_len " $cmd" - len=$func_len_result - ;; - *) - try_normal_branch=no - ;; - esac - if test yes = "$try_normal_branch" \ - && { test "$len" -lt "$max_cmd_len" \ - || test "$max_cmd_len" -le -1; } - then - func_show_eval "$cmd" 'exit $?' - skipped_export=false - elif test -n "$nm_file_list_spec"; then - func_basename "$output" - output_la=$func_basename_result - save_libobjs=$libobjs - save_output=$output - output=$output_objdir/$output_la.nm - func_to_tool_file "$output" - libobjs=$nm_file_list_spec$func_to_tool_file_result - func_append delfiles " $output" - func_verbose "creating $NM input file list: $output" - for obj in $save_libobjs; do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" - done > "$output" - eval cmd=\"$cmd1\" - func_show_eval "$cmd" 'exit $?' - output=$save_output - libobjs=$save_libobjs - skipped_export=false - else - # The command line is too long to execute in one step. - func_verbose "using reloadable object file for export list..." - skipped_export=: - # Break out early, otherwise skipped_export may be - # set to false by a later but shorter cmd. - break - fi - done - IFS=$save_ifs - if test -n "$export_symbols_regex" && test : != "$skipped_export"; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - fi - - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols=$export_symbols - test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols - $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' - fi - - if test : != "$skipped_export" && test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for '$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands, which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - func_append delfiles " $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - - tmp_deplibs= - for test_deplib in $deplibs; do - case " $convenience " in - *" $test_deplib "*) ;; - *) - func_append tmp_deplibs " $test_deplib" - ;; - esac - done - deplibs=$tmp_deplibs - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec" && - test yes = "$compiler_needs_object" && - test -z "$libobjs"; then - # extract the archives, so we have objects to list. - # TODO: could optimize this to just extract one archive. - whole_archive_flag_spec= - fi - if test -n "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - else - gentop=$output_objdir/${outputname}x - func_append generated " $gentop" - - func_extract_archives $gentop $convenience - func_append libobjs " $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - fi - - if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then - eval flag=\"$thread_safe_flag_spec\" - func_append linker_flags " $flag" - fi - - # Make a backup of the uninstalled library when relinking - if test relink = "$opt_mode"; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? - fi - - # Do each of the archive commands. - if test yes = "$module" && test -n "$module_cmds"; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - eval test_cmds=\"$module_expsym_cmds\" - cmds=$module_expsym_cmds - else - eval test_cmds=\"$module_cmds\" - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - eval test_cmds=\"$archive_expsym_cmds\" - cmds=$archive_expsym_cmds - else - eval test_cmds=\"$archive_cmds\" - cmds=$archive_cmds - fi - fi - - if test : != "$skipped_export" && - func_len " $test_cmds" && - len=$func_len_result && - test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - : - else - # The command line is too long to link in one step, link piecewise - # or, if using GNU ld and skipped_export is not :, use a linker - # script. - - # Save the value of $output and $libobjs because we want to - # use them later. If we have whole_archive_flag_spec, we - # want to use save_libobjs as it was before - # whole_archive_flag_spec was expanded, because we can't - # assume the linker understands whole_archive_flag_spec. - # This may have to be revisited, in case too many - # convenience libraries get linked in and end up exceeding - # the spec. - if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - fi - save_output=$output - func_basename "$output" - output_la=$func_basename_result - - # Clear the reloadable object creation command queue and - # initialize k to one. - test_cmds= - concat_cmds= - objlist= - last_robj= - k=1 - - if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then - output=$output_objdir/$output_la.lnkscript - func_verbose "creating GNU ld script: $output" - echo 'INPUT (' > $output - for obj in $save_libobjs - do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" >> $output - done - echo ')' >> $output - func_append delfiles " $output" - func_to_tool_file "$output" - output=$func_to_tool_file_result - elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then - output=$output_objdir/$output_la.lnk - func_verbose "creating linker input file list: $output" - : > $output - set x $save_libobjs - shift - firstobj= - if test yes = "$compiler_needs_object"; then - firstobj="$1 " - shift - fi - for obj - do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" >> $output - done - func_append delfiles " $output" - func_to_tool_file "$output" - output=$firstobj\"$file_list_spec$func_to_tool_file_result\" - else - if test -n "$save_libobjs"; then - func_verbose "creating reloadable object files..." - output=$output_objdir/$output_la-$k.$objext - eval test_cmds=\"$reload_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - - # Loop over the list of objects to be linked. - for obj in $save_libobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - if test -z "$objlist" || - test "$len" -lt "$max_cmd_len"; then - func_append objlist " $obj" - else - # The command $test_cmds is almost too long, add a - # command to the queue. - if test 1 -eq "$k"; then - # The first file doesn't have a previous command to add. - reload_objs=$objlist - eval concat_cmds=\"$reload_cmds\" - else - # All subsequent reloadable object files will link in - # the last one created. - reload_objs="$objlist $last_robj" - eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" - fi - last_robj=$output_objdir/$output_la-$k.$objext - func_arith $k + 1 - k=$func_arith_result - output=$output_objdir/$output_la-$k.$objext - objlist=" $obj" - func_len " $last_robj" - func_arith $len0 + $func_len_result - len=$func_arith_result - fi - done - # Handle the remaining objects by creating one last - # reloadable object file. All subsequent reloadable object - # files will link in the last one created. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - reload_objs="$objlist $last_robj" - eval concat_cmds=\"\$concat_cmds$reload_cmds\" - if test -n "$last_robj"; then - eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" - fi - func_append delfiles " $output" - - else - output= - fi - - ${skipped_export-false} && { - func_verbose "generating symbol list for '$libname.la'" - export_symbols=$output_objdir/$libname.exp - $opt_dry_run || $RM $export_symbols - libobjs=$output - # Append the command to create the export file. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" - if test -n "$last_robj"; then - eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" - fi - } - - test -n "$save_libobjs" && - func_verbose "creating a temporary reloadable object file: $output" - - # Loop through the commands generated above and execute them. - save_ifs=$IFS; IFS='~' - for cmd in $concat_cmds; do - IFS=$save_ifs - $opt_quiet || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test relink = "$opt_mode"; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS=$save_ifs - - if test -n "$export_symbols_regex" && ${skipped_export-false}; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - - ${skipped_export-false} && { - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols=$export_symbols - test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols - $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' - fi - - if test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for '$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands, which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - func_append delfiles " $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - } - - libobjs=$output - # Restore the value of output. - output=$save_output - - if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - fi - # Expand the library linking commands again to reset the - # value of $libobjs for piecewise linking. - - # Do each of the archive commands. - if test yes = "$module" && test -n "$module_cmds"; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - cmds=$module_expsym_cmds - else - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - cmds=$archive_expsym_cmds - else - cmds=$archive_cmds - fi - fi - fi - - if test -n "$delfiles"; then - # Append the command to remove temporary files to $cmds. - eval cmds=\"\$cmds~\$RM $delfiles\" - fi - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop=$output_objdir/${outputname}x - func_append generated " $gentop" - - func_extract_archives $gentop $dlprefiles - func_append libobjs " $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - - save_ifs=$IFS; IFS='~' - for cmd in $cmds; do - IFS=$sp$nl - eval cmd=\"$cmd\" - IFS=$save_ifs - $opt_quiet || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test relink = "$opt_mode"; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS=$save_ifs - - # Restore the uninstalled library and exit - if test relink = "$opt_mode"; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? - - if test -n "$convenience"; then - if test -z "$whole_archive_flag_spec"; then - func_show_eval '${RM}r "$gentop"' - fi - fi - - exit $EXIT_SUCCESS - fi - - # Create links to the real library. - for linkname in $linknames; do - if test "$realname" != "$linkname"; then - func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' - fi - done - - # If -module or -export-dynamic was specified, set the dlname. - if test yes = "$module" || test yes = "$export_dynamic"; then - # On all known operating systems, these are identical. - dlname=$soname - fi - fi - ;; - - obj) - if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then - func_warning "'-dlopen' is ignored for objects" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "'-l' and '-L' are ignored for objects" ;; - esac - - test -n "$rpath" && \ - func_warning "'-rpath' is ignored for objects" - - test -n "$xrpath" && \ - func_warning "'-R' is ignored for objects" - - test -n "$vinfo" && \ - func_warning "'-version-info' is ignored for objects" - - test -n "$release" && \ - func_warning "'-release' is ignored for objects" - - case $output in - *.lo) - test -n "$objs$old_deplibs" && \ - func_fatal_error "cannot build library object '$output' from non-libtool objects" - - libobj=$output - func_lo2o "$libobj" - obj=$func_lo2o_result - ;; - *) - libobj= - obj=$output - ;; - esac - - # Delete the old objects. - $opt_dry_run || $RM $obj $libobj - - # Objects from convenience libraries. This assumes - # single-version convenience libraries. Whenever we create - # different ones for PIC/non-PIC, this we'll have to duplicate - # the extraction. - reload_conv_objs= - gentop= - # if reload_cmds runs $LD directly, get rid of -Wl from - # whole_archive_flag_spec and hope we can get by with turning comma - # into space. - case $reload_cmds in - *\$LD[\ \$]*) wl= ;; - esac - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec"; then - eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" - test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` - reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags - else - gentop=$output_objdir/${obj}x - func_append generated " $gentop" - - func_extract_archives $gentop $convenience - reload_conv_objs="$reload_objs $func_extract_archives_result" - fi - fi - - # If we're not building shared, we need to use non_pic_objs - test yes = "$build_libtool_libs" || libobjs=$non_pic_objects - - # Create the old-style object. - reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs - - output=$obj - func_execute_cmds "$reload_cmds" 'exit $?' - - # Exit if we aren't doing a library object file. - if test -z "$libobj"; then - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - fi - - test yes = "$build_libtool_libs" || { - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - # Create an invalid libtool object if no PIC, so that we don't - # accidentally link it into a program. - # $show "echo timestamp > $libobj" - # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? - exit $EXIT_SUCCESS - } - - if test -n "$pic_flag" || test default != "$pic_mode"; then - # Only do commands if we really have different PIC objects. - reload_objs="$libobjs $reload_conv_objs" - output=$libobj - func_execute_cmds "$reload_cmds" 'exit $?' - fi - - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - ;; - - prog) - case $host in - *cygwin*) func_stripname '' '.exe' "$output" - output=$func_stripname_result.exe;; - esac - test -n "$vinfo" && \ - func_warning "'-version-info' is ignored for programs" - - test -n "$release" && \ - func_warning "'-release' is ignored for programs" - - $preload \ - && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ - && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library is the System framework - compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` - finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` - ;; - esac - - case $host in - *-*-darwin*) - # Don't allow lazy linking, it breaks C++ global constructors - # But is supposedly fixed on 10.4 or later (yay!). - if test CXX = "$tagname"; then - case ${MACOSX_DEPLOYMENT_TARGET-10.0} in - 10.[0123]) - func_append compile_command " $wl-bind_at_load" - func_append finalize_command " $wl-bind_at_load" - ;; - esac - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $compile_deplibs " in - *" -L$path/$objdir "*) - func_append new_libs " -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $compile_deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) func_append new_libs " $deplib" ;; - esac - ;; - *) func_append new_libs " $deplib" ;; - esac - done - compile_deplibs=$new_libs - - - func_append compile_command " $compile_deplibs" - func_append finalize_command " $finalize_deplibs" - - if test -n "$rpath$xrpath"; then - # If the user specified any rpath flags, then add them. - for libdir in $rpath $xrpath; do - # This is the magic to use -rpath. - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - done - fi - - # Now hardcode the library paths - rpath= - hardcode_libdirs= - for libdir in $compile_rpath $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs=$libdir - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append rpath " $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) func_append perm_rpath " $libdir" ;; - esac - fi - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$libdir:"*) ;; - ::) dllsearchpath=$libdir;; - *) func_append dllsearchpath ":$libdir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) func_append dllsearchpath ":$testbindir";; - esac - ;; - esac - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir=$hardcode_libdirs - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - compile_rpath=$rpath - - rpath= - hardcode_libdirs= - for libdir in $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs=$libdir - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append rpath " $flag" - fi - elif test -n "$runpath_var"; then - case "$finalize_perm_rpath " in - *" $libdir "*) ;; - *) func_append finalize_perm_rpath " $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir=$hardcode_libdirs - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - finalize_rpath=$rpath - - if test -n "$libobjs" && test yes = "$build_old_libs"; then - # Transform all the library objects into standard objects. - compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` - finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` - fi - - func_generate_dlsyms "$outputname" "@PROGRAM@" false - - # template prelinking step - if test -n "$prelink_cmds"; then - func_execute_cmds "$prelink_cmds" 'exit $?' - fi - - wrappers_required=: - case $host in - *cegcc* | *mingw32ce*) - # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. - wrappers_required=false - ;; - *cygwin* | *mingw* ) - test yes = "$build_libtool_libs" || wrappers_required=false - ;; - *) - if test no = "$need_relink" || test yes != "$build_libtool_libs"; then - wrappers_required=false - fi - ;; - esac - $wrappers_required || { - # Replace the output file specification. - compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` - link_command=$compile_command$compile_rpath - - # We have no uninstalled library dependencies, so finalize right now. - exit_status=0 - func_show_eval "$link_command" 'exit_status=$?' - - if test -n "$postlink_cmds"; then - func_to_tool_file "$output" - postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` - func_execute_cmds "$postlink_cmds" 'exit $?' - fi - - # Delete the generated files. - if test -f "$output_objdir/${outputname}S.$objext"; then - func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' - fi - - exit $exit_status - } - - if test -n "$compile_shlibpath$finalize_shlibpath"; then - compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" - fi - if test -n "$finalize_shlibpath"; then - finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" - fi - - compile_var= - finalize_var= - if test -n "$runpath_var"; then - if test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - func_append rpath "$dir:" - done - compile_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - if test -n "$finalize_perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $finalize_perm_rpath; do - func_append rpath "$dir:" - done - finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - fi - - if test yes = "$no_install"; then - # We don't need to create a wrapper script. - link_command=$compile_var$compile_command$compile_rpath - # Replace the output file specification. - link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` - # Delete the old output file. - $opt_dry_run || $RM $output - # Link the executable and exit - func_show_eval "$link_command" 'exit $?' - - if test -n "$postlink_cmds"; then - func_to_tool_file "$output" - postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` - func_execute_cmds "$postlink_cmds" 'exit $?' - fi - - exit $EXIT_SUCCESS - fi - - case $hardcode_action,$fast_install in - relink,*) - # Fast installation is not supported - link_command=$compile_var$compile_command$compile_rpath - relink_command=$finalize_var$finalize_command$finalize_rpath - - func_warning "this platform does not like uninstalled shared libraries" - func_warning "'$output' will be relinked during installation" - ;; - *,yes) - link_command=$finalize_var$compile_command$finalize_rpath - relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` - ;; - *,no) - link_command=$compile_var$compile_command$compile_rpath - relink_command=$finalize_var$finalize_command$finalize_rpath - ;; - *,needless) - link_command=$finalize_var$compile_command$finalize_rpath - relink_command= - ;; - esac - - # Replace the output file specification. - link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` - - # Delete the old output files. - $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname - - func_show_eval "$link_command" 'exit $?' - - if test -n "$postlink_cmds"; then - func_to_tool_file "$output_objdir/$outputname" - postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` - func_execute_cmds "$postlink_cmds" 'exit $?' - fi - - # Now create the wrapper script. - func_verbose "creating $output" - - # Quote the relink command for shipping. - if test -n "$relink_command"; then - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - relink_command="(cd `pwd`; $relink_command)" - relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` - fi - - # Only actually do things if not in dry run mode. - $opt_dry_run || { - # win32 will think the script is a binary if it has - # a .exe suffix, so we strip it off here. - case $output in - *.exe) func_stripname '' '.exe' "$output" - output=$func_stripname_result ;; - esac - # test for cygwin because mv fails w/o .exe extensions - case $host in - *cygwin*) - exeext=.exe - func_stripname '' '.exe' "$outputname" - outputname=$func_stripname_result ;; - *) exeext= ;; - esac - case $host in - *cygwin* | *mingw* ) - func_dirname_and_basename "$output" "" "." - output_name=$func_basename_result - output_path=$func_dirname_result - cwrappersource=$output_path/$objdir/lt-$output_name.c - cwrapper=$output_path/$output_name.exe - $RM $cwrappersource $cwrapper - trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 - - func_emit_cwrapperexe_src > $cwrappersource - - # The wrapper executable is built using the $host compiler, - # because it contains $host paths and files. If cross- - # compiling, it, like the target executable, must be - # executed on the $host or under an emulation environment. - $opt_dry_run || { - $LTCC $LTCFLAGS -o $cwrapper $cwrappersource - $STRIP $cwrapper - } - - # Now, create the wrapper script for func_source use: - func_ltwrapper_scriptname $cwrapper - $RM $func_ltwrapper_scriptname_result - trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 - $opt_dry_run || { - # note: this script will not be executed, so do not chmod. - if test "x$build" = "x$host"; then - $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result - else - func_emit_wrapper no > $func_ltwrapper_scriptname_result - fi - } - ;; - * ) - $RM $output - trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 - - func_emit_wrapper no > $output - chmod +x $output - ;; - esac - } - exit $EXIT_SUCCESS - ;; - esac - - # See if we need to build an old-fashioned archive. - for oldlib in $oldlibs; do - - case $build_libtool_libs in - convenience) - oldobjs="$libobjs_save $symfileobj" - addlibs=$convenience - build_libtool_libs=no - ;; - module) - oldobjs=$libobjs_save - addlibs=$old_convenience - build_libtool_libs=no - ;; - *) - oldobjs="$old_deplibs $non_pic_objects" - $preload && test -f "$symfileobj" \ - && func_append oldobjs " $symfileobj" - addlibs=$old_convenience - ;; - esac - - if test -n "$addlibs"; then - gentop=$output_objdir/${outputname}x - func_append generated " $gentop" - - func_extract_archives $gentop $addlibs - func_append oldobjs " $func_extract_archives_result" - fi - - # Do each command in the archive commands. - if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then - cmds=$old_archive_from_new_cmds - else - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop=$output_objdir/${outputname}x - func_append generated " $gentop" - - func_extract_archives $gentop $dlprefiles - func_append oldobjs " $func_extract_archives_result" - fi - - # POSIX demands no paths to be encoded in archives. We have - # to avoid creating archives with duplicate basenames if we - # might have to extract them afterwards, e.g., when creating a - # static archive out of a convenience library, or when linking - # the entirety of a libtool archive into another (currently - # not supported by libtool). - if (for obj in $oldobjs - do - func_basename "$obj" - $ECHO "$func_basename_result" - done | sort | sort -uc >/dev/null 2>&1); then - : - else - echo "copying selected object files to avoid basename conflicts..." - gentop=$output_objdir/${outputname}x - func_append generated " $gentop" - func_mkdir_p "$gentop" - save_oldobjs=$oldobjs - oldobjs= - counter=1 - for obj in $save_oldobjs - do - func_basename "$obj" - objbase=$func_basename_result - case " $oldobjs " in - " ") oldobjs=$obj ;; - *[\ /]"$objbase "*) - while :; do - # Make sure we don't pick an alternate name that also - # overlaps. - newobj=lt$counter-$objbase - func_arith $counter + 1 - counter=$func_arith_result - case " $oldobjs " in - *[\ /]"$newobj "*) ;; - *) if test ! -f "$gentop/$newobj"; then break; fi ;; - esac - done - func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" - func_append oldobjs " $gentop/$newobj" - ;; - *) func_append oldobjs " $obj" ;; - esac - done - fi - func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 - tool_oldlib=$func_to_tool_file_result - eval cmds=\"$old_archive_cmds\" - - func_len " $cmds" - len=$func_len_result - if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - cmds=$old_archive_cmds - elif test -n "$archiver_list_spec"; then - func_verbose "using command file archive linking..." - for obj in $oldobjs - do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" - done > $output_objdir/$libname.libcmd - func_to_tool_file "$output_objdir/$libname.libcmd" - oldobjs=" $archiver_list_spec$func_to_tool_file_result" - cmds=$old_archive_cmds - else - # the command line is too long to link in one step, link in parts - func_verbose "using piecewise archive linking..." - save_RANLIB=$RANLIB - RANLIB=: - objlist= - concat_cmds= - save_oldobjs=$oldobjs - oldobjs= - # Is there a better way of finding the last object in the list? - for obj in $save_oldobjs - do - last_oldobj=$obj - done - eval test_cmds=\"$old_archive_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - for obj in $save_oldobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - func_append objlist " $obj" - if test "$len" -lt "$max_cmd_len"; then - : - else - # the above command should be used before it gets too long - oldobjs=$objlist - if test "$obj" = "$last_oldobj"; then - RANLIB=$save_RANLIB - fi - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" - objlist= - len=$len0 - fi - done - RANLIB=$save_RANLIB - oldobjs=$objlist - if test -z "$oldobjs"; then - eval cmds=\"\$concat_cmds\" - else - eval cmds=\"\$concat_cmds~\$old_archive_cmds\" - fi - fi - fi - func_execute_cmds "$cmds" 'exit $?' - done - - test -n "$generated" && \ - func_show_eval "${RM}r$generated" - - # Now create the libtool archive. - case $output in - *.la) - old_library= - test yes = "$build_old_libs" && old_library=$libname.$libext - func_verbose "creating $output" - - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - # Quote the link command for shipping. - relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" - relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` - if test yes = "$hardcode_automatic"; then - relink_command= - fi - - # Only create the output if not a dry run. - $opt_dry_run || { - for installed in no yes; do - if test yes = "$installed"; then - if test -z "$install_libdir"; then - break - fi - output=$output_objdir/${outputname}i - # Replace all uninstalled libtool libraries with the installed ones - newdependency_libs= - for deplib in $dependency_libs; do - case $deplib in - *.la) - func_basename "$deplib" - name=$func_basename_result - func_resolve_sysroot "$deplib" - eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` - test -z "$libdir" && \ - func_fatal_error "'$deplib' is not a valid libtool archive" - func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" - ;; - -L*) - func_stripname -L '' "$deplib" - func_replace_sysroot "$func_stripname_result" - func_append newdependency_libs " -L$func_replace_sysroot_result" - ;; - -R*) - func_stripname -R '' "$deplib" - func_replace_sysroot "$func_stripname_result" - func_append newdependency_libs " -R$func_replace_sysroot_result" - ;; - *) func_append newdependency_libs " $deplib" ;; - esac - done - dependency_libs=$newdependency_libs - newdlfiles= - - for lib in $dlfiles; do - case $lib in - *.la) - func_basename "$lib" - name=$func_basename_result - eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "'$lib' is not a valid libtool archive" - func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" - ;; - *) func_append newdlfiles " $lib" ;; - esac - done - dlfiles=$newdlfiles - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - *.la) - # Only pass preopened files to the pseudo-archive (for - # eventual linking with the app. that links it) if we - # didn't already link the preopened objects directly into - # the library: - func_basename "$lib" - name=$func_basename_result - eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "'$lib' is not a valid libtool archive" - func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" - ;; - esac - done - dlprefiles=$newdlprefiles - else - newdlfiles= - for lib in $dlfiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; - *) abs=`pwd`"/$lib" ;; - esac - func_append newdlfiles " $abs" - done - dlfiles=$newdlfiles - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; - *) abs=`pwd`"/$lib" ;; - esac - func_append newdlprefiles " $abs" - done - dlprefiles=$newdlprefiles - fi - $RM $output - # place dlname in correct position for cygwin - # In fact, it would be nice if we could use this code for all target - # systems that can't hard-code library paths into their executables - # and that have no shared library path variable independent of PATH, - # but it turns out we can't easily determine that from inspecting - # libtool variables, so we have to hard-code the OSs to which it - # applies here; at the moment, that means platforms that use the PE - # object format with DLL files. See the long comment at the top of - # tests/bindir.at for full details. - tdlname=$dlname - case $host,$output,$installed,$module,$dlname in - *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) - # If a -bindir argument was supplied, place the dll there. - if test -n "$bindir"; then - func_relative_path "$install_libdir" "$bindir" - tdlname=$func_relative_path_result/$dlname - else - # Otherwise fall back on heuristic. - tdlname=../bin/$dlname - fi - ;; - esac - $ECHO > $output "\ -# $outputname - a libtool library file -# Generated by $PROGRAM (GNU $PACKAGE) $VERSION -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# The name that we can dlopen(3). -dlname='$tdlname' - -# Names of this library. -library_names='$library_names' - -# The name of the static archive. -old_library='$old_library' - -# Linker flags that cannot go in dependency_libs. -inherited_linker_flags='$new_inherited_linker_flags' - -# Libraries that this one depends upon. -dependency_libs='$dependency_libs' - -# Names of additional weak libraries provided by this library -weak_library_names='$weak_libs' - -# Version information for $libname. -current=$current -age=$age -revision=$revision - -# Is this an already installed library? -installed=$installed - -# Should we warn about portability when linking against -modules? -shouldnotlink=$module - -# Files to dlopen/dlpreopen -dlopen='$dlfiles' -dlpreopen='$dlprefiles' - -# Directory that this library needs to be installed in: -libdir='$install_libdir'" - if test no,yes = "$installed,$need_relink"; then - $ECHO >> $output "\ -relink_command=\"$relink_command\"" - fi - done - } - - # Do a symbolic link so that the libtool archive can be found in - # LD_LIBRARY_PATH before the program is installed. - func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' - ;; - esac - exit $EXIT_SUCCESS -} - -if test link = "$opt_mode" || test relink = "$opt_mode"; then - func_mode_link ${1+"$@"} -fi - - -# func_mode_uninstall arg... -func_mode_uninstall () -{ - $debug_cmd - - RM=$nonopt - files= - rmforce=false - exit_status=0 - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic=$magic - - for arg - do - case $arg in - -f) func_append RM " $arg"; rmforce=: ;; - -*) func_append RM " $arg" ;; - *) func_append files " $arg" ;; - esac - done - - test -z "$RM" && \ - func_fatal_help "you must specify an RM program" - - rmdirs= - - for file in $files; do - func_dirname "$file" "" "." - dir=$func_dirname_result - if test . = "$dir"; then - odir=$objdir - else - odir=$dir/$objdir - fi - func_basename "$file" - name=$func_basename_result - test uninstall = "$opt_mode" && odir=$dir - - # Remember odir for removal later, being careful to avoid duplicates - if test clean = "$opt_mode"; then - case " $rmdirs " in - *" $odir "*) ;; - *) func_append rmdirs " $odir" ;; - esac - fi - - # Don't error if the file doesn't exist and rm -f was used. - if { test -L "$file"; } >/dev/null 2>&1 || - { test -h "$file"; } >/dev/null 2>&1 || - test -f "$file"; then - : - elif test -d "$file"; then - exit_status=1 - continue - elif $rmforce; then - continue - fi - - rmfiles=$file - - case $name in - *.la) - # Possibly a libtool archive, so verify it. - if func_lalib_p "$file"; then - func_source $dir/$name - - # Delete the libtool libraries and symlinks. - for n in $library_names; do - func_append rmfiles " $odir/$n" - done - test -n "$old_library" && func_append rmfiles " $odir/$old_library" - - case $opt_mode in - clean) - case " $library_names " in - *" $dlname "*) ;; - *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; - esac - test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" - ;; - uninstall) - if test -n "$library_names"; then - # Do each command in the postuninstall commands. - func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' - fi - - if test -n "$old_library"; then - # Do each command in the old_postuninstall commands. - func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' - fi - # FIXME: should reinstall the best remaining shared library. - ;; - esac - fi - ;; - - *.lo) - # Possibly a libtool object, so verify it. - if func_lalib_p "$file"; then - - # Read the .lo file - func_source $dir/$name - - # Add PIC object to the list of files to remove. - if test -n "$pic_object" && test none != "$pic_object"; then - func_append rmfiles " $dir/$pic_object" - fi - - # Add non-PIC object to the list of files to remove. - if test -n "$non_pic_object" && test none != "$non_pic_object"; then - func_append rmfiles " $dir/$non_pic_object" - fi - fi - ;; - - *) - if test clean = "$opt_mode"; then - noexename=$name - case $file in - *.exe) - func_stripname '' '.exe' "$file" - file=$func_stripname_result - func_stripname '' '.exe' "$name" - noexename=$func_stripname_result - # $file with .exe has already been added to rmfiles, - # add $file without .exe - func_append rmfiles " $file" - ;; - esac - # Do a test to see if this is a libtool program. - if func_ltwrapper_p "$file"; then - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - relink_command= - func_source $func_ltwrapper_scriptname_result - func_append rmfiles " $func_ltwrapper_scriptname_result" - else - relink_command= - func_source $dir/$noexename - fi - - # note $name still contains .exe if it was in $file originally - # as does the version of $file that was added into $rmfiles - func_append rmfiles " $odir/$name $odir/${name}S.$objext" - if test yes = "$fast_install" && test -n "$relink_command"; then - func_append rmfiles " $odir/lt-$name" - fi - if test "X$noexename" != "X$name"; then - func_append rmfiles " $odir/lt-$noexename.c" - fi - fi - fi - ;; - esac - func_show_eval "$RM $rmfiles" 'exit_status=1' - done - - # Try to remove the $objdir's in the directories where we deleted files - for dir in $rmdirs; do - if test -d "$dir"; then - func_show_eval "rmdir $dir >/dev/null 2>&1" - fi - done - - exit $exit_status -} - -if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then - func_mode_uninstall ${1+"$@"} -fi - -test -z "$opt_mode" && { - help=$generic_help - func_fatal_help "you must specify a MODE" -} - -test -z "$exec_cmd" && \ - func_fatal_help "invalid operation mode '$opt_mode'" - -if test -n "$exec_cmd"; then - eval exec "$exec_cmd" - exit $EXIT_FAILURE -fi - -exit $exit_status - - -# The TAGs below are defined such that we never get into a situation -# where we disable both kinds of libraries. Given conflicting -# choices, we go for a static library, that is the most portable, -# since we can't tell whether shared libraries were disabled because -# the user asked for that or because the platform doesn't support -# them. This is particularly important on AIX, because we don't -# support having both static and shared libraries enabled at the same -# time on that platform, so we default to a shared-only configuration. -# If a disable-shared tag is given, we'll fallback to a static-only -# configuration. But we'll never go from static-only to shared-only. - -# ### BEGIN LIBTOOL TAG CONFIG: disable-shared -build_libtool_libs=no -build_old_libs=yes -# ### END LIBTOOL TAG CONFIG: disable-shared - -# ### BEGIN LIBTOOL TAG CONFIG: disable-static -build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` -# ### END LIBTOOL TAG CONFIG: disable-static - -# Local Variables: -# mode:shell-script -# sh-indentation:2 -# End: diff --git a/libs/libpng-src/mips/.dirstamp b/libs/libpng-src/mips/.dirstamp deleted file mode 100644 index e69de29bb..000000000 diff --git a/libs/libpng-src/pnglibconf.h b/libs/libpng-src/pnglibconf.h deleted file mode 100644 index 1298b5c92..000000000 --- a/libs/libpng-src/pnglibconf.h +++ /dev/null @@ -1,220 +0,0 @@ -/* pnglibconf.h - library build configuration */ - -/* libpng version 1.6.37 */ - -/* Copyright (c) 2018-2019 Cosmin Truta */ -/* Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson */ - -/* This code is released under the libpng license. */ -/* For conditions of distribution and use, see the disclaimer */ -/* and license in png.h */ - -/* pnglibconf.h */ -/* Machine generated file: DO NOT EDIT */ -/* Derived from: scripts/pnglibconf.dfa */ -#ifndef PNGLCONF_H -#define PNGLCONF_H -/* options */ -#define PNG_16BIT_SUPPORTED -#define PNG_ALIGNED_MEMORY_SUPPORTED -/*#undef PNG_ARM_NEON_API_SUPPORTED*/ -/*#undef PNG_ARM_NEON_CHECK_SUPPORTED*/ -#define PNG_BENIGN_ERRORS_SUPPORTED -#define PNG_BENIGN_READ_ERRORS_SUPPORTED -/*#undef PNG_BENIGN_WRITE_ERRORS_SUPPORTED*/ -#define PNG_BUILD_GRAYSCALE_PALETTE_SUPPORTED -#define PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED -#define PNG_COLORSPACE_SUPPORTED -#define PNG_CONSOLE_IO_SUPPORTED -#define PNG_CONVERT_tIME_SUPPORTED -#define PNG_EASY_ACCESS_SUPPORTED -/*#undef PNG_ERROR_NUMBERS_SUPPORTED*/ -#define PNG_ERROR_TEXT_SUPPORTED -#define PNG_FIXED_POINT_SUPPORTED -#define PNG_FLOATING_ARITHMETIC_SUPPORTED -#define PNG_FLOATING_POINT_SUPPORTED -#define PNG_FORMAT_AFIRST_SUPPORTED -#define PNG_FORMAT_BGR_SUPPORTED -#define PNG_GAMMA_SUPPORTED -#define PNG_GET_PALETTE_MAX_SUPPORTED -#define PNG_HANDLE_AS_UNKNOWN_SUPPORTED -#define PNG_INCH_CONVERSIONS_SUPPORTED -#define PNG_INFO_IMAGE_SUPPORTED -#define PNG_IO_STATE_SUPPORTED -#define PNG_MNG_FEATURES_SUPPORTED -#define PNG_POINTER_INDEXING_SUPPORTED -/*#undef PNG_POWERPC_VSX_API_SUPPORTED*/ -/*#undef PNG_POWERPC_VSX_CHECK_SUPPORTED*/ -#define PNG_PROGRESSIVE_READ_SUPPORTED -#define PNG_READ_16BIT_SUPPORTED -#define PNG_READ_ALPHA_MODE_SUPPORTED -#define PNG_READ_ANCILLARY_CHUNKS_SUPPORTED -#define PNG_READ_BACKGROUND_SUPPORTED -#define PNG_READ_BGR_SUPPORTED -#define PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED -#define PNG_READ_COMPOSITE_NODIV_SUPPORTED -#define PNG_READ_COMPRESSED_TEXT_SUPPORTED -#define PNG_READ_EXPAND_16_SUPPORTED -#define PNG_READ_EXPAND_SUPPORTED -#define PNG_READ_FILLER_SUPPORTED -#define PNG_READ_GAMMA_SUPPORTED -#define PNG_READ_GET_PALETTE_MAX_SUPPORTED -#define PNG_READ_GRAY_TO_RGB_SUPPORTED -#define PNG_READ_INTERLACING_SUPPORTED -#define PNG_READ_INT_FUNCTIONS_SUPPORTED -#define PNG_READ_INVERT_ALPHA_SUPPORTED -#define PNG_READ_INVERT_SUPPORTED -#define PNG_READ_OPT_PLTE_SUPPORTED -#define PNG_READ_PACKSWAP_SUPPORTED -#define PNG_READ_PACK_SUPPORTED -#define PNG_READ_QUANTIZE_SUPPORTED -#define PNG_READ_RGB_TO_GRAY_SUPPORTED -#define PNG_READ_SCALE_16_TO_8_SUPPORTED -#define PNG_READ_SHIFT_SUPPORTED -#define PNG_READ_STRIP_16_TO_8_SUPPORTED -#define PNG_READ_STRIP_ALPHA_SUPPORTED -#define PNG_READ_SUPPORTED -#define PNG_READ_SWAP_ALPHA_SUPPORTED -#define PNG_READ_SWAP_SUPPORTED -#define PNG_READ_TEXT_SUPPORTED -#define PNG_READ_TRANSFORMS_SUPPORTED -#define PNG_READ_UNKNOWN_CHUNKS_SUPPORTED -#define PNG_READ_USER_CHUNKS_SUPPORTED -#define PNG_READ_USER_TRANSFORM_SUPPORTED -#define PNG_READ_bKGD_SUPPORTED -#define PNG_READ_cHRM_SUPPORTED -#define PNG_READ_eXIf_SUPPORTED -#define PNG_READ_gAMA_SUPPORTED -#define PNG_READ_hIST_SUPPORTED -#define PNG_READ_iCCP_SUPPORTED -#define PNG_READ_iTXt_SUPPORTED -#define PNG_READ_oFFs_SUPPORTED -#define PNG_READ_pCAL_SUPPORTED -#define PNG_READ_pHYs_SUPPORTED -#define PNG_READ_sBIT_SUPPORTED -#define PNG_READ_sCAL_SUPPORTED -#define PNG_READ_sPLT_SUPPORTED -#define PNG_READ_sRGB_SUPPORTED -#define PNG_READ_tEXt_SUPPORTED -#define PNG_READ_tIME_SUPPORTED -#define PNG_READ_tRNS_SUPPORTED -#define PNG_READ_zTXt_SUPPORTED -#define PNG_SAVE_INT_32_SUPPORTED -#define PNG_SAVE_UNKNOWN_CHUNKS_SUPPORTED -#define PNG_SEQUENTIAL_READ_SUPPORTED -#define PNG_SETJMP_SUPPORTED -#define PNG_SET_OPTION_SUPPORTED -#define PNG_SET_UNKNOWN_CHUNKS_SUPPORTED -#define PNG_SET_USER_LIMITS_SUPPORTED -#define PNG_SIMPLIFIED_READ_AFIRST_SUPPORTED -#define PNG_SIMPLIFIED_READ_BGR_SUPPORTED -#define PNG_SIMPLIFIED_READ_SUPPORTED -#define PNG_SIMPLIFIED_WRITE_AFIRST_SUPPORTED -#define PNG_SIMPLIFIED_WRITE_BGR_SUPPORTED -#define PNG_SIMPLIFIED_WRITE_STDIO_SUPPORTED -#define PNG_SIMPLIFIED_WRITE_SUPPORTED -#define PNG_STDIO_SUPPORTED -#define PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED -#define PNG_TEXT_SUPPORTED -#define PNG_TIME_RFC1123_SUPPORTED -#define PNG_UNKNOWN_CHUNKS_SUPPORTED -#define PNG_USER_CHUNKS_SUPPORTED -#define PNG_USER_LIMITS_SUPPORTED -#define PNG_USER_MEM_SUPPORTED -#define PNG_USER_TRANSFORM_INFO_SUPPORTED -#define PNG_USER_TRANSFORM_PTR_SUPPORTED -#define PNG_WARNINGS_SUPPORTED -#define PNG_WRITE_16BIT_SUPPORTED -#define PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED -#define PNG_WRITE_BGR_SUPPORTED -#define PNG_WRITE_CHECK_FOR_INVALID_INDEX_SUPPORTED -#define PNG_WRITE_COMPRESSED_TEXT_SUPPORTED -#define PNG_WRITE_CUSTOMIZE_COMPRESSION_SUPPORTED -#define PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED -#define PNG_WRITE_FILLER_SUPPORTED -#define PNG_WRITE_FILTER_SUPPORTED -#define PNG_WRITE_FLUSH_SUPPORTED -#define PNG_WRITE_GET_PALETTE_MAX_SUPPORTED -#define PNG_WRITE_INTERLACING_SUPPORTED -#define PNG_WRITE_INT_FUNCTIONS_SUPPORTED -#define PNG_WRITE_INVERT_ALPHA_SUPPORTED -#define PNG_WRITE_INVERT_SUPPORTED -#define PNG_WRITE_OPTIMIZE_CMF_SUPPORTED -#define PNG_WRITE_PACKSWAP_SUPPORTED -#define PNG_WRITE_PACK_SUPPORTED -#define PNG_WRITE_SHIFT_SUPPORTED -#define PNG_WRITE_SUPPORTED -#define PNG_WRITE_SWAP_ALPHA_SUPPORTED -#define PNG_WRITE_SWAP_SUPPORTED -#define PNG_WRITE_TEXT_SUPPORTED -#define PNG_WRITE_TRANSFORMS_SUPPORTED -#define PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED -#define PNG_WRITE_USER_TRANSFORM_SUPPORTED -#define PNG_WRITE_WEIGHTED_FILTER_SUPPORTED -#define PNG_WRITE_bKGD_SUPPORTED -#define PNG_WRITE_cHRM_SUPPORTED -#define PNG_WRITE_eXIf_SUPPORTED -#define PNG_WRITE_gAMA_SUPPORTED -#define PNG_WRITE_hIST_SUPPORTED -#define PNG_WRITE_iCCP_SUPPORTED -#define PNG_WRITE_iTXt_SUPPORTED -#define PNG_WRITE_oFFs_SUPPORTED -#define PNG_WRITE_pCAL_SUPPORTED -#define PNG_WRITE_pHYs_SUPPORTED -#define PNG_WRITE_sBIT_SUPPORTED -#define PNG_WRITE_sCAL_SUPPORTED -#define PNG_WRITE_sPLT_SUPPORTED -#define PNG_WRITE_sRGB_SUPPORTED -#define PNG_WRITE_tEXt_SUPPORTED -#define PNG_WRITE_tIME_SUPPORTED -#define PNG_WRITE_tRNS_SUPPORTED -#define PNG_WRITE_zTXt_SUPPORTED -#define PNG_bKGD_SUPPORTED -#define PNG_cHRM_SUPPORTED -#define PNG_eXIf_SUPPORTED -#define PNG_gAMA_SUPPORTED -#define PNG_hIST_SUPPORTED -#define PNG_iCCP_SUPPORTED -#define PNG_iTXt_SUPPORTED -#define PNG_oFFs_SUPPORTED -#define PNG_pCAL_SUPPORTED -#define PNG_pHYs_SUPPORTED -#define PNG_sBIT_SUPPORTED -#define PNG_sCAL_SUPPORTED -#define PNG_sPLT_SUPPORTED -#define PNG_sRGB_SUPPORTED -#define PNG_tEXt_SUPPORTED -#define PNG_tIME_SUPPORTED -#define PNG_tRNS_SUPPORTED -#define PNG_zTXt_SUPPORTED -#define PNG_STATIC -/* end of options */ -/* settings */ -#define PNG_API_RULE 0 -#define PNG_DEFAULT_READ_MACROS 1 -#define PNG_GAMMA_THRESHOLD_FIXED 5000 -#define PNG_IDAT_READ_SIZE PNG_ZBUF_SIZE -#define PNG_INFLATE_BUF_SIZE 1024 -#define PNG_LINKAGE_API extern -#define PNG_LINKAGE_CALLBACK extern -#define PNG_LINKAGE_DATA extern -#define PNG_LINKAGE_FUNCTION extern -#define PNG_MAX_GAMMA_8 11 -#define PNG_QUANTIZE_BLUE_BITS 5 -#define PNG_QUANTIZE_GREEN_BITS 5 -#define PNG_QUANTIZE_RED_BITS 5 -#define PNG_TEXT_Z_DEFAULT_COMPRESSION (-1) -#define PNG_TEXT_Z_DEFAULT_STRATEGY 0 -#define PNG_USER_CHUNK_CACHE_MAX 1000 -#define PNG_USER_CHUNK_MALLOC_MAX 8000000 -#define PNG_USER_HEIGHT_MAX 1000000 -#define PNG_USER_WIDTH_MAX 1000000 -#define PNG_ZBUF_SIZE 8192 -#define PNG_ZLIB_VERNUM 0 /* unknown */ -#define PNG_Z_DEFAULT_COMPRESSION (-1) -#define PNG_Z_DEFAULT_NOFILTER_STRATEGY 0 -#define PNG_Z_DEFAULT_STRATEGY 1 -#define PNG_sCAL_PRECISION 5 -#define PNG_sRGB_PROFILE_CHECKS 2 -/* end of settings */ -#endif /* PNGLCONF_H */ diff --git a/libs/libpng-src/powerpc/.dirstamp b/libs/libpng-src/powerpc/.dirstamp deleted file mode 100644 index e69de29bb..000000000 diff --git a/libs/libpng-src/stamp-h1 b/libs/libpng-src/stamp-h1 deleted file mode 100644 index 4547fe1b5..000000000 --- a/libs/libpng-src/stamp-h1 +++ /dev/null @@ -1 +0,0 @@ -timestamp for config.h From b23877cada80b37d38c29fb571fbc67fbe610ee8 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Mon, 2 Dec 2019 13:07:12 -0500 Subject: [PATCH 140/141] libpng: rebuild 32-bit libpng static lib with GCC 3.4.5 --- libs/libpng-src/libpng-config.in | 127 ++++++++++++++++++++++++++++ libs/libpng-src/libpng.pc.in | 12 +++ libs/libpng-src/projects/libpng32.a | Bin 309324 -> 279572 bytes 3 files changed, 139 insertions(+) create mode 100644 libs/libpng-src/libpng-config.in create mode 100644 libs/libpng-src/libpng.pc.in diff --git a/libs/libpng-src/libpng-config.in b/libs/libpng-src/libpng-config.in new file mode 100644 index 000000000..69bf8e33f --- /dev/null +++ b/libs/libpng-src/libpng-config.in @@ -0,0 +1,127 @@ +#! /bin/sh + +# libpng-config +# provides configuration info for libpng. + +# Copyright (C) 2002, 2004, 2006, 2007 Glenn Randers-Pehrson + +# This code is released under the libpng license. +# For conditions of distribution and use, see the disclaimer +# and license in png.h + +# Modeled after libxml-config. + +version="@PNGLIB_VERSION@" +prefix="@prefix@" +exec_prefix="@exec_prefix@" +libdir="@libdir@" +includedir="@includedir@/libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@" +libs="-lpng@PNGLIB_MAJOR@@PNGLIB_MINOR@" +all_libs="-lpng@PNGLIB_MAJOR@@PNGLIB_MINOR@ @LIBS@" +I_opts="-I${includedir}" +L_opts="-L${libdir}" +R_opts="" +cppflags="" +ccopts="" +ldopts="" + +usage() +{ + cat <!_CI`hQ&emyDXA!@d#$w8M6D#XP#k8-skK&3}p4Y|KI2He?HGMI>Xv) zuf6u#Yp=cc+Ux9d&K*OOEXipPcfQZq`V)HpgZB^YANJsYP@}Ow%hLZEjiLP?7&wUG zpX@A2ULQ!(J(K>w`TcsmB>iuGFOHR@|Nr}^b>Q{aLg`O^`}UK({!f1G^^(_r`StEF zMH1i6Pe|VXTVDt2`G5J>CwPkV|GMvETP2_W)8EVul8@)tVwHUUZ}{#yAo+ZC-T$rM z#GI@diMeKLVs843#OZUb=3I%RkW9|Z;fZ-k85!BhDx7LDn>lDPQ^915nvb6>J$<|ir^sLnE#9SSos!U8tvL3l@etVskDWsXF%Tc?8F?anr5`=**r5hX_gs0QFs7HBxh$q zc59+FJJFJw92z=cVB&OJYO2PpZMM6T5EYQw1BG;>l4*M^%cBYisQ0JXSr zZaUH$$4|GVXQU*~uq4gRg_fZ>{8+7OH>4$Hr2vl}_uPfq4mk(go5nqf`z#Bx=5Vy#It60J$oGt}lYvq~H@ zdSt9x6Pa0JYEGiQ37iN>G+C#GF}EHkDjCTE*d(b#lz zmQ@`j`bL2$H+Iwrx3Fwb35*Bnn23mW>zP4%Z8yi9m6DSU>ukU3%sJUubJ@h+mIrkst4hd2^CHKHDLEH?p|6RhTUEs==9rUh+6+i+ zW+i2$tM*JuOZIHtYNle;u|p|tGPBcDv{}cEOf$EhxXGeZ%sF~OHkuQyb8}RKqQa@^ z8L$iwBnGV6l0oxfYvSbW%p6R@Y+Y=fGbb?z!!aW_F$c_a#zs}ly++<|mtr|s9&#{N z6D^n|)b)-yw#`F3#Kb@pa}u*tQ>o`N(~~XPSvnQY{mmRvh6}~*fj2;9=9$6Mtj+0J z$?8JDtN+ccR@(3^rPf1ebFOEbgyijK3-Nh&JK}q0%H1`wXAkEWtH!H}doW#teIXWT8OXjmq>kM8=auRH~y^KuembcDY6XV# zX+6)VE@bP{Ny(4uIsgt77Fn!#y2cYOCj)+{Tl_3&o6{wxwl43^@R(?IMLcI)U6wWu z+pS6)!|i5b=|{&w)@$UZnAJs*`c7ACN_uWicCHx?N4tgLcV?xu%1lkSS+gzXR(l|FpK04bo3q5+r_xoOG5R#xPeEC{ zZa0c{X*wL%&5YJOd1Xl{w7<|1vi+HU1Exv^LT2D9sa~R-B#b#73nmg=1CD}4m$?K3OD{4E`=P%6tsN}W*JB^E}c88D;b(sQ1q3>8U}wNL}Y!Q43&clxHAXQXFw zYPLDbwWeq;QTqh2P}PXq&&N>7wy49FQ)u=C1JkwH-RtTQ=0dp9q80i+MtmhPDcQaG zA)@I?$xqF&WZN(k>D;x}Ic~-9m_g_RIt+HfIf-pCNf|k5>h_bEv1DRqb_zCIZm+O) zj+^PzHpBtMf=5(*f9FwDx5XtI^PC*SFWg+Tb%}y5Gp4)ooQ|)^p@{<$2hsXG*qu-7 zI-xw8pcd0Nl`ZO??DY%2hrqflcXiCL*n)1gBxU8&-b@%Biz+b!kw;#)<~z5}(G8ar zG?}KPc1zJJWnxSeAa;r54B1nmu4N$U2BH45SOstC6qtRmbl ztcEa6Q5^skG4D|iM7k%!?c15Na8%5HDd*anZ-8$yaAWQk}_ zCgMn$h$5!q+6Ts;PWexn%{jlxmD!_i&#Ctf+FsIIF2_4Nw=U#P*YkV=(7F-rJ5@m!kP=xDCbB~xJ^)}?;i?}Cf<_1uN zLAVv}eI4Z`+YrUaRWI05tCc{Xmy?7&o_?8_ZApix@Ah0Zht?CHnt{!n+8n+oP1K=C z?Yx9$)I3GP!=~U=nROG5JC8HuX|XrZF2|`pJzZ5yw5kDsR(aNRY+Y0%QTIHYRlD0E zeU`pnvA(Ec(Ip9weBDUUHJa1w5Zb1uZB43~iVF_zG`3zgOL{IY_~C^psoKkvY{q8a5K~mk7wc8uuNDIg62BOT64FiW$Ok!oAvbs9#yx= zZ%4c~G;L*UL(;CGZKx1|ZzZkPNv(F7qywJeF$!Cowb+NMCg8D$)?=+n>1yZj4JFUR zrlsv(Q)IQ-$BG>H1{U*(iq&>4`ke`ju(aA!xG~x$f)^LN2%h9i26M9XV}PUGvxJ^l zj9VR&mt_$wHGrA{8`pDmJ2U#nW!biKjgrZI#F)ye6zrtk3#B#+H%78gw;HkA}yjx$B&(x=Xpw z^B8CAL!E6>4?duwp6sk{H8OLP$W_3}fLu(d{j%@VGIDdx1KQ7-l{?2H1EU)yHQqQa zs-7kdy`N5w_Qz3D@%z9a93vex@WHSL8Tpf)$9wro^qH_mlAdOeuU9{six|v*jAlvN z0PtKMPe*x6l2MYL?8n9z$NkoCxFnVKo1UBdTlpG3pXe;D85)Bn=>Y0(Ucsrh;!imK z$IIWv#wzjtiYdUc&uVa#&gp8u;6FQ{cu~BUBvtMVEp0p(9i3+EBuTLiRJ5_{a{UM8 zCr`4U3M@A@$x3{n5*1KxIul)PIy<4<^z*24)48tYre8Xjo0@MaH=XZnzvMq_*r)zr zW8d9kzu0khFQ@PIRNr9d$gWL_&Hswm7qaP;{8iXKx#H)y3@?-!p4-vuE5o)j`>wzz z5)*bVM>)qnTUp~z&JA~wIE-2EJ&oJdG~}5SrzH3*wg4q6&{1pcgA$?p&YuZuniXXD z*B5evzZ@0dG+%h^i3Arhh>1xXiN?jT#sME%ikzKtvvcd+lns8I&duL`DqyBW|5y>| zPF^&a>B?!nON###phQZE1D#^>SMmZBTVQj358#c~{z~|qJ0%}U8b&|1`}*&5>@%z^ zb2J-PmfqQdl8!Q4U#I!pW7JsU2lmY)=K32}>&-yQ};1o<&f~bxbL*Y&WP5$=Eme6Kp%ADaP zL57lo8PHL&V@69$%itYW1EebWT#~#cdD#x&%n<$&)@DJ>s)lbEoRqjd@UE@Rp} z5zym+8bDa#coL9w!#pWQi4TcYOu^B-UP!9gf+oS{kP#583geiA8f4#|S~oaKZDG!h zgsgB#zk(4y^2RGHeF49ej*fP2B*CajlNuhs+R}plL%~kMI58ecXs$10$~zsU)}yi` z1sp3JkK?xrd>|?yBeY)Opc;s`yVeSasE;$#)OSIyrU9_rZSQf>p{3|>Ob@+LGZ_${ z3ACE8=SWS5gsxT+u2eGn<@QBG0RuA6ANI9k2dsTXX{W07UIs@ExG77EA)2Go;Mh;8 zRp*dWOo4Y)HSaPS9JOevk`Q>u{^knM=OI-XA807vgL#t?tq(Lf=22p)gwl>m>vWDb zTBq9cf?&>P7=xg)0SRIFlT_txA}9r1y4 z`zl2Th-az6K{JI?L|sU!AQC^)pI3ZmOUu<387WfFdVhoCdZLXAyyL6pe?t$CP>N-R zLk&eiNWwBEDwBLeYcXqfYV5I`V=?7pbPQb`F_}w-mW4gxJNphX}lA|4TU|(rdi)SK#j`_ zDm&>Dhe>w_;T_ z(&|7|o>3JDUD;1=zvC-nSVRQ$k)QD=^%a)!vU&c>6M=E6HAMQ`>(7ghuZRp}1tR@Z zD)rt8T?)byz+B2xMgyFp;L96e({`4bAG6To{FtwSms9RtGB2U@=g zT0eCe(<6peT(mIX3N~Pf#`OhFp0E0%rqC8g?Lz;?p?nz2m-!rkH94ruDAm5uRcyf1 zNO z{*{gSi_O*%u)BwqV7OU>D_DV)~> z!cs$F62PGWhQ(7E%7;)B2-U-|I1+#J=lgayEFQ`rzafUj0~pj{s9|w0K+M^6#@9tV zP1Q5K)WLwBiH2i)o7=P4VZU(eY`=2f{>BlQJ0iTD0gl6Hd`zsKs6r5pN>zNEQFU0R z;9kX7N6++%5tDTEXXp~yO?~fO#L`zG?b#NwB$ISFr*92;; z5GgGX_X0+10y0;%u>+Ys>e9Sr=3g`a5k2E*whoGkalRTzt_O4YMqnubPx%mRk$g3| ziu@>8OLwpq8V%hivX-;`!lpsU#wKGY_uu0;k$ZcsbYPcO`OI2iCz!x63`cLLMRHp_ ze(V>#t+zZgbUUqB+pcE_Uu!39wyY0g+Gq}~4BZ!YF|T`Q>G0y9;NnMvz3}z6m-={} z4ZFCYk-5;LZC`Ik`=o8;JU0GkJ56`n@Rb_Nbp9c%l~0n`K2*}!f{(}CJKF%IAROhP zkY0*B5|DFH{uMc@$r*B;z0q$oi3+z+KJxQh*1#bNO|yTHo5^`+b(6XIHlEeSZ=Z70 zVNx`vHn~dPU)B&@9A8`37+7qomaB>rYRVe?9hJqVL)Jl}&U^HA9zdO>Z>?UZt(w(q z7?N;c_79<@_Fa8+)t=Gs|46f?*6aLeN|a6he7J5xZ@0irj^E_$?a?3PWGZuBZzg}_#c9*oV->K1X$quWM;qTSPL&`Y+f}>2LaZDntRg<|mjb%(fu;+qPwRe8;st>-gOtcnvZW7XH2xcbYiqN+>L1?KohMa zk!$3NGFLDfWWQ*14zI#^fpHjC@d0zaGiJN}(#^9vIft*cU$}Yp)aCM_vL6BsAMa_8 zx|?(Oc2Ldg;*42~QnT-M&XNotf7u@CM3wO<&Un@%PUi)*%IOG1L*i!oxE-nJ$vSD% zB0a>%HrMqw+H3gu^Y*Gy+P4GFl;NG<+te(%a0{K$ZCez#SafN3Q!^iuJhx<6E)f=|$uwQ;cF!C)Q?svCylz(~QeYc}Q58-bQ z{54`T5~tTb91{Cy)SX^8x7aJZCr?r~QWx{?!bGoz4!DvGiw`2t^$-|AvF`O+3+)78 z#{#pJO--}~x@?tHFXV~+xi#T6ae9}NjOMmIxL^nBs&48 zn&zwg`Tjn$XNK-W`RDV|;u3oSe!*DdYG1_CoUxsh;fmPFiHGVU%ecG*!T ztk<5Bh`XVOVL3QyXYGkP-={iF0gWYqcW_wL?}{O_h#R@7-d~cgY(}mme?u`#+jLE^ zz>;y-mqgsqMzC%q*wo>%qpY#Rj3Y+H8VWC?H0n6a>u~)Dvx`l;f>g9(L*Gq8Pc$UM z>4zn_!ccE?+Ra^Q>Ve)u_f4i;6VGk5H=9m*8yw_}Yi$iEiRfA~?z%Q@HBehKk~6am zg40BL^83rT|h5+g$^-j-yCruFDt@ zFcIdVv2iubl9ilmD4dPbv+o{ev08Erj#wmIW~QjUD4RyDbd5wB`B|Bb-wsPo%E@g! z2-fE~YihM?9asYuavc+Z+U@EJ={)>(_jn7%9si8&mkqwMv!J*A%$GO2BDk-4x;e3%sgx3x^zCP?5gS`X^Ri)iZ#(BZ%Zlh5j z8ohq#QRmRkL|PK(3-6Z9-)+hrodMot0wr<&$S8^E1adyuJBwl8#cRiqs1vhIis?k} z-CJ5u1V%kdA7?06uBcUHeJkUZ|UQ@&87nof(Rw@Y%)P2a6 z^8yfNSK?10UmMPEfQ z#AL+2O(&_*kCw#6mmLcXtt_jDBE71h=D0~^$NZf`0~@a={=@C%M*GDMhQ$L>5+zJ0 zok1OktO~#=wH@dBm{Jlkm5&Clk7+_5k3k=+0*Q1JCw;smB0*33gdj~M(jX#ra?&SD zB9io^(*OtQh6sDa@n5ySPYM+mA2vYG~P z3|r;TD)P7hiUFgApCFa zPqZbA_Ja7=K%In@Q^`9uIgW3wF%iKNZu}s|gCgowjGH2?$QKpaUdZ2e8~#eRoAS4X z5Mcc)`lX0)&S}({@7$C83GOpuoJbjznt!wz0uu{Arg~Ldhj#UZbI~0)}H) zG6DetXGBMP{e@vLHtd3z10DA28p>Rhf?s=Hpkyd~h!J-JF|JpIty;&jJKz^_+tKz5 zUbyIl;H0l%<<5fRwC{1$SVMsDH>})&KY_SfQ*e~w_ZS>YS+U@s5#-wlq1l(~E!vmf<(Lf%b2@hoYZ5!vz{xygRa z$6i0wInw)z{laatzW|3`H((F3%^$|t`0X~DI2sSi&D$Wn)cD0VS~43ekoF~DTXUJe z^`(NNr67*5S9-hX+G2BApf!-=?3LH6`s;KC`Qfh7Jm27$&H#VwJ??zhy};QkM@P8+ z!ZL>%977q#H^N00t5(zLjJ?v!h3heD&pWq65-C2klFd+YakzMz2XDHGum=0I zsRnf6prh>&z|jEj0|+XEV-y4Ytwy;yvQrImZe$23t}mzd1mNoaLlg%GB ze!V=JbD$>gY^oA5pE#tS|70D{sTg@KUJ9OA*AGJvCf&iU6XRC+D(64 z$|>zjIb4%6{wy;x)*%V?BxO`RR;J<%^a)(#g1mYzYMK3fOW99792X6Rv~MI`jv*3L zLue%}(FKt8QzDIpHfv1{e@d0KGPk2jia@qi*Z6IgYThs^)8>@%~jzyr-P)vsa>{qeTe-S|Q4qt;K z2Y_6~{NVLQgX1+M*JA+CZreHESGh45k#=QbuygpDupNdauOr(zJO$vg)c}==A(! zbA#l#VCDXG#P!BE@GD1z$n%Y_ttZ5=ckr94j2kQG_LSp#Dfhq62>QtL`@gn{2yWcK z$hHzXcaR)0RE`^*UwKlVAFkYA%8(-~d`MHN^0={VTGp%@(dyC6;=-B?g$vb_agtLkNa9l(;Z|;~G+@j2c0aBLp4}h1Mc)ni%1A z2nX8&=qONJ!xA3jWAeJjVa;mmuc@;!x%lKiIU}2f_1_kL=d7NeE`Xh4K#c7w8fZv1!R;f!vFV zTDgc-gwUp^rQlWLR}GYIda}*`BU95T%$7K{sZCH^cG@=4j)2B13H|9xu%^>kK|t~V zEut6efE4tp_Hko7$pf`k*Ht&Z)q1@4k@qV%$Q4SiuUv(dwA?4xAHD)c1eP|(Wc=m+ zrxM{y&ck5Jz~Qj7Xj#Q5U;Ii+oG*3_a{LJ;EknW`8?8xHUeA>PXY67R(<2lF7wiLr3lt4bLcqJUjOz1JSEpXK-i@VG%( z#R!9m5SIfVRpJj2<34auLrW`0g%G|mBKn%PaG1JYzg?&&1h)n2+`8&kLvQ)D?dn>* zY#VC)8o*j_Q?IqLDRR?Ykr;Vxh~b~WT-p>!^raI0P~v|sn!!OEuy$&^N`iQ<$cg?` z<7uo_|8vC}9IvZU2*)W!?dRK>4V5>oS6Z{#a993G7S4ss9ix&|-GC($M#r#nG z3{seUqDryenzkC2WwBfYqc^dF1$mozsqu_kkQ}vvb~>ZgQk$sM2E($!tW>aUdS5N| zJ}-3>!-vSGckCB@4NI@5WYqh;_k>j$mie+oseIwys7)27YMO}=v3eyVG zi5ztRy#pO-%GvE!&Zj~-yCIf-dvR^$tnzDDISUC*%85G71_4*j3a%W*^uA6zyV}>z zu0N$6L;GS}!1CL+kA!ws^!^GLC_tmczoVG2oT;G+iY}FEx|v>UI#6qR=iAB{*p3=M zxwcMnsn)gz^SCBVE1e)Rfv&8j-rORiD!-cijZ57rDBm=WjvH&U3}mtsP@Qiz^fPCa!S zXkgDu-T_Bx1&*9?^|+6;{rR4%giF(oN(M%}$Dey`G(+8=lJc89-OY3~X)v!maZQm_uj4?nUn zoSa}>9IK(>m~euhC`QOmiS(uGNq0~-oY1k9Z8}jAj=z99C{OsFukMY5C-r``P7tSN zWDx1Un7M$Id(=^farT{9eWT|0(DGHk8u>U!W+?nv&0mH-W>s;o83*ns1fZ_nO2T1Y zSFNFt4g^qLKT|_UEbd27K$w~)5$&|4p)i36(5wjNKPwZ0JP9hm2_d=Yx}IR`1HXz@It^~lY1bEUD`SN3sD+Zm}($KbA>cD+sRs?aRc=(m-BtiEH+Q*G0} z&zYyHdN8af<9ScQAwTWvLiKs>=KffHmiFs=OsmhceF0S8eE6zuHUO-?b-$-i@Am6! zWUg^L{pU~hHR4!S`|bPP`ko`kZ5McIfmk;5{fBMiX;(DrixWnwZmIrQ`~K2?eOZKfhgYidIs(Y8)&lY?5CI$52zI_{s@eaU(`F zVvD8n%AthIL9Ahy5{+|IyOq&!-}lPS!Gxa^Eaz1zqeIBO3^&TAYD2MuW^2U#^XM;} zd>j7SKO@eFCsD`|0f^!!=`Xe$Q&=Wdfy{9%L41*Tm?*HbcmRJl0kyEg5sW_s^{%dP zgaAN}gmCVX+W;u+=&#eaTkmq2fnlE!xnYTfOlOEc-|rX-YfuJDP2mx0H_)uAMx4Uo zw^f*SbL?JV6AAlIhTY4tRltrRY+r=RD@;`!djQyhgk6Qjtip7FW2=F^jj%s34s7GY z)k67=0d+bhDNJ1;E)2u6fJ5`4qY)HCn-LaFEf|NB)3{I<2qy-iNpXteDpBj`6yCT1+1ZDZrZ<$R zP4b99+0l!Vw)L_lNZ#0!!I<*ik*5XAuh3*KPw1&6ypN8Mr-jIoy_EP3*t*D*jPis& zifNY|*MSc&Q-#^)7=SvH+f zvTI6<7^Q<6Z&*T+c4rBrbTZ7c!Hkk!UV4d9zCwC2EHM)0B1Y+8m}S>7N_M45t({b6 zSVHcNRy)HiI{}P((MheH6lz#P7NynBFw4lM&l~G%!Zho|O%(tCx2y8Z9;*dx&(jez$xvtm2_m)e@7s6!D&w?EhpcH&r-Yp~EPH|4M4`UF~+ zYBuF9Tu71qu`u1$ENekFN2k%H#P~HF_ZY`Ls*J<=$#onzisQnSaREyF8yq)~> ztHiJ8xE>rAtc(l7Ueh^sP1vCYUHEmurSFkT8x>ISC6C0<9gFKsf5kv_Szx#FA*W+B zl+%!nOHoWC4mz2kIGPDL9M7`Wu#yYXolm3G!s&`LnxWUR5({EE^*F`(C_}%&sfTdt zL5gzwd- zac$*5R{NzvH?4MBIfT$IDEOm1u6F{Z3;r4$XR!Fyd=?3gsme( z2+5*#*MtA8YJNodb_Do_(AQK=sVYD)32@Db>9sYG(Y^rjIsw|(z%EsQ4=((78fZlM zb~JE+(AU(!ZdHIt65zkkz|8gqh|>wsz6SQH0@R-W?=;{-`F1q0kIu)&aDd(Rp9^T`$82;Z7HhcP^j_Mt5RB z=X9A?%axk--mRVMh#SYIRkacl%4$Z_z>HtCXS}UUG84){9gB}q?3v@&aElOAN1*uz9 zf(411C=272u5{Ff`bEneAuN9j16Yy$PQ?|PonYzTC_J(C_98%Cd+=-olQO$c~!7b zWG$G-N-fM~C48BY5;~cqA7^NPW~YQ6&(S7^Ci~z_?&s)!42{4Utdpp3=jiSX9mEWi z&>b22nf|E-QO`;FxJ2iJ^zd=I3? z5zl}+QxI+@nOb2A!I^bzt3vFhenU)whQ(8`>#8};Jr_XuErU401vo0yz#O(T3x8|;c9YDdh(&rI{`{*8)w>;~3(wY7(|x!#d#W$j?5WvP zm#|JTVf*)nY+5JBzfose$6HFLftz=k431AwwY)oYUpQ}Y&A$!BWF3yuXKt=(_n$tC7_ z1g5Qa#41cD1y(BYTji$SRcc_x(Tsb+427#v1@`fLRM{`ISi526>r(F1F9OG}CgLeZ zqhXO42N4r&M_XsZ@?rOsU6WUiL0!Hvz&XzgA=F(pnY(HeN^3I96;r9bw12TrgzFcY z#o~8I$I>{^HRE)hX*WNtuBmVmwW8WZj}(AhjS5aJPgJ|!8qzp29Q8Rzd=(8>+`h|q zqP4$f7I)WGk3#{-XxP@xR&Br3&vtMehUai3At(A73YHpoLR-8-ru7F=4F)4GS6B%O zs-UI;RIXcjUi<;4#S3R?XZLlEz~lCi{Y)TkOFjstjE!)#Ec^wgRqi9XzQI0-3Sngx$eZe{3%drpJKN(?|uMEYTQ3W1@Q)&I{w$1=)G@fs^@94kjKYRD?Eq?Ug z>WK44%YN{Yzrsv*EG%Ku>|jKRR-muNtT?V@{B706hEa}M+qv?NlIsapugi!!QF%>G zrTmra7-q|H`9u2QTnN;O!*Oc!YZ^x2=pr@lVUV-&mUnwy4bB+uQzw{8*LLvZ3D@5N zYGW}Mu)V?CIp6zy4d%JNIA!1($opy<{^;(9v7hQgH^Z2MaEn>MtQ%-LGZepu#^QW6 zp2RXM5c521k+#PRZH9O>r_#lub@*s#fkys~Lvl%t2K9XDgp$YauP*K}%6`>v_RlEiH~XRTj{P=a zHIN9`*l~1u$Nr-m&kf^EEEoVzc&4C>f9PhEYRo2XcRguC)LNmC_~k z&&Oc*YaBp-9gYg9_NxYEFXHj^C-u=U?Dh@Q z)eYDkm^^OZP@mt2iGj+f_i7jlWm2T>ehqd7+5DTgW(0Ki5HXMtd~b=BC;pF;bD@q&U*@X{mopl|r^crYaH z7N(<;==_y<6p`rF9o968MI0Vxgao<^TGf8NJVoxW6FIcTZ?K2Rx7Xxdg2 zP`Cl+LTv(MzoeMXRqmvqJ$pnSJ%0nw`-u0)Kp*xi)HtgH?vE+1+F5G~INUWHT>0!p z_az*@Kboa|weCIKl@K+4qw)J~nTDkW-s1+GBMFyq15T=9x>U&?_R#wN8}=|aR(}iX zzfP_K5g@KFCdU*HInq4kAViJdlfNg2`$iyM1J-}EANGrQGzI6P0`oUTW6t!q&e6-m zh;i=_^&jh>t~o*gu9#wxX1>nhu7to|uU&znt};VvW!jA|Yxe_b{m><}v>5j;pi3%u zwqI$!XQhPrtx9#bLmf$I=DpF(*f+k^o_{%#-EoHlTu@E#a<&u4+;m3XfkVFgk8P%@ zOOCJaeNo=A|CoGmGkKpAVMcP^f!<%?Fw5a#>mbbjdK`|zts!Og-ng?PdU9w>T|za} z5R7C<9&-1}J_b825Eu=zZBs!bJ(mWKh@7x{(j;7fPLtr?@UWN?zZa$Ca@qIOg1p`A z(KSVjQ4$ssT3eS;%3D!qDm~nFIn#`P37wJJU+;AxbRUc}Hu^}Po`<8VH9M{Dx*BBF zerxcn;h62>VxH+Vn|;`o$^>?#AgUo%4tOG>;4<~dtQSW?dc&frm^HNt5{+jMS^SG! zT@tm4YE6}WMS&l9fnF%k_#Z(**A#Z(c6QA4zPOS9yzPL#Om*Xn+Vf~=#=v?0ZFIF@ zvZ{`v!jpTbNChiG5V298)}^qfVQTSR9U&ga6Bu@R!S^0I zU`-&M(8oph&vOxeqo}@OR+I#xPosm)4@wbh;BVBcYdkBgwcq8Zt-o4)2UnVCg`fer zocb4QzoQbH3?-jrg?r)Hf|UKTzhPN5p`%XVVsODuB4yEA<=J9Z>Y2Gp0XdZ@sYCn(mcuILB;Ri^GasC6F0^JqPT84uk=SM8am!8Dc9=d0~ zb`hzs#;*x{zdZxbL*8GolT5x%B_2xahwG*7D6Ko8J&#~>rRAN{RAxKDO&dnip33&Y zorB7{Vg2&Zm&F-}yY*-xpZ(o`tuWJBHVe{O-``f)Qq1hk^k||`7Bj2E2Hx3$+nQT( z@C`kB#Y15+DAJC?9wK!63e#Iz{0VXESbHj~;wr-}PXBB6r8|rL+v-}TO;EV0aXm~5 zYaH)tJU|uWq$@7epwnqwFYSdL4Uo+R6QNme>!gxr=^+gz1#jYaaFt>4j~F;me#zpu z7-H7L#XA}wV#hJ^QBs{xi-T?&f!j7=5QfEfU<2e%&pP1>q)nUcM9C_;E5tdirQCE} z%D;Tw?2Z5ed&M8eSWreR_`BpQ`C2>Y=NTbtCexdRCo70e~TCp8w z{tH_avyF!2ZW*Oz_ojct8ZbTn?kIw9`bkt<}M&{{kpFgJuoCh9?J zg_+5|Ya@_nIZ+aIxWZIQOKyc}7pWRIxa`l|g~J4)wY|&KvluwjjxfYk%C+s5o0w1O zT%M1#y>#KQUs23Z^f%O?-mt2~R~i1b!&xkWVv|?CluvtP!-%l`a{Q*o?sPoi&>e6z zO85T|p#&@*lCUXN9u#9a3ElR&%B~% zBjLt~9klqXvw_QTPCqmai{HjP&}yizBE$|?02GLU=jU1kfQ|KAF^2y~i~8STdhN90 zIYR%|XmZ^E|EShft*yfp*y1}NDOg*V)peKz24GUwjC>$=M z$8saWw2~$(&GuaH0O?kcVey+D3e%=p#)_^!Q@?K`vvuu3N*}+#{foF3kNrBHdw{*T zc&vam!hW&K!iSs7yli3HG4){Z2kt*9UqzUz<2Epo_J1#5P@bo!R^d?zcT{z1lI`pf zRu}H5dTjp%dg!0r%w`_`0Kkt?g!Y^4e#t)Y=PA}o>Q-*2Q(eUbMc`4Rc*;G2-4N$~ zx+EfKy|>kAL(=|Tv`>4~qh|}h z)xX_j`SLF-UoCh#Wm;_1=#k;Wh75jS(16hU`t`l{p5DFgzWc5_d-nY6U;c8(9Y$l1 z9=G3q`)#*{goNCR&n>syax*@`_;jbwP3&_c`vj?d2{g)sA|D{jI|Jf&BYVPo0*Pb`rd(#^?e-={GBjhiOdY0XFq}S1V z_ViiX@5%mw13nly;{M$aj2Qeu*o{M;9=dDTb&te`JBRNWaVFvx)3C^Cqb#F~#;hE> zcHEoe-;R27!rFd80hAl6Q8`gh|$^8az*~Lz zz5nt1*ME@lLB$7me7NAlZ$9k*k^Ir|kA`kox#9GN$c?XVJil?m$8UXn_2c+Y-uc95 z)6`AxZ|bo5@y#D@?)YiKryqXWam(Xd-rwT4b?Vl4w|af{=x6IcyZqUNZLe)Rw=Ht} z>g|o&hm|fZtuGx=W-mKXcIS>+JIZ%--#KIFCp$atn!M|+U5Io4d&R$x|9e1re)*T> zw^ckVH1? z&z1j-`r_Fy4u5gimpNa4`lWBxgsRn5N2~7n%KFu3Uv=0wao-F3>i6~9|MdRN`@If~ zIq>X(nghnK)4u-K*UeuK`=;=l&%e3h;M9X_4}N#BPqn3bQ}xyAku`G7mo-6$rX5;) z=)|GkwOO?v)t;{%dN}{^zYlk+i>iCJ?(4dnzkU4Mb>ANU_UBzwPS@oOi zFV{bOH2>(%qkhLm9g~lJeyr>9iN}{8-*>#*iTD$%P8>WD{N2>=Uiz-~yO8f6|NfQl z>%PD3(5R&TXMGitk2Jn{5=2XPkui8bH8&l&%Jf-=(*c|nexl?zkK;i=VnuLe)E>*=H}4z z8Ry?RfAsvV7baa;e&O>Aeit9PIQQa57k|8X_obvuFJC%v>AK6KFBe?ia{1ilzE@JO zth-Wk<%VC!{aX0z)?a`5wcpj$t81?wyc*atx}~6HGu-kZsh2cVik6b4*^(lyl|GUx zq+02WHUTGMejR(;(QkQeB|?;Pq1&4 zZ=vs2-)7$de%XHS`u*s4Ux(Zdn>t+WFskFT9qT&Y<3G=TkN<6*ES+|DGIpNZ`RmRD zx;)$EY?t_ePXmlyi@Tof`owj6uN!K3&u~ZJ3xU^NUwpmK4f!`n-3q$-2FXEzH@09<^Zf$}t~|{c>E>_-+%z zCMHEMiP;?Min}#FdeY*_WmB$B9roBWkMBt6lomk?b3%MKJr625gbJv>kmAjwY^X%RgU%XiL+P-%WZ24wyb^W39hp#`<@92c%Pk;Bq z$x_#;##>KEH7z>(>A7E;2VS&Z-UN@cx#p41n=OlnG;~4uXV`__@5P_}*NICb=5!6S z({pvCqu+HJbH|ovMw~+agWo(>Iiw`P_2ROhyUIQT%DfQ%dTrz#zrI(U-GAt5Nt!b- z^~zJl#~!r1EWd6#(~I^_(!TrG7;l*K(-tH0x8E~qP>27FfANmVeKHf4d{agF(+@tn z?u*_r302_V_Twd8{<-jc?3?|9N3$EuJSf26%FnBPGGkvo+kQUP(EJTW>EO-w^(f7g zm+&aad`aqWlcXncG->ril9YqE#a;98A|~J;&CWJvCS}bvPM>Qv=Nj>{S7Y>qQAWI3 zGK;+*nV3XpTk&ez^rQ@9Hr~3Mnvp%*n4V?CoAwgtC1v0R%e{I_q5U4{H}FBw4$sNS zNawFyHcq$U^?}CO>DDwO-Z>BYz7lX&qs5k$g*OQE9F&RAdMYb>c9xM|IcYKGB+(l= z@!CPH5_%C{BFiITJU(NSvZP4!bSWyyg1RmEJ69TO%fdH98g82*#hG)YiOE)JLiQ|a zq&ZnK-iwz2_Ls)Y$jZix24|oS_A+K8y^huh&}NpT&Rkj}8k>t(M;m$LI!9#Z%(bM? zNV6JyCHFQC=pQ<`FMh&|5!tz!(8r?|n>ERUC^RgLi24ucgP%e4^8l3@Y#fzg&dM^z z;$7URqi?i1&61m))wb{heZk>Dt&&kQQ zSj{QMdC-Vf1R3TzIp$=6x0vxF?JQ$*c8XcbOwY|FwT_==Oi53s7jGw7=Ke+r$qGY& zshCqFyzkOECN;bw)RyNv_WKB*ps>~#7(hR7{hBi`( zj3f(QR;(EyFDa7l0jLq+_0TXDZnHEVB|$qTB0{SI>@zTgbMaz2`~yxyVRF_=A-xAiY~OKC0UJW81B=}<}9N*1@HJykvLsC^o;j} zLqdHCni5e@-|W=Bm@Cb#^7tg11^W~;x|nX+%Uv>zUu#2`-V2QhFcU(E=IZG%2Z;xj*{N{}Z%-l;@wJqxut68Sd!8 z<*r4#3EyBf?aA-5O7DsPqv;Bir*9MZFUR*JzV#}65Pz%wz?aJX(eDR;g7%N{{4;b^ z|6)~!X+|#hE%@6D-}}|HC%^FDz1yjdIVp5N^z9D@q!b(X+tt-0JqtSlI4^8=CSMs#kVJYgCa2l3n0h!kDie?P>gC4zL`x+1 zJw#>Fwc4h7;pSZU=2+I4-aPgBdub|Uqz9L9t=B)IDT92&oNV+a=|`u&4jD$WSM zff9@rpPv?@8Dz7lBXGDBy%U~O+xk+|=U@?FtUE#3&;s5 zozcA{Ai6Bf>E08#j|7h1(8o*c1;lIXjLTJNjLS$sGZ-`#P%49F0HWa#BrOGmfeGn9 z14MQcBz*&DG{e;ksEaR7Td~{+0VOkN0w7+;c|cDwTvtC0N)wPbt|;-`5CPG1%{XqG zfQ||1){a{41OX)oXoY~@5)eI`fb*j_HFM};0YwYw1p$=_=!$@D=%kgsPe9KI=w$(Y zE1=5)O2^(fjp^V+K+_pi3W)3Kpvb+yi`JJz0C9WigxJlKtVDM}=?oeGi1+zWflC&2 zIRdvr;OGrmyzIXPZlAz43!G0^jm{qsuj6`wOBT3vK$%RIMFRJnfc_?+4+WHkeJ|%X zM?l2_S|Oly0(wV4n*_8=Kve=dET9Gfy^1ra+$QN&6TIFrfVd8(2_auMnLqWX-*e{$NF)I9_`Gb;R0GB zpqB*niGcdzC^;`dx0`e5SpmHvAUb8wb6W&-1LAZXHvkvoITS6RlLEToW-WJ^fYJn1 zDWGozbWT8Cw`gTM0^%C#3FvWd#R7^1G?U>T6;J{oE|pn8Spu3XpdtY+1H|iCBX97U43c5mpTPAR?3*6rYZl}Oi3f!*(=X0ATOAsJc zK7ku3aA5)$CvZ~*E?3~@3f%Jo_oBe<7q}XM`&r;F3Y`D#nk+#Ax&;u|+EjsiSwQw4 zT8X^^T5Z&DuM6m(fTl5>ZVV#0{4u7Dh2c< zAl{eKU$wISfOy&K1+J%n-W1Tgg6?C1s}#`NJvDw;1a$kI8g7_?9v9Gj0lg%k%>t?x z(A{@wTlT;NBEalYlM=Ixob5C!kk5NI?Qh57lr_1LF106F8@UeiG1mK_?B+%61b_ zk${#0;{09^xPJ(!>p-pSjet1a?E)7npqB*nH$nGLf!ija&_No%FhHE&2!V?i&?f@g zF6ed(T&;jc-mmc+4~X-N7q~P5y&<4?1+)Zra4olc zga-8h#9P@*;D!jONI=T~WihRNAaI)j@v=Jv?rQ-J7^&6q5Fkz$A#jrf^pSwJ2)bPY zcThlsOd7wTfH*&sz)ca*Mge^$=*k7IMnDflYWyAs#QBX9xM>2~E1&~{u1?^Z1Qaz& z;};Kz^Ls+zo)*wa0W|^QJsm$rD_bC-w*<6DKtBm6aI99MuYmB%a@AgP#%a(Z0V#lZ z54r^Il7P(PaV?Ye?<;_~)$JEhqkx`57SDAEXqA9o2gF! z^^VcOM747N(J;eAl}}u1n!`KjsU`c zl2fOx%un6|jgMgiRmh}Rn`a1RRT5kS1&1p?;)#7EgexaFMRQUR?3#7nFdxDN$% zQ=(>Tg8*@<<~^x#aR|r>h;vybaDNw2mn5ykO#-?d5HE4Jz&#|O&joZ?Kqmn456ZL;=kJ#QAMc#$C}8S;^0UxE1@S;OaNS-3qbC@?^a7Y7L_SU@2H zG76}tfO-k2kAV6MXpn#?!Z#YVb&$dZG*UpL1vFkj(E@r@Kok??Tpkw?MF%-9ML=l+ zqKF~S%@L4QKyw7NKtTBdDilz$fR+eoxqwy(XtjXW2xy&v-Vo4w0sTMhy?cCA)wKsc zlLQD5oFGwAQOAlcQA7gxKu{APJe24pA-pt(S3;mXVluoeyNzS$prb_g;JL zwI65gwVzVZ1_eE@pp6Q8O+obvdP70m74(*Zb}49&g7zwCzk-?+^tpnX71XMrHU)jB zpu-CKUO}$2O^zoiC|N-%3QAQ_nu2;OsE>lY3hJvMx>#6RwZDP}Drks;u2;}-1!XE| zl!C@8XuN`a3Ywsx$qKqtLDLj8OF^Xynx~*L1^E@UL_zl|s7gU01=T9(0R`15=n(}y zrl7|av`#@!Drmieo>I^T1wF5zjS6~ALG=oHLqXdW^p=8lDQJ&^_9|$xyrf_f{ckAl1k>Z_oB3hJ+*feIR;pz9Sh zTtS%%8l|AI3L38a{U^ZV-@ z81g{2!GYNgOuYm14KSH!+4JfQ{;hLhegupcGc~KG*8r30z>t#*p93=!m^KH7?p97s zwbOY7m?{V6_Y?=?IOQdBSP#rVNVb*xd%#c+v@op{=R7;66B3v8w$tec%!Ui>ajpku z;Kg=K4luq;?3fwA)Oqcga$sDS+A;S5v&(_`4KVA_2d$p+G%y?b+EdZJLA!op$9w=x zWPo>N5KkXqd;{&6tALp{+@9)IU^ZYs$l@5e#@ukL9a9ZVX09Fc zC}HyKm|s&W2j)3o%JS`T-T;Oc4pv_KfvIv}{!MYPXt3fWcS5^kX+apN*CoKL!_v!& zb3HJ1Pz)C4c3{Xj!om~*Q|7=d1ZLnYGtK~i@e)50(c{MdMEBXnuy2F>SkC}9DVBE% zNTi4{&wv>f6()+x+hLq?ix5>f(VYy5e9cUzeygY!cqon(q>eBEEzA>y>1<+(a5`aT z*;1hBf$rtsXAC+PX1fDZR5Ekk!ir*!YsLB05r+c5j>8;vV2W_~W?{KOhI22Pzi?KG zi4e^6S@Vj^2M-dYS;Fq9ffI949Omjc%#Cpvp990ka!kUC8#A17<}F+>d+z))EBB(J ziekS5Ltzz;RD`K8|9s|u&B&mF5w(^&O&*q zn7*hOG?93ai_gwLk{9?(D+Xj3rDO9*f02J-QF+PCjEq5pi^NRwWWj=`JZG8*wJcO= z@pK%XA?8>(u`hMvtax;t zi7GNJi6u-L@*cxJpQ%irIkUK;Lbct308XSBB{kv|$>}EHE7=2+2rZa{GgCOdW8_K4 zVff@vQN_{)Gr7S!3=!m@hgl5?(GEO9MmKIhxWRZ}#I2KdH#+zn_^Kp!? zxCkd_R33B=kb8y^g)C`{_{a(8AaqK~itLqFNH7aFp^_5kU*@3T=m7GLBRI3>EHX2; zcmPQ#pFIQ8U^B|*o{63~U|@&w*^XINnEIQA;ZrOIdl7)Dbx48@StVr2QuKy}^NUo^ z2Ot>C=B3iMCId|vB^x%$9fii25p$I36*K3|5t=22`mm$OAXsu@+h75OUqy?jmm9)r zF?5i`;5rmtj{_*+9-lX|<1?;3Nq{4+^csn4lMGXvNEWsLqnEL0+tAbo3(Lq3U5dcR zSXjx}-))_PTX zw!ha78RGR09e8a9NAynXHr`G1D6D@ka=ET%D9LS~2NH_BfOQhIDI<$8frHzU&VrL{@fiel`Upa1@dw}6Fj?g{X5z??go9A)46!;JDsbiE0E~ob+ z`oNa=P#~JVYM+d2Xh{lw=?OoYir3nnEi28Cy|0ju??a!$z4y4t@Q2+e(vO9M6iIux z)*a8{0TL+)Egd_;n1ld1s;5Zhr2AkuHn;8@V1N#Pwwp2MD4N9-xpq#`h=G`i;RhvxsClDDCa70=$XE#az`KZ-|A$X~E^GN{5S>#gu|tB)9^Wj~LX zAJfY%V~LqVclmq6Emb6Yqq^1)5iSvrs0GQ5BgTTwuEr6g2kioQ(DtWR-Ef)z4gg*BDLx42&5@LZyxdZ( zqFp+7&EVF|{ANmtd-m`&W+#)31-E1p_u%!p@cSK63NW)tO3=`R@YD7I1)Vss!Cf^x z!R!BJX7KP?_kGv0x}}H1MU?c<>elZ;g1O`gxgo9aCzjFvI_V@`?}K+Ok_3r`$4*?n z{YwJhZSlPLX7HQjNbc*AtltKY4)r{`C3v`#XASo_PiQ@oY99nY^Hd*b1Gp_TAQ`Fd zXgHD-4&vQa8ye6J2;jTpr!f2wBOe*i6>q_9Ni`>yu7(CeubO8hy#c=z=#5NFfIwyJ zsJhA3a&evZHwbf9IO&qw&=r)!i0UI-K}Gvhi$g7*<2^{7Io5fvNx}KsAEQ`EAHQ5%rk$&I> zd18L^wdlPj_u}{i7scG&(sW-Y^hXapa}-@sA^nj>IX9P_ulY{wh72db3vfxSL`7@cdk2+!#HMLK}Nmy52Hjx)yw4Y zGjc2n)_Ftb&<_KXhqeW9u}q4#OS?7GP=<{o$8xETXD&|BKGdd;YWY|^u;+q(6rydR z4m@&HMm>16Q>z%;vI!UL&;mcd`F&j7kWt_AywpBds*PIvN*_b`DeI0(Q@!c~oj4aM z?RWY4j#}YLEg~d5XjvyMW8Bb#Q3>^}Zf!yYxlER3cBma1MQ%=|Lw1cdUI+u`W!^>> zLvoGM$TyafgOocC7jd~lZ7a{C!t*tzKqst z@Y|%pC!JP~7A8X@kHVCtrasqyO^1aM;hXA| zK4!h-FIl}ITC}l-PBel6hCXeq`5u~xv}`y+kiLmk>o>TYbv3J zJ#yP`gNIqy9q%@ zRi4m6q}I6t8SUDZZJ~aoDWR47u~w#=N4F$Y-Rx?)NIQfSqr*uarIL@EDmlZZlF{1T zS-?Ft%Rt%}sUdWeeI2*V6ZfdUdqVdUNPXTD z@&n9O9XeV}A)A;_ZP0p@-58DEqcj#pULcH;mFQf&>8mMvbS(aGOY*GG(O=jjrZIjN zCby5gCp9n(Qd3|^&FIsV8YG)E$(P?e3ywt5kxeBlV)WeqFGf7F|Gy?iOD!>4V2RO8 zrx;E6KN2HT-(YmXa;q?aIv8aIZ0m{$^#;B`YoxOF@^@7lg9j~7Xncao zmX#QE*s0Z*KcwelrsN4NC5n8bN1Z zVncMuO|!v+8&M%wurX6S%JQV?E{t16j%kx8^qtiQqE;XH*x3jEhF4YZmQ|;zmyYN> z@QLU3U~{s@uP0kd)T7wiQ5kxwKc&?K4R1#=yzvlphcU2)5#SPiUHiZlG$>*Gku}B@ zyv7J_Nzz!I>pa-v`XV0QNK$C^VT^4%;>R``*s$2RK>HgO8rP{&O)WIeas@s&7aCRz zTrC4yZZtq#m~Z@VPRGl zINMl5lPS~#(^wkBWtv5hUPHBhx7qXJVd1gJALdz+F|S8%rx}(A3ax2v^DMFp(N`1I zZL-+BL*K;Hv@c008%`vNBtk$)`b5ft2RxcFx1*>?DC=FGj2QyTf=OhhG&Jv`8)Zo_ zzW`yKE0XcQ7ff@yRSBZD>DFp`6*YMcKv!^Erd;Z9^66Fzs$%FYH-VzF+99IUVusH8 z60dc_FYO4rB+afyL`h9WA~Ms;l@&;o?$*^`5XQ;^JemWPwB>Y4U|%0%;{_6XHti(l zq-rB3U|&nSWxO`RM;^<0y(Tdd^$`;aw|2PSf!!XgQT4J3#N%J0&f2#bJAzxiSU-De zevWtjzCLsQpgPdEX==f2LFCJp`DqV6L&5wNuR*WDGp2`tOYo9otn$udQ7@DKWfDnEIG zKC%zy7DKgns+jqQOw_c}>Vl68Eu{m`rtBS&SAj(tZV zTy^+QR#oKrgjP9U;r{@@h6^6!v%n4B%PU-pni1ygR?;1HJ)99dR4F=-Uz+?X$9XzX0fwJ!*bvTFU2>X2LRB%cxM;Qhy=P6 zWfdq#L1fHw6=I~hZUoeyQ;Y)y6CU7J0Fo3DKtJZtHGr<*(8m>SR+1TSse*=gGI76A z&~$u0NawWW3VH&NP+kv6a(fz(;9W10c!mSrzX!KtEwBZvv9s4k)M@kWj8mHYxuckl>yGB=ml#LZ1aB z^xgp^^u7QjDGn*zMO{sLKL#YB{Q(KRK`QhnKtgXcpmZ*2E+9#;k+lB+Bx%1=xI=)9w5eu_R~2-3PZLLHH-uh~ zvrVWMAfem`kWl`S!d(qWC|?IiYBT|mP?@UY%>*QAOBF5vNYcInNK!N?=w{ee3T}>q zjwt8^ASqRHno0RAK!UpvkWh{Q5-NSqF`=szv>K3;*jsvqAm}$twit}q= z+8me{fVmz2ty*lyn-?R5mFg2Iu zwTi#`FLad4;FsIn#Ez)!5$kO z#v{hW4JK=bPjyKahlZsZnUk5uLh<4DP__@mv<;Iw2RV5W6BmPmiya_Z*;kl$S7PXb zc^;b~DU%bEF|>hdJ$-6gJl1%C?qC{NPql&4e1j_|F$C5z{O{GZFi z@y|ca_!pjL{641{|ALtK*uS8UZoBDzbzHKpjGoe}mL|KFo>lcSjje8fSKblMs4v{A zSJwlh+WQRBzwy6JPx%k4CMy0me7bIR>^PjPJVUrX1Elo$RMA&w3K_fkw(H;<$r6&W zBbRQ!{`d$mg>bjZF^=kCRAfXX5vgOJJ{-^L;6uoSb{V&(78# zF?@s!~A-8lppfhW#t0>b>{VnqtDV6OFthLcif|C zAJEaGJ5!4V`efA4y}$H3=v93AMMIMelJyqLpCL_webSmOe~;gB`@f=3t=$p*lQ%aP z|Dud~zQYsKZ7O=w2Zi5%z`ciisagIHjq>k_FaOD#*GV6%fK$@v@^?TVJD#|Mo-Q#J zy$Ul(ZV0_H&8A&%WLVKTk2f^7waA%y@H(_=%BQy&T)FKVYD0FtSh> zY2#v=o}1k8RVUi=HpZ=8flj!t63Vao52&=3xY3IrdROB$?MTN^)B~z%^vd3t*r2DB zCj`0}7hhugz5BkbQTuxkt&c7Q%ketac)ge!ZC_S@)HJw2tZ~U$ejKkoxd@O zYDQP5(!|TMXgkyTjo;s+pRImA>~x7EEqk|2L-J3N~P~KkdFFIGmwRS zi4*iC0#%u1AS?T!(q{ci4P-(8k1o&)2TDfs3}ntgN2SgA;2G7olb$tROGHUJ!4g)Z zI(E|Uo}gVPt%rGSA3bZbmY^4s`8n(Zz53ESwVR~HFdOcxXHC-*r7kdD@2BU^LU%3f zFOmD}S*2QMy>cMPChNKL^qhfOPg`?2=M!gI{!wQ6$C~Bu?=1g7XZeRX%YVJI{KKvC zXJzU+{WZ6(zz+F}>piOPv9W%Mo?C9ioTcaXuFy~}I%#n9`uFRS1F z9<&+8R6n{9RE4N152q@h=!@b*8b0@70EQ{7Ii(IHQ~jyO>REo6J|@C6d&&~+VvH4cFVS<-!WV}px*I-C z4UbM}_^fwBQ?mQrjNR_7;faavck!L-63i1T(;Bf~h05c;0;BUk&kGT&|DUS<=RiPv z>ebj7f@;*O=^IoW|AMWl(2u3pBNzD+MzfbXOMlwvLu)!`7{XteuBu9#`j}RV)o+0& zgtB@U{esUZ2l3h2A8hnbqVGF*M8A5k5Y5C75f!#b`x#$gvC6535j8#t*6bja{|L;- zq3<(xuXlTDRv{g@lce|5dWl|0;(moeAe_}(>jFIobhnJ%Xz_6F`P5zdB7QftVW4j~ z>jLWV{m|jN(a7H~Jmo^|0@3;uqtYAB>Z5hZ*bQR27iR3s%h-)1KD@YQ$w=k5^5efmRa7Kj%~$hqO4 z)7nD2E$N<=d>TJ=k(LgmqFCjAErf` z6xZS)%?d_#%?xzKdPB~jz#;(cxGI@=)w6Uq$YE|DBx4yl+A$edz8l631!-DBX}QGs zuT;d4srM8s2F>g?x-w1Ea9e+dg*uE6$R+^2ExtSuP@cZSRLv|6V9-!%S zW_wn0s{e+nrROL5hoR6tB0pb8)GnqEgLHbWvy5U;!U#PZL;ShK@lT24!8cR2p622P z>Qt|O9BH0Q)w&?++mV-<&`m9G$f)rj>Sv61hbeP#>3jU5F828Xowz`CFcHVOxA3yD zs4W`Y+CQ|yJL}7aNT_|hvch|m1n+^NXb*iET`ogSjQNAUtR8vV+S`f`dXJxq9>UlC zhwvx=L-_jmaMU(Cxlpg7k8WhaWWLj9E_uiLjE-NBOxOnZ;EoftF4FZ;)YECZ*Bp;* z@@p*6Y|AO6$>6bok4c(qH2+0t%k%Z>-b5>rCvy7F*+lSS5?T>mlm02zizp70;N53a zf1f%&=i-R}1IANNh`wTRJcH%l#QsJ%}(j=#_o3ASuzhFh9c&4FR?mL-;lL z#e}|AhB;#bYSTZb<`);m!LL)t=klILe5#ae5d5(AqbmR4_?{Ad6|?IdSpSkXw+dz( zUr+vhgVHl|&oDhsmxgs}2gz906Q|%G$EWtP;#>NnJL#v%=(fQoH+r8u+jorp;>S-W z-E98;uG{F#0|~#l8S+Q})tzGI9b)D$eQD#bXp_g4SU1cqUReIqVP5z);TxyT@S+S? z#mKDjxZV^ua|$SzeS-d-7;EmrZ<>pIBnfm`Cld-Ps0mOZ$II+&LjMJ55^$Ye#}xD& zRyTs%rXaepN^t+9ptJBrUT|dVBoJ9R2}E{H0_7{HR6&&rdRReUE9id|l+w+la2O3KdkYpcM*wG{vMsHbPP=vJAMBxk0x-!PzkQcO@(VBy=bsI&qlh8VN|e*ygCv zJ5*?~3f-!3e^*e479sTQQhjGf7I@HX{IIP6M6aUk%A zEZ*uJ7?KZ~m0NV~#v7>^3sVD(&w=>`FjWrBpMlxnz|hLF$$@DG#*5x!QKr@IGzaEl zU^X}~Hvp3gnYL2h2~3p(vj~`a2c`}fVx*Po_rPR2Fk6U@1G5j9HV3917$16yMW-i9 zx50rK2uv#aixuZ~V9FerQebvDFx9{eMDMXutpdi2`L2ceEiiQdn}wm-YLx@C4VYaH z%pPDipwC#Tz5r$&h>K&NJfT=_8v`Y9pqJs&ng?S#BHV0-qFjeS-Rvfw`kUaWY zm@k0Ige{td`3@NJ3Tt5!AQ!3Vb`~ZTm}w5o#lSc{1oo#?Y4%h%0JF}4$pfazfgvw> zE{FZla$vj;%zp#pb6{Qvrp$ra3rw8@a}byf4or8*@-7GFB4C`>OGAKZbHo`3jQ3o7 zy(R%u<-q(Dm<#G2pE0V!(o=+;JQat)16mpGHZLltJA=}ALW8YxruMaqG(px91BASDHfm^Eex6H@xAaCYR0W&MpT%_9R zv*kK#PDL4f!NRLuhlz0k_JUcCz>+!T6($4bR1}rYnWaeEdL`P>;ZM-6OY%^UObCW%7=6wy0z(p;BM+uBStVG%{&-NeGi_>wqj z5@#phbFe`S%5t{7WwV(dc0zMtN`=xRN6%W?J*7{K>)nB|!R_$CcIaTn?xB0jf1-Vu zQSW)?9aQiF6snt9pul;m4s^b73%)YZr@z9jsJr1f;j8@oQmj&3Mk!vT!dg37QeVBW zH#XDpg|m{&fU@9=rxXL(Ex}GZyg|`7(00!g=9g)IPY}KW#H32JbNvdAb>5%;uVDpg z_x?;TNJ9nS<_UH9cIfu zt2OmyHy6MgiSfK9D)Y4HS*9ZmO;=?-&KM+Jg?h(l=-R;B2&kzl$O7aGWNcz*Zl%6N%Q@ zXEqwX_=KqA)caHJC_K?*?!0S-$#)n8SPanL$dghgmXf@C?;jO;VdM8WBV9`C=zNiw z;2SCYI@e&4UNaoc%=`&ljH(!&X-HqI8?d)M$h&yUX!*>xb1dIYE;PiV?GzE~vD*`0({;Y7c2QN4mYAPw{h5;<-kjG7cB)27igvxz@B*h9qlHy$z`T-y; zFOimR0g%v#(5^!7SAc}xOMtMzMZDJm(HM~C^5U-NBAM+mRXnd} zQM-;Fs>wk7x7NIu;;qVoxe9NjI;=RfQC$X#7A6mvX{e`#DFJ4k1G5+y7iwX}(SR7} zz^nqM%z^nMFij53tH99SiqMH)gZD)k@zHwhBPxpYf4BypXk}tR;(pgen=5YG?UaWw z9s9{A>9xm^-eF+~`dnV|*Q7)4apfV*zX9@eG0qRJAS4jpp_OA^BO-TK2{rml{@uVU%WIOgeY5X(H%22+wmp)IV(Ej zgUSE&S>{|#dEp&;l9}3|jKOfmi^rO&wca9k$YEPJ&I@nbjWSb98X=ti7(ZSJyj`v& zB>r#a|7NBJxqtE|?2@5u^w0)OCjQAcU^38xSHZf&=!uDSt@x|eHqqZYG8NZq_v5da zLLffbh-D}9gh)pE7#lGf`D%9|1*Urmg-W`r$W(S zU+=$7J2v$2;skALF030;^p$%MlKx4qF>hE-B~IU~ujE?ro4%Z)Aa42x?!E30H6w_S zH2R(J-=;68nuGQzleRBkUrDt#$*v)?5>4Ms0qGy6?{$BoF<#^38skCHoV2hFA$d7e zH3}~;KvKBrO$PgGx9Ekf>F>fbg;v#*9y2L1j1VK@r{C8X3pbm>ojX$^!*3GteJoe(mstCSjt8Iq)(hYv}^u5dczZ zRs1{dDy4Z;OLN>zSV_M=(ciue)|Ou*UT`y2s*7j&A2Ev3=LBk(86x8FAWeRyXxgJX z<`}bMLWX`w$0WIo>zicSQ_u!)yT%f#vK0-#{BsmUQ?uTbxk-~G7zTBP{|pzj;yZrM z*BSK#JyrVo-9O*Y6)xkFz|v`pqt^jE#@rgBX5>&xk@ zoW7RgQ`P3;xBA$GtWo1Uq4@}@K9)CXEa0~p9(7wb;Ddm{U32b^H6f*paLVin<9(h` zALw+G%9~)JzMSaai0#4Ip3pxKc;kd|BPu*0`l54VPTts=o=_<#88Idg=;MU;jT|}0 z6Pk#915g_813JWT{%v`FPv}<+j~a993{PmY#K|95>Iv;*xMIrKGEXQ8LrL|qiqWGN zdO}w*JU(kA@VA&SXwGIhJ7*kdh8Xrw&L;W>JmDTsi0*-@KIWf10pe0AG>kRe;`vxILbn@@K>cU5zv}bj+GxL$4 zS@s@;j^J4!yp$O)nb1c~$pr4QhOrQNI4jcUSSL+v{%?5ARm4|vak9+fe4LkyWv(GY zC{6V-ZmgOTbRm>1xIH0y7r<9ZNUhUhwfwOe(CXm2TB1*6A3T{sVhu0^2LX(jz=u@XwvKk#p z9=Vubn~6O=JT;w>OOQK#s%QC&Xa?Wh9vBTQ`HqeP(rDa!l7?|q&x!|toMdZXeL2l6 zP<<&Rhbj*RyPvL=T|=2C=D0!`70r@vOL+vb7NdndsYy*uEtJ1r!}eAJwAo zBBG2U7=EZzNzL@z{8j%ruHEL39w+k5l3=~j@}3n(I=z)hOOEyg}lqvWbOu3f7orCqs1Q-L!gT1=fxu0})% zq`i@&o2`geFYGK?t41fjtVTq*_r4SLjsC_ehE>yd5CJt+?MR8H5zbc{phOF-L{?6Z zOCm>+t^_Wwk`+M4Rx-hgXjSqSAW=yN+deqb0mVxZF}7tkSP`v?9R@PCVk>~d1eBb( zFlUVNS{2(Wi5x7<>xlXygo6`v||x4 z7)^y4w^t8;hg#^%X!6&%j9_|(Zm&2yyYhgA;TYw%(QhYD zh*sZP8+1me$bBcYQ>rCqE92Nue5@_;pH>|sLgH)uk{g7cp$typD~|`Vy(^oY&fRtZy+7? zD=RywIqWuT+55FEx=sp~JW=`w4@XhA!gvaD!qFm2-H`%Z1rwz9$;9Trx%`78$o-Nq za*sQ2QZAKeEk%+DRCLVdZn+mqd2^D()sqm8TqfO+{h6m`0&JpCgsN9rQm}r= zzZYY{zs#AC`HiXwxvy}=CF=1g<0t~hV z?Go+tMY8w$)Mt@sPqRGeJ6so^{v5@h2uG%Lmqkm2E0E`lz_r1vRGKl?lv7efJAnp$ zA>pRcgHl)wmTTa?Dz?C$Wwep43Vj1C_^4^Qj8WpH{))59jmgEQ8b_Baq}B@SEWTN8 zZCh;v^|;qied=+0=odY%6~9$SsKecTLOWP>q_bzma-itkTypK3_^!gjj_ww;x|>!* z{)^p*r4PM8FIpot#763K?V0x`1hVP$6ZJT4br}Wk0=Y!)h!j8_5Y;i#bA%vuLY&VG z`4F9YAUWRG4nhQLSK50Z=&1fT98n@=ZtY<727;u2RVD{tH~L>+6@GygZl*{7Q+kX= zmU8Lrsfl6|CXGWAndQXz7-8}(dkt|^+mKH{C<<)_$wQQ!H8*D0f`wpjUsSP1k4aLxQy=PjXH+yoN-`y_Y3O4^$xmYjN71 z%tN6_fJi%se@R6oHU0$EBbtKwWMlSY+&W1ex6U4F&bSu84RWAbrwE@`Y_0PcTIaD~ z7HQ@cYQ}6!51yVpT#GV@JUk4e+Nw?T4tZ!r zu}L0|;MXn>68#M2;epeThX+nB4^)O|3uNEe7HiCYl3ORSV`-R$jp2A{pluZ;4aZ>L zY&BB$laPidgOyJvdLEo7i4AE;L|;wv)M%LeHP&RJ7?iI=BF-np5GN6@kz$Ym6++`s z3`_KNp>3?8c~o3IcgbiLBaIo9nOV;_g%vX3=}ZRoBx=D;^cURC zL5kOy{m_LbbDBh zZig|Mi{~&MRZtu*z?OwglJRLE4RK7yhi)UuIZah}7g!^z?h9!Ds!j9`Rd)z4r0U$r)voF! z`WdRaH%>#W6?M`eie0<^>B*)kgD<+BHIla^;M^Gu6I`oXHYG-0gTMDM8XU-3fK zeILKtVXV`-M~Y6={*q&Vq8+U|+IjKMFwhqo1N{yj=xceP57MLzt1n}qm*pB(Up4nq zR@PWQ?9^lZ3l!a6XSyzchWl*%VxSL4s4%q;@^IgmBm?u{S1E5u3SAD7sWnRVqQfYK zIUU4u?Ml42G_hoHSzB83^jB$8H_5!MVB&X3VJ?27BWMPt-oC>4$J z-yJrzeI3q=0%KOkQ#!hULFAgI&sCe~9Sz-RH1s=GLr*$UyP9LaFAYsIx&qsbZig|W zCZI6pRt?C5~sd%b%$+RkU)F4)x|I z*;7q>v*YawhaA0vcI=RR5Q^R+co1d6J%JyhpkS!6ucEU1%u$q8j+6y7{@0YE?r2Tt zlw-cAV#k0{KEl+LHN6~TK9j&;L6m}<=r4w-O+-OWHxm5oqCR4tS@V`1+@TCr{XiR) zgf>~YBp4r8nbYB39nQN$_}HYzjm^$U0g*vz=qI>|{$l7Fjrdk+Xz1EWjEP+==hI^O z&!hm2&GtA2SO|LdenIaY_X|>h9NSQU)Gtm)0cO8;8vWw6Q}zoghS4wXh*5p2Ur-$B z7iO>NuwUq5=l()gelA${3bD*EZOE1}W1|`~XuC^T_8eNbY7@PKWwb*@W5(O~HO7qF zPt-;@_TQ{A<8&5>HA^U~A3kPKbUWkhV@CLwRFddk+$jX14Q@7u3R*p~9^ueYc(dyf zT2(@im>hJsw05jV&UL8h@#yv)$6M+cBTA_4RL_0}sj%rq`@Yogqlt*yF_ouL2P4Ee zeysdP1vnL0FRHc5=~2q}H0MRPgA>x|FL9&OI~skv(dfIW(QR7-68#M4MNiq9{67sK zPubf$4}~(f1gN?ZDu&Tff~1RWbA-_d;)bU<(M@P5qFaORX(^X=r@^yzr{ozG!{FJuBsQk-W6-4_ z<{1IPGm}FW&uGR@o$JhaHW8HVJfrth@JyngAeTwUl2m-t3__wi=DG7;whDzeC(`dZ6PT6==45RVfG@r6DQwco9`5{W;G_~ra7>3dNDHtZv z&yZmoPlI6_PsuPUhQY9LG4iDtMsa=!!%knT-W0<#dXMFqO{+@uGt>}|oCePxIVI1i z7^a4ZLdZJOsubr3XoxeIvhP>uHEQ8R`6`vO`@M+XRSL8F4oz( z7&ir?Vi;WfHEQ0WcB42yq_f(%n9__SkIj0!R<7giDbjxO!R(=W|HV<*i7qBqnXy9vYDtDMl;?1)k&I( z;{1?iI!%V%46=5H(fcVFCehE3VUM2%!yZ2+!>AYr!}iB$2Q>&$oFBq4+lYT2n9rK! zE=t>zn!+aaZoE5}1@Y26o78)U8xi)MSY$~%vHaPUH|UCxpS>06J+>8W!#X!)S$knhKb_vM&}WjL1Rf3{3@>aKdCjV|L1L)C(s~#o=uf(Os~A z36cpaRjel>>bEWl?nu^dT_SPdLsB2PB)C0U8@Z(AcWh6?^^u!=JkK;73j`?1Kx(U@KmY(+e{}MMoPEv;5<<<9uXkn{T47?+4Db^IpZ*ZL zmEPt)1ZHR)q;ZhOLCjB3pJZB4MJijh;O9uB^)b)v(&+_Z9lM(@Xboro6DDaD{)VPh zoMOP~h3dCyQQUP44m2D{#({>eJCPaAGF13AzNowUs9400w*<{+y;%w57>OtnHPA#FoN)giA(hs^1X&kO` zsK%ihhobUSdfLuatz~AtY%P*&jmSDkO{2~wQPzY&)*sR505fZyv$i+pL267RYYw%y zr(|7o3^SBy6aH}fqLZ7lf2-e;ZkU}TI`=hotbyZi#ur}W907!j&JhTkjMH#j-*g}i z$rJ|YL1xTBH{EjV{#W`TgCmUggdY1JQk3|E^D-n3bV}tH)XcE-c^JP|!;47JCp!@d zu(Ia2c!TyL$uZkj#G&PNtuZ62TQ6 z&p>HEd{vOhFybAFmzIO_{n_6CVM7dW0bZTu9?k6k(S3u0hoSjrBlAXPHEN`4&F!OA zrm%uxHwMwKcam}qyh~Pn1(Zlm0^;x+%t+I>i16b4->~df50BEgq*{6eodv9q_&r`N z(5xNw=W6fq0YFwL)R-{UZ??BN;-lGfn#~5M_D`qg)>ui21i0JM|K&cYakKL&K$cx} zzEL*vBKyYo9})3Yq}HTUq#pzcrYrKzK^mtC=d|M62x9tBm^?Umm>5~?RTk;Um z2NUtuU^CACRkm3+jNsB3=wdqhC+%YB2OBe|W9@_+ZlZf309CJ2MzBx4A1{`CM$7OD zGJG!ZCCmO5+6QAfw;OgR*4$%Lpz`En9TxlZTtO5&y;LQ+i-hJxe) zC;eX{8lo3ZDh{Ig3~?~XvN-U#mVO8t?;wd82N~*)gK(10#Z{X~*RP`jfo7j|Kmi=c zRgJjQ*@&;=)l?KB@R5j@C2)lT)v3rQFqP}HJo$KN!9A; zh>c!H^UdJS1g(}vVU1r^F$yeC8;SaeX-+pA@U=mw=F7?#&V+xfqFK}Z(~By8I;YG# zr^35nq2G&ZG3OP}FNUwXS>8Ddywevf_09~GmjmHlR9sFDvB*n@Tvm^w`)(WKg||H1 zHovgEJWxidW-Rq)<&PXU4yXl264z~@Jl$(Xc2!JYRBZUw5(ghH-$FmKm;;9&3z4Q| z-onL{jV&JX8n>V#P*O5y<{T=F_zCgia#KgFh2lj7Zmnh(d&iB+n&6tSaG`fTRfFCt zkRY&NmMdote0wdJ?Iq7+-WkQ9V#Lk|E6Pxbe(>-HNx7Smv5BeU^9ntm$R`IS3IahF)YFD7Jj2#HJ;;W?p!3 zm>HNy?gSSY?XeDawUc4^mk9?WWw5E70i&ZgV1S#w#9t1MSnkohBtax8%xq^cYUBt- z8%`(>ESL$OX0sHH*hsf6WKxo{pVJRax{GqT!J9Q|e0JX8L0}aeaa9E7d%?;1)BSKZ zII7rQHumtK3de0rtuBoV=+v!CLR-9GVPJM?Y++fRjUe_u$)!d0__+apFU9}Pu1x$b z!2dKCowXRi&}C>$fp#j0P9q3zF`x+?Z;gVU1SItS04SeB>6EbG@-S1migEV<5-Q69 z^=I4%3U?J|iIU=41q}xz^s)g-it#G+H9$h|Fd*{DlI9}+t+@=H2gt|J7(jFzcbbdN z5Z}hoZvc&A=q=b2j$~*m3?&457?4no0+LdF14zm;4i+GSyB*LNP8$R?nxUrvWixaH z&hR%caps1eYu43U@Q zs~Mv61eY^(B@XRK+6)CvRnRO2ElM@-uYVMfwB>hzByHcGCUgZLY1Ib-{e<)QE1(}U zlzq0D?=JvJ+I0$gOF{ooP&my@(E>a5 zr2rxMUag>E3VIt5{z2{sp}{3yrh;ZFXrY1~Y1dycgE9g-L{YF7s`k5&%OE*(w zC}@I$rYY!KK$6FVE6fx#6jY<2hZNNJN;5?*ASu-v1--1GzbI&Oe>26afF#8Z1+^;Z zu!7cIWu|bWJ4p(Uf(9w*CIyYT+Dx$?kfeA~K_4jS9|~Fm6(BYL0Fb2kQbFA^Ox(E& zItEBm6b&*%=PRgAL60lwS*Rm07;WAMDoXNrL_xm*BwD#i;aU~+FF+#M#}%#@RGv_| z2M{U`${PXYF|-3vE<=9@%v@P&uFpoc19FJpo9l{1%W<`9k47!9XEthYmNP zYCuBeI|U_RkP#}$fP{)i;VJ<^QDNqB1^6d5N&#QSa9M6ZC^{~9paVh&2ShUuNzqS1 z{S`!a4M-^6d?e8I3hK~voOsTf3F7KWG9b4LKE>P$?Eo&q8w3$EUc})LRDj#l!cZ;B z9C7ZzTb%=QH{PZp4=Ys&m?n_4Fu$NUD3pbH1{k`N!@@KI;d5X<1cuCusWyrDkNqM1 zf69S53JjeRv*M)Sjn0r+m_B%`a!|e&m^P0+_wm4Z2iq|-34@ljO1PLXkUa~tlITF9 zEX+EJgSNIXn}G2-Fl5}j&Viw&{4Rxw_lS1@VILC%)MNKtMy*EW9})4+Bue#i*Ch`$CMWGt!QD$>6_D&9fb{c#39TrahTb082Wl3kD1rXILxo& zFwe$eUUgtP_SyHABM#;IQ5@#$ILwJS4BcQNk6GqR<1mBbFtq3COf?}6Qyhm`6o*+6 zhoQSPoRohbhj}Fq^JW}oe;nqYahT(Am>wib{FvOJn=_o4L2;Pd;xI*Vn6fy`vN+6x zahN~GVQ8i0EYDx#FdxNXj>KVlc8aC*lQ_&ZaTwEMG<1cbdkf;?OpC+JcVOtQ4fYgS z7N{sK!sdh@yC=pLj}Z{N<7A6pO8Y_Z#T|>9v!KMd;DE_uM`NCorerpK7QD01wk5Xj z8`(>Rh`e*tL5a$y!=<~81Q!XLD=ywGn~tqA_+l^j4;W}6aO1#$4C{5NL>OelP>jJs zlpIPH8MRn2hj;|qR@uz`I16jAi#9xXm(CWMY4LuG5HO-vESz6#k7{GMk=WWdD#A9& zj5!O6tzwYxOxxxV+7JaUF`RM62C^%86-sV4?Mam@eM;t_6PN3(g%Uwst|28g(b#NS zP=Vb!Z0=xh%5YRK6z9yteHvEr@4=R25#$BCSVl9Nn_9(1Gs|ZRSpc}FfY>kZmPb*; zC8_0p6n8$%npa$8dC@lzb0$nSJeC@Wdtwp(?3ftVr3FS3>uv-CVO^(SAgtRK%oysz z1Os8+)nFj33n&bPbvuHAs8Cly7zpd82s1|Bm=VGm17Y1`Va8CGGZ+Z#CJOE`R*yBp zt-BozgmF!S(I9kJLy>uN1INI&oTCWivTrjk)-VWI_fpI#UVv@dBAXvqhksYQNV3d8 zEy2Al_Zj0Ivfyk@>(+zV6vfzmhDxizUTyILTmpj|31*lVy6`@vaW#Xnx68TM@e6SI zf>CKmAyGF=LcK(ZDD|ZPdPC7*<6;h5?V#j}X3jV6GMHXgR%BKeI*JII4r{&t$z$!{ z!Gnhk^wMK_tX;Rj0=+U{^2HX7 zD--|lMK+(@gL&!t=N#OeU66(kE~&Zj+J*Bf@E$7Prh;#HHF8gXrS4nOnCW*_!P(zV zT4yv?@l4B$Pba=5_}XrMZ>Nt|d)eK)@u|`JqC@%Nb0I$F;FC^v3Z=o(J5rOjNf!HN#EG3kICovBY>6rPW~R|shP~-;$HGAhUN1= zZ9XF%JA(X-@#0Uinc_`*|uv;8M`bQhBR&xcSG_IiU!SqCv@M>6uloCRHwnWA)zgV9Tco?56&rt#T?f&47 z1nqWz^ixB5IB?u*7(f^925tbOL{L!U?fb%hf zMrkaKNkHV=a~TbUqhRDl#?F*zUqM(zdkMlSSOO3Zq6cC7;~?4u1pE`K%4shVOTll| zk!;Nn{WD^t2v&~25`>jw9nrH_<9;9p}b-2R(xB)_Nr`8Sfd`$wV}w0R`7rcN;&be=4AV2gGnv?DOubWMqSRa)Ls zZfmup$St%xFvJL6bYsgnpY}`;>%1dMl;Hbt6jF&t160#=glFpW{;)zP|3LJ` zzkT$QOqhZKvK+3hWru5pP2rV3;A?X_bhx%S%PR@b=MuIJ;Pkm9u!s+~z)k(RF{O zPv6`Zgbb4$eGR>Y6R17w{R7Fz8(qH%zH$NKz%5b;A8*UOhy@>S%B`zc66!hovnIg@ z;Tj58ZqC}5lP*s3_o&)D0RUK(iD3P{d*PU?<}avTc=;qCLiL^+nw^kuwl##fVGa3a z^Q`!gl&`^v6n!H3euEOmJ(gt15O zjD3^BYl)}%Iy)cqP2{rxb*Ava0iAyt1g{EFM1;j|Ls0{rXb3@6JQohU&~EZ z&@__x5&9Ei>Xm!L*$1@BJ;UL!cPermp6aQgqY;hS^oiD0bu_`B3U3;o8n&Oxek&PB z?UTmrT|~I0Bx6U$zOW};0@K%%%9+TMcS#rkiuH@ixOj3AKr-r8F$OGro zmSfjl#--akYj1Zqe3cvt^(HhN%RD17YTw9c+=fG9lTUqY+H2~RrhGy?7 ze>i#+TAsxU{_V2&N_|FJF4LoLq2%B~pobivh8^^END-_|b+z=--U%K^3?4znF9S|5 zOeHsqWFi*)6u7?uAU4~ZKl%!XCI&VOxrCNywD*Hwb_t$9zxWu6nXG?c?X`-dCAGX9 z{IpBpVdLa>OAv3K&`XHM`9DrquP{G*Fh8$GAxdB&oUuduu%&x=syho8y-ZDTA03vn zr@SqiieSjl1~f_ZC4t`|_>Tg&5KLZyI~)%RlOg0c)4UhP>H9pZ=~k!J^~|`MEr9_D zoSM--ERa@lA*Q*b_3pu~N$^dbJgIpKtX3h32rB=FDK!}ULY2^pZ_;A<$M#jEjg=rO=e0t}RbO;$n_uG>4nvcOQk75^sdds>x zQy-#~(1-q|P^F|sJ)yN=6ke(}vL*|ZqT@hqi?tu!90iABFx!F$NOrsfQ%RD=p@G)Q zYcpVppEC4##l^%H$yrYv?aM=fn=2*vp~uU=&;zY-vpE{Jb3+ST@7-yZoE-)}4E5ay z>cenIgQ6oNb{MF!`_bqE^g5Kt9?q^lF#wzeyy&p#B*a2N;U${J0$F)PM*s=MYONoP z@w+ma91dg#1)1V=)30 z9GPRD+wzY(lSn@hF`S);$Y$GIF6?GlmJ1&-EXxI1I>>V2TgFe|<-&1>Ww}5`59@gV~?0f;6r8a)xtzHPC|ogIiEc1pgngh20!?jbZ8 zrl$CEZ3U;*2I$fP#7_HnOe6)4j@#^PvVpS^%z(}2JQbnxVTLdRFWo`;XP%Kx6wg>jXCSkZP={%0IJuJW@8 z9bfqzpkpjZaT6lu{DvyiYatPnry2(-CN~D@ot~*M3I}M|*&~47Bw*DW01dyrlXabD zmQx#pgrvtJMFI4HR5C!*WIssXk|83EjHL+eZ=?nmXmwqwvxgBosZWij6@Epoe#N^i{)=9(~I= z9KeOswxD<@O=FM(>7jCk$mfv8W%0qy7LC$IDQL7{d?RBi0sHro^@m!oVfIOrhj#xB z`o$QIhvb=iMpGsm$8;L`1E;pPxd43)D-aMilq@eYXc#ecZrt5_UD5xvW%VeOT+P(M zctdL-2paByq`84y1nED^q$pCtm)0!)Cy&|H_a&jmH+xn*4UUyyPEkvnI_+CA;e3|? z%&%W&0Db|VU;qc(Y8b$b@}~@-J#!hz^wiMaNeE=FCPX91oWlUf93vh#g3JL1kcd9J zSAB^@e*$1vb(kAp0=0^eYJ14!sn%G9-L*{POA2S3J~|l_MLOe}n;TjA2y(QkKJv!`O-;*1(Vo%!fw32s zM}G&RUu=xCViDiP==SJ`v55Lu#M)RyC>Aj{7U7FUTpNq%6N{h$0E^$zNexX2hNjP; z1JRl+TSg}Z54&1=340rp9s;jiBM=)$Q(ADL6*bn*Ohmy=Jb=wxLzn*)RHc>BG^5R3 zC}>ZjoTO)IIc-C4OY$rq`Gevuem;5uB4SFl5kf1i5~Kg5KVsKoAbLT~n(LTYYnBIr3(3FA|6kuTHewprJ-=zq_mb=tsV8Z?Jr##{8^IQeHSsEQ zwd%hXJ0CQm%$;ORQ*u(%-;Shtw2D+MKSfDA)_XXhcM*&qWO4xE%)kpy>vgc+;ypmx zTiNILG26~X70AS$$JrE;5FTV{*^ColwzV@wd>}p|82B{S!ZNgllPULB9;Ik6_0kTPVX@9H!l6F|YE)60_9bl0Q>wYY(d+G`L zhGysq)wsy6Z}ssfmb+c|--!e18I2>oka(9q(i>fb0g8U-;QPNmV1$9lv82?&mrwKlRZk@tWcMwg1d z+A(Y-O>`eK*8Z4Trb)?9K`YoFIA`b~&*}z}yVdnwx8v(g&3~g*)s?Ma8Fmxtg7x4rG{!IS z8axKZ(-*4XG3>Zs1r7v{VOnqzFvAM>dum1^vR>HKnEg2-yY&3j_AOq23hvYLcL9zV zNgGkAK@?zL@Y@r?&k}-_`$3=yA;C`*q17WJunpDfd1jYBF2%hQ4X+jK!HsBOlxM|w z{2l8F{RTg#=%YqNHA=n&X$d;QOPdCV5kuQb;!<;q1aSN4Q~SCPW4$kZNjr#bJFU@u zaPm}PtMQ3+ineWXel?s{paR*c*b_s`x_6oVubGvfmYqri)(+3=ty}@jA@|aEuX!Yl zbh<4KwB2uNg=uW#7X6-TjxD{`U{hjbyelEo^UO{ZH}RGfJ}IkF^_E|azbLc+LK5$q z?ck|i@VT}fhr|;jS)K7gw?s>=u1q_Qf-T0rL>krfY08jFi3`KGyyC8MRdqUXzsq&# z(}u4+8a~Ss{$G*hgxgG^hrZC>W8~3>uRW0!gnym!Uuy3+eB;5V-h$7AZ3%9aHMK-b z%hIzyFVXy23GTfm+VHF>*$c`nLOZIpHGGOsv&0@$HZuGMB#8_e=-w&$f(;0NF2Vhd z28LueQ)yoU8zL!-B1!i*97s$*7)irvd-_d!wBZ0IQ;F__>4zi3SAwYfL?mrTWJqIV z_(Kg}c1r&naXFH7pC{y@5^SgfA!72^$tXorGS2h{(i*-<4#FLJWBSJp&F5BcyB~2H zzUlHRiAR_$VqIuuRJZ!m6M&%`2!%VTjy8OgBD=B;U#Gf{cwYRw7D&_H)80olqCdfK zB=toB&@;}%yLJTCO+Nyya)9W8YvC0{sziVMX8PrwM*7G^)VDW8Q@DukH`Cj+ZI^S3 zuRWd@PlVS%z-`HQFmKy8qF<4TlXYKpiYp=cb+Lz@_ajO9)pIcqc z6oGT1_krs}ZR9a02B{dB7=Iew#~jq#SwG)YZ~6br_nK#$28z*sE7&d-O;+_18Q*6o1$3AO&WT z)Pm-ZNg{_Q3DF9emq@7)^ThS2>;E6T2o97Zf*mzU;nfXTpZiISErS<{i-{2%nd7L- zTA@W}wr660B?YvxXkjz~E0oVjh?Sl|j|~y?FmSd+5`QODTl93yd63#K$lOid1;E76 z6VzdH&0h5$b#V&zR6n+>H~KGG<}WQI=b17&SV!ia(p_k6K#qR{f-5Z?<}G@x9JkxD;sb%|VTRVy~5d!3PR! z0=v{w)Xe%&v;RV`g%4t{aVuh;C#$c;`>a`93nhmYKZmzZ=#CZkjV7VmTjbKMa_Q#t zjmXyGS%MeX_bF+>DWhz%b2ICaCKm!Qn{*HLba{axiC zHB7Iw%9rL?%PHDKsH;gu1#NR-Q}8$3g;nF&MJ;NnPhCU#I|scDT^FLmz@EbKm0WT>;lq@!59PbCFD8BiiIha(DkdWHwwY?OmfXO*|9Sd+bijr z?fQBw^8=Cs&Yd}`YbUDaL&9R~2beaKO8jpxmYqA>_O~PRz3K2Dh_ELQS=;>w7uV9{ zYI$($^FDnnaRD$9m$LMs_TO zD;D6#H>jtHfMI%xRHuJYadB}$+b=269_rX}i;k(K>(%WPC679Pr9(Y=0T#(yXpoiROJ`Y zdA~7><4Vs(Fr6b_aK98#k-NH`;w!yIV7KdOeAE8@KKvyzJ2$H=s8rV$*kE9|-wJ=Z z5N~THAxT^MKPZ0!v(*ihNuF@RqI!3t8~lw4GGnv0Qxs{*WB9GQ>V2<~yu#xjbU`_W z&db(;5o>F>p$jF|xfdfOt0+zK-$a#U0rN03>$1Bvhns_$(n z+li#)x(A5H;LlJj0xVe*K{hMM_8NVHj$>uG1=I;d=Go}>zs6$NGsvyJL>Y>C z9UUfnH^DDjGI1fcX-juj+^+FDmoD4{wxf(F)uh$&&2LhF!C z-or#w7Vj!oOLc87QJq`VnyrNsib|q1IMgt4Q5{t=D@=5olTg`LP#5-?ghI&P@wUvv zMffPOPEdLmYI8}sV8-y*)Y)Y)$1)W>raI~%=?_4tBUje_VAN?)N^Gd&oP@TU@kZhl zHB3_tR<^Fqz!tShKr(eQ&S5^6Ui=8_9esWXCl7?9XH1CleqFyjEh$Tgu9#$5;fvER zt#3;^&db|VP=sgzDgr}L0xHgN=OoAtM6X|+>Fj){t14T#Dghw5DyT@tx%jFKr>Y#( ztMYeAS*llsb+jI<@~#|Crm6&qQ$&Ml z?*EP|?@~u^A42sIll?>~kcC{tP(;`EDpc2`aAm2=6AHDZP>V?yKovoY5)Z(iH?K)|j^>zFRDOx@yk9IQpMu%oHL z(PVMU-h+H97rKe}0RHdC|7L9`D#itNX$)q$`}*VhAe|rRsql5^pqRp0oU#}(q^iG; z2elL!2qI_JV>IJP4yhY7_F@{pNAN)Ks1&#g!SdT?1NMssG&ovO`_hl_|HC;19p&FA z=2+?E3#Jpp#+{Trm+oKF0+3T+Ca zsf#2S56TjnScsU#pGr+ZJBFhRc5_6t1ENTe0B_iohtU(VirMH09>X0KQxq|Khh+YMhr@2OHz-U6XkSBL(goyUWuV;5W)bam3>f(!*51~G^0~DSPBgoB#8Ke3@M}g-fjJhHBIWiof(?i>~|2YY2tI zb{K<=!3BVk3m}gPjWVIRI+Te89Ipe2pka!svfHv893NXlpJI+KA*#w84$`zujWTjkG0& zSO1zJ9M&6pPuQOQb$D=Yc(ttK)G$#nY=1~lH*C*ku@2|z*2b)TU;P1=OX^T|&MK&t zFFUu%Ug(p9kx-C3&4f~QNTa(7u?D8!QcPGz?x(*(cw()M^wNuO!@^|UFYV|cx~!qR z(5^Ywwm-LZ&Grq@D}gPFeBQh5m%u+(zZl{zoZQQ#&VSR~8b8eoQ;eAA_43G~Mdh_~ zdDIF~-f-j_qv-II9{Hqq+YhO{W>MZiv%DLqy#JMk(@5o&?i5M`^vDrVDNW#Sjg63X6eh(9v{7d^0M~qG1N` zpcb`3C=sNh1*bwAH00h{NW1XP{w%w`OwlSyQFNL!!yi8SoFwkC4c`CoA-#W{m z6fD1o3`-Gd$6Km%RUxwIO8>7@sgBjw25HAJ`D}4SlTf|IDC1XDhGA?JWwFUodhx5s z-;=Fpq#XxnIo7roy8`Hs&M>u8lCQyU)w@n*FR=L}v%KqM{(v7^?9{(WjIe=QTe?$g zKNHh&Lj4={BkHh3YL(0j6|FbcG^~Ghn>Yhv;%rON&VOx$$IhGE#Ju_U6zx%j3n^ed zEDLE6B$?oES}ZeAyNfgstr||5bO<7mpYMYWY({eh`thv(P!9G-0zb zz)M6rAR}x^BGPF)>q}QblQL8$&kfKM)m3CGtGy(wuk=y^y@~o~{LTD8x3Bl0?B4nr zlUujY7|Jd$ZAmff<-s<&zKk3X_BSmrZ`0t`he+VZkTl>i=#U5TA6jrJwBXWasK`(k zg?3z6Oxp4r#QFNHY^ask0}b4WHfx<|Xn4ePuhW(uatlB3lnpz3(fFM`Dew~zj;&8Z zc^8XTR^BIl+EaUk%1P>h_I)D0F}CAagyhu*8vbN1@NO-JblOt%8qNGX=|N9JyD@}W z8EA`Q2LimRIZ*R1XK&gC(i*==778!Knsz^Fgvgl&HiY(ObZ@w{X^w?RLQ1!H{~RnI zY7P|RS96hDb{veM5!d?1v@&vRRb5+YuL7F|Te>zn6gtj~p{4I~@Y2uN<)C4VZX^9K zlF=f6gn_phb1v!2m3F+t%Qh^!Kt|d-`XV`_0aTE`(sPYU2$*9lr@^B9Qf~&!B;Cxd zOQUnhy~KL95O#4=F3v$v6t_K&*^;O~pS<=sN$WrxFoCm~+^z29d?0an87-!AVT@wA zBfGZBsEK2<_86VpW{$9Wu|=|t)1ivIy+rC{p}LHQmVN+lDkm3{gdCYb8uNM12 z)@TYk2FKBzTP9E|$%29tTyLQfRL`R%H&98C;u9vto|yiaWBabns-vJe2)*N2^f$tK zw1q{(!#MDQh20m)$Pn3PygkPzAJ@D1ONprp+7~Kob;{mPf4ftbaz-_+M<$ZMK8mUr zwWaD6{ww*OU`f=>#r=&G05)EwK;tUXj+x)X`1>96n>MtIv|ZvGI}JYm{%?F^*WFoP zzL~!_nBmR*9X8Wn;O`pqJ00_Sk@mRxJ&M0e@s0B)<@nI|Zn$#GIWQZ6SMJ~AD#T}e zLSzK#|JSHEj3PVEC_cIdfKx~$oI(+t9O;h_WMUaD1w9yk>KNPyNK&U@04K@LPqDEe zm$s=>)6|k%v36D$4Thh0*9p0%b$IC)Qutb==xD;WF*3+�bZa?n@YVUZ@OQZlOPN zDJ-CES*1;tvxR)7t79%Ky+2e@NF{c-o1_s_LC4q*NYAgPNp&8uzKi#6<(j4}Z&SqvwRA66vI6{!v&70$YC38g zB(EvqJga?Vg=ox36JeWWoiy+bm0g@z{Y@|!fQ^z zjC3A2Edy1S+kKZhqyX8lLjzP-v-J>cM1H!TqvTtaYy1s1xO)Du!P>!L(U0YJ_Ro8x zGSM0i@B$^gTC7+uBt0iXi)xkX0>hwjRm4Sn-rT zgzd*rEemZmM?Ovr2U2|a!urRIEcr(xF5b`o0EH?yqDr-wK0};^Z`GZ`AOEF6PqxG? zn^Lp&iqRS>Q1~&TL|^`QE8RnlUCp>fBghiL#xHDl`3b++L*@U;f8qXxS2tK&qemO8 zU_cO0dxI#~>$M{Y57bwU#aWO~vT<^5cOQHW!`1=7gb_afQQ{5!4h_ILzSt9Tk+uZw z2#Ue+hm2;pXVB{Kfi%%QFMS;S3r=oe7w!c3O&F5M-ea7

e3*B$uASnWX#FsdiYG zu=iq^t5W9lDnE~O#u-E22fQ^COBULm&c;#1>*+|Z_ZG-akp_nc&BP)$HtZMP36t|k z@ENY_B!Oo{jOd4ED&!|OM7O$YpH55aB?agfC~BOB6e6nJ&OtV>R{JKIk7#qodkpP@ zA&{*MY0B6^zKaPkRtEMNC!}}zkel}vu0@hsWXGe^IMfk3gUsn{3(kUk5p0)p)8sLO zrNA0s$Kh3WDfA45x6|c-smVBT_km{+(F@xgIGOzUTSQ|z7iw)7>y36g+o~pzq{&N* z9^@KgkmO5pT-g*|6bR(bxJ50loG4ufl^=7JVql5a~0=W46+8L(nu+tj`22k!~h(To`o>pC3UK!-{%o>iydEbfQaR_-Afk;6lAKkk6! zr>hCj>y^~rfy16fnIB~BsjS4l_Ze|Pv17OFz$`PL8oLieHTfpRextlU@-dzAKuXA& z{X$c5Vj2PQ4g+#^q=x9PcQp%rItGGJExZuNWzl> zuMv0#`8)&Xs4%@;Bc>O!Fn9Hr^yV{>|OeVB0;J=9Y6A?^{2Ddt4)j3adW*jo=G z%UDqV6*JB8md`Qw81vjI%yT%U*K!J1FJ*5l+Jp`@XP6ACx|m_!)99Q!WPa*Rp;RW1 z!%ycWcKX%c7-OkeO?b*vuzHP2`3k;3sQ$WLzNY<|6(gS_zJR*-ox{= z+kc_clg0z#b*qmKAT@`V(2zO*3D!TTF{Vcx*juE!)>{uz9=E&I``l{2O}-?S7jB%- zeGTz&Q=xmziuXw#tKLm&>1OLk5NFtd&2ny%mSpjuS^>ywY1p)x!-g)PbRRY=)SBh;(L;j&GcIEMaDJ)-9n;KF<&QFs z_}igX$yjI}M>inC=lUq?MBOtkqF-o)w3Ka99h>|opdv!}Zjx3^q&kbyvRNZ-hOY1g z7Gr9sBNS)KCn1%7HniRCzl_NkD;7Q?fRV|^Bz2OX5+qk0tGa0EmIvoBkn9u zXOXz0i}-5kMr2U)CR(6`^zI4JSz9pd0l}~|r5l>PIUj7~iIxr_1&<>bHzBfW4pjby zun=HioG6Bj~piF<(q*yZsHSTWfe|0{C{gw@LE*kcCoU#VZJN zGY^mGRIc^R$ov2cUS4#E=q`LO!H3v>z*-!!b>m`2tFd@*!qL$deIAHP3aQCtIp8I) zFhT1p?q-??4&kI`=o(sYG}^51qYf25B9OP41pfi;HZU(_0?1&|(y+KyvaOjPgdC0F zZ>6*`%Xt9v4CgHQ$&m&REZMP+TJQQ$t-(~-#>*VEo|ZW{m^>nZbe5vFJ9nY&u2yRc znx1u8@|Phwv~;xmF>d)ao?@fjnfpQ!(Q3A%Vg}2=s%M>;@|yLgwqeQ>^iX`%`V&Bm@FxDgrhs9|-5XRZ@uqG^NT8y=a` zDXmy(#4r{{Qs7Ud`Fb~E7>bND&hju6qpuaC?+iwt!AHj-VzFk@N385Pka4l44E=Dx zSQWKGZGcu{&RId^u8+cIjc>5(Oit^xl~17GNc;AX@NwX}PI(oLO05iiC`M_Rzg=Xo zaGb&V{dfHBz&F<0+wmckazjIpo@M!I=;xCf9rb82DL}M&jvsvoS%tW7R)^v4&O*Cd zl_EP2;E1!gDRSC|#>=j~`WCU{fP%LhScz)_17sdH@9bQKq2l(xK8jcl3yl3%&_KVr zBL%+3RAb)Wd0)Ql|NMOBSM7Ujo}cJP_=3;Dbc&Lspc{bLl~x@G%xTmA$v5X45MuH4 z$Kw!nbnJkRBA}oqoLiuGF!Z?C*+;$1(+Jx@$4<<6gU&Zl#c=pms8lc$QXaB%Yx|yT zPhZ5x3~2Fx@+P)c$Tmxtr!YUmdh6Ot-*gWg%L}a8P1B+OlgkjGp8FtuVfCa5)Vq^z zk{v-?^;F_KJQfS&PAph~`h)yb53{_ELe;qq#`Ud*c<@5>9ID^GC&hEML7C}9yHj8K zKl!qKPrB!3;|!gRYE-k+=8>pgF^T=39LL5y$+c?{h2~MGASo7NvGq6CVqLWJ)}wH= zVKt8R@3i6m3&tpF8*Gt+Kcoh_4uF)m;!k@nUA#<3Q&705_9WHOG^G%oZXP#)kt7qR z*Oa_L29rpE*+@bs*4pt*2Ne-`jheCFdcH9m1rgt5tIj6hqBOiMa4!{EdO*#q-pu#D zU{|3ObOauHmdzps`ye-f7OUqf;-%H9ZHP*zP{!coz!w?+Q)dr`t@bI5Hj@Vj1&XlM_4;lFPr)w91f$oK71~vkO zIB0@wz!ae`r@QmA_J5FhIgJQpFLo=!j`#4~$F?GK2ogtCF=4i1m>!3~fdoNm#LW0@ z(GCDb6)Zhqo?(RIsWni&_uI9vv4c`lqSiE(m@S(!xr^<^GE{EBDzvD4RSr?GS>zMD z48`?clK@Z|W|Y~VXz1IQF{y3p|eCd&DS@x-Yq+i0?M@_Cv0SV z2&H6<4GjYRBVfZWTyk-o5PL%K%w`Vcbgcw=gM+>R2WhV&Pr#{t0ROjuvkCqWz%lE8 z@;Jrz+=po-cvCTC2J&^g?;&wH5{SMv%o6I;DRhM#r?gQ9R#3_K$UKaZ)w%fmS+zI` zJ|CBnwhSEtMi$pLuMKxp&Zq+;7jBXxnP*{*BxhW7W3RsJ#vWcDL}tUC+oUC*0#J*S zv9q9;5c~)j`2v;$C+v|nTQ)RgOeN>Nn=%idKbz&)DlK~p5&WlMi`atWYk6sE4P16% z{@`nhx?DUY1$HCW*O~RN;tYu;TvPYepJAE6?LyU+hSw@!;g?J6Z~z7qsO%);C}PoF z&#JJiu4F>_i60nr&~0E+kjzEsAD#2hXdj@9K~_=IgzzY9H<~Q{LX2&?f1v$Iz)b}6 zP4K2p?RHQQ1V2MKg|hP2O_*4oKGrA~Tmnnk3Pef6;ce|vL@5e8>x#;K_s2v*!vl{Z zCpSitHWk3C|D6x5Z}ov?VGm4j`1J32*TQT6@Ki<*n@$t&4VMGFHRIm&Zf>{u9b}Mk zy2n%Y_ySM5XMTE*$GYy+I=mEA!iyO7PmhtWD1%*l#m4n6z(e(A^xp9N zJ17Hw`dNR;`0?qFmff2^%e!Fi?3su}&b8+1X|IgNX}N(h8TOFY^nxW`pJhL38&uA#T)Q|)LZkMd5_!>DgZQ(us0I}e<|mCuGFFX9gIE_V9D*`D$)Rzan1 z&9G$Ne)sKn-NQV=mE$f2Gc1^nSAWwN%;%0^KY8O^4?GYbPk5gbzUlNn7x~O6dvx|Z zgO}$&4u+XEd;YzsKl#loo9Q9nc+*BZa|#^OCORe*j~+jc>Q9vV7wPqmu6Wc-PW!$y z4f*N&?jkE@d{>!9`YVc@tuveMk&hV7!rV5aY|;FAv*1Dv4B$3BqSgAm7w@g~(0Hx%E`ZnqnJ`W& z${xq)PoF+_LHYDM_#yTM)8Pkl<|5H9eHhWG`_|SyS}}dmLz#D%rhi9eDjuEj(4*78 zGl~Uqe#-Uuu8crSD(|*`BO>zqccO8A|4zZ&29*8Xt*}r#zOw~PuVLSv%cIl(b=6C5 zwOBs?A=b3`-}+;VhmkdM6$~#NTGu8iJKLq6fY#%(hq#>;H$~@AvROW?T-tZN_X&-re5&j}52LS!D}6 z<(9egD?N8SIvvgnP&nqCd1Z4eV`IX{z=HYkUXn&ansl#PCCld6cwW2@zhJ@q3KBBi<92JO;Lgg081GlcimjjUQlL*iv!>HL zHtS!_5#7>2J-{SWF?$v!VN8B=r&mCVb;;gtag8P-j+jNhEgny&UD@@V-$N!xl-^4U zm-&ef(0{;|7P11SvVSX;p|FYD1xVn?9HDS%Kdc61h9&?CFhtuJeun-8NZ=wS?khmI zAheg|BA{g)FFC=$T@5J2xSs(c{Vdh;3qVU58V4xI&@@0x7+L_x$51Vx#SA?Mh*bDg z3q8|N!_YQB)eOA_=xK)D2lNy}rvMQrrdsIPhAM{o*s-zC&~<>GWay`WY8e^@$ji`V zKs3XrTIK+P7zgw;pbCcQt&%4g+5l()L-b(6e1`D+sAV2Q&43jNn$W#~+#KpM zajFSD3uqRHX7o1FRsfpLxXpkbVQ4R)X$%cb!hFimSQ9D%G=p)g0Nnzpm*sgtqE^2L zBx>*~ps5`16F?%D?_nV&(q0Bs%AsSR^NP^-0Ezrgn9vs{bh4kt@~}veY{V-B^eE#N z01}}gK%xd~&3GFCiI%?uD8MQH2}tzJeODQ{8G!s8y1c&uy#z?qst(W;4n1n(PMEka z0g1k}NEXXO9PbW5BJIxsiL?&@3UcU7KuZ~V3Xm8T&jRu>ZZjY;D&7PnM#cMp#Hjci zATcWJDaNR{9*`IncLEZlVl*Hz0v-W0pL1RaNQ{&ffW%1oJs>eEb^;Qkq6Lr`6{i7- zQDMcUMKLPU04?DBh69?+&=^3I7@BE9)h4vYg#O2bz5q0lQ(QK2saG4h+-5>!0hMsP zS`!xmz0Yk3= z8pY7tfJQU)A)qk~{SDAqhB^Q_8Irzdc<)UIG@fypfC?GP1ysaPF`x+y%>q=+(9?iM zGW4DaeQiS5U1QWa9grA#PC&Ux(aSOcP#!~*%y^}MmUDh#Kq^DO0hGhgPC(fVwE()G zp@G*LWefszALE7qaxpa0gvOarIiLqQv=We@=~_S|7`HCXz#Refec*aojsqIbp>1Yp z(jX(=EhcmupfJZP1|-r>1|-tX0(38jRs#~{E(J7APVU~#xMP5R&d}{Q7*M_m z%`l;xZW10hds*%R^i$6H856hE#Jz0dUN>=nGjabkac`v?^?S#Jj+oH(Xrid|9uqnV zNYuIS4~)884M^1GeiK(<;ue{>S`)Vukm#9xfCR;xP28Fv8lhj9&^bUN-ufRIp<90p zyC!G=|KEVbNO9h3gf0f*MHwFf`U&FovV0Cm)O0ow0`~;|2;4tR+}9@V?9U8e&^O*@ zjMY0#C>zjST!WYHFzRv~RT4R$0wi)Sywku<0wi$tCa%fE`Gy+(@g5)%?%Ql zIwIc9fJD4UOkBB%+YCtX{ZO=tt4$Cy_CW#TICH_EL7Btka=0;xgMKbfH~ znYi}=xjFP0ATbM_Gvi$}p-wN0g2ECKqAG_F-94uP3V#d^&V@4UIpkeu2rgun+a$f%iT68#niB>HVViW2dD4`>#b+Y0D5 zhQ0)p&(IGs)r)vP10?D^3=oO zCiFihv<;BZ3U*8|%Ge1=lyMjk1Sx9O2}tDE51k>Pn@s3-K%#y_0g1G^W@wQaT4IKd z>t*!EOhBR+0)X6Hns&9JgZv@QsNXe%3~1bS2DH$GUIiq|wcCukB$-gM38k1&stKi; z5Ixo;+Of@q>P%>-3Duhrt+GUlCKIBEKm@MYgx)iuRulTrgylu^ zz3JUBbcS=tHL>~J0t~%IO8JPK>BOQBT-TNJG+@qj!z>1dUNh}V^*k`?;K8m`blR$3 z$B3Ny^v&SdR3{OK_CLGwxkRbJ$Xyun)T8?WgMoLAtuaJ^pLRlG4i=R4s(AuOwZoMOS;9O9B0R2 z7R6zLahTO{nE#5y#QTdr92e(A9OfT!7;B>5bdwq>ahM;)Vd6bV7sSPx6o={VFPh3- z92e)=ILsg8FuUV02jehD;xM1YVZM&TkcCqG7@Tl(940#sQ_>C7vtM^lw>VUW9EaHu zhj}RuvnLL7I1Uqy!*s@Bk|AZqkI~Xw<1oYGFr(ry#c`NfaTsqLW@#K|Z5(EE9EK0% za;1$r?~jY~K^%r}k9JG-O8 zD-Kf^hvB1CoXluNYg`;U($ziZq&`<-2E}215{Jo+!xYD1=EPyD;xKYI%ry7>1!ePM z>$4Hz!jUo*KAgAV{Wk1sd1rd2-T7@HhFfLY!ZZEHbIPt$L@{w-W}iOuZF^C@)JBQ{)|t>6mBqOVLQqFJWRD#Iy@vT2V_fBf<3BK}M? z0X@i@fjI0ijm{$I)QG9M5gc0vw;kTtry-eTCOHhRoaUKN4(DfXmfbB;UhjKr0YyXT!yn|(-ECmbjK77EvC@5vtiw3YeUNn_JzS0b#&@GZuMpo`W%*1)bHH_BfH= zJ-fLub z^FzIvj-V&V+J(gKdRYa!m-?m)OD6!je_a`4#-n;Yh$5Bcv)x9;@u}ze_Ot{SbVCB z>AN5!rRe0CVHC>u`3 z5J#|Rn8g%LWyUZ!gins;>XJfk|=&)=z#Owzr z>DlQ?p1Kl2lBQb{&uFKkJHl~A9+ia;bgu`WG~$lcOW^}Y-4JvPDHgF{)MUNyj3jwE z-K)OfO2qv9{O(E0M;CX`l#e~dmQprpw7Xled^##N2A`SI5l@N}!rc;}soklepS=>1 zSV)>8lUrhrSG`@M9pgrJ%W?FmkrQH5$B!A2YfS$$0}5=cuE1!BSdkmg4>WMx^YrWy zjww85*aNJXJ^%LkcchD-%%9)$^Sg#*-IF;iJw0>CkRdU@?;bidJw5C0EIsBUeIKxj z<>*M*Ct&cxkKGz;nIQ~W=C^zBQDJYJ(Iio*l-t{hm?k9>I5M8Sl zKLYng6DH2Fn%8Wy&Ukz4zM*iT?|S4T?gEH+W2n4BzNJa&Z$#qYVL9&+&pmSS!)oy) zxUi5K{d7x*e%P~NV;HUja@kiu^Q~%LczNgZd_wW#)qkD8mI(e8Z>3AF+X2y9> zoaS?T=gp*}s^XZngJl+W=cmuR#gh((NS`quho+fNh+<%kbj*S23oD>eu~a0??0M;) za-1cd{y2W|j0>4XwX(ppXo0!Y(#t}Y*cALv(p{0V*&CkRX|Z&DTs)_wSGE~o%w zpCpEj$n2KTLs_vrN#>~@?_4N^G~m1IIgB!7K=;{**`qH>0h-MWIbccw4ECO+z+IU`@4S=cK$jGl zS0T=E^dtr9!44z^hCU{mvKfEU|38od_2?eYqZZ5FCq%gm2a*vG{Y)*c@*PZ&i>soWjR>~r z3mExSTXW=V^x|xsRMNe(;dP5rxGUnzOEqwpbB12IIqaFI=2mUa_RjYm$PVt4bE`b1 zc&lfTT2bx$^my$-9}M(Big(!-cgj<$ahrI_EU>zoW0#kd18}Q3Np5+`T!8WgTtW{m zd6+=u5sJh3TT9MMYJ;(R@Q1zdo>gK&zuXMvY(rrZZ9FYX+=lF)N$qUQ#p8R#NBQF0ZUY?pJZ_wBio zy8HITc#}2KUn9~FFw+wk_MAHA_MiNjk$#X!pQ?_jMi#Y@kb+mn^jHC%Esfji$+~w? z(P!kk^#{Z+PgjZS!cy>hVxo(_cd{|M;6%xPu@g@=)n0sLQ3n8i4%#!R_FX!!_A0&c zBtKmxzZ;h6L4?|i>z-SOmvA3M4!Cbu(ncJF&i8lVHur~sr4{KE)PXy-?G%Kun}N%` zH2vuPbFqU9+d2Y|q3VVG$E#ZkZI8ew{e#Rhl@y`m?(ccFG23A{*{RtFKcYzE3;k z*NLO(xf$AEO!monCPU!)02)6%@RO+C(^XW%Q=P{_55dPzSG~#i;)|=J9+%Xu_L0B+xI%WDMu1-Mw5x)pHrWzhdfO}krlweLuVt6#V5`Um_m9(nv9AC#sX zc^qSr{BmlGaGmuE`60Y7;YG$Eu0#GEt)aJoNG?jjKcQ=Iff*dGx(2J0tL2<3|J&J6 z%_dh%f$GjNGrmeEDcvx1J&qvh#`7)F{z}8n}yd=bWghEpnbS2MG8Lz07a_n z2op*jm>Z>6dN8^iNfU(5h!@u$nyRi`jd0y3vHHp?e3+h)8<$ZS{WLD40Q!NHr>mc( zDfC|3EA;RlxUmnetja6tgIWf+dNqR~v$H9%(`$$x5*y%XT_~f|WWODmPMyYBgVi9P z5r-c`$Fm}$qHwgsMZ3s(V3upW6n+$0HwI}w;sAaN9l}{jy{G@3Gdm zCGf)_vLmECaF4Cg!JFyzT7r1a0gjXKwsMwpwY1_*WTlp_&VctppIWoJ(Xop1j-2W% z@2W;Ysw0%;SS77cDVk%I>I&gK5T{RWuttVEd~&!7acUA&FVe13gOmae_%iqPX_R+i zoOecZX+DQL%UpswOtuP!4B z!Bt$2|6+Pgrn-T0>htz+XJGMm)fLFtAKi{>simtjS~Ys<9ZgZatMQbH)2Hz(MBY{T zvUiogW>vbhd^klYU7d%Ar~Ngnfk+?(3Sm0t!hs#$UxF-@`8&(GURwU2G(hoCb4?Pv z^(K0t2eh9Ox+Z1(@S4=>g_$4dFPdasu9-ux^sFF;Q@v@5eNbq3$U!gDAf0esg-0Dm z4zdCryp{@QM_6t(b)q{fHNP@lVQk1g2wbE%Tht}Yx(}pTQ392nmvy-suU)Td~0gAzkE`U#qg_gL)7=GeeBa3>El2j0r6djth% zy(_Kw1O*(|D*8j#4_#Z;4YQC6-Wt&TTV?*ps@W=qPoV%%3NKz{!ubHjQIgY$q}Soi3OrcV zgd6mkk&FmXBd>!G1BxMYhZ>lXz+~(e9WUINi4Kokx+$|+L=^~nSZ7Nt!irqw@XbiC zhPh;P6IkcLK{oL$ct*1v!4uM%O&LwrJ;O`uq?LD3Trb#kPLlZ$1Gy=d0!Kk<2tGCW z1vyD!(uMNvigRmdT%tVm1?>`enO>`YnWC`=hb;E!AahjhcRT`8nZ>fagKHLj3yV$q z78Y}~GK)Emg5z!k$6cp@+d^m#UV&l;bQ~rAqbbZ!N3Z0|p~29k^{-I!FoQFfclqc7 zw`YYPMuVlW6O#>%xi$2eS+BmqdF+~mFU5W>xLsQQCH12>8Bc@a35V3Xl>Yj7{40E; zHD~TaFDeh*WzF0zJNIVnM%U%zt(UzS5#`~#@KU#U)7>C72ix$DScCoqu6!0gIxpVD z&ty<%4ELsn?RYcn03?B9FZ>JOIl0$qWvaT8QF`(~8SZ>(u4pFa+0EsR?1uvDnW03F zBHT(PjqGQGAG(+TWIY^N_d@=7U??9Pi}I>BsqDT>-9;o&N}EE1?^BsN7>gJSgw102 zX4*UGOL|8n#h5hlyqp&=5z%~BON2uQOJVgwXD5azjZ8dmhYzziqHWz2U+pa3n5Owo zp`lN}3pA?fCBfl%!j8nBeE`M|0+vt=3?I2geU9QN_IpG2zHl(ZQbToa3Z9hgRp`^9TyUBNN(x;*AchDYiETDPxMKI_t97 z+sopO;lYb#_8X^HfC_t-h7~;@iifs^`!?ai1@GXYbUa*nSQ%?q*KwOu`{7BQa0b=g zu^9n{iRfATz^n^WIF)j6ZjxOa#bYSmUb1VG?A$1_RM+s6l+I25wgkv-ncc+6jHDd; zsbLN;O&%Y%XJZN(gh%|+NJ4}jOatEx4({{L#z4Ufn@)79i-xh;RnUr7QGer=JH>7t zX1~sxraCq%$<|Qvb&%}pvm7W>1E{R)vMzY9rnn-4kqutbOsRfZOQ5VVU{#8){gWOu z!9?G+e#H9Tn?w?(mMA-}syza=kES#EZQr}u^3*B_S-hD?D}u|h%a4bB?-ahyYmaf? zwnBLV+46$-ki`f?+nej3r2<_Oh`A zfkRo(3n16)viYaS==0}x zkTQSf$m3@|DE;Ed>JOf3W=b9e^X`YAoM<2eZk#fQ^SedWFpHVI+-bY)Evo14J9Y&He`o z=)yBoDdNSZ0#W#o_B@Z(lS>?Z$wsEI@z31nzl5jUzXIEV1GbtRpl5p}pBQ#5;NPP$ z`}r7e6WRb%)FYN?U%ZaZaJEI>?R%YG7fkRJpmFlM@;N*O>_68T{Oh8=VSDB;$TacH z(BNOI9>Yt6V;~JJ-c5iWVCV&Rqn~iYt_MIU<)P?O-@z16C%P?iQhM{PDb;-=T4IBL zGy<)W&n37pITiVPqI@W#^_I^7KHb|btCWXZ{w3w0(c|0TYM9Bpj3`mRsBXG=U7P4@ z%0HSxyeU}hm*0UTYE5$C#ID|O4u+Yrd@KU+%yyT#QI4RSvjwFyn9|uq=}xA!>zO=% zCn)_j+6wA*QTp3R%=S}*&L{Q$81LO-XBZv{(|23fZp>=dapI< z9ge5B_9W<~ll(6rups&0O_HCKn9N!tISud4TFT%Z0PZs+eMtM^%^ZF?Y$>-a8k1RSni_BoIm4q37z7OP#AXX zHPtOd4E9U1SlDg1+rN@0UwTGyD^ly;8%nBupC6Z-|47zMSbq=z8=_oNt^SrWH@lq5 zY^E~DSD%j%v*U?65m(q7frr-G{ubWTdms3~zD0xD-^%u+y47WF!&K%@`2 zc`c0$ABJ6!JY>7oS4QDmf6mhl&F|;(nasodkgNZK<(XU5-x9OP5#mp%Y9l&55^RLQ zax72vM<{c%4lVvnEvZrqxHWsAzmsE?#hr2qCKqp#3_q2N$)Y~3y1mirnbY2w;wi)G zge^qMG7|NfhoQD9sjzder3%yHE(z{()>5^Vkx4eT*|_CpbMSqB4{eTlepvenc-iK? zUOt<77}gu8s?mO;vc91MJ9D%4SDyu4+TXHyt^z^&5Oo6g;b<->Xt&rs1A&wn`QKP9 z>;3TxRYv7v-Rf`IOU(?gDZ2&6`bO83|N z6zheR)EP=@W&p2Cegx)HT}^IzpyJpc%Cm_j(5C96XtwX zU|%fo_zon=_)W7%76RS=H@QIL(LQ*w_l`o|sJEVRi_Vh^tMGz%5?)9aJb46M8U4Oq zAGE_9zB1E7`-=2=W?VQar|LA~MbZBvU>S8PUSWTMidWa}#231ac!q4?B%Ec}PAnLf z6%vZO8{2qN-~|jqX~iV)2X^bEz~O!fWma~}uTWRx5A{9%5LZaSdy&8D*a_~Zhd%MA zPW;({KiUllM6K1|l4$BCFa7{l&#a#~QIv1^XkbAB&L3TSlI2Kn3mCxQ&j7tJl3D)- zF@Un{VdT#hE&-oOEB_M(jKVwf_<$NP8(%{9n2F!OC?JLlJWtel3(v}j0T{tSA3pGQ zr21RZ^OR+q@Vn8m5xIefH~LSWhiT{|EdIa%c!^t(YpnlrFKKBJH$++Xdrq-lq*#yW zFi)1Qr#K7m!n*FOn%i_6E!^3Ov6NY#r;Hq6Rh;WvuvfS$1lS)*ke#ctzN$V-J@W_7 za-GO>9c77^tJiU{%bLGNeUYscZUEGC);7ht&dA!rZ-&b}O0}8D+V>{06bSqP;u$htNG+DzCjYg-As6`t zYp~+6a2B3mRN~N>XgZ%kwh`CK4M-xl7>NvyWKpOcgN4H=JFp!e|3=vv4H;LIUE8qO z2bSMMzquZfzo&>A!@1VC)rPVW2`M(G6|u#L5%v24s)P-5Dfo~+DqeX6O%lsYdCw$4 zaJ((Nme8iUEjOSu#L$t4-V7r~8;d6AW-@W3@IbO^C(&`#>#n_K$w(0RCF;x?f_8*_Toc2DkastR`8kpj zTWo>bWmtwo=Ga3GwfiZMrw-Xwrw=a@b?D2|ZDJIUfYf;#qmyS*9@6(4|9a|Uw1=hA#$Yh}OgF;bkRqXvk3F=D5z!Y~llxJ0n zZF&^@HPJsnXnAKL7m`r$D9|9tDr6Dl%YE{p%){z3PCp<|vBOpvvMNPZ9mU@{K-f$~ zD2Jp1q)j7D$(S6`iRG{%8uQyb==|sk>U35nV;LiujWFMvB!n@=HItY`;@^Nrpv@7} zL&bo{W3|MC8G(kh?_iQ#;?ZsZ5{^Fp1XjU@l4~dV5$wopH?_cCf098M}@Q8~`nK7?~bE8B1Gizkh#ftiQh z84YN(e1_beEFVA_s+>F8ePy;|t=;mq{p)=9_mpo}FHm*uHjO+Bpkr%KE*5H@HtnB6 z-o>acLiRyaPbpGgp?PznHWAzg{Y%>okFJ8dG$&A4wva?p*V1SdBUBlDXQ&hcisvyQ z0hQ$ILQY7kl{8?)8bPu54LOb)jk+`BXo5u-dN%Od44QURcaTqZdw3}JWOjyAed3F@ zF?MPXq6Z5nB0m~%B0qhr9NepqL+vAQa3OqG@I)&nwh8935JaLSg!Vs(RD_&(BDo?G ztdGm6aR`oSi|N0Nf=LD=nDs@`dVPCR)PtIV!;|L@d2*dosTD&Qf!8O{|$dRPA;7u-zWSuU(br+&qAFvVm zFWnjW*v_1EC*&}kbGdeE1OFiuyRQ8J{X7}03ph+xQr+Hw<;5DbQ<*x*cbOJ97zO6y zCfE;O%D6P&#oh~hHRPuy{UyoWn2*c&NEtZ1=*Q|>TEEKA|A_`TlS^LuKY-C9>KnKG zJe_qF_4Hj#k@Ihr0z?ChOR^VS6*}tQZwpNv6lwuROj1C?`_ng}{6V2T6fKhNN%z4k zz~7V`Xo zyv2IH_9Pi}JZVb70{E3l2;~EM0#NTz{tax;$WLo`-w?{baYS!vsSl}fJVd>b)g<_y zm-Cb5WkV=4ec8MUodW7(;VajXrv7hHTMHv<*Ls&L33q(7Bh&sC)_*YWcM@5&g_LD~ zz3>RUCBlD8TooGfZ?J0bBPP$+wI3rFD0dpB)6fzBK6~ix(6~X`QG9Z^t`Sl8aC~JI zR2@|BKk>D{z86R<6dauHdk72^+VhtrjXZKwbdXvr1 zzikgq9Ynb2fP?o<;@GP=a#{+Zt$<;Ks|VW(5oj19cHV-TciB6kpjdE@QpxWVa(qdh zLC12GsY!6{A_YT$(b>Tj_&WkT^+R+C&bDQCW;KQ%%`VXKworb*(A1<6 zy%%P4SE!|!H1`<2VTXr9K2a*l^If)keuj*Yj53;V2$ysy)3^-<9bJtem|B4*C?y@C zqDxA_H~uf}p`43;4MzlUn(GYC^0Z~S+Tf4$CUl)iA{$7QEBWa(h;m&)Xb{l@(3sHV z4!?$TE@vv*H1b1cBzOQceQ-&qMCL-;aE4J^_ooO$bqe-h-SE0A<|oJamf+TxGL0?;_fO=yJ^@j6=F}&mgJM7o~z17^C*pkH>Y4vVwffM?Xe zIQJXGt~iVuYUEHsg^yy#r~Xe8$XRje3Dx=G*hthCPL<(iSbpESC-S*nE?s3k2N#Gc z+!()4?ra|(&e!`iYS>$NNjx+N!9@>2*PwNiJBOFHdJluB*5Qu#y!+5jB(p>t!5VILoK4;z za;|kpPDAQ~Pq2ueXqTJa>XW_P@cIka@k>LF&GH%g2)UjQIo2tzr62*?Zfy#=))*{w zPOo6T<}&0z7^oo|m7Ua~49E`+qye1QsT6gDiaV5?Z$f$BC`Dg~ioaHJNGgW%E{F3j zalL*Tj3J~Gi9r&xdmJiuCW^6vrV``<;yC8Jwr|{`T z>~e4v8LZk8G7e&>qI<(b)4~t->-0x@`_F=q{*%3jm!e1i2?Yzp>_r@E#k__Y?M$ct zV(*a6lbACmFM4#yzH#`|Li;1kb_NsrH1}zO zc%wyH|9tr6Rh@0wxC)Tv{Gwtn%7^$!fcUV6#`l9F_vF(!eF|T;O_1TFbQEBY5mlr4 zlvJ$X8P8m<#-}mW__VSP-mB}u)jd@NdS?$6fm?H`$fsG(Pb>Cn6~vtNa8DS*;x|Te z;lye(P2{U1-ziEF)u%LJC7s(J_ z?#5snP&8FTNewm$c-74qZ?tKq{S+ZMT$5APzBd~d9@va%D{fM?ydf1)eWy}91yG57 z&m>`x&cHP;M0WdM9fjl;Ps;fqMFI%*K*jbil=58MVVh%VTSO}QUOtYDod}L*M7CQz zKl1J3gjIv-c<@y8I|v-XG)}4{PQ6IMzhPg?Nbrcob32Lgnq>7iRPRQ|Ug`m9$HFA} zTpkuq_-Nm4_4dK01a`#wnklnUNBFTzYR~gxVsiG!#3ag<^Se!oDO zt1r=VUk=kLW^po8RW=eHRC#SZ1#PDzPT~lg`VuYn$up2EN#6Ac@M>Lv;_z8N)v7*K zgk>MBvSQB?iykVmL2x4s`b zL0&V0(7Wh#s2m=K-^x^;&!68N!+yJ^;LGS3HAtyxItFvrclnh&Bn4L^c$HDrn4VrV zm{@gelJ6pVdbjT)_cYF;z!xs6ZzS+pJjI|UMpIEz`)<1@AMH{zRX?>NTMiDTYUT7H zb^(fiQgs!Ca zTrgp<6ZIAurAxu>T^Z3<>aD~`IALCdEp9Gb9pt+Nf9DA}AmqD*HOl<}XuTvdKrwft zL}I=71@C4a&Z}+sBXIJDTR|$KcySV+?6``M$1^{`2*JcI1#Sb^ffBHC9am~O#gU9g zeATqRi8@(u+?0+GLmiZlDET%R=A4-M?VkQPE;`PRqoxOC&#u;j%=XN~Ssm3^YqYp+ z9J!_ye=NCKmujw2@e!vlSC45e%X{jD68Nz?a0CC?i9I7xkAd#iPK%cbx*YpB?YbJgpO zS>yai-#>_BAQzKD{rr1uB5lQ9Vy367WflQ~gm%w^Bv{aS&lACwygs>ID~{`VlrE-i z!j<&m`6wxH>IQTG&Rf*bx!Li3NeK?8zC*2+UVJ-L(hu4&^$(iht0I9}2L2$1n_Nx4 zd4oU4CvBTsEmANEup7q^&!g@V07flxS! zde)g-pyaSde>3vY$3!5B#)Nk^EsU=RUBk%>!>Oc9? z14}-nOi0RR&TWD;V9sr#@v{e8Wg4=jZC02AT-55qS(t@_@1o|&Rmms&Krdt$%Ejds z=<8%9z%A_LP+niOS;^_!KD|#U2MY;lDOosZF_EROCEyD;S*z)Yx~-(G5N2-V1Z&b0cH-Cn$>6G~6RYJlG-qixGN96# zc6BN74B}=N3bPgBkkAp)ZZ@N>;ApPooFdbR1=?xt$jqn@XU8mv>~i%R3^aWr-d~}u z;q(|r#jBK20sPxj-=GS51om$Wk@vz#1cReO3Q|m*SZJ2Um!Gh(68oA&Mi!wbFaRM! zgLk7M#4?{^1cp=Z4iCOFoIH)W#=1W`yl1`%<$j~&bcAxDvwjoGy{zPX9m>6=>#w;N z{il<3eu^0U^iQgDJU?M&*e_fAGb^MxyFl%_)6{~rpP**EIe#PA$A6)h6g&m?wJLQbq8%Z*MXKkl4;8yy3w6PD_k=IKZ+Z%gA;h|PHEKgEk1SAVi{b1%mLR26; z34bBxG7n?xhmXrE1BHcIwb#nqi4)Z@{l+2dLSZ|WUVI^@8Z&5^bgYqPvNaykWfzy=!yg_@}pqM@|oeH1{M%FSptEq1V11I5^=QG!_??Ah6C zF-j@2%5$Sp4=kE$$;8a%|35E1K`%Ye)>V9BSMm1mDxM78R~C;$YVheQpNng}V4s!? z-1w#3_(P%ML^ny@v3BiNkQtL9X2OIwk*$TM!&dDJunXKNg8*3TqQP|N4R>|8P+YJ8 zhK?NSpF82Z^?d739Xk`b8yt0NZwOS`u}vxIfdd{d5+LHs|dt}J8TXY$Th38 zysIUDA26v}vz|B@b+{<>vOM(Mrv(vD*)x52I2 zCkbnqTDntbp|^Q#)mit0nW06<7im0Y(^!t2mQ?TFP_zG_71^r1K=AG*MjAn*s6-2* zRWwNSH4{AT{sRNMmUQ*au&f-ymsWsZh%*6xuYW}{9>PAaSQqm(Eapp$*{AIsqGGy0 z)Hf(?XIJii#B(E5|}J)@D;~uhW8um~0y* z``D(2hk`h?A#m9LaYwK{JjEVN4%I>FdXCQ`4oxNs zR$<}fdw3cNr)Ea47W2qx=pSsR$zyfnv@t#0ji~|Cd_x{IjJ$rdY?SltwBPtEOvmBM z1bA4FXg1wWHex{d!Rug5g}F@Ff3iN3{N=Q(Td(wHa~avjV2@8s#IzByjmeK5!x9If z`AMwPRbjA6D}RV8(pJehY-y6=AuvB3+6t+rbH7gjMrAz%(EkVifO-Y$iqQ{)Xdm>K zdS~Ufz1D`$vDGq*WbOI0xY8taIeAY3sTGCAophl|yOy+z=gee&N`_HyERnU7l&vEv zS9ZOpuG)%zQR_zFx9n<`aa&;>ExXmbjbkMTuv~;Dv}_)l$zz2ZSB5!8S}_xiT1R@4V42!Ht{$5 zdv%dr-h+#}jnN;lJn08ZPR4%d>tq>B$!JdWbuP9M2qkFnyF=6Zkz&gVyUx$OdAz~?K?=tsXq328Nv4wp;G)K02o0v>V#?3jPT$fJ z+TYXeJ)@5o93|lSTnIsRJ6)b^xrDZas}Nfq@jN8O_-^y9KHIKoM7W4q-aTdyb7Szo zDDnkm&1Q~DLcc_gna5PFtEgwTe@`!&zx5jX4`8xV`h~bgN}f&HQE3eYsnF1FB`-lf z9|}@kAn+j58HDV{Qv+zH^8FZ+W+J=qoI`M(!vK4C~N=1GhhQ4mq{}0v(_u)`ZnbENr{}a zV}~d-t{*B4BZAHanaB#Z08cruQgy+Lbc$PyWk)OTMn-3vDBRK1f3Xb?+Zir@7 zEEle38mxs4bp=L?Tmb)WK}qdxEZFHcKK}wyv!kf9qv(jymIZ%*DI7e|*19D&6MV^r zUtd2s@ejGf;Rw$)h}6>bE!Mq0??K7uk3`h-shgXxU}xnE>Ax!WB%gM(n4_~mO%5&A zLW^d2yX-=rs#2a^36Sd>zc!ag253%4~wU+qhfP%$gJ9+?hK*4IV3k_7{r>v)m=Y^zD zo5Eg|wcj#o_%_#ELeuRx;l~ShQy9g zZ>kW4`cq@4L{H^D8biVs=T(TcQkrB{y)@WVP{A72#QA3lwlte*pC*Xm5aW}7nfp<= zL~qK%mQ8eEPgx(e=H(_12}JW!@{($$-1|d=7E~fzV7+zM+(@k+cc@lHz$wY9pFfo4 z#cL_m+q_TZ%KJQeaR93AHK#~(WG6fC6NNwG@#L};6p&IYcKe{d(ZX=&1(DhOFc8)v z{TR|RfiJm8YCeWFUgoe1!NxM0+Kko`PDErbOmqW*}2gb0f)1i!}AU4DnPbSTC5TiKUyzu_a0 zjZwTmzu*>Yji||G`5tWf9*y;i&p~(4duW%19=00d)hT3KA_?R&tg{7IU0awD9p#PB z@yTeBtYz=Tm06#Y;HcO>VxxJmD>Yx9gm)3qZ-cU0HJHB(y`ZfG>{Ns~VpB!y1ht}2 z=>?&XkjGXGLZ#fqKj<^AxIW4KL5tJb!JQn#StZ-#^f!KkoD_PSI4R8EVg?$`rI!;q z=^tn*V9+p)DEQKE+%CyW8)+Mwh2>r=A~F3-c<$Ui+%)Wx4Q6R$5=$2oX@yK>b<9|4 zhhguc;j`3PjqI5>^Q$2uXWMERD_ao->UYIuiRXCwAySB?td>PH85k&!h^q~BaJ(Qt z3gYtZH)M(wVbfba?@%Xfx&qZZm!3jv?6bb!m#mUP{41Kv^BUp(a{r2XGCQ#`tOjp3 z>EZkG+ulZ0DCk-qP-8_m1YtNaN4jN=NP@CLSP0|!o&DC_$nT1RgonDai&xe=oEePX z_RWWXW{6D3m`8BvHAEIXmB?>+SfFC3FdwP&FlugYk2WHWc`@UG>^1*&Y8QSMI_qgX z6PZa(toh2&Nrh?){-gIjheH}7CLM4{c4J5m8xQz zEARK9Dx=w6kCXqfR!SPtYW;=wHAEIUJ)=ybnD2?tT2Db-&=q-!UX)c1YOtjuYWpa3 ziv$-em2bcC!-EiJ7aRGrO_Uol=d9I-i(Du`<09oN!WXRNv_wuT)rL&h-Qc-mquifp zRO@)&AsX|VpGdWBK5itm`p?~pMxnLGx=3gAY=6yNRGo`GiD~>z(dP>2(-3*==!P&O z(hxz@kU@K-A>C-m62a((U?D<&6fBi*zfsCY@H-kp&vb1_u`Jh0!KPXL`1e7$Is2+q zBk#~_*IXlw>L!iK?AoX@)u@cbIR55$%Bo)k#9@%f=Do8LH9T5Kp$89f`0FeLPqaPC z0tMvXx%DvQ*Q&2BWbY;dsd0tG|B0h9@lECAbhR22Poy{Yptw2$@AHQ zAI1 z5!ig&Z=Cum_2bIh@XqMq&e%==LavS8c7#P|@V|`DebG~`r4qByRDX1`ip{o^zf-0t zcPLImyrz$K+C4Ko@flZSmHs6*C?j?=+cQ};&3$^5*F#{o9})F7ruO{jG+C9TQs7)-{Z193qQ>iLFO&x{pP71TFv)ikJ$AY zQ8kp34_dD}`l3dnTc(_V%j7FNIP-n8^f{%WTrPA$L+PLYAVA_TqW4f5JllAU6;mhY zCF_liUZfl1m?i63*m`pTr4|v0N?>rR6lrK({x0v@Sf6|=yvo1gJyF7hpNl_yriekJ ze0xl4gAE&W1ZMa-EBHK zcB3J)?+ygBzIC=-=2xqR^!FojIL@Wa?)kf-Z*hg4_e9Yw@_8=#IFDcuc~&uZc+7pw zLs|%#gFeIiPTfbo9_ui#Vm!`3Lg~0qu5g{(BI3y5iZ3K%_b6!=F{}z-ey6v-;C++D z@O)wJ8#;~8Ggv-{M6Xx6vTgxckv;S-weXO`8iCDy2;T5# z>^8|I){PyO+=V*BS|XuLLh?sPt-wf)98D(16Q7>j(GXZBSSM1E+;%$kQJcGW}%UOdz+TAMQ3f@bDhG0de zAWW{SnDhNF-zD#JVrQ7`(UNDla@=T}Pn9`7m5t5}qy|h`X zSXBZHvt$Sj;?)v60lUQbC~wR=Fq#p+hosAB4UDl&wWz;S_8GB(8RnPKh@_R`w+aVP z2PK(v&+DAzYw^O)I7c*?x!Kn#VoXQ8e~zdfWqPtM{Eq(&-c_++nM@t-DzG!dZ&?w^ z;gSukp8_P;=)E>qu9aw5acW}wF4hFZz-~_G93q}NV&pcQm+dD5QeGbwqM?(n;ysO$ zU<Oj~R?U5gD|N9dWEcyxyzIio2{wq34%)$%tAlKi@8W_^kHpS)${Lgrt<$TpC@J*WR==oL zWllg+g_D&`(i7Fal1XkxCaD&gBr%m>b7>Ksh2cQH)x>KnUgUR0DDe%=f}xde{6XhD zTD_s+#U$PGsM3gzpz`Vgjhsg>boHU?=?rI>)*8vpS}7$l5V@tMeyfvjQ(+612*z*h z5dlcmNU@J|LT$cX?yYAd4{hb7I`mg-jpQZcpTVxq0AuImZxL=9<(2o!JL7#g4pd?X zRo}${U~J3@<^dKy)Wx(@^u{c62prY|q0Sou=N(aEyMM(yoUnP{;t`>zS}ux67(zRT z){RzN%9Y`c9)kVPXIW7$&1Go`Uu%PybA-%xR`vcBoBb=^=jEQ{b-Y~YZgSzFsOS*W z9viW?#9ul^rD~V5<;z?b9mt6=$EP>>5`Uy72ms~|r7wXU-ufH_OZ&a{^`gYpEg+Ol zIOWzXuX)vd_bE9QSzw(#H)>g0)mFA0(X$ilk;>%A!nyyHU+aBOPE&4Rl%uKrRiq_$ z3iq9cdZVYLt~(VTXgRl$5%Qi$2y>hY{D36ixowsM!qm3;Nq%9+kTxkUw71RjyJAQp z{0>pow)wloYou%LCyt%v|31ITt; zKj3k<+j572sevNPttFDXD*0rovMxrwh_fPsNiXLhS?Y3lKFQlLRfgQ6I8GUQRLcDj zRYJ^nNyi6BSTy1{AsXRiTc>$d@)L8Nl9NC33gsT9AXp|<={*y@m9u6I>{Qpc?4?Tf z6tosyYuMR+?}W?K9YJ@bEu!mZ2HFB%^h z?*X-R$_2$i5~kMA_1qS6)_?_S4H(24@POKvUZ0WtgBBv1lS+m_-2KoiB7`G9JRv-w zA5mx-f-{oK!KKR(=P;RCOC=@+r^yiN;6lj|5~gGb0g`LD;{{XsxaBoOUGQ?*N}Wz| zQpMFSPO6;e2Y8KMDO_YKi@SxbgO_JU;M_}ttzRyh8)W%jAi!~YI>tRZ73spJ!v^@<}{Zs zQJuLtaTZ4u)oVl{0Hfu|%B-{lFjvRaBGa5mS*AMRNVL0l!^5${1^G$Pg*^qsYI=^j)7&xd!&>4RA6#N?H{Y*2l3{$B-D5kij_MBk zdTg&doY7;uHtZYooock!n)PvCTr%&`Sa&GH{xT17(n&AGd#{n8+O~`y%{>kot(Vkw zX7s4ZTu&-kFd2UiOEQl}nu(O&2y6(`gs4}{Q?z?b>z-GFS6R+wtsskPNoz5u-466?S zFxjgQ01k35n?0a!A@flY+FLnxLVJ56O|)}+D{<#>YOu0N)nKKnv(y0H4igQp&@_}G z`W?~oP%oc57|tapeaNq7Go^y9I3@Alo6$NAa%Qpjm^5e{m(6=RYTFN;W7Le~J9;+c zFjOh1c`r7d)Tz@|R16&RreDSGqGZN+!f}+$wU!brwAS%qxLN5;l~wbKvl1s#Ktseq zr?ifLl50I^9VH}9>v)uoH1q>&sl-6z_?o41;mpcZK=LJPi3DlgXtP@Ix-NG*^E5FG zHKmecbXD&sF-wo9K+R`Vb^O~>RR^7_>bJ5@rm7N>R@I~Q(o$84p{ptoDn?UfCsh@M zR!=vpb@%A1N_f|*qQkk{5&8_OhUX{k&1u3Uy!us4$Q_UGrb+ns%N4IbxznfR78V!g zYF}YA3rB-vr%alVJGLBGc)8m3*I2w6DyKloi)HR~jaQg-XR4loGiFR7XK^Q$J2hO1 z1F0~WyK~3p-Z^dhtZBI^50kmtQK-sZ+&|)`@Q#YkT=8t_@k|egW`sjJ zO)fujrG>3Tiq;L`FCtJa)57}$?Z0(Soy13~T?<@ZIhEHD)5Lx5BpCc2;T$|JI_c6%%qHznkZed|%D~-kw|7LTKDrpsN(F(#5^%LJdIuRp>Al zBb{P6kWMk)#fcXh9r~sldcei~%f(%p>BJiVq;pvh)K`^}bVK(66)4<)FCw*ZyBFE|Z%Qy7oPRblL(Jx&}z6 zkQ)^`wA#hJ;^O31h>my2#dW&4g5FNrYk+jTn2THF;+}DFe|B-5F7AZyJ2gE8NY~{I zAf4Y&TwJRQeFAi;>giKXbyA!Sq{rLEF7B5uZjy_e4y5Ta)5XmN(xokSaU;0Xrt5MO zkS?trC|{L(61Pq+QPAZ;KUdJsGaX#y2hO-0$lD$ruN3HKD&Dg|I_KwsbX|6x<;45i zg}%=t89lm3o#Q~$fPSiSnG2+IUg$z?E|i_?g#Hjnmv%9bp2JKxbhQh4&vR0&0n+7e z1Jb1(bVI+rzzKc%LXYPs9vQ#8T*&i72X~GOUF|}*xlol0J>fzp|H$LHSmpO)7bw&1e14 zxQYx1l1o>x2Q&Iy7piul8W)PX(ETp7$b}wup~qb42^V_Gg_gO{au*WwsJaHvyO3B( z)woqIbbNoI%6H{>8sL6JpqG!=lk3T##mDri<6tg1AwAB2gK6!8c~dZ`;!^o+10$|=Q<#rHl7f?Y`S8`9)p>B48}SJ^V?%E&mV(XcMN9NF_^u_U@~gU2$=-RY>+W3khFZ_zhACZ!?K55_bwkEXnpQqt=gYS9n7YYUG>t<1>`G=3UGqyX ziNMNPV`sRz&pEeHSDx3J};}y;>Ng*_h zGir>{&p~T-V1urw zV$uIoQPQVzyD6I|>tt_VZj0 zJMrzCXMB@6>(rw7kZ+4{^V6PY|37>I{&d*6*w)V%@pNI;i!xAE(Xu~2TJjzmSZoH}u zmd4AgV%l?wIyq~UW>-3iE^3RFCSt+Q7`(jM{3s_DNP2g|HPTrd#R%>mfAmI3p>7ui z_r^;8$$cIkcjm-OKd<}X^jP4F9?f(U7kYZ^Q1$OoXFec3??MD=2$A! z|MH>ukT;Eks(oMFVstv~^G9}2N7cq%)&lACH-)Nne72%;=)P}B|gEf zmWLNxiDY)X;US>ly_vZ4EQ&|kILaGoy9{CW$=g3NzEa^_JJyk1;Z5pdW5+@@(ET;f zk&iVbZLs@m+CjzRd&sO|Vfx@s%f(-_j7V~&i}`t}M2*EimhUB>@Ll(jFwqA&vB;M_AY$?) z2SZ$E)X!I`j*Zzc{|Vy#f&Z(xq1B0S@RBIYY)i)T_R39fb4e@QNpotV15xSf^3CmC^dX+S}ff8o;tJ1euzF0zvic-d{Fe0tf)rRl1B2q370XI^o&dLmPEl#3UsHsB4*{+lyUnBDx>(Xi& zVQSKtcUYzlk~Ep`;H?{UUIS05X`gyCR!dTY5 z?UtoD2-AL%CZcFQqN?7Fnu+{1A5z5e7%3En%}3x+d5IL1a!Y6&!2q2Yl(phAELeH+ z4w)K^2%?`Ni@#<*QJ7P=k-bZx#8i-qosxeXK76uQ2Pgz}O8i=K#d%*wKShP`KX5q7 zD;&SB0wsBy>V17>fC>Eu%g|UOmD9t-T&?rA3UvVoR|P#R*5by^|1caLAL+`hT%(H3~ywZ}c%b%c#ov z9#&KZYV^j#EoNberSpv9$=`G9k(~zT$TB;k?Haj@Wbc4lVu2m8;7)cx)C?h8ZGyZT z*)<1tncKNB9~JZXB8r15*&PeM8wR( z^4@t(f~3-{-rQW>}>8N!t&hEMeKi1COz3Dr)c>~ zEwkOJ*KK1aUPzGcW`|kKju9ht)%S3paP-Zp^Mz2!7F(W^aB0PQ!U=#t)vJWP>5Qcm zN`b;64q+Xg$hw#!FqYQiik93rjwo7cmt{+Yh&+W%qvhMmdjbrTzoDEHs+c8XVe5y9 z6OjvG%B!VS4mGI+?N0P!R$`|&oFGjZ;@u|koIZteQaSmZ{5&O};(4CAh)$5{DCAr2 z3xAK8DYiEnPls6*;ojy7KBYxE!rg5}N<$!9@_EG7s)I4sFC0eFIxuLTagEsMo(df#Z3sM(O7w)2Xj?4!k62*4DhZ>Ql(al8(K`)+$5M$Na}u@0 zf;;fTs7iWFmGoR%qFq=CO(lBRN#sZ((x!(=WNhwCOZ2`OeqIe#mt?I-9kIZN6vEwN zRme+e@jp_L>z&N^#DX8k0-vY`tRhKT%un4(zzn`_R4wZag^a4FIz!WpswX-_6OF3J zIz!`(s)sv6w+;#2G&nSJU@FrBk$- zy?VJXbcv$N(L|yBvt&FkRuriwwM~)aJUo4KMV?utWdHEuB4?o6#7vaIIbF!JD7Ahm z{pH0cFpEao5y*u;$QKQfz0QvzN+5fMf`tG*`3qT$!{75Sc#pWeGH^RJB5@GbWJ~?V zaJ~w*`xjmZ66qutC+^WSIJ zc}o5&G`{(@|B*W0P(I`ug${MEo_ki*6aI)N{>H%@{0pU8aqQ*9w~@R60}3C2Adcz5 zk2~ONMTLcv%!6$!AYk5mm{ouwYh)>~7K$RrRCGudikJ$aN41^C`=^_3nP^fet-f?7 zPLX%m8>7_xiudF8T%6pc2`N401pk9zI=XzG@>cJumV>rzyY<#mX{E5iuFxNO>!M0` zmBg+Hr1{<4o_L;-qf1y!3CSn044xQG|7x7bz{#kp_U#m!7*2>iXWMm;93+F{iK69k z6czCs&x%=3iWaOP@)eblFe+re5*2bhDnGR%`^jp+(7*;oCt2C7l@ebp0^Lk%>rq9& zCDNdVg%Vdj)=FU|;zYisb8?<&X>Vj+N*BmzX089BB@h!%@0ivS$% z#FieG-;r~@i&t$e?w7G>_L&h zAtJwrkFX+=g3(!2Y^{_;t_RFqNpztkl3nnwm@@hti{DN4VoUGgn;O{13Uj1&8?9GF z6Qtgdqe<&PX-anfn!iH=OVz93QBe>1=Pw4M%P&%V>8Pnyg1E2PdQf;1FImErnq-ky z@)Ct&{1NHkf(NVl_SeW}H;p^viaRl8^E9E>lZrdla7&aj>+6W3aD0_tcIW60OWaO7 z8x~6a<i&FSmyn#VdtaDU4{3Lq9IU<|pV8lkFoTO;Ry|xiOaXAH=kIL{&v8nZ>8mRaVl&!QC$myrL zqY@Le(k+vJ zbu3erZmG!w1-mnt(>2n1Fss3498z|#-NF0=rrFahm0hft9?Y`>|8^jUe_<&C%COB4 zKCw&Y)Cnd@o=+u}QL&@hNk!91vC8pphx!QkFI9-RfQMi?NbS-E>HJob!>X|mGYWcr zhWfDeOMJ7hj>u@WNy>H~4S|?(dX&J)p2=Ju$hL?7Eu&FP9~G4jG6#l2bBodO5)?0u z7CQ#ZF<%fDb{77fG20wEH#ID*MPEq;W^j^~Gw*GDfOt%WF=u4yZJM9;43(1G0xK>{ zgUs+^=r6TIB%VEpISOZWOpS`51&$abvKL2)9n41Qq{adfW48^ zqru?@vjZVP|k&|Bq}H2_%K9btdNR_KT<#I{;1{2Q)z#hLcbk1r8n z8&TOEWT=zDjI=k1FnqcBqNs?I%WT;WC_)hS#CA;{xInr7sA*9$XA(40Okh*fyl2;9h zU(t5eL8nsXF{39I30sKNEOMIh5>dFm!_Oi*L|U&q1OZW#JMjy`zC&MjG0eycV~y0D zbh*t*Ww8Y!i}%kAjnqncThE#6k8FWf>b4DmCmM*t%0Fl8xAD>43U-999wnC>r|nYn zk7(*_{?g|K4r$E}_$T~_5hI8@h`7#rSDe9ExgwQ&o9o zr>ctLw_yaueka;`F%q-zcjWJXxvIrHL{=EXjg{<(Hbr-AZ4;SQgix})Te3Vw(v`F@ z?4u=(BKK@05Sgdk8rB;-znHV+x7fWcFKF}|&FY8sK!3`KHZdt}iT586>*FssOE<=D z^fS|xY>Hj$&rru*k^NM7+C#wwW$EH*OB9j_99s> zkcGuxbCB=+UHwXP{Kk4ftU6^UZz@#3WhRK1>@S+^b#+47@! zsP9bU8}7rP>Z(2*482i(_`1-m)&mlu?@6H*$)8DXwhTRK0Juo6?|uQHV#YFl_y!hz1?l)KWvkANe1MuST7MAx4UHeHO$LNE8%b@ z7u<9c)D;mWoh~CPWKvVYS;SRMeh?&0mgy~#B^k_=>#oe~Qa*PX`IecT`P(hJGV;I0 zsCYeb8+morksWhC7jLIBeo)8gTL(2FiK37(PAZtSzbW7sStQK?an`U7FZX#-5m?Oum7|b70Y1~HSs7lA|m35whJi?iA0hA zsuXqXmMG4TzbQ$a`xwX2=O)dsias5KdvH%fF2ttjvkqfi-%X!C=+OTg`c#m_rjJ^G zX3yc0MFU4F!k9U+lAU#*qMhJqm{=X~! zz)l&qMBl00OLq|}^g?>n`RT>X0?Z#gY><;_J%z|SKiQu3qicB80M8*^w08{Z0Zx?k zmQr`IYcm5avb>4{yWmOLCHdzM14hba&t{dhq^9VRR%wg7lU8!VsJ6rwca%?)T!Ss< zTlKztPjvzNw!-Ru?Ayo#zkTg^BF}3v4rcowC?g^}4C#%h0L^;HhnK)DnD&H*pPU{W zhIvyooLSy_?{@FoW_T|?i6nMkVzZpq$41B&p|HChJ4?M&$s%sO#BPfX>k+T)6%BqG z8`0AYw?<1osjm9eBQC0|KFM%)Q<1vxnV`Mm&$#N7OwgF#t`q+%gDHiR`qhvkd5W6G zeY%k#g-6XQj_=i3raHe@I>HZ|*>VT6We5=rXQszUsZdgy#p0AY3`(Y`Dx0*H(9edm z3AF+(T0HC^SfYtPQJuq~uQ*@IF zq>yb|+5|F!Et?r^J5btYh1z8XdIcqHR^1rQ1+^rpRWl6CU=cb{bXNJogSAY+k;&UwHSdUL+0uWH8{& zuhR()Z9b>0#LuW0vXmTi>vAR0_WTWlV!=-env*Z9xgdWF*Kt}$aynWREBTa*KW*Fy z+RL?p7IxU}_IhSwQdIi>lJvem?s!%5nI5JaDOZN+Z(ywSwY&#wxroC^ZkhfCnZ%Nz z{iLwKV7$cEyh2#PD|)zEz%pD}ub9pq>hatuCylX4UhlgM30g#$%QidH=PzQtuB$%e z^)FaOCeYy<;rcV}{e&Yd`G|ge>7!IL??+g!vKR2=yT@bqbjqtCMQQ5LN%fn$I?r}7 zr43UJHC6i(=hCa1jI=?qdWhm2(LilkOWJ8{JiNEKAy}=Y!CIIoQoytyslYhgTETQ+B{i- zHn{fd za`aVn>3d&KZkD>kBOYut1KZdxrPTb)mdt<=u|(mJj{ScluD(MFEY4}q6aU-DRD(;( zmgR<#87eDMN*o83J}N&~^QQ3isJ1;DQCUWvfhT z%oF|^2TQNX2|iaAX7!2Rkonqcw7B5Vten@@160qw46pJv>nI(DPb=1?k-85->!eEu zg%bVfQnTau`t8)?R_@m*l``47T^cM>8w^27c69V_m0aQ9wZAgySF=Vg@qO^uSr)hM}2&3%lLT$S)!Ag^495N3^)i~skc8rX}kz{-HIMiZiq8~x_#FpBB zy7!flPSpzyM^|#$pXGoce4cS6D|7`7yqM-|jlxZ%5rzK75CNM}~@`FV{69jt4 zDJCrYRvva_xx!O+8f=Rkr2c zS9?rt9D#e!j-uoMmm;sAo7}e%WF&hF(P3G`Li09Av&>MU*ND6sDVm8|^KpIU;9+1QapUvBnYg2Da z)>?~IHpV4{Mz(~9*j2IHZ>L@xAKJYxk(rjqEL^iwJv>Fl2X)tZ;HxLH#Z(!EUX9=6 zl^w8q!^+OqS^sa9#lJL5Uav0bgckAedaYASU3AY*BXN#H*7dQ#-($gg-SMJ4L~$dA z4;s8{{n1BdHnvIYkNk~aHhFEnUJeGSxgUI;;R*lH=sYuY4I{Fn`WAKC z_Bvs0ec72lxqt}CckTDS6MrSYHoN?7Uxhw3jlWZ{&EE^iPxP9i25gK4;PQ<&f2Z%n z18>Pr{B?hHGhHD%L)bjHDORHIKw~)|ZNFc#S@!#@{84#l<7CalrRG?PZ1TJ8@B>>V z-1k6 zC4aIOPn7<7h z0QA6MFK@jfW21j}^F+PuniDg(Q@t&I7CoZG* z2~oJF4F-lma$VPPlYGpcS8RpsUEWbhE+be5e)4^1tZxU{Dvb6&4x_y;CJ1Hx z3mJLYJSa=Cap-*h_&ni0*1Xa5gE$9MfHnVgT06j0e@fRK=X}W?e=}$CoZ>$kd#Rb( znU?j~+wWaF`xVeXUk$lCBYHsohRx-&T_(#=rU zVjM7s`C4`vBia_MQO%a)Yma&+UQj>l*+db1gA&n=o+>brOOTpx)cO7plC!DuaAibC zW~k)Xs*Jik+*B1#+(6o6@5kqJaHC#)l=ik3^p)m7#@|yP>OUFtIiWD7al$zr3(ldE zx#2r(wqq|dvaR8DC2bJPU$cuO;{Ug1tq^8`B1~;K*q|U#kSY8LNAUOQKSVo7VhL9h|mz1 zj}ap#{+=KDnPmw|-jCG_or|$_LXWA1J@&g%M*a z1E|Mq#2U2qh+fG<7Z~4k_b-tC;(WR-6MvosYeQV{o4CBYQy;TKP7c2$mDxhLS%;%N zGuRrsQYBp^CA2Wz=+yCRb2`mHn}ubYjA-D~j=}drqz8z@qgmyPcWW!RlN`%0XIeMR zH8+~U-OZmFReQw>jhYf8P2nkIK68{)C##ARk8D)wE`_YpHhA)Mas|o_ej43~U$^s4 z$tw9Y7Wg!p>9CXDFPR7NfN1+EJ&O+WulOcDM7##__Eq+SXlh`bY&ks-FYE~H^@c=E z$78VpuhMEya~lp{^6IvJXnfe6o!2wc?uByjmA_?G7Jm-xH|r0Gen z2Zc%CwVLzEMGc2v2J*b8%nRpp;0U&`EFf8H7C)!ZY@QbTR~#WcufdC7)*LRl^AiTm?s zDt`?SDzDjWZ%#Z=GB4!#HeavHaJ3y{0l|E;5T$RS3`dP!v7+q zV;$#-4+#+11Qb;e(bSkdP)}S>cxJ~s?o9Q8utWknSwSs8SwIJrDM(%<5Z7!+YmXg? z9Y*W7R_P}6X#BRsyO8NM>U_p$zVJSwqC7>ytq*t9@(y_G@K0XVGV>qi&e)lQqGt^J zb@)KyZxTW7plsqy)t!bV>7y#?CepQg_d^h!w2HxSZ0uRv6B8wRa8tnnTta1Hb&bcv z{snSJ*t?G`_M_r3I=!>rjd>IO1^FeY5;C_+BuUR`uUUH&7pg48Y(s@&tQVn)VyyiD zR&Z}~fiZ-TuNKmV2quS!T|!T`x0#}*(ieDIWm6WL)Ivsx2k zuY|-OOX4rTk-G1tP`uO(CF{^B0Jj5Be5gC{Y+x%|%N&)slv0Tq8U$kyY;$?&1At42 zm2Bxc1TFxVI7nesyg6xd#1z=etANDEf>L1ek6qiAEh*}CaN1as%o8g>n_qIKmbaF^ z|L}{WytEA+--!HOZ4#RWs9$MK)fr|7kG9&-z!xfX-Vq%zH(>>%BpR4^ z*aSd$ERC8a_ZOToYh`SBFVVDz_f&I6aD{)tj~HvUpJghC$)2qoyPu7xVs>qTTzIZVNXL{xwJ7#Gbo_mRXmY zx{|?d1;O3^8n0BlWVaP;@@_Qw8{UNL+D#Z;C{VrRUpQSV6wFHeT_)&sB4pGhGEziX zFGQ%3S>9Tzh!EIgtjjcNGw~6H1t~9YLtke&p+`e^CdYQ3cpn=761j4m@Vp>g8k9;= zxMqe1wGIt3(`oRW(BLJP29mF$fq0fn(cn3U2CFm;UO$!ws|td(p{uQuS}XXHw7=F0 zKTrFgw*t>Q?XPs&&paSjBlkp`;8c74ZI&qv7scV%hw@Svm%+(5U@R*x6fo*B0+=a0 zfH&VyGK~*1y&E8cv^3u5mu67tAT@^waG)pA(Uri>Uo?OnVAn)qi2#?xHO=%al*{^Ry#(Z13)a-oUcNGz9wf_pvwA^oaaDUG(Z3R!4 z*%}2;I43?3X`(k4_-37N&2M3{K)yel#+VpcqlfN~Z38D%>HL8HSLDgBZBQ|vzmd(# zeD&mT{%&Hm^Bdwc%x~pKZV4)ZgPB7^xefF8@O!{W87IffR);SlesZCf7i@cy@FUv; zXqM$j3#PS*;e~%#41VS$Z$&?$teVA6v|ptz5P26hS;~}}ykcOl>#xZpMB>XlC8GI0 zGsq)uMC(@wkVCgTS**1AyoluTq6iL{DhXTGVO zUXK?fcZ#_wd8*)O%lwh2r003+ekrvaLx>Lk}O^0&GMO6%JR z03z@)@WiqTc3oxJMVoG$=$qGoI*==DIf=IkXi%0AB}oIOnB=cylj=~;r`(n(Q;Ib| zqC!O+FuVJ4Q!$FE7$nh3p1et+DK>XWS;|mZ;%s^_#d40s2(hQ7h&?A{RnE37=`Le) zmhpDhK+OiJbSe8{=A4jOIoni`Q6KlTbjR|}l00kNJRybN-#eYjTZKN<{S4EdxR1oYcY;H6Ej1UH?O26Hp40${2o2_k9 z_t_RIm2tm?awV!_RP~#32;d3dYASrkkl9)KRmi+IC4Xr}xNn1c1S!QeER4z@KB;G- zl>eZNMlN0%%T@W@p;5Ux>|s5aLwJM2N!o$MP{evA7o=vu*g{cvQS)fv3t7)gzu*=X z2LmNvR3Gj(tK8h5zd_$8v=(}Z$ccrulHQLk7C&O%M%J(`LwRHuXg3%3CcIG!g z>SV)OM+|GB913_FV~bzsmlIo2fOX|J`r2*GY>%pH^zY_hFo=#%d;zbkt{c^Mn1`|0 z`<1R+D3iT>mSVde`q7$TDFP%{C1nTTx|#eVwS9b2kPNx zbfz-<9H^Ivz@dxvGdLcu)rcE9xmX~gxN)fatP@@(Lr=M}dMMF7p$zW^(hwFpL#OrE z1o)**f&2Z+Aa;4AEv9(HsDJ!LgVg&;Ey~*<|yX;|YBqved>#%!n1<#kpj`M(m_gVf2CV;oXha zgHdZFKkGirtT#lRDoyh*SPj4i*1w`Le(g!#_>4>Xy;w^b{)G}?DWiLGyijvG$N?ke zk?V^o=F|o>>3W%m<*L(bGAgi4d%~a8A|CkyoHb{*v3YL7{^c~LseQXNPy zo2!rMpBk}hpy`TUas)qAPpF%@di=BdQp&)bw5l%%z@jo8MX9rMIJR2EA|6#9!(@>| zG*lfk@E1msM6OjZW@mmHYjbI%X-F1EZ7zLiw6#inr8U!HyT*#jS#&CQ8Kft1tXo}VPdQh?cE zzYHuFD+E;TV0>t9!cR=^hD08Jg!Qx{dnhE3n$H8v;Z++W#9arJdEp|~0d-z4dz+$A zL$yq<@-aT#UtcXl*JBoiT*Jw!`2g$WGN&^kxH^*EGFlq~t$g!Gq*MO1>0f&#CoawE zUrKAu###n!L!eftlf{c)jXIr(fc&x*E|2MS_AXHE4zbOpk;`>Vd5}bc=T$)wxoM?x zS1J)*PPP71qsxivKlkg@i{y{v3E+y3!nvXe17%NSOiOC&veaZ|$Yf^S7+>XW`pLEN z7PEP%I1NaitRw5FmX0)RHn%E`4-V*Q%^Wsc8$xyuRXI|cZ5hI$sg+SnD*AjlwQ^$U zI@hvf@TvW)tI!yrrB=0MaxQEwPK&ZOJ+KSM{}}opBz(Vz!w~obPJP5>Y-JqVT%wa`C#0f0;@g{(5e}q3hUOC$eY! z#PGB`wTofgwuYup&z&;1;*K)cZ>Cf`>Iq$0!Z?*SShVYRy)lD)B z=Qem?trT~w7inLzc^*3wtr$OL?4+sqR4SW|lOAd|bw)*5WhJ#0KgS-sQ8T9CmBz`@ zBhH7kr{ZyC+T*cj+^`|n9)(iwa}|A*Ph91eNgC>zc-@E_kBU2WQl+Ziu+SzcWN60aC>@=LqR!kStYE0!soZ))Ljh&EtXW8AerdLc*u+tFbRJklPary+O zEqK40UU9bvZ#Uw`hzeE~{p!YCMOeCx4#`zMc<5J+%pE^={KPWc+g7NUo>X+*KRCQi z$0;AeRAx%qv^zo*F}>~PjYoC7&M zpq&g)DVvEmA}4}!VMP5W;mTJzC4${TWj}=;@Ma}mpYa!j2VN)ojIkACrhbvP z4SB-TaQQPGuR`MDmwIY<)QZuZB#I%NA7Q*cDMHVhG=WMBDaVF9c>n$BjOmp)3!Yh) zt3p(qiDi@Sm>4>4BppP;<5HdWTsN%}-@)3+vQ01OCoC`?KFtlmw{GW6I(}Sn8D+-_ zRlxCM8H_Yod)H296zy*rLlBaneC(ttVSGf}KC5y5Gy%V2_uM!-1QCy^(=kk^99>cW zvEy(26{LVh4(T*!q&}F&P!c)h=D|Tv?_TROM z{8P9$!{Aq0(W_DU+s7 z!X5aCu`^{hcG*m#UMX~+UNK$*Dy0T^WFI??IGVX^CheCyV@lcB$}%RNDN|g3>35cu z%@||nhAT3lO6uVzbiC8+c}%-NhiYMbwz=R7`=hvZf3spSC5Q!AfrK9YyzrNkRgyZR?z z@{zn$_Gw>&mo$=}r_L@ujHi`nJcrh)_0ddiV~ekf~$uDAOx*;JEAcjj}|_%90k7 z;xi~VE6eB05HGFjC%q;=|81D37_!NF<}SR-MY~MD%7Gm7sLYP;B32Gz%ZkewPHOUG zZu^eU<=}(-@1{Iz8$i81a*=+Xf-VNCR?rX^5}#u_#VtTO#oaDWOwi9$DdfI^h6cjQ zI>iv6xhnL27x$2hs|C_2E})w@ailJn0m((A-kyFZIJpc2(zy(EaW?=NDqe|;djv@5 z_h%rT%NH(gNH-_HAdt>)F_2EN(hXe=RHbq*aekl~3U?8Z&hPy1Ii;<2p({>wQp^R?@fNvI9nf7W7ay~R zrdke=rt>dQflODSVIW=Z93b6C^IcpNNYnm77dPf4C%+Jo&Tk9QG?m}?Pj>P<8)$~Y z4Rmq0y3jZ`^gb8&f(xy3Lr*)!$uAd3=Xa@#>kFjoC!XGQJBGTrU%R-wUFbeH^cffT zr3)Pd(q)J@VokL^K)RKafTn7y0ZmcR{Xn|h$6V-lK)O}~zVGC61CY+;EucG9+K+&A z+60g;*L$ji>*+!{Kst1oi@VW_xNay@}Af5BCe&EC_2GTW{?&9XS(33#A2CLn8@4BJ;TqvuLli!Iz zy4>@C?pF1?)eU_QNY~{HAYGRkXE|f_C7_T>anjiy&qM_c2D(E*uL9{2dKgHz^89lg zXe7`a6>lQYJqnr!q-*d8H(otZxe7fy*GYSo3;iBQ*KZZjy&mbef^(hvRRHO7p9Io1 zt#xtrKzb(p3aCt_%{kBGk;SUF=NuqitE+)@JEA}~b%Auwea?4ka2b%U!An4uDwlr( z>3C;e;M8Cl&^#6T0+3GeHIR;X1Zchr&AZT{P+uTjmtjDfLSZ1C;$9%l5s$mL7hUL8 zAf4Z7KlFIUtDHXt(rGh((b*Q zr{=~ng!(m9v7p<~_9O)jp*#Rc=66tjWGsv6X|xEPSG)z>aA+7~Xa@5N5&)j+!CV_e)^AWiX=K)MF& zfpiTn{i&0-FOW_<1W5OS0W?O{;4wGeG8cLlNY~{97xyWU&gEA>b4t4nNSF33&}}Ne zH-Umc-8|b|=;EI{xJ!X_&ebk%0g%r5cP{R4K)OY1fOHvomv}s-s*J0FbQ#yXP!W*M z`6(CoN1z!h#TzcJ8A#{+E|AW7WWL99tBN-bNawu6h296!Igh^7Nm~x2(*`edQjBw< zc`o!kkf!+SKzfvI1=6Fe`{hpBQ(S1B3vB?>wcihC&oQ+>=1M_J0A=wOGmdo?)AtTKYSoBuoN^CNY{BTkfCsfi~B3kJcWA= zNT>AaZJ{IoL^&?LzZ_bh&XLUGD$5p<97; zxu3hZuYhzJ-?%v65GUu=KsvvAAf4aWKyy^B`V4jAod={j=NCZZRcO!aoOm|^>9*Yr zq&a7-i@O78gi7%oP_crxxuH9Obj}GE_XUvVrVbbPf2eyC_@=7#e>iDF2~bGUDn(I) zqQZ#UA|hqcE~c!7w51f#5=v=kk)^f?i&6-rf!tgJbpUl7QO03raG3!`5XY?xLje&B zGFld;Aft_8w1`s{mA>ESoVzyF@%R7y{_p#FuaZ9ZIr}-!dCqdr`98D8%4y62#Y^-f zs7G0RhsMdSOOX-Ids(3pC&;ez6zW-pDw`;~zM)Wq>~bt)6e=G|4ON42dY(c(rceQe zdRd`<0>$ek2xZFa`592Wo@Y;$UFU(~?e;rR+}|spxW8Mb$+OoIP`qW_pm;xj0@M;- zr=WOh$3XEK>i>|;y9*Sr=M056Ug6CKZJTvRJwgOqWC06zXM%9N(lFa>)x7YAGl*81#myPy-5Ne{N7{I=Jov z#q;tWC|)n=5aBZBx(^h0{Rk9y-ENfY{xP#$_nQ^!wX5Ztd=&E%UZ?96YAxmwkF%KX zqAy{f=(*B{RhY4K{_HZht7Pt7NJ)K65@|G84YUi`(Q^%$Dfq|yFb}ukm(o@_m|PgP z={O{<4LS~KR}a!qLs3?$bsVaf8Btn40dVZmTFxeLHt9HTQm9T^KlR`=#BdJ0;yH$Y zcGRPq`dM(QB@XvPHPFyQ>xV8mZi>@#`hhb8t)RwpFF4gY4q?=7i`V+0Ln$+^)pCl# zN$joV(9WgxIxQzaey|2q)1p1il-sqOSHYbd{m?$@Cdin|xdj{pW@IX7FmaN#96CVMG)&8x3{J{OEoU}3r72p@ zVsNTbwVd_fSktteKY`Pv%eJ%&Q$#*f;tC-x?0WiXW%px zXgU7|hc+*`pS$S$FRKCKpaqQ|7a9!T5UD(Ou@Be$m1>JX{MtWv%`7jMd8piu{gkN@ zQ6{2|1G>mzw12xmKk-LyoogaEeIqz25u7OzoRSF6$_P%Cj^n^#5PWZLm!C~KKjiqg z2+n&E96~bSk6f-(5ghu`q4)Ds1g9H%o8Hg$5u5=Lockg;wg}GT2u@K1XHf*FDuVOp z2oAgG#WF3I{htwjE=F)-pheo1G=g()1c$!(=tE`cI1YSpD=eki7(H@+O7wnk{D8j3 z>HRFy`60JJ1n2h=oR=dw?1~Pk)a6we4LliM9e-5JBkq_&hv23NWob$zofjFze|np zU}w8H>oJ`Ca>zo#0?opCAAZ=2C(r#!$6VMM3g%5>;1rWh@546XK^D3Ej-FbsV=TzX z&@)QYQ^)Ikl(%QN#$@X2!)3$4AZ?AYlR{cX2^}5MGT3n)#wfypqOu}Kxpdsd!H?T; z&rF!giqO3J(Cl=I6y3riYTE_6*y+3qXRrfo`m-ZCpVFxk15Qae<`tAba#ylpR!KR| z{4L?HNr_TC3+Bx%nP239KLhoY(t`4Gq+58`Q0_i!0h4pEaO{Ge7-ZRF1;8o=ObY5K zchBVh+dH^RJLVTGlzLM80Hp;u+2=^2QwfgJlEpX;*I|O(+dTJNSIK|zstHertsHE? z*TzYG%t20S1(drA%3OC1RvA|z2gYoY&z?SvwFPUG;TN@Id?%J_eaN&WSXRqdsdFUu){P` z_d(oxIg|JWrKOHV1!ePb@QKGs9_M4~=3oc99I7mngW50Xjb?ZbNz<}-rRUKbbxenp z3fHC1QeF2UPil9jH?_AjH$@rHo2o15jZ}$48U^TG)iv~{sv>$*H5IQrR$g9MXIW8^ zMwChl3(?aNLeYN2;hA?8%yzg6W@1Ipnn-ofs(Y2I8!;BlT~Nl3uC|Mv9UWC23X97Y z;LsdSRJuxvH0`FUYi)of^JOW}M?bq@-n;^}E!E+HN~Vq;e5{&TG#@9O9MZ5SjY908 z5RXARjoi+|{}s18|DxM>qaL z`{`vx{1BjkMOlJnugKbp>lGqjuFpZY{SM3~%6Xzq{zoVE7XM ztXRZqS3bn==t;rySG)S@$Pe*6 zlv#gw51>1l;?=^FFC&zgZW31f4TMw7F^f~p-Vdx!;mOy*5T=?RQm$1XKEiLb(sl8C zx}k~)k4q5(+@$CtT`*_Yi~EQ+s{q>v1pm-a%2d?JTI+uonel^rHqno&0Z<6^z8#;?i)hI5g;CkfVQ<& z!>T>%7>HFu1;CEZz;YVh5UuU6W)n98Niv<@F=e=es>2tR(?I*O`h1w`lhuwp9`OKi zoK-(vqe59(?PT^rSrgQ<3bt*<*quN{_e0!PwXlNiRbFkm15w)kn$p^~@M^0VjEYXw zR`llLc@&j<1QH*rO?(rpQZe&EB%Y!s&MOoZJsxR~R?{wiOseQfNZPJRx`T?AZEDm3 zjzrAehSnCSwqFIV24qFZMI~<*b2kACI9RcZL_7C@;3jdN6NT)@daE^}@++!Z#_NF@ z2tP8JAHomeBeMDjQULGp=)J7ZqvtY#5G&%h7~LhJm-d};M`$*n4+QT4yx>|H?<1@` z3(SLShPdu~xQW}z2P|gc)*fT{T9@@^^0b}e379N?Q;*bSk$f!=i;tUEd_=oS!sAMv zWM!$b*R#0c6-EP)`&}Rex9pP@L)$+Af6%ThvSiEp%btafFXW0 z{Y%kVe6&|jM&8CaS6pf{EW8>O&;pj!fmnWVC)zCOE0{K;eM+Ta$jGYTZA1XqcyT*5 zP10dpBNrIy^gbSMaGS$@M3H(hRnf%E87P+uu za}QO=4EAX2znwfu3y;p*0HT0uuchb#+nt#?UNm_C7>CuSA{OE7t(?7t{F&MMq6a#EOF|!4V(6>(jREq5c@2wThs9mw5KS1$d zfuVxgJNpkxBW9l9gSb2^u=qY_>?RRbx%OFJs3n+Aenk`5<-Qs?;+`OvpA@Ekk9aH2 zL|ayGh0BVHCVcn8W#4!3!Yl@&OWq4aDcI`~N30-l#9cfBZrNbkRIQmjOC^125i1%- zL8Srs1(r~k)?r-8JOUdNEt-png7*ZaQn?h~p>~htNyz1ZKttXHZxdVr^df9O10n!W zC6RhWAh*fC?i@K)oZ!iOcP9X(9niNec6l_R-axda@@_;et#HI^at#F+8==jm90K8v>fH3YD3X8C^cqy|D*)+1f1}If?bMz)&MbPV zQ+qx%#d?HsW`VuQ{j1(aU;${T*ai5j)flP^eGWtXh&cSY%H0BPxLJKaK<|x+=zH=G zjGKIOh_J1|p^M((v+eP6`;h!rU}^zzBnbsBQv&P%zyTs)J~u`c$pVS3Wi;W3uD%{o z10c4SB7S^au{B$KJ5dV2R1icdpBF$9JVWo~=&C@Y$UUQ0HzqQbyWu~O+2UVIS7l*K zCIyo|3@FN+0#dL#7EYGRgYcORStFL`UhO#MyGj`@-OAHo)rcqA>0Qv34P{63uzm?efy06%ocz2o6k<2gdQ-r z?l!s>erD@)bl2iDFji@g1w@1O_At5g`Oz zE+wsEejlzSv2KQGx=f}ezef2mLI4w#7HR5woa;{v;=Ts>NZJP&_zAtUf)o0~Cn~Yo zPNSG&*EB(>Q#xuK839^{Ku+(3vINpU@_09GYH*5C>AJw_z{<{2NgD_-83NG&WS*>n zo3*1mvz=66=c%5RCcK!JlC2~J#yq5%ThSGlnS}{UfwJe_AIBv~$Z!eM7jx6P!ZKNF zVPeqEM%ndDTmXQk76bjEKcu-`e*kw9xU&5Rrcc;-giR8*)RpH#?rX8Sfo{UQ<#__l zl4kJTlB#7fu7XMtpQ)q*RC(|_;N#)>@s=m*(HA5L31F)w=eJZGKs5EXCU`M~ucyY! zZA$Uh_5qF#8qvF_kAUe;W=qAN7))xc__hZg#T9=12IGIiuVKLDV4o@g^I<@!7Vi&^ zG6J#9vijdh2+gB(NXfby8b!jh@U<WDkDMm6XDn_W|$GAi)X08 z;yX_r8{pBoalkw`^@NPQAeqGpKG>yA04y2s^UfMC8XGXuW;O>WnN3iU+5s1Hci1Xo z(VWT7LLnqaahwT5GkU}xQ%{2!gP7OQxgMcG%rO}oQiODDonYV-C&w!Ru#0mRpztg} zdOVUd)(Ye^0lpGsU)Wt5mmo)*4tpldiy6)6vmpLGrlAHgno@fJZ}sW1RKLRGz;co* zew4uKKQswL>3fi>Tn9~Q=s&dWZ z@2Kr^TFDF zh%WX(e&x91La$;(qgEJaGVZNUk4F$gN_~0){T0&9Arp!)8G-(cKv??nxjW6n4WYpZ zi7Dx1O>>C|L6+hbap7$*052vE%^&Ipw_vH+`{l(@3?ddDkF8IKo=0Twz$FLiyiJ|! zDL#HepXJ#3S_L``8$fKey9(f#hz@htP7DnMeYp{VxaQyi)%B9RzQ$Zp(t=V)guQ@$ zuIa7m?kM+^Kx)+J5#1Jb4x~nt>2-AR%ZLz@9C^(?;-*DkdzP4bEjr^_(rNgj&pk_G zMl5O+dx}#{;smqs)DtLy=ff!B`6>{?1hZ7%5qO!(eh9}i-bZ-Gq;s+2lCov-y@x0` zhT0%BGYzm-6ppuca59ygLzY`seMmlmE4l7DO7%&CgaOjtbc}zVOO{20SR;Mh6tuTt zE`V}9>cp&4T6r&vhbZNmixW&5QK%AoVZ2_qiJ~0^^t;U{YQxLa+beo*-8EJgJ z79;=lSh@2hzxSiK6$dGg*k9o*e?`BIh;qM*2%@;DkmN(l1IU6&%7SI>5=a0TF`?NY zXg!RXrwtpQD2J?TFm?dyh{`uv)d_6IO8(XH4p@_bJj8s6)h9+e%!{yNf_*0JFI|nX z1p^thu(H{#3b+8LRC`&RZ8}=SiR!i!9@wgVt1GvRUAzz(`t+P0};Wjs-Q(88J~Fbb)V+ z1pzt=hM6~RqdyFw&9Y__y0W^uD?*7Q#!z|bxEPKwRHe?(r2QSN?`S-g)_41$H|1_S z4#IcG(h0t{#W|Rw39lufvR8ayz`m65Rv&7Fsb(hlvJgT$R3Q;bJ1C|)SbM;2H)Y^- zUS6>Y=bOSuu_hWpL<4h|FwR9Qhy;KBcfNhg(y{+I+E=|e z6Pd~mnvBC&&cLj5QMX|1{lf#ZKrZZ#lw63H*R`kOeAJ>ro{H~`i|&=PiG*LJgg?WY zp@E1a5SH(W_yA!Oa3m>Q3xW)0gkccAIFE>Jk>4|<`m=iQxnWxuPCz%a4Z^tKgk;}k2tCg9qrnhpl`f`!1OazPX9VK#6PZY;?~s@;lt!!Z=VyVon5-UsHkm9 z$rvPQXfAY(B5#Dxi}nm;0(sJvP`M8_e^*XHgOTALMlexQzF&y}a%4Pg{R!+XOu)A4 zcq7$6L;EH0S*DNLl>KgOpXHzBD(Ng&Ny@}fr;;!^!PMpHAJM5WLpjl8k1fi=b-7g0^^{|2K#vB{+fwQEL$yJi+Z?vPr3;P z$$(_)J>AVc3@z>SKISr5{2x=|_TnE=kCLjewIuCBJb}?JVLy599@NJfUSGz z!qL8mk`KAhi5ao}92%$Ztmmh;q}h_Vn#$#^i%$_4MYFO!@nc~>B{T=EgUt+O#lSUP zy4f`>TbvM!X_`FOK-_S{)@t}Qwt*!pltdgnYqyU@Q=ZXala_Br!ZcM1i|A*?#H?tM z@UOK0LBy89gz1iUDMIerzO8fg;f(bgrCX!2!eY4U2M`WoBTcfZg8MB)aRpF4*Z_D{M|vll|6;d*3J z8V$do@dO4R2)OZ5aGE*nN6)2pk@k!#%t^=LBj9ie$EaQY6c(k1mgQ5DcL+O-f5m#6 zIteRjB@F?mO)zCV9f*W6+ajFKT&y0kAxwQ3@>;nWzPy*QcK9O*ngrAQ9)JCSATeN^ zpiNpcNDB1igCMYNu%S-2G2UA)LhkN{zI!m52<`?kzrolzk|1Cf&4SeX_PNW! z!Y5RW*1i{zjI_`|lu51P3W^lsA-qn}47WAAuspH&-bXed2UsBrtH_6}Rxy?9V^&_- z_YAN`gC%6j9gcsMF?mStV0@g32ns@kwQ&|v|l-ZngT-ZO{-B5n3=P?uP=O!O=brpvR$$>NzCKcYAP8sRm+D^ms8_G@s zqk1kCY$X+p>N5dgl_;Ln*K=D?58P2|htM*pcZe!_t+0+ZO<{KkoDi9XdcPXd3QWYS zP^8dBT3E2n<;7Ir_?Y9SkT5Z{n$ijl!CSy~)}L+)ahN`7DuM(*W0yvY-)*zRLH4WrnGrGo|!BEg0d z|N5TX;yQ`FgcNCtjnox;f*AkR^@FP?hWRpl)k0_PE^H^@Mkxl-iwNoSWJ^d;WqK|w8%$57XH~YJd zO6NYvZ=gpdOvluE+a@R$uxeeI!PJu(Bl0az)p{;%vOLXCx73RpC|clA-@GT#PMpTAUB;EMP)DGMtdm ztXg-R>+29(kRan&cy?5bV{OUd*b!%>BV*Q;7R)Vjq0odpH_*y(EhS(qf}NC+{C++i z7DAIwM_7lHA3DEiRS+B1F}9ET=kv<*;4TBaV-c$0 zXX}pnBXmgIr}^*YDOd7D2RS9kNVyP_b0cno|JdB|i?o-!C2)j5GSLc|so3R(UX-D;;!Lnq* zBy7_T>#n_DCOSx%gJ5dYTQCdIY~^}PS_Q>T#moePDo)pOpt)hPZwb%sXWAHfD0dOq zB!x7LnLU3&8C7tJ1Xt+-m@LO@rF;=kESGPBk&~b$%L?WL#IC$x9$*fEu8ow1i&M=4HM8=tbM5SQ4!bfau;Iom{~LzjW-1O`R`!}rg=6CQ&>PVj1m`#5}E}s zY8z;W0!`Wm39#CFb4t?9!>j~hjrht63aR(rp13$=(CvyB6}VVwHI;Y`g#Y?nBas7|t8cRDlEJSbGYh%>opm^BMSXobGys20sPGA&S z*5TA2L5*j;1E6@=5GVkhKsI_~zR&&9O=s?!0gAgmtni*wc<+GXAwE!C!=QLxZtp5n zsS1^+P_q@PRH0TXR3j)J^S>3|c~E0nPP=uJ%W*d-p40K5cuuD(yoCzyZ=j@-gW@rt z0>yLsZ-p}ALoIKkYd~?=e1$3mHHqb5HK;L++Ne)y#5G7m8Y>n;r&kGZ3bm$AwC1ebMOTy8{=I7#cR#jQ+Dm8P|cutYH?S|)SU{o z6jUmU<#(WX4)!Zli$blq+F(dy{$2pZQ~MMY&&y|^GMQ^^yv(}>6zAOmipTr_D4rLW z;_oGe+6s!->1Bl%yhbkhX;3`1W>Aw@YD=#*7*ZHj1&XKfBPgEJ-o50U=78d1r-I_O zRtbvdkOFm!WEmA0tLJ11>TZQ_)LVc}JEueS~cH&0G{j40jLGje~gW|5gyY}>W1b3%^C}fy z02FVT%?j^jP$O9m{&Axmwo##4L8UO)8*h?xbp;eJ#~`a5Vzfe)f#R+$pm>iO(--!U z3{=X8K=B$XS17+itpUaJ{Om2*gk>RK0X2+K+d=WL?}AEZyheq03KXyL5g2EI+HLDkP(a8h)frQpP&ZdE^3;LOl*o(HE|$9WYT!mCh2 z{hc@%<5kXHa2j-+Psk5iO7-(4IEiR6mGeD?(s9fvrM&$ZxG={Wts(c>u5M^{4R zR%1>9XNHbLGtzB3&Kz*8kPJ1{W8iq=wH!Y<)jAH%UG0z}H5AQZH$mH~oY%oAg?y=; zYH$qDMk?nRINNj_`aIPHouv99M5IJ$B$e|Ua9SX*DrYP>4bTrNrw|v)`8=(YC~-WXOoWeE;xq1T0e9^b(4BeE53{Q4Gt=M*o}qrG_=1>XN2=FU9mp2%kySUf8=)&oHrvl z2O~IVA~^qv;Fx4pVvy6iHiC0=1cz)2=yRA6!I=`lDUIMPkKhp2l0N3m5uCqAa6Z&= zI>wY~)cK(_82S=RjLP0Ix=>q0C<}BLf8-jwF@iHRf-@$9lM}(25y5#Rf+Iw5{;1>Z z!5h16PoEC-SNv&D1js6jVah`B!FW@qPV0yt=}YCXtraB}decG+(4I^C7*#|S%9$RT zK)qs5ZtWlqXtP^MNsEv`e%Y>#-nCr`ReTikufN)_q6DzG6bJ+P&A|$S{WAyKPg2rh zJ4wnL?H%hd9cV9Eb=4s}{2a^zrKloBNC+yl6X+-@cd!jNHO8NXnqY>3BoGP&D=wKe z3uswNPV}34Kf`y(+i~2zw5SXQfE@F%UF^h0EO1@Q4SdVW;acF}JBN2kh$>Wu4mP{g zgc#xpnVFFwf}EPn0ZT;#-=NuJa_~JSAP_w!!5&aL(&nKWH;Y!XR-}}e<` zps(<@EGsG{%XzG7czdWyr5$8RyHaStKcqUNcHl9oSQ|Pd3{8gHMTWio(glDFl0--A z3h)ua{*Z8uv@WR1b~q;33ucfsGRnq(!`K*n?>)&@_NW*eX_(vgV*^zr#>NcnioF51 zBbX!8(+&Tum?&vyI>hhjNx>xW{}f}R8uO3%c5@!YM;IG)U;_6gMEg?jexqPt8gZtA zyL)!oF-?neMFAsY^iuD>IAJurD&c!`_s)yr5YZl-@P*wf?|#$I#&?bEKNhjkNe$eP zrwAj@l+qCsoW{jvLNRSAEMN<1OGTWIdEEr%*Kwp%Di6{Kp`WYcx)ecup^8M@MjX zyNb?yB2U+NFGsmjaB_y`<$}%3FWF0FTX-X@i%IYrCB@_3g@Y-ceI9ly1;GX)Sh#+V zhy0krYw3fwtT$)@naJH?!(d%SXHrBvL{isM** z$1M&&&0S3)7Y>^t9+vl=?auhg@)V1ruh@@*!?G=!RXOvjy7Oi?^Jb55=kjRnNPd_+ zcz|~7ju-ZdV@*ki!<{^dZD}dV`^zrm*Ez*BvvZ`$?79`daqe$qKXG&h2>!gardGSr zTWx~(7Muf;qUgcS2r>64Z*>$L&+|KvID?gI_B_@l&Sjz-6-m|Npg>wzh@@p}OVaUh zk3i2rs?l%sXBpGIHBrgu%f4Y3FBExX;ckk$p(Wp5OxnchOJ7>wsf7+u!4Aoqq5 zQLbJiOn{(SXrQ2Pkzh*IDts62iZ+Z2n9TmDwB%!D-?7Nso%tnD2;9WMWra)PbW8rlE}Qgt0GJBwK3!gMfc9`hOj%3F(4q{74Z@L)z3jmVbVr-{to9J4{?D&cKlgU5D1eZ5KP~Y-!bHO5A%B+36F{VngXev0$CtBp<)oujBuwZ z_738VmgD>{am2`R&|$83Zbw^4XKb^WPUKSK6rWFlECeQYk&cxe<7e!JgC92~*H)xB zp^Anl9Tz(X9NoN4oh@4%>C#W0$@@iTaRqJM;GC|p;lgpe2N$<_uSB`7wXFRclA2(t zJc>V4nRFx_pO{?HQvRJ~=Y2wp|0p}v|M5k{zzQ|Z&m={a16fKSOXA=c4MU-?rG!qQ(6_YE^d&O+=jl&!A zYVoFlKyS}92RaXD8Cw>^GdMAPl9$Kgy^;JJ_8$%O`uH-2gJz1ip2dr(5qJ2g?DKmZ zp3`TVmEQ8-OOK*iQ2L!HJtE`955J;}Uy^vz8P$BcEO{*-!(v)f7N@u^f_<)kbg6&J zqlAOS&Uns(`hSRzQ#b>up2?0D)8c=v0i{AbP^7Xv?ZSk{Ap0;w zRjnlB-O!x;F~nIDQ|vQJJyn~wRW~%X7<=|jO3f;Gbj6c@c&+BpsdG_R-8?8QduG|n z-@f>I?cvkkMPGf(J?S}x<=%CF++O$b7w1j!{RTfcX_l*U{pL4zA35`Vr)zG#*Opu4 z_HFpnj(_~~U;l}@_O>Azlbs7!J@x0Edp`NHwR5lA?;Djjd(rBr|MF)2r(az#C-fgW zdP?zP|1(>5?QLwn*roS?8*W7LzlW<_nTp3r_FgR@a)Tf-+%1u%iXTO zWB9m-9(i2+{VQ*Oa6J4&Y@dN6#y>oF=@ZYr`p$t9XMgN|!<{2D^XF9rH~#hA4?p|& zPd#qD>;4JT=Pz6H{NLU?`1vi{HctHD`iFjh{EkOn2@ik#?H?=? z*M4-9@YT6z`#ksXi4pHC{V{4~TJ6m*&OCk9Z?g{%dcEws zu7R=pfAjL3udjP{+Oc7Of9!J1s*F9i{n`2DwNFj{WXR5itv%LEIC$6J=6`eJ^V2`S z|Gi~bj4M)W`u?HdRL>`~4kf+z=(#S!n0*6YDhc)e-PEJWZ!Njh$!Gh=t$!-|*EJh* z|9S5Y_kX$vGe5lZuk-$W!^Zs2M!s9|Q?xg|?v_6mesT4>oR9C>UVgrtIPQZxUU?*Z z{qG+-KK$*+f9Sk=RQ>ILnf+C-r}I9&@6AOQENdrzbobT;-`@0sRl$<2Y(Z&R2@Y4`a38=Ht+KsnyKCWI6k~J=s17C8|6@q z`86=Abe!GbFl-6r0a?e>h<~LZ)llDnQ>Ek3uJ|?`=PGcls2DZWP2kMXaT39))^W%R zg%!J)YA9->79EGaS<#mW)lU!{0|o(=Ln||@j`I(2QWQ?)&Oe98~3 z%EQJc+dQJWV4H~wCa`ALhQX=R2BzwWQ?xuFxfQz0%8G!tPRP(&*lVpD1De)4s=H@| zt-7dWfxPPj?9~5;t(tW25G#AseIL4zf)9&$BKLi)kSN;sp{qyq;4`YhiY}>@bK-aO zq@c_FpYHpRo;sq)Hjf?g(Y{Yk7OiVWPXQ1?3~d>-ox*)S^1<)(MXc+w4#K@?Ac`D! z^%8StU|S*^$PDsT`MBg3w~RrE+r;>wDPMZl?z8w8BQLmPhfSpXwo}@9q`EJVGDF!% z(d`>Z*g06`@_Fv{!sr>8a@z#^6lCcx;Teisv_FiMVKgSY^(hZiVX(*2AAb;~H0R~> z=6VnLrf=op1C)*WlqreyvO}7;rc39z*_rJ{WppRS>7HNc!bxdE9(%Qwl`Sa4dGGnR zyV$AlnG0OSIQ$97enRneIOp@@zvNfp;6x`KrN*Ik{NOBRA?@oUS%U$emg&F)##tOw zFkFp)@$57Toh67j%)l>qb%NrqXBA!yN&*FnuvaV8i+IO}aD;8eZycjK99>E33*oGJ zXvCz4X>`Qc(L-`h6{c$afp{y`ap=@Ym5wtOZ`%}3G*(ZcCi+(v$uoQIj>8tiJ{&YEYp$&9I>dB_$5JubuuHjALN}D@mmOYPws( zh91I;N-KNo{|ox73bT*(5VYs%zziN7_b{Yz{UzOXm#{YoVL-mj?v804l>C+T>0(!M~(^}yl`OusINFsA~*<`FYYcJW5( zazAc?1Lf^PtpQDK@f9JkQ_LvC4(#IJY%#mKwAKRr?{j36I0>zL;w-+u;;nTLwib54 zGuJ=f(@_>*cTLzHTjE?@TQg|WDhq7!sUH!DHtJr-U-9{i_@!I)M}sDBxEmlzO~1tr z_MmA+a-(I{T8cj%Tf!k=J1fN$Y5+axx(($@kFII%M)I_lDZ>;DU(fqQu0r#XAH ztAyW;Wa)`(D4p<&o-dKv^B{A?35#*<-6i39&}H1o=FkJ!^uW#kjQ%PDCfHO93O0(k z$c3A(&?Lelmwb;<9EW?dmdaI#mmorLJyet1&|_>T#U5O>9`1q3y|dNGL!V;r#4bKh z7cq0hHM9w#K!33eJq~x=s7F8*-K3tOv=J+G6P$w+2HNdvsL<~zN_+8OZIDnAD_HRq z9rGgd=@h4z;v#t)a=>di^ey-uVZ-vf`&xN)$#=c$FoN3cKsFpnmy_^nTOct5z}aH8_~mBcgFH z|7E=NXZ6m1+L zLoK!efg#h}nz{`8+d~jjAfxvPROBTTz$s3+mM}y*XzRy0UxHS)*i13dCj7E+*hWMxvcnH6w+w5eSQDJxX2&@K4Ma{}`Vl`0{Xh#7IJ zAX5rAPztM_K;k(xp^}nE0P0*5U4)r2(M2B9;V}sptIdI@_QE%E%$A4Z^VJkqxnWCQ zE%0g=*BpQYw(7FP_ZmRu@jLVsExgpAu7EF0(Pi`wK2NP-*GICRWb(Z@R9sRu?%&FSasVF5yDp>#5-_Ah+X)D5N}WjMU_zjdcrGkUr@LCO5Lt%q(Hi?odP@;HN5Zv z@2x9-K<_au>-0ALNjjW-%o1#71*PWq4DQv2k19*gp-w^{5?fKbV-b&}c1JL^`*ygC zPU#MS2PoYrR|wPSyu2J`BFyz}zYg^7jnKQK9lURG)!Tz7Cu!Y3h>rs>2XpJk=}vkc z@Ncse47RxN5%gE!age@JQVJizmM|vm)Xz9@L@dQQJDo1vtA5^b@DJIt2`l zhP9gQsIPT{AwKPbYx2{J@e9Z~{9;(GBz@4D(FH2y1*9dz12Xl%lmm@$P!1EJ7FahK z9}Q5uNzw778%$Z~*D@fKUMK9K$h0~EFfz~zDfpx?JhNrlG`(7Q;xF*7Bw&)nLsm0# zCk*ev_>PR`p)Y1-1=mndQza>sLLGV`3ey!Tl+LfpP42p--6(58>zdt5G>yLK-x$^i z6m*fR9i&v1q>MuMQuNRlX%=51NLg)AEpTbpW)}k27K+9X1|kx8MczXTsY7c?VIs zC(+W_zL0>wj+5+t6OvKSxitw1?k z4EzuLr>HTZk$=Hw3ujGv08yC_WTrS?1}V`0FG{jd`tImGI}jR+6bcP3;(Iic^R>Be z_Pj?QjSTMItr>3UCpt`wft#x|hyj|_^Bz0R;p)|zu{6rn6CGg{1@T^tv8=ikL|_e_ za_|FDp>lDcDutsOG^9K_s4)E<3@&xEh=6K(x`F7g5W)VhjRKPJGWzBdU( zitE9EtqDPC?lcpApnQ1l#iw@Tl}A%K8PQ;J!0Q6(v6=Yfw!?4^4TGEbJmml}rEiIH zy#`dFK<+8P5P2?Ra&`w?JeT9#&(_-x#GsCFK%v`+7`KR5)NEsSt|cPoJ@rSKPhU&*m`crFavf8DVUiG{XB zSh*Cr#+dTPZB*W*>hQnYm0vzr)kE~sj5e7W#VF$gN7bAtRR!03J#eQ7P)H~vY2y&R zQbtvMjQvm?yFuzuXLWEDf#Gebq{BPtsfseMCt1hpd@-gZn?VIdHqn*M=ZNd5$4s9h zp)^eqy;i(Wt7ou;6jF+5y12bR9HvO9_@X$F-lj<%eX6*QHkPN?v(OZ*-b>y&MPBKV z(!lWq_@##$ouKqp5GamGg=PwRE8#&=gCQGwW4roP zQVLKrnQrnmxO!T4*7=WlFLqvZ9n?@PykOrs43tUw0>&p3uY1I`R2#HOKqIXG=?QrA zzE9!^w9zE|5!aFm^nnqUR&O{y}W7F`duyA5QX=Zl-zXiRO#0sx!+aBCgT zF1~IQJ{KCjUs_>61%^~UZ}S4m`l1mT19{rxxoiZ%_JW?K(Ic>$h7ODm-pierjfXSWOPR*8DF}S!7`rS`iUf@o7S?5}o@s zbOT$9x?U7kQ##>iv7vqzgc9@X=FlN@_SaKF`{|E0R7Zc}7>Y4Z&-2CIq0hlYRfOvC z7yZBee5?ICIw1NJ$KIkz&o8-?uI||VDsk*$bPDf29MPmnlrUDt+LEx8fvf6@^Io(p z$4}>F{kgp*HsL|@4TN0quCt3~OC+Go9#i;pIL=TVX~ck|4!c$QK0)zckAplenB^*7 zuLPl}w(mtS2{rBK^a(FNP2oB&A9tsT-7mS5__cS(_ZBRw$t0P+{7vx7%8$8rN98B? z|E2QN-1AqJe>bG9eg3(8pnZXGA4?~8;|xMtu`m{=I~kT5(+99lN9G{_{7*KvV6acd zLdLe^4S?fwdY73Ei~HiM%x*M|)E~HVmC(kx{7z<;ZStBopJgLKYn|2NqZveNT?(oE zmev$A6zX!u!4_CwBI+?T)7OsH`UKZat@YSOBemRGZ+7*xlXh3S59X7V$1VOu76{SM zg~Zl6Y{b#x$@3NBI}HN88IaD;(nJoZsqSl#Dpq}hO|~HydZvX<<9M_ZJRymh?M$+* z8Ni8bjFiVC45w#lIK7#dPcxpL`aWVjZH6TPjHk`X?&hWc2(LmB+ytE-8VW58sXmLU zQwl?TEBMNYjx2;Oq08$SyW2Akwr6y2AIJIjK906$ybngF^{6TgcuIakkASP#dV)NV z@j^0Nh^>zbE5rhzop?JHrdZ*yU=$($5EIW>ZC(N)yN2v3jjpysOVq^^1>UiwMV-O)J3@VLK@2lqac>X_HjgFF5qe^=U73c;omsXkx zmHc~Gmfb!l0i8tIW`w!>RsqeOasw@ z;mq%`Bd?7hFE3cpLjCl4SSNrOV|HLyD;skY3dQGl@_cq6lntp>3;l&rg`Q*`A~jYV zB<8^`MYEU{2RK}2G7aX$$Z8tSsb2BcMPvR?A8INeMuq^e>OF0R86{V5z@7qq)Vn9j zTNed5Rdk6q!F`s@m0;zN3RK$W;L_`(EL$%cKZV?SD^6g+7fVsV6KqGin}@s4SiCfP ziup~V4OXRS48&&Jh$&72!yYjmpo~s0PJ(Wzh48`2cgWR8xGY>c^fh0;;LNpi1%Tonv1~mW9G6lP>MZOu_hF2 z{J^sFQ&KZx=79;mR)0^+8bV}3`wJBZMoBVI2Pxoz{!S7FTwTk$8gE6za=?ss*^7a< zHt{ef9q+8DXjldhmQ}R07LH;~J>Y1FXwgQMX4zUxvX2@Ij!3XndJq-w4q=;9ycW_S zY0Czxl?I{aR#pbclDNJL{2BrR{qjTP+$%(`ra9JFOUv)8)02NFdy|weO_C>PH-G(a zBuwDBu!(|QzSIOrlq61PxH!2zdQn2pu4u;9j8XNr6Ua5$77{9&LtSXRLHEa$VG)Vy zdL}p`9a0twVSy~V8%LpB!(rpq-53gk({BHK#o4(gtfhPnSdUWSNYe}# z-aUg?@jlTJCv0q_mFgEHzZoU~vf@qfouJ>1NATl*Z)A@^+!fGczg709T zv{Bqa`Aj;z3strJ!a01QO|G@9E{R1XZZ!6OFfiYD3ZK@r-IR2Bz~$uqmX!{;;>35- zVff!b!IRTsEvpHrh!@1{nnU@SPLtT4QrdY5w8QiYx;PJl3Cc6{5+%wfi6Fnie%K`m zuj56de1--gTf8dRtC77@MYC60-iSL`?VgS01~2CrdRNaecw4Zk4qd?WV{}F1B9Hf7 zsxV{kR-OTvcd>i-#EI`xLrms1CXNMsdz#s^v=l3k)K1Ywq34S`C@wSs_5ys_2+ngC=emtIx!TZ}Z92LldS0|I zzZDq4y<6d(iH+~LMlME?cP2&Nrjr6A zx{)ds#wr5CO-vrKOO;Y?ebG~4)| zk3{IZOr%9vczZlSoJKOdS7dz_3MtEYr8zIe8gZOE6yD0y%o2lClH#>Et1Er<4PAhq zr~*JU<&hVwc+)B)GS70wI|W3cbri`G`>42s{K_d6m-fQU@0nrvnejD#65aS|_Ta~G z89$Xo-S!wtDSzQj4Ed2F=3m-6L;@l96_)D*zIiqK8#x&gMO5lN)Qgx1*RQ5Y3A&{r zbR+3YM8|G!crVBC3F(~ZMcuZUyq8UuRX?C9q^`^Z^Uffa#ZDHdnRBGRKMSmEUA?)?(=Hv@TL?HeRd!41vKYaDifa(cHiTRq;^wqlA5N+Mg>@dVr@>4*(( zY{ph)QX9MQs3=U98Prd`?^XCkKtpo9B}nK+qK`t08!30*mMFou8HBM>@U6$+&`8Sv z4$7dofl6uFdZE=vug0LMOz>?XR%Ho1dEX^&6zUOYm&71N5_C5Q`z&{g@uQ9BRJe<5A1be~LROQ3z2memSo;E=|EVe#7%MeoB<^fm7r)#zOPiW%37< zzf1c3+1cE3?21b~e^*$$@chZs-Tl&Z_iIaFCFKj#T{_l^vj_N*XS;jl*{*-Gkus*~ zi^e)$eM$yLOqFsc{J?AO*XM5-^4Wv9k%p1aG58L= z2xAjMsTX7k!`HfL=vpwTDEQQ#f<9IO2@^MLqX3O`AUc>H9Wbl%%BA&6jV!OIap)+K zYrOA_jp7ap8vHwT=s;|ue_~YN!F!B;By)jl4CBc_AB+E4au4;Sv??&SDy{~yRcPcz z8Xwu@^KGa@gSaeqzz>i=weckU~-$kq<38}uAx z%h)3M-o>&L-_2h|gde>xFDkSS{&-0xDIrB`%3}RTs0qGv2MM*>!Rn+A1}oxjlHGl- zv2x!U!Zf_TZyl5RmMXhXXk=IFT8(noqAc~IOkKH*OfjV@tNytE9nEj_GbM}O8(N1n zNQ&5uOZiqFy7V8;W)mBE4iOg$NNhG6P-e5C7s2M^F*Q|a1KJJ-cCgB>jtX6*){-SF zbd=;=S~TuMl?oq_7X2VpK{6)MA40RsemapwcJ66(z=O8 zF^?~=>{*|Uphpe#~0>V-c2Z`8e$@DGrN(vT zuZSmuF)*O6mftm1XlefFYpK8=i#H?J_bpHRn2DI5#0Mm~O|B9x;DRcd}8#w=Es+5VWeN#V7PMK&{~{8D=* z9rxGyj#(;c(*rT*(_F7YJ!4K=q&Ub*pDw8u+>g??;TPZ+#cRPb1FczxO@rLcKZ?Dv zVM^^Ot1^k6NR<@cOI|BBD~bZ4yCAo%X|YyU3KtxBKn6FCycVnxK~y(M?mQ6 z1Y)!ZFzL8PQ(y)9J~OL=do)D_^AHKUmxIf3%oM|&+`NWWhg%Onl3fhzyaHEYF$@|I zM3Qx;8|Gbbdx8Qp>lr2U0oq?M3;riF$bH#nM;XkdlmOtJf%!{JWQVTTmQ(r*a7{?| z%V4Si-d|W$G>al8TM?3*VFC(MG=G76b}=`&P|lKf0W)mE0_&IuQzt15loeJdaLccV zaNvRHKEGft^9;)wuz*oca96k*JiDaO$}fUY8F9;(Ul?IGgJFTdI==|_{j7unh0M<^ zLMU#=hI_-MIRrDz#1*4gVsXy{e}9jELHu*!pB?{l=RX2l1oN$hZkX+uM;Rh?`FTaI z;ssPq3g$j{7-r42-<>*n)ZO+}+oaJ*R|dz&^+aTVUs5io3(6E$jvLvKBc=<_JaTKI z;R;6Ft8wWm7XLco-w|AF`UX7t-^BTIm*6V3YA0n8>K>?O))6DE_Y8W(TJA0-h$<@i z5)vCq^Jl}{Khin~SNncd7%7KC>8f@I0bn|Sz}2|0sBOY7W1~@7-BVu3j>M$w)CoBm z6M++$GbwwF-H|b7{CHdTFl(9(Oxqo)88D5&`hb#-ww;{>YUU`0$o3yFjN2!n{(_rB zhNQcO+;z`=tbLfAN|MpuEQCg8D1UTOT@p4D8dbK)90FZhzjIzeDJz)rR*L#%DHzx< z6`k(5mB54y*<6@gP&T{BK)Ih=0-x<%%LxF?z)i;RSTunm^5&ke)PmXzxJ?Z5t1Tz6 z@_4Mnn8Ki(%q*GB>+Wa#mCP?(fXk$XE(+lolbJfo=74dJoG}w8{FiY2vOWsxhEWw) zM4clq<*r#J3#f8`A&FlM*Di^U{F1Wx3ve_!n;=RpDh6o%UJH zs4`Gkfx=Y)wSrOmLHQW(W-kgLlW zbsH!uX}n=HsKtyb2L&|`9->WVjf1qvH@pn70dw2)EjLGgMCf$}llMNquFS3s>| zyzZT4-qoP6<%d|dgW|c5G0Qnk0>$&U0~9aOAy7QNPeILPVVgnmbW^bv%yaJm#dGio zC?4WbP&@|}3eO9Q=OCc)PJ)`lVot|aatWjU396V;-7#n3yca-m-j|@9%(VdH$Sg+v z0TfU7FQ9lDdq5R2*NdQLGO905Ll-h?C@3DH2-FP5`zOYr0!CergF)QY25L6rk+lH_ zqh16xjZwQnJrEsA5q0EX4bucxw9VsB?FkTxdE|Uvy#^G$n+n`YY0`&mn{RoQJ^Ripy)Nbe}+v>Pip^k&%xjzMp=f2;q zGVeE_IPXz~TB5in+%CIXLGf62DZFZhH>JPqZw4stZyTrwSx&zMmCmTA2FT@g{YDP4 z6ci8fPlYt<3Ux@K{-scNqLOE^9Er#TwHy==@i&Ef0~8N?{atd{zMy#6 zJ3#TULqPGc4=GduC?2*-;r$MjpQZK#C}a$|H{LDB*9{bpuQwnLD2Phuj{h*Rr zETci)$Eb%CeNsf*QhHw=4c?6@Q;9Jke}0Ji`1v3JpA+ zQQ6R^QyF#e8d>K!(Ywbn9^F{rWm~LJbkv*kJPK8*P=1AaLZRruF%J=^Q1J?tpip$n zmix0RR6m94uTULhDX<&(G>9pWNun4|0&>&QV+FGcF*85RLn3~yowXe5?^Rv29MTUB zI*yA%b=CS=3r>rUvjv=O-L!t*1Sip=2VT$|0oM9|NP&>^aymqw?jD@HHE7c+6lh8uq<6g{IOIMX6H z#SxsP5uBs94N-^5q|0;IE@h;S_kq+F6oaE9CJ*2KfNM2cSmqW zM{u$uIK>ehR|IEy1n0LAoR=ave6OGKEtl(GIzJs-{P;=dheFc|mp^hm{UbOJMsOzU zIF8x#$S!cZc;@N+kYhyzXKe)Mg$T~p2+sQvoR1+z8In2+nUKI4?$UUXS3^MsPlk;E)waeJL(QaJpa?qxX{#!6D0$ zdOt&S9H8};V*6a}wjY0Th!TX$zDeLc=>+5 z1L&ukoatj{-yvAtQD9~mM(d$n&LZ49$X$UH`P=`f=azND`vN^WIIft8nX;Kr#H z$Q{~YBFY}PBlf$we@O(C4*`)}7mV6-u6E$>!mNW#Ft&M`Shbmlc6!Qv7 zkZI20o9$fg+VM2vsSAy%R+-fBTE4P#ADL%)BfUcx+WzJa^lc9Y;pe&vH1FK-3fhu? zE@O?rlT}TQlovRQ97T(Z3f(R#DuR*3CySX&Tw1hB)xHXo*bb~bb!3l8HIG7}w6S3gYOp_srJluA#9(jmw3Vlo&*jn*OCM?3@* zzII9SqPQwRvF(y7DK94J)pFU#SCvUEqJ-`MW>(TJl5UbjtbOfqPh)Ho9^@%$MO< zGw!aDIA-Eq^Uf^AYu=e{c+ESr3$J-s4UO>}Xib%I4zoC~385M~x}j zIXC{U_D)St^92ml|_{qv9F$t0HJ+Hd3=uBD z;fkHm66hstq>IWpP7SvUjl!o%hll%!Q!!ug^~2xrfT}={7{bMmn?y!+sU2`mV3f!L zCvPN=6(hN;Z{PBRB8x)!;XT=XPaXr3uc4M+L6av$zurO z-&%*u4F5#Ayi$jS!THgOj%@?I%?l5`xFy?Vn64^Fm)L{xZI^K`ICx%K(PE;Xc%xA-hF-G!rcQwqCajXKTA)Dxs^C38#4R5 z`llI1w+ARG{F>6lv1?n0sJHfUPEIY*jhb@rS`TuF}Tfn0#vi!S~78;1t zQBk6U5+9?)@j*mKT6D~V%R^|)gHC{%9tI(iLb zItwnS2#5(`yLpW!hK2A@gQ9lZs1Y;<(P4k5>fY+^B#t}({r~s-@Aqwg&^di>-Flol zb?Vfqs&nLN04Tl_&&2j}NY3t0frtKDv5{T!VW>)prj%#k0qLrs9&wKqPKGmowVA$L2eZDpZfci8S>kN)3d6;6kG_I(s}~V5H**OWYtEhD5HV>A7#p|}1SE*UdJ!=>oFpd&vXkZM zNpcPXS6O&sB3e!|B2=N_jgcT-Y;mM;iurpMaSq3x1JjbV{AAx*q8LJ2S>&sTmgK~x zuO}5Pkxg`X5|?Ib=j+)uDqjb(2g>;aY@5(ugYNCW@EUkBQ|;_B1#mPgI1nSxqE1^9 zS$Pf>a;30m>PXwBps%riQ#d(#3^LmZdh>CETYo>sS@Os|bZ8x38XOx{F9uHo>ydtn zca?1uM&*-sM}y7xKGM*bX<%b!72-lIS-m&2D{!UKt+-_M=c_SH?CsuB%I@f8bZ<*O zs!B2j$N2$4`!Vme{^LtOfpCVf)(3|qi;;l@OWswztCX|yFbL-c)$=5T^D4#JVD~gs z1R@WiXw(}UN+x(I^ZU`Z$Z~36CXOq=9vetCk~co{ct~m_>t%>dD>?}dE7DGTbH#0u$I%^n0x%d_ z&r+$5omn{w1MO_CviUaQO+;;TG~zBUBR?iIN8^BIoK}Bbl^T8FBt>eBHmdf_E99CYNg4UtEt)m%a^Zkn6yCg8pEMJ40Gvg3ajczovhZP@1 z7+Z@nswk~_EEstj#a;s&Li|AXfO*5w)jn?{X16sMw(>QRr%1TCQk26XX&agK^0@LricgP)e^E3!r-n!FXQsx9QLOhezL|36qc+*Uzx9e5e^oeDd)8%Gq}bcg{T zY|@&t@DD2tT?V%_h12BxWZ4XF9&jI#&Hlm(DuQ2-XpDK1i>0?Bill5#d=967BzFjdKQGxt-5XBCPF$9=m&zR?;3DsXDxDySAs9jQ(4r!l{a zIZ3!7%AsUPwJvv+vOiQu1ry&keVnH3m7QT_KQ-JDg#!rXs4PWf=f_QvG^JfRCOb|8 zsX4-w!1<{xeImO)D=4?-bJbB{zTR;^bh!oBx{*0K{^CXD;D@0w_wd}n zt}oyo4(>ao;(p6z{GttRn-~{7J%*E?=KMlkr&U~V7Lx)WPbfgoHbUj;go*VRE+{#y zkmRG(r$&L2p&DxUGNe>mWakCyb?F=4=hC-ZR09PqQYou4YYcMGMiVZPZN1 zDa~<8mOgBXrskDf@{45G2eR`cqtlG8f`SOw#ztSJkQa2_*(eH+u7?XtG*1&+>aM-?{d5aGb8Jw&Yt{7!33jfj@jgE#d&~q|?HiPOS39L! ze}bhxMc;MQHpRO^!D7?7MqS@QKc!Xb6N_rRR#O&E;f~NIaz6xE;mm5`GCo_T`aY? zA?~IQ_lt%)_&)kpq3@(n9i^gAh&kZq5L56NZWST$@r;H3rAlkcN2!jrb8w^tMurW= zdFY{reBFB_`KW5fZJU^yF0!-{d>fFSmtB7XFGa!4|0GNQ42`ZucKu6JBvo^51c%L`aUeT3 zl@FAiFP3Kor5Elg3`&1am!-{&%VtcCl~J>cD#g3c2PjlWzv&aPfH6RyuR^ z;V=3vG8PZ2caf_`t05`~eLK+h^}eT(MgsW4 zMJk%FMT;YIf!v1w7eXxZfCCRB2k{&81#UKSIhzDJUByg1SPI4a`^6>Ry>${v|6Mr_E1Mbtd>_nMxho#=5R#<$yQW4$4_!Zy+_CI+>dk$7wj?(o`y(+&Ni_Vbox~r>>;@!7%2-zJHGYuVYz<^^+McUGa-PwpEy|lykx} zX)_#%lBv&vKml18ua^hLrwG%-o4yZi&j(7k3Lj)0w#?&AA6nofc|d2)`yI$Y z?*HmA%BKTPl5v&Wd+MvtGuqICLbyOSM@EV&Y((wiJvY+5Rb2WT?DMAes~QNe>2TEA zh#G;F7a>1BoEv->QfXatclq*wx45tG%Jrmru0}yg^e)OXMjP7I&*x3gau0&JQVI1kQIt7UXxD&bs_F0qcqs0QEOCT)vN(&`fN%fIiXyxo9 zr`_ZVd>Q^?0nLbt1+wBx1p>xOR*bxoyui}js*)pEWefRwlO-54mCqrKG-o>`lPn#> zJx$p`Gqdu!>^LqXsev$`ZU2rlFFuEo z7)J&G#`W#B1b+)rLhTiv2bni_=rV!ls4J?^!$iLT0QY|k2JoFRgMozyWY0x*PwK*J zS-L+U9n_q3^eCUVjfoQ$Mc@0dncYJfxl+;frOGQ=_~E~x4gQ&X0mNOK(i&QBsD#9t z&Nf+U(IjYLSQ;G4qsi3qmh5T`O8-77C>@>>l#WQytaZ0Nq2;9iNmC}}Dfh;-YuBN2 zOQBF9c>Xz{DD%-h+LKy2f$pQf2uwp@&{)~guE9!MXqKHv1G(^(n2a%ySDq}wY@}dh zlp8TWz`V$zBBb*dwDHmEbEHISo`a;&D#v(v%aA*@$Mq%~R0qjxoZ~OD^9`tyx`vLd zSOkuwxTsQ@`$~72O?>mE?Zb!{YzKig2BeK_0NfBr9*YqRtq~(MP{=ClJcbI{d=+4a z?|NFXH&Tel==``&Viseg|A)ejIo3x0E(ERT9Yf>46}=F*4kE=S4Annej<$T9Cp)9i zi6cSjbZJofWOh*cG&?ALHib=op*rfADcQ42ux+ta&i&Jk?Pt?;$!-)*bC6^Zol54PGN^d1}Wuzq>>2G-O30ZSlCgLmLP z2qOOypjZ3jYa5=JGLE*MYwJ)#8Anv-Uf+4MHfG2LTRqi+rNIMA@EHcfW3;UEow@KT zELNu0Zr^+6jHb5teDC%5olmmWkAaQpRcnu2n=)Ee=Rs}EB^Ov4laWT*&2s(N=iP&u ztsAeY(jM4*G2vyY-bOfhG>70OL0v~CQs4Q0wiRcPM$0v$3Vy=%Q3tba#f^9Z7m*n) zkj`j|ZG{~OCDim;a^zk>+C(#I1BZgp`nQw1t#syx>&~DA#$x^yR8Os^UetT1$)d0z zZ%REWhu{ZoJ?Vl9U&^pO7AT#grPPJV8@O3i4t`9A=eRB3RYsx3mI(|3x zHsck=v01HW?4q;C?i%mrcxE9^*@xtUQ?8_U1*g1Va0;o0;FOKu#VM>$UtpYa2{>gR zQvZFNl7ja2%_*A&r@Vvau{1GG*$7T~8E6#?FoRQ`*E!{Rb=_PLnQ_WW7{#?;5vO#= zbBXdArO^2mtUai^joKP{P;snfs_|N5_>yX@N*kaRe`G;+ z1E3{uV+t`g_hy*o{?LoLo@{O>#TaU_>e?n3n)Uffb!~;kgNHJBdJ!l?i<*Vhsm`rX z`C;l>Ky$Ft5-;WA2b+2! z+utjUH@YPVcm#!nKNR17ivqy4OXRRjXzb|iP;59E%F}8H~jr=Hvf-km(8)0 z^!i`3R5S}U&8Rl3 z&8k?%Yl|&t6PrjdwESCO|Gn=wiE&BUTz%yV#t=goxs8Fs7R3 z8gB!aBXPyF_Yx#5L?bM~(vygNQ_m+I5|)^_mc`#)07(d6*te?gE8`%Xd9 zAOy+hXjl(HB14euqxMR&5G2@kXH!nCx^4kRKNBQ>K^i{ggt#C<;0<%eImJ&YdJ2*! zzf+Jbh9GIMZTh^_DA-Gr6+rZ^@P8va20|nJ~(O(uql{S`d3zI9YvhyuS zs+ba(C|7>r4l(Tj{buqVND0-EV4;sfPpTOhlM=8YMmA$xlZ|_(_bj(!<*d5)#N>jB z5Yj;|4feyeJa%Fu4+5E&r^}XAkS%LSw#*NMOJS#32o_LXax9PAg>1Q$$(9D5+h>qa zs<$?>5J*HPSOpogCSJy@f{a-cCu0t?)rnfa7R}Jp;oyvOr*52|Iz9S6*0xJ9M4~74 z`N+9_%w%Z-+X8}7)d~{1Ngjr~&5PnT_&Z^KLt)COWL8 zIc3m|wkHb2QkG_@+L!P!IA*wF(iSCY{zX)kbxZKQJuf%6tgx^c(~DJkiSQwRHNJ_C z;aTuvrmMiYM4;951m;Wg*O>om|9~V|?$Ck}nbhim=O4$b=) zVE7n7J{ISa<@rJQMrSYIul}YHdE3vzpnO(kIHn@R?=iVw;}3|ah4}_krKqb}4i0Of z9taq5Me0-jXRIFF6&9%;UaGto?vb`K$5+SnQk9~D^!VZlo{Mq&U%GKFF03k%NMaoeOeByhobIRH8=_J$G^J@0{0jh?G%($nTSf6b}R4=x`q}z;>ZzxD}tWh6N z$=59F=v0it4!dEeK}xZ0dKcahW6Nw9>}|F8qN3WAw4^?@Wbn1qhlxOQR?`NLv`lu? z$gb+3R9hL8{MgT~gS~1w&1QPGx|TdCuQI_TQY)q)VpyiY=1@&%m{F`1tmI!wdK|4Ln>}EAMJxNK0g^SsVG?3fxL2s0*m&s06I;v8t z7FuK{mD^92)P!vH;-mk__-!>UgkfWn3xv@lMSYEsnnN}$FX&kii<qrgK*tfj;3Ba%~6)>xh--}}@!gmWmMrb3s>Al6%@NE4myp?cM!tFK;H}d|*iJ zTkZ^ar9HMj;6wG-68E`peEMAaQ z9y~Ia^4mUTLQW;y`@FOR1T~^u#Yd_w!tsvbw7*@MR-}2_dF!WY(uwJ6;ZVb`{Gh4R zHD`zJ%~W%onhJ)Tu1k5O4I{19NINlw5}y`{JCQgwF7X#gJXlXW4MhFfc1OYZS>@?P z;d$>;9VsASoIapO_L9;dKByO*gMHn}?ou%Ggi>{}70Z+JfqF8YGiQ$c#BAGp_BL-N zwuG@qLZ(9;|7eFEkyNm~aB_hgs+I*Mfh7%s__~waQ(zN6D7qgHqbHRvgsdN2s@9Pa zoQ*4ci%qLThk;eT5NVBEFrIwbgSaLa`PXm-owK5iAhz4?{RFLN+p# zJR2oP$^fGxvGXF-zu;Xm7t=WG#_aJ&v;Z+u=ai}sBtfGg`Ex*aL|8S#2(hEfnkHF_ z!k7!&F>tY}eZs1CTCWb%?n%$!Vmqv4R`YK0JD%H^yksaaud~|Vy zgpa&;K)bcYRy&(h<`nhGb07LGGy7Y2E^a-Jsfb1@SPPQcKymoTPvj0LjBI6mf<_7YfNroz%b0habs+6Uo{o-mMaS06B^iWOO{O zdNeG~--03`NyfK{4v8$y=pHS}wq;BKcgWaenqo8eVR$5!Y9&*t8d#70T6R1oyBdPh zDtAy?Ed`~g!TQg*d#Y6KsggUP$5!>-V_c=O;Oq$$6&c$vmxA;TR&{P!N#O5TA7E1t zJL74@>)4EZQgb{hOQf`b#c?RiSueX*^wb>a$dFU_t_`kHBsoF>2yv|MZz>HX5ErN# zUd@k@8A~`BgpE6I#B^@-H#rI6{f!?_;s=Xd5BY-qCkQBPEPyR(!@V2ZojxeDWS@MU zlv;R^hmq)Lq&x5bMHqwEjaxnl5(=8e{Npsxnf^wS;m>T`?6E6&G%IPo45O z=G<`Z39&x>De}?RhZ3z1k@X*t9PGn4d?D=OhAEhutqDoi>B~a4IMjMB4j<=h!zp}a zIF&C988c|>XibP(=xaX@HZ5s=NOg;23~&Wjp!(q)wm$Sq7_P5?Bbs978Y! z3z~!_U|dV69^~d6YvLBR1SB8iv;;(u2!pVO@yhJ6mXJs9*TPd4>&Oa7qz90dC)B{CHEJxD)1!n$sJ=|6~Axnu1j* zv{5Xdhl-jIOLidzt**#Cl@%Owk!%k6e~vnV3B)KMAL+1e{1J7d5si&HHqcd9S{99J zKds@BN9~{W1kN-*p!n0-^c3^MRy=(bBwD(izB0~@W?fq`KwU@gYlDYvBm55buw}HL zUc*C;{%S)9iqWU+W@VD4MrAeSHX0h!C1?XHA>%0Go-Mx#O;fmmhJBllft*y&kBD1f zb)&P~WUEQ#r>n06T4^(ep;h+N07NGh@BxY4evNE21@bx?ld#b+TTP$Ck<$l*fDOq| zjXn&^loWA111yb^$O(l)Xi{Z|f^$#{GSjR;V<^rlGtiJdh3qf!`!4^=5~QiGF#`9I z;3G<~jyjVX-As)}jdZimFR5*DW*=i%-x_%YU7t9{a8;IMg2Zh;?9KbtHI2y77}JF7 zJ*Hn(SJMNsi4^J!6S7ZfEC(m-Ktk?D>uvQ{qYT=KuKghcaA0OG8DId()TnM?We_X8rh5>bje(#v2WQ=;~&xiGg?70 zHzDP+LppBp8H>)y-@Wvsk}uegA#Jga!=lvSN&r zNQis`nUQPre~LeBl;Z9Vbu7A|$0+qrhxHnRB_s|0oYCz&2CKi&NSDUa^*Lt!laOc^ zJ&)u70{f6j!Z_Kf3pbK1T%-tg1vB@-v9*(l986kJN-v_035%>@2}Fbh47ftWK$se# z%R`9xfjw5^SU^f4*}ue8%+92#OkAjrG_tlO8=|8Y}UDb1=*cz*whmuN*see))jH z@F#ClC171=EHmd86eU_1-Hc)k`#GJL!O6*F+X@SMo%9n@T_kJ17(S^aw7}9sarqkaubeg|Q)o9aAh>D+?cO#-kQ%4fUM4qymPJ|R{?n?$T5tVryT{YS@l$!v( zqmU9uFfe|cH;|;a{6!%u0z=05n@T=QYPy`)7Ktn9dt)2f_hXDOp;T&=hc zjUt`VRgDQ(IV(#wnp7=2mdP$3%!CVyVJ9R@w^Wx6bK&wyx=4hma@BIlIVn4LLA>Pj zlH}Bz4CB#DY#TB`e!^t@YX}1BsZ{h-d!gnz!5TajM`5SyyHs>!(>WB>1r20JhwMBF zW%z!`<-GENx?m=8h0+EZrFqg-jh(XrgZGN^;*X-Cna4p8?+m= zfa1!09^M3_(NX36yJXax9l%TdGImve+ zYhfC+EOO?K%IV|RxSbChKrT){Zp_DqAMDwG64O&kkv8S(e^Nbzi+E4KGPiL$+aKBv z)~pQw;2>m$VFNVI6LR|y?0;Bzkl6S+?V&>9fDIES4O&X2B4!&bXgld{ zkL$E}S$mrjMj(my|?Pk zQnjD#I?k5(vf~&T*=ac)kdEM#G?vtXqKhN}BUaJl9|dc65ds~Vd0#tEbS%56vx9+ zp?w6RZL+i<91~8{9MD|I2%@yZ211X{kU)Kd)R|7QGdgjz<}Kw6ZcX6`F>--fmzFzH zE7~Btu>FrP-)UrMln%+x!vR_v!zOeD%!jK1l(nlp;KEs?qv&63VWR}q)yUE#)F66z zr|di-OK+nm15RpPz!j98bpD-aTnZzs>ty*=`QdN&g3zpGISTt@uoMR06p)Kul8NU} z5ornp#K;V=Gx`A^nd@zvT6|ykx7EK&QmjQ)=^6k#jMAhnG6&e1f7w?Iq`ZT8 z@V2l+MC=`3us=QdG#M>Zw)B2Ku~q5FnQi#^KD<3bS@}L37P$p~LlV_FMgtbZ90-zt ztQlRqQ{DZM3K?KZ@SRM@!1B2|aaM;(g8$J$~tQ|aQ*3}Qk57`G(El2dCo z;#z&!=C1~5d-)Xya&6EiL0;mftBPC)QmH( znQx8%>T^UEhp~J)^-4h9iYIV+z%E#r_Xbw}8NZEmtm0i#ILR{zfy^6DifsC2@6%<`M4H&;-v&^q}p{K|X_2Z)}bizb2RI1{&liI-l-Ybf|2 zt1z!z7rN-8$azo|N8LoC=)3x|-jG+f_`InX*;af2Qb08b|GXu6sE%zq6u>_&EStNFla*WL=!|1gQbG9Abrq-F-5qq0yncz%&x zhoS#u?!!S4$e_KTwd-(3JL?d%KxwY_9_gBgWhO z6k42S29Gt9*c=6*8+n^B8y$dOB(#NE(rok5(K*cF$m=Oq%@*{1bg0s;zn6JI?l)GI zPMe!YyV`BO%}9*~J5n(A0v6cueV_BYE54Kc+q&U(C*bI8>lhHiZ8$K(tB6KFL2-0O zcX6u<{L6F&WU7cdgh<+g%}iYS!eoj&jf}3DR2w3jK{Um2iY9wKRc4pmA6|e?QEgf( zC+amx>QR$q^FFFea=;NLuM^<`L0Fo10PsbUaFHy!3taC!f~9*AT45tcYw5LPKPgIQ5+p0E_mq~su$@5 z;NbCt)St?ZBRHlX*@UH;&)eDGeM&hGuNHJV+2`%BL@ohfj2Db_e&2lw<`WMo@rt)o z@th8PX%ynZ2sm@MF-jH>Pu`IUu5Byj1r+Fw{1F5Nu~Jd)X!c|m=arjB585?!Qxmgb^dRVI|$ zK*AzBXSAoi@>YzGK=RG->%)enuNxO04kVJEvNqv!(+%GvKkvxF@+^N=31ypB;`W&kQlUKRf+5)rP zd9dQzs1pbNGq6_dz>RfhOHNIQ3I{(c-h+0jrSjH*IdDZwID0squWA`9UzUrSRvkc6 z)q5}pcMt&JU6#0_jmle2-Y|2YW$!ONVX!I1LS&}6ru}iaR4SSz?z{*lR z9pp5vhWbsLZie?7v zKG1*M&E{-&AAKWa5bJQo^E^@VHM*tkY#4`iH2{=GE^<~?>_Po>CtR#-IAM|2f}*&Y zZkJZse0xxH%$E|5#;cySIH?#&%TioVDuf8YU6M;yJZl4&Wb-Aa;#i{`#!2FgV+hfH zB;#n)g<-ITbq`a{XSSL5XPj3;nQy{nR|sln_pr>Sj3)be+jF}SBlbnGY^cgcQ{kHq zm(sx)t8B}DN}}Cy0=|eUZ=|ktb*cfQH+_0jbZ7VhXcF1^xCvW~(UphW z_9VS59IQuL5rTI@Oi*s^UBq*-uWIATKW%GK)$;0xqstGHpCc@OD(B zMepXz{*2Jr>>TZNsxFnB7BI^=+=afOk@VhJbBGG+s0dR&tfr_V$=bX0`5|DwIXU)* zt&R@+WQ6n#y(etT$#>S+Y-&q;#ap9+@m)#PbTVnPovO}YA#H56=jgyPmpG17N`Tlj z@&Ry+e&%50F1(*@ZYDZMo~5Z4lBhwRd!ic|D98#s`|Y{obgy`IVQE0{bV(%L&6RwJfR(|5fGic0nV+eqdkWj;M{6=Y_%xfv7^n zvocGz7>7w1CD1C?Fw(^-6}j0te7q&)%4R4HVBpV5$S|f=yr&|6!6A9YbAtK-G-6$W zVW`#+$I>eI_w<}ieacgei+>G7;8`Z)DzQYApJEH2&$0HhEuRNnOl3Y8X~!ayeqkuT zMVdET{M5u&@Jk`9!Gb0f6I=fjVEv=6UV^p?BWEN^TMe!TbF<=Vi0q?b1$*>C%!|&0 zk&jUq$TxE+;zTN1E7j;3MzKF{@i*rxG7UX2l)+c#1s+JtFD}yEPH=;UZ_fzs??7R81vms8*4v)}b6jA^ z2gacAb-?Wl(G&63wT1>ga54{ET*;!QK00$z*`uCE5li-t+cGmv>7Gg!W*LsYDDra5 z|8;sPT+Ac5>+rIN=OM!I>6#>UdX4So9Tk_B#rPe!2N#6ZmPc^T!E&7b$3c?q}IJyRGJ z;?WX%J{9#%tjog{GZ$APWNwKb3-`O~EYkgW=G+ByX6mVpA`|n3Z|LuPo-K+qbwD?M z3;#Ru|JQJp*NFf0J9UuB^aB2G(El4S{Wbp6GXw7HFFiNvhv_h*e5X@>vV0Q8VYwg1`Ei6$m;_%>XkSe5UiYDX(Ha zg&|1S%bh(Rk;bXaM=9#KQHqI5pg_Hx?;j~yTs6O9wkf{e6t1{(4q{iE$On2KY4vx> zowzZbhF^-dmbWo^wFoxE8qeIUI$ItSVV+t zLE2dV&UCv=9$gUEzpNDAyXdxC=a=3Jr{NEmuyG2mMmPqH+Q0FB=1*=V=8wy!YEH>K z#BA1IrBK_W{>J;{sa@x;|4R9B+4NbyPWOjq&U)nGius;-vklfqcg`*$Z#jL?bPj^6 z%m>3iirDY)kx0?!1xd*#e((O}SPCE#6P4sGzjsQ+u}r`l9BD{C6FJq7y%zTvQB)Hi z8GOjG9z?3oW%0v26 zsGEikN%3?y3uqJ|{&WnW`;c=#(*uCWx#wWhVk}wn7_=V{e|j9yWQI$DvF1SrT?2?5 ztPM8(0uWEP7!bMwxMhIy88i@v2mUk_5XaplaFYQ|V(IRNdImS6cvk_$-}nsBM25Q@ zvnwy{4M6;&0Re;`M70&|yHlm3P7^FHbiX z5YO2Oi08aYJl!C0X9OZVE-5T*! z6Sy{k+iAf$YZvgS0*$20a<5{}EP$R!T0OEDo3W(>Nf3@+n1Q5p^61X#f?n5s9Ox=KZ z4KlAW-pB#O-T>Pox`9e+`J^ zJ{7p+YmKKiK>X?T0+%UpS%7#=#{%LtJu7hM0CD<_xz33ET_~WL0$L!Tr2?uK&^iIV zAfWrNH_DX&jRj2yn;sFk#{|wNaNi1O+YQFMy8!X}4f&CQyGKC32gEt&B|w~hdjN52 zoE1-#ZZvS?0r5A&0{R*de|Nx5M!E@rc)FTdw?cV7U+ zbKU`n*J^l%@$`N`5~Ishfhz^X(|HB1Uf|XN;^qDx5bw)>61bCq#j_l3aSd5iH>0>qzEyl-BE3P8LDwE|Mb(=`Hm6A-V}CAS*2 zx|77N@wf%5{=`v_1WOQ#9kzX0Mb+Ag3s#nW~`oCe*1 z#;|t>{=|U(2#DwW0wA95l)!x~a958q(p?XT*PsYcF3WF{-FUhg5T|L~J^UvBVAEDW z9G5)WfL;W|%Y8*atpYkJpc(gK_mP#c2M~WF8Gm>?E(64IBLuWYK-&d$?N5z#;|27t zfW8*cko%2vRRX#nMe#Bm0-7zL#|2b^Ci0pNe!zI+DnOi8cL`i6AY=|X{)XA;^M4*| zGG#GbBXD;E>Sx*`puGY*C?GmL&eI(dP`iLm2&h9qrvwxh&}jkDIUAne7Xs=Q&^H3Y z(m+pV5fJ$q;_p(Ndk&=vh~nIHT$+G}3aIb+2+U*uERaEbEIMR1A&vlQ)7R$;AR&CP zc0n4J0MiB2*kc%~NhAKpFq84C8ac)=vw`VIz$^x41hS+w$$(9!mH3|rF!t8-z%=L> zp5_%`M)ZqM^A}(i=op@+1DMU$_%xlsbU=HKIBRLU>XxJ(|}3;Vf`7r0Qnb7lMT!W z$hR0KADG4j%uLD$EE7xf7%(jfm>OVw{b`vDkGS{`yC*P#1kCS%c`5<31(-Dn7;=9rqn7+Dq@S_T!H8x0zZJD4K0*d-g?RwR z6&6Z8KL3Ck@{b`UHYZ^EjyKO9G~MByx&G0t;-9vOY?9iyn6O!VIA5vyV~3 zp$Qn6F)B%+g*My1$zE*0a4ZbjLq2%`3ey z!34}<{9^H9DrYV%nc;zzea1*Vm~{-3`4c^eWJMVQU-uPc5?wJ9R_wSCoXkc%gN0P- zg%$C)dDKd>K+Y{e&g`9DnQ(;OBQs{romr+w=e4fkXX$Js zhO1!`?G@HF7WsP>Gp+D8;tm|^4F*)xu7&*-Hr5;1kzf|-?-oP%!riAf;J=FPh8?%2=8jKyvn z6^Ee|_V^NGQEx>q{H;4;Z_!I5V?Xt5?~KDxio4>oMKoU{#BPs#N5o#Ew=(%#BKDHl zd+d>0Vr*dEpK(!_4MZ$3GsW-i$-nV&h-c27JAW20q-0*Dr=nyA5qCye-7-AK7hrmr5K_+q z97BH}&Hv}{b6m@GhW_uQIpgO$?uuvU^zWnX$jp)d%g_G_S#foYpDQa%?nq?lfeYqW xl~gR4C3yP#sQy2PqZ3-jc>2GcqwmW6J30D)C3O6Z{9UtOoP=IjxhRpL{{teWzVHA5 literal 309324 zcmeFa33yaR);E4T3j_?L#i&uEwgM8AC9HygHcQJQU__#*V3VaoqS@?p7LY)o6QzwA zac3M$U+@R6g3Cyz{aIPiy$`PbnXmOOgINX9ShscE+7 zG;QF!|KI#>-==B*&F|+AYuf++{kPM=cIr*qzx6%mbCfA0Iz3@!3M{e5qx78&~e=n5_J|AKGS*pIZRONRg7`gIrP zFLD=oeD0#0Meg*)K2MP*P;h4C6$;0awA|c+3<+m>JstsiJ>)UND=8Uixf#W|X+DpE zDlYPP-6bAxQBFa=J0shZalP=F;q?$7hwbwgXZS4Wocyc;caaI7>4B?YvAYw25jpue zKKBSAAv4XF<|Ylj!cCx?kixkL`sNh43w@HzUULcru_&#?gCHPlxIknSruxY(PsC|gF1!p+S|r}#pm!Itew%M>XT4o9gb@ae@l zxtZ=o-n7LiaS zWEt)fRl8~H}ks(aZo$JY8@fU`~R8vyf_m{2b_|rNRx5O zD)7P>Etx|Js4_)5P#nE!c^;o$UOJ&s3MparEb2@*Q$?UYPbO!U3M<`{4-w`vm{wS5 zWg&zqDxw1Dgs{Xw@N||f@Lo@0fmcrpvMaNA%9PxK{6*L06}q#eQE_z(1gc4qGm=3# z$Oo&V_^DnL7*!<~ApMV_;Aa$x}>NYqmvZ!T4nR_2U?yh2pM+%8%v zW$r?xbZ(Km5W-AGML{e+2CZvfOhNNdh_dSTqH>k(9ZBp=Lp)SnLL6o8f~+jcxxAbV zZ$Z8(2^V)sQGSF{vV!3VNMWG_;pRB!G+(jTWHRZOOr2sdWK5eg%j$B^yXxxBn9$ge zzfjzwiL)k#!x_?yhLVywXY%9}6D?)tT*Kv=H(i!y;v|=Qm_f~+ez}R)XxfOk;Npu- z2~aqB;!ML|5nQ1f5-x

>r72P@$sBa1~9OZqmZ%DU-DpY2lkb%f#uMGy8JGpX@QA zqX5VxotkfS`>4l-W*FIKqH(8IRFJCHqHxS*TJ#gqoGvkCH+$qN$DNl}W>SKB$)eV= z5=0;wX|UmNggow+TPf(>lD?);fe~`7^^EL7T79Qw%r#{IIwfdi(XyE$Pq@Nd^g|8x z^O4$u&z)uUZxBK%T9cR1+SWwU%VF4{^fDZlh_)RW2VIXr&Gg7di}KDCYGzJRVL_1x z9geV`(KXD^v=Fm$yhVBfdC7V|R2ZJ$1gV_w9-hxHk z5y03J6-atczQ+(t`2sBz11q3sQYev2swE4}UR74gp|?nM(-^xm-Yt9l%t|9|Q!0qS zXb5FO78k-kXb7#dq9(%dS@@?eyNOpN08`RqDn3@|*YdU!gDN`Y4vRl%X#hc$hS(j$wiP{Kf~SeWw| z^DFMO3}f&^OzCME*DvxG6r(0Gb=RyE5oN-OIfG%NO&E+U3o%#=#iZpHX3KFrd1R+M zuOJhHEu&Xxr5GY^D8{H!HF(4&#&;oJ8EN?PloewB!f@;D5>2`+N;mL=PqfIx+{4`? zseK+}(5YP~R7e!0H*-|EQ4bYwZtz1CHj#|r*s!=k_j%Lui)hfMjE-lOm_gB~*RA)R ztrSyn$wZW?E)467TB%~5oicU41VSH~gTp+1rF`g-XW^=%WtZp~n5RO>+=wKiN-kl{ zhTAlvT!Kk0iU7^}2?jYCW%L6j!sxE)9In|@EMBO~YC#x%I_bseAWMYNhm{DU8>@4u zo~%R|-9L#i`rr~_bay4f=;2BP_4X~A8vR_ILv>^&!syvbgwZM05w3Z%>6VBkb3+h0 zp$Mb5CcPNluaLG#r)TQzo+rNuBN0q(-B9ew$LQ2N|0J11CKGAmN?1!idW0hSVx~%9 z&68}M8ZzCo)o@t&XA_j;W^02G(jH4jZgh!c@osI3nN>DCdh^UUp7S($^m?eA3WT|( z3}vQ@%rFvig$}qB4#Tz3iqf!IGnWXJFow11E`4xC?$BYJjx+ol#z{1z*pbUHOL7^* zFLLqlOIoq+Hl&6Q&e*@QdU6@%nSHC_7rWGCsqPXHK|RlDXM|&vSK>5=ZMsYEg0Nc+ z4>{OdiQ!Y-wdiq<-{`sO9okTQRxUs7Hu04=BPA^vXyu z8%0m*Weji>gV2+W%}579HKl?+s1XFS64Ff7!h+$(bWyQ4rw9vWrs5`BQiIf~F*40M z=Xy#!a_NV}n(Gc4`X7S~4bk0OBnLd9o=ahwup~^Hn>4dZ_hlED3Ov>Nmf%Bz?nDox zUMHT;I(A|St7s=K%)nc;)icR5%A_<9gpg8bHET5vl_o$_Ysg5wuWiQq(sE?xhykUb zVbIcftf@$y#<7ZG3}8`@NUT0;F^^1mF2ypYFfjTcLU>oB2;me>2KTzmWmBMyTEfh% z%B=}0{PO&ioIuTmjhiJJ9US4!=!WPf<~I6=f@QiIXb5*`pGshjp@eW7JrhY+Jq+nq zJs#l>?Gp;DG1?GrqaP{UM(OVhjU1wdC3%=|x3hNETED@p-KR7oMnT{pM-fF27*S zz(1$9&^dIZ#jBPKXJwuhhj5)khmEozmtxQAi{N|yW`Vv8|A;R&@P)r6soE7AaJBi% zW3=Lk;7EUYthTs&ovV#l{pD>jB`4HP=@&(=YFA7ks$Y`;+X7qRUbQ+EY4YY9Leh3u zYhb(U`;_gjA7*cN{Wx{ItF6~|*H1mSyAGYY-F3L9zuX>E(xc90kAaL}FF3X0?i-Hc z6P%84yO&7E_-dEEIyKf-?{AMOIc@`SpGQjCYf@XGZB1+heydYsY*4`-n9?sMFtcA& zAYQ1ZD?=n1t?nC0=ioFBY7@bSi|ylFv8AU{)cV0~ikjd}tai1JNvbs@8WJVVq_CwMb2yKtIK2 z%6ti)q>~T|I8FJb`P`JQzN=Uq1ru-~(U2A`{_+;2cb%(+QoP#LLMf-B(5h!Gv$xog zz^;~oE<0z^KS)?=Yhblfdqv9=(2|VBR|cg>Vx6lMD9w-9RHwE@ESX{u zUsW4dxfKB;zN8j%B6b@7%Xm}9RKQtNl?&C4xVMM|p~zG6bje2I7X1Nn#7EKpJ$X_O zt2GHzjNU-j!8Uj06_>AQSqn>m*qD*xKNroKs`VX4H0r8mB2vytaavtfih||>Y9c>X z^8jgmmOv>7B8j*r3R6hHzbLDyYFE5q;c_Oe#mYiy1O<_lg(e-4{8j4>Y*ia*bye;7 zCEmKKRtdo%tf4;m>(Qey=~5C)QM3jYa5ehN8#Uj&x~jQg{Fr6U19SlrsoK>TsG1K) z9S0`@3KwK!U~A3&lwup+0aM`Pz=6P)A0LJHU^J)sifxq0*IesfAZs?R9c49g0cl1B zfmE0EA=fl*n(s8q7^3NkLY0S6XXlM>R`jUo(>m!opA6`w*8ub}qkI2aqM^w_{^a#34kk0?ehD9P2S@rOS+%f!Gf zQzckC$8U@&py=l0?!*HztH4YZ!>{Z~%I)j2_eXokghmkjG@D1V*x zs;l5uN(M>M{3Tp8{S9_#aw!RN`Z`NNZ=o}?&gp|#j+e7cLY$D+Y}Po#;ws1DKPxIz z*5BZubUhnrE*OiMNZcroTRw{l6Z_5_POjul#k3QPUgyBZ&9dv9F{E7Xm6C~9$6lm^Q}UoCui8PPB>NQqS*C8I z=#?;G2MC;&mk@as@gpq*^{5AI{Idg6J1Y^EQzlTbw9dsw8ysSi*>r4~epi!7f(~df z&egPh8>>tDbPm0)g7EYKQ(Xmlp%42|5v<^nQp(6(pu$-DD@Qn)#6%xvst2HakRzNA z!qbO*IAi)BJ^I^GOX^Eq{0%V>HJat_275SBgr|=XaqPHpU}UTNeUb4HDGHI}}o#DvkR zf&|fr^+tuVTvv=uulov*{ordf4v?*2b*kOcx{4N?MuoE9(~X*W=R(mX5~IZ)-15f; zQY5ye>mgARccFT2AdQ+gpdcXNxL35S32_5TXA%6eGXlN*NfI0%TYA0#BY_2SSL2CU+Q{)1fH~;-0y8TCjfK|jk!?{g^{Vp=!7>M~>61am&z2%zKc45wBOEe1+ zixEgwZSjfJYktXULBXEz5Ka7Yq`{?Z!!B^ip$1A2+Z$zwAky%Wi5u3#ZY3MW<>*33 zH}4ek{p}IHB>XJz?r*pGdIx9v+oOB~Fn!`19(2~ZI!IcbtDVMP!HeLI67E!T4~3g* zFwl=DHzpZ6s0oIf%1JPe+=5R3R?AYQ_l8{5^{=N9ZO%3;{>iPd?)b0s25c-6;4C}i7M-&G{#K?KP4y~m-xQ@~lsd4>?si-YqC#C;Br(y{E!Pzjxn46+<~7H3 zE$HY{R6WH}iS^eapL>+{sE(>yk9Z$#08<@z)IUL%HPd{i!W;r7h!$Bg^Z|b`TRD@+ zNpnTQ`)G2`P|jK8PEI7Lq}~JPYH6)WR2#hFoPj#c-(aJ@ z(O*PFs?pTh19L^KyzV9&H`6s@%sg`hH;**$LrL@3k?i!CMLCd(7)-`T6c3<`Mu|u~W^8QQw0Y#}nfmNy)0JT^tegLIob*$hk`pO;+*_Yyy6fs+i!k2VfkW zaQ+=Vxb@Boq|68=b03e=Gpmd0B3@_YL7> zkzz)|UTRXX3=qQJL`8yH`KK-HV&0G~4|WI7$gir}GR`4w0@=kfX$f~l>y`jICsPVF zOV!#&;-dMbv0HWCY@HYNNg3KFBx#IA*i@Y%77RR*CXFH{jI>jAX3QZ-X?BaWBWNi( zka#66p568^(st_12})XmMcR`(Ln1mO%Y<@BPsAZ1jJR^iEfT{SKaeV=>S-||d`cFo zo-mK6q1=cmW6buVob?|pt(j{7=Fw7&D6n=ZMHH0y@KPE`%E3WqDXplsF$Sx4H4NMu zpsoaILB;^(|F~w=7MV1o%wj~*_~WWgv4}}EsmA&wQavI{hD??gicoL%Mr8bMDe+heHrm-GU78y zD&kBeMmr)Nc!SC{9FcGggo8yKf{1}{1a_l7#R8MITqZ{(d7s7g7xl%$)#Y2xl@Uj^ zr!{{-m0zl;@S>_`#rU^Gg{#YNwRpOpYs?mEi24Zgf1ltvQ3LTGEfeLPs+IKh%;^>p zS97>r^*hn(Al%q+;l^7$^*4EnWlx>@Th#CzM0e9@ty;O_ZDIvwO(L|7mD=*65Op}X z#gnVAf3e7Tie;d{h;}7`iZ5}~I-)GW6mXXCBx~IzqKI*IpV)YnW*TMD?YMp+rE`ALhy( zbNC=q&6~s!RfK0SMAbEFPEe^Pr7>T%(}7->w79Wsu)sy3YN18x<>#S~3*|}N*sbMy zIn~+Fs)n*97;HhdEO#76s**WHf5JMAq z5?vMihV806Ej&pZ%Hhlt{S^F$^>L%c2d1|WhJzKuZ&)AGEj~DhcIxGi?z|{a`LE| z=ryig)biB+7(zdns!R01FfFi4$lA83_T{ z_MF5(ii17Hlc#>{DTzG|Vo%BJX(W3Z!=A=h&qxeRb5_rB1X89*h5b7sc#uiMaEcyp zr$C-BWW70xZtN;R8o;dNz}=~Q(2f;>lq(G+hNi;x4OH`Be!K#3VRl&AkRj{oVwyjpStu|@)HLe%Q5>7i-+=!=B+w^mHnT@ZG|U> z=0`EFduGXT_+3_tavg(t+KYhYN&q7}RAn*SHKbWg%{&`YZc9@FMdvjXl~s|9jbJR> z!s7-OH1KlT-)>;3)+F!CbQD%3Al<($N_IucV;sJI&}C=|rnzFqme9s$hnvN+J7)uCj3oBaM zIk~U}jH=IYCKvlHvV{r?7Kv*7JVKoIkEi!1>bsOb9x`IJo9KjOd zjl1Uv9x+G&qrX<}mm-IXjuC|})uU*1{Gn)20D6jaDUK(}yK_APV@0h@HExVdJVX{* zscUDM+1B&SsM1HFE~5Q@WiU2-o_MJ}gpTePAqtm=RBy4JeDD03X z2z!^Pnr?a>4L3$Qyi<$nUXq(_l?zm?B*ol@yI!pkKDU{S$*x!H)Jl`>>l2w&sRKou zetu@JSfOvKkWg%Lv4rdkzm`z^nhPY9PVEs3{E);Y*)NySpqlOy zN`9tVLL(QPj8PV8Fy=PQQ86^W;$jIoM#m*q@U1tD$QeJEwfH`!5wmRJ;e z0=b0T9-|!NT=7L5`2D{V`1nqNLr8*H3EI+-K+#LUVvmmCIaVOB!b@vKTN-%pF%Xdg zA?G)-eiZK;Op)Kf;ZrpgKJuG?hMgzygdC)xt|hUeKN(qqp+UUAArdiTSs(pQTnb5+ zn2t;EH&y5=ibzDSK!)fj5sm1TCX|RsG-aD9Di}u2NKHKvOY9h!(Bd9#OW{>2#IS_5 z`r>zD_{kAyC8pyLL#M8Sp0pEngr2mMbcCL?ldbyvhQ?WhET$>DPTPeP@@ABE?4*n= z8A#dDhf~_@1z1FYiUL#U6h@eY zUM0WM4n)Q+>_}j!9GJ6nn8nm{)CzIqT>DPP`5tM!d$MYzDJ* zk0L>C{T+{wk;e$~$l+}G9rjXU|B$PHm>BkgSmWGFN9b|xtt0d}$A!c>HzO}UuJTc& z?*sx%&zNw1K2D=tH^J-6&x@=4j0nD>^fcdj%})~S&Ce)`t9+ZljI=_4wT$(73*#zj z<-fTKKgc8d?%#>Y(`b~MdmtvntaYROH5;qdY$}L(pOl=`i8;h3=75{mJ?$yK$2x#m zZL8UW;`OxBE$BoYp{M3aIzms)lS5L|k)AfwH*A9A>Z|4n11{*KfHh)||Ag?ntu{9) zXkGt9by^D~iFI~YtK7oS>|)z#)g!`DZ4IsVfv{HlK$xoiCM*%DO$4&Q0THbW<>Uea z`&5K^a&iID-AJxRmLXdKLq-qXi!P(5j?iTsXUJ&4_H|UwrC2X-#BM@bxESYZ5Ut^@ zoba@C6}~kZf&(1EneZrD9j-E;>f|THu#RBbfi`epuPdaY>1&Bw`7Aos=Il!{Zx*p( zOGyjN7RHUXn|fGVnxYV*zdaITdm=P1Mr9~BGB#h!6(hQFbM;tr{s57xBRE}vxI#y8 zx&U#dOcylcO+u~+K|UFVjB&yPa!(6W`FH` z-IFeMfsW9{UaKQ?vF;GDO@>(7#>Qe7>YjA5X*xm|o30~tu^Ay^TMV(k!SLyvL0lEp zPzXTxt4p``d=M>b5dgwe1lm|bXQ&Ko6Av%eCLRb=6W?mdsTk~WkE@!;#gj9z6}qG6 z*_#Iwt#MToI0867HV#&)hL>bR)-wv2`lE`}=u7gzocM5@%p4^4zuM!f-UNYd$p*;g30ETiA5U8t_}$a_NKkR{_>`7aW}1@b1;OIz3>Fl3rCXiWR&zZ zSj=l(32bO@4hU;j17Xc-AdIXw=LSbP?|Zc~Dv3;yHntdp(&wSsvBm`}Q4P_KB4NmM zk_odBG;l`t#&=oc^+1h>e%0lFfYpbtAy|`;oU-dh(hZB^IBeA`KJ&gle+!LFa0p;J zN^vE&Z%yRV9256S#crhufHzW)nT!i$+Xwm14Dr{rp+@nLwOzw^g&NiG)=M zFs!g9>YV;v3cJ$qGgE+4*oEwBBw-^27*-gs<1diHdK!LcIu22l!ssN0B>^VbSmQmw z%Vx$(rU>zNEsPwG22ZmRk1p4=<#cWm!EsgSn^lczOI{~GnW09kF!y4pjS{;FJKs3@ zfd&IILNWkihL+%QypYWfYgTa#e0*GKinSopIyJI0CM&Rd1{*<>?wko{ki8UIy>Kyw z7aU-XySEmFU0=17iNJfF_+;xHR*y2WC}JpG%>T97j6f0uBj<9?*!&J=lzCA3JlF|?BtwKL%7Yqn!9S39=0WA#6hkbuG-*DRf z=Np9IDBn5wjqy3~YZnn&)rG$Vt*j5NZTK+9nh;Ir)e^cbW0fE7%10z`M2uOE8QO#h z_7^4m6;pWKm$UEME_^52g!Hy9=nhTjo6s|Sf?**M`w;Cs8RFmyBL&HWN{j7hyw#V# zyr1UtDK38lP1c?0_>61s`-^Q@9ohM7DG#_F()=yBMJS*5>O>9XZP zjcunxi5;l9>3@6k~o|=!~|X9(OZueu%1i;yAIf z7EI%jK+(-q&w#gwtD~8kOZE;+1?3;QleT^0C<61`CD`Rw#g6{92)qaCk&a-w^4c2^ z6Z|`l=V-V2cQ_G1@M>m(IGmEqG?*gD`-P;iU>jj#!<45ki`hHk7*PJx%);pjnI27N5MLJcf3|mPhUR zHh3vQM*3-o7sL>8+4%j@P4Swxe*ra*yrtOJW526)-z@UJ-_^uG)BEMjy?n2~yhHQF z>}lFp+{*M;ju4h}Pz>S&u65K4a6RHLPvrCQiE#)C4tojOheR?Xn#HJ%rXJ$W@4?Xa ze7oPZZqJ(soA>W7Ng%Lc{{qN}|Ji86}{n4#ZQZUA?91oxSquWVs-FMu| z0YKKcc2EM6heWX`vVV8AYsdAqv$nLy1YA1+Qw_Wei2?0{$n+iP-w|pHqw003^&+UE z27bnfS;K@Ybv^{WyBc;Tw+tVb)?}KpE&{!kd z;cx$KDYp9VIE+nIEp@IPNGmN!R}2t9ZJVn}o^CSazR7Z1&{o>&Yo@^#vCk;cRzG%2 z(Wy1A^`R-TU|n->vMb|@B2(Tlr1-Q@Mn854Af9B4{yaL1 z)!=U$8gQ-I>slkj@*N+dRp}ieh!X4|LdqR2?jIt3r@wsXkm6pZFoMSgamGsO#LPH08E2Z##4*W+I zgTk&%cLm>;|jCE22n>A=tiRVh^}up7<4&8KgM8-xB@Y}`!)kc8;SXp8C8ovP?ieNsBL zQ97X_rR`_%T@iP4JO0TNLZ}V6DV~XTi<3;H20F=&M#9l9+g6s`id6^y*5p-lqd$Sg z*{L6bD-jSxE02vD#X5;r{0wd5^xbGl#a5)^Cm3a@RBVkdZGe>M(#uSW4?$6ghKh9h zM#TmuPUm4;aT3ab2 z4z1eIh@sL>P*q#$@%y74aH&eWqz|RIv6g_yFtPjq%Gm)fXZ!Z#?c2Lx_ny21)vn!A z0~}_F$L>Jdt2@~K|(_U;|ctpniEp4v&yWm z($G7W*+^?qJ$sXgR{kXv{E`)H+>_V1cR|CRyf3S z4^%DCBM-^+8w{>AlLC(xNkZ1(YTS!b673}2j_i4J|9te3^bV51c2RKllz#>r`;2W2 z*41!u!GS$_ggOwUJvw?}d1_`!-YTEN$W-Pbl zPwaI)v8Rd3?(VKwc5R?;uhnnBRS&(f^czyq(4Z-n52w*EZ6`)l@TxV7EvRiZ@iZ5Q z=45A0VgwaRy7z!GR5mVw$Z9l&=+^Qsows>nF|P6nc#$neGwlb}BSZP-)(49w#hwwR~({krhDaq}8^fycIU0#od%eQ%MW;nnXkJ zZS}0};o@CqvBB;D)`8_&&hyj#ZIT zeKwDeczOd7!K{YxL^Hx|)Q#piGSip-ZT(ai4$4$l+zPEi$}#YDj3;5tv>Hqpw=ZQ! zB^;Y*_Jqa{7IVX>PFT!2$`|@8>ucCA?x<(*+aZ z71LTc{y>ya2x#Vqui>DHO!z`}bQL8s0CW@^Wt50JT$Bh;ACA(xKc+~7Ub~32C0`iA zb)^VhV$*_!Ua1Iihf{>`^wGP4tPoiQ#(y{?h6u}?KZ6X|ZS6&YPL{YHV=wd>V&ZPw z4N2^26-!v=AjfKQFqV$k(gsfQRE<3v=p2cYKQSw|N-N|Io>J~s)CJ_vxwL?f|v`iH374LE4IokH~U{H{Z~kBs5gtNzMu^$pwXrV45EP|VJt)%ms!XJ z2x;yvfnuwjtg9eN+|I_Bd4N0CTW=cA{seCqYDPe z`M7XalpoT3C*U`(v=>+2=eiE9avcsv;igPZMkI$8rP1VU&x-QHQKdwP1{7055G17@ zhQPpTDy0A@`6T~5a_XsZjJzqL{T3o`SlXv_LYH!eNzFT`4%(oY(AsD59PeVDYf+CT@^2u(JigvnwXD(ue?CJPFN z;pn0+p{{b755LDPry(@YI2L1KHg*#h=2Z8qgWLV?8wiJVg)zb0Vgv7g*nqig){Ztk zVDyUV&%t$6aV#lVo8`YQJ(0C z3D6l?mbemq137G*TTtN0OUqyE;P*rwxRl=H$M=@;1o}`x2Pb$v**!+A>n+-#QaRWb5Z1&l9Rj0nr&f%oLFiFbPo{$&GIDr5c$XvJk%9NF%rx9o?kLD|%)HuxTjlA!?7SR2 z+={dXCNqa$=1Rl!Uo2w!r4I2tQhHjZkxxYqUjYZ9Wv0Z+FMD zZ27PhycdjzgNqC45nf$KnPX=COuAFv&W+bJ7rvwM9e{5FzCG~$8P{FBh3`ImgZT10 zT*4$AnFXFAM}C11hVIMAcJO8B$Dm8=!K>`JogObgnOO^9#z-w(FOT=$GK+=Hv(b@q z;XXfOKYoR#(WZFX4o@55X$w4Uey;=`Z>{3#EZhT+66OebA6&QY5H$SY^6-2VN6rlR z!aF3CV#qTBKv1GE7bIJ9hhbtXy_mF_foBGtz;R z)G`c|^3gU5@u-Tz$hd$D%8PGl)>_e4Qlub`Fd&)9Ap3EW# zo_s!cue(9=gYiotch_>GWzuhRq@SIT@ar zImjXtk0T=&&!d?6X5(Rp%*h40Xez?-;nDO0JhQ$8VTL2CN{NV+czB_!AQLvHX=ZlH zGCd3QTn(l3ZTy_7X%4&q@5?EKX`^(GBs-FyLwhdjxzT&`xF#%hADGZS@R`&fo^AYj zQdzID{l^FO-g&2hIZX#VqUKlTbl4&P#fMLsm;tY4qmU64Hf zTTLq)k=1eis?W~%H+z5G@O{!s^8dl8wT?bz-@WPp{U7IEF|yk`GyiH z(bGSkyYAhAmo2D={LUYn_REizhvz&xBw-qcBb`1F(DCD%$hp>qok>ao3+`fBK6#(NoQtZ{wBWxl|pHvp(Aj>$XtLV6K;I<+BC4{w)KXTTU_Vx$s;qOb#+MCYY2J)%sGPwMRa^M=s)n98K^u!Vql`dVta!=y zcQn$Olu9xTi9c2#GG=&L22~E8V>g1A6j8eAnPWvldg>`+P=^{K@M;L2T$MGkp_AU< zQtwlsWu|vv%yM-e{oxU+%tN_mp`)lj_l2bOh@yzMd`nUGk!5Mzm89;Q>{{qT#q$@T z^7N=2n@V=z5N}Dmd7-9tccKj9|6U0<;{P{);7k7g==YG6{YUx#(|iaWbCYt#>p$oj3=UDJx;D0N=6EB}UeL5N?dKZj4)8gqGZb*yhu{4d}6BQi{ z)A&HP`=amUOT)X;s4}Qh@OpT7ps7#1mZXi>QnU=MRIAn=)Lzi)w7uH*T8zzM8*7_u zE3n;ad(!rnEokcBi@ZT645{M^2n8uFGPM3nGiKAsxoSG)S;;1(FM^@ zM}HGNv|CZP4c&h0Hnsch-S>AtH)cu9TQR5i@b=iz!_jkb&wuqCe%$TH{cv1r?50>p zuT{N%=yh%HoxR7$Jrj49{a$%$PQUMrDQA9v<~m2pSy5+iJiD;(x&6NA_t*ZJ=bSSj zIN-UY8wXx|Zv1(lpZD^hTLz~MxnSst$v-52Fzm(Qe;!dWGG|ok=t<{~7}J03sTcGa zcii~y6S`g4{i2>u`^1DveJ3YRxyW_d#h$54r`@{?-LO+;bK_koHabg_*Z|nzEePYjb|S?wZ`!^ZFIk6t>@x zRrIlMMoDey*u^g{8NT#|^7EI!R&nvl_x|Z+`+4@-Z6IcAb|5Jyae(TwXp1bjdD_=VQl~Xnz-SpMw z4_>dWeQxWc+tzNsd&eDb-M;g#cmG`f&<9WNdiA57yBj_^yzlsfLq47T`3+y(`&Dgo zOYpRBXSJ^UVN=^rhejOn{jvd*Z57&~Zs+&v*XO*G9y#T;#9PixJbPuoE$19e`t;nl z20b`rVX}Srb0a2=+A(_4nCHfxIPQk=+a~nBXpXaH;?_yuPd?Q(;o_^OdZ*nq{q7kL zUh?S7$7ek{`@u`^NeNuGc#h}tOXrSCJ>`lcSA2Zs3-hY4O22yaHQncbJpYje1=o&o zA9ZhAcyrpc^q7q887ni#dw%jfm6f*W#O%84vYe#rKDy3-{m|S!xhwMq=GW&J7o1YK zxp2V^zuj=ZcYM*FqGI3i#ZMMbDcN7*EA3gfu59Gu9gDA7^39TEH}+ooz|z6xo64sy z+qKNS{OjeuieD>kTG4yu-76FQ5BUdFK3O@m>iMcsH@$q*n434;Ja*NFRp$p@3XHgA z{Vjv5|5n}a)(3ArwdSsxUVpmjPrv=Ct&)(7R&U^3dc~|*e z-`$mV_Xl@RzURez`rUiyy^(9YYZ}(f{`2NP54`W5`y&35|Cdkx;##|Y?P>Q{-T&SF zS3R)xf%6``^TA&p%vksKy5SG~`Jtl^c^-cI;bDKh=dZu~)&0mDj|_OU`q6J6z3j0U zA3OQ+#gFfOeEbvlKk?fW?!VRk&GGk&zaRYjMNdBPWXF@&Jhkzulbt`;0_TguLd-m$}FRwrTx!mXKo;&OLrO$u#eDVu{7e0Ss{EK(L`0a}qzx2RMhhLig z@?$Um_HybgPrVYk;i?VmH+0)Lf8+BTyKh>s>G@6FU!DKz`d6bjU$yz^&9>L(zV^gx zzq~g4^@m<>d;Q{ntocXq9}{Z-RNGKHe2ag}t}XqymTcX=_2f4ez46K$-M3x2?Xhi# zwz>X!*FQi1=kVe&=cLWWDp;J00&#efRcv_q}`0dxh_9dM~PecKw?APwUTp-}nA&?|1v) z(hu(apy7k04{!Kz^;19{Jx5P|J>JO|E&GD@Bi2SQx42O zuFx?%>l0TMv$CC~4T(@JqvmpH_VO#;4JrP5mtJ+1sD>`ux(*SAYJ&=O;9# zHr~_tabv<4SAB8c7kj@*{Br)6_kX$n%hSKQ_NxcJI`GvQP1iQv-?YE!^yc}^Yn%5r zpZfJxU$6Q4rlm^R}URJH0*Hh;l~btdib>VE817Lzug{vskGyc? zn;atZ7r66UL1hJ#zT4p+g3rckaNX0RztI->+Zav(G;3 zEQjOFGtW5VjMGm~OiVltpHojg^%Q&(@Hv@2C-LV*{>01A3G&lNeU3LicFQL&@h#b{gF@4fAiDhfBA{|FMYcI&ptEK^0kXS>DsI`FXj-v_`g`2QJjx&t~RlF zk#@PKP`fn4hp|bCHpP>ndJQ^27Y5K(0dz?KT@OGP1JIQKbQu6$13(u57@vMl0o$>{ zNuTeQ3wHy0I`lc)Nx#~4?f72{`oW3p)*80pzr(#QV$%27pRanUoqCxg&-v;4*vU+9 zC;-2vH5~np{}Zf#rcR!Gfg{Q5DZv!pB%T*dU+kEblRx#!!B>tRNkjMRFdP}^7&&Cj zkYVtIsVx53mdw#?OJi)O#YRQZG7qA{U+ksTW)R23-Z51XlX^u*T>MY4Fl{{0v+<>^ z1qMB!=<|Wzi!Z05^6yskrJ&JqmQ(Rx`M-k6EPpM~^FSYLrso*+&A?ZI{)(9%@q&`S z5BTv|1SkQIk{{`{5yK#$I`DlyGK4<;=E$3({LztFwl^kjpIA3h1jqUef}EsiO}iBS zl)Q*bRCqH%F9qFip)XhTT+n|8z0^W4Qgm9!yP+G#tQNXQ(VqhS6VRu__Eh+huI|K; z2-Hr{`}W2hrP=>n_RjjZfIbd%yenh)pJUKz!Q?W~yULG2pkEJqJ^mZv?~KsHp9%ap z+;=|PEI(of2SEDef*t@J)5?Z_VNR^yt)SltI;K+%`lW_`Pl5i}G5qfYef=@$Eue1# z{h(QX#9pOeENtP=eW0U-UZv=RKtCJGrCR8hDf&#%OF{2%rl%SD=YqZ#^e*EM`eUGP zHT#cvUCDn6^lTJZx(ZIEf5b*b-wAqu?5%p!LjR|tw}AdF=-*lBL8d1G7mLEaAI5>H zK|}t9DfP_~7BK+OaF%2QCQ!QK^pia#>)mFPFjWvT*v zC!eWlk67faQ#Q2@^jFV9xq$5|Igxo>hDncF&M0H;MXj1+^FIhg*v4J zYigHU^59aH2mL_56cwh^EPtsH{uIz}1HIf#k65hIAQSXhRO0tQ50yuecSI8d=~oH* z!^1J3Y0>XhrQais$wGH2dM@bSfPTG&zDUt;1$`boqqrLKMR$SI z`6l2&@KW==xX`}I*jc>g6K7Ml;>W0)2)Z+nN$GDMz$a>iMZLYBPF)KKn-fq{ruWxz z-zn&4K!SS4IXZP9pltT>w!(b`NbvovaM1&FzVsyBZv`NcAAeKOi;DWb!d*I0&*?%y z!pDt(M2yxb+&>ib4ImNo0q5#`BNSAupcM*wPC=Ui3GG`IuE%-0lz2cw^0k9>++GD; zGg!wxuAm7+blfWn`dUE?hw9Y7DCn<%ayU(&Rk$(9I^PWnTBo4vhUwIM6|_x3-zlgN zJv)(V%_DT^^pQIBwSp#&(s64P^qqq4LK7jRJgK1lfNo@+k0_`+8Y00r5>OsfQxtTq zqTZmOfP(GM6|O4WO6>g!zU9WHz3RkUg4=LPJ3iqbM?NT_~1QjkI5$*_uyHMe7P`ITEce}!^ zRk-IAZnMIDrEote+%WWtMOuvqB*MK~;XDerMB%Cci8Osf;ZDCum-3oZhtenNkWWE( z16s=I{FcJCDCm?)x{n(a^dO*e_OV{!HUV13xa|rzf3og3PeG4Q(Qz-hbm+K?b?78O zA|BUF)p1#X1kSH;)e5>BkO=o7g?m;(I{__ctuCCV%bNyB__$2rJPP_yK?eYdv~N?m z4h40au1kpnByy{-f>tW%FA91TkO=n~h1;s2o->pb1q}uye2iAO849{vL60fuWk3}i z-^~iQO+oJh67o*CL=UZ>f<^)oelJkCNeY??NcbH!Q`1&(7)5|qGPDtpNQ3==gp|(} zE~ucN00}9FX6aIf&DN!4T&hFA0?K8{=_xvNlY*X9P`!diU8eJ0rJ&ap^qGQAnWJmk z572cS#_?B(*~xhAGC(5S8vs=@bv2+WhK>NrXNcayy9!V@?L`IAE^L9@te{#2ZBx(= z1<}l$@IiBj0@|e@x^P6`Y8A9iK|2(*Q$h6#+NGe~3fiZj1_d=Ls7XOB3TjnQn}XUE z)S)2lI9<~y1;r>RRzY?J#VaU5L5T`-D5#%;k`y#ZLCFdlsh}|m8m}Oyf~F{Fnu2C3 zC`CbY6*Nyl^A)sEL7585R#2{j3Kis2P?>_3DyTw1l?qy=pj#ERT0wUyXpMr_DrlX8 z9#PN}3VKRG>lO5(f;K2ow% z3QAE>p@LQ`XuX2!71XLAyQ~@FwPXdQD5y|Ds};0fLG=o1RS?|(Ct{hbpcDlaDrmKW z)+?x9L9Gh1N9pqD{uv>8zJe+h^oWACDX39FQPH|znzs{DrYI;=L6r)6LP0we)TE%8 zZn_k@zgEbbrl4#Ety0hv3fiHdCI!WG*QF#WXqtku6|_o0Pbg@If?5@1kJ05ND=0-l zg$i1&p!Eu>S5T{h>^+n`1*IscOhM}uv`s;c3W}0-d%V_9K~ofzsh}aWj~y0IA3EE< z$cFPMLox)y^m~egZJI-ifJKM<3<7cnzRbf6WAXd31>=J20{Az0&;iiqS}@cPSz*C= zff)n4H+LJbi#U z--0<4m{}G~GBArQ7&<6eff)r96%DH6lR5;2r#dlWyYKWC6fA@F?5CI zeG22It=R6e#S4Ko@?s`j{rj1HT@Orke}O?D`1}c&q34(}w03#i0JE>xff;PUP+j|g z1@jd!dn}kEz>G^W%c0u1eV{q4fxysZ@A#AHOn2sAf?{W+&op4@F-arkuLULsGbjee z2h0P*&6pZs8esGICnY}sZ~^8p49Q!7IUcJ`hMW(9sj*;!di z=35KqZeZ3;GxIzKOtS^^GB9(en|a;=rc`2tK6`=r(ZbUL%#ElJjTDPQ8XvJ>P6wvs z5;IRSFfU1rkUSNbXEE9`((qbfW?_V7V0^%QE-@lCYJmCaGP7h_Z#*N_jCm25CnZLN z^$sw9!6?blc|R~8STNrLQ>*H+AwEx;k8^~4!G3IxD>dz00@Y`T*l5mf(k{|M6>LM& zaXdzTNSClYUPBN}4Lm8RQ!;dK>i=)hkUq!&@C;!%^ruI6fg#pN+tQv`lL}?gP5@5@ zdX*HGNY%cCL9K3Jh7$($s)3m#C2JbmO3jVqdKr0zQZ`}eGt0t5n5#QsuD4*^8QzQ$ zD7E6F%PF?h z4`JT#glX)A`Jodg3jHDRVSUmvb3I-?_KZR3WqP8@bS}uu(me?bj@TA>b(9{9ldO^p z3rckkkzeE*VBsOm2n)uYm62Oeq{m*De36BRd|hS1c;Ont7Tj;ik|o*@Pd1L@;t-g| z6(#b`jYC9kK0qu{aFXdTU7Qh?FsD7Ey&m!i+YpqDwA_s1T%1xeP;?Z>Esq_z`H-Vz z#W7XzQ6-IYCB+#&3z|+JTJV`T$muOu?CwNhL{5H=&pkp&pfV~C8nbj#*3AW%or|Dv zPJz47=N0ViHK#y0iqc9v2m-Q(OLh3jgwO3OaC@^dh7B7&!Yz(YXl_2-=*}z1_hlCi z89j2;*z>#cBJdP&hJJY2K#6mzltKnB+mnV9oL%AQ0EghEGZ>j}b^g#@n3n7D;jAl1 zln-!u+-XH_9M`1tWdhBoH+7U-KjkH8A~%=Fb3QC3EhEEIRHQO6zZfSGrKXb4Ee;bi zH=kePW0E4P-F$LH225uS1&wT`3(DgB49?@uen1h(vc<^Wf;=}JGviPJ2u#^x1A!B( zIM{*%jGZLmc&s=`>*kZho#iiYPFJ!YK4c|8oOI31DKW$D(loCuqd2~qgZQI16%1TfIHPm2a6JQ#bPE-{ z1(~QgWmRQ(k_h2z3=R?^;(V^uEN$56E(jK0QNsvcQ_ksVU%?o2h6*%?Xkyl@ZlRBf zAgiymyu38C6w2O$LOOUZ^yOosT%)_QaOXfcf|*fPM{HcMU{uZLk2(KXEgucXOj@zW z^fa`uoXG6V^yK=|gxgfxQHCjdpi^`O8Kz7$8p)!xEDx?qkn#{a^po6KGIm_>z1{*Z zW5~AA^N~%Nlxb3i+NWZ310@dWD|1C_NX_pYYL-QKqQ3Wf=z<1;N%!QV$}ragY?o#P zEDw

_Q0v>seXq#rfN??K4{SOr3zz$*DCYV@N^zbweG)Mx8%=8j{NW>h zhv7nw(W4!X^GA#j2*<*nGi{<1-HIMI26^~I+01=?!ffkBSWTOc`2hMj_?x`Y+}|gB zxQ|myt~K}h!|@QVg7{4Re!?~2y92%OwHSrahctye=g^VtR6ogpo`_RU2AFTyC<~JI zLG1<~?E#@rBEH0z8u)@PYOBF5YkZduE{Tbu>kRqIHNFCdxC3tlcAKtH6Iaok$(P2= z#Fb3^Y_xMGUGIatZ*Zv;u9Z1jZxwSJh93xwFR_`0OWnrdT?7~1zv>$qJRNSn>z1E0 zkHtMY@$95$w^rdwFZz!wbZ{YctiQ>Io5xGvg%7?5e>(=&F1x%&)NWkKjx56kifyF4 zyjL2W&0~SawM5ZzH-7^HJkmpc#8b`p=C>0}*XtHLs%OQE8;y5_+-STd@K)6az7Z_+ z7(8(=-|+?q5xWXnwUIiAhxNwa_@KAW)lQ?Oe@9vvG3S}Z&})f!%5Aj@eoJ0_6kYVs zIgcCfJ8*NgJ-Rp<_rOONpNljd=ZYygn{O44RcSROh|8Yh@yxWsBumbd_|n{}m-w!s zj&ZK`xLg0maIAivnx5`-U(pcwLhg<4Tij13L-0i0>jW%ce?Q)VJNMOOsUwSt!WkQ~Sex)13J95$6g5NGqNIW@S2T-65Q!iADtsNyOgCq`W4E?DrW1Yc9%3al245|=x+ zM(=_P{Gj6ILOfvLQYbuNfP1N1yDv`%Ql>BRR@}0MP|T>tATm_GCyZPCYG&91vs&nW z@4KS=Ar`oi@^yq$ikn`6r4o;-2-o>Fdfy}kEuQV{8IcP0+*`zh9vJ!+W?6GLNk*u) zdZa^56}gax`lFMV7WmP-N`s0)s?h*4%VJ99EslaqKo&+IhMIy>E9Jp`GTtluy z5f09^;(ovldO@dE23MH63`Ei_qbFooF?ZmqOKC-hYK}0$-%LS;h)WIU*%`+3j4+-P z49^Y~ZCtTt)UFB0rsi7wz#_$!w78A5KNeST6I%=H6)#P+IG5qon3g5WabJ1M)ywcQ zcgw=%mb;&kkk_L;a82LAm*`R+T@!*rNp0y**0`lT3ikz4$g3j4@NlIUo(!oAQ0rKO zBDuIEw7gx53yg+Q&~0_N{4o_p6y^(C36{yC6yg!I3p%45LDX92xbWTm($*<*cCPPM z(Y32v5r^e?1O(NWz@iLoHHFN%u0JRqqZNnb?P7k{l#C~)rs`~~Jx?W*4@FLc2QJN0gCHGW!@dVpt~^oDkW5C>Uy;rvqm(ZB@*MARBDULqs@91fE1U zmlwL2E{LZiP-Jz_#e*mhLp{G5#=skaGbJ)zibr-umwhJTe+|EAu3yooS~EQDK3dj6 zh;m!?tXSI)R8y-ePfUO^^14~dTY7bp8?1V+#fo>riF$r}Wi&DB;*Cn^3EZ$qU85G< zN0025uRs11k~n@-aKqnRKy}V(KvDn2S=t+&AD{v$Q=0$8eDac9qsIo5BeIeppNjSp zBGn#9nHHSKv}x$~ahGQRBI;yWG1csE>{j_mmq1c_{D!+M5gGKr#LGsR2FV5^qqap0 zBK8O(Hjv^JfybLX5B}NC;&bj(SdzI^<0Gj+`-!0h_T7b#8Te6k!mTaY~I(_|!qVW}$ zlpF%qQ&P`&;Qh4@U}IlGfcTFtp6UKdr2k{M&s20b3|&yU>)Gc7J7wQ;ur-liPErTQ ziTYz4r*>+{oQW{9(SQs&ox+2l(GVoq<#Sf;h?8#QMp9A4pcci4LalKgN?ZCVMO+Mp>N8D8B z;1N28`Y7h+TRRmKW#3vUWCkPYVo13LbAh9i zs+v+Ay8Wk4##2OT+)MdE<7Rd03MaD`$#Y)R4mj~0i7z%g8$1BX?|gi3!1o$_m4DNT zzokI$#Fz3z(IZ!?lX`1`o)ZB&{wsRKN_8r0Gtj$1cUkD-3|b;^`|v#-WBG|@dbv2F zM)VGR>8;>=GdV^#Q(W0ij6f$tHG6;g};dzJtBpg#h-C2hokQBI$w zpnrM{`dZM>=!V_g_-}+?#^F=iZwCH8td-3%hYy(Iwi`4$35lgz!*7H*22b>M&?ljK z=t{Q)r0a6fD=hxSaaanQ_TL-@y~a!jOtR;Kc54ru)-}^2_Na96fu4gYj(aWiJDEr$EpHYe+#t~Vf=&ZGMF&W-r-4SNw6NH1&>}8Zan1&PHs;58c~PA(6h{cph8HSh z@x01S+I7>eLH-EnZwmTELG<{WpkAP$^{^Cydrv{MdraWY05pul*ae6dj^nky$OA#W zP(hCZ8o|`Q6qE>?6_V+W4*|_n zP?>_(DCk86(Js-mSu5HlDj+-TP(aBFnyH{%1%=%SC})o$l0WV&+>V^@%OVHu5DB+O zgJ{^Y#r91+Pz0ZT_~zkjV8}LiSTK|yZ{Q09m%EUto|_E;hA-M1xXXem0fu&b89es@ zbF~HYA}~8Fn72s|zD8J|!xfFX*^u)SFzYNBI=hSapiDd`0z);0A;$sCsVI*m2SMUP z?-}2Nn%R&%1(+ra=1O2Lgb5ow1;E^B!K?u07YpVNVCZ35!`EZLcu;x`%qzgqPJhA( zedxm0t5Nz4o{xc{J?91w-KlcW!b9)CcSq4Oe9^h&GcB02fcepap?frDpxg>y=Jf-J zgZ*p)%|VHzKIXLpcn)i0=5+&#Q#d;`uNiRe*baab858nxQ6TsrTOo&PxXzyx$wR&) zZIuX;S^(?kYRN-b0cLf=(7s6Vp>n}Hg9;a$Fa*|EcnI@=1>+98H|Gf}Pg*)HHp!1( z2Iu1+}PxkuHlzpS6PlP1?%b9 z$>JOdq#M_KFDiAH=ZCSvzuEQEjxyD+whA1Eg`r4+$Slt}1uWMRYH;0WFJ9e0Z zKE~?i+$7YOTqruPZnm9_dL7l&hQ6ZIoP&QDjQ!VFH?t8=J9kM%xb*APoMBft7gAGe z`Z#G7G-P!%3AO)f@Qv&*7*p_%_-Lq)X${};Jjp}rhZvOib=fi1LyT(P!`GV`F!%-o zO$1q~ChryTNUlx{nBB%CQg`y+nP`@ccc(*S$FWyD$%ADwXTq_`ryQGn+Of%r$0ncJ ziHylu#41UoTK@{9iI}T^rWHHj8gHZNh}i0iS~&jazPE+*J%z)@>)w=Odf1o%G=+^N znb_*p6gDeCV#aRmN~0DmNx%^1vRKSBn#Eqk{z(wxH(UwZ1O(PI+5@Q_2lFsNBqM4? zA2*z>KN{o(oBxXKmq$Kl*)4JTL0Ksas{4jgk#lroozQZ`0Wc!i|8f})9aP+qyD zccf^}Q@;O6`a&4yGTUTss0l!yH80UwG3DiE_)~dF9m(Ix%VYQ^hpnc*QEZ(v=4 zIF@(GaZqwBFmaG-q!Ot{8wISPf}p0Vt(3E{)EzB`| zk7DR*-|K4MA3Y7>9(Z%lf{s0|4jJ1J?t{nXPL#`qV%k3u5u-8@S4k&}5Uf$G<0_9L zELyvvjU=i_+XMC$vpOo6gk2(nMAlDh@&+jZBLBfyy=sVixt^Y|*I58pYyNgyT-6$u zg zKA4C$3ah0}IK5MOG8z=jjCZ11O1i(nfg0g7mAEyl|ITTJ#NFTkWbxe+CGzSFl~>f* zAxq+3aeDDSCBOe>$}LP=BO9@f)3Mjpu|Ikt_64#`=<#98cr~ojfR% zoIvD6otzv>P9(BJCyxvzJBZv*Cyxmw_akzWP97ghP9pLko$L%H589uwA<9TJSt?|r z(S)ina2gDEN;HwCusx9~Gec!t6D=i_Y)v#Q!dTPPnrQPv$<{=hA4;|++QLw>HPJFd z$<{>64kaVe{N>4dymLdz$^VDAcY(9As`|&zT!692GwP_Is7C??MMOosfH^2fK|u*Y z@j481fyrTJnmNP8KnG_=84uJ{T3S?8RJ?DL{EAn}7i~b2$*{)aUsRNnl5w1=rlR0Y zlmGX-*53Php7We@p#Sf!|M|?Bv!1oqUVH7e*SQAEIF6j7Os zk0Am+qKL)G_&6evKt-U9pMbLEa}(FejJADKbY>;EF;kNGqS2S6Y3WIto}Q#}=}DT9 zo}`KCNkV@jn4~G`Nh*~jWlTZhV(Hf44mz(&$V2^t9EN9enL=_l+FVvHCY1(`y~DKA zR=Ql5TM4e1i_efu;PNeBk%uc#91-H3s7Nt5DA|p8F;1gu>8VJJ7Bie9>6YrHlRY%2 zSqn#afk6FoJ3IxNzJtoff6un1A`~lKq^0Kc7HoT=6tK}mw(J4BX$bk;*(2i6l%XG% z7mSZR@3dyAG|((1JNHRwW>hI4zqWVWjs>byr1w6UI@$FRZ-Y;g{2oS+1{8sPjVL5ihO><#h^LE3U+kY@@~ia%-$gB&49)EXKEc)BFZF_wdn zBZ>vnfI^6EpHrqAP_ncT7nKuWr+!4o%2C5Q5~E5w?ip2#1pz~ovku^=$k)q5q9alm zT6ayk`@S+)xg_q9{KBQAnqSCrSolUU&{Q$YWU^NkB!6yb51|_@j4#^81$#D5RC+8nUl(FAh+h<_1kk4iVgXtw&PH6q{>|; z_3Vd5zx^P2`t{0_>X+<1AWzT@oX~avkD@K|P%(e97|oVs=Rpa9>=fDk@`QZc#wqPU z+WJwEvFTY07ERv6!mK7O6_Yk;Bt@``L<_H@*p{I{*cbEc(enk-ukLZZb3Ebt(~^#S zVJ=Q%zB&{0u#Ws~n8mOvn(l_En7B)F8%>&DH4YqMk({a_pMNzhqywrh)Ulz+SZ;5U zn9vsaW1<&jh^doCu%49cWGban^h-8tO6*c?Dc2v8I4VsXEieXrcb@p}|ECdwbh4ly z-PC%r8A}BE*;h-vXd{`n)?SPi6X#2;GPN)p8LPRA{%?siB&^+vAT;1L8EUuuK<&1! z^Kpa`VcYUEg}y=bD5V}PEnsNxdhjyQ1B+QvTG!anQjQfzHfL!G)Q6jF(;5r#cooD1 ziG=IDrHz9kX-d-TRY}a92b0+E&#q`&CpalB+V+TqQS%i;-U^6E-8XznK{G0R+bQT= zZ$-DxdPnPI_5jv(ZV)`mav$uDF#)>}KCE&>3R=KoZ2={XxX+j!kkf3QkS~z2;TG|T z)c`@0E$`qdl!rsn7{Y0$rzf8Ii_RUE|4z(6vP-7kPY$;h(FEYzdvn!t7ozksL*=c{ zAkT!{ke#$KJBjZ|{OJ;{`N~vcmM0FxJw4paCQ`>&b_k5wfukNna2}5DeUQuO1|n0& zN?st{aM58>)JKj*}YFo@OOLR_XEwIU^ex$xsa=jr#^{9z{OV@u2$CF>9KCAj!YE$H0udZu5#Udtl% zwV*EmJ)8W^pg)l#{2tJ^M1{(~I!p(x95=Ae%QJ@3>=1TN;)2YMZs=sy$mXbyTU z=x2d`u0Oo5Kd~0{4}d<`PxrNVn?e6Xj_`Xx|8@>~Kj?cw|9e3G-(3Ct(@dOzsfa?ppOF8&4R znc9m#6rC6UpnHOru3N#sR93j~^sn&nPFgCjK#x(KCBahE%2g@aZ*XbHSh`RM-& zeceGXJ1FI#BIKj;@w_O7Zg9|-9JIqhy$<3^dJVyK+6rCcpnDwj5eI$7K`)>!(GX{$ zR#s>XpmMRnk5McZ3eEpSkagEly*%R#*k;&hCW=b%ytEpSkagEly*%R#*k ziWE3`4k~rf0tdA?XoG{g9MtO|4qc3X4k~rf0tdA?XoG{g9MtO|E>t!098~I{1rBO) z&;|$fIB38@#V7$Pk0%c*G}}Q94(fE!76Xuv_mC?7_igJwIZ!9kr4+Tx%d2Msu= z7$wEXbI@!DH8`l#L0cTu^I!n;0x%qjc%ite{qF{YAAEib%vC5!9uHTw-yOgVhc2rE7*1?{ z!C+JlZxsA~fTt0dKL;=$2j)zaGB2+G1ZGA6^CB?3S=Hm=iMLOqEP0sU0rSHE=I_9; z59#p~L9Gi=Vm!=gz?8w~J_o9#L>9Z7=;Q>q%n5zSrr-1or0P_uCo(^ETfawWfeh$pb=+Am_{RNo50Omya z`%v@=J)R4JxhQ~{4$Lh9Of@hK0Zbb(p9o;S49wO5rVE&#I!t)a3fG07C-sT__pjTt zve-ru_&M4%Q?gCg=Q<+%o1yZD$qLv*6 zWaS}yl~oOXMmeysEU}`&oG?c=oP&@3DQQUTb*pNuEw89b!}FL#9M#ElK+`D8%NlUn zU~N-b1BCguyfBItIcV8K2?d9UHsF5qvc_^8zUQSlOhY={VTX)!d0BmRHFth2si|nJ zuk)F3MOKOnqe^+vxgd_vU`}0ZXjtO0DOD^`Q&-{3pn!3Lq=0Qal5UUTb5)a`?-)vl z)7EkY4d8UnOil~!B_b`HM`)OSXH!{aLyd>wCjUC*xrcElf_kWhH{UqTd#ac|XIAjZ zJGPYBMmjO+*(vz6EM7Eq*3@)9;yn30LD74vx&Hdu-c!@;nRC6TD!ldyKH(*hD@u!J z+~(u;&g`Vd^*7w$Ge8608+qaQ7Aajr;?g+$;bCNt3KiqtQ`2=bd|Jrq<4(iGj9EU; z#GG4h^TL@!cyX30AfI%eON!Hld5AC0O~gU2KAN1Jth=_{dBu`Hz6wA$hv9Hgd(tf# zB%st!IOBG?PYE8ztW{KyppjIR!_zYn%-*PgEF7XteSMV}Fe)clx0zFkgL2C&=K3-K zr>&xVVUwOO@x(RMmap)maMru>;Rx(Nc#n`)E7y6H^s3oMvgOdTl#gi3Vn!lP21Uj} z*BsQ!Ds$E+v&JX5vZkp4=Xm3=(~N-^;=tX?0I|BJvB??$$NVm?sif%aOi@{zwTXUAM0SynV>ie55x%rNZo7~MzUSaP9X}W}M97CdZdf9@ zy8j-eQ&vx44Peo_C$@5@$&1@w0awS*I)2@;<1b&~29t^4!msEBKD%O#AU6`VOEByv z`3^cu-V@_ny^ArpHHX|>#lQny3Vr?HI7+b8o7 z*0%%$V@Vy3ip1hloB(%9M&mGiQ82yj5Mv|f5|alZg)5jSWjW5g!$Q^JgdY@%d}-n{ zH}!nzLLP!zvT`|A%HTXEF8CeBXylMf&6#t-W^MXG5yq2Jkse`m`uGk6Dj|`lJG~lx zdKQ2~I5ZP7ZK8M%60MWIL(H5!W=?-HC&3jOg>T{ZA#+HWB!=@ezQjP7X9({MDQ={r z+0A)Y2ZyAKnVwTj;xd;$@zQSDZ6rsP=?*tp!V`zHvpwJk8Rl|GiU`#=s_Y zXI3GcdvotUXFOW)NMY-s{E8Q+zBG0BRKDyXAG3KGzNPp&Uf;XG#Xvuc?<_w(e};Qk zv<7(A-`Du*z7vNw0Y4S=Qa{}%zZ>|~pugy+=YQA9KM4FZ82^R<{W?eIa@xm0zcE0+ z-qE>+>eU?Kr-ObvYR+2&;cs@~7lU36`ni6(?_J#*&>sc;Vn6+U2`>4t3G`<`&-AWy zD#9=iO5}~mSpxm1!~F#i-$0c_Zi5U=M&PZ|eSppp9OoYux5eRxAe}LxP5`8mIWMSu zs{mltaLveb zP_2X3I%ub^vn=p1>eHFath|@#Qu$FVq9T ztO{V(0aFS~dOS}7^GE>m4PaggU|s;`6hz{MVyRdd!2AN3)&S-$V7}!r;aQ?rKx1#p z`~2%>iEj5I@j=`J!cVSQBA#f&kIoXY7xg|xnEyPZgeTeS$L1H;u6r1aE2M_?Foe!c zWH7B z!vWKDlnJw&_-j|cSEn-C59LVQBsb?nZLp0u92?Z_I@3?J(A;jq)YL=0D5V&iw> ztkxs>iE+@9+g5yuK;}pKE)L>&%cY!^%2bYI%DKwe)3(zl6j*E)m~B#$ZLt^$1$ia9Tpy?q{6>+kJzS%XOJq*Tz!RJ6uC4V6PlB@E8}WGZZD9z&*E zaRPh6G8|ocsP!Q3Ul`iDGe+TIM(Mxbq*k~6SK9QRAj(VJlp#x*kGorFO#IpIFa}&j zvfTkVthsOhqYBWJwjLR>49nTYQ|`oztJGgnV-e(%R_QUpNSuot(Dkr2{Crc5P=DkC&K@UGP~ z)eNk}TUi}#-)Cj91hyV2a9Q@rdIi7>xdF^jU-F|J?Z zB`YNbmF+fI6C7vsBF82|S7mMOF0|Y) zF_>uujbrrDqyISSi^Vxa+9UuXFG5`bcSHe;6u9t-^m z+Sh;Oh3e+d*U!C2)!NC zPyM<`Y&-3i_>AUS7i|`)=ThqP2;mqrO9feN#(qMuEvvzRFI6KV(vL^N8e9%<4Zx2jlY?Cb<4^;6`XScA>cHF&YL=-AfDL!P8QX9F^6 znR6ty*z$<*xihY7I<|1$m6|HG0doj{ujLWpv*t{%IJWQ`Df|r#*(Aw1gntt}@RsXt zoO2v1{|TC;)*Xk``Ibjio_+oGHOE%@aSESc1LjcqZ8V!u8AaeYRQ>>^{sJM6Wr(k+ z)Z1>ElQ_1n2cc%F?Kq^~s#2%jc=N(zOZ^0;jz12myylx0xNXMbV@sVvsrwM(SQhxQ zN^QDxdc(1$z6mu`+%9!2sk4mK8*ZpSw$x5a9d{g352M+J1!hjY{y22yS=XtbBE+$D z{i2h49G-OmYNlF_L+Z^cH9l*`ad_58DfNQmkos5DMzBC)e*8G3UP-BYwQkMT&q{s4 zN}c<_v2*KnsF`~3IHb;SQjen^SWBs6jzj8SP_5Gk=2ny+Th~dH`eV~H4Bt@*UW?p~$0D|ca_zaWkxJrHv$itpvuz*rpX79Yqn!?8mM z#sRqw`S>KMpfnH7C!#ym0|#Wx-62nW;ig-|CEO8kQrSnWvP9q}9HVT%QI=S_jReZ> zr*K@}G1ng9;!_r6Rj@x@K}xs~gJjj4Pokg*i}xD^`6R~0;W#+J0@9cgbd?wSQUmNh zU~!SpOvfU(yB%T{3W~|Lwk0oA$IW{2f#@?ZW&fIDxtb3)ZAHwOUcl{djlYo?tl?Uy zpeU7W8IZ`LkDQF(Fw-E;9~|z%h*kRIvz5u$_fK{Pg<>r~c;tK>lah{jZ!&%Wu570d zm=0qoYA;D5fN{a-WV|jB zV`PYV2Rb@w83}zvluIn&Lnj{uD|tJsDESnlP6Fs)EO|e-p3^bZzPClFppn!|3~smN zhRxhgk;V?MIyVLibUA)ncTK!oUPOw5cw@=hLSVeHv}&1{CGr;wbf1+t;9W*T|?*obEqWS?iXf61${n?SP#Y z+6RlKcv%3wzbi}Fw1PsJfqFc}`v)W@QAUPZZ7nvHYLI3ejg*#tV;LRnn=%m4`~Si| zovC)?W1)eaor+70VVdDEw7nQ+klC1X9{BSfrE{L7<@vT01k@#YOoS zLa6G_Ctpf!J9x;Vso8NgkIsr{4DNLjIpJyhHqYbEy1wh^BgkMz>i3a=|1&tJGKy45 znf%?|(!yZ)c)c7Pi=!`7q@=!A9n>$?99NPLo#ezIGijW_d4-5!xfjFo)F|WLTu{=6 zSjd5uJ#rjW>igCloKk==&L{obCM;+%DCf5rN(FBbjJ8o9KzY%&$BfQ_R6$M8ZcLFm zItWfwgd|^eC)Z!bYN!PR$)!JxgA`7X|Ab;S1}uo@C4R^qPS5BZ;`6fV;N3Jt9%T1v|o z!y|6)6_}*foq1?_F7VrQ9T48I$6veB+?5&8 zX42;;kTO#uiMDaJLsc>-DPO1vu!y%0;u}0%zPVC$BMv5)?x5IeM;>e>6R*51l1cJj zS{NDNZ#{zR%~zmCOBS~CKBS|)<_6O~oc(5U4D*pbJJ;zPE2Zr~ICC5KkcWIF5&6s7 z*=m~Ke61BalD2{C+TwApCoJI!EAR`OlAn0lC#=wnkPDIC)+2?>vWk8Q^JNG}J%@Xu z^8%s^1EL2vV=W`nY(>96P1%GeaW_nrdXoP>iGRD}158s^lTG#leiZDyCR;AS_L*!- zUf5(RG~Hx>P&Z(@rh39cCQETwedRiWvMar3JY z)$+52lpF%aC5pBf76qZ z2N^PzlzIhP?~eE8)V2nOU%K3%BbSX~#!>DVUa*}}?$aJ8AnlCt%wP_H^wql^Rt%+>tTaGA%TnX7y46KSvwn&qMR?Au>TpcUtnod^bh}fn#&%EuA0F4@N zDF@G%RuG`&FCF2d4Qd`m^;O&?5|S*M`W;XUMH-lNRY@?&ucCBuxL(8m8|=_t`{c^Wi(NLfV5{3;3&=Pc!F zZYBpQ^}p6+E?7McKknDjF@+?FFcztc5`>3!bTTP$@1jM;S*3{x3{h&e1j!J^bimEw zjP?a^Cy#0jEq}*263(zd*1mI{V}o9zRaRM^C@*WezosEp(-f<#PsDJ|R&CXiDr{J- zjMdb|%Ij9dDw-P`fru@wYUEB;u720shaqog2hdR|2!71{-5>TXJL7hns5}A&5K0a1%0i z-QlDRsN4YD7+m*O58_zpA*9&Cs>HIYs=C-zsv@YS$Sfm@TMfa0+t^I3mcX5X0m9t+ z`q&aCp2{`Fs_Sv{a%4uGY%h+980_g>Ys6#sHTuglFTvx%%sgZlSSJ?!mb4bP^Z7|W*v8mH$ z#^+piDNK$HXid#aV#vQG5&lxn%>7|B7=q~a5Bcf&dT=Deug6zzvPL!K!sox^_Eu~s9hJ^_ zEUk3(f(uS01HZLO?U-?%-k0q3Yw*H%g1!p$VSf4M zM(ghYcP_qzBfIebe0)nH-$Qz6qmsxU9Q1cU$~OqoSe=wa-Umo=!yN8OKoL}_-0grgY&jqe%QHa~_c4d#c~**h8_?wv_6+!! z;zk3~usk(xl2Bg+bcI0w1L#VDK3IfFJAu9j=xTvdfF=v{#tE3j6Q~r+*{%_YYZiH~ zWJ%;NfUXs2Hr6PX3iMS#Qw4el&~*aM8LFonmqa!JnkKk+0mTKH`#vpqC6WIGbfe&S zaN=}?l*%_5kn+uQxCIWk8_?|%;((*x{{BdWv$rLY z3r1Nf*E^`(L0@xFmxF%opg)a{MCOZ>i_X*CdV?d^0=iT6Lv4ZNp%`ma_SQ7I*; zCl%u9VhYW5P{KivJ1FB0JhR6KYPt`cPCj`N?4Uw?nLaEbEJMO04AEFRm|BP5{Fb(N_jA zeCxD3fO!*`!vRbItQCh}dy>xuW`)D}_gNt@PHy@*Xe%Tw_TRs5A7Le|FxW=pey@gx z{0zc3+YRY)!^6-8dF&4$JJUY58lFgmd;9oV5W*}8VU~w59U%;RBKonCzZ$}D-${^X zZwNCG!WcI~Kr8tq*eEDxWC-(t5a#9(h8`D`Qy0QK6vBKqgn2rI=?Yw9{W7B?02%~Q|$Ygmg5Aoa(!rT$UEDmA#l14vP@?#;)XG56HAtQnQ)BQ|zGWzfw{i_5q<6=x|qOcjk48V-PHX`bYKB=L^2I-FA##+r#e$%ZOS+rbf< zFa=pvhvWNjJk&zW=LtW)R*Pbe6*%6K4?K zNpY6L9TsO0-U(|4;T>~l5Z;+_2Ep_50x9uMjh|f29We^X{ zO+(bABfRs^%*KD_q$wQkXHmt}qX{G~V$PFvg|o6= ziyWp+>zXiwj44*kR2oZIqRen|Zr#M5sSvC5x(I3;f_8&{%KdKTvVst_K6WYpr3UKV-u)}{E<~_z#VP>&S za+bn0YGiNebQgyOFJ2CHrlxL;QMB~@|=$!^2rW=E`gM(GW<%16~7q0 z@O4fJ)_`DzeTKuW*hw_6ituhS20pyZ8iAh@J){b+R4=F0U#9@z$UAQbFhs78&>^8NML1s zydR54B8mIB)Kh#VOEidq+diB5vRT$idRsnsqSNh+{9kwg%WheKO5>(BDOp12&~K$D zh3h8MlgVhY&{lSdr{*cI>}$&*a;&n+p2Zw&`N~#3V}4b04z^#yv5`#KyP1P+tFp=N zxEyTjl&y&y({iv?E1T>z%fZIC7tjrCO}V6T+8b=L$1aDoKcV0-L%ESO2iwcaCYv{N zuyNJ_(qtQE4z`shQtqqF!N!9#AWb%&<59H0R*C2|V1okc;O$)UlXK*Sa-x74qG`V*|l+_-9&# zFbrpuvKyp*wcyf) zi&mpu@_Cd8cT?e1mb9w1PtG0Sh8av0X>E_AVS*bHxZvEKb)oCjHwROP%q!d%M1^bd z)VHyuCG}1G^RNC$Tq|ZrK9nL8&k5vDdiAP{aEpT37!Y=mUzlB955*!HbXvxs6A%cO z1>@Ug7Q}8t!tVGxsFWjpxa(fRPZ=yYG+{UuG}QnZ zW^pPTiujSfDarT|+0S+a3(~L{nG2bY@V-?%=O^bKY2BG0edav^fP8Y^%ew6iHwx#) zkDv&0)7$oxSv)2>6-V1SS!?50oj5U=t`oa2&}lz@%qmIIX&}WD*^pJbG?;^h z^%{l% zIH-}+AaFq}tKPRJUqEyP_JV4j2H|NgZiKb=4nd*C zmD<7OR>f(h9Q?LQOnnjlnd(xnQH?}MV7Xu6vVThCEfl#VO(Yf+CQ3yyUGL4bxAw9} zc?SE_ctWysDS8BjD|LEMY60p9u5C`Xpwh>h#r%Ix(XUYCE}Q$RQ2|fo3M-18F~_SY z-+J_Y*q0|fg~qRC-an`1QRH#oxoPrHD!e@W6*xM{z)=EBs*PWZ+REm%2p9$2OA)Mz z)FK7L5tD5z7-=ZA|7*J_*jx8^=sZ;&ZXvP| zCbYXNu9cp{L7Ti$uxV1(=0eMeue>*6QzLdXcnLeuxK~?kwATYGzhe?P#$@qPv?0`x zy=tF^sN2$7Z6wdkd`M@nbDEYlTmfGSDEe&IRXg>pbH4KQN%Dc2=U&W~Hyo|!jupee zm|47yeo?rJFC(`|#rD{gG(fY8Y0AP#AAq&fSd(_H4x+ zusJUgl?Qt$nI0X+7q`9yALqPDw0$v}G8N}PE^7|3Rso!;c{~byAzgt`qInK8gdS_g zg=f-$?O3xY+Dx}J978ACZn+@~npv1U>F;l7Y|tXUMU zBUHAWQxKn5wqwnrEK{~)&7!b7j7X0)i!xT(jx~$I#WJ+pF=kPIseXT~S(L5HcC1;H zb;>5QC^;r8YM@wRKBiD|@Whp;CKu1SsLXOtXqa-=TilNA9{1sN1Ur%q6kN2SblS8k z11!4*k3>m5DY(!_vXJUs9y zU(W>M27dO(Wa|qyrj3%Q^_+k~DW)OV-y8iq=>aB73$Hq9F_^?VDV_A zfKHkg-RKCcl?e?SWJ05j&xDR;Mwezl`|RrPdB4(s^r)>*@LPnSX?X<%F>XUy`+pil zY2l9E{InFaEWj5^kUHCqLv3dQ;|0c!*Yopw)U~u{3nLcdbdhDh5UxWI-P&Dhr0~f~ zL60mTW!(r2TM^iw7O+P;3W9RGT{xenM-CbHD{9%(qLIx;Iq}PS?yuY=H%gBXYUNcx zC`G7F+fQQBOa)AXF;WmI9rwVbkbeiO-{5sJ1Eekh6~D+nbK(UdTq)>-dh8ZLlmaUBeN9*$%H<=K|$P_Y_FGV?qH2w{(5N^vtW?Cbi)VtPb4 zk(uw7kOxk3j-uJGu|Q_3Ga{ zx_2Bohg&{vT5v==EoCHLiAZGxgYg?{R#=!&X(6U`X&th%TkP`Mj0^>H;p=q0e!C5I zpo5NwM}~r&j@fu!EsQT4i08(gs;hPf2x#*k$6buB0|NAh{*#z3;P zq_ta4?}i}cGG+^9L<5t$`&X^oCpk<(FX(};s4e{DlZzGz#QWQfry+Wvp= zNUii#KF07LB4ntI!8DeMxhB@X!|kCp6QNoo)sjRQ5Jl?cd@WMh5>e@EIs4{(5wS;( z_P}vWdVKW~Nqv`7qs?i_ig_vSO(SJW@n;~2+LkV`X;}^>=&S=W!SNw+7R-8x@0McX zi%J%JjWQVMgm& zzPO-SZsjVCb;OHl>1MVH^vQZ82w+ku$Zk$zFT=lwP=DklF72DcY6Ng$;;OzI$T)oz z%P}g`qP!j++hQFXwNpoYDBn#DjXv9k*rmcEYOF5+9#QFN_K9`2Ls2WD6Jb5`a7GX= z>2Iblg0f;LF5Ll**T%6?pn#Kv#&!@_#+7vJ+=drKI9H1o$PGYK_J~L1H=oB!%qTAw z-*K>5&euFNDAIzP%MYS(9O}CUQg$4S`qIH*ude>h(T8Au^lRRVVoSRu@tGe-pMG`6 zTSN1D@MZ}$tmdPn0zKntl2+4vl%gxk7HNrXo=Kksfy8H zEbQnre7A=mP2+dG=po4XObZ0CWs5%j;*Ntu^SW&=IGw`+H7#TD4$%m-h@1jlD#HRb z^*(_XkyGF>B%hg^T91Folfvd}Y})9rE&+USk@Er9Acl?DcPB*THQ(klHV&*R_PH=c zqB!`=CMtnp0Ypa85S$-vAAqhD9&LLC`a*O~5BIb|WKGv&cVq1YTxVEK*9T4j2qjV6 zkl% ze|w>Irp)$=;e^BlDkbUsva)&CSJ_Cn0+kwSngpzh4yhTer`1}$mc~K1tNoB4sQvcS zPonK>X?)gN=%wtl?7U_G)%Q^J*@H;5Ptmrw5gx#@6WNhy%Y%T_RAwgHtMl1j4N6_g z$5l8F*9-#&ZDZS^%WH|W97aD` zJa-sNPG%Ak&KpcKg(}8SDb67qk~Ylec>7xiWIbUoh9V`Pi9W-i4^}fE$sVpmaQks? zub;CR*uFc-JK*E>r{@Am54sFlmF`2ozC<O_eW4aRxtX_5CO(yCy zh$Soq6sD+{>Bg^gJ@8w^XZ8||pkfHxjkC6Z?JL_I=i;D9-%RAs{R6o4cK`kRz3zrtaAExBu15V+~XaZ=#%^m-bJ>?_u~|={ezZ%)12p3xb(A-(YkAjy}OzA znqW@2gLAT>X|Qh@@3m*9-Gsr8XwrW_H5s^{njBi!kk`?CDBW^dv>7AX$k}RxmToae z(G6PqIdfXxprwyNV(YF6=By>T#d;{LLNm25XGdHAM>^UQ@+AK`tI*!yJ!5>&-c73~MUXcSpo=)YCEk1*ELO;kaw^$&;2jGVm0{%>I>S9lNsG>9obRKv z&&G2-)gqOlm%09z_W)svIV3t1MIZg78YpI3HNVj>-t= zIcDVH!yWCF;xoN`bcwLjZC5(XcIwTM+;*FBT!S>s=D?6`v_FO}QUk=d?T&Yez&Jwe zO0A{r_^!$E?TINYQo)M03*{OWEq_qa@&^^|E-CEd1azX8{*1K;lau1$prF~^h95Ms zd+>w6J@`T3z4!?S?m*zy_^!O9q%|+zCAu7lK5U8$)d|>k%8+HJD8f2$>U0c9QYYgd ziWf`)ekr4+!>(b9mx;Yw!uECv_$^jpa6F~C>??3`47Mo?oVOghJH8bXBdHq@4N^2Y z-V<#fDR9r^_?~F{X$p75w;1C`+mlpi-WK#pdW*sxN{e?LN{h(ZL*2rR;wTKiCAM(+ zZB3KI)?4sXsHK(0I_pnIkG|A?DSQgbZ>jERzY<{dS^2>e*HGe#KX{s`PyE5t)%ZbV zvS$as@@^BqvXF0`h}5W9CE9#J>jD)covE6Wy=p4W8MmSiWR`(f(i7kJE}s0pv=xFg z`x4?WRBl$&jCINYJQ11H3mK8rpK%&O>i78P+`?6ziJLO{$i^H#GW>}62x{)%LAGf) zWjUoSb9}c2-&d!Y?{f++{gR4qbEZi5H zGfP4udU>t}eokxP=d{h+gcXk+vo2+UJLmJss_H zL&!ZH?X!X09p3<{k<^Do>;{PSMH_uuh47UboHAm+K){W{ZmhLcT((;O*Czl{4de^&mBKo z{W}%y$EJz?nI{@qv`IR%A;$}KW}TbO?_-0x0ln)DgQAbDX}OFFbwB|?YGxJZAE7Q^<7#edl@F~GfA3~LDI3*yi}t$)AwjHK7tp) z(D)2biHFciiW2+T_vkyxqdcz^(@!uf5eMVegiy!fD^e8DAzqI`5aw;!39uy>Zvof) z3J7=tI>`uay|sVz*&b8ddlO^emx=>*6*AFG2(ZQX`dX&_UmvWq&q`qnj&IChJ16V2 zG$(NY%qQ^ZeKX@9cPyE4COrQ9J zr}OY*`w>~&6-v(DuKWn?hwCN;ohU>0-Y2b1EhNeyCE9ig^V{`0|AItoud_0Pi!P@k z@Vp}f>Sw+tht`7iG7jA_dJg91t+GJJOaP#<*&S!rMpEq*5`Ua<-{RfzP62MtI91RB zT5?{ewmXk&yYpnY-TCdCtX4Ynx>~y*>WJelb0^!erJIxS#|`fB)vF#C+{cpfCk^h& z)vKN)F8WBFFMr~_n2U_0&cJ_LV-#@S$n>%ccO1-@3B;Wp?b8t~lTp{^FzT28C`Qdx zLNbm<(ro(nZ*2>U>CL~2b@pZ{92V~ihehNp9BY&FY=I6me|TkL@lK#c9Veo|7}_aCZ}UUYAs{Knv6jY!#sQ^fJGQwpOM$a*F0;| zsCoN>^tKQk18(#YnAdqbOf-0JEC_T)4q)0*VEBHKytypV6xJOfudUENAC(snARQa8lQX!>tL1OJNxaOk(S5 z#K#eEaX8%CV7ULoaF|#P`3AYEnpGvtj{rdxBA`>&%{B#pL6NF9b8 zU0CmLnq`iprFB(HBypl`bGN`hFg1cmFrhb%>Pv`Z3m2t!w3hSZ*t zt3s7mEcd9%g-}p$0R6}`l`4bb%H-Mp$`*MucvR2jz`ytmAg@iqXHHycdL~L zl9@>`(7wzhrVUn-Nkk;8#8p+u8C4;eH%TO}Ra8R{K$XSR-}zklpas_~B^-jA8wFvj zioRieGOc$wR6tr+bw?6cxY9Nq{?5gTqn$uI%PX_TrXH|j`F0Dh#AF#>tZynae8JrX zY#Z2XF=f~>2UILtnnlH8Od$uAH|2gAB2OTLlBM3X@Wc?a;o$;9EXwFDTy{I&(Vzt$ z)J;}w2VT8OUMAqh-JHH^JaB#r4{^S2+{c<^GLW1nYreGa29J4k-&J_nr_96p#xafe zgkmSQErjJeI~|bD9wTdAR`22~6Z>ihZ*~%VeG=b;DG07;>rUd2uT0{*FujXmB&WpS zD##aEvGm@)lku_-xJVz~`X54kX3PG5MveJqbeDkx*ex%cy97W4c&)c5Svsa8zD)qU zuiYxZ2+Y8mcT1^{u&e1}oq|OJ1&9f2?D8HwV;iHoFh20=5#J)q)`NLy5lBhmj^CfO zzJZ&<26#uMhpysJ@a|59_iR2Tw}X+c_;Q_V`-5m#HW;;MZm!5_&nZ)>J%a}hwp_d z`467TC=Mcu=P-Ka>e0VEF`Y$$J@%=I(w_i^Y=!kC$VK%N_wehzQvlJbxO*LJ=185hi z?CqO@`Hn&fA#Q@$_{|cO>U+N~7j=4|*K|%?mB0dmj%bI4J2snc5tE z_%0OO)O*rYT@(MZU(Yr1FSV@tQiSWm_PrE&x9{|pRbPIW+YI*Ma3Z8o{JrfR;Neh-Co!b6<#h+rM@BuvA)Rqu307<)ad=-_;8!F1 z@B>WXSXHI9%N+QC$%@sh*1t%zH~+g;l!0yQs`b|{Q+w{~TZXrYKZh==Nn6(nY&Y$} zl1bw=tvpl&Yt0?ba3G-}4udlsut|smI4SFDEI7KCXVHiEp~KvXqLattFnTA)yP^-j z@D7?btYSnt#O8_U+7(z5Ds^S+u7q9UFkfoP0|>~vkwN*3^0uG9C}#U*$@*Ti5&}8J zn(+Pq4-3};)O)B`@ZMFBFav@d(m@8a6XYi`@2s3y*%5v8m$X%3dkh7Zr%2#}#nRzZ z3h0mmq8A7!Cpc_M5h|?jf<5&$hB2&#&Di2$=_3&bcBjEXu3;0|j8S7RTC!`{qeb9{ z5sp_-Y9#s17kDAhNehWBtP+xK5q2xx+&9Sv8+<&$4r#EGPPSESJA4+A#ADI_fBoe0co8O?@*~^$D)k);KYtRX|qfK)c&)FF(k(3vqy02YxDh3P3t+&>Qe1_ zk8JG_q+6EvbACaV%@5p2#d>W^CN1HC-KA#st~*U8s?k0;2l5y#Syvwx<5N>vb_yJt zxr2S9yqfo*FZBONmSgSJ!PX^m>t3Y!r>#p4VS@NjWW_ddK)cSh^55A;BOTkM)y8Tw zz9}0b4If%0xC*@Wh9tKohZV` zpO&#k$E#y^paeH+&WPwyI0hUts%?D7w2Kwes0Zaz7 z<$w>g9w|zon^zodI|p6w)F7#nH;CV@p{-b_wV5U@)h8WIrS>D?Mgexy*^;2z^1A7V zvUbxCnQl6k9_Q$$uVptK@@zL9^1|J8_KdkAObb5NH)rXlA2i+cpi-EF(!gG^2ScWA zKGx74l5RTIR%hv^_x7EM$s-sX1@55!^fDvZjxZir4ePq1?UR8_jmAGgp$0(lZbPBo z&mQ|47V5o8_#M`80&MYWhkZUD+Od@d1m$9H>iZG}`lzLOYuX<|>1cVL|55h8VksQF zv8W3Hvr263*?_ur>L~IO6iq7lPzuAP{h22y^*fx)8vAO;%hLFQGyS#jKUMmrhqjm9 z*?swFK9L%!09v9CUx>J1H!1!5C&xRZ5B~_IJhj+btyq)$AlRU~{FuaGGLthCDS5|3 zo5R2u*ai)ZHXjD=hJj^V?Ae%8Xy}efF}e5K#>U;Lm&9OuG}2`d-|{^F!^WSo6t(d# zB^*tlzr8DHUj`8S0xv2?pLv3~phDAd?Fr}|r{0yeUdp~sy3)EMI(F`O>zuqElp2|C z^;KHYCou5s>W~?AovuXbw2S1rU^g=X$*EdayQu17sOm7i+QnjHs~jF!8mwvF3-Z6e zrul{V-mz*Lyd0^7$uZaARXE8f1ZB2_qF+TJ$EelD^6G>cdpreUPQ3Qy?KwpZ)#?|qSvJxY{ zF}NvUBNx$clyt?rjE->djaZ(qv)2(W;_9-i^f%@0G?K{>-;AQXO;p6B!(>TW^x@ki zeOvR`b=o3T%dgYC{iEnW=nm}8V2dlgiq*T=m(Y&I>i$hMIVaDMt=rhI*vej*OrAkL zA@(a^s;zKvvj>OGyD1#;O{OPp)>5061Dbig3jy2)S22n zzg2vS9rgG5f?`j0e53XsV8woV1F|&pG7>Ms)~W;lkZ{lvizTSIS-Xn~ntifl7t;2@ zif|LQNity4EOJ`6uG$nyyx&ESkg_m^xoKL+UXgU7_pAbuAWj3k7kHHW2$cD*?4!K{ z>C$B&Oaj9)W;U&;u-C=cSaTsP9K!d=V?JfZtgi%%J8+9K9x2&GEGA@1M~cb;^I@dz zC8+Aa+rrC&+jfT31!~)9+kaD0o_US6j3PVrH^IOJ#Xb?KUSR1Z>;@!Oyd=$*L1=qh zjrLv{*wUc#1ma3nfoh0$jEULjaHV4Q@DwV$9_3!ePn-)YDo&tt=5-qd69Ldd5z#~#6TY61)lb#H%Ym6 zl8n$5FQSa$w7O<^3gW_CjpLB{+|52y{%#ZBx$dE1SleN02Dzh!5yvR7we^s6FU&_k z@Wm9|jP1iFQRjd)uWvYMs@UFi#lXn&K$)c~bC{mgum^S97K}`^e3On%#}E#!5r(!S zE~ZQvzT`(RrogUMhQVWmql$6zxO{XAoz}Y2z$PH*~Oh`_`pzv->&f6suI50{b((JQ3 z^klhb(rtm4ksN}omkAs$WtaNs@ms0kR*&mR2zC=Vy3)!Mg8qf{qs0K2G&*LSkBgd* z2jl$loU}MQ{c)Nhpi>-6bU0}QgJFQRmXk)b4(5*phf)7_|D@4&U$S?>_t0|Z#kaRE z!S=9KT{3ATduGxnjppi!0HdT2h3#f~BEYHk5nV2v+@t58vj4^HW^R%PeL`$SFTy;; z(T8-4Lv#OCJED*7l*$jniqN6xN6BbiRf5gO7>;279pM#l@RGy(xJL+B^uG^L5lAEH{^ooGWK zQF@hn=`hCnD%_@Z)iA`m8xXrS#n)z_}FX4|1a+!kCZ18RZAKY zu|$20mqh6mE{(XwsBAH=a2Yc;wh;HK*VV^(Cru1@IyT|9apW8CcnLFK9Sh&Wew@5= zKRbB;xm(zMdNeoS8gIRs>S8J)b>U2NH6+-cw3M6%0GF%?V`nZv|1 zl-E|lKX5mCW!3Un)$)p}s!Fos&MMroCbY=-jQ84)&y0p{a_M|c6CAESwzy`|V(~n^ z^(?lmCb8Jl1xk$>8@Xisr16(sA^s-HNtQZC(|hktUIyq5<+xxg)=)1-g$E~Mx6GS4 z(%;X+;4qan^;aXUxb3|LcfdC;YF?twPV1=btYIqZ8yl-C60zC0+*mea z*3=v0Ww*!Y+&1IZTOy4MbHs_On5r^Hc^qMKM9I8cShb?Qt}=#O*<$t8a>YGvsn?{b z(PH%19PubuChfA@!wZvLJG`-~t6JUwYrze11zNqh)EMXdaz)wLNJV{Zed9$-${URL znVJQ6R4uBCuyAD$y0Er+gQHh?kn%rz*OOC@z(09Wr#Gc(Y#*zVSaQO-=>CRQ|5 zK{h>t^=_=bfwz~%LjD9E;|y>q~xIcZe!gZs->5Xi(S`TQ;RxsMQm10-Hmr#bjPHLbg&PhmL40MIR47PQU!WyZE^_`U-5UWg0#DZyfy| z&_`g?uiVq?(to0pzY_HExNz`y_;uk6-f;S@2maLIk%$yJ8$Q3%$=?q8D$w!gg`cPC z9|hEY&_4y@k1;HD@~5>H6nsDb#i`1sc?|mE5qjIY<14t_>A_L%7tg|R)&6+$S2;bV zfj;tV^e+SSTO7R-^aSW5ppPein3LZIdgnQ)D+A#lbKy6Fes(Mp`E!8&2S?updhxlD z$mRfjlcOI1eLLto0`%t{y%6s@SB;EBP@Q`E<=^D!qd@-w==TTciyVC#=#$Www=x>3}w_Ps%`8$Qqd};%I3xG94e01j1Lqh`j#G@9k92beq56GG8;@JawXBIlp zk$%t*0^ln=r^gMC7CcheI;db&-iuRTn!4Ni1@+?jh{G}X{ z8u+$=ZyFuZ`soZKcjEAn+ywX!p-nvBU+$RRvj+vzyB>UJqVTUm{yDh?EAkodD4=-$ z-jkS*lKanXyp(f!fs;eN1K|59obyi91y0V5;G0$C_~8DLq0r}I%ny7Xb&}&N_{?A% zAMetBr5x`l{Q5AyIbL~MhM=sEN+MjxHASGou=h0rodoCu0$m4)_3z*aFF3kZa19Rk z5r^w^IG!|DDtt!)O%>=oXmXuE*8sX+Aimd|CeTZO;sU)12%QyZH5@(w(*r66G+m%Y zfMy8vQ9w5d#M>cn7Kqz6W(rgQJF+e=iCh4PrKKeDK|sg?K+6Hm7U&CrJ}A&jfLJS( zM1BwGHi1fD#km4a1~gBgg@A4sr~}X)0&M|APcMo54A7kdy$$FtfzCl5A*(>W4$w4# z?gykcT?*(P!F>|Yy#l=iNNxXD#}`3~Q@)b{-6wpdfHaPJKxKk^(ouf`NaOf5APxJb z!~F@+0trz7UsHM9w_7eau3lLv(5-+}%3Xje1lQvD9&^+u9QEU9r&P*J%nWGQ2LV+| z*bYEd0=?>R`yKB5p_cDbK+5-k!?inHkHh`a;bQNzVJ`%vVP`pLF(B2Y36NUji-4*{ zm%%4uOeIh;Amuv~kn&v*Xt7YA1XLr?D~@lUR0;!T_?Ds zfV6~;IK}w^pzDR&1W2Vk2uP)T9*}zRAxAyxs3)PDrrvZVptwjW19YQ6j{ur3&^G{S zN!|-cOY+-*ZWiiD9Og4qpc#N>3Df}S7J)tu=vIMV0Hh`Pw}3tV)rBK=lG89Q2ffUU1MG4mx8P`fUZgAMln`p+85pYwG#t=U zfyM(`CeZbOmJ2i=&DeG zMNdzua{;NXmI2bR4+H8DzO@ebX@{#gI}&+Js2cz!1?o8mdrJTfj{FkPTEYDmkjfhX zr1J7(7WY0tio4O_<^Wn3VSWDuAeFZPkjnc8ppOc5E1)X?4UTjH`k3H;1W4um9FWF) zz~K%#+);9uesm_T}=-&(VV}Py} z==9N+?;JqNR}V<#ebhnUaM14osgzUCvr;|)NO9E;_c4ci*5R%=-|9ErL3cVR1xTg5 zZ;X}P1W0k8b+}y)*Y9wrjR1*B>F*u@t2IY5egVS>e-4t5PO8b3h>;R-vuA5|~ zR0Gm@6M!^C85~@5y1_xK9dyJ&=YmNk&jF;8S32A`9PVchR|IzDdk)a!l8#~^RD-ht zsRnmB++v3tKG|w@H6Zn&Zvj#begO!q@XpUnv1$7UAeH>yYpmosAF#LufHbxr0a7W4 z0jZSOwH7xWkm5e2N&`cg=Jwc{(7K zyaDSyyNUAm#fNpeIGYen71P4Y}3UTqgt4`sxxu^+Np(AeGV&NTs}g zj>~C4nltkNX)cVq&4#!bkcPOy;Xdea6@Z?SIO-ks0Y_c$a9?w{pF7+EhZ~q@bvfyF z3tb6FwYm+EYW2LM&c4I)B>^elR{<&CiFaG=hXYdW*8y4~nsx(f5$Ih&T0X7^lji<* zK%Wun4*+RRJ>*{7c9#HB-?#(NQsMg*pic@kX{$IH=1(y$-S#FNusXHZ6%v zchF)7t#QyM2X#B>po4fqg6cQMLDL55UwP$Y5^lI!U+9GDdW3}-e!5x`svOyvl_oVmb!?kqp18kn=s_G2CZ zhBy2$E{*-;z^pw-F>oS$cq-}{F+b+V!0;j$FH{PcZ3d&E-ix0VBmF#Mf#H2Ca0e6D zb-?Tn@XQ0|()asARRHs50J8#^&7=H0j{`GtoFBuTt^mLesOR+r6Wx#N?pof_S4A=5`7%69HNj=O%;Q4;JV)7&76IILEX7U45 zMhfyqRif8L(0#_s(j0w+THtXc2aI3X)MOtJL1vytPmttA-u1{8xM14nQxt#?iYny5 zEEzsuG(0F!;F%59^Fv%;H#{Uz??~i3A45UF);J}E85P1@9>SD{FtbCL z1tHAJ5T+x9`CJI|ObGM65ay>LOkW6dG=M3?GNy`#6=~KeK|e`9);^bnFw;Yr$`Iy( z5N2%%^OX?h=@90*5ay*2=Cu&!a0qh(+T>um&J1DL;|uak4PkBzVJbqH4$MiNm65N*GAXYyCNfK& z>Km7o8_c5eB}>Z7u&%aD788kqeL=Z;ysFVJG2`0VTnsX*@yXT2rILbN!IaI<(R6=J zLs@fOb5m7iS;b)%*pEPmORhLA{Xe7p5X4jWS$||d{NVTd=Qmk@i zK^PW>mf2-s@T-KT5 zMMo-2lrO|!Ry3C9h2^N-yvNF_+C;fNo8rv0`Af6&@_>6c)fo3yi_r_D3|k)+f1on; z#%UF?u&Sj1iBT5z`4Ls~XH*A*$f`d-$Kn~c%?)tW-*AJeWsJ~<>!;2Pa5SYO8m8YF z3?eHE{jqozf)OeU4+9)XY#^3Ie7sTSJSjug;ik*Yhx8E3T!Z_tEei&Zit1}jh2-+)?v-C zGKwJ65CrOWw+OY&Yg@`28vJgCVz>~CaLa;?f-O}6X)~rxom(d3Q8BT^iW&@Sn!V7r z;c+pSbCtBoM@y7-&|Gh<>a!p@RGJ@~NNAKY#;+m5rNy>I+FJO^c6DQwiRJ+XVToF_ z&T-qW*^snQpnO|GrgGneojp}$mrU{!z(uqT88EVV*kfzJmI0SIcY$E3WrS5Iup8N8=%p`3=fBX6O^J(Tj=iYnnx#ygF?)$kOh1Z5Ohtmp+gre3*^ZiGM(47W z-Sk2|TvElJF$*Wn(JRW$8&ARZ_6J(+YSY6JKRZ$IQFq0@C|VcB1z0bi5HWgx53cKp ztA5pWH%4(2L@G>(JuNSgT3okUy3(a;;o`+!CSWq0bz}+ z82=~hl^#xlBBALEylY`4k(s z)A6}HU%E4}#qIgG8sRNS$8|vd;}7vwrC&@8;>t4asa}H{ow#1j5MMaOYcPD0`3l@s zt}4Y#zX!UNM+xTkTmv;vG4tXjoavn}2o~T*DQ?1+n~SAfDC7-PeRWiMk-($k>Mr)N zc`?ef@xX{1#zM%v1@ibeuEXOK4}4#vAF;mX0+qd~@+wq-S8h8huL4M%=$`CH&B*v_ zQiFewKibmLask>pZ*=f_o80M&)Wqr*(Y&ime2$E1aGq>o-G`zPw1dcX^|)py7M#5X zrU4Ncw#cdm4En@|5VEu`5?z8DQ_BE+^dF7&*O zeFdRO@;`#Vj8*$wDzw1D^6$T}O(TitA2u80Ujf?RX!|b|H#s6{B=x!Y%Toyo;%(j3 zf}(=I<1gE^`_J35*|7d`tK4kUx&P*A5SJ83Tjj>Wz5FBZiVE14ixj}~*Q{dDK4EPE z)^Xut6K&@EX01V`;Xe21^L?x0$_y{Au2~pcrl-K}cu9H&E(u`1Fgh+zS7rLriL~4t zP#N28EcZuYw)0u;nID}o>!V`2UCX`TZgmEdHrgv&)_Y@6D3_#{FdMu zRHUO71<#%d>%G4wAC4z-@;9X>MNeZy%9{=sNL-N(aueRS#nK}S2g$#5vpeoaC*l_MmyXBBmu~ zD}9Nfxp99>_BLBJ`W_E@Jd&W6$wS0oDm+c0*$$;!c=iTiJeJ4ThSmGS4%@aoKFmbr z=@wo+g@3+KbRCkG&=OD_+z&7!Gn^$_gVWfA(!Ft-gF?ntuJJT`1vn`VJdl9MjF%As z_M)p?Qx?xP6wqkMkluEvtFD14M%#mel=@A=CO}2m;2XEcL$)qz>R+{{%?Dc*Rf*0@ zQ)puClu*p^D;{uY?zfauJDp)dvhQJLfxs^nAEh6rr{7_C`i1MC@-@E$k_u;1_>Lj$ z_9z!U&FCISMZG~#4|z}%0)IF}Jw(*ng}XuxU#;Lu=I2On9N;O}teGtU327=nUV2w9 z*u=-+WPI&{MTK@q^xT0&TR{QbY0}AOa~U#D#@DV;&DoEv!22GkpchNZ!Q1H`7%0m{ zloH`9^i>1!gA31vJDqQ&3bnVo1f09V9#lB+zIg?@Hh8AuGa==PT3x|O;pS-qpCU>K z>Ej_r#h68&;)hJdz~wccNYwTNtEH{q6S?;H)c$UGO9Z`T_%pXZ-6@aE;0u*S3z!Hu zXN9TrT_#UjvnjJf_>bcIbn%%d{jBv;5Z>?rA``WJUMl(mRP?!2Pz*KcO=qK`Qg*Te zAv|Z|rU0EoqtWTB5Ksx8nlyaJZX%x4JduG`&OWU{!X9d{R;oUaQcVhP_y97RivB<~ zO{3oaif$Msl1`?pHo6s1de;q}EA^U&2in?3jz8m(X{g#pZ`H&lAYD;`6?FYKtu2j* zNZS5#{286oI-AQ1gJ}8klETYSD-nPFjP7aOcx?hs$KgI4qJXnM{0+(D0m1xG_D;C| z4wA}ppBR(I-ln;|IfS=Pdoz;9ZGvu`aHNLu9a1;BdX zKo}Z@r#>K|GpQofagPvtJVGoFZ@37ZB$G(<^K_nM1>hY57rtDM=|hLpt|GksEFsDq zwzTLL;C8~ENS>RZ zi=zN@%FC5%3O+mWB>TEAvcgP33fWj6dQ?x;-@y zqo7tw1;G-3S_0`3wiT>xt$=If4SY?H-U&JORV?pBcfmK}zxtq#3OC;1iZ64yl9G=A zbkpI+S@|O1M=mo#BCO2!py3vyCA#*mGu-^Nu@g!!n5HC{=6*@jsa!oyf!ke;NW9LP z9B@6GeV>XW0vpE?5tpd#R7O{ovs)A4krwPtr&qu}laC%hoaD4gdmGMB3ZlHKnLR*! zkVI)y$`ru9#b`#VIYqYMA&vWjfU*J87wR^zA zKVaNthofcR29~f5gwL3ay6p8G@&G zc_BtW>!Dt3lfMDtwDIOHfqJto7_WSso2=qg6zAKu_iSUEI-G5Qg);9U8oo>AwY04R zc!voN(E0LkFtW11#PY4coY+DWOV8oj19s+H!kVoWg7B8GdfyT*wAr&~;kkHg(qy|t}xqIxyH!`UK~ULr`gRES%4B2ndUF-W$k*9#Srt4N!EPn~|j=^vb<(I!EE zw#0m?b=Mni1hZkS;2m@~3;B$oF@ukjRe=rR7BJtLCeUg?f_ML%=s`{E$72(I++-p%9*BFW04u@fGlGT{?-}r z%uAP%ut)uK)vE}*22TgOW2u+P#`dYBvFB#IBj@J{U9gLQ3tKfjV2EU1|n5adk7CJ3w8z75P34kSCEy_t~n}mNrv8CAU7`e z9M6SktTPwH&ZQ1ujWiTmpa;A2)?`0sft4=sWDAVAKvB25a#_&@}3+Zxw97=|>rNB+&R73P^h_{h| z3MI61D++?pxz1Z`mO)tn*~+FW*rdrdJHw`9!}1dzdh>qz+!gC}%1DQ^pHy`?Bm6-z zST?&Dl>%#`i_IF)Cs};U1H#o|8F$V(fKm5pIbb|#hb7(-Bn)NCbpR#E_c3bK$P|Dl znc89! z6t!4UghpPBPb~#`w|dYl3sG~87-YQ+Br2f{Nd?}NN4WIz(%_mWwTwAT(@hqm8F`z^ zJYJz%m=U;v4sl`hP-OzA_=g~qGdz{nGT{rQ0m@MOaB`f6?}~FTMmVrvab%DA9#Q$& z5wb=wc_(vg?JO>T<3Yows{MRlw3Kh5?Qg0Yu^%JZ)0>?AH?&p}?uUivA}vrv}7!m+K?rbUO4gPUUtrbB@31WZ|= z^@AIsy}BtPnOX3TUMe3cB!mv(sSfA{KWq}7U7V@!Ai=2ng)vd1H?Lzdi?^+BO}e4)k=h|a(8E{pAU>nvj0uDf++Ht5!{ zbYWgGE2g`!lj2|kcsX6i9(Zfr-wh4{dG`tcfJwg?71Qis9Zg+;1Opr?V$2;7orYZ} z$l$pfgTcfADPm5+r?+{D5~p;@mC<+?9+73{dC@H1l#+7eh(*pCgQ!wIX$GK4+WLTt zOHcq-sAG6pz#l;q!U);&@D<@p2{qE&nQo7bS%%c(t-s)j98;-Z%4|__9YUrN)mvT^ zgrYXw_!y{0Zjp^tJ)HcJ0s%eS;v76dw?#vC#aWN=E-X(-ODtIzhhM}2J1z9ra`bfM zfmABaN{^mSTUBsPS&h-k)eMnJ6o-mgRZeeoy+EVXKJ9{3uM)e7M3`#ExO1;XCH0e) z3AgQQd*F+*6%q5{i?XzfxO`ED+^W*1udv5Tr|QU%uMk^0)gUbS8WW-Lm5kByiAX(? zk9+E&^mqnSNc%O~Oq=^noi3gN4sV3jW1|Mqxp@%8lxgv2j^Rxsvg{h5#86QVAjB8= z@W)Oy^kV0aqIeb?aDv~DD%{wnBD4fJDR(Crpxx9vjv(>WO|T%{eq~&EDwG@OO$8Nw zYAB264{^Fk%H|jWi?58`6|cmH^g(-6YN<_OIQdguXv+p9P)U`-tHr^TlO`@tEF}g+ zGI~lmUkSu2h#3qjfsK0wxY*KOxz?V$aDYk-D!k*}~XGW3jq)^uq&2YA~GhffTaQ z3~#C$FkKz9E7oiC36AGPllO?$jLC^^%IX;c(fg1ovFWTS2T~dwgQ!72QIwjOs6aHu z<|Qf+o$?dqL6&knSyN8R>}?%cWc2c4rFqkzcU7fj1FotGyKkATI#)_`)!lwniVWpa%e>A*c!2#OqW6tg5g)!E1UR>Givh8l z&1e>nVRB^m5ZCLt?Zl^QyK52yaZDF?g9iL}cGt8GfMqDEZKO2i?D7%H9vAD!tocr7 zm!bkox`5@QRCePIjnvx@htwS)75|+bhfC`DSaceVR&E6z8m+0rq4h_g75|+d9X73n z>NJ)|`rON;IK?)4;9~qpKINM#@Jei~EJ{3*=e$GDBz#ht+zszN;SDeE=dz^?W7a+I zP9ig(mtDAiWp(6nJEYS67ii`z<5-%>xm;LTM-19T_Gi{ZO$ETAurUepyx-X7u`hdx zWb>QHe!|?Le6D%yQ)gios>Wx^!;@U5R{kotTeYmQCb1UBQ?JI~@$0V8$C0uZ zh*D5(@eH~&UbDuE#*McZH)DHuEqX+epknFvfTgyz_UALcrO@Y0Y?;V#NuL2m1;d^o^erh@@k5NX! z?AyzMowzbQX8gcvyXa0ZWy|t(6z3tN+(f4wGcQZcd#{2_o-=-xDlt%$wRwE6vm-6Lrf}EW$W0542LCF7dL*sEAkD z)cS}`&?n1_Zi0kdi#StPeoi4*1Qq|s#f~S3;@omZ!5YKlIi)ep|02Ucl>nn2W@G|W z+MFU&i*l7#R_R?-KE`UHD=8mWkcE7N5U81YzgEW-Y55hT-6L0I!XWg=Zs&8gUn?-ZzkXB zbOzG#u8Io=3js^Cj&B<%;(putWsIGNzoqGx=`aI&OGQ&SVb1vQ?SG(=16Q!z(W3~Q zKuL@gh8yW|6&n-b#xkVg=0r*64oTgU7$`syLL_$`Mqulj=fRSf@e8{$J)q&u?nK{s z>^$l%x@-lu5loLe1pE2dG!n=il;ISP2Mmpm;icyx6p8b>BL#R|8AquTwZkxI`yssj z6;4mX!fC6>HX#8$8=#aiUly-UzF<2GvGsNIrs$xf& z826Ew-eM9X10fz)=EK*$M3kuA=cVVt7RYRGej^ONnGZpKvVO$JWiNsh0{aS zSjI2bIslzyEdGNQN7 zCvhP6iX{46Z{%gzVjLqD-HJCh3sv{!#?d8jJWkgtqY_MqWED9(46VXpv=QjpNQJY1&Ev9zSdwYg+J?=!C1?oiCUO=% zCG$Oi6CcC!-58JuCd{%%*#N7)+(=xtAcO=0c%rQ{j=v_!O|#aKN)Ds+>vm2 zg1?_!0^_8yAgz=!&{Va9W#H1l?uMUb)JiPMK;uwl^s$Tw^wfw~162b+C1j7O52uEu zP^^i`62LxP^4jeQN6%8E)P0~H z?o#{x@)y=i(YK%F4reh2)0(KLk<$}C$SDwCOB_USv!i?(R`4bl@QB5TP&9&tArb(S zHQc~4*ck1T7M*mdM%s-Jw}t8`kjxDmFfu>6*qN~9?nj%1^>FqV>f(R@_KUAXR`v=| zR#I3xXIwaWgD9wCWNA3LUgV&dC#D}1?nk>b2QNOCs1@4{KBkn=U#O0l?hHqxf;bk^9Az%n?3H<@q-9cI?!x5Uku_82ddOsdd)DD6mIdC9n zhX+Z}KOKZ>ph4@h@bS3%F!yb`!na<6^L!Z|Xfd2G4kt7Aa{>llu)`j%_jB!x_g|!8 zWY18yZ2G0fPq6o}0C2sJmE`>wG`^}Q$WPt0x*9rkoAsdXh22F5V9o`9F;Od%H$lDE z`_Yl8?Lj#@7UlG?oV*~EyVu6!qeFezqsR^ap}VMj8rbUN17{9mY4d5{Nj~igy(x$E zMd|iqNJ~BS=+e`fSxUEEbbejR&hhDnMi*2WFL-F2Qbv1~s;gm7rrXkAItOBHv!4`e zm9IJhv7Y9Wq%KHHGbmtJrcY!S`j7?$ib{E8q>%c; zH&4n9$exB%o^o~qO#9J@joNF~L`@7a?8hIZ_LEME;}-+xRXDkhVJodLY%+o)VvsQ+ zfoMY6sT>WW=|g39Qn@fRg!vG|0Da>i(u~t~H}v?@f`Yx36G1tCjzHSoa?6gUHgib{ zo0%yVB1cfVZP*YsYDBSlZ33FDro>b17$x;#_@-DPozRo=Y3d$s`(R?#V4 zGY7H4g$u2$6&IvC1|hr1l76sc04y00d)A*H&CI1;t(;B>p;wD}OtZb#)h5!)%1YiH&D zxgg7k@U6TCFgk5MHdRXP%p8m@MLO<0d}uX%kkRfQEl16VJ*chR6qDLw!`QX;tS_)9KzmYS#qr_WF0suKAhpsHPM+xk**$z%+NjD>8mmW7 z8N9Yx^Z94^;Bc28yMxu1pFuDsF{f-G}zT`l9u1aTni{6HZGG~eQ_7=3d1rAAp z+UWVagw?S9QYfZXnAu^-?FU?TAP6~V5+N)Xmj~>jH=eoOa!Q5~tL>-QI(6*HR~z&u zihZ^>5%yhyp`+BK9|uXKumN2k7kqGlC!>eTt(o7U43yi}SLm{}&&yU{XOa1?B;P0W z?88o@pv5p%n0HWcPP*_;B?mX>AtX6?nQjfkw|*LyLFxF!X1UFsnm18>mnJ&ZHIUT2 zQh{8oBIZr7>wE4J%@J7N)CvI?2%ucn2=NzdgM(DV%=-k6 zhK!{pjPEd8%t|x1pWpX?-iKo`*>jxl$BtBi`@)TEsHjU*3(F!@_V)yl3;ezY0-X!I zPXq5u%;j*>uFPPapA~@}%%-0X-+wJF;`hV%SM4r%8ln3T+EMWA`bR>QI2rm%xZnxV zt}IrM!GR6Ph!HL3<|v0Beu{J%L=D@{(+ybOwFM71Us8~s3qHtPeh@Ta+2(=pt4&9?B>TzyRLL1H#ZQuvv!#hzcs0#O`vAp)TH0>nr zlq0h0TQzO3pjkdu@Dy|tem>I9FEXd-eDa}hA2hX)cZZMdE}=x{-7*#>TXHD*4{zRk z#>#t7PTtKR^)A@5J!$L?JO6>uZulM9PH#3Ft=;*!c@4VVCRyX>G+NAPvO8U$hkpB^^#)u)Q!1CB6w4Dl?aZLQzhPYoVeT z&$gn0hBBuMyi-W%6cycs!K>$UBQ$f9QPGW}qF?i;ICzGZ!_9C9nE5rRXiIFO4&4zg zCb#%y<kV+8Q^F*y{#t_z*& zTj*b;Q8f-qaPvQtfQYOU;=0M0fh$6yeamd^Fm@}|nw zCxs%?CvIv5C9=jZizn^Sd()G153Uc#y0PmZ9452yzOXWcHeN%;m}=oDw@p>^v}H8ET#bjxl8b1ah_8XxXRVs}FO#Nf)?T3ol{ zE+0{FzXiK|Sbw$4aP8q+zr>#5r4mH1?GJ?;&jdP4J*s4>KSClflFy}HcJ%zzf5N4n zNJ#y;@Ga_6k6}=L>Jb5Bh3x3=)>$l;UD#rj1+U$(-A8coV0YUK#S@SofN}g)E{<9U z#>u1yi7}wkRPWAD$^$@-ofOa}?8D~+ngGi_X0+_XVH3R~4)$d@M7UQvRxNTb)5Z{a z9;SIjo}W^T{qi#n5!(-)W)b=8mxspOPXr&Y@Dtd z$V12KMx_d~mjPx_!K8LUU2tl`I%dH_CHD_ity*~zSdA6$Lcetp8Y*D}V_gm3}`GE*wo zB1vFh330K&(UeVchestUFq%zn5sq11z^FHzRHt{W5>z;M#MZcc$Z0cf6#cTenn2xP zVhx4th|;4m#R@`=@uVwpp{c@*(r~LTkldj*@C|6o7<&gy2Z2IRqE)eO6pUDwA4xm{ zo#62ucZP|PJu7HXo2q%RDsGR76%xvawK#yaL}As+G|s4g4`)K_L#g1DgY z?O_p^q_2p6C_VS+hgXGCl4ML3x=qPPtV)IRm2i?yyA@0tRE3iYCvUefu_G1EZ82{_!dl)2>b8uW6Tjd26LPriE&0zXsSc6*4^L2&7QPP(28Zh&;Oy zdKDpmlli$o4q{c4Hvx4`;$i+Ah%G?14u7zr{88!W3M?sG+DZ~TNMoV(C zxKYTZNBm<@g-y_WL!jhJ)Cdk&)sNKE3W=%)MGEg~X1yPRv_sR3oYbPX_Pn+n(dx>- z_TGh$nsl-bU}|6VNK}s>Xd#2ybM%MIrGs|7M=k4ZlGMSKy+LUAU=AM$w4*ijCQ6T| zv4N|lC9fKbpUs2yq2jd-GN6mL!;rxbq;X3wT%!3;(_sAlu*Vc9InoE~)sGZvS+5oc z$a)fym-XChRj$}H>j^-k7uH`VsFVE3!!Uv8@{E2qGvlyc;xUSsW3Ho&;(tnWqEXx= zAr3v8WXR%Wu)6*P<5F3aN-jk4@rU{MK!wu2v+epCo?{nIw=wlC;^kO}!aop_a_t2|>%Qc7C-gejWwIALie;tuC}C3I&?? ziC*1-nh>*96Ao{nCWPfxlPj5c*CzFov(rklcdK<*lhkB2q)F9k2NZ2O~IaKlqG>AH>yz={;)2tFxVs% z{OwO21g&A4EyJBa2uP!U8*>O3J*E*s^q5I#^qC7VM$)_r{ol>%9+u8yEE$b9X1P>k zB>qWJDT>@SJ+aU-W+6Cl$EnsD&UoS%btt;}ONL!x_)o{wq2J`U2+ zCi(M!*d||x+1FH{lY0?gU_j99ddIMH$al9N@fc^%ibC=nlWMF*h2(6cLbphiXx8L} zZPwDGiUtszw^`3bL{pM~wFWR~#=|oZ22TFuX`%v8VL@jT2@RGlo$c6VpNecvN&eMk zGw3bbv=~c)+i2XvRsH=HmwtHc!cUgM`BxXtU{2xe5lr=6HP(d(HF++FRO{ROFo!W0 zlPfXCHXFRd5>^|zLlRaSwu6{B@Cej^oj|O@D_?LiiHpPBtCi#2|Aj3w?$3oAw<4q> z5ZTHbW7D{SdnC_49gj{wlVDPA;$F!~JvVXhg+^wU*?d?DkJZU&VZT1!#hrltW<)P8 zOfjn7&vlOdSaCl57`0V`yKVyw-_5*^-Bw>|nQ_uW_S=CP4j=`#9){GsTb1nDdUy#o za>0vf)R znQKOnMkn5Zl=>m1{(MsEeWIZK&=GVD$_6Sp9;q+CzTBJ(;Cas%J{x)~<=rppl&`-!YQHn|*Cz?5NM+X#*-;C$`Aw!g|z1pvmuAwE`Om2>1oUu(Jz zhu`E#Lobd+wf(hl0%CjHMvA@ZS_cYI;sp2|=}AA?_B%W@+|%|#;e;oSsOrI`;I_XY zn0~UUYFJK2w!TuFc%h7FaAk5F@#D96g8D6-(0K&jP{GHrY?$G=gepjzIEV)GVw$V) zt$#;LG~z9e-Ru`Hb}n`0PvT8-xx8q(fqi)_!*rn*M_}IMsV^$lIBZhMZUJP$j*{r)2*1~Ij_o{a7 zQSp1s#n{;(g1sAhKN5rgH~_>0zKyd*{Y)LP#fqMi2V!wYx(1O#`qO7KyzicA_3#!KOYqDhbRK1^ zV^!#d?NO@!#M%M$xL>sy6!nT0`h3B)dzeko(uakq#6Tfwxdya&8nSi-U^mrqKAtPe zid;|6_8c1WbEYAKb|g_f+jHQp)T7VT;~wSUOgR>|PaNvI5o87V4esz9TIrmkaPlcJ zS^N~23|*?-^HYr=!j1Q!7BXhwNonPZ;j5C09M-NF%6Xw?MBPLHllTRp4!W)wV9Uh6 z0=-(Q;V;CoU-j(jZ66N$_rfJTcjWe>ptbwOD}&tS;$=H}WkA2gt9OtiWLe=1HvA}4 z>>))?y^l(Y>y^P0b6!4Ta8L?@9+1`uJz2Y7d^7mz5Vm{h*u?`{T@a7ll7Ns7WT)6Kbp>+|Tazs={XLY6`HOCUbf+Tzm+3kl z24=uD4(3+vfG|_Opb`UzZyXLBj&T@(ak$11S0oPWEm^Mn7TByDvho-TTzb#7S}+v- z*m|L%=tt|BpnhdsgKsmgIW!Y8&~SG~UBeyZAwOYdG0mu^+2imfAIbS0zF0fwJvL;G zF6@kld^5Zfasw6z-Zu8LFY_6lfrk5Fbc}-uWpwb;#sHcZ)hpcixG-O-Q)%p$_0@yi zWcTr#Rq@_?vu*4G!*9HFF&OjOoKO~e>slZihW(NIQxKC}_|RR%K*LWmFG{hB5OnIl zlFvabMV~~1q=O!WhRbjk&XkH>H3fYHk8cx0}+@)bDOgX<%CZ;&$JgY+EQqD7qr#>bRn9fHT z2h;iJ=&G2)aXSoK#MtP3&%-hhAQCK<(*vn}-PHH^?swJ3z6J3{D zbDWlvTSMSMvHJS8uD$yDmHGmIerfsBWBK!Re*P4>3^T1ny>Us7aCP_`r#A+_Hu&O_ z;5p7O>DvxpTs1t$`E`tA4a3Qv*hl4ys(X&}E53%HIQjHHUuj3-@IM6X6%+T~r6sVR zXMNpzsD;*67da7gM)o|cM4-1H0#wHHXpZx3 z>y&28Q!T35zAh}_#E;_#*KZE0!DTbJ*#bFY7109)AQ(;rAm~U2+eV5KeaG|BJ&-kE zzDiWLC~=rrb2h~D3F)elrn!B5<4WCK6x=ENO0=G zDpFhx&x-cpKJZM?*c6`%CgYtLc{D;h()akrl*>nzaw9RqLhrM=F5O(d|{8Zbl<>uVF;(t zaf}(`VDp+&^lYIGWh=j(AI4{M%MPVJs*0G!yUwV~NOIFK@O*$7g$GE0hsL-N5K@In zq8cQ!xW%R9#riXjgy0)WR#hBlykz2%ee7UpS&BuwfcHJuc?kglfl8nAh&*g0FAH6P zqp-?5xBBBn()AP$kC5nuls8VE21~yejPr{>JtmLr);$WGD zI~6~(+=-(`sK$vlC2R)5tO@vTGW>6+%@B%61}tXTDxjq6^ruEgKDuJ&#WL6x@#V`I z4ws(fl_cxm_h9AEe90|8lt-LYq<1RLIQf9?TJRV$4@TJCgC4@f)$3?Hzxs!6N{sPQ z)@UhzZ&NCVuGkkst1DFGN%|qVTL+dl*y7Dh9s|+J*Fj`dWs{E=2 zoMRAj>xfHorKI%h*Qho44YoOzLL~YkV-x`0bDNXAGdCJfx_|6qgwyEg$w1%SLMM$Z z#~6Zur5M@nW&$ThCAaH7rZX1rc)@rfP$yeg9|gF_hPec*wY1U5bM5`Mj%j>S6zaqM@Av(XIdg0>vOKTTi zUmdAeaDl{@155S%rFAv+ZrqH z@@1eRx)cP|##TflD`J4$7+Dy(p{{;aUF5oji*C5Sp*~i(ICA~M+S-L7A*DJx-;D@K zLfXG4+0)~KuhU>4JAFZE%eZ#^VLrbr(t8XBIx?WNpZ;HsG`s$jRrHhtU*F{%^ zkd+vi6@OT|C)yX=0N!}xz>j51uLGwei|eabMC$65Sn3-zV^49paEgyWtu$`5u5k3m zh0Cg=(dx+36_HO@U3zH*Y*<>ixOz287mcFcjr&|ER68#eI^nY_Jn3@vOE~}k zpS*nwsi{P*vU1Iy49< z{Y})A`c)Q>r-qRl(Zss?I^pW_rK_u#*>qoyEv$Yp7FLuDdZ>z2aljSvCD{ zL8Sz~G@^b(edmTktr&ejf1dtryXb-o&WW7dP`z@-sgd(zOP56>*WDPIyR`12&wb=` zvt~w?H`IR#`aCT%^R(HgodIOHohJVZZn`W~u%@)&*s|i{6pZH-K>44`Y8T-+VZD>cHWD**BAe7 z8_#h(kE)&l8g2ffj}$V&6o9z8`wN_0nd8mBTG2NZur-LEh@-K0;1Oq=|Dr@u(XB^5 zdY(!q_1ubdn<1z+FP_4OB}D|VcEo=kmm_VE+c)?*(c8vIw z5q~`HqmIUF4$nV}_|fn$L40zI_!Q!Qig*m`U0&R%m_YisA^r`-e;M_#yeg^{U5o(K ziTLX$2Xv79#FZT`ahZ9OMJr%ya56k6wtzuCsmMEo}q zf2$AwEf)V3i2nctdB2ZO-?w~6wc7 zR1~(_SD$6JJ{KZ>1V-?WK6?LP<+T{`nHxi)g+Bb(jyLsfMEoV|L!oBSV(U|ww*20T z_+KOb79YQF5`MFu?TD{xL{=|;@?*BkkF`h#l?aUsrSNwS{!a=mMtu~l9wD~8NudoE z_U{(PD|9LyH`7$!U7$t59!ChmL|!^RRj?1)(3v)LE<)(8knU3!#)sKdj%7Bq3ZY6# z_h$3a+;ijYb-1=dQX`;fL8@kPgzF|W@v!R!4XyS>ml!9d@LW=rx5mI_} z%Lfbv|B29CN%s>A`;~?L86idUyQhXipH}#6=yDtS3PLK~eHQk(4Gq}P-6xxJe}<4M zx5vW%Y+;4d49!O(be@zu86j212W{vwgkXB0?MWLt;==|u+lH!b=q?+2+=kw;p}A+6 za<4*2m3uwLx{80lhxJjRR}oU2T-s=0QG`^E%@+1;3wtVw(X~)I{Wg=M0wIN^%EA^P zq_BMRc9WwiWpdn!kcvGajgf%hdkUe;B=lE=Fc=3nrhX+9xufl~om*XG6a(HJ z5`*Pr8@kwrme^3rhPK&IrwyIP2{$Cce{W%X{rUn-RU4w14xhG2LDgTFMEO?`ii8Tm z>3sh_0wCu`OoPheUj_c}(Gai`|ES^LL{RVuWGVi>?t|P6$cKQyP16j>=Y5cG0n)4? zs;r*^@+TjJ$ArEPez|xC0C{4Z7qTCaap?WrH17hv8_@^3kPiS-^=>a@1|UE7LCy!{ zWgmn~ZpR+u&2FNW_ck$0py0Wy^x;+ z@_vkw-Lhz7?)E|0;*Q6#%S|&8g#H3uwhMVbAiWoQAu|9u?_w|H6M)=}&c@Bf+Y`6e zdLfGeX^eUyHv%#o^FmqxdGSUseVPl{y|8g zqJpo%JI_iDQ9q|~)lfsg0;KUp%g1Tgtyp28C?J2D1{V?39%;5ADTZBvf6o&E{=oIo6kkF{kE0 zcnVJaW3KtN)wNhq^gtNA$d`r?-rZOKOj+0FK$hk}Zpwi)=Ft1BvB8Zu3F@4PU2;4o$u3rkg^iRWF%e)3C6%IyB!b z6fbI6G+(W!DwuQ>^XqSLQ@G2O^J}o8w>V#n3&ZO9vg-L~%<@2@4NI5jfyl~ZXg)ip z70b9hE~~%Lr-j$A2+hZe^U7+hs4Jjay|zS4*7;nU4wB@?xCEG$M;D??^4CUyZW^qI zVny5iUappBx!jB;PZzGz$rAMZGv?2jKa(kDyYbP>K7Bbsy1It%I-8eKTr|x=?^#|A z*3}c`7N_-q9ygqZ4$x0V%5Us zUiKo9z_GbN4e~JF#9)N942#-^jvU4_oo8pkq+3*9yS#pdZahfi(HMMr7t}3kEoRN% z066ez+X#^Pb(ZwxSgAEfELbQdd6!TfOTd`kS zRL@6$Aad|*zG#)a4(tAlwQYzlybj}CshLai3~w2;uY-y&s&7EFE<}~>1A)gY#8NF< zvaqfW8y80EN{#I2q9xUfZm^Q;*&XU&-Y(HW7*^a%f{zh_LJK5N#jNMzJ%n&1G<|`0Orm0P|5k>kw|d7VxhWJR&UBu!387miU|qPu zpQAFgpz?H#EWQ6YPg=0X3kii#ZsqA`oaqD3EDeQPknX5E6`1QhOjnhDF)@f;e(VG* z&l!_>+O5o7>cMU8@&W~L9l~jVy}m6sB8HQ#H_8zR;>X6bd+KReALsiAm9iS1|Aw>g zPpmBsMWw*0{sMPnf9rtnIHRXxrNN2;;I9|}o{HfB-Tr?hE*y0L`TMiSym>8A<8wTI z-t5&E7V;ETDu*I1**rq;A&TcSaJq-r7x3;yN#+^F3k{Ovj>Eel`p_xPu)Muk+7ai1 z1_!-hWAnTSgiU!4xhIi4qQf~VqAo=uNh+z3k4H6d@_^Gto`U!c&RrF)!hwn*9M;9z zgv28eqRUMv^7^EdZA;;atgHMWpetMjU$Qv*5RG@03kTBkqOKn4TAYAvJe0-?HsfBk zdk7AI0OV*~Scjs*K@eVsfm%b)5&olu%O^1WCkdBI_;rMN&=YU{P5}cv`poh;CPjIP z*5W{sBstCu9{9~z0@a+*Xxas$>u?@$AzIgMGSxa(n4N*+(~5<;$6`i_5De=FPX=+> zvv}kY0U)k$%2x7XkZPpUaHd1VSK6E$hBFEeoomo+5^Kvsu}3wT%Rw20TWu?K5&#iE za99VDf!B2?QnEF?u{B$6ASe@%O|5vB`F#{Dw}do0ghKTE7|Kr07sF^HU{KG5IR(ox zAQp^?)yMcJcDy;;d5oa|x&RXS5G^qRsuX@bK0KoH)SJoV+~9@KfkBUM{6Xmk9#z=s zysC6V!mlCBW;i7D@n$Da`HJs(e=}y|Y>IPr5zLn&aBl?=t};R_D=LLL#`9n92h*t- zX>dqjjH<33afXu#$sE)ZQzTBYGOCn3H^^|hQw4FqWjNhJ3P>0Z6}7O;>`WXZE?9RO z4--e<&5RqQ2wS|mlNkWIO1y-~;&J4GByP4JZ3B~2eEUYn!4*Zy`Jv|%w+wz{KU2<+ zQE(Zr5E-$NkV1D0fT@dmw_PIAw?r0yqyp6N064GVr{%-U6dFp!eKp#OhxUD zUnN?JQ&BK?4D(=SN4$|)@lQTdDy%+QydN9g4>|qI3$w=|Pjd?qD8p)PC4`ba-$t^6 zvyq4ud^m4n3Ybo{+1$({NNG8<))ZG2D%BNY(0TP4?7jI0`2(Y%oryFP_r}SgXLhnfLq<@bS44R5x)zdcKqKBGkYL=B4C=Y2pLw0 zikfc2W3B{e9GTH5!bz?IHaQV}k9snHrKMF(N^6#)IG;R>2zVJZ3j2n7PD!^=N`jeb z@uV=`N8-ppU9?>RlQ^WVRZr9C2h%M~DOrfIz`?x~$wIs_9#?GMG(ejvsMoI@q=j7x zOCtfW4_CX07ac9G7=Q?1BqCfTn5No)Y?3r7eYd-eyAr%sjlbRwV>K>%;L5DJk4<+o zQa;|b871c_E4iT3D=UxLK$#x@kLB-dt8_5i~(- zu9(UWXA->(u9MHDUYfGw^$w9HY)yx|X zk0jRWI!V9K&pVWUs|1ZmKwrX*vji)nJqCHu;Fl^5Hct`y$EXet{ZAUZDqHp&ZWYjd zn=p7Fwv>dj`<}#uoieZ=Ea={=u8l<1fn4bfs>lz6-LXY7p32ln!4Vvx(>Jo zKwY!Pz`WvY^nvV=^3Dd@hYK#GPl*-rok>U4l{ z{Po6tIE$W^LsM@@Fd79=?>KPtpHNp2bEz9rLz4jh-TY3pUugUsNw?k-2Lh{RXFn27 z&Ql75>*Ch-bV##gQIb;G(AZU49_1@U;lWM_0}?s~Lq4?4No=s_cySvr&q(iAe^v*J z*;msH6EURaH(fZ5KGU|=Dbl!D7D8y4@~e%*6xG%^2vC*^WFRxlR3v0vP>g1#o`isP zgN)&34Un^W9Ia%d3=#o_0+>RDgZhY>LM2tfUj78-2Z@eqjS_=Ph^;cJPKV2^VuE77 zQ5dlBNHsk?#vh?GcH(+Bf|ym%5F80kHaq|8QK356I_jDh9?{+nkU!CX^&|AGg!&NrjfD1*I0|Ed*f)fS(k+Wk7;tRaD2W5k zRS7mIRwLD-v~QpOx>VxC`yjlCvbRN|>BF-q6iRV~Pl#lPp0T_%gMm(-^uo;_@uKJVGtAM&@uF_IQ zvHGz~s3uT)1k;D&VgYm$G`chW1Z23qxgJ&om02~VX>R$0-@os^`_i3nzVPHL$`8b} zw)7Lpr=p+oQ}^H>#k%N1ar0BAYJnD%*^a{4HUe-Kb7fUk6^eN!4gayntG;>2tpzUT zacB(m)DQ^rLHzI;p%>VR4`*f8CN+UGl;K;{Sjs$X*_<4JAx5v8{S=!lY8GlvzDSVE z-Q8$-aLi07gwGqOn_kjkx+~uFviX3ADm+B)3=}~*Fne3`12#1}$Uti8QlkHJSNoskc=j zNdbLU2r7-DEgUOV#H5P)Q|W0nhxJCSqa04k2Xs{Fct9g{e5b4j(oXs{rR6n_OVLe< z{s%O{%;QZNctv&0b~G-xolFOQvL!%O=3a;$x4TA)P)zN%kh{3axmvZ-nsG zS98q!&j11)h1rXA(vIS($QK$oH!D^im1%AnkY>uMlfJfR1(vH4{{Sw0Sd$s#!s`&Q zXvkScLuiTuw&4$dP<0F#r_4^J9k!A46*<|e-s`+pn$-=IhFkh1j2BFUO*yZD>1dfT z_-rgMUio1PD8O*PRK5ffGM^As&TA>IqByUn94xFje@IEMIH+EyB|n>;tVf=&V&+Bk zlmIB8WjzkaP|K3cp8>=0j#1f)<|=qcACgxqFj+14e4gXHwlc5%`Ux`HoAtvD533rQ z{*PuhI*abs0Z+B?zzIG$qf51XM}7Q3KEA6yUX>4?xXPYqbKR@rd??h1Mxj153Wb~~ zfUAThk|CpN6b6vCAs=qL>V-1rYgZqKVne8rpb~A<=>uZUybI~sv?AbTv(xL5+)SMV z5k_*0020adqG~#|X5v^5Mj6jf(( zo(rovG8C7QT}`@$`Es>};ttpV`am^E6P;>--R9S34%x~;A>_3i4ETRy?kY0*m6JnV zC}%-XIgilkgUZKK_78)43n6O=yQsQ%Qoo%q!R) zg*{J<9JwmcwR}zI&?d{OFrVRc*+mt`M8Vrle;ye#U-P9Br3O>O$@c)>;q2pKVB|X6 z*~g8Ga#`Ksc)qkb`TAdd!@bAlx_bF3818cp4N4~lDIGu()-6csyQHjMa*mGpdJFL0 zz-LxrJ*&6E*|*}T=1nXLU%F$7?Njd&@X!!bhHsyb5aO{hhYaC_V?V*Y2rS$007jJS)*pB6a1RgoFqDg%9}+9vgXA_%jRUKiZIP$Dn?H* zQ4|7?gyE?N=7fIgeX^uuKCx(o*iV?xQu(|{eR5Nz2ZWhnQV)tQvqB465ERzfF9ypq z$?>)a5B)H+2gS7+xIkLFAx$>;l8>2BMfhIxsR-|I3GW8;O3@G@RF-8p^HJyzT%RV^ zc477IR3W#kc@w$w5V@ajOZ=`N`FQkQ;hhsx++0pPQjo|N5L^gwIJ|3OO`3bmcqA^7 zElfYtmMKhkq<{7LchY}KkNlLvNY|<;3ZJJlpNAs2s-<#&MA!kZ zu%0Nh@ZVMN2x(R3SXA>+X#FaNfN0b(w|3u8uE@vAVEMQ{m{D5=qPDz|q!P=7B(Qu) zGvdm$=LOgVymST>U_euR2Lm2MTm}v!c~D_F;0`zb5{Xe6T=bFO(sE|bheccjy42=Rhb+SqC86UDNy*>Xw;&cVeE&H!N2PNIY2;YN#=iq zCD_A(m*BlbH^3zz^u^*h3)_p0t+7AJvjZ6Utz`EuFW4hBW}qu%1YM%IYWSDANxpHa z1@5?T(j$~|Ix)`b#1jDH<$-YQwM~RP=_j&k02_6(K*bdw_FR2UbNjJ<@gODs<{#7D zAW{l>U!ah8^ZQyi>Fey%o!+m1{p(n<-&f)Es!8X}K(^<|vY4Cg4RMv#ordXzSueoa zlSc%kK^$&(VdX@qxHy3Bt3apcz?qK|_1rF5!qT`3I?)yDx?h8uT9%00=$;y``{x4r zIBy;(gqa6AF7pjgi70b&Oin5dL#GsgV-ywy5fbg#spj#iltV~H^*DrN;|?uZDU+#{ z04UW^_^Ug`#~u{1ohBY^#ZanUX?4&nsy+g&vCTKpKJN=(6yvdea5hEq_S@}@efirh zy&L$~eb_w)8vUPtqcR8Pe3=K83h8wp4o?%PAm&wtK@30E7=rVv)xcm3MsxBF?o+!q zbPh71$~9_@vw&kUrjS7-R0E%UYaO35c*Sg!7oReF6{E~z6g>5JDWb*&iF*GiMEzbc zut&fIVaQL@wr6u_VhRsUfArI|6Uad6pZtkl_b1w|5)Jzk{n?+0OWTe3A{+reCN>I_M^kooJN+u5<8Z9nb0Y za#V(+K~RCYf~E((NU*)>)l{sw9CB|ce%Xv>74c;Ol{F9F+j{f!J&cac-{82&9%yil zI&-kWJ>_d~*!;kVMh>=Rr-Bqs7<4fqOOA}hq%hre7{b@d>&7G>IBk} zDDc^jG^hnFze;4Dg8Go>sX5eHIYg%?GV(G7YL4e#Um86{C3+GjL03H*lFCArLBDP#D7{^U zohodffpb#bO@ZqE9=P^mO-9vJy>q3o;8+M~QIFH6omYZ1X7o`dmx_;QDzJg&41pRD z===%G+j1Cho4?#_-B^XbL=51Oyz`DQ54;LB14QYG;E7j>ctx?SSq8|XH^h@El(B}T zT(AqS#$5eNrHjGUm|uYT(#&v5i922=VZWK9?Lb32R%Z`3G!BNCQD#E%E?Ez?Ga>I> z0TR-)uokWnN*)GsH&!3$QIrNpx>HdU8Y&TGw&4%ELx3<&c-_r#g0-017@ z?7w!nAhsNwe|^r}=o0z;WORWg18;c{Hv5t2rL@9s-+H2^h9}0rcQfF%89hl!8Q>jp z){FnLQH*kMq!Gu{%GFx}0ZaYZ(_#$@v!C+f!;DS(2*7f&HwpG!xLc~2Yn(<_1dpjG zMv*XoiP>$*JU03`(3!7qe2-BcyBSuQt2%v8smwvuc@`W(P2rASjsc=ivK{PDY{GiH z%>wKz1A6#x8d=Z=^BT5Rj_gI$4AefD%fjpw40;s)(c9|9hQ$Zlh|M#Fy!XlcT%TpQPM4r;vT@Wkm+wn- z_8{NiL~2-w3Be{lTc;1Qwgc(OQCy2bTl>9-o$cLl|FM-x(ANwKrENPycWJ#;{7V=L+T9I(<+mbY_rWD5vWj9-({@AQ8&HAQy$w*m~pa z!xGM$y(b+wa9|y7%dmeuY@zD%4qdqZ@(w*8Ov&3-iY4!$rT+bY^0(9hGln%Sm0JM0 zO7SzDJ=jvehwQMB`PYgjL8#Dt9&QcJKk78TU=K<^6}E2~^fctZb>%eV4+Dqj%v6;L zXR7sL(O{m%B4CvS95LGUoy17lIvK77mG?>Mn)G@FbOT+kyLch{9sM5E2`T4!R289#Dd#z<^bvSAFTVEqP;6X$?Q?~(sR$QHxF|Lm;X)lQ zL%1mRexxZ@qv>D!hc=lRuo6tOQr7e7n$9=y>CGd5G`i=wMdEg~G(T7fORVh)sb#dF zGIFuO93@$#y4xZ9vQm!-I9+HLCGlw9s)6CJ5FjftLH6z#u}pT>^v&TRIlGt( zO(YR3P3tz|q{wslcpk6&;WT=rX>KomreGq>V+fOYj9Rv1xJZqW7@J9+?mf5Qw=qi& z_P{$I&u>N+K?E{Jw`Qa=pBY)Dvj@${RLNdm6r2)Vq|*nRCnw6Inw`6!pxGIg>oKyD z9+0cDFJ^JBA70fnJXK@O4yVZ`wh^&nIq+g5)}aIAtZj%D3$$4BL)Alb3h1p|LWN3q z-{Ti`hO2*=cj7O8xCVqF3q@GgEGJSSNj2A`Wq{r?5_7?x)J~sm#{Z)ZMC4aB8NT|Hay*k%zJkg(An?xO(I< zw2*H@gKUn`H?FMmiXx_vlTD`1FaOMy8rfJY1V+U9Wq@+@m;fH@_Z?~07jNCw0fjI}3a5^!-&wyQcEj9iErlgMs; z90wbg6g!Ty@CVv2MHHx`{lZ%L3M@jwc44F`W3SkYxTN$MuCWh=c=TYHd(xTriGJff zo+6mZl?49?V#?4p6>^KgGYF!L-NV=yK?Q8EQWhjC1ZBLv0K37P3iRpk_6*%U>GXrE4OgYN2X=F(d& zvF<`=^V_Eo^vhg~3aIbZnwp^c)(SOReZBVS<^Rr6-(!G7)OR*A=@SYZp$?*tl>r3Q z7g}JBL{ohSMSU?vv+Ao(9>9Y^iBEn1N7R?Y578mf|LCc}=YhMiF-RgL(&>dcTZBQxtHJWI`p)xYXN4%RqZhFy70wn;%9qg_BHTz>=?B#b*P&W~_|o zGb8u~ddo|rQc!fP^hYs0J=p-W_Wr?{k{KcVa8FLF=>te@X_!QXKb1KIfd0#SufTzf zEC#b3LOEnhEtlWAgNpKG6zYl_gaxv-z^gK1=5T;$vAK2|(+9gm7-=)2PLTpp&8yxj-M`}2p8_XX%C*#5q#WEnX~md(s^KeCYXxVnU{ zi^CVg)Uyyxsu5w-s0JW^qSP+U`7S@_mkWFdi4(1I;vZF_B3>o%L4kYKzEa@a$l50> zG-{aqTUqYl-X9_`$HsDrig?~c@akn>iVKL&?^4bSWL$g+IEZd_s;p$8uZP)?vE`H! zTM^bNvjczB#;BTBxmjWA@fbO8#~i^>WijUYYW{SoA4hgYc;~e*gm=#UeRx+@KQ;qj z!hP-N+A*j)NZRc84U=ABW-*0Zas4;oH>#44i}54!lAUT^-On3VKt3f8Ym~Yw&;h z!KE5}zZWd9k_P~SF(qnV6W5!DFjD#kFnwTChhyk1J=NgVFK_c=)g(u{g&Yt{6<=aA zWcCeh@upvk=19qp_<1hJ*|Q&$9LHNEqzt274_o)|%rPCO03#3EctvCx&fyOaBoMz} z1wVpAE#|0#6v(7Hfq7T^s;8laL{ly#;#3I&|R8Nq*O5mzm%qzET-O9|Mge_Ovqz5Zt=O-$FiV3pjP- zB;<=g9Z&Gr)4{$U8ZEkgg?SP$%zN8n7R^EsP9ef@lG|Z9NY@EutEyadIcnH2CoxhO zI}z{>Sv?TyQNh3*KYO9g8CWeSA)mn#8L>dbd4?;RDcOP+L8A1E_oZ~>^C$+0Ce?0x zlVv~EG(Fr=w_Y~-g<#q?HI?gMB8eis#A!Tr=$;nh@pN#=4&;0*Htu(KjAb9G;Mm!s!Z1fT=YlBnAq|aZe$Dz#j4tGT01f z5jeQa`=L$pbg3MK!6>u;L5{4=W%>RrRxK^)ue?9sk1Sw{QiX8i24#kUM9!Cm8*c_6 zv35^M`1UVL2$#2EXv#62TPR8Qh&PRJ?nvHgTIA1m5of)WvX=gk!*?NMVTxx&FlEx z1)WXB$w(D4Z`=EJ!WhYvXa*G$2 zI6Io09c@@&cKX&=@1PtLYj=Pb>(|N$#~F0M*;KXT&8JT2PPfTwIdo*l3EdOmr~$F5 za{Af8rURh(fcjK8yH|~C$vi8Qirv$obMWLy^OS9du0cXjbJ5V5ehqD_ZN&^+v`-om z#Xgpx*%s3D+x7s;z~2Il1^E|?JP_vx zDbe-yq9|Et*w<9GovR~og_m}=f%UQ^h+9a->8f7bG-|%2I6b$g=_s7ruk9{QtnCiP z`YZ!mgp6&xV?c~50M1haTH-&zm8LW`q(|9&2qIlo#+{%`3et1IGrS9*s2xHdiq+KT z)zt;|&0RuZC$MM&c_M48(AUljZ}SS%Rb5S0oz0gNrssBscOAu>1-0!sQP&=dVdq(k z_*JR!R#*;VlwaWV)7K^RbsiFZYS~q8pOQdyDiEUS1azr|*_%;>Qbns(njIMVNCS8% z`%{>Zu{s(xObQl(u}CO71(yCqct?OWX6Jx=DsMh{Lgxg2rpl%B#EoDc_v08l+;{=H zD!LI3H=eCJEphe*gH(>gQ*fP=POe5LEuBRrUvNd^3pa8_53Ya0jnmM+qycte;za`< zLhppWk)=x)HQXfm15n7nTo;i}Mg{+*lk_RhnF>woc9x~aD&YPU;jbQY3&Yr<(UvTD(?dKtul z&FHa@P|n5D$$3JO5?}a!`Lr@jSs4an8oh$N6ev2JIBb$RFXcwczrueS2V4)$#7m1Be(+)TmKWj|vKk$V&u?Haw0z1dT`p z6%8RIBnnAPPIy=z2LqZI(P(Y8t*z8YYpt!;QbbENAOb3FQK^lJnkub{No`tFNtKrS zeKTvXz4tjMXn*(i-hb}aaAwb%HEY(a=U$H)nX7j0Z{~EiTW)-CW2777KVECY2O#+Y zEQnR@G2eeSiB68OVX(?Xay!BYL~ExDM~tW5Rm62!U=ho&v+7M95^Fm`!Ur=%@Bzx!R%8^ z3osbpk~op}@?3#d+#>Y^dWA^)h{Fd!x4Z#|f>pUONsAE~A^2>_ zxaAU5Pg5&~#upsq=`!`Lv;7>G+s>Fg@(L_+X*GhmlCrP*ja%?tu%6pyX45Dt)Xq%V z^q1uaD5Xo0nD)3jhrBVRKy|_VsnrW!j3W0!4@PY*8jPIpH5f4nBJ*-gcw2mm+&c(U zU|J#RrXn$yMkGuskTAZex~WJ^jPdqmDjejg5cx*k7t@NqRtp|jQ)|X3cEjQJ`>MRx$vYnNa@Nep>aa6G|$H;Ry zUf8)+KqS~6*2TirTRAIenAnI#YTD?<56^{RX*L}uq7Uwt;>Sf=j4R~Dg=}+8%Cj0O zi`dvz%>*Z*GG?kX*4~TBpgG#n_JIU;`c@R*SkI2T)5M}^4?hUe(Cyta5)nmqvmu1T zon{eM7wp#Di&$J-nuS@X$(P}yYqb|myevFL*PnVMnK^ELN#rzgsZ79yBA~-+KUb2L zHyI#Ahp+ybI)q5Xugha0);C(A32^262xyvLSQ%?mMCYL2g~HO_TjQct8iUP}0y2x1jj#2LFLk-Tsn14VrRBz zi;OHcR53QhUfAq{E|`|TF6~RIsTPz>fk+NnaJI=i7AOc9V#j_WK-UmEYYMtuVj2mP z%2Y(X&m?7q)tCy3{QY2ww_hWRgj3nbJoq@nfBaw|rR!mmRLkRoW4+>LZP<@*Y{iy~*zuxh?0 zyw>2IkG!zL@R66OfJVDgWj%GJe9sIQwAvw6$lI($p>VU3@>n3s!?I(xR`+VtMHlvt z?y~7pCEg(%OzI6$o)^(FZit2ev%_-r!P;jC&6>1Q)-`f{8VMV0PH#A9F*kPnCU4Cu zHmC;k109F;S-VUmyaF1b0j#|1CR6KyP>t4Hzf+f9KQ-+zOH*$!3&1riMF(8vk7aOS zPw9?3WV#xy(@pm?lP;CZq(sZ?jXuPFTzfJXtbwFdME({?PmY}4OVp4smAMrATD99U zjWGq5=}=Gx)$A76E6_aox|zh*4hmX!JJ_3vHn~Gci0Z?##d8|)c2HZCS`1EWY$n*~ z=ES!v;}zEAo|Ja^A(f`l;*>_U$hGi8BwycXiWH?k1N6v}>Cu^co}%UXBn0LmFsIKF zjEr5(tLkR}j3Byd z1>hzFn6>ymMfo(qJ$1>7$S(GdtR8ENt&t*6z9SXpeLu_WzG9}6+w^F_q2;Ib<1&e|5^@hm+hv7~s2_47l8qE>z z?NRQ?2|L++!&hHz3nuf}Iqi~ttuEa;!(l?%*XqEA0dFD!3k+6%Yq$2<@^K13P&me~ z%VT41i1H*H%;w+fc8JkBPEfo)9Z71MdlKTIM6>6Kp$170jfradA~J1oQN-kY?eIqw3g_yCvjF{tyRY-j!6(Vst*3d|(jM+Pb z1GFXh3WJe*R+v^wq3~_sFBi8kWbXuQ6zsPp))J#cj&R(jMtt_Zr`|6oPY*dK!31Du zu4$7?Yqt$Goj4`nG4U@tU{(_#v0jP zmKhejIq$X0->oc5v;U2c8t}(k7yiXh6TAN%;cfb}Q{!=AA4s}^!w+jJewrB%LfLke zvBsQJvO}xbPw|Gkm6lnJ~u?_-m1LrT9MO zXN)m4)tGnLq)<&ceSQ|t50#ZiiWd}Dg(_+yp^B0aoXajK1}$mCFKMW<0wjsaE~|)y z3PVZ?@1HIZqD#-3$_Tj6TNWC3<%B6yfTADR>avP*XTppLA@y*Ibjr%BYf9jGw5%A3 z!25JX)v{2eB1A{4p`y~7@*AB{O*MR|hHi#m(Bi^H&affFhYTBrc<@GCHb1lkzCSCL zgsRJKE)ES`ST+xSJqJ047MUzsSXj0Q-jd-gys8jFEUJXt-D(IX9=%PTD;L7gsmsw> zR8}nsPMJJ$hBLpWav|KJMi9K9yrN3<6{4rwYI;~^)*ZSQ4lSywj)dkFhYCv~aA{jQ z<;s~csCk!8nizv}vmkDjtDQ(iMQBlB`LYn)y}~tav0~sOxGLfpK~+D_JnF_|1qy}Q zBBd4c1$|@jvLzK&^Bw21ijcT(MZu{aLq&x}rNtq51`bu{O`GY!O)R|xBS(BSy7s_O zX<>DU2`wxxUl1vEd?6HcVFldU`fydnH`SCuwJ1B}qNb?Sl%=axlvAWMBu;>ll)83x z^Do|8Eg_YQL>I&Nt4mNsXS7mRjIUT!t4Q&=$S3M;btOFHmXty3E_r1kook~Uprjf& zw5=(J%h?JzxV;&fg`DD5ITTq|Y0F$|gB!mFzL-UsOUmX$X!WJ+lvk9W3%|o}R!jeFKrX;TWboYx&8ls1LQ!bGzRAtn{`N+(T3EQu zkMykSkZ_S0@ZpWdKxQtb^efVvuv;sc59Mh`XDhJ8h6r95>Q@cipu6$~!$hm-Asd<=J99dFaTpk+7q0?w0oN%a`>GrEW)-#YzcGGs`V7JIubhK~> zj{brLX$B26Y-F~0Mlni2Itet^9-dA-yYRsE&*RQP=b-!UIM|6a?-_VT;DO(seB#`9 zmxk{>uy>O1Wa2pr&qO@r!L(8woFTzKe1_s7f6AeZG93QLfA~F_`P!-u>$%jI9H`Qyx%f1KK;rKP4OCnq5+8ShApuO!9m zA;TEg{KfJGS{~y0FfBezkI$qD6D|x5tSVkSd~j$ye5_+;u`D#btbEd}b7zej$@#$z z@S#2^G;+x3A;UnQC9x3y<{3`X^0cIr(o<9Gz^ote{9`&Lq#1W)+S=stNAyab_Yz1X zEC=Wt@K+rOudv~BfPWW%?EAg=lWq8Npa&tX8w24BZ1@Af--~cw@38SpBv{hl4D|B| zmk$psU#E?~7vWDsLHxDxlbdb$0if?hwHfaZU+MAZk?GwCf6*VF{DO_2gYa)aK|2HC z+idt8gkOups@;L`E*ria;aB3kNfUmpd?}lgNYD?c2Y^2Y6=7i@eyNSW8R4rC{^LOW zMmNBG7g9p@VST0SXP zCA)G?1U~a9$9X#t{-zC|5B$f+IL=Lhd@Qp0ScC9uQ4xCw(oeSOKZ5YWV=+ew@W0IR z-v<0Ij(42z1;W2=!}kH7ccSAI1^5>T|G|(c75e$bNvP-e@Ur=va$Cx+xKNaGRi78f zZ6CM8)z?6fj0F7&XJ8Y7jl->X;agK`Q&WbglG>-+xuCu3EXSb*B1@Z+pW^B+3jC9( z;Prv{vm|lc|Q6Te_m52q`LCw0{{CljJbBmDb=rGxf)?Ig(P=g&5BXL6v8 z3_`AG$pc<>YSzDP#JO0rfNx z;X7tI&RqOj`6fY6GkXX0l!x%Mu!CO|kfXrLQOR@=j-)(3$MDiHq}iO>Ecg7DuVe2-r~?LS^l^7S92T@Tua zOC9GWl%GvYX`k!mqorPUfwr{VaV`dIX>XQfWxVV__zw}DzJl>1X_db*JgnIO#JnBuEW3A;4e$YNX7jY@2rJc!e@>^^z=pAEN6j*cy?W5tOTT7 zZne0(EsjRIl*_r$H>w7>Oa+7r0O+THG<3Vg6`;*4=Nkac6}n{>w+0XjA90hRQ;qvH zpm~D(J)k0ic%^W@Kxd-9D8FHV<_d1C#a#kO`8{ZH&jBhHx?O-Y#tqPZiQwu0DZl#w zEfCzhfKbeksy9lZOrU9il&%KQ4T9^_*9|=ZkcJLAT<1_(&OAUWeLWzR{;YJJL1Z~! z2c)^YACSg<7|luH_C z0@Ap{0BMX%Eba=6TWWE&fKcOD?6%dxmgfHaMXn0=sPL%a2WRDyc} zX^bZ=?m3J5y~VXyT;D7=?y-Q3^cHsoAmvwXamy^-dW-vsrQ2GoONUoGy(m_JoXYTE&6jMo5Z zYTXu>f^9(MG7yl`jj*_{pWxzd1*CNE1JZnaWJCXMLq}p>RxRmX0!ZnK04e8kKq|pE zEp9y^<@}Px?Y6iA%;S{H0zk^83XsOQ4^Tu>`>~~a+tU3BkfxU2&y9OLAdP#m#Z9re zR*U=8;ufERkwMbf3TUxFXNO=hU!YBZRH{E%=mS7=9oEjXPIH{40$mAcnLwq0v`s$% zXrbVGpYC!w1(4=^h*G#q~Eu=9|KaU-m$npTinS5-M9k*Dc#c+_iKy0Z;(s(5Fn-dz~cU5abwPQ z=_UeFx<>&m7fH9;(BA-3Ni)uIW1I*`V@$KSSr+%K#ci{=X@lLkvjAz_vFEzDO8_bE z7Z&%t#SIzaI4eY|O983=t^%Y|Ew;GTfRxKGEw0JpJ^`eq6*|x5atdAQ4Y z5Fkx$Bp{7ZYH`&TcfZ9wY;hGM949KA?*OD+?gOMUKW}j_15(cavbeO7F78}F8h5nC ztvMfOsD<+n0BPtGfRyta7WWb8< zwz&5IX-WUphJJ2CXN+-6@ESlWb1@+0_bi}WBuB4Wx>if~DIm?;i5I$Y2LRHzS6keC zi>tS|do6B<#l3EE;ju2iJV45?7ErCo@`Me2#)iIOaqn4NW{w-9KOoK9d4QDPWQ)7f z;u-+0ku)B+p}z#Ax!h-Qe+8smhT|JpIbQ@wajyVcD_kaD?1o+mNJAG{+)_Zwd7H)k z&eB!m>-kpUavz}E1bP^druH*H*9vZMu8X?>kfw2k#mxbvX*^?bTLCHEh;eS*sTL}= z&}Iu=Fy575JRp_e20+TC)#5(2xFaUGblHFk9gdQVEp9a+jr(_tJ8YsGBRA|qF9Fh= z@3y#iEc7WL<&t@c8{;HE*GOtZEp99z)m53rMJ(>y7Wat7oj=KO>V(T`K$_n>04e7m zSlknUl=Hh5*J^Q@lij!{0aCiq6c=|6AjQqMxC)DV0Z_e2aP?F-#(Y2;<1UN)4j`54 zeT)0p;znHRw(gUrxxK)ZfHX(f15*7RKHbF~2S`h6w8c#TG*@J~)Z(rJbi3dNU*^WW z0MH`AMF2Gj^e~`#0`0bR?*P&?PQKiYI}niKYVurM6p-TfTHHr~G`|C{aOp+>QrtL; zn`Uv3&T#4WTIjSZUEH-6`p`n308)OVXSp-C?^>t>km~R9*)H_X)h@IM1*D;)u5+RJ zfEJ1l?y^uSlma#2+u$e*onoP37Rt5Im?D?oL_jLv9E)3EajPuuc0gKRZYp-;E(fG# z^esSTBGm>!s^?ucv;&alV?Q8G?V!c=EpfR_THt=Kt^=eoerTa>7V1^%hMr=f91Hyn z&>bSng%C-(Txp@3Ec9)t5eh+H@^cIA0klqVp8>j4pyQB5h1LU7em?=E`Pc(!zR;ae z?(&-qNJGC@;f5Y_lly&sDj?-@HXx-7fx~6OCD%f8EflrTdJ8pKsKr9u08%a?3*}m9 zu7#o&T5q8y3$<7%E!pKa&_a_fRBE9*3q59`ofc}fP+E%1Z?uKxTWF1i9O`(Mry2Cb4LKy(n(9g=Sl5sf8Y~&~6KLS|~Hk%uA9Ja!JlnpT|;T~Wvhju;8 zN5F6s*NgQ}V7_iJ8jI`9{rmc3^#f+e5q=DveLa1opU>BTNk7Vu$phxk$M`XYz|6|> zW2%6;?pQyj7MLfG_hYyxI_*S1=26m|s~(ILnXW`OBZ67`?o=0W)%l zAM-gd*9`Sz4oAtf4D)090aG)=k2x2Z+wpbcapnr}Yh(PF%Ypd@=D!}zTwr!%&g)@r z0%ilMm4~?nn9A{f4DZDMGwjE3zi`$hKjxRfd@{w4;hy0|Q~j9V1G6fC`5Q33F!N#R zS`)aF`q(sotW$vbBbuluA$JFJFbnZ8(}1}Z^9>Jk9WWu(F;rK>`6ghZ0nBP(Uc?;1 zi*-LRw5Q?4dIA{Uq$CYMJTKvg*C{>ByTI^HrHAoEn?4?fuIhO+ z$ip0gmi=IvJ!Vz&88b8#> zr5O~586AhYG!Aop9Ht@;vn+rqz`-Utf+xwlsox%;VbFbXm>5fs(^J8m zz7?c_JVlkul*H=rqW}#955{4Rz$mYen~Rg;Fz3f%rp947s|fP>dK~87ILza5n5H<) zTXC57ILzm9n8Q)eg7TaYhdC<_bAB8q9EZ6w4pSJ1sffeCwo!~c_rzfy3SbIw=p1K6 zV`4oOpkZKB9Ok!in2+Kx-EkO>4Ene=;k-D^*Z^h{-iAm|(f{U~Z+3>$pfgJ1ikV-Y&Lr5&&yATW;r35^lUw{h)zBf6&SWt=p9L1Kz zi>itWNa($ll$DoNmwNAdx>AUR<2+miaATVmS0E?&HOkF6-)~!@#B!UZyv)ZbZ$00y zhe|b)%g2+%9Ep~5xDwGIa11`Iaa@Y>fV3m~e;Pnj7&6iuEnJ%Fg5F=>1N zQ8r;hUI4*U^Z^7f6a)~wI}kt=&z@2eK=8sr08u&l>goWZ;*v{(h{_4$rUfXfV-b-l z(}VhmgmH-6uQ54Q?njjIn7JPzr^fvVo^5t178kQLE8JH(sLnIbiYUfu^{V26YIByk zK+iI3nA~Lu9w82JF^7u{acObUjanrN%5fe%9&7G6h@7ZH^UBJL3vh5DKg6 znt6!>YAO@s3m5yFosUyxA?|?`4C5i-0y&qQIKGlCs#zE*izP+#j1(A-CAe|Gv(cv3 z#E9)<&Ex+CGF6d08$vep0tWdgwfU=N**kgaIe*wFqe;P4M+&PVLq-8RQlkrYnP?Ko z3;alrHqbYbL*kS!@bk2>FBsty6c<@=w%^N6RWUVVQmv|3z&k{^2BKx|BMyjpfssd% zUPAtix>*{Nn0Czhhv?gVo#&Fms&X8}_et!P2YTs(qD8hY@%%kHW+ioxz!&>aJdR%w zV5mL2FS(McV$+Cli3kVH3+Ca7zjCZDEGaH3gsM!pE62?-ikR0aP~-3d`+60xaN$t8 z#x=LL3QS6V4n|y&ZC-IX&e6M6tVhg~*PHXr>&oTsklch4vIT{U78M$9yj5gEmX#Zg zFtXRF$3!kFt*XF%4qR4?logwH5kum2_hm&z=yTZf_mMmSY@~2OL8NdV7I>ug zF+fDJqX>2HYi*_gSY8@KsO^ZtH*YxMn>Uv5jRQ%6nHuoj8%Ox&4I+H=Mi2?JqlIR& zq%zP!lY|3Gfl(9Rz41ie@Fi7X<`;bTMhd=_GgKxr1>T5JSXmjYnWT)lN1|$DKPDZK zy{RGhJlryqTC4g}1v-6EkHBq6(U6LHH=Gv=g@&Df!SIozh7TPvG87t$clY06Lx+wU zH7XPuK78l}2*NYB@3bVH($AdY$l5u+Rg?T*ik#6k4<^=ep2FG)pD*wia)!?Je=SNt zf`4+Ip-uiT#snmSijvOv)kx%A%n$dT8;p_b%*{P-WDtktAt&d8AP(u~o;M6jK)z=p zvbqp-D<>)PJp7O@zaIXA(wqovp{F|$IKs$uYLeSwkO4MaGaLHW*F6rx1{jI0`x$_Y zXJ(|8)Hgm&94K2SJBh?6}}E8v0$i3EJb-XL3mvksb)NrTUEO=QzR&< z&#R&!L5l*$z|CY8YMl{E#e-=tF_DWzn?*>72O%LIgoK$d2njn#5E5n#AY^AlcxVFg z_WW;)H|r{xbG<`U3W1P31VZvLTH7rG?Gb@?ia@(Wpr(fKNbxQ-S`2XK)Q2}WgmcA! z^Thh_hKBHDvHLr%KKulAie#L3!;if?$69qFrhYra82E1Zso1daBMi)zz)f+1>lrve z0-NFjA7CI(ZGi30xWM}v$Y%9!cz0~z4u(yZu;$pX7a5i>VJ)#?k^cP~@*hEMfrr)g z^sw5H{{Y^y8>Zinx2*c*a7H-?j@ROR6y(AN&FXC|g=?=bkg6=j@&FK0PyUO=(h$z8 z53g?s&x9#ZW^JBiZGCLkL?sAHRD5AkbWi0cisr}gyW#lqyO&97;l`I=BLlT?O5e{o0XKEc#xRdYR_c#3lJkg-dHCe$)z%FLNDe)FRtbs#h6feC$Vpl( z1=%SCR$Xm7@XnO+!(Z_Z7B4TW09VC*RlumWS@@xx3Akkv!ieu9Z7&ALhA2zH7=uH3 z`^!XYim-wY-`8m!2Ci_yA`=Dkj8jtYmJIU+6Ywk=bl*CHiun|dprR0TJGC7!>gKDL zH;6PGkZI!;zghJ(6Dm%@)9dnJpQWE+;}}WS{|I$wWu#x;$7ep}~@q zXiAE7fKSZW*sV~%jEyKt;!eoeh#`?scE(1GHV`yb1|@jBVsk_z%tj;3LSLGRcA4IA z-9CVR?>vz(qk!BeNl1NJ9Eiyas*=z}Cwr818v9dv5jru zn*K8L3OOqeuU#>aeb5|iE3i=+8*?xNf|*C{ihj;g^ius&R)$!|DJE<5@ zSA?9Uhpk=_ItZd5c~J~`CmMv?t5mbbX01gWBtH=DG}r;cRCNr}l}lVbe^aRQ2PVA& z{{avOc05~&LMsZ08I4JIDbm%R3jWkX%h%En6{7nZoD^t%<6e;lEssDf*GFQwo-WPX z5W}Y;>M2Z1ij7e#wKkr{7Q;6`yS{Osz@`B;YVTrNOXJ@ptiKyw3!_JAnRnKaC;><- z-PNubDVNK;A+l2Thp?$`GH9(xDS=~q*7Ews4mTMBZZb3jC5MYGCo+;lpV1lKRD;y2+VLB z+p3lb1txaBrpGeN7G~KVGdd~}X6S+qGoxrrlDV zD^n!MuI;x{El{FDo!_M`i$;8Hoi*N+6DN}CCPDy-pj$D_V(5Y2A&Ia&SV?0fX`du9 zg`eBNv;AT)n3W(mt`gV|S;lQM^(d8zOOt$SZIh3`P4e-#`K?dh4L7~@^80P?HdjeA zemF)Y--UoA+GL1iCii@hsC^l-kj33uFvE-}9j|Fe<8>W8KnD9ekB}2|A0fXk{T<^v z_*sDuY2|=%OJ-}xwT~=>FBy}+*{q|h5@uixfLRS6|8qhc_r>RDpyEI{x-kaRI7 z>nf?&^pfcbM90}Ch$t||*=+*5_?2<8zY2=}=%@RIX)X5bj41*dd9V;rFGwHlHx=Z^Mo%a&W#UC+@Y^Sc$g9aCp zVE2xN$%UkQk&ldxGg9js?+4^^P%kFl@)2f6wj2JRew74ygppK_UpAQJcne8dy$-pM zG+M;N#0`sO$SEdqDC=xa+JU|B%~)+JOtOgL+|4n*lfwQNBs0lI*7n=(5y zU&YY%rkJ|GK?Vs9)k4%YFu&+Alg9+(Gi`aoJGgWV{ezOW@erX#K}%rw0(m;zQAvdj zO4uq+uVFX6BSua(k-Q-HcGx6lcEOsN2cuS(HK=VHKodyN2Ba$WtIu05KnMIT3(zWd zxlJ{7R|Eak)K*>dg;m=z&~$GJ`_EI5xI2_f%U>SMgV(pBqS~6^w)&dB{3LMNmZIOM zc#Z662}Gj+Xgm>}OUAmt`>|LUHTE1E=$}hnE1p9aS6R!ifvE6W07r|T!O`L>I#`3V zWHHFvNz<>!lO&u9bPnQ}ua?N6%*=jB0@Vr4Z!i0Sn8LxTrqqD}>~m0)WVro)FsGY{ zZ~IxQ$v_<$N}<_4ND2Vf+ZiN@bBbk$Um0qJq*E=!yYtMchNTxTig=juu1kLjfHP=I z{Z87C#W!ddu~~{m{@||xpQ4yU^lD2ICJDl6Om#WFc@qaE2fv9n1hd@s6M0V%6(7KM zp0_74^R-QIBWk@=F(Ykv;GcxVxmoCX`u7mzrL>P_ypOCBlVfvK0l)`S%36`Q%% z(FzZB9MAUgpB6eeO^vC69KD)lIiy)DMxa8gvqW26wL-ru9cO~fa#4j`8m8}w{n}sv zgZCuu-rlnoGVXj%bR*ehr35>$PHy>oIF%VfGM*rhc7e{y6ok*(227-6#p`$BLZ-8M%W~*gH^L zDSXD7DB}1>Nhc&qiD?ir7rbOOrk;qn>LNr)CFGw}piW{P;Q_G2lu^2E!U-pf7{G*% zGtH+&l59xwJfrGdItRWkquy(9Y7OK2I)j0FPCzdL{bysof;pzFfR0ukC*&m8!c_BW;`P?ol`<-4O80M@HnWkR&3Wc}O2ZAyM*x@&%f|r9Y#jX{tp-DSnfG#z zE7Nq^OV=r_ndbV|52CwtJxJ#irjTMLf_C`t)y5O~WG0rA2}G%Xj>s~tnVyAq5$g*b z61j7Z;L_RnU@qHUkfJm^V@h6B0KY3*+@RrLY&U4_U>xOk_Li1ZabTG#>wJA#J##S% z=#+3)Orj@AqNwBS0lVt>FXFjTNK0h<^q;J6`xQD})YIW#;(lIEA2UXR%qrW0^749B$+Y`Deu zRN694xtqE`y}5l4Ve~!l5S9tIq*-upn&o7yeF8o%r2U=bpH)=_)fwoWbnEG4w$i#F znNB0`K~~uMYfdBy4SM?;vXHc6*E@4<(=s7Akci+4RCbqOq)ba~t5FW<$@PmnTM8O5 zzPS4tST>K69jc!ndNPDc7O_0v1+@;mC_0@M49licxK zf2`F8huWQZNIK3m|88}~i2BkHpe+cE#58V+z5zs&Jg8_9$)*E!4*Xyk+{gHIiE$5_=5tq@_4HCiJ)xTG1YN367p%JzYAm4c%TdS zt8W~vFfxGri;r={W_Iv4+=Oj}QjFUsdk-+TuC*?k&Xn|T=< zPOtehUcPitdD_&L#skPEA~Zz10YIQkPS+a#vq9y`plogVhPm*J>rl}hU{GOlk}d}o zI2Y6Yz#CL3m+fEK$%ebyK4l#4j*G7`)J@JY>}M3v+jCRFl#?g?HThDmrn8{@uDbDv zjFAZyyoPJ(J95*&1W^FVj8Qs2g!`hBAa1N+7i7P3ZwzLii^`b|lXZ&Lc z?dzn8S$4+*!ZHqoGqYqYxQmY1+j|su2-4^UG6qX`zR_A0}PAI#~lcc?xYvE=ArG;utXzom@?GZ4ON^rR$b|)k;>XhXtbd?k68c)iV zU6rQjt>tvNeB1Gj18S@dxisM}))6*Uq}PQRdov)j1c1YR`7M^K^xAAcG9|T(c*6T% zs5e|E!Z#zn8{w$4>LqB5Ouf|vITf%EC*|6|hA%sOpUZkd(bu9Cb4!YoO2baX6Lt$1uD$?8oI&8u;=;mb-j60m6=!Nume(yrM! z(O!qz7c}w+hY#trsFGYsF}B|#J(FU58NA{4N@t=`?QiW0rlg80&GiPUQT}Pb&|tM= z&g>|rwS;+~gUEKA&h!P=U^5oliGnG_myg-JAg}gmNUhfr32KZ9Qav{zGTM8D`yRbE z<0Yoxm;#e0oz*k9SuvO4QhWnv+nE?8&4g3c>@N#Me!wjYC~Lhf3wE;Tq?P|8iP5x_ zU|1qS`cG@fU5evTl`?41$0HXXh#YY6;9cUcnn)XECD#ykL?@zz_!!TqeC2|dkim&5 zUXc~Fir^MAdJ4v4UfEw}Zijtca%rPw*!IPUg7Kt2A2UR!F8on+#YdsVz47l#`FH(d z9Nw|cX!Ac(_r#|2X&)o2xo296?M{dtut|}uBFANH41a`ZkXVJ6od~nweVbqnE2$q_W9mn-Y-kr~PatOy zsEl=MKf++|b_%-lAm4x-Y0y+sQD8AdY(RU!+(eCS$6YVK*x1MmU7_&{Yl=fxJ03h+ z;Ym1*U+xCziwT(lS0g3@L4%!DS{AX4^u>fo3fK6#nis~VjS=^r15fOS=2yVXe>vO@ zz}L%-W9h2F`c^O}`V;yVp<4@yug(YLj)==wuC^haDaJEKCEVLYAS_)a3=WAy8{<@f z{t{eoABlaKFdd2EOULrXrGOYGEP{j7v|b1h`)MCLfZCO*QND!6Sa z23e0f5r*{of;-uXe6j=+t^Nu$^gd%%$$JoRj8PT|V$_F>n?E5k9%H7f8zi5;>C^=k zVM!@|X#b!7VZ`$WSSR2bGL9yKLB>^0Y?xcp=9-EtkU^{7)b|CiE(RRW7{^12bOt9B zt{)qX#=AQ`ltC;lBH|KSF{F<#SI|~R=#NHj;#M;m~6UWM>S#}7T z`KW?$*@pX=;%Ub?B`QQiz->fap`*j1!gBfsp}YvN`GQdw>;g2}jbHOR-Y4Z`4E$2Wo3*f#0v zC_v;TZ)Hy4TgYo)3`DuPawVjNyDn|s3(Kk_UqWkhA~DeOcy+?Piq6qeueHli>P+x; zOFldtB$abOhYLBnM_Yi-ejYATa%3-q^F1k0yr3WW()e&vS5qYM7oxyMImRVi$nzoQ zVouK;cKU@O@g`RapJ_#`MQ06Nnmha~=0qR4FDSR#IdgDinjp6XMibDEG#d|9`{R%`~#M{vAADH90`%;ZM#R+wi-sPk=cH z`xE{i#Ge=cyAnPasO9)ugSqB?oNv1ET^}R2iPeAWV}$fi;O``C;?ZhT9Q`vv`hFnU zi@y&rU4;=Sk6ztBi0%IaK>rKj{I&d&yRH0OYX2ubk|zejb8R?}Yh8qO$DYFHAbd5# zkMhf#a)kI?ko*IG57srfm1xty#Q0cQ6`!9cKz9n3N2UhkxkTjY58N(Tg=*aSe zpNN$Dpl_Ql(0!inILVyCyLwOgxAg_VqreA_gheX^+wkPQHsAcp-kae#j|akkXv1eB z{MJm2TY>Pf4UZuFcL-nU&v(krHvM}MJ{=1{2_ZBP71B7F3*u#kkhVfB;p{a(x<>)lL*zYSYt@(t^DPX$|bO%89;A!x86iauEN5}kNr`q||>9F<$*vgYU!{%oq!jC#bZIFB6OKkXj zgx`ViKlsy0c|-CW0?RcBFB$-y`1wQL%hn2l(Ur(tix$yAXc7Km1BB{!WB{c!=;;gny3k5&rlUUVQqx zIrkj+squ%a`xntKecjAN_^p95RG&&uBhJ_Gm*u>Je{%)80(9d9x*3q-Isw7l9n4^{ z=NT`dyiBaPQ!H+f#qntWc%i$*;<#a?xFU;T^9GA#kE=77Z%qWbx!$Z15$oxSlsy*hus!KH^buQSX{Zq(YBoO zyWQeguNC(xpb3((w&Afy+lGs0Lm4JmLQd`5Rl6JbBo&y zNaKD8Xp+SE43MUA9L6$@dm136n~n9L$wK$t!*oQ*a()d+>2?B|Dxn<~x8LGM^mSw8 z0lHM^<^$5W6@aD+?jArY!E-kBB^%lXXqwOsJly4%3rJ(k1*H6L1f(+G1xRE3$kOew zbgx^wB#fcch4Yz!rU;Y=NIBmGNI5SDq?~^VXqwQSgSAZ!9R=tz!A%0BTowYlRB&7a zRk~VBcdw;;*3!LX>2_PXESy^q;VHp+-ghrFd(h58v$J*aXSEMj-J7MVTRyd29zt%7Z%qavjxS?0;H18 z19YX(eFxA?f#@|y>6!s)S#|fjz@uqy1b2cEAAP11r%>tyQPyk3{+yF>p ztOcYoegsH!bOvT4N;d?M>ZJ=1N9-);h~wPQY(P^5cOf86gF}kOJsgmRo(D*!|F(tR zx6sYmZs=w}vxMJ!fRsxcAmwt#39h8yu+X0@v;Z?C&Bv9P3u)Zz0ci>T29W0MuYhJt z8Yf^N))>zM(iqzSX^dMjW77OS2uMR82c)v>0HpcN!a;HkJr&TE!ueuAn%}DcX^!du zX=;xGx?1R71*BY#!u(4^ivTIVazL8e?H2b#^k;F+fV4*Z#p1dxuFvUi+@k?0-Dws#*y66YxH5~YwYWPi z?jei&sl^RF!%br>ple0u*%ns>NYi}>kd|PV4Lt}*b=t4LtNX=(RQIm|($e}Ake0%~ z0ci|+*HOBA0cq%ifV9lVpXqu!yB(0yy#Pq*UICX7#p7#1(0CN*C zXCLE_wF;O{jQSp*b-;|oNbh032h5uoTRqHAfVmT+sE2tLm=PEeJq*{>A{cKx%~*Fz*L2mB4%!z}yDRpmY439|I=OV*FOkpj_CJeiQvLYn}J_Et)aI32j^dkL+Jx z1Kq_xzk-B((CCoX5P@U=p%= zO`TYdo~dKT2-<}V+S=^NE+pf{nt+sTA)Bs*#^f+)bJDZpDcr2JWqGqUG2OQU$p|)i zMNeMtJ(J6%l!F6S2EO^tP{tUkw5FIPjeuRvuVAp!m@wwnaY0#ifoz$2VwIFtRl7zm z5n5U{e?Cl&yGBDRU`CZ2t5(vOUDU+*0(bva<5d<{Ey6*BMK~K!f?Z1^iX50mMRe=o7kAFQp$o7pTIDb?6dyq+Yl|# zjZYX5zu7e#3sz=_*AqzCE-XU^{A|PqY*ArRX)&xYFZHNJQlP{jZ6L&NFgC!6##wPz z!%Z2#^NS5fut%WTC_O~8jWPfFWfo##XO^aLjmhhn$k>J#qwGdTU&9EPluHI zVdyh<8)G(Bv*)#ARbEwbWkr=SbF37w>Iw_^*0iwC25@0@QCS(zi&Wsyh%qkgM|s^= zk(7v*Q;d9`v0Peq^)Zj3n=)a7#`l+`Vo?92zzeIY3YRG=&L*)j@hT0*1p3HnBH!0A z<7~`|=1hf^BLTw4ln6{%SHYqO7;S5`(c)qn_i<1aqq1LrKYpu?n z@7kLk8sg(xogD?6*n;p`oz28-8lUKR;;qgO#n(Y9CTjaIE9b)rRLJ@7Tb*sf%xNT6 zbNx?l4_0Tp@a5ru5?P&X!bGw^);=%Bw*((#+3{JO#qnyKaK>TV<@TOV-g5teU)=HI zg|0lPA}6!P(#jo89Lo*R^2oSL+h+;x|0`dy2Sr*Swnw>LWGvO{kz!ow^~KVozssS4 zB=QI5Tm_Bxtl9*IJJFLZFh3bSYWqDXM!NLeWFr` z4*M+T`DhJEZanINm8xxkgT+@2OkweiCB zY9d9lDi4IGB`io=l|n{P6T1Uv_EB27X}GPNLm|TlM3Pk8bJ!8?rm}d6>;O(o@88X+ z2Y3wo04^|e z3ZM`CgJbMCUH&Nzl6FHk2apr!rmO0AvFY?#f>ZBlVp<`c7C)#P5g@4sx1GA9)HkxD zxMan#+T%8u;!+idex@B2T4ip>r6$Uiv2i!jP1>EYkuqsP0iYo7d4gyz@o#q`N&4m_ zXRO_23zVe@TM zO3MZ|ufPW7(Vg5r*w1F&)TH|9%FK^;xu+QJyOeuod#|>Kpd5MYi?X1GPy;j8a%)_$ zX--?Y!U*cipzG`_v$n{}l+-@m$duAP!Jl{!GWCFVMRgVNOBFS{?G>L&Gc(pci&she zFeT9oq;Y9vb1^s^7JZvxT0P)4L|uUZ6rF=xPT)c1CsKw*??S zbV>MUT^{+pO@6$!)rHOj-4pr!&B}+KBV+9c_B9Qr9Tr&AF<{@(ewlVob>X)J;Eh4; zqHuW-?BC+;LG)g^NlGCXEcxC`0@mgAQX+I-kfEcu>A)Uuuk@5(Y_F#w#eGb1pJb?6 z0H(N)8QP~QHj^<3m?9}8MZQalcx8$p(tB$AFm&Ob+TNX|eKCEvZvo&MgYIIQ^WeH2WTu`JxT)HY4*R5^ogD!S|Gk#5n)YxAN z3)jF>VNS#Jk!~6o>oe9&1_6LoeQUduBGcNk!L_zKHDk?Y!KY=c`3yi?k|f5G)ou}z zeO|vC69(K&HW!*ehMRpd$nnxodr~8U8ln_{edd<7Ujx$G;pb7?lHy*EoG7H7D>%!L z%Xmb@$Jo-H{6C45`ag-(`^zHroa2mJGSJM$!gPEdYFjewMNr9ghskvZ?hy8nYh>Wi zkq#xxGRV??u}=^b4HFu(btUgdx&@0H?ZhT3z!w{9w`IE4Pu&?=9*fGm9(cOEF0F0J zb#DMh@l61vogi{f&KrDr3ptnDinqGFN?tft@FwltIJ@q%2^Gp|M;k>73+?nQ!p^ZF znhhy2?M1Hi+ML{xX2ro|dAf$BA^LT=%+=_g{KoZ?g*fb7#&gwrkezoncwQR!HbQc5 z1Lx`sm+^i_WlhAM7}t0_P>%1!s*1|0G910fl^A%E2}PDw7E{hcKGEE!(E7P8nT>h7 zhdx!=nN~M>=fKBGTeI(<-8_2J((cqX6Swt$Wd6RaduQ$$xgpY(e#f+3gP&N~(eHsd zdvi7~KahOO_^qcuH1C6>@0s!X@TaT(-uL#Yubln(4IiKQoon8{@VT2m?|thf+t2)A z$)At=)>Utg+PL_$Bk#QIw?lqb{>drdzy7_8pI`a!q}AiLoc4plKOS}W6|W8Z`AvU2 ztbWSNgMM7rcEY!>erwFL%l_GGZTO`Dj~4&w*l*_l{`_Co{Nspq(|>dBPZ#~=|@voHH2``@UaM6dyeB;VDM*O1s)59Asef6B5+}M87cdvbC?61E5MW5Ry?Kta4 z3qCsjzFB{`;F%@+Gw!@z+xyEO`HGFRVJ~clnM zvS!}9r~mv%_Kl2e=t`Shw=;Y8{mlbQA8Q@GbW?Zwv^#e7oAbcl!3&@0$XUMmK+?F? zTaLQo?$=H${J|fG-SqRn^$M?j>Dc^l{(eC5qklTT=9m9CY)bvhCtUsQw+5B{xNXd` zXa9M`^mV^E`MU4Dd+ws2{^g<-zy4S9_*=FfJ>#C&PoMYD2g9qL{(J9BZry&|Ro{B^ z%#t7edDP;KpY@%3`zt42^PRWPzTxqYFTDA=&yT$9&flJL{rBG+QvS0~E?)Wkzf&gE zzIe=)-+1GUqK7{mQT>Zg`%JoR$MLi7`@>lae)Q1=OP<+(_@xc6o^TpR|wt z`mesoxcsi)om%kV`{z|W`PZ+ldf}jx85)|KH@7m{xc;f8-7TF-N1Zlo+!cj4t-kvQ zKi~4&AODto^y$OL&zM(r%RLW0z4i4E{+@Eo86zfKSyWy7jfa2n;u{}+nwr&rQ8^7N0-JksG)py#zNbff|XWE>F%kOyL ziOswAb{sh3%RBXU;pOazx?aSQ-)l8+4bcs@BIGHp8xH8pZq)H)bqY} zc|pahyB>VhJ3)JmcfvFW=+p6s4K6R-cY=2g&^+%j${(%=Y~=*%a^TnCPj;l-Q`I+k{2xHr z)A;Kt{$_;nJFKVhy$Cx6{oCvKwI_6we=7;}1L^?&IuU+pAbgSy=P7EQR}J~Y=Xmnv zApF`xgwH|v*Ad>6{+1*B+X(-+pMUb_HvI<>ejmn!(m?op8@?Ig2N7N$2w!W%_adAp z7FHk)oBxz$_Js5Sg!jUl$V>S3!nepN?*2g0zSb)k8F&K2hV#_5snRQFTU?q$0G4i{n1I;s!zwN|$4yJPSR6)HU=OKpGuo-a<_lYOxTO zw+xq%g>o%4*FsSXt+!B7XRB9pawkzFZ7D{+x#H_ADVEcTP6C>ER zmwKJ#xVw8JftiXw4->{)G=SmBuAc=kC3xExz}$kj6Omt!&pp6&1Tc>R!&3+z4L@sV z1u#4xvLt|EI^PUnJ_Uwn#63O$Mdnn5AOO!%#Nf}voK6h*c$ksE@RYd6Ck)IQ5O|nt zfk{GZ^Dqm5*^c(*Vb%h(5;f4naGBw~0OomMJ_}&p2IeTV4~-Rn0^wYQ1rG-N_f8=R$?}LNMK!;7Kr!TKxCcv>J|rSxr11^u(H&6QY4DJV{w>U z7sCr@45h&?swg+xU~rzQI86YrDk%0S=T%k`HXacpODckhl8TzDAcoTkFktq*+>#@9 zu`01giCdP%3vD{{Tm^zcH@wWPcL;>7KyH@0UktJtX}t;RbVLHh#WFWQy+B;U)`$!% zs;R0fh6iT4jrF^*^@oXzP!rg5k$anD^j5f}tis(j@_8$SXF}aE3ho;X8#Q`#NFL8y zA&n=?n3Z7PXbx(0D*kwLi%(zt{omL(T8MP!+E&1n9Y^+q*!}vRp@4aI%Ks$VH{yrm z0nqV23m>*nci*TZTfQe}KUA(mib$!BlM;9MK%y-7a?67#mdX*Q;51 z6BDc0CKxXa=3++zAD*%?!QBsb3tU{Y_MWjS4I5UOYLAZNeLP1ID!LR=xd%hG^5O~; zlP(O1LGZb<-fhh|85;M)9G}n63b*~s z&x(i*f_W8@(vVE{X_5qI2=t;pX~oqkF}P07%k40+fPZk6xrm1u{wv=DREM31t@7q^ zIY3Xs-wc0v@?~~DN|k&Yf1Eqm`18E@%Yo)bTz`MK??&ANz<-E8(%JaQONGI3ppL{} zZ|5TX%T3TM=O+BiF(gaAGBorq8~PTY2yY@ z&|Hg)T4=q663)1!Ujm8m`6@H6L7=DRy}7|Sym9^B!%V{)>!OF@sqptLCVpb|4cK?ZKP)9ahngEmiGxPx2JEv)9ei%Jubdkclt{xeIK`AKtf?;bVF=!B-r0L6 zJKx7!&%=vw^tl$EUtCfMC*cLLcuhyfK9|IY;#@#u;3!bfiTMtDxQAOfrm@MpqnbSn zaY5oSZTR^khYgPz(|CF78Z78Zq+Qm3uF12NvHJxFd0>_w0ux&dI2XnRNySmPB#nP)_Y~7OW^2`ABvQW%h4G5 zk;%3BigL#(Hxy@2Fs7X=*`U!%yo5M(vy%qWN4`UR?*L7WLLvR25H3{{h8x6gh2R9S zQ=$LZ^`SA|kHiBBW5XtGfP>Zx(FTBZgSDtEE8m_ON1w2CbyOXtIN((Zd3LO#V0dq-&_xo6);iG&`BvC-n0x%9*yK1CrRNE=(ik27k*5=IncF^O5!ma)rCZa3q^JF8(vsHa>v z8Bg!xwzbD71E?lM8YMZ6ZU%ef&(wJCL>4zN&BP}8HC@veMQESV_)rwpZfaGrv0udv zaJL7EcFIdLsq6MBNkg;+fOs1R3wG}iIo^xvial_w8tbXY6(ZN>q@gYo*&@C%T>*%| zde5%ykU5DWWltSD@#d;y8(_&_6M#cAL7zq@>;`(>LF(9kh#j~w5zUt7W*{Wd#u|S% z?foS=7EnX}zAYc5Vrx6d2nJ$thz0uM2N_OQt@^Er+Qy|{h8X`r`)Kso?>UGL2Quy) zs=Dc!ioV_s!K4!3bcYC@jgPoP1n1(&*d9{UX`>e*vtEL}#0wO?TKZjCH}qKcJ!cYr zj%u{Y`;zeMVTXfG>tGw#?+zvF4hI%E54K(ZC1j%2wckMo4#lh?PO1Gg(=XOH!+DeX zQn=qI@JJ2bUf-DnpERk5sCzwW!pP5Q@*yRoW2l<1ACg4H^B0*<`kfFDBTPEWu!kl}|!eId+W=9*Cu7G%{v?|OCBLK#1)p^3_K|-3Y%~*4_q_1-d&}y%& z(>8e(Pm78AhX3DywX%zUGo1GMf6##I{(l4hKiz=Yqx`2+8aDd0xJKXkH+QCLd~53X zX&bd~(kh8&t!rF}%^S4j5_JuqO9Rn(t>dvhNTr9x>+*2+k20DwI;rxeC*$k#V0oQx z-7%*@wBCA5r(@u{*ac8u-?YO0hJ!0bWF#B;;G!bexA>dMUv)v?E~_F5Uwm{D#`br| zXgb^l3w85?A=Nm=r2m4%k;xq2#A?@`%?Y2TJEBcQhs?_!!07ojgfkn+i^)64*zc*@ z@xo~*zv?Aqr$3|>FMK4V8GvQL37uuof)~qxvpN%^CdEUdQ@9^m3Y|!u!!Idh0hYgD z?|rGlY;}J9pP*6kXOi4L!q^U{>R`0HA5L2a+#T`DSbZ#XqCB}iU9~rc#T;K3FUH6@ zHFerA@^kJW=Z*m9FQ7Z++yTxQ5Of08wd76X<{6g#m;cJ7H53&1u)`ldRpk)tb2{jN zCH(hEAdVJiti4S#>>gsp>28{ZbK3FwsJPxd$$cP|xL$3G!NV_QH&4EG%R%mLoMp#h zw?U|{-8{yL_hcNgt=)>#seJ|DA@@PA)xRPK>3JqSiD$c^q1LMB+WM(<5LwQua+TGU zK+cyRz?WZ~R4g?})q)@E?SZAzwiOr@j2yme+R`EotWyPqLJq@;_I(J3gs~J@m*I4s z6fHu5!>>emJaFvPrNCL>7EF?Pgcw%oS^b*@v)6~gT(fygs|rB1bV^4chg$)n9QPoU zM_uuT7QcsIf*q=yPE-IWC*zjkzIH9Ouvgp9%v3`bEwDnwnmoZSSQ~^&(8h8s1I;hSzDd-b`?dLXQ8jK6UrbxNR`8scR$nIS5UmHuB&g&c|Zb zfoxjlZK;s74ayOw9#M_#jzrlX;8g6AK$O?egxc5(`1yh=$oMCu`eBeN1*-5fP7X5W zREqZet+XjPpc~}M=G%Uyj|3|_0hUQYmIFwCMhtx*Hz}l$GrK4tUI?m_>lEs?UC*i_ zfNHM`e+EW);dQ9G@IP?C8Greo;plN)ct76u=k!^ObL$-hn_9Vsh#*|LQH;LUHuc%k zswaOtvCY+RPk*X-YZ5wcegd$&$39#u^hWg}F)jGW_4>vmo;kgi_fT;e8($Iauqoh!NmtR#zNhxfdb=%q6V)%1_9-Y54)OJk%Mr*)2t^%^OdaVJS zOT>4s%ES~D(rSo?kZ?RvLv&ydcy=f8^gD!)VY)*i+ZV<#FUA8;uu?%* z_yeJm@c0Md$k&(+cdil{X6Hb@K|gJWL^BhCSLyc3n-ln%;j3>t(h$X{GkI1;c=AZk zrBe=>UPw8wJx0jrP^-4P&yv~bJNb2aumwe!+K9Y>g-`q2qn81fM(;hi7f3i04uV`b z)Q9e{x^HiCGfl9k#MV=?f z%mFP>1Mo#iQX<%F314@Uc^aOj$gQ;O+Z7>rG-yoiVDDz?$j4cx&=KTdPcPT_TgVGf>5*LWN%@dO0ljYzu2Mg zjH#NY#gYK?-K3Sg3fB;2jXWeh34-OLhauVoZ;M~*m-GboY(CCJVAic3bU1NN7{E!i zKY&LI*u-65d)!D+7MzGHCEV(1mvk9wX~xQatc?S;Lc3*)TFl9Gdk7SLR!Qm4iKAdI zBjYc zh}>@Dh4Ux3uFHa!;2E(#+|;Ju+gjL@OjgToT2RcF+AhR@ZS3Hrq$t1PA*G#)0Wl@Nc1K?xN!lt zKEDN?ec!}tTkWD|xI}AqR(%Jn`n(*9PitHZZOXW1h|Fn3`KTieVNuJEI@wTx%q|gm zlbYZmwRRCMv94%!GS;?X<|kz$#f!3q3%%;z7|d2J=_6O<+RHh@MT%ChNMDJM+$F3| z5H+(tj7!pKxmy;c^})$Md;-8-WZEF88ciq-qGvp_hKj`1RDMs@zqb012Uj6m`Dt4| z&cMfn1Z{jh;4(At{@htg^5+ z{X`J0!P@j3itIU~m|m-*@P6J3zroMCbu1sXo)v6k_}RMT=!$2>Me(y*yPnh1>J^Qy zLhY(~?%VtSEwu|mH8)(>vTgzwcH9Q4B=!)}`1g^OC7D zn6jeEY|gl4ic}d8VRR+jlmFYm0=|Gi9MVz)Rl3ywZl|jz6h-NmlY2OCT zU|pya9YuQ~)_kM_?@dKiQ0wz|1IxPc%)Lj0H}dj&!}O=>UtRs7 z)SKx~ZD~Wjk-I$^8(+?N^3^SE=}E6_`8bVhPP@m3H&orn1if7R>@SDR#cbq4Dt_&@ zxz}DVwGLZdt2-8=b4AT#O+zzIlX}G^E@A>rn5X<+sxHWR`Q;ti6gL5#D#p7)Zqxc+oX>6()867l90;E z(KC~;u8Op_Jt!`yK2@8AjQGAtt1Wd3h>G zYkQi)hPTyriruOIQ0RQjieiQE%HH2Zt!Tk=^GV{hT+1O)Zk7Yetx->wz~%Ptj5`|s z$)?qeX&S#k`0F%G-_3J1P(Ft$vtaBFS+y%#oRuSEVqkRBZQSWCCMJi#n3xTiErgrv z^RicO<9O|!Rl)Gh?{}FvV(^9pG7Z^7No2ex#Pd-YvG>T(-GxaUzJoEpM9X(*=nb#@ z){h;teZdKa^d_lyh|LKBzCB}NZ+3@l%v9XWs|4~5&fOP^qjLzL9#d+T5}jGyXXaTa78VHkrhJwoAEu?j((0W`XS0G z(-27_ok<)tNo*LiWwD^4Gm3pT8j)XSgQl5h4^16%qQP$`8Wj_bGxqiX84|}~Z}>Obu&SJe9fRH2j;o1SiIyN?vT{NXO_LDt!}*n@t<*A!yor8m7W=`JRRu z^y(Y}iX!(jzx-I{dltI^ObjzwpLl!<6C<4``U<0&nd!#Sr^Yr{9+T63fh-`WVn7eS zS`UmoOlw`gYiKvvfMQ_CBNz(*BjW zr-R?n{THfU=6)={*+XmOH>))&znRYG@|(U!-_y>#nH4NnN3_Oe6RF`kD$5`dAy-h- z?)rJ6uprxizD|$d(AY`%EdF7Vvo8EYbjL7Oh(#%1*+AE5RFPAq4dVPY%K-0wqT1rF zze)gS-hM(BQVikyvxE=)QRNtPGVWa8`-1vMDm2fj149koikM}=xl zYQondKdF}~<8&TIkh21aY+K+~YQJd{eYzwcQ5ae|l^%0(ay}(`yJn7L!u#ihb57&us4aK+Y_DzY2g>|AeRl z%Rqa1CZxp|yX}1rDNiJYTWS~W#rNl4r{=w29lH7t<~wfnHun9lm7#(1?KW4Iqq=x! zK^EWk<3lmCYKq)zyb49#klP=3I2)#SCcQFdchzac0?HB#z`U9yyQ6n9lnMk0I2xemD^2Z&E*qIUbn6H^iN z>FEy4YjUX)T*ho&jNL=#1X>`9$H=8Ebgoi`Q4(i%cTtsE?_oNHt@ijfo{r%ROnZ5VfNkP4S|9oGPwbzKw!Ht%jj zwy)qf@~&(q_xGIUfAVGVNoqO?bLlwY%&aFdcn&qG6&`DAq)>yeWqQQuCWu}HQj^p%YQwdSrogQ;*CDPhMDz^jAxOZR3yt*Q0N! zD??~!30rQED2ncqY9ouPqWN=YEvpq)i8yadBfLAjHpIbaMNJj1U|T-o*Z^U?i{kNO z7Rspah6Xl?XuPtjZgr`K7kB)`|C!$E6c0{_p&qS_!?^>(R>P4RV^za{8VZ5;1x*HT z2duL=m8dK%7s28PL0wo`OE1`PwYIvfD5|$Wk#5ol5aABLx8e7j_2S(1E~=|dR8?5s$`>--gazjo{C)wy599Y+_$~GQexkB`ebndGKDrjVh0FVB?iJAs zFStHhTUSkY>eSA9ngjJQWS);+5xwBz8SgKTsrgL0uN$Ng1Td%PeKi!Ol1y|-TSP)xsS#)*`$k_R_u0-%|v29n5Mnu;}E}`%9 zf>N04go&3$84p3z#uJh0Q)W!L@DgboDcP7sa#VNEU?deC>!A&4Ff=Sl<%Kn?;}MEfUIz8jFzDZ-7zPGvEq%O4w7y9s&4{`)$UB|(O|B@c7Dc(IYA}?% zew$}6y9|SX(}HKo8l-{s@YfUZ5>)ETWFVketIAfZ?uJNb9TB2#broU;QMvg2Gk)*DcC4e@=;j;X6KwCSKy>$VBx}Gz z{xKf(wft=Q`-X?oKZs=K!WqHInE6BL)6)a#x$y45?@Typ_zeEL^r_c4e-phx-wXN# zKV99Yi7&BCEDe4PdY+$tv*(Y3hkM=u{S^Fn{L@Yn|7a|K0q|LP^PS_*@AHRI4*C+% zsRx%oRUPCp|DB-!1oXk8Xp_DT^m|XiM>OcrGs^p~y(sV1 zNHhIRcy#lpx!NnE74)k>$4-sMBlT5DfTAPYLBBW(A0`1AUUYr16ZD+3@xd&R|2E0b ze%}ZBgP^a0EjSrtx2H9vr(G{2mWm=iEXQEIdkQ+!t`WYp`CHO%Pj48O_T3SI@n;;8 zEI|6_CPgA6{o~s__(yzaSinDG0_hIn?YACzoD8Wt(6EkMLBICGq5H`bpcjHZ%b$OP zr^5rFKMMNA0Ub?uI_d}gw--esZ~615zV39)xLeP_h&BcC-y-?1LY_SQ=7^`1O8^az zJcz%PB`2~Qe`gCc5qakb#8cCnZY3a1w;#}4p$sr7sic-vBKar~}Z|0(}rRvO=KI88$ZT*&}UK;hzEelu+kmK2xcd z0#d2!9IhVFrzPD(4)+b0t_zTs_WUSY#w(e&jN4DNWxNSUYcv6~)wRkG5a-35$TS@F zjdh={G#%`2uS676;Pp2&-s9*&H=PaaBCd&po4zxpf??KHr`A$ z$6N>f9#D~RVT8+KfvyCk=~e@Z3+@YmRH}ynsZ@UhR3g-D%vo3}qDDIbl?rqKP?U;-X4@lFk0i<>Ni^C1Wc&~kC3?NN+uEVW#xFUx;=y0z%++Q4S z7zP;SHv^FJo8@p%JKQsXv>tB*xji28r2Mu5QoTG3=tiMF4d^C;#$vX(S)fk>+5l*H z%R!R3Lpn8G!0@^6hu&8a{C?L&oKA=rP-Q#e-2BfmAI-6%oh=u zoX8IV-6qhDld+l-=$t9GMpFQ(^jA1s%;Ab1uH4~9OpQct7cS=lQoT$Cq+A|%)OJ8y zB;EPbboR}OECbXexN1O3{VJfff@=q)cJKxuwV{)zTe}(yNK2anNK5-8pgSb*F+kM< zedGeHCjbqPOaRm@xLk*u=Wr!}w8u}q(2hCt0BIRZ0BIR(04cv)9Ml4+KscXpk!{Nb zfHd6-Kw54b(4CU*5kSiMTY%Jte&ld_9q!VLEx!^#%I^k1%I{V{%I^z+l;1;ul;6KQ z+*1zsj>Bclz~?xTQ8<-kvs>{3KjQ=gE}45=b&sO73N7YIb*?NGVkuN8**g@3}YIV?d2X#8A&q3K(BdILY9JJU$)edTP&~^uP zI;hV<+3Aj-gBCj|;h?P!dcr{m9Mtci=rGHVacx!7bq>1UK~Fm9po0b+G=`d z2QUu<^Hc!yBrtytV4eeJRJNbbE5IxYVETdip}{~b{O~mR-KY3-@p|@>Q~j9pfms{C z8~ChuI3u#sKE~z}z0d(CQx!U|t92$pGd= zsQcvrW(qKQSnYUaeH@s&0OoVR1f!+j1HDu9`1FaYtxeY5FNO{16x@GtvpKjz!O@Vhi6)HFZE zzmvxMF?>Jb7dbD@AA#YwSPzqeUdOMr9_E9<@C&DhnGDQB1_L$VXFf2`VP<0*#jFBm zFJ>gggnfQN+Pk$`tr4S|@F+7Fh%a6@RUyo$LzwGBn43bF zmH?(;bw#4ABAz7Amjh`?d?JL|8^XLC!W<1?!m;eh`NR?Y%O7h$<3pG^AxvQivo3^b z4q?6+!aN$nNLSXJcPM1 zgt;q(c{GIC9>VMnVGaZ^2v}Z?DDmcpmQYZV?D-k7-o?YZCek!TXlG`I_A{r)>xM0%z0lt6(V3Mg2-U|CGVA$Tf^m2 zQ85UO15AO9Q;y>ma1*brHIvB^CKO!YFP9(5{m=T31Sl{5ueBX*5#d*2xAk4Wu|fbX9LPA%Z!aH zL#0ih0c9(Ty2@&FVz_88t1dU~<4-x$CDfd3JFhSLOR6X=L){dk#}?E)lW;!64&;{O z87h(=@6Ia>N|Iv+gHq(!(%{1mj~wvWRKco33}$Lnd@PQaClHGURj4i~D8S%nL(51g zn|MKCZGjo9G?R5XFC0{7MWsk#sC;iOsKt2=A3cBm+$H{Jo_6s+ub#DVmcIuwSj!;A z@Qjx~8*3AIo}ItU|6DX5XLEcVTZQ$S(eFoJ#7-<(wA9aF)m8K6`k&(~^Gp2CrTI$( z1y)^oWnfgSo-->@&ssbe1XIkvCh(ldUlLi}wJTV(1~q=UTJg#-oBWHfbUZu=xLa<-_vun0$%3M-4tU4$b|DQChMrN>`V z2|8hIsfR_JAWiLfX=;aeC*0&*kkQNWqYD{9ad-?3&Esv#(vG49JlUrx(*Y56p&Vm! z%+8x7HSu`Cs=5-)`UT~fCQM>rjc_{uNX#MzLPG46AR$?OUZ5dSI?q#86=@dLql9(x z0yq(w6iq4=e~QtVk|RN(x`@K+F?QjYgds9`q+mcNpA^2}QmV+BIH;P@B9cea64!TY z3rnzeD6FY;#vmA<#Tg5e1&v>Ksuanqh3U}e%Sj=;#mZ}Q1+-NsOe_68b0B@Zja zC65WjdE*G?V=oWeXZQ)n->A;SIRQ|(OUNJQ_*cZ=n2KE+|Iai$EI84R!Jb-VTHe&@ z*v#?$a4(X6Y)X9cxwsmOak5xkJ!WKWUVuFjeLNu-$M>(0$85RP_$YWt%J2UWD&_5C`AK`UUTs95czoEZpjLF55 z(YVt9zmQvU?h2>gFyegy*?`+!)te0Qh?Z_s#ik zZG0K*iyg#6q-O!H!ay9{WNVE52tMw9#OoZpo_o2eb7brg@B7uAVKO$u+XW;-Ky+Rq zG;Dg(8!8UNrv*c-AH>bcgK$z%vkm!%Q!tyM`#u!a&5tWauqQ+?oV|x&o%>=P+%(!3 zYsX*w+rxhp?0^WC)foF81p6Lukr=^n_pd_)lZ?1r7}z6PD21z5nFX>zeZg;|Wu9g(%=S(IeEbVwaKnwLLr>(I_Rbg&LYNgdiX59-iiAl9LSb$}}q_$oQjyu97G9`O)5U|{69 zJhnY+(;`<u551R+EuCJZtlpf(>-Htu?L@+3Qdo#bA&FO|fG=tI;Q=L=N(ev0nf! zj|0uikF|U}rD-AXr-(D+e*}$j@E4StE(~En9W{4%kJ7n{!##X78HzMg;EZ4cEiocOJUYhXLg{**waAE<6&H-7Zm_6DlljW z@H7QD1OX0l`hB|l3!Wi7X^h@ZY6ozktfvy)M|d8TBAy67e&1)92c<+LlM3U9bc9343y3r(EO6g}V;X1-fy+)E3^(PC5E4 zYtksCj&&B9lE)uz)_j4}h9Hgcm`Td{j z!ka99Goc+1!&7&^f`}fb6qxnyq)hnKKox4I@6JdlKmS*!2FUDoWf|cc)KDh^xMtxG zrASNRTX0Yw(!Rt$@?*a}e%B(P4H^e*B!u~O2=ih9^BSIp-sr`y8FzhjcLfi=9VWNk zmb|Ov2qwt5Z+FO%lDFuND*<*#28kOU+>N4aZnFvxZW{}*32e^2mAXV(dGg-MMbie~ zTe;wpnKQ8Mf*&tl_o)SX27Iu+l?Uf&Y}4{(s^DGt_pjJnQC+!4jAX*rADN5({b|LG z#y{Cx8DtM;+X62ip~3cGTJhEU5YoNMfd@Y`@oV;AFum;R8qHS@aS@n-X;o0!j75Pb z{6zwZOo1mXQ!*P<#czY+lQSA3!ldlQ4$0ow8;keG-dwad_SU?;vHlbH#{P7|-q_ox z?~NUmAldaiWXQn^MPV{y&}2+zKjdJ<&>5IG;R92#&$iJ01RW{p^y%)Nds%Z+*Ww)o zGaaJa>GlGm+nM=(f?oaS!B!+epcxc=wmi^*1%d*|z58Bq@GkCifoW(<=N$c8AnD?O zQZZfdK0FItp4nughdQa4fun5xxFo1O+`;TFMY8uk}$d3e`55 zeeaf||5@#_q|C6AXIdrG6>F5XP@hgM@I??X-<7VQkH@SnTL5m{(5nwO;sFU@@(Tdn z2G=u5R9zSqk zQhnRU`kVWb>N5w9YDTQVPU8`AuP<+LJ$R`&jE$2c8g>Mu2-u}UJoXw9??(`s%wB0a z=o4>YU&Bi&n}43QbywDo=iyt6@*n_%m(j&4$9)IXlDTnz)&SzDe^#I7#5I>P4jG1T1G1hP4ic{ze2ZD~fr{S^ZZ z72I+@7D>>QL0HqH+^PO!yAG!_)({KivyR1X1Q>r9EW|fYzYRdtl9~F$&Dpavn%a-P z+|)j?bAK1z10!Y_eUJ{D*g0`m(=<o7maVcBbUik-e`mReIjW-bN80Mp_Sm-bsET z2+jtLu?Hcdc;WrB02z(3hX6Fj9^M;!`kp`PQy}g z0Kvv+-58+_$WxaIX>?4UjwF~b5C8@`kTLmEBmm7e5m~V0cf?o`LJf$0^|v7rf8>Go z#UFWSRahUkdJn>cp1t6&ELbpK_!)|*rIlP^HDkDF!T-_RV#e456UpJ8gZQTJ)#14h z|IoW+uCdOj%*aKjg(7piIHt>h%<`c{T9^}fJ=pe~!mX-g+dFJ0K6C-@_(^O#?h|Bk zUxdQIah3MYP~JY1yzT{ILK#pP221?U78mpx`|>i##W=%43uJSTJv8IZqiaZ0HtX1Z zf?B-B=b_&&$;X)|TRxUFiRMt!zIv}MvRf8s0@c*Y77?1XM!GyS*Yg2=0S1jeg?SVn zD|^>qI|-Yb*c(40`|FVWNRtVq3iD+a3?C-&Yz~~ZrF3E@&%{10B!0J>Zz~vxs3Dm` z>SnR>^=&|NffZD?P2+Ow&hKHX=sxWCPRZ>q*PR)!xc)YZp{z5)$N^3W-kf8UcKOSU^d>L8yw#gz%`z2y7*A9fDc9`rs=Kk{dRRi6kVB4{yWygxD7wgK81eT)!A?p*xOe@tMH{v)SS6 zPC;9yGWyKu;dS^M%}Ye_*DzEU#m=tx#iC@`uwfixL*Q?U7TcLz>^LA$Y>qC0TDiGN zuW_;1VI(=Eef?QvEFrqkv!{Uopg%?$f zOWB--@b$=(NF(BCt9w?4x+bBze<=oKGooPm+FvK3k=ALY?cm$}6-lc*2PI9dc@U9i zBTn|ME@R6UEQTP=^B98F_&-MW@sx>v?CTaFFQqZ|nnJ0Ku^u!<2H$L2V%@%R_S0xl zepy(JPb0+vePuR zGNq&&jVG^|_nx=87UQ%G z&fdZWde#LA6~uW9?jvQUhHFr>6zQLc7*;TtIz&&+p-qv;;B!2>4V0&Ie0HE5A=nko z^M1i)s#6PX170RkX_~`0U{PmGodXX#4^5p~Il^#8FiK9acx;94WE!Q`TtKF=x`;)m zl3AD?)~DFtBFG41@N%7tp1>q_hW^rM)ho?IV?|@Ti=5#<*R6}N8fj&H@KPM98-*Dq zg0oW`=mddXG5AN_JX@Y~(zRD@PwEzQ(t^}DlEujmEYh*mE5p|!_dJMqtqSeqH*d$%z}F1e*~|5j&QQ(41g&)H0eqZwcMGvZ&8lM%W!danhTF*RfL9fQJ(yP3$3-WG>-A6^4Ch>`h0f2p3yUgvuOguBuviv^u+LX?{(4!oo zke1`X#irfdXd>2hNkn<}?o5L;?Ynr+oHA3~5u`!YhaOz-ZIx&pD9tviFZVlegl)zT zt&Hs#FLl5Bt}D|be}IA96q^OZ6SJ~=McALtOUL*B5l;?BJ7I|B{*A2v@yd~jg%DnL zp-a3Yw=BOOJJA`e>QE|sFsL#NZSv*_!?AV1OluAEQmq5bjKmh44f8mkj%uJ#3_|Q{ zG;SYJD{tP2x(CF(Y&GVi*%76rF?N>#d6=U=uTXkptW}}mjj_8G%HU}!>6LeJyhCpp zfYb4AP9l#1|!~BKYSa7>^~ea-co!Xz6~MF#W2d4foTAGv5|R3kV}!_j;jm zsDgU#@@e3&e~|SB)@hlDlEA+RBqy7MsVQ99wBtoEYs;(pR?AXGL)UgRVPB*Z`K;Uc zr4r*o8qaZZHN_3pgdv}CWfd(r9 zfnFmEvi}I$ME5JUy-)@gyuw2ky^;+JUn~odCDMaom8di@#YPf9eyFly&fGmX_sy1j z9!}xD4py`ssWFdC8kXrEOPaE&IarE=?IeMFE`}+{xs-mqdt~iclHRy%7zAh6&uodk z&enmErZ3B%Z7usK+RbPiOFA?T!z*Iwmp}`U2Lb`f(2GPG%d>c~bU}*^ShVaOX>#8o z6X^t&O*UKFr8m+gjo)$vC_* zrqx}|rN}MV0)Z*lbEOSyzdV++LF|C8LQGD|*j)=c-`h|I)M5EAU9^PD9ZK-s|3+7& z3pwzP)L|<$8yydvJIUW2lJR|kxODf;Qj*yiv9;(PDJ7ZQrrW+r>Zn(A7RE$~I=(rG z43jCt&q3yUan|N-fK(1|01!^QUgmhkBD~)JrWqN&=4f8;2TewXCZXBtU>Kf=b7*fe zg!xFu#(R5YCry>+m4~_8r@o#`*f<=r2Nyhny*}L^s1Igr*fUP!1Zb;er`6p`eQJA^ zVAadDv)v)!3)?j5dziRI?IpA5>=y@pmV=T3GwWgaPGXTR+(Bn3*~oT zs7+(Wqwk1%GXvwRsCU&%G93)6-YXp~tlsm4=2P#aLDVZ1;qiB$db=NhD1&I&C;uss zzh@1V^PW~I4Va0OBEAxO@JYgC^_%3n!-JZnuiOVP6R={(3=Bj?&c1wL#5Ik)9?A0b#-Pw#6elp7as`Z6J$wY}XOh8(tX!4>caz7T7yCwG3p>!sDthyflX)qIw zrDge7A+K2vW4nWDMARjxGxNr-%yr_~ywxm{f2s=~&@x*TX-p=ua@mchvRqUhf06v4 zERrDt%TR^8+z0=QS`&3@4Xw6!{*H@e5yWePdt^B(_VgO)J{`BjzUZrg5sm7GNwCpW zJ#p4G&#|<1AKy@I0 zJy<|6Dc(n@{~W}c*%!;9+Y`>MW<5ZY!}mu{qo9sfs+;|Viuax|LLH-2d_w4x=v!j$ zy|ujOfz6s*8637Z#ZT)B(7Hfl3=LDV>P=TV?)B*Bn49F#N}j%lqy6R0$!kITlJqoE z>aq<}(qKDK_uh&2w{jw`idZ+NMSn|dW}>Fe@;+tWsu-{}T-?`R^cf7>+!{>tArgAE zHnLDM{A+|@_HksDX9(ATAay*=Rn9V-2%|= zV`j+UV6tG=oNA+-=I5OWX!UJ#R=q%i4sNj*T)DEcMI*crXasEUzbxDPuYi39U$v3K zSI@JBnX#v+k1!Ghb54j?E`l}4CL+_QV_Zr*svmq&{{@8iRq^TIUYe>=Os)?JH|}BM z+h9_dz1?swE#pQN*(AWXTMWKj>2iSS&C^$?`-4r-t324K+6K*<+0Q9#8xgjx_@0&8 zf{<6(%I;GOlg?&86MO#|7Nu1yd<+*@`AB{4H2?H`3ci*V#l65CsTEXbjH z%Qf?@L7d_%4{Z7Ro13{7JM;o#**;0ZwA?e-;wu}me3ixLCxYp@r!n>#!Qr{Nsl8`;N|6T`us*wlVf6g@!f8-ZuPA$LGm0T~3MWVhi)_%4FU_PjxVN z`NWpc-NEL1p25*`Gq?wuiC!X|o@XYZ!PfuuX%I^rd8xSxNHh-5yP`m8NNKBOMTMp_ z{RV-{q^SNd$19oYrN=AMPLqvCT7=|Ci@R>pL<_7a-?f6W4){cc82sMkHrmFRQ5Zgpic?X3>iR5*NX{K z>>YXel^@xs2~s8&K}uKrFpwgq7GqxUKdRVHQ+Pw$sbnyL*c~xw^KJZVH>Pm9w9N02 zRD02~q7tLZTrn@Go%N7o!}z8|xM5GR9TFx$1FVV3y=+#o&0Qkmn%pXgY2p|IjI;NGTO_hh@KwEK~z;{$O{qj_&}?@^xP}B+-^ByXE^IAby16aXOALSv#Kj zA^t^mGsBWN6Pg7-sB3JL+G;cqt9wWl}ygpP>Zy&cP&DLj&dOOJ$teR4L&SuH=Y(e%QckqjPC!!NC%U(5bYkA8L zjHc^pvP|-rB2d#I2Aqb05w}d23d&&P8=KmdHTT)6q3`UHv(_>U@oa`)`N}(#!9PIZ zLwNH&l**38Gzz;`>KWfN7Sp7BVZ?v-6gk_(|0s%cLnAgM8unzH6VquAV4H>}u8?(F5Lj}6Wd$rguwMcUBkz9*| zJ!^3Rc~_U5IF(vpUAxWJ;vj30hW#&7k2Hxid)Rm9KG_wBxjo&y{1EGLi0z}UK$7cm z5XItpea*&@Pmon;k?zmn4{Zpo@tD-(0Pa$A!i7^1GEJ^Wd-o>6w(l2@3R06tnq!aH znzYNJ58nmJ!*1l5T4goyFnMS5@(1;_&&XIu!-h_29VxQe-l}fKIu5lG0a&X}OqIdb zfraC1)ni$kYOuWkCh2UU4q6B#xKyit07t0}fMxo&Ozc!d5H z+v-fMRUDVJCa}S_mHnkT)~Yl29(Dzk00nJLiGg)czBVwrJa&K0cfdd#lLW{R({JNu zUcv#Rjl0zZPs!R5oMJc$uv`7Z9#Dd>XHjGN6i$`_dn4Axji9*vkhRP)mqH!~_!bEV z3J?drH1J1zi+%vVb!aPgst;f<6(d zd0(8-AMuT7O={0*uMF$i1Lb7bd;=-Wiyf8scUBXtK37ez0N%ZqO1zX@iLo}luM%Fq zfMEY=q#C3RQr#*H@($SsQZ@&0X_9|Rf!RYUFmosc{$nz}Z~bJ}sD9)Um2tb`YrZsd zzamNhE`_M1FQ}njx-v2jH+=37PWL+{=zMMBb4@QanzJnM-U8n(o;@F;Js(QJp>^@W zf|Kx>H5k7Ajnvh1!+REzwc|}3Y!Dv>UGP!BO{_PY_V4OGGv%56e|cZ!<4}`YeWsHn zyJicp-W4YA_SpoO$ll05rm@NISsAM_CrD-ue60jkGXFifybqPQ04TcbK+rt;gXYo4mAhLO3`p}}T!VRd&RE`8<2XSxYyLe+6TuRDyN}7l;W>ekg$`zF z=Wa!pJ_j(0${7Nfi()!4!8I>G$QeVtdf=f`A21_!>>4<;Y4?T8I~0RSsoh}O6@yu+ z9dm06&wLD=IemB2^7e_`FM)5awp%f`;eR_n#AE7ezZGXE57O=r@Q;=j*3t=JH*tT{ zGw<1RoaK5>KC-hm4am9~)|=ol*Wplm9SXG< z+7#ZO4y*dnoOm#e$Cfm$b3n-*P_w~!ZHm>>0bhG{PGs2h4z>^43;#RWURVlsvb_$= zIK@8)#evMA?R7xg%hevua26L)whbD3OQ8+Cr|8B3R^aF`I5C3j9jG6-3uSSSbM6CJ zrlNwT&!a@FD&EyMA)UUk*Sm4UAz)J0;4^9e(Sv8fD-Cw@aDb0)MONT5SVrQLrq8iued|aeVhJl#!o+_E4G8WVw0Db z-lOuOrmF#n*RxKfp)-_9G^cvXLHf)=bGN;XFGB1vPLi}F1<%9#k$#S-$td> z5sncHZT3%yl{bX$9{zKZbgH{Nr@Niav7JNeZUXA2uWm-jC;xFFjqAlB6 za<*{-S{z@GE(}Rw+tA|^&9Ntjl=LCgvnjT{IkugWUcyGRtOS04?W=u;rYx@w+|Rb{ zg;z&+FM==Ic!X(iV;6ne|8eXiokrujiI6~#fGqOvu1DVOhGA1Hk)-kvJXel@`G)eO zIb2*{51idUA}pL3AqzS=iw~^<=jb7dMr;wVJog&Lk?F%(JNk5t zIz4L#h9=_1WbHtYCG;WLF(5RW6K(?A_19v%egU@YmyP2VdbT@RHb`S=D?!7!BNH(i zT%KcZ5^=!fS^6Qa3T20{3Sl$+J+2Bh?3u=0me$ttc;)IuX*9mBC>}4am3ZeBh3m>H z>MA19x>`8ajowHfvxOCrvPvN0(N*iC;?vmkV;n7k2lRMxbOPKxSJlLeCnA3Q1yiO^ zk60(jpcNM;3N`wB6+ElsN4(ZbID3{+SXl&b!i9(vFP^-SAt`Sp-$Xx$Tl8pgyc!~x zRMkXR*A%X=Eh;RJo2c)I#yV&^_~|w&2B%kpMIwP>#kVfy8$6vW?|ku1b6lP%b5@w2 z6oA?xe0?;rzB(SQt&SI!m6XMcy)tdx%c?4q(^#?8*K{(~C%1EPJxH26Ff8=o_SSCv zKL!6kiC;cHgx~J~_ptf3F#p?M(kwjKf6}dxm30-X;x*B#60L77LfA)*rX%^Z6*hfM z{DwNXxQ20vHN>NZQTkn0LtqZ4a~fylQw5*6Dhj=Ps^H4}MfpqTN7t6Y7OLtJ)pZHz z68^!x^66F?{40y&QW8~C$wXG+i>jj4HC6OjFUCag?pkalf6g37N>o)vYfGzY5&^8~ zH)Y1$CRA1>Ai449A7`B}nn*iZYzi>xi>u0`^!oVv zwN*965&B*aW36^;;cVV?1+Pkj=w3V~RTn}J3EK|-^tK%eVgD7?zILF$Ytsr)@8qhI z$#5^dT2+N!2)F&{gJnVr?gW^HM_GU~EM%W9)DBXbHX&rO(?m!#63g_Tk5 zU`25DUWworu3oF)RBCliRb6GVH6^I6IKGa$b~ZJXEOe)Dsx+7^L+AHpJf1F0`+0U> z3Wx4hFyM+Pv|m$(w)a#|Px;~2RV-s$c*7-q?0YGbM~6s|Y>kJG`n^npV|}csKh08C zY0(%DgMuK<^2(ZcQPt|ovKv9ILy!v{UpN>u_<-p@N$JqV#iPELmVpUOT7qFg{dU2q z1#2&8Lt7P&okVCOSca5Q1MjMWIg(C2^_O)l2X`w zSq+9Li2@R3PlCx#!^NVqVvIc|Pieetb!mbFRw9_;+}bEz)<=u0m`(dVlT=m09FSaG z#t+JiN-Z>{u9jE{m^08JLb)?CGSbsivGz-kq()NoAw?e|$xr^2NlE?{z6F7Iw zeiigZ0s6-s{SfdML8A);^n6D@2K+|QWid1Bq>Rm}vrinBTIA@AVA%zFQ6PVT&?f*# z2dh`5MIv%rz~+zLp4O0_wms#iv-ZxCl!#u5w53Qp9A_>66yWuSE2|Oozk<&Aj;^k0 zQ=A{j$3dTrQ+BaHel3Cg+d;1ZJ?f`ls{)YT1^PXpe+>2U_+Re)Nb+3te)xWT$e%y; z0Vm%C(5tX6_@97$uQ~bVgZ`Opv=z$n_^)(+C`&SU}-0{Oq>@;8FM67D8*{pGLo z06A`Qv~q1-%9hvBRH#ZbMqyw_zz-%?Q)ABHaW;^ZZ$Ix}9D+ zwkI8K{Sgs8KNl#k#MSp8=qsX;$kzh&uQ>Vu=*K|s4bZzBeKbDMb)6N76#L~!yUx{j zCg=;sA_{jvpAAl*D?xv5yhhb_`c5qu{;cOZ(C3^JiO@BTqtAmr{uZp~BS^Opo$ZN$ zoZFq8ZJ?)29K0Or=`iRwfKHcHuAJ0;EnTU!Tpx+>L)~OiuR?si?>rm@71zHT$sTFB|jtS=veqNF`^^i@R~|F2rh~lhBJOn2bCWpJvLEm%GPh7fwhkMuIX5&p*`7H#b{2CnYE{E%MxECGnb%*{d zAl1e-4p;1Ow>sP%4)-)>M$P*SAeH4=hx;!;%I|LuH}YhQdkfHKMQd^RKh?Z%08&kU zFvoI^0#fR9%!8`ad_amj1V|2c3$}uQ{eT=t>9O2T03!6i}gXPQh|lahZS=_Zx?M$>Fjvi)*^m z0cpB&hg%CsWxg1*xTebkq`3PW?oo%UirREH0@8FJILm5s93bT~6_9FjDWFv%^YxCp z#!<(fZF5Wkq&emRDv%s29ks|&w*Xot)IT^}$yl3XEg+R(6CmYx(BWQjxHJsQn(ib( z%I_?Po8)jGbGSx_`vV~5oHE{W$poah-#grEfK)@r09_|CpL~vmmI6`0J}dl2o@;R%0cjaubkOt(cKo{GuH@3FqH9 z=tQhsG~H-Gn(irw+v9M5zzRjvy$MKbH1>Rpn*vC2b%2Vcj2kE0dgM&8P_=^|02G&W zOQ%^bTK|gWOZyod}2c=?dQX*Vh0I7WG7g}hkgE}1a;fpNwQ3oA$&_x$p4b29m z{0bd(gM+p>=tHyh?Jg&>5s>D%6Od|SyTkp+;m(?axmslACI1+p;gJCc9di&~(hW7; zK^YFpbPyfXDVH1vjdsu&2Spt;&Os9#G|55J9K<(UIp{hE)jQ}B2emoqu!H#NL%Bp9l;@yw2i@tQZ4T;iP_KimCUYWI2RRWd zeNLp@NS_nA(?Q!D)Zw6B2W6&N`RE!(C0*d4atCd7&`t*(a?mjcjY+p$avgN7gKl=v zV-DKmpd$`SA7;6Xa}cjUt9<1S+UlS-2X#3pW4O&R!9nvKRO+Cu4&p_o7}_o;a>PNr z0;9M|4qD)#at93_*+G5mgQffVkbxMHAr1Ne>vWHm<4$HZ-asQ z@l%Z7+riOGa}zKx2QYU7!#?As`8QxT7>x311LjB|&3<6!fyi8%<|SZKp=l5EIxt5A z7}jp$NPk&8fnRAb%4Zrdj7#qEnFGu(NBJ>4d3!z9v7XE|z+98<$7}-T`&b!zY3>DP z*$4fYuL08314W@*%q`6Ms{0Zbt#E(e>gVSdEF{cA_X8uPQu`QpANvM9bXruk40P{R2;4e5iIy=t<`02^Prj@G~$y%TP-YD~4jCakS90NW% zM*RPMRQf^}16(EWVuG9JVjFc`pWjz_`0B#iS{Osolo=PzyyPNPqu?aBU@!Dx*W09~ zzev*cUfPQ_Ey75t4DLjZkB3V=(_fxpJkxMM=dY_SsI6P&MY0c|3aTp0*DF)SBQ;`( zhcTgqg=uO7t2rJV- H_b2=>o2n_8 From d3ba98a75319bdb63cbc6f8aebd57d8e649c0570 Mon Sep 17 00:00:00 2001 From: Louis-Antoine Date: Tue, 3 Dec 2019 12:02:14 +0100 Subject: [PATCH 141/141] Temporary fix for the fade timeout --- src/d_net.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/d_net.c b/src/d_net.c index cbfef7726..63210954e 100644 --- a/src/d_net.c +++ b/src/d_net.c @@ -497,9 +497,9 @@ void Net_AckTicker(void) node_t *node = &nodes[nodei]; if (ackpak[i].acknum && ackpak[i].senttime + NODETIMEOUT < I_GetTime()) { - if (ackpak[i].resentnum > 10 && (node->flags & NF_CLOSE)) + if (ackpak[i].resentnum > 20 && (node->flags & NF_CLOSE)) { - DEBFILE(va("ack %d sent 10 times so connection is supposed lost: node %d\n", + DEBFILE(va("ack %d sent 20 times so connection is supposed lost: node %d\n", i, nodei)); Net_CloseConnection(nodei | FORCECLOSE);