From 0c05f6d5b643d39f5287690bf17124c68fa22145 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Fri, 24 Oct 2025 23:11:48 +0200 Subject: [PATCH] corregida la versio release de macos per a funcionar correctament amb resources.pack --- .gitignore | 6 +- Makefile | 24 +++- config/assets.txt | 300 +++++++++++++++++++++---------------------- source/asset.cpp | 6 +- tools/pack_resources | Bin 69616 -> 0 bytes 5 files changed, 177 insertions(+), 159 deletions(-) delete mode 100755 tools/pack_resources diff --git a/.gitignore b/.gitignore index ed7be47..3cfbfbc 100644 --- a/.gitignore +++ b/.gitignore @@ -19,5 +19,7 @@ cppcheck-result* desktop.ini ccae_release/ resources.pack -tools/pack_resources.cpp -pack_resources.cpp + +# Herramienta pack_resources (todas las plataformas) +tools/pack_resources +tools/pack_resources.exe diff --git a/Makefile b/Makefile index 85433b9..7facf3c 100644 --- a/Makefile +++ b/Makefile @@ -180,7 +180,9 @@ windows_debug: @echo Compilando version debug para Windows: "$(APP_NAME)_debug.exe" $(CXX) $(APP_SOURCES) $(INCLUDES) -DDEBUG -DVERBOSE $(CXXFLAGS_DEBUG) $(LDFLAGS) -o "$(WIN_TARGET_FILE)_debug.exe" -windows_release: resources.pack +windows_release: + @$(MAKE) pack_tool + @$(MAKE) resources.pack @echo off @echo Creando release para Windows - Version: $(VERSION) @@ -218,7 +220,9 @@ macos_debug: @echo "Compilando version debug para macOS: $(TARGET_NAME)_debug" $(CXX) $(APP_SOURCES) $(INCLUDES) -DDEBUG -DVERBOSE $(CXXFLAGS_DEBUG) $(LDFLAGS) -o "$(TARGET_FILE)_debug" -macos_release: resources.pack +macos_release: + @$(MAKE) pack_tool + @$(MAKE) resources.pack @echo "Creando release para macOS - Version: $(VERSION)" # Elimina datos de compilaciones anteriores $(RMDIR) "$(RELEASE_FOLDER)" @@ -285,7 +289,9 @@ linux_debug: @echo "Compilando version debug para Linux: $(TARGET_NAME)_debug" $(CXX) $(APP_SOURCES) $(INCLUDES) -DDEBUG -DVERBOSE $(CXXFLAGS_DEBUG) $(LDFLAGS) -o "$(TARGET_FILE)_debug" -linux_release: resources.pack +linux_release: + @$(MAKE) pack_tool + @$(MAKE) resources.pack @echo "Creando release para Linux - Version: $(VERSION)" # Elimina carpetas previas $(RMDIR) "$(RELEASE_FOLDER)" @@ -311,7 +317,9 @@ linux_release: resources.pack # Elimina la carpeta temporal $(RMDIR) "$(RELEASE_FOLDER)" -linux_release_desktop: resources.pack +linux_release_desktop: + @$(MAKE) pack_tool + @$(MAKE) resources.pack @echo "Creando release con integracion desktop para Linux - Version: $(VERSION)" # Elimina carpetas previas $(RMDIR) "$(RELEASE_FOLDER)" @@ -416,7 +424,9 @@ raspi_debug: @echo "Compilando version debug para Raspberry Pi: $(TARGET_NAME)_debug" $(CXX) $(APP_SOURCES) $(INCLUDES) -DVERBOSE -DDEBUG $(CXXFLAGS_DEBUG) $(LDFLAGS) -o "$(TARGET_FILE)_debug" -raspi_release: resources.pack +raspi_release: + @$(MAKE) pack_tool + @$(MAKE) resources.pack @echo "Creando release para Raspberry Pi - Version: $(VERSION)" # Elimina carpetas previas $(RMDIR) "$(RELEASE_FOLDER)" @@ -442,7 +452,9 @@ raspi_release: resources.pack # Elimina la carpeta temporal $(RMDIR) "$(RELEASE_FOLDER)" -anbernic: resources.pack +anbernic: + @$(MAKE) pack_tool + @$(MAKE) resources.pack @echo "Compilando para Anbernic: $(TARGET_NAME)" # Elimina carpetas previas $(RMDIR) "$(RELEASE_FOLDER)"_anbernic diff --git a/config/assets.txt b/config/assets.txt index 0f030e2..af7197e 100644 --- a/config/assets.txt +++ b/config/assets.txt @@ -18,191 +18,191 @@ DATA|${PREFIX}/config/pools.txt DATA|${PREFIX}/config/stages.txt # Archivos con los datos de la demo -DEMODATA|${PREFIX}/data/demo/demo1.bin -DEMODATA|${PREFIX}/data/demo/demo2.bin -DEMODATA|${PREFIX}/data/demo/demo3.bin +DEMODATA|/data/demo/demo1.bin +DEMODATA|/data/demo/demo2.bin +DEMODATA|/data/demo/demo3.bin # Música -MUSIC|${PREFIX}/data/music/congratulations.ogg -MUSIC|${PREFIX}/data/music/credits.ogg -MUSIC|${PREFIX}/data/music/intro.ogg -MUSIC|${PREFIX}/data/music/playing.ogg -MUSIC|${PREFIX}/data/music/title.ogg +MUSIC|/data/music/congratulations.ogg +MUSIC|/data/music/credits.ogg +MUSIC|/data/music/intro.ogg +MUSIC|/data/music/playing.ogg +MUSIC|/data/music/title.ogg # Sonidos -SOUND|${PREFIX}/data/sound/balloon_bounce0.wav -SOUND|${PREFIX}/data/sound/balloon_bounce1.wav -SOUND|${PREFIX}/data/sound/balloon_bounce2.wav -SOUND|${PREFIX}/data/sound/balloon_bounce3.wav -SOUND|${PREFIX}/data/sound/balloon_pop0.wav -SOUND|${PREFIX}/data/sound/balloon_pop1.wav -SOUND|${PREFIX}/data/sound/balloon_pop2.wav -SOUND|${PREFIX}/data/sound/balloon_pop3.wav -SOUND|${PREFIX}/data/sound/bullet1p.wav -SOUND|${PREFIX}/data/sound/bullet2p.wav -SOUND|${PREFIX}/data/sound/clock.wav -SOUND|${PREFIX}/data/sound/coffee_out.wav -SOUND|${PREFIX}/data/sound/continue_clock.wav -SOUND|${PREFIX}/data/sound/credit.wav -SOUND|${PREFIX}/data/sound/debian_drop.wav -SOUND|${PREFIX}/data/sound/debian_pickup.wav -SOUND|${PREFIX}/data/sound/hi_score_achieved.wav -SOUND|${PREFIX}/data/sound/item_drop.wav -SOUND|${PREFIX}/data/sound/item_pickup.wav -SOUND|${PREFIX}/data/sound/jump.wav -SOUND|${PREFIX}/data/sound/logo.wav -SOUND|${PREFIX}/data/sound/name_input_accept.wav -SOUND|${PREFIX}/data/sound/notify.wav -SOUND|${PREFIX}/data/sound/player_collision.wav -SOUND|${PREFIX}/data/sound/power_ball_explosion.wav -SOUND|${PREFIX}/data/sound/service_menu_adjust.wav -SOUND|${PREFIX}/data/sound/service_menu_back.wav -SOUND|${PREFIX}/data/sound/service_menu_move.wav -SOUND|${PREFIX}/data/sound/service_menu_select.wav -SOUND|${PREFIX}/data/sound/stage_change.wav -SOUND|${PREFIX}/data/sound/tabe_hit.wav -SOUND|${PREFIX}/data/sound/tabe.wav -SOUND|${PREFIX}/data/sound/title.wav -SOUND|${PREFIX}/data/sound/voice_aw_aw_aw.wav -SOUND|${PREFIX}/data/sound/voice_coffee.wav -SOUND|${PREFIX}/data/sound/voice_credit_thankyou.wav -SOUND|${PREFIX}/data/sound/voice_game_over.wav -SOUND|${PREFIX}/data/sound/voice_get_ready.wav -SOUND|${PREFIX}/data/sound/voice_no.wav -SOUND|${PREFIX}/data/sound/voice_power_up.wav -SOUND|${PREFIX}/data/sound/voice_recover.wav -SOUND|${PREFIX}/data/sound/voice_thankyou.wav -SOUND|${PREFIX}/data/sound/walk.wav +SOUND|/data/sound/balloon_bounce0.wav +SOUND|/data/sound/balloon_bounce1.wav +SOUND|/data/sound/balloon_bounce2.wav +SOUND|/data/sound/balloon_bounce3.wav +SOUND|/data/sound/balloon_pop0.wav +SOUND|/data/sound/balloon_pop1.wav +SOUND|/data/sound/balloon_pop2.wav +SOUND|/data/sound/balloon_pop3.wav +SOUND|/data/sound/bullet1p.wav +SOUND|/data/sound/bullet2p.wav +SOUND|/data/sound/clock.wav +SOUND|/data/sound/coffee_out.wav +SOUND|/data/sound/continue_clock.wav +SOUND|/data/sound/credit.wav +SOUND|/data/sound/debian_drop.wav +SOUND|/data/sound/debian_pickup.wav +SOUND|/data/sound/hi_score_achieved.wav +SOUND|/data/sound/item_drop.wav +SOUND|/data/sound/item_pickup.wav +SOUND|/data/sound/jump.wav +SOUND|/data/sound/logo.wav +SOUND|/data/sound/name_input_accept.wav +SOUND|/data/sound/notify.wav +SOUND|/data/sound/player_collision.wav +SOUND|/data/sound/power_ball_explosion.wav +SOUND|/data/sound/service_menu_adjust.wav +SOUND|/data/sound/service_menu_back.wav +SOUND|/data/sound/service_menu_move.wav +SOUND|/data/sound/service_menu_select.wav +SOUND|/data/sound/stage_change.wav +SOUND|/data/sound/tabe_hit.wav +SOUND|/data/sound/tabe.wav +SOUND|/data/sound/title.wav +SOUND|/data/sound/voice_aw_aw_aw.wav +SOUND|/data/sound/voice_coffee.wav +SOUND|/data/sound/voice_credit_thankyou.wav +SOUND|/data/sound/voice_game_over.wav +SOUND|/data/sound/voice_get_ready.wav +SOUND|/data/sound/voice_no.wav +SOUND|/data/sound/voice_power_up.wav +SOUND|/data/sound/voice_recover.wav +SOUND|/data/sound/voice_thankyou.wav +SOUND|/data/sound/walk.wav # Shaders OpenGL Desktop 3.3 (Windows/Linux) -DATA|${PREFIX}/data/shaders/crtpi_vertex.glsl -DATA|${PREFIX}/data/shaders/crtpi_fragment.glsl +DATA|/data/shaders/crtpi_vertex.glsl +DATA|/data/shaders/crtpi_fragment.glsl # Shaders OpenGL ES 3.0 (Raspberry Pi) - opcionales -DATA|${PREFIX}/data/shaders/crtpi_vertex_es.glsl|optional -DATA|${PREFIX}/data/shaders/crtpi_fragment_es.glsl|optional +DATA|/data/shaders/crtpi_vertex_es.glsl|optional +DATA|/data/shaders/crtpi_fragment_es.glsl|optional # Texturas - Balloons -ANIMATION|${PREFIX}/data/gfx/balloon/balloon0.ani -ANIMATION|${PREFIX}/data/gfx/balloon/balloon1.ani -ANIMATION|${PREFIX}/data/gfx/balloon/balloon2.ani -ANIMATION|${PREFIX}/data/gfx/balloon/balloon3.ani -BITMAP|${PREFIX}/data/gfx/balloon/balloon0.png -BITMAP|${PREFIX}/data/gfx/balloon/balloon1.png -BITMAP|${PREFIX}/data/gfx/balloon/balloon2.png -BITMAP|${PREFIX}/data/gfx/balloon/balloon3.png +ANIMATION|/data/gfx/balloon/balloon0.ani +ANIMATION|/data/gfx/balloon/balloon1.ani +ANIMATION|/data/gfx/balloon/balloon2.ani +ANIMATION|/data/gfx/balloon/balloon3.ani +BITMAP|/data/gfx/balloon/balloon0.png +BITMAP|/data/gfx/balloon/balloon1.png +BITMAP|/data/gfx/balloon/balloon2.png +BITMAP|/data/gfx/balloon/balloon3.png # Texturas - Explosiones -ANIMATION|${PREFIX}/data/gfx/balloon/explosion0.ani -ANIMATION|${PREFIX}/data/gfx/balloon/explosion1.ani -ANIMATION|${PREFIX}/data/gfx/balloon/explosion2.ani -ANIMATION|${PREFIX}/data/gfx/balloon/explosion3.ani -BITMAP|${PREFIX}/data/gfx/balloon/explosion0.png -BITMAP|${PREFIX}/data/gfx/balloon/explosion1.png -BITMAP|${PREFIX}/data/gfx/balloon/explosion2.png -BITMAP|${PREFIX}/data/gfx/balloon/explosion3.png +ANIMATION|/data/gfx/balloon/explosion0.ani +ANIMATION|/data/gfx/balloon/explosion1.ani +ANIMATION|/data/gfx/balloon/explosion2.ani +ANIMATION|/data/gfx/balloon/explosion3.ani +BITMAP|/data/gfx/balloon/explosion0.png +BITMAP|/data/gfx/balloon/explosion1.png +BITMAP|/data/gfx/balloon/explosion2.png +BITMAP|/data/gfx/balloon/explosion3.png # Texturas - Power Ball -ANIMATION|${PREFIX}/data/gfx/balloon/powerball.ani -BITMAP|${PREFIX}/data/gfx/balloon/powerball.png +ANIMATION|/data/gfx/balloon/powerball.ani +BITMAP|/data/gfx/balloon/powerball.png # Texturas - Bala -ANIMATION|${PREFIX}/data/gfx/bullet/bullet.ani -BITMAP|${PREFIX}/data/gfx/bullet/bullet.png +ANIMATION|/data/gfx/bullet/bullet.ani +BITMAP|/data/gfx/bullet/bullet.png # Texturas - Tabe -ANIMATION|${PREFIX}/data/gfx/tabe/tabe.ani -BITMAP|${PREFIX}/data/gfx/tabe/tabe.png +ANIMATION|/data/gfx/tabe/tabe.ani +BITMAP|/data/gfx/tabe/tabe.png # Texturas - Juego -BITMAP|${PREFIX}/data/gfx/game/game_buildings.png -BITMAP|${PREFIX}/data/gfx/game/game_clouds1.png -BITMAP|${PREFIX}/data/gfx/game/game_clouds2.png -ANIMATION|${PREFIX}/data/gfx/game/game_grass.ani -BITMAP|${PREFIX}/data/gfx/game/game_grass.png -BITMAP|${PREFIX}/data/gfx/game/game_moon.png -BITMAP|${PREFIX}/data/gfx/game/game_power_meter.png -BITMAP|${PREFIX}/data/gfx/game/game_sky_colors.png -BITMAP|${PREFIX}/data/gfx/game/game_sun.png +BITMAP|/data/gfx/game/game_buildings.png +BITMAP|/data/gfx/game/game_clouds1.png +BITMAP|/data/gfx/game/game_clouds2.png +ANIMATION|/data/gfx/game/game_grass.ani +BITMAP|/data/gfx/game/game_grass.png +BITMAP|/data/gfx/game/game_moon.png +BITMAP|/data/gfx/game/game_power_meter.png +BITMAP|/data/gfx/game/game_sky_colors.png +BITMAP|/data/gfx/game/game_sun.png # Texturas - Intro -BITMAP|${PREFIX}/data/gfx/intro/intro1.png -BITMAP|${PREFIX}/data/gfx/intro/intro2.png -BITMAP|${PREFIX}/data/gfx/intro/intro3.png -BITMAP|${PREFIX}/data/gfx/intro/intro4.png -BITMAP|${PREFIX}/data/gfx/intro/intro5.png -BITMAP|${PREFIX}/data/gfx/intro/intro6.png +BITMAP|/data/gfx/intro/intro1.png +BITMAP|/data/gfx/intro/intro2.png +BITMAP|/data/gfx/intro/intro3.png +BITMAP|/data/gfx/intro/intro4.png +BITMAP|/data/gfx/intro/intro5.png +BITMAP|/data/gfx/intro/intro6.png # Texturas - Logo -BITMAP|${PREFIX}/data/gfx/logo/logo_jailgames_mini.png -BITMAP|${PREFIX}/data/gfx/logo/logo_jailgames.png -BITMAP|${PREFIX}/data/gfx/logo/logo_since_1998.png +BITMAP|/data/gfx/logo/logo_jailgames_mini.png +BITMAP|/data/gfx/logo/logo_jailgames.png +BITMAP|/data/gfx/logo/logo_since_1998.png # Texturas - Items -ANIMATION|${PREFIX}/data/gfx/item/item_clock.ani -ANIMATION|${PREFIX}/data/gfx/item/item_coffee_machine.ani -ANIMATION|${PREFIX}/data/gfx/item/item_coffee.ani -ANIMATION|${PREFIX}/data/gfx/item/item_debian.ani -ANIMATION|${PREFIX}/data/gfx/item/item_points1_disk.ani -ANIMATION|${PREFIX}/data/gfx/item/item_points2_gavina.ani -ANIMATION|${PREFIX}/data/gfx/item/item_points3_pacmar.ani -BITMAP|${PREFIX}/data/gfx/item/item_clock.png -BITMAP|${PREFIX}/data/gfx/item/item_coffee_machine.png -BITMAP|${PREFIX}/data/gfx/item/item_coffee.png -BITMAP|${PREFIX}/data/gfx/item/item_debian.png -BITMAP|${PREFIX}/data/gfx/item/item_points1_disk.png -BITMAP|${PREFIX}/data/gfx/item/item_points2_gavina.png -BITMAP|${PREFIX}/data/gfx/item/item_points3_pacmar.png +ANIMATION|/data/gfx/item/item_clock.ani +ANIMATION|/data/gfx/item/item_coffee_machine.ani +ANIMATION|/data/gfx/item/item_coffee.ani +ANIMATION|/data/gfx/item/item_debian.ani +ANIMATION|/data/gfx/item/item_points1_disk.ani +ANIMATION|/data/gfx/item/item_points2_gavina.ani +ANIMATION|/data/gfx/item/item_points3_pacmar.ani +BITMAP|/data/gfx/item/item_clock.png +BITMAP|/data/gfx/item/item_coffee_machine.png +BITMAP|/data/gfx/item/item_coffee.png +BITMAP|/data/gfx/item/item_debian.png +BITMAP|/data/gfx/item/item_points1_disk.png +BITMAP|/data/gfx/item/item_points2_gavina.png +BITMAP|/data/gfx/item/item_points3_pacmar.png # Texturas - Titulo -ANIMATION|${PREFIX}/data/gfx/title/title_dust.ani -BITMAP|${PREFIX}/data/gfx/title/title_arcade_edition.png -BITMAP|${PREFIX}/data/gfx/title/title_bg_tile.png -BITMAP|${PREFIX}/data/gfx/title/title_coffee.png -BITMAP|${PREFIX}/data/gfx/title/title_crisis.png -BITMAP|${PREFIX}/data/gfx/title/title_dust.png +ANIMATION|/data/gfx/title/title_dust.ani +BITMAP|/data/gfx/title/title_arcade_edition.png +BITMAP|/data/gfx/title/title_bg_tile.png +BITMAP|/data/gfx/title/title_coffee.png +BITMAP|/data/gfx/title/title_crisis.png +BITMAP|/data/gfx/title/title_dust.png # Texturas - Jugador 1 -BITMAP|${PREFIX}/data/gfx/player/player1_power.png -BITMAP|${PREFIX}/data/gfx/player/player1.gif -PALETTE|${PREFIX}/data/gfx/player/player1_coffee1.pal -PALETTE|${PREFIX}/data/gfx/player/player1_coffee2.pal -PALETTE|${PREFIX}/data/gfx/player/player1_invencible.pal +BITMAP|/data/gfx/player/player1_power.png +BITMAP|/data/gfx/player/player1.gif +PALETTE|/data/gfx/player/player1_coffee1.pal +PALETTE|/data/gfx/player/player1_coffee2.pal +PALETTE|/data/gfx/player/player1_invencible.pal # Texturas - Jugador 2 -BITMAP|${PREFIX}/data/gfx/player/player2_power.png -BITMAP|${PREFIX}/data/gfx/player/player2.gif -PALETTE|${PREFIX}/data/gfx/player/player2_coffee1.pal -PALETTE|${PREFIX}/data/gfx/player/player2_coffee2.pal -PALETTE|${PREFIX}/data/gfx/player/player2_invencible.pal +BITMAP|/data/gfx/player/player2_power.png +BITMAP|/data/gfx/player/player2.gif +PALETTE|/data/gfx/player/player2_coffee1.pal +PALETTE|/data/gfx/player/player2_coffee2.pal +PALETTE|/data/gfx/player/player2_invencible.pal # Animaciones del jugador -ANIMATION|${PREFIX}/data/gfx/player/player_power.ani -ANIMATION|${PREFIX}/data/gfx/player/player1.ani -ANIMATION|${PREFIX}/data/gfx/player/player2.ani +ANIMATION|/data/gfx/player/player_power.ani +ANIMATION|/data/gfx/player/player1.ani +ANIMATION|/data/gfx/player/player2.ani # Fuentes de texto -BITMAP|${PREFIX}/data/font/04b_25_2x.png -BITMAP|${PREFIX}/data/font/04b_25_2x_white.png -BITMAP|${PREFIX}/data/font/04b_25_flat_2x.png -BITMAP|${PREFIX}/data/font/04b_25_flat.png -BITMAP|${PREFIX}/data/font/04b_25_grey.png -BITMAP|${PREFIX}/data/font/04b_25_metal.png -BITMAP|${PREFIX}/data/font/04b_25_reversed_2x.png -BITMAP|${PREFIX}/data/font/04b_25_reversed.png -BITMAP|${PREFIX}/data/font/04b_25_white.png -BITMAP|${PREFIX}/data/font/04b_25.png -BITMAP|${PREFIX}/data/font/8bithud.png -BITMAP|${PREFIX}/data/font/aseprite.png -BITMAP|${PREFIX}/data/font/smb2_grad.png -BITMAP|${PREFIX}/data/font/smb2.png -FONT|${PREFIX}/data/font/04b_25_2x.txt -FONT|${PREFIX}/data/font/04b_25.txt -FONT|${PREFIX}/data/font/8bithud.txt -FONT|${PREFIX}/data/font/aseprite.txt -FONT|${PREFIX}/data/font/smb2.txt +BITMAP|/data/font/04b_25_2x.png +BITMAP|/data/font/04b_25_2x_white.png +BITMAP|/data/font/04b_25_flat_2x.png +BITMAP|/data/font/04b_25_flat.png +BITMAP|/data/font/04b_25_grey.png +BITMAP|/data/font/04b_25_metal.png +BITMAP|/data/font/04b_25_reversed_2x.png +BITMAP|/data/font/04b_25_reversed.png +BITMAP|/data/font/04b_25_white.png +BITMAP|/data/font/04b_25.png +BITMAP|/data/font/8bithud.png +BITMAP|/data/font/aseprite.png +BITMAP|/data/font/smb2_grad.png +BITMAP|/data/font/smb2.png +FONT|/data/font/04b_25_2x.txt +FONT|/data/font/04b_25.txt +FONT|/data/font/8bithud.txt +FONT|/data/font/aseprite.txt +FONT|/data/font/smb2.txt # Idiomas -LANG|${PREFIX}/data/lang/ba_BA.json -LANG|${PREFIX}/data/lang/en_UK.json -LANG|${PREFIX}/data/lang/es_ES.json \ No newline at end of file +LANG|/data/lang/ba_BA.json +LANG|/data/lang/en_UK.json +LANG|/data/lang/es_ES.json \ No newline at end of file diff --git a/source/asset.cpp b/source/asset.cpp index 228d88b..81b4dd4 100644 --- a/source/asset.cpp +++ b/source/asset.cpp @@ -197,8 +197,12 @@ auto Asset::check() const -> bool { // Comprueba que existe un fichero auto Asset::checkFile(const std::string& path) const -> bool { - // Construir ruta del pack usando executable_path_ + // Construir ruta del pack usando executable_path_ (misma lógica que Director::init) +#ifdef MACOS_BUNDLE + std::string pack_path = executable_path_ + "../Resources/resources.pack"; +#else std::string pack_path = executable_path_ + "resources.pack"; +#endif bool pack_exists = std::filesystem::exists(pack_path); if (pack_exists) { diff --git a/tools/pack_resources b/tools/pack_resources deleted file mode 100755 index 46e9685440c5ebd18a16f4b9020da31155be934e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69616 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 E7eV2j(*OVf