From 7a54020fef595aaa7c580bd2e31cebb891a9d752 Mon Sep 17 00:00:00 2001 From: thecozies Date: Wed, 8 Dec 2021 06:12:32 -0600 Subject: [PATCH] level documentation hmc and intro --- levels/hmc/areas/1/geo.inc.c | 20 ++-- levels/hmc/areas/1/trajectory.inc.c | 2 +- levels/hmc/grill_door/collision.inc.c | 2 +- levels/hmc/header.h | 4 +- levels/intro/geo.c | 19 ++-- levels/intro/leveldata.c | 98 +++++++++++++----- .../intro/made_with_hackersm64.custom.i4.png | Bin 0 -> 1520 bytes levels/intro/script.c | 76 ++++++++++---- levels/intro/tm.custom.i4.png | Bin 0 -> 830 bytes 9 files changed, 152 insertions(+), 69 deletions(-) create mode 100644 levels/intro/made_with_hackersm64.custom.i4.png create mode 100644 levels/intro/tm.custom.i4.png diff --git a/levels/hmc/areas/1/geo.inc.c b/levels/hmc/areas/1/geo.inc.c index 5a2baac0d..7c6d9b370 100644 --- a/levels/hmc/areas/1/geo.inc.c +++ b/levels/hmc/areas/1/geo.inc.c @@ -152,7 +152,7 @@ const GeoLayout hmc_geo_000850[] = { GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07014C00), GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07014E48), GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x0702, geo_movtex_draw_water_regions), + GEO_ASM(HMC_MOVTEX_TOXIC_MAZE_MIST, geo_movtex_draw_water_regions), GEO_CLOSE_NODE(), GEO_RETURN(), }; @@ -189,7 +189,7 @@ const GeoLayout hmc_geo_000938[] = { GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0701A080), GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_0701A400), GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x0702, geo_movtex_draw_water_regions), + GEO_ASM(HMC_MOVTEX_TOXIC_MAZE_MIST, geo_movtex_draw_water_regions), GEO_CLOSE_NODE(), GEO_RETURN(), }; @@ -210,8 +210,8 @@ const GeoLayout hmc_geo_000998[] = { GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0701F818), GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0701FD58), GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x0701, geo_movtex_draw_water_regions), - GEO_ASM(0x0702, geo_movtex_draw_water_regions), + GEO_ASM(HMC_MOVTEX_DORRIE_POOL_WATER, geo_movtex_draw_water_regions), + GEO_ASM(HMC_MOVTEX_TOXIC_MAZE_MIST, geo_movtex_draw_water_regions), GEO_CLOSE_NODE(), GEO_RETURN(), }; @@ -231,7 +231,7 @@ const GeoLayout hmc_geo_000A18[] = { GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0701F818), GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0701FD58), GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x0701, geo_movtex_draw_water_regions), + GEO_ASM(HMC_MOVTEX_DORRIE_POOL_WATER, geo_movtex_draw_water_regions), GEO_CLOSE_NODE(), GEO_RETURN(), }; @@ -249,7 +249,7 @@ const GeoLayout hmc_geo_000A88[] = { GEO_ASM( 0, geo_painting_update), GEO_ASM( PAINTING_ID(0, 0), geo_painting_draw), GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x0701, geo_movtex_draw_water_regions), + GEO_ASM(HMC_MOVTEX_DORRIE_POOL_WATER, geo_movtex_draw_water_regions), GEO_CLOSE_NODE(), GEO_RETURN(), }; @@ -267,7 +267,7 @@ const GeoLayout hmc_geo_000AE8[] = { GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07021BA0), GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_070228A0), GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x0701, geo_movtex_draw_water_regions), + GEO_ASM(HMC_MOVTEX_DORRIE_POOL_WATER, geo_movtex_draw_water_regions), GEO_CLOSE_NODE(), GEO_RETURN(), }; @@ -289,7 +289,7 @@ const GeoLayout hmc_geo_000B48[] = { // 0x0E000B90 const GeoLayout hmc_geo_000B90[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_NODE_SCREEN_AREA(10, SCREEN_CENTER_X, SCREEN_CENTER_Y, SCREEN_CENTER_X, SCREEN_CENTER_Y), GEO_OPEN_NODE(), GEO_ZBUFFER(0), GEO_OPEN_NODE(), @@ -302,7 +302,7 @@ const GeoLayout hmc_geo_000B90[] = { GEO_OPEN_NODE(), GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), GEO_OPEN_NODE(), - GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_CAMERA(CAMERA_MODE_FREE_ROAM, 0, 2000, 6000, 0, 0, 0, geo_camera_main), GEO_OPEN_NODE(), GEO_SWITCH_CASE(18, geo_switch_area), GEO_OPEN_NODE(), @@ -326,7 +326,7 @@ const GeoLayout hmc_geo_000B90[] = { GEO_BRANCH(1, hmc_geo_000B48), // 0x0E000B48 GEO_CLOSE_NODE(), GEO_RENDER_OBJ(), - GEO_ASM(0, geo_envfx_main), + GEO_ASM(ENVFX_MODE_NONE, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/hmc/areas/1/trajectory.inc.c b/levels/hmc/areas/1/trajectory.inc.c index 7e945c220..2b1a0d6a5 100644 --- a/levels/hmc/areas/1/trajectory.inc.c +++ b/levels/hmc/areas/1/trajectory.inc.c @@ -1,5 +1,5 @@ // 0x0702B86C - 0x0702B8E0 -const Trajectory hmc_seg7_trajectory_0702B86C[] = { +const Trajectory hmc_seg7_trajectory_checkerboard_platform[] = { TRAJECTORY_POS(0, /*pos*/ 1272, 2000, 5120), TRAJECTORY_POS(1, /*pos*/ 1272, 2000, 3500), TRAJECTORY_POS(2, /*pos*/ 1800, 2100, 3000), diff --git a/levels/hmc/grill_door/collision.inc.c b/levels/hmc/grill_door/collision.inc.c index 87046ae3b..e84ac5ef8 100644 --- a/levels/hmc/grill_door/collision.inc.c +++ b/levels/hmc/grill_door/collision.inc.c @@ -1,5 +1,5 @@ // 0x0702B65C - 0x0702B6E0 -const Collision hmc_seg7_collision_0702B65C[] = { +const Collision hmc_seg7_collision_grill_door[] = { COL_INIT(), COL_VERTEX_INIT(0x8), COL_VERTEX(410, 0, 51), diff --git a/levels/hmc/header.h b/levels/hmc/header.h index 68ed2f64c..9ff10e5f3 100644 --- a/levels/hmc/header.h +++ b/levels/hmc/header.h @@ -80,10 +80,10 @@ extern const Collision hmc_seg7_collision_level[]; extern const MacroObject hmc_seg7_macro_objs[]; extern const RoomData hmc_seg7_rooms[]; extern const Collision hmc_seg7_collision_elevator[]; -extern const Collision hmc_seg7_collision_0702B65C[]; +extern const Collision hmc_seg7_collision_grill_door[]; extern const Collision hmc_seg7_collision_controllable_platform[]; extern const Collision hmc_seg7_collision_controllable_platform_sub[]; -extern const Trajectory hmc_seg7_trajectory_0702B86C[]; +extern const Trajectory hmc_seg7_trajectory_checkerboard_platform[]; extern const struct MovtexQuadCollection hmc_movtex_dorrie_pool_water[]; extern const struct MovtexQuadCollection hmc_movtex_toxic_maze_mist[]; diff --git a/levels/intro/geo.c b/levels/intro/geo.c index 13f8e5117..c99074100 100644 --- a/levels/intro/geo.c +++ b/levels/intro/geo.c @@ -19,7 +19,7 @@ // 0x0E0002D0 const GeoLayout intro_geo_splash_screen[] = { - GEO_NODE_SCREEN_AREA(0, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_NODE_SCREEN_AREA(0, SCREEN_CENTER_X, SCREEN_CENTER_Y, SCREEN_CENTER_X, SCREEN_CENTER_Y), GEO_OPEN_NODE(), GEO_ZBUFFER(0), GEO_OPEN_NODE(), @@ -32,9 +32,12 @@ const GeoLayout intro_geo_splash_screen[] = { GEO_OPEN_NODE(), GEO_CAMERA_FRUSTUM(45, 128, 16384), GEO_OPEN_NODE(), - GEO_CAMERA(0, 0, 0, 3200, 0, 0, 0, 0x00000000), + GEO_CAMERA(CAMERA_MODE_NONE, 0, 0, 3200, 0, 0, 0, 0x00000000), GEO_OPEN_NODE(), GEO_ASM(0, geo_intro_super_mario_64_logo), +#if defined(HD_INTRO_TEXTURES) && defined(FLOOMBAS) + GEO_RENDER_OBJ(), +#endif GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), @@ -48,7 +51,7 @@ const GeoLayout intro_geo_splash_screen[] = { // 0x0E00035C const GeoLayout intro_geo_mario_head_regular[] = { - GEO_NODE_SCREEN_AREA(0, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_NODE_SCREEN_AREA(0, SCREEN_CENTER_X, SCREEN_CENTER_Y, SCREEN_CENTER_X, SCREEN_CENTER_Y), GEO_OPEN_NODE(), GEO_ZBUFFER(0), GEO_OPEN_NODE(), @@ -72,7 +75,7 @@ const GeoLayout intro_geo_mario_head_regular[] = { #if ENABLE_RUMBLE GEO_ZBUFFER(0), GEO_OPEN_NODE(), - GEO_ASM(0, geo_intro_rumble_pak_graphic), + GEO_ASM(INTRO_CONTEXT_NORMAL, geo_intro_rumble_pak_graphic), GEO_CLOSE_NODE(), #endif GEO_CLOSE_NODE(), @@ -81,7 +84,7 @@ const GeoLayout intro_geo_mario_head_regular[] = { // 0x0E0003B8 const GeoLayout intro_geo_mario_head_dizzy[] = { - GEO_NODE_SCREEN_AREA(0, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_NODE_SCREEN_AREA(0, SCREEN_CENTER_X, SCREEN_CENTER_Y, SCREEN_CENTER_X, SCREEN_CENTER_Y), GEO_OPEN_NODE(), GEO_ZBUFFER(0), GEO_OPEN_NODE(), @@ -105,7 +108,7 @@ const GeoLayout intro_geo_mario_head_dizzy[] = { #if ENABLE_RUMBLE GEO_ZBUFFER(0), GEO_OPEN_NODE(), - GEO_ASM(1, geo_intro_rumble_pak_graphic), + GEO_ASM(INTRO_CONTEXT_GAME_OVER, geo_intro_rumble_pak_graphic), GEO_CLOSE_NODE(), #endif GEO_CLOSE_NODE(), @@ -114,7 +117,7 @@ const GeoLayout intro_geo_mario_head_dizzy[] = { // 0x0E000414 const GeoLayout intro_geo_debug_level_select[] = { - GEO_NODE_SCREEN_AREA(0, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_NODE_SCREEN_AREA(0, SCREEN_CENTER_X, SCREEN_CENTER_Y, SCREEN_CENTER_X, SCREEN_CENTER_Y), GEO_OPEN_NODE(), GEO_ZBUFFER(0), GEO_OPEN_NODE(), @@ -127,7 +130,7 @@ const GeoLayout intro_geo_debug_level_select[] = { GEO_OPEN_NODE(), GEO_CAMERA_FRUSTUM(45, 128, 16384), GEO_OPEN_NODE(), - GEO_CAMERA(0, 0, 0, 1200, 0, 0, 0, 0x00000000), + GEO_CAMERA(CAMERA_MODE_NONE, 0, 0, 1200, 0, 0, 0, 0x00000000), GEO_OPEN_NODE(), GEO_TRANSLATE_NODE_WITH_DL(LAYER_OPAQUE, -230, 300, 0, debug_level_select_dl_07000858), GEO_TRANSLATE_NODE_WITH_DL(LAYER_OPAQUE, -120, 300, 0, debug_level_select_dl_07001100), diff --git a/levels/intro/leveldata.c b/levels/intro/leveldata.c index c8cbb4010..1b64b93b4 100644 --- a/levels/intro/leveldata.c +++ b/levels/intro/leveldata.c @@ -3318,64 +3318,114 @@ const Gfx intro_seg7_dl_main_logo[] = { }; // 0x0700B420 - 0x0700B460 -static const Vtx intro_seg7_vertex_0700B420[] = { - {{{ 96, 42, -1}, 0, { 0, 512}, {0xff, 0xff, 0xff, 0xff}}}, - {{{ 224, 42, -1}, 0, { 4096, 512}, {0xff, 0xff, 0xff, 0xff}}}, - {{{ 224, 58, -1}, 0, { 4096, 0}, {0xff, 0xff, 0xff, 0xff}}}, - {{{ 96, 58, -1}, 0, { 0, 0}, {0xff, 0xff, 0xff, 0xff}}}, +static const Vtx intro_seg7_vertex_copyright[] = { +#ifdef HD_INTRO_TEXTURES + {{{ 80, 60, -1}, 0, { 0, 0}, {0x00, 0xff, 0xf7, 0xff}}}, // 0 + {{{ 240, 60, -1}, 0, {256<<5, 0}, {0x00, 0xff, 0xf7, 0xff}}}, // 1 + + {{{ 80, 48, -1}, 0, { 0, 16<<5}, {0x00, 0xff, 0xff, 0xff}}}, // 2 + {{{ 240, 48, -1}, 0, {256<<5, 16<<5}, {0x00, 0xff, 0xff, 0xff}}}, // 3 + + {{{ 80, 36, -1}, 0, { 0, 32<<5}, {0x00, 0x7f, 0xff, 0xff}}}, // 4 + {{{ 240, 36, -1}, 0, {256<<5, 32<<5}, {0x00, 0x7f, 0xff, 0xff}}}, // 5 +#else + {{{ 96, 58, -1}, 0, { 0, 0}, {0xff, 0xff, 0xff, 0xff}}}, // 0 + {{{ 224, 58, -1}, 0, {128<<5, 0}, {0xff, 0xff, 0xff, 0xff}}}, // 1 + {{{ 96, 42, -1}, 0, { 0, 16<<5}, {0xff, 0xff, 0xff, 0xff}}}, // 2 + {{{ 224, 42, -1}, 0, {128<<5, 16<<5}, {0xff, 0xff, 0xff, 0xff}}}, // 3 +#endif }; // 0x0700B460 - 0x0700B4A0 -static const Vtx intro_seg7_vertex_0700B460[] = { - {{{ 268, 180, -1}, 0, { 0, 512}, {0xff, 0xff, 0xff, 0xff}}}, - {{{ 284, 180, -1}, 0, { 544, 512}, {0xff, 0xff, 0xff, 0xff}}}, - {{{ 284, 196, -1}, 0, { 544, 0}, {0xff, 0xff, 0xff, 0xff}}}, - {{{ 268, 196, -1}, 0, { 0, 0}, {0xff, 0xff, 0xff, 0xff}}}, +static const Vtx intro_seg7_vertex_trademark[] = { +#ifdef HD_INTRO_TEXTURES + {{{ 268, 192, -1}, 0, { 0, 0}, {0x00, 0xff, 0xf7, 0xff}}}, // 0 + {{{ 284, 192, -1}, 0, { 64<<5, 0}, {0x00, 0xff, 0xf7, 0xff}}}, // 1 + + {{{ 268, 184, -1}, 0, { 0, 32<<5}, {0x00, 0xff, 0xff, 0xff}}}, // 2 + {{{ 284, 184, -1}, 0, { 64<<5, 32<<5}, {0x00, 0xff, 0xff, 0xff}}}, // 3 + + {{{ 268, 176, -1}, 0, { 0, 64<<5}, {0x00, 0x7f, 0xff, 0xff}}}, // 4 + {{{ 284, 176, -1}, 0, { 64<<5, 64<<5}, {0x00, 0x7f, 0xff, 0xff}}}, // 5 +#else + {{{ 268, 196, -1}, 0, { 0, 0}, {0xff, 0xff, 0xff, 0xff}}}, // 0 + {{{ 284, 196, -1}, 0, { 544, 0}, {0xff, 0xff, 0xff, 0xff}}}, // 1 + {{{ 268, 180, -1}, 0, { 0, 512}, {0xff, 0xff, 0xff, 0xff}}}, // 2 + {{{ 284, 180, -1}, 0, { 544, 512}, {0xff, 0xff, 0xff, 0xff}}}, // 3 +#endif }; +#ifdef HD_INTRO_TEXTURES +// 0x0700B4A0 - 0x0700B4A2 +ALIGNED8 static const Texture intro_seg7_texture_copyright[] = { +#include "levels/intro/made_with_hackersm64.custom.i4.inc.c" +}; +// 0x0700C4A0 - 0x0700D4A0 +ALIGNED8 static const Texture intro_seg7_texture_trademark[] = { +#include "levels/intro/tm.custom.i4.inc.c" +}; +#else + #if defined(VERSION_EU) || defined(VERSION_SH) // 0x0700B4A0 - 0x0700B4A2 -ALIGNED8 static const Texture intro_seg7_texture_0700B4A0[] = { +ALIGNED8 static const Texture intro_seg7_texture_copyright[] = { #include "levels/intro/2_eu_copyright.rgba16.inc.c" }; - #else // 0x0700B4A0 - 0x0700B4A2 -ALIGNED8 static const Texture intro_seg7_texture_0700B4A0[] = { -#include "levels/intro/made_with_hackersm64.custom.rgba16.inc.c" +ALIGNED8 static const Texture intro_seg7_texture_copyright[] = { +#include "levels/intro/2_copyright.rgba16.inc.c" }; #endif #if defined(VERSION_EU) // 0x0700C4A0 - 0x0700D4A0 -ALIGNED8 static const Texture intro_seg7_texture_0700C4A0[] = { +ALIGNED8 static const Texture intro_seg7_texture_trademark[] = { #include "levels/intro/3_eu_tm.rgba16.inc.c" }; #elif defined(VERSION_SH) -ALIGNED8 static const Texture intro_seg7_texture_0700C4A0[] = { +ALIGNED8 static const Texture intro_seg7_texture_trademark[] = { #include "levels/intro/3_sh_tm.rgba16.inc.c" }; #else // 0x0700C4A0 - 0x0700D4A0 -ALIGNED8 static const Texture intro_seg7_texture_0700C4A0[] = { +ALIGNED8 static const Texture intro_seg7_texture_trademark[] = { #include "levels/intro/3_tm.rgba16.inc.c" }; #endif +#endif + // 0x0700C6A0 - 0x0700C790 const Gfx intro_seg7_dl_copyright_trademark[] = { gsDPPipeSync(), +#ifdef HD_INTRO_TEXTURES + gsDPSetCombineMode(G_CC_MODULATEFADE, G_CC_MODULATEFADE), +#else gsDPSetCombineMode(G_CC_DECALFADE, G_CC_DECALFADE), +#endif gsDPSetTextureFilter(G_TF_POINT), gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPLoadTextureBlock(intro_seg7_texture_0700B4A0, G_IM_FMT_RGBA, G_IM_SIZ_16b, 128, 16, 0, G_TX_CLAMP, G_TX_CLAMP, 7, 4, G_TX_NOLOD, G_TX_NOLOD), - gsSPVertex(intro_seg7_vertex_0700B420, 4, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0), - - gsDPLoadTextureBlock(intro_seg7_texture_0700C4A0, G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, 16, 0, G_TX_CLAMP, G_TX_CLAMP, 4, 4, G_TX_NOLOD, G_TX_NOLOD), - gsSPVertex(intro_seg7_vertex_0700B460, 4, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0), +#ifdef HD_INTRO_TEXTURES + gsDPLoadTextureBlock_4b(intro_seg7_texture_copyright, G_IM_FMT_I, 256, 32, (G_TX_NOMIRROR | G_TX_CLAMP), (G_TX_NOMIRROR | G_TX_CLAMP), 0, 8, 5, G_TX_NOLOD, G_TX_NOLOD), + gsSPVertex(intro_seg7_vertex_copyright, 6, 0), + gsSP2Triangles( 0, 3, 1, 0x0, 0, 2, 3, 0x0), + gsSP2Triangles( 2, 5, 3, 0x0, 2, 4, 5, 0x0), + + gsDPLoadTextureBlock_4b(intro_seg7_texture_trademark, G_IM_FMT_I, 64, 64, (G_TX_NOMIRROR | G_TX_CLAMP), (G_TX_NOMIRROR | G_TX_CLAMP), 0, 6, 6, G_TX_NOLOD, G_TX_NOLOD), + gsSPVertex(intro_seg7_vertex_trademark, 6, 0), + gsSP2Triangles( 0, 3, 1, 0x0, 0, 2, 3, 0x0), + gsSP2Triangles( 2, 5, 3, 0x0, 2, 4, 5, 0x0), +#else + gsDPLoadTextureBlock(intro_seg7_texture_copyright, G_IM_FMT_RGBA, G_IM_SIZ_16b, 128, 16, 0, G_TX_CLAMP, G_TX_CLAMP, 7, 4, G_TX_NOLOD, G_TX_NOLOD), + gsSPVertex(intro_seg7_vertex_copyright, 4, 0), + gsSP2Triangles( 0, 3, 1, 0x0, 0, 2, 3, 0x0), + + gsDPLoadTextureBlock(intro_seg7_texture_trademark, G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, 16, 0, G_TX_CLAMP, G_TX_CLAMP, 4, 4, G_TX_NOLOD, G_TX_NOLOD), + gsSPVertex(intro_seg7_vertex_trademark, 4, 0), + gsSP2Triangles( 0, 3, 1, 0x0, 0, 2, 3, 0x0), +#endif gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), gsDPPipeSync(), diff --git a/levels/intro/made_with_hackersm64.custom.i4.png b/levels/intro/made_with_hackersm64.custom.i4.png new file mode 100644 index 0000000000000000000000000000000000000000..d353ec6ce99753e400de5b4d46669b8f5b70a307 GIT binary patch literal 1520 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 as$(v?@$_=mjqpTJzVLMQb6Mw<&;$THen-3j literal 0 HcmV?d00001