From 29000061a5c0e9a4a666f9d2432bfb3a765e1aaa Mon Sep 17 00:00:00 2001 From: "funniman.exe" Date: Sat, 11 Jan 2025 14:02:05 -0800 Subject: [PATCH] please fucking work --- .gitignore | 24 +- CMakeLists.txt | 38 + CONFIG/MainDlg.cpp | 18 + CONFIG/MainDlg.h | 2 + CONFIG/config.cpp | 28 +- CONFIG/config.h | 32 +- CONFIG/res/CONFIG.ico | Bin 0 -> 74814 bytes CONFIG/res/config.aps | Bin 0 -> 78648 bytes CONFIG/res/config.rc | 298 +++- CONFIG/res/resource.h | 2 + CONFIG/res/resrc1.h | 16 + CONFIG_orig/AboutDlg.cpp | 19 + CONFIG_orig/AboutDlg.h | 39 + CONFIG_orig/ConfigCommandLineInfo.cpp | 22 + CONFIG_orig/ConfigCommandLineInfo.h | 21 + CONFIG_orig/MainDlg.cpp | 346 ++++ CONFIG_orig/MainDlg.h | 70 + CONFIG_orig/StdAfx.cpp | 5 + CONFIG_orig/StdAfx.h | 31 + CONFIG_orig/config.cpp | 435 +++++ CONFIG_orig/config.h | 91 ++ CONFIG_orig/detectdx5.cpp | 142 ++ CONFIG_orig/detectdx5.h | 10 + CONFIG_orig/res/CONFIG.ico | Bin 0 -> 74814 bytes CONFIG_orig/res/config.aps | Bin 0 -> 78648 bytes CONFIG_orig/res/config.rc | 82 + CONFIG_orig/res/lego.ico | Bin 0 -> 1078 bytes CONFIG_orig/res/resource.h | 25 + CONFIG_orig/res/resrc1.h | 16 + CONFIG_orig/res/shark.bmp | Bin 0 -> 56230 bytes ICON_RES_SOURCE/CONFIGraw.png | Bin 0 -> 7363 bytes ICON_RES_SOURCE/TMAraw.png | Bin 0 -> 4200 bytes ISLE/isleapp.cpp | 218 ++- ISLE/isleapp.h | 1 + ISLE/res/TMA.ico | Bin 0 -> 41086 bytes ISLE/res/arrow.cur | Bin 326 -> 1254 bytes ISLE/res/busy.ani | Bin 0 -> 2406 bytes ISLE/res/busy.cur | Bin 326 -> 326 bytes ISLE/res/exclaim.cur | Bin 0 -> 766 bytes ISLE/res/isle.rc | 32 +- ISLE/res/no.cur | Bin 326 -> 766 bytes LEGO1/lego/legoomni/include/act3brickster.h | 31 + LEGO1/lego/legoomni/include/act3cop.h | 25 + LEGO1/lego/legoomni/include/act3shark.h | 42 + LEGO1/lego/legoomni/include/legocarbuild.h | 7 + LEGO1/lego/legoomni/include/legoextraactor.h | 12 + LEGO1/lego/legoomni/include/legojetski.h | 70 + LEGO1/lego/legoomni/include/radio.h | 8 + .../legoomni/src/actors/act3brickster.cpp | 47 + LEGO1/lego/legoomni/src/actors/act3cop.cpp | 35 + LEGO1/lego/legoomni/src/actors/act3shark.cpp | 28 + LEGO1/lego/legoomni/src/actors/radio.cpp | 9 + .../lego/legoomni/src/build/legocarbuild.cpp | 10 + .../src/common/legobuildingmanager.cpp | 4 + .../legoomni/src/common/legoplantmanager.cpp | 4 + LEGO1/lego/legoomni/src/entity/legojetski.cpp | 90 + .../legoomni/src/entity/legonavcontroller.cpp | 4 +- .../legoomni/src/paths/legoextraactor.cpp | 109 ++ LEGO1/lego/sources/geom/legobox.cpp | 19 + LEGO1/lego/sources/geom/legobox.h | 32 + LEGO1/lego/sources/geom/legomesh.cpp | 91 ++ LEGO1/lego/sources/geom/legomesh.h | 78 + LEGO1/lego/sources/geom/legosphere.cpp | 19 + LEGO1/lego/sources/geom/legosphere.h | 21 + LEGO1/lego/sources/geom/legovertex.cpp | 30 + LEGO1/lego/sources/geom/legovertex.h | 30 + LEGO1/lego/sources/misc/legocolor.cpp | 22 + LEGO1/lego/sources/misc/legocolor.h | 26 + LEGO1/omni/include/mxsmack.h | 54 + LEGO1/omni/include/mxstreamlist.h | 69 + LEGO1/omni/src/stream/mxdssource.cpp | 23 + LEGO1/omni/src/stream/mxstreamlist.cpp | 83 + LEGO1/omni/src/stream/mxstreamprovider.cpp | 17 + LEGO1/omni/src/video/mxsmack.cpp | 270 +++ LEGO1/realtime/matrix.cpp | 5 + LEGO1/realtime/vector.cpp | 7 + LEGO1/res/lego1.rc | 20 +- LEGO1/res/lego1_beta.rc | 39 + README.md | 49 +- build/D3D8.dll | Bin 0 -> 141824 bytes build/D3DImm.dll | Bin 0 -> 88576 bytes build/DDraw.dll | Bin 0 -> 88064 bytes build/README.txt | 38 + build/compile.bat | 5 + build/compile_commands.json | 1448 +++++++++++++++++ build/d3drm.dll | Bin 0 -> 350208 bytes build/dgVoodoo.conf | Bin 0 -> 128 bytes cmake/reccmp.cmake | 116 +- compile.bat | 9 + reconfigureCMake.bat | 3 + tools/datacmp.py | 371 +++++ tools/decomplint/decomplint.py | 103 ++ tools/ghidra_scripts/README.md | 25 + .../import_functions_and_types_from_pdb.py | 322 ++++ tools/ghidra_scripts/lego_util/__init__.py | 0 tools/ghidra_scripts/lego_util/exceptions.py | 47 + .../lego_util/function_importer.py | 421 +++++ .../ghidra_scripts/lego_util/ghidra_helper.py | 122 ++ tools/ghidra_scripts/lego_util/headers.pyi | 20 + .../lego_util/pdb_extraction.py | 182 +++ tools/ghidra_scripts/lego_util/statistics.py | 68 + .../ghidra_scripts/lego_util/type_importer.py | 541 ++++++ tools/isledecomp/.gitignore | 2 + tools/isledecomp/isledecomp/__init__.py | 4 + tools/isledecomp/isledecomp/bin.py | 574 +++++++ .../isledecomp/isledecomp/compare/__init__.py | 1 + .../isledecomp/compare/asm/__init__.py | 2 + .../isledecomp/compare/asm/const.py | 27 + .../isledecomp/compare/asm/fixes.py | 314 ++++ .../isledecomp/compare/asm/instgen.py | 249 +++ .../isledecomp/compare/asm/parse.py | 243 +++ .../isledecomp/isledecomp/compare/asm/swap.py | 80 + tools/isledecomp/isledecomp/compare/core.py | 914 +++++++++++ tools/isledecomp/isledecomp/compare/db.py | 554 +++++++ tools/isledecomp/isledecomp/compare/diff.py | 98 ++ tools/isledecomp/isledecomp/compare/lines.py | 69 + .../isledecomp/isledecomp/cvdump/__init__.py | 5 + .../isledecomp/isledecomp/cvdump/analysis.py | 187 +++ .../isledecomp/isledecomp/cvdump/demangler.py | 121 ++ tools/isledecomp/isledecomp/cvdump/parser.py | 182 +++ tools/isledecomp/isledecomp/cvdump/runner.py | 83 + tools/isledecomp/isledecomp/cvdump/symbols.py | 163 ++ tools/isledecomp/isledecomp/cvdump/types.py | 737 +++++++++ tools/isledecomp/isledecomp/dir.py | 103 ++ tools/isledecomp/isledecomp/lib/DUMPBIN.EXE | Bin 0 -> 5632 bytes tools/isledecomp/isledecomp/lib/LINK.EXE | Bin 0 -> 514048 bytes tools/isledecomp/isledecomp/lib/MSPDB41.DLL | Bin 0 -> 271872 bytes tools/isledecomp/isledecomp/lib/__init__.py | 13 + tools/isledecomp/isledecomp/lib/cvdump.exe | Bin 0 -> 979968 bytes .../isledecomp/isledecomp/parser/__init__.py | 3 + .../isledecomp/isledecomp/parser/codebase.py | 57 + tools/isledecomp/isledecomp/parser/error.py | 97 ++ tools/isledecomp/isledecomp/parser/linter.py | 144 ++ tools/isledecomp/isledecomp/parser/marker.py | 146 ++ tools/isledecomp/isledecomp/parser/node.py | 63 + tools/isledecomp/isledecomp/parser/parser.py | 556 +++++++ tools/isledecomp/isledecomp/parser/util.py | 141 ++ tools/isledecomp/isledecomp/types.py | 13 + tools/isledecomp/isledecomp/utils.py | 308 ++++ tools/isledecomp/setup.py | 11 + tools/isledecomp/tests/__init__.py | 0 tools/isledecomp/tests/conftest.py | 3 + .../isledecomp/tests/samples/basic_class.cpp | 30 + tools/isledecomp/tests/samples/basic_file.cpp | 22 + .../tests/samples/global_variables.cpp | 14 + tools/isledecomp/tests/samples/inline.cpp | 8 + .../tests/samples/missing_offset.cpp | 16 + .../tests/samples/multiple_offsets.cpp | 25 + .../tests/samples/oneline_function.cpp | 12 + .../isledecomp/tests/samples/out_of_order.cpp | 20 + .../tests/samples/poorly_formatted.cpp | 23 + tools/isledecomp/tests/test_compare_db.py | 82 + tools/isledecomp/tests/test_curly.py | 73 + tools/isledecomp/tests/test_cvdump.py | 59 + tools/isledecomp/tests/test_cvdump_symbols.py | 38 + tools/isledecomp/tests/test_cvdump_types.py | 705 ++++++++ tools/isledecomp/tests/test_demangler.py | 83 + tools/isledecomp/tests/test_instgen.py | 212 +++ tools/isledecomp/tests/test_islebin.py | 152 ++ tools/isledecomp/tests/test_linter.py | 144 ++ tools/isledecomp/tests/test_parser.py | 773 +++++++++ tools/isledecomp/tests/test_parser_samples.py | 141 ++ .../tests/test_parser_statechange.py | 141 ++ tools/isledecomp/tests/test_parser_util.py | 209 +++ .../isledecomp/tests/test_path_resolver_nt.py | 32 + .../tests/test_path_resolver_posix.py | 69 + tools/isledecomp/tests/test_sanitize.py | 296 ++++ tools/reccmp/config.png | Bin 0 -> 1432 bytes tools/reccmp/isle.png | Bin 0 -> 5448 bytes tools/reccmp/lego1.png | Bin 0 -> 5615 bytes tools/reccmp/reccmp.js | 867 ++++++++++ tools/reccmp/reccmp.py | 344 ++++ tools/reccmp/template.html | 365 +++++ tools/reccmp/template.svg | 119 ++ tools/roadmap/roadmap.py | 494 ++++++ tools/verexp/verexp.py | 75 + tools/vtable/vtable.py | 111 ++ 177 files changed, 19223 insertions(+), 241 deletions(-) create mode 100644 CONFIG/res/CONFIG.ico create mode 100644 CONFIG/res/config.aps create mode 100644 CONFIG/res/resrc1.h create mode 100644 CONFIG_orig/AboutDlg.cpp create mode 100644 CONFIG_orig/AboutDlg.h create mode 100644 CONFIG_orig/ConfigCommandLineInfo.cpp create mode 100644 CONFIG_orig/ConfigCommandLineInfo.h create mode 100644 CONFIG_orig/MainDlg.cpp create mode 100644 CONFIG_orig/MainDlg.h create mode 100644 CONFIG_orig/StdAfx.cpp create mode 100644 CONFIG_orig/StdAfx.h create mode 100644 CONFIG_orig/config.cpp create mode 100644 CONFIG_orig/config.h create mode 100644 CONFIG_orig/detectdx5.cpp create mode 100644 CONFIG_orig/detectdx5.h create mode 100644 CONFIG_orig/res/CONFIG.ico create mode 100644 CONFIG_orig/res/config.aps create mode 100644 CONFIG_orig/res/config.rc create mode 100644 CONFIG_orig/res/lego.ico create mode 100644 CONFIG_orig/res/resource.h create mode 100644 CONFIG_orig/res/resrc1.h create mode 100644 CONFIG_orig/res/shark.bmp create mode 100644 ICON_RES_SOURCE/CONFIGraw.png create mode 100644 ICON_RES_SOURCE/TMAraw.png create mode 100644 ISLE/res/TMA.ico create mode 100644 ISLE/res/busy.ani create mode 100644 ISLE/res/exclaim.cur create mode 100644 LEGO1/lego/legoomni/include/act3brickster.h create mode 100644 LEGO1/lego/legoomni/include/act3cop.h create mode 100644 LEGO1/lego/legoomni/include/act3shark.h create mode 100644 LEGO1/lego/legoomni/include/legojetski.h create mode 100644 LEGO1/lego/legoomni/src/actors/act3brickster.cpp create mode 100644 LEGO1/lego/legoomni/src/actors/act3cop.cpp create mode 100644 LEGO1/lego/legoomni/src/actors/act3shark.cpp create mode 100644 LEGO1/lego/legoomni/src/entity/legojetski.cpp create mode 100644 LEGO1/lego/sources/geom/legobox.cpp create mode 100644 LEGO1/lego/sources/geom/legobox.h create mode 100644 LEGO1/lego/sources/geom/legomesh.cpp create mode 100644 LEGO1/lego/sources/geom/legomesh.h create mode 100644 LEGO1/lego/sources/geom/legosphere.cpp create mode 100644 LEGO1/lego/sources/geom/legosphere.h create mode 100644 LEGO1/lego/sources/geom/legovertex.cpp create mode 100644 LEGO1/lego/sources/geom/legovertex.h create mode 100644 LEGO1/lego/sources/misc/legocolor.cpp create mode 100644 LEGO1/lego/sources/misc/legocolor.h create mode 100644 LEGO1/omni/include/mxsmack.h create mode 100644 LEGO1/omni/include/mxstreamlist.h create mode 100644 LEGO1/omni/src/stream/mxdssource.cpp create mode 100644 LEGO1/omni/src/stream/mxstreamlist.cpp create mode 100644 LEGO1/omni/src/stream/mxstreamprovider.cpp create mode 100644 LEGO1/omni/src/video/mxsmack.cpp create mode 100644 LEGO1/realtime/matrix.cpp create mode 100644 LEGO1/realtime/vector.cpp create mode 100644 LEGO1/res/lego1_beta.rc create mode 100644 build/D3D8.dll create mode 100644 build/D3DImm.dll create mode 100644 build/DDraw.dll create mode 100644 build/README.txt create mode 100644 build/compile.bat create mode 100644 build/compile_commands.json create mode 100644 build/d3drm.dll create mode 100644 build/dgVoodoo.conf create mode 100644 compile.bat create mode 100644 reconfigureCMake.bat create mode 100644 tools/datacmp.py create mode 100644 tools/decomplint/decomplint.py create mode 100644 tools/ghidra_scripts/README.md create mode 100644 tools/ghidra_scripts/import_functions_and_types_from_pdb.py create mode 100644 tools/ghidra_scripts/lego_util/__init__.py create mode 100644 tools/ghidra_scripts/lego_util/exceptions.py create mode 100644 tools/ghidra_scripts/lego_util/function_importer.py create mode 100644 tools/ghidra_scripts/lego_util/ghidra_helper.py create mode 100644 tools/ghidra_scripts/lego_util/headers.pyi create mode 100644 tools/ghidra_scripts/lego_util/pdb_extraction.py create mode 100644 tools/ghidra_scripts/lego_util/statistics.py create mode 100644 tools/ghidra_scripts/lego_util/type_importer.py create mode 100644 tools/isledecomp/.gitignore create mode 100644 tools/isledecomp/isledecomp/__init__.py create mode 100644 tools/isledecomp/isledecomp/bin.py create mode 100644 tools/isledecomp/isledecomp/compare/__init__.py create mode 100644 tools/isledecomp/isledecomp/compare/asm/__init__.py create mode 100644 tools/isledecomp/isledecomp/compare/asm/const.py create mode 100644 tools/isledecomp/isledecomp/compare/asm/fixes.py create mode 100644 tools/isledecomp/isledecomp/compare/asm/instgen.py create mode 100644 tools/isledecomp/isledecomp/compare/asm/parse.py create mode 100644 tools/isledecomp/isledecomp/compare/asm/swap.py create mode 100644 tools/isledecomp/isledecomp/compare/core.py create mode 100644 tools/isledecomp/isledecomp/compare/db.py create mode 100644 tools/isledecomp/isledecomp/compare/diff.py create mode 100644 tools/isledecomp/isledecomp/compare/lines.py create mode 100644 tools/isledecomp/isledecomp/cvdump/__init__.py create mode 100644 tools/isledecomp/isledecomp/cvdump/analysis.py create mode 100644 tools/isledecomp/isledecomp/cvdump/demangler.py create mode 100644 tools/isledecomp/isledecomp/cvdump/parser.py create mode 100644 tools/isledecomp/isledecomp/cvdump/runner.py create mode 100644 tools/isledecomp/isledecomp/cvdump/symbols.py create mode 100644 tools/isledecomp/isledecomp/cvdump/types.py create mode 100644 tools/isledecomp/isledecomp/dir.py create mode 100644 tools/isledecomp/isledecomp/lib/DUMPBIN.EXE create mode 100644 tools/isledecomp/isledecomp/lib/LINK.EXE create mode 100644 tools/isledecomp/isledecomp/lib/MSPDB41.DLL create mode 100644 tools/isledecomp/isledecomp/lib/__init__.py create mode 100644 tools/isledecomp/isledecomp/lib/cvdump.exe create mode 100644 tools/isledecomp/isledecomp/parser/__init__.py create mode 100644 tools/isledecomp/isledecomp/parser/codebase.py create mode 100644 tools/isledecomp/isledecomp/parser/error.py create mode 100644 tools/isledecomp/isledecomp/parser/linter.py create mode 100644 tools/isledecomp/isledecomp/parser/marker.py create mode 100644 tools/isledecomp/isledecomp/parser/node.py create mode 100644 tools/isledecomp/isledecomp/parser/parser.py create mode 100644 tools/isledecomp/isledecomp/parser/util.py create mode 100644 tools/isledecomp/isledecomp/types.py create mode 100644 tools/isledecomp/isledecomp/utils.py create mode 100644 tools/isledecomp/setup.py create mode 100644 tools/isledecomp/tests/__init__.py create mode 100644 tools/isledecomp/tests/conftest.py create mode 100644 tools/isledecomp/tests/samples/basic_class.cpp create mode 100644 tools/isledecomp/tests/samples/basic_file.cpp create mode 100644 tools/isledecomp/tests/samples/global_variables.cpp create mode 100644 tools/isledecomp/tests/samples/inline.cpp create mode 100644 tools/isledecomp/tests/samples/missing_offset.cpp create mode 100644 tools/isledecomp/tests/samples/multiple_offsets.cpp create mode 100644 tools/isledecomp/tests/samples/oneline_function.cpp create mode 100644 tools/isledecomp/tests/samples/out_of_order.cpp create mode 100644 tools/isledecomp/tests/samples/poorly_formatted.cpp create mode 100644 tools/isledecomp/tests/test_compare_db.py create mode 100644 tools/isledecomp/tests/test_curly.py create mode 100644 tools/isledecomp/tests/test_cvdump.py create mode 100644 tools/isledecomp/tests/test_cvdump_symbols.py create mode 100644 tools/isledecomp/tests/test_cvdump_types.py create mode 100644 tools/isledecomp/tests/test_demangler.py create mode 100644 tools/isledecomp/tests/test_instgen.py create mode 100644 tools/isledecomp/tests/test_islebin.py create mode 100644 tools/isledecomp/tests/test_linter.py create mode 100644 tools/isledecomp/tests/test_parser.py create mode 100644 tools/isledecomp/tests/test_parser_samples.py create mode 100644 tools/isledecomp/tests/test_parser_statechange.py create mode 100644 tools/isledecomp/tests/test_parser_util.py create mode 100644 tools/isledecomp/tests/test_path_resolver_nt.py create mode 100644 tools/isledecomp/tests/test_path_resolver_posix.py create mode 100644 tools/isledecomp/tests/test_sanitize.py create mode 100644 tools/reccmp/config.png create mode 100644 tools/reccmp/isle.png create mode 100644 tools/reccmp/lego1.png create mode 100644 tools/reccmp/reccmp.js create mode 100644 tools/reccmp/reccmp.py create mode 100644 tools/reccmp/template.html create mode 100644 tools/reccmp/template.svg create mode 100644 tools/roadmap/roadmap.py create mode 100644 tools/verexp/verexp.py create mode 100644 tools/vtable/vtable.py diff --git a/.gitignore b/.gitignore index 81e69517..e266e7b2 100644 --- a/.gitignore +++ b/.gitignore @@ -14,8 +14,6 @@ ENV/ VENV/ env.bak/ venv.bak/ -/build/ -/build_debug/ /legobin/ *.swp LEGO1PROGRESS.* @@ -25,5 +23,23 @@ tools/ghidra_scripts/import.log # By convention we put the retail binaries into ./legobin. # These entries are kept for now since that convention has not always been around. -ISLE.EXE -LEGO1.DLL +build/*.EXE +build/B_TMA.DLL +build/X10_TMA.DLL +build/*.pdb +build/*.lib +build/*.exp +setupPaths.bat +build/CMakeFiles/ +build/SAV/ + +build/CMakeCache.txt +build/Makefile +build/cmake_install.cmake +build/tma_sources.txt + +dgVoodooSetup.exe +build/Lego/ +!build/Lego/Scripts +build/Lego/Scripts/* +!build/Lego/Scripts/NOCD.SI diff --git a/CMakeLists.txt b/CMakeLists.txt index 2fc4a4ca..f9ec51df 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -58,6 +58,7 @@ endfunction() message(STATUS "MSVC for decompilation: ${MSVC_FOR_DECOMP}") option(ISLE_WERROR "Treat warnings as errors" OFF) +<<<<<<< Updated upstream option(ISLE_BUILD_APP "Build ISLE.EXE application" ON) cmake_dependent_option(ISLE_BUILD_CONFIG "Build CONFIG.EXE application" ON "NOT MINGW" OFF) option(ISLE_USE_SMARTHEAP "Build LEGO1.DLL with SmartHeap" ${MSVC_FOR_DECOMP}) @@ -66,6 +67,16 @@ option(ISLE_DECOMP_ASSERT "Assert struct size" ${MSVC_FOR_DECOMP}) cmake_dependent_option(ISLE_USE_DX5_LIBS "Build with internal DirectX 5 SDK Libraries" ON ISLE_USE_DX5 OFF) option(ISLE_BUILD_LEGO1 "Build LEGO1.DLL library" ON) option(ISLE_BUILD_BETA10 "Build BETA10.DLL library" OFF) +======= +option(ISLE_BUILD_APP "Build TMA_LAUNCHER.EXE application" ON) +cmake_dependent_option(ISLE_BUILD_CONFIG "Build CONFIGURE.EXE application" ON "NOT MINGW" OFF) +option(ISLE_USE_SMARTHEAP "Build B_TMA.DLL with SmartHeap" ${MSVC_FOR_DECOMP}) +option(ISLE_USE_DX5 "Build with internal DirectX 5 SDK" ON) +option(ISLE_DECOMP_ASSERT "Assert struct size" ${MSVC_FOR_DECOMP}) +cmake_dependent_option(ISLE_USE_DX5_LIBS "Build with internal DirectX 5 SDK Libraries" ON ISLE_USE_DX5 OFF) +option(ISLE_BUILD_LEGO1 "Build B_TMA.DLL library" ON) +option(ISLE_BUILD_BETA10 "Build X10_TMA.DLL library" OFF) +>>>>>>> Stashed changes if(NOT (ISLE_BUILD_LEGO1 OR ISLE_BUILD_BETA10)) message(FATAL_ERROR "ISLE_BUILD_LEGO1 AND ISLE_BUILD_BETA10 cannot be both disabled") @@ -321,9 +332,17 @@ function(add_lego_libraries NAME) LEGO1/lego/legoomni/src/paths/legoanimactor.cpp LEGO1/lego/legoomni/src/entity/legoworld.cpp LEGO1/lego/legoomni/src/build/legocarbuild.cpp +<<<<<<< Updated upstream + LEGO1/lego/legoomni/src/actors/ambulance.cpp LEGO1/lego/legoomni/src/common/legoplantmanager.cpp LEGO1/lego/legoomni/src/actors/bumpbouy.cpp LEGO1/modeldb/modeldb.cpp + LEGO1/lego/legoomni/src/actors/pizza.cpp +======= + LEGO1/lego/legoomni/src/common/legoplantmanager.cpp + LEGO1/lego/legoomni/src/actors/bumpbouy.cpp + LEGO1/modeldb/modeldb.cpp +>>>>>>> Stashed changes LEGO1/lego/legoomni/src/actors/racecar.cpp LEGO1/lego/legoomni/src/control/legocontrolmanager.cpp LEGO1/lego/legoomni/src/audio/legosoundmanager.cpp @@ -334,8 +353,11 @@ function(add_lego_libraries NAME) LEGO1/lego/legoomni/src/paths/legopathactor.cpp LEGO1/lego/legoomni/src/common/legobuildingmanager.cpp LEGO1/lego/legoomni/src/worlds/isle.cpp +<<<<<<< Updated upstream +======= LEGO1/lego/legoomni/src/actors/ambulance.cpp LEGO1/lego/legoomni/src/actors/pizza.cpp +>>>>>>> Stashed changes LEGO1/lego/legoomni/src/actors/motorcycle.cpp LEGO1/lego/legoomni/src/actors/act3ammo.cpp LEGO1/lego/legoomni/src/audio/legocachesoundmanager.cpp @@ -468,7 +490,11 @@ endif() if(ISLE_BUILD_LEGO1) add_lego_libraries(lego1 LINK_LIBRARIES ${lego1_link_libraries} +<<<<<<< Updated upstream DLL_OUTPUT_NAME "LEGO1" +======= + DLL_OUTPUT_NAME "B_TMA" +>>>>>>> Stashed changes DLL_PREFIX "" DLL_SUFFIX ".DLL" OUT_TARGETS lego1_targets @@ -479,7 +505,11 @@ endif() if(ISLE_BUILD_BETA10) add_lego_libraries(beta10 SUFFIX "-beta10" +<<<<<<< Updated upstream DLL_OUTPUT_NAME "BETA10" +======= + DLL_OUTPUT_NAME "X10_TMA" +>>>>>>> Stashed changes DLL_PREFIX "" DLL_SUFFIX ".DLL" OUT_TARGETS beta10_targets @@ -513,7 +543,11 @@ if (ISLE_BUILD_APP) endif() # Make sure filenames are ALL CAPS +<<<<<<< Updated upstream set_property(TARGET isle PROPERTY OUTPUT_NAME ISLE) +======= + set_property(TARGET isle PROPERTY OUTPUT_NAME TMA_LAUNCHER) +>>>>>>> Stashed changes set_property(TARGET isle PROPERTY SUFFIX ".EXE") endif() @@ -537,7 +571,11 @@ if (ISLE_BUILD_CONFIG) endif() target_compile_definitions(config PRIVATE DIRECT3D_VERSION=0x500) target_link_libraries(config PRIVATE ddraw dxguid) +<<<<<<< Updated upstream set_property(TARGET config PROPERTY OUTPUT_NAME "CONFIG") +======= + set_property(TARGET config PROPERTY OUTPUT_NAME "CONFIGURE") +>>>>>>> Stashed changes set_property(TARGET config PROPERTY SUFFIX ".EXE") set_property(TARGET config PROPERTY MSVC_RUNTIME_LIBRARY MultiThreaded$<$:Debug>DLL) endif() diff --git a/CONFIG/MainDlg.cpp b/CONFIG/MainDlg.cpp index 7ae5393e..2af9d460 100644 --- a/CONFIG/MainDlg.cpp +++ b/CONFIG/MainDlg.cpp @@ -32,6 +32,7 @@ ON_COMMAND(IDC_RAD_PALETTE_256, OnRadiobuttonPalette256) ON_COMMAND(IDC_CHK_3D_VIDEO_MEMORY, OnCheckbox3DVideoMemory) ON_WM_DESTROY() // FIXME: CONFIG.EXE calls Default ON_COMMAND(IDABORT, OnButtonCancel) +ON_COMMAND(IDAPPLY, OnApply) ON_COMMAND(IDC_CHK_3DSOUND, OnCheckbox3DSound) ON_COMMAND(IDC_RAD_MODEL_QUALITY_LOW, OnRadiobuttonModelLowQuality) ON_COMMAND(IDC_RAD_MODEL_QUALITY_HIGH, OnRadiobuttonModelHighQuality) @@ -41,6 +42,7 @@ ON_COMMAND(IDC_CHK_JOYSTICK, OnCheckboxJoystick) ON_COMMAND(IDC_BTN_ADVANCED, OnButtonAdvanced) ON_COMMAND(IDC_CHK_DRAW_CURSOR, OnCheckboxDrawCursor) ON_COMMAND(IDC_CHK_MUSIC, OnCheckboxMusic) +ON_COMMAND(IDC_CHK_FULLSCREEN, OnCheckboxFullscreen) END_MESSAGE_MAP() // FUNCTION: CONFIG 0x00403e80 @@ -168,6 +170,14 @@ void CMainDialog::OnButtonCancel() OnCancel(); } +void CMainDialog::OnApply() +{ + if (m_modified) { + currentConfigApp->WriteRegisterSettings(); + } +} + + // FUNCTION: CONFIG 0x00404360 void CMainDialog::UpdateInterface() { @@ -218,6 +228,7 @@ void CMainDialog::UpdateInterface() ); CheckDlgButton(IDC_CHK_JOYSTICK, currentConfigApp->m_use_joystick); CheckDlgButton(IDC_CHK_MUSIC, currentConfigApp->m_music); + CheckDlgButton(IDC_CHK_FULLSCREEN, currentConfigApp->m_full_screen); } // FUNCTION: CONFIG 0x004045e0 @@ -344,3 +355,10 @@ void CMainDialog::OnCheckboxMusic() m_modified = TRUE; UpdateInterface(); } + +void CMainDialog::OnCheckboxFullscreen() +{ + currentConfigApp->m_full_screen = IsDlgButtonChecked(IDC_CHK_FULLSCREEN); + m_modified = TRUE; + UpdateInterface(); +} \ No newline at end of file diff --git a/CONFIG/MainDlg.h b/CONFIG/MainDlg.h index eeebc868..346a9185 100644 --- a/CONFIG/MainDlg.h +++ b/CONFIG/MainDlg.h @@ -35,6 +35,7 @@ class CMainDialog : public CDialog { void OnCancel(); void OnDestroy(); void OnButtonCancel(); + void OnApply(); void OnCheckbox3DSound(); void OnCheckbox3DVideoMemory(); void OnRadiobuttonPalette16bit(); @@ -48,6 +49,7 @@ class CMainDialog : public CDialog { void OnButtonAdvanced(); void OnCheckboxDrawCursor(); void OnCheckboxMusic(); + void OnCheckboxFullscreen(); DECLARE_MESSAGE_MAP() }; diff --git a/CONFIG/config.cpp b/CONFIG/config.cpp index d4457b55..c9d2ae0e 100644 --- a/CONFIG/config.cpp +++ b/CONFIG/config.cpp @@ -29,12 +29,17 @@ CConfigApp::CConfigApp() BOOL CConfigApp::InitInstance() { if (!IsLegoNotRunning()) { + AfxMessageBox( + "\"LEGO Island: The Modder's Arrival\" configuration requests that you exit \"LEGO Island: The Modder's Arrival\" " + "before continuing. This ensures that no unwanted behavior occurs by preventing you from changing configurations " + "while the game is running." + ); return FALSE; } if (!DetectDirectX5()) { AfxMessageBox( - "\"LEGO\xae Island\" is not detecting DirectX 5 or later. Please quit all other applications and try " - "again." + "\"LEGO Island: The Modder's Arrival\" configuration failed to detect an installation of DirectX 5. Please ensure any possibly" + "interfering applications have been terminated before re-launching \"LEGO Island: The Modder's Arrival\"." ); return FALSE; } @@ -45,7 +50,7 @@ BOOL CConfigApp::InitInstance() #endif CConfigCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo); - if (_stricmp(afxCurrentAppName, "config") == 0) { + if (_stricmp(afxCurrentAppName, "configure") == 0) { m_run_config_dialog = TRUE; } m_device_enumerator = new LegoDeviceEnumerate; @@ -90,7 +95,7 @@ BOOL CConfigApp::InitInstance() m_device = NULL; char password[256]; ReadReg("password", password, sizeof(password)); - const char* exe = _stricmp("ogel", password) == 0 ? "isled.exe" : "isle.exe"; + const char* exe = _stricmp("ogel", password) == 0 ? "isled.exe" : "isle_tma.exe"; char diskpath[1024]; if (ReadReg("diskpath", diskpath, sizeof(diskpath))) { _chdir(diskpath); @@ -106,8 +111,17 @@ BOOL CConfigApp::InitInstance() // FUNCTION: CONFIG 0x00403100 BOOL CConfigApp::IsLegoNotRunning() { + //hwnd is legacy, hwnd2 is the handle used by TMA HWND hWnd = FindWindowA("Lego Island MainNoM App", "LEGO\xae"); - if (_stricmp(afxCurrentAppName, "config") == 0 || !hWnd) { + HWND hWnd2 = FindWindowA("TMAOMNI PrimaryRuntimeWrapper", "LEGO Island: The Modder's Arrival"); + // This only part of this code that works is checking whether the app filename is configure or not. + // Why does it even check for this. + // And the only part that should work doesn't. Why? Has it ever? + + // Hello me from 30 minutes ago - this was really fucking simple to fix. Are you stupid? + + //if (_stricmp(afxCurrentAppName, "configure") == 0 && hWnd && hWnd2) { + if (!hWnd && !hWnd2) { return TRUE; } if (SetForegroundWindow(hWnd)) { @@ -124,7 +138,7 @@ BOOL CConfigApp::WriteReg(const char* p_key, const char* p_value) const if (RegCreateKeyExA( HKEY_LOCAL_MACHINE, - "SOFTWARE\\Mindscape\\LEGO Island", + "SOFTWARE\\ActionSoft\\LEGO Island TMA", 0, "string", 0, @@ -153,7 +167,7 @@ BOOL CConfigApp::ReadReg(LPCSTR p_key, LPCSTR p_value, DWORD p_size) const BOOL out = FALSE; DWORD size = p_size; - if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Mindscape\\LEGO Island", 0, KEY_READ, &hKey) == ERROR_SUCCESS) { + if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\ActionSoft\\LEGO Island TMA", 0, KEY_READ, &hKey) == ERROR_SUCCESS) { if (RegQueryValueExA(hKey, p_key, NULL, &valueType, (LPBYTE) p_value, &size) == ERROR_SUCCESS) { if (RegCloseKey(hKey) == ERROR_SUCCESS) { out = TRUE; diff --git a/CONFIG/config.h b/CONFIG/config.h index 9172e2d5..265d047d 100644 --- a/CONFIG/config.h +++ b/CONFIG/config.h @@ -55,22 +55,22 @@ class CConfigApp : public CWinApp { public: LegoDeviceEnumerate* m_device_enumerator; // 0x0c4 - MxDriver* m_driver; // 0x0c8 - Direct3DDeviceInfo* m_device; // 0x0cc - int m_display_bit_depth; // 0x0d0 - BOOL m_flip_surfaces; // 0x0d4 - BOOL m_full_screen; // 0x0d8 - BOOL m_3d_video_ram; // 0x0dc - BOOL m_wide_view_angle; // 0x0e0 - BOOL m_3d_sound; // 0x0e4 - BOOL m_draw_cursor; // 0x0e8 - BOOL m_use_joystick; // 0x0ec - int m_joystick_index; // 0x0f0 - BOOL m_run_config_dialog; // 0x0f4 - int m_model_quality; // 0x0f8 - int m_texture_quality; // 0x0fc - undefined m_unk0x100[4]; // 0x100 - BOOL m_music; // 0x104 + MxDriver* m_driver; // 0x0c8 + Direct3DDeviceInfo* m_device; // 0x0cc + int m_display_bit_depth; // 0x0d0 + BOOL m_flip_surfaces; // 0x0d4 + BOOL m_full_screen; // 0x0d8 + BOOL m_3d_video_ram; // 0x0dc + BOOL m_wide_view_angle; // 0x0e0 + BOOL m_3d_sound; // 0x0e4 + BOOL m_draw_cursor; // 0x0e8 + BOOL m_use_joystick; // 0x0ec + int m_joystick_index; // 0x0f0 + BOOL m_run_config_dialog; // 0x0f4 + int m_model_quality; // 0x0f8 + int m_texture_quality; // 0x0fc + undefined m_unk0x100[4]; // 0x100 + BOOL m_music; // 0x104 }; // SYNTHETIC: CONFIG 0x00402cd0 diff --git a/CONFIG/res/CONFIG.ico b/CONFIG/res/CONFIG.ico new file mode 100644 index 0000000000000000000000000000000000000000..1e67eec26e9136180306e9fcd88ff9eabb836a59 GIT binary patch literal 74814 zcmeHQU3S|zvZn2BNwhSV663@++lgaZk*&8mCkyD^WE(x_+*M>Zd7GDBM3yj*{V=C> zzXDk#1p_7u04-aWOv^=76;SvJgQ*lI(W7( ziW{(``@1|%@n4qZ#U_@Wb&=1K^i4!SN${_WBG1nASQRddbaFOH(l-zR3Vu;;%Fo3r zjpKkV$~>E-X?pSoBA`I)mk(Q97zUy^fXX=o`ZP@@uRj0~{kH)BWkU{_r>o1*Apo(T zPG%MUG_Y*J10HVj^mJOm zKTQH%8P*VvxmRggeA#Xh{#)w*6aiO`S)Zy=?4MNV(fo_23a^iorwMfcTx$HwFY~!~ z7k~qs>ut3DZdah27UTeeze4*{1o*83ihSBM{_ONEbbboQ0+Ur<+!mL4x>zdw`FVOR z4^+fHmVA7@iLp7SF5ZJ z09pu%YJjR2c?*9MI`oT-hbpTnd%0MwR*SqE0caT@ascpO2D8W9ZVvwM@@*K&J>;<*O`}H~=8?)mgRb$IKtr z`B7L5OrkPq>Rv6+^PJ`Y<%NaB0fb*QJ{JDT>C&ssyO~6FkD^S2;BtZ3&uA{7nE=ZG z=aOj}rRx-PNqF=hp#496!uCJSmJ15}dJx2UfU5%le~RJ%>}(RD^B*Gq0aUdhje(d4 z)gVAy14jp-`&6?(PSLt??0fHMHm({S1g6<)j>+$QiN){=4seSAiXA%hh=QGb78jUn zX$WF$0nW2Lo3GB7>3jiL*AAK0z9)Fi(~T7eqeG}DAX%0n3YJTR@)FJ39|0;ChQ2O< z!22P;vZu41rh>08F~TM0Ehx(1Qhvdj^Qy)KOGr< zS_{)jCKiCS7D6XLJ3pBQRo9=R@1tRY8(b^k<=Wa}i8cdR2d(B<0OXhpkiq?>^a~!42v0U`ji8;<_k_*TID6#MK-|zkYN>s<=}FG;h;MU z)~#Q|Kf?B>G2k>^EwXeDH()5B@sRz$Ew9l(=t*bI32tz$05)_`TGEr;`8oDO6zenw z)^NAw1@5uzS#tff>IWye+{4mqOzm?z2*^_$2+$ay9MHh$)<4GaPkH_}ozAcw%(6LN zj=}{G8OD70{M^*gHBA!2po1F7STfLs?wmxrkcxXX#mYIMk{ioIEV* zj`iDgM(?tyN91K$Zt#i(HUyX!yRCn;@efDfO*X)%SA@3ZU5O99B(cKW*m2S^k*1j7|^mfe#J|2TZ;KM0pn5|xFJO#zhnIJ4#kA@N zC)<+U?gqraS(o^F1id3#mc<2qO8~|;*Yws@8v((9wF2Bww_3yDf83NGZ)xT8px%$Y zM(aP60tP`fc_Cpevd%_ugG0eAe0}=?Hvw>aIph|0c!=g z;%2>}@T1ei0VOSbu=2wmh~U#-^{{+~7w4)$K&yUml5x4xf$*cFEBIykh~~%Er-F~w zusR>4qwidWKrmpf09V|s$M~--7t5Ji)UH@wmAl2zN87&j`hh0?;s%oddI6fhI{rcz z!1jbo)M2gT(D98lh26L_zV{xSTiF%Y|fV{Cs4b=BeV?Eo4FF#2Qs`;GboqMsg*)aY?O zunG=%tpL}!XFaMSUGd^yg?!0d9!vwDi}&x9L-5@`jC<9k-W8!+y!lhTJ$zZnU!B&# zBgwd2X@x!_eii(x@2l0{7n%l(+dDb~!`i>P>h`Y_)q;Q?nq7u_z!f*^#l~L+Ka~pD zH0@*UPuG1t^0Ny%bcUFqu$WHijPPlbia3nRl}5*}7C9(YeJKifDg$fu2fXLryyy+M z)a>*mjC({y^V={FxZ-BL$oR3?xlxB*xVgr#r|w~6jU5l(4rspRqMDz^fa*pKiAZ5? z#4cIX;F>bya;1^+*R8LPI|x4FfW9EMeW3c#`ymtob&Jocc|iF<#RBqt5fDPJQr#r05=tQ@MtKYL1A(l{{6KLtOEd!U&<$6}xSK=8{= zr!sW@Re#GFo~Y)7nQ{O%f8~kOwDg_?I;Na%qv3y~qfYAk*zn;=R|TJzeI*BfRUh?b zFCfNjkKSHI0$`)rRr}K)`d;OJuXay4f$k_p!e8}tDooA$b?d*Q;D78`qucb9;HrPL z3vOMIA@-FIrV|{Mxy+HK;1(H+EpKPEHAu$okiG-HmCJ`2_$48{-C^~8rp zzpCJ`i%T5$tc|Vz;e%QNP}Ji?&5bX=cR_|=RzonX+XyZtY};nx80jX>XT!mfo^7=CJN^;nZ`nnf@A{u)0EW4o?t7hFyK z7zVK4(^^-3BhvR^)MnJi55f=B==-V&f?p4Pm)HZBU+!%d*Xk5NZ3D3gLa5(r_;(rF ze?KO44SU*Z)glPN5BMJ&`0p9MTJt~Hn;-ZmwCtbJ-x=Nme+mW%W$&JHoj4YlR(25n zdg!Co@B8`*FU|Yw^3iG!0@eQL0W<^7%-?#(voR;MPnDiCY?1}w-_qM1^kSRZ@?fV+ zgMeD}K97H$PicOlvl{%0=) zK$1=sep&~*z;f1k*04e7kN>J#^*yTAueUs^?;EUWtSkJ#E)e^`jxdP(YnPg(-ed^= zdePe)cF}Nv&fnAes1gETTCIRF4H`Rub9?KGy?`}^0Q^_#`6hNcJn~cDU*oX1|H2X| zp^YDQyi?4CI*5RDzwLdE5d8Gg1C9LkynjXT@3;HqTT<8po?-|%onR4o5;FoU_N?q6 z{P$n*m4*ub8YBNl?D(FY`8u^g0MHQt9e_^Y3g6-WNu+d4INb)}zuMAk{c7U-sD{4H z#>ps@Fa(^^97rpnli6ey%K@(TSuYGf<^bTPUI4P$Y#-gCpNyB-_fAhR4WJv$a3mPX z0gTI)2I8kl5RbNLV# zN6$xL68qOQ4d8cwFcRSZnB%?W*>ixzKIsPIzq&#!Z#H|@i2vmU;Dx4cpC zvmbmY!u|mpK9yC3ADsZx2R-=A2UdBmT+*WBZ#u!12M}INeKQJw?k~d2 z6_=}?(EKm{NXPhXJQTTJE_FZwg>PhYUBQ@ug+IPj}swcH?M&Zwu+IPj} zswcJYkJOw~YTp%?tDe-p8HGPrYTp%?tDe-pKT>l}seM;mu6k1YW)%KhseM;mu6k1Y z{z%O^rS@HMx#~&nn^E|4rS@HMx#~&n`y(~yl-hU2<*FyOZ${zImD+d3<*FyO?~l}+ zQ)=H8m#d!Cz8Qr-S8CrCm#d!CzCTiPPN{uYT&{Xj`(_mWT&aCmT&{Xj`~FDHIi>bp zak=VA?VC~fbEWoOak=VA?fWA&=akxa#pS9ewQok@&z0JD#pS9eweOGAoKtGw6_=}? z)V>*oKUZqs6_=}?)V@Dbb55y!S6r@oQu}5U{#>bj#ubZ7?fWA&=akxyg`3Nf+Bc){ z=SuB!y<<_SeSf6poKpL-aC13Q`(_mWT&aDocPuKk?~l}+Q))jJZZ1b^-;BbaE49z{ zjzy*R{gIk;O6|wO&E-h#n^CxP+n*IUjyrecmF97vZc&W*WgcifcN}*z^zz@keeGTv z@yk5$+S^lFKNP_)l}Z25@4@&LDIpMP0zDB5Q~wtQ^= zvHi&d9M666#d<^0KKrrdWBk9a_#Y~+Y~||hZ__(g{)m4+{*SetZMa^l{eO*g*>L#s zNBl1n|B;&iSKoHFNq&f`8nN3`}A4vOBp9q zE=Nx@-<8^MaekXz=lAKe+?O&=rd*DmX1*)cad4XRbGncA>9gFIGESykj-F{d; zzqwp)XQn!z(?e4;`s3~YjMvq#QvJSiZSAe|`^xc^OYunc`|73R}emYK0GwsVC zDwpDs>i5-8$H{4?efdM>Qan=qzWV7nInA^$zpuOxN2pv{FUHGMnqR6Pimxxfv_6cR zsWiV-zpwtGa%p`SH&bbTseUNFzWmbqFm9&O{8IhC`iIJ;^&q{#594Mk&F`x3TJP9;w)*LK^|URYFF!Ue*Ya%j z)$!_STRvaDYkgzu+3Ks~)zh|ozWms@T+6f7SI4WTZTWopuJw(rXREJ{S5MpW`SN4q zaxKqRUmdTWw&nBXyVf_ho~^z*UOjEg=gW_c%e6dPeRaHg+Lmu?#EN^-)9Y$e>ZoXo4-z)#Q!#T zotvLYlV~*?)^69z|86xq@*l|`b?UF?t|Q+4NPe%A|FOt#Yk6y_W+?I_$?D_}WBq<4 z(^{Tbw(K1Ge&$W`3}g-wcp8 zIakmo=MmB-X8^u(p8sw6d*y#rZD7qmth`x&nC+kZ%@eFyezyD9v-O+qegw(0-Op$9 zXS@GAE5F_S)g%9JpnO+fX8-ifuYGckZd?E1=(fo@`mFLAy;c7E^Z1(XYni{B?mLj2 zTh~^9uKg%C$LHuD_Q2>LlLy#4WB)OEhj+o`rBQD3fNT7i@>aa6gkzUm!lw-|n*-Rv zZ(VM20K+@}{$+GP3*YR3W0J!G1d>0Ay59%LGUbe;lXtNK;ePT-DyqC0Jz6t+4ViBA0vLM_Rkv@*m0Nn>*XP6n}SnV|P!!_>tz$j+WMoK2pqg`{;X$&F=dr zg?3*P)wybMT<1Gc`BJ<;i1#Aro5DGj!zY}>Klh1G*bZAn-NO$*j6E}WaoioV9kzD8 zOnj-~O%F!lt33Cm9>3vppWDszlKUf5ryN=6@tgnd?;d7(?paTz_0v}eBse!uRZqsvDY8_;jz~)`N6T_W6vIYC%V&803AEVeqaus?FWmI z&oZGOd;;;x;S=Zs$brvmhb^KD>IX+c__uo*jvNX5=V8=0eD27R=RbGKDcm3ayHiei z^WSk#*E@3L2M?Zd%9|eK9>#m{$X}YZzxbEWD{|y7S??)Fut#ia>d1pXz%jh8{h+DH(Pxocywr|p11f*VKZQC@LLIjv z1$DUem^6&EkE8q|ce3)Y`HpjspW@tKCV?e}3~8H}>G4xSxLbU);a^ z4}c)xJp7I#4LE$*9$ANu_*?#H`7?ViE@(C=U7e(iH#aDR*VGl<{+=bi3P z?)Y`r^`{?o&wTze_m5w=%)RBe9&)=r`|IvYfAA5vQ~*bey;4k`I{TuL$_^k-??Rjdj#)ayX6Wua?3~DL$?&&ZFj%N z{msszyC3n9-50v||MmuV>kU`9FW!LsUqSi}MRy;qnsq5d`=RS|)`?g%{wqLc*eQ?)W_o?eHba!8Qu{(72Id0=8 zSGo zHC}g~t2*~@+?h9==bmkCa3ASycgqLg;0TvA^x&ce%5+oa!#z@bhlNhBMt_#NW2~ z5qEFXd9L{3Gu^etv)$(6&$*KaPIm39H@Mfm=N6PX8D;Kwi!WR3&UpP_xreH%-2Hg} z%%w}+eIGc>U07Fie^Y%f@=tbWy|2fezu_(JWW*Pr^_%XgcfHd+e%^WR&#RW8Uwqx2 z{Kk9Sm(N}8PTp{`+q`Cl`-j!eec-${xA^2QxRY>Azj?t)?l*AG$wl^|KXiZe3-3VQ zZ{ygxx|Q#DA8z<5cW;$*CtrNBd+0pwp~LGx?%wgPD)+}&7@XYn26y&b*SqtU)#LnI z-SBznjZKK+eGAGjUh^h*^6EFcpIi1GcQT6n>JsF?smGo3_VeAzsQ1jbuXGOkldz__ z;;pZ7XTI%hxA@F6-J%s36HZ;`Ep$r%_tT5dbgz4DjjMXgo7_pSd5wGVzmB;t z{qFCca7{7w;?&d(UQ^REg+igBVabw)hK3b|k^&QO)KDl5l=}Mm21)~XqgbI~1W@>th)vj2w zf(SS<0mLJa00;oR1;83ND9OVFP!SK!qOCwg0#sTmiIZm)diwyzGQdOJcqSv93HPE0 znwm=Rm_ED&Q>ZjR90Bzjr@+NQngJBmZh-RmKq);>F9_`rHK78OK+V!;6#B$GBh-fq zP2X(;-e42u(ScXLQ2J zcgRD1;43R=uY^8KgaE{Wc>v~(gp#taaDYKf!!a*{QlwS@DuC>ef>WekTtM)jnS{Nd ziv*gQ8P~Zh;J#>z)idyPc{3U$4l1JZy|{F9G}bCu>O*z<%wm18NL+^6d9~C%R5uvm zKQLIZ*XYEAqoEkEwFcM@`;G;ADet*EWfA4`8! z31<*b+J8o!JjeQ&X=^+Y5M9Ka5N?C(hd6lAe-UtoA<(60F0&Ylft$HhoBvdW_?GaH zUPqo`1o-n|Z!hXYb*#gW^E~TM@Kwqpkr1^$MO&46g+s9r&_Drw9P+Sv^=h&b8E^8? z^lBdh`IIHUGCfe;Sl?S)dhBGw@!waKQDBL;4bN%gCF0-*rih-5yn z3RI@5*d>^i1LPc@sTtBRpnpxx93l&4vQdziB_m@G2%1Hg8k&i5*kMX=9b6~91ud#q za}4n3pbE5Z0!2pDAE?^DwI2vH8dfFR>mZ9xWC$zItjkfa-ZF2W{GG*j!l#qyHEV z92$jTiC6&e_)bb$abV!VJJqxoQN`r5=LEz?9gTj*H9D(fjo3*xHCs5jHV%& zm1(Xab}#SIoWHy`PfX27A1x;6Byejq--|YBZB(pjjAJ2bSig7_<2XoYVSq<_Z)4hz zr=Se_7th8U)lgOFGtA{72SmuE@tN+!IsV0|-8{|O=EYGKs)em^!mvD0vWe4DsSTW! z9iFAM(U?Px!Nu-Y(4rE>fQ^@p;)XLiJWUca8RjqgGdq`%IOcgC)#{s5Vl%u@ zwgf&3hCm!5U}%69dA)KbNr`L}CxmKa9*53 z2M~-dkW^kD#85r6yh5lG2yh^*+_ZMYJOMW43TVZOf~F2#f_We=2B+EZNiPaK8l6c) zAn=&6xSyDU2E^d?>5V$jilu2AE7aRp>Z38`r(6tDD;kfT2xUDF;#@&732O5?I5NVq zdnM4&;prLALYz_Y7!wte#zaBo9M)(e;t!?hH+hK8n(QXl&#eSjfvmcb@e2U%9wILnJ84hIs_;fNKJi3TgleR#dRd|W@x zLB}$Xa2dJ;rHM!~p)_!Yj~>PB<%!@!jyMclvH~pP(Kt&4f@tOvh?vBNOXgLp|3WSu z(ONW#(VT!R zF}2$UKPmu*ls>FIR>*iX?5SNe#Bos?ag3m+ux%vEQYdd1!a69=(9p;vaaPD!6iGa^ zmwb7G5>4$k{=o#nH<(-dvy#b z=tJKj(P&lyRD!NA9nd~&vYI%Wy0GqHbvRc4GHbzq zV6JEg8lRXNwN_bDrBSnWCY~u%u?;`m*k~Ra<=!)qlZYXRTYZA?cnmc7rD^Z4yS&o77`gzpjAUne&btd3DM#S^c zwu}%HMOsPjAcHQ?8jQClk*~rhvm&OHFf{8Sf(Auz_zVv~F!FGtH!oMxAQDLwa4-}l z?SQ6r#nJ`~5O(qKf|X4dnwY{Bv!t3QhJkn* z?vR4+6rRDLJ&kSL@U+mB<_J5Yiae`O7&RQ@QAuu$XOF_D3ywo;5zH3@hQMUKmFO-0Rnpr+E|Prl!itQPfDIjJchGpkAtbqlZ69&S!0yNW(!Cy zmWT%hSUq%PGgjPl@OFR$CI7J$abQiv;l`7P`D~7XnQ>r84>;fv4mufcctFP1SRH`; zEZR^QA(7;g!PKZYR2W=ppD709+d?hyEKX`zca2USo-7$o#AD#FSA=6cUK+U)uZ%V0 z%GpI|q{8swK9h*;N8N_kZ!ci{Z{a2s20eVZFXCY%2)0Y&&|cI9B2A1>px4uX z*a(5dLX!-SOb-#L&^J7Nc*xW+Eoe5LkPX(7o}2-RPo1#xD)nacv9l8D(0_m;90Bp6 z6oPHkmk2kEM`|O5!VvD2rjJhh$1+wKW+4GOrv8_NfqYAgcXMv=rd>^K$yy5 zEG%I?59UY)&r^z>2Qlb_p%5hAU=t{4>X^NB$hE=n_l^dhqlb0>j)s79bec3=+OpS= zOpcO(fd_}D_Tf@S4o^=KI@k+5fra}7kH$mJ6%*ss2Vi(61swhJ{(~bt)Q9l2*7Q+r zrbpOkkRV3(KG<|*a%yH8_X`F@n(67oQ%Z!fQCrZ*8yqac%J6{U#UK#SXa;yJJwiY{ z8iG7Sc*$Cn&A{Z5Asbp_edG~p2tJtQ zd66)Xh(Ml)PE8O4D)=P=R^Ov)Lo{qjOx&tve+U~<6s9u&Fs{Vk-gkmF1}jsi56hc4)bnv0l!GaUSZxH9 z;ejUXUtS;a5FrFuzM;W*hRK5=amrc>jT;OBvah2@F)s5pjQ)peWUo<7z2L!t4;dcy zbQ+32jV?ACn~LHPr(uBdU}V8%;vyS{Cwb)vhGHC+lH4A}v{&Mp!?=+kP@w>ISPyHB z1j_Jm=;52rLm=GnXuK5&;@qoN_%v%p3dR-?5ko}A;C)I5vecvv1E3ilEpcIqQ?WMW zO5WD4>g=V`aN3`VqcM?G5f32jCOPK87-Uxoo}r=9$zU}SNGJgs&ruASTBVe*mVncg zbY???#2SS^dwqzM;lW7A*}}|)7;nI+32#cV#E?MJ2U-_648xu1Pa1Z`l9CB*06jc{ zmbgUeBhARjfL~0B2lfg)bfJ_ydz?mP49-))8mGZTgIiKK3mfMldEkemCC?)o%wiM@ ztG>gs5A~WH9@-}WE^!KlB@KN#8U-8cGJP^Usp)i&gEk~lCzHi+8g3=|H~}xLfB0lx^@-fMl;xp7zH`Bs#__2) zargicL04t^prJlKdI68M$>uR|k_W*irCt+6OHy7*A4hg{1ezaJ`hg5N^YUmI)DR6Q z_Auf=8hhq%AMQ~fG&u^Mx5BB+CtxpBiryw1&l9GE5zROaE3gEjxA8+CRvPiJ6Z=p> zAC5kRp-eAQ7FtTKOE6rE=fMD!;2Aa^Zz1TTC6>{_UK}fy(8X{vmcGz6#UmP&DP(x) z#bEI!0}~w>fda#sX*cpn6Y$Vr(8~OWjRt*ek=`3E0ohc;5}Rs9?W+>tAsqX=$)kp{ zJQ@#8A=(Z%JO~D4y&dPWcOi&pg?b5q@EI=c@X>W}UKE;880L z4VnHA;YLssqkB|P>}n93UO(b!p#TeU81y`xGUdXfo`NQNai(NGa3+kJQ^S#;6k1Dj?~D2MZ+Nm}f0`9w~_jEOv;e+6bOU z<1>#XQAA=9ht5S3P41)8%D{0pmeF>XR4{k;&kWdSw64(ws`Jr$$1r0oHco?%8;=GztVRSGp5O@rQ+FTOXaK<`3%QTSp+0^dg+jC$K26Y+ zVTQt%-7WB-9*`Ojt`psrixJ)ca?Ug!MBycf>!VKViiQ&gCw^vwGg-o%hcL3&;FqC~ z^(~D@RV9B0` z`$4eapPyRz21IKyKy_Z` zfbpzgk1_(bil;-+2aA1~4?OhfQKI6^UKEY>!Gj3~`j0t}aA+v&?Dq`f`44F{?7&d$ z^~Q%j1`ZgD0e8#_;Gv5&^a%&62;zhZ3|itCMd8q(V;0X1JUTES`47rP>JUfz;Q0od z2M&z}AT7%j-ywm40vt3Xo<7gx*F0>KUDt*u6ypItWT$)_^9+GNJ_u*!G|Ok=Win6%?^R3@BsXo4YGR7W{gN6DMV}85r?E$A3R0vQo>3sUMa(HGC!E_niGh{drjQz`GfmbUgW#~_MN$bBAuR1nxJkevbwJQF za=Sr8xogP7;u0cKgD#B&bpsT@p0^w`@Et%H5pnJr9KsQZ=s%Ffx)x&cA|~*uIaL== zT&Xq3nsv+Q?}~72SFcFe5W@2y7S6=?OQ-fwov%>0He6NuA>mOoUJ#S~U7ITzrtZ(!2*S@7g_l-dx;gOCd=K0H+8BdaMA7>4Z?_a+;3 z8UiH^#WCkj@X)Ca-O5 zIX~x(47P^~(Fd#@ztuHIR7@mMNU%WwJV=y6tYN@D?eI83qo7NW%GoMaj>C>dCeLH5 zHmpr(G8stLF?)HRfOM3|8wsUMAbJ{5kYQV8;0q*&r}vntgcC~?q#DF{$gXaqAbBKE zkOxFuD(#psAnzDK3EENS;h@d&Qu-i`gaTp$1;P#`urfkVr**LD6O6Z*4ooSI&m4ME z&SN}*X3q{N#3p10uZLRja-f&tPz(U4Z56j7vKUh_@Qf#M`Unt0pUFmj=*3(l8WSao zd`IF)BCfC0S;!R}1ue^LeAr|RO2CFF7O0!_1I~yac>1VL5J*J+7=*AFc<9muB3y(c z8s5$B7~HW(H^2sCJRtEn&`zFW_L4xj+fbT8RRPA^M=4YV@_0Jw1B1z_ zC+@WI$2$;^b`WQfs{`~hw##Wf>M=B#9LIp@DM2Dq;mr+7VFfmohLODtP#I>&KKk>W za3J38Kqv*>q*>>JsTklvKx4O;(QJsL12IS)c0Dw$QIT-sqJor&&#wYbM5T%&3nE!L zoG%E%QHU_udK}pc@(^bbFjB|^g`tM6Aqh9`M5HwAg!be*5MhC;p57PR%G@U+^B!cW zoWG0%yFD@&+V(H*ghP2K5=UxXJzC?{3kV)DOeGdv7V0Rtl`RAQwR34xr^FB z8Ew$A=K+HJhsJ_FIEaDFYe_^i83IRc1RY^d|G}`#frl&=K~jk@nnSM=j8Nc8)J8bk zdmMQXO_v0c^Uz{kQF~G3T7nV{vVb!@J`WDR{1S2Ufc|WQAaL#kiv0^nG!cog=PLl2 z3ww(Z2O7mh0`b}y&QzjR^O}?@Nk{6V|EP=Yxs$z|B#?)Dz9JlpdLRJMi$KBW%BB!g zxG>`yLw2&RPIZ98D-TM9gMeXK;mAQ3bg}U}H4J);G!6waZGu7(5XC`|FKH;C^90Ai zZ6t6oEE|DmvWAmzF%VM0gCLtlsstR|PBUb1=tDq|K%PZA?==A8grX!r@Q5S`6b|f| zs0cBngOLP;O|Tbuj7{EbqQqMa>;y6%djO)=jfYz~HHShB%Og9i#egIC#X$9=WejNW)+|9pV0v)7cOP9t7dU?Z!B9EXvh<%D#Rl-ck2bBw`4Qfhd8IA^YUe zYa&BQB^wL)2hhEJQP&a?C9)9q5k-_^>oEwV(I)^Ij`gle`UngU%j7S%;SIExND0)- z#z8bHoMhv3fkH0*$5;~bz*-!WL#T*^M%b}KfLc5Pn#wrK< zZ2bk>pi5CH%Mv_V?e@`Ks`9>kc=ZFzJKipo|i%7?L{bJDR8kfk3M3MFdm9PeiEbU zaA$)*v}8|znE^bsP{8r>RGLWT#l|C`5Css`p*#$br}yRK^wC~|F(h-JXfYUDiU^bh zA(%^t*a!$XyfM=cWnkcW*&(S9g<=3j)?5LHE#YlQ7RP}(kBvNda-YD#Uwgf@Ab$o3 z?$U{)o<(_5D?$JUhHQkb0Z8Vu2N}tMC&jWLHb)Bc8UcBQ=IE2*kwQ^x?Dl?QEsfq8 zCF2hZQt{+bA|n+weL$o+0s_fkSsYp*p^Q9-2_Xy)T3_$$OAdo*AAcj_%Y=P6WuCqC zA%<3ihC>%h69t%rN=Y2ljR!J#WOHXi9MPn37J>wQ5M(pW6g)zRJC?=JVoIM1SC^2> za@o8=={OP1p6x*?X5>G|)rW0apNe``sMFUK4&%LVKgLLvOdeqP;%Txid8iKD$A~Ja zVc zr->qSQJ7)`ewV0;5W7qed4J3HG8K>gc-pL(@vohS7*6C_#&-gD%(Ouw^sb zLKu=|f5T4cH(%FCk%v198&pFClX0b6D87! z6furrow)5vC7i9s%yDc>90aeAaImpNW*CP72+6Yqpi0dwIL(hgzHtGW95PfTbqvXi zV`huoc)`uiTM+t0oywqqLw&eS;Y8*#AafLIA|DQ5^ER}=4E8TCPQW3D!6?Ew|D^-l zHy8oES~ys5q-abL;RuOD2!liTd@32#zHM;f)|U)yfjZ1rtOAcQd1HATd=qF6P=pie zewkf7oUXl_BTvAQ3mF9d0vTT;%IFg$LN(UGUk#i}_A)|wjn@Q!tAt1GF^^Exe6)!o zsjGeI2glVXm}syUUqB2v@MCji6NVt(bHw!05mIMV0EZRa{wI z6?rrq$27_A{u9P2RpPPHCLvFxQ&tT-4jn!v{L4J3z++?1LU1C_d6|t@IIRMYNHi+P zx>zh@EU!y&r3$sb^rX2w9GB7j@$^YF^XhrBRXUf4{R*#S_X;|NjvaVjZ5Y%$mq+>- zQ{ag91WB4F6-TK6`ttX4c&Lm`6<(o4zxOO&mUQbFF!9yrmk;94oWnzkV6jLSMN-N{ z4MR@GsZHVh%0;5G3y4(Uk?#P@{5ruDT0?;yJMO%bAC!;o-h#iS0t+AdBJzp_s=z}O z9}+N#QU<>9$MX8|5NvjC-?ZucbA1M~@RM2iO_4+V;^QpCG_qb&I4(~b2SC8-E8RJ3 zKW0Lv?OO(V&&LnJ@~8FC?!d4p3}tp|VtSUp5&BYsv#uQkN$)H0APHAJ;U#)>%atn{ z&d2W>0uwxaeN!=ykBz?+no9jWMw*L*l+rjF5)Pp@^{!|b*uGt6Wab>4>DfD963}t% zrC~b31PyRB$R_zyiDKH_d2a9a?bnAkm6>Lmo*jHCK=bpk*QWxi1(7T=4IcXq>z$jn zY~ML^vu~2xS(w=~5u(%bx&=bb%Tob|Ua}*!684Ap?TdR+NW^|RcBN_jv=q->NSKc& zYb;-1pLOFzyNm{lR4^B_AKiivT+YRxODrJF$CI%Y42R0t*DHjm3&rM2mO8wByMBQ% z`VqC`Va>;r@*Ezh67=H+ zn8SFe--6IjzOaP~v;-R2K5*{2_@vig)BG&VsmL?Omwi>I7&oChs9J_nDdEYaW(7x7)~ghtVYg#m^?_)VZ-HVIU@w;R-gr+Gae zO91h&5Apcm{K8PgW4>cd-bH2vBP1FPKSF~L$x$J)Bf6v$L^As9AWmQDeEg=(HL**_ zbwnO5fv6D4rY7KELAwexv$JsxCx}s>ggnF<8Z0$b7x*KB7FdJ27x%t3d30noeBm_m ztt<|{(slxbR5tWU;NZC&G4OYJ_(^W>)9hUQeM74@^620}eqSmb$&%P{mPX%MOd+HW zXs<+oDh=nB@HHd+8n^L?1Bm=RXM|uCYQtcTG=V?ftc(*+COG*7EUZ5@{@}T#{sxzJ z!cU$tm@N3q#wA`LKS$}mJc0WNiB$9St}u3sh7Iy-irmi=Qapow!vm%B&n*zgKM*qt z2v+K|Q7`Gy?C(?f9sP=nkP7A!i_y%-l;Xi?IM918>?N;G=mV7CmcgTs!;r9?nTw4l zSdJ%9iU%vy9RmaQD}f1bMr|Ms0?%U@LL}CNo=N5sN-&chkgy_Fk_RIoT$|d&kH2ZJ zbQj4wE`G93Ln6PYcTZL|oXVzSq6AL3z|=m;0~i7^$X46{CXG`n#j7q1%wQP2=bphY z@7W_~N|;JfqWEtmN0A6G1>z6VJW?oP@jO|9f=AEJ-qS}CfWW1*${5*TOd$u9JV7IY zW}uQhUYs;f1%VR>>{lDsj!R7EU{kM@OhWB7NvS z1Ng=ypF2n|6UgEjstgY&^%PMBd7?2o+jxaz_DU?Bc~$rZUI_x3kvvfb28Ssgx=$Jh z^<>={C(SceRp1c-STNt5D=Y&toJvqh9zCW@^Hju%*3lIJGD$QL1p<$reg#(Zd1{)9h`zD#A^qkGECIdFH{1JbE7tdR#zPzn*lXO;W?p@)(JhaPP11< z6j3DLSVF81*o}vFnk$gxsc1BtQg`;ATiCvRd*slZ!bHL8%tGCY6po1%b0O2yFv1Xc zB7<>`H+|SAOro?8!7c4JjQ7FYDUWa5|03_d9cYp?Z>*~@Fk|x&2)2U9| zm_Gxd5>IfTG!d^cS67E`gV!Ofz;C`n2|N)Z18;A8b3j!VH=)TOO9sYE6wDQmhcQpE zm-n1BjK7q+TwM*moz4dNb3eEl0R+FWj<8}y9W#`<5`X5T302#$VOrvar~-FhpO_{x z7p+#wePnKeplLQ6FvKDp0M*siut;4UrU^EqZM2DDn5lm(#B!B*f&&pqeay<1uDU8( z)YBj<-U=XSVSi%nad04xx`te?ePEyt#^tO6k}gJ0_yju(a#13ayh7oq8y`RFQEbXINFkcz<<(5_4?1765T!OUgV+wC=3Q1 zQ^`)mCXx}}5C{g9@e1+cxGf29rmF z4u>56M;e&c!GW0-v-{*Ye+f2eFfwpq&z=%+QhS%0N&U1Tff6)$Oh}RO!1+`pc(?k=i~DPeZWH&LS3cvN`2(P zETs+)Ii_YN(dF^%nzOsyiPq%wWdfya7W+$9rAq$e9f-1u8k-&K%~k-qP<^4$M}xs@ zRxBBZ92$3IJ)1hr%U7;k>CGY$B25UH0l}eCD)g`5&@vcZ2visjJrF&HrCz3 zAxB+Zt{bb2x`y7GhJm`F+|WS#KyH}5Z0D8@?JPFOW-%FK3GuQ#k)3=b!ohK=bj{|? z8;jj+K}&f$Fk9X$nMxB|4S0 zpRk)?03>~)k1&$95}LdjHp6F7_(UJG1c5dbH*7>85t^#oxN~^t&H>2QzPr7<2&zQb zxXlX`+Dq;!OE^{>z$tshIKic9CFsNd@~Ch=m%>8?+AORC#*yn33V0j|ESf9|Kmx$#1O%hq-2+>&W}L)*8A^JGMj32ydPzG4kx((hUljlCEYh zT^ATa`&k@bc(T762Bb--V>psVUZisfv}wZzJi!GJ2BeMKz+-~!+=6i@b|+pvfH*>+ z-vtl@n~OuSQu>(tByc!BhhQF54I7Ge=QeDhIW}(I77G%yAjT#OSeU?|n>VlD ztlxdM3TUX{;HWSDm*g>!1db$$iHwXDmIgL-Gi;#65ZKF7!57sSh(5n@TmOaq{rEyD z&J{{TqY^Pr(q3th$aSo0N{5&#+i=ug{}CY zDGDX=7-_<2K_0KUG)nk$x?g!VHVF#g;I4`Dg#fTIVSJUPLE(tV1MOwQA@mV71n)(t z$pULsz%Hpzs+$uBZQ83u&!RMZg>5~u;u9lIb5n$!XkGT`6(om<*NgN4#n%!`83 zqfCz?DpVHv&m5ct&>(K!7?Lh+SH)_t>Yp4-G`D_zJJzcRL7>uBsu$tFt#v^rN&-iz zfu{ma4217C!B~_8=lIG%V*mPf?%a9(7KBX$n+681?8X00(%XxvtX=;t3EB(B3`FFN zMF_?OtJ-)XlJuAuaDc$xM-&8}t&MHL1Az|TKXN};Jo|QT*@8iFV4!MUotd31mz%yj`5gc6TLp~I z3gI|lL_~3h^f3@_D?4;jA?YKTSR4KwnI0Q^fw~->ohjlIxeI<8L^Ct9V|!<#Wrq~f z6w8OtL7A{OyBU-5#6ZDu5_|Yi6eJHTjESaZ={WkBa@z%bR5vm^3vZs@H8zX?N5cn9 zfz}@S2)-<*pXZ6)C(^0l=Px`%WS_5~kMCmoe-m&R9 zJb30j(A$7NXW`EU;kTv&5J1Aez(dc8Ug(`sTSNP@>DL zMjC-1(J;i{Z}U81$L@}DzI`0nV*q%y+?nTwz)BhS>-m&6(ueZUB&EJRFayEQ(8?IUiw|xxj;9JW|DPVjlWWp>RtOB)zxMkV_|z zgUjz5Xy4L@uM!|7X|JdN>;)y}25{ha;Pl1Xxdx-D`H@j*sIovuWPrFOi_y->u9eN_ z=R16*gM{hp#W!p5#eR0Mq`7EnCK1QlEIpl8hDUy`$XG_Q5GczLjw|a!d-2ULvR1+Y z5`Bv}A}W184Rqx5v5i7Yw&yQ>awybM3d?L?`SUO0kVyS(PIt#3uw#6D2Z0y}g-=|@ zr|>nvBS)sjZ}xZT%H$>`hQtv_a)ge`hVeORFR5chw2Jx{TJ!-dPd|Nt;jz#ASv$zY zT8%NPKjF6?D<}jUd^D9PsAvVAN;uws1_wXC|7ir_Xfu9`KAtnnk$4VKXfjwS@Zfn7 zi00=BK8<}Kiqs)apJz$o7}L#uaYL4@J^?5Au&`t*+hl+ueF6@B#=DQ13@pUC`QX8W zl!hUeC&a#H!pv32Hy2a+r3Q_alT=nB6o`0Y2LetCNd7~d7-%li*Qg9$6%57(LvwVe zhQf{=*I=e@XJPXoCR&lXJXst$wBeipsPC482O-#FXnk z<$K!|8gdnRyyI{uV`aa>pC0_e5r%<-2M@`?%*ix<%fDqvmby~kv@u4u$P}Dg3$o9K%T)bJa*ujgT{karH70oCB*am^EB%7 z!a2DAu?IehwFhmbR}LThRpLqMLmyfo4;Fyz3{(lhfJkA-G$JIU-}seLfg?1&_a++b z8RPHM#zT){92tW++%ME#cVhJ65VYUgSM$V4@PLRs`+>m`2SG>#$~Cn2wO96^G|s~H z(db+%9iT~|kK6^m;^m>=;Kd;$$wQ{ZtCGDq{G=5MUHZ8Dr$+G1Ze-_9+>PPx@F{Gc zvVXi;WCC8yLBR9IF}<{TG67^f{5enlKbX6BUeCvp*I$2ID%}3$@xxOLPd@eJ82-g2 zzY#}$?5U7~2nw>ScKp*fzM++~p$Z2#DcsKO?YG~azde83Z5uZl7C+r)xZ;W{HeAt$ zV25FQ{qEg&?f&$YS6+VOji0{juH6cc?tb(S@nG>$9N>KylJDAm<8{~Fb>o!-n>KCg zK4&??yWaJ#nwpC*zw*QUqR@(;d+X2D;{J<1_)$V_+_e3QD>iNi!p7U$-rKhE3O2WC z`$i<;b=$`6+iz=o-+SMS971mM0&c_)aD4inyRN%y08cTm^e~15iW~8|4ivjTy?ghk zZ@g>w_KPpL;NlA|M%c8et?dGwa&ad%gj=z^j#CPFEcE#{Hnz20-17eA@4u+?;?8yJ zF1zgNtFOKSFKsWs^5ToHyxNj3zx?VeuDE*B6<1z%S?@=Cuj@s#*A1ZgyKcOW6gS>z z@12kCq(BgAC!bQ^4D?8Tohw#rV6hcs!$U|Ac2m8 zJ}iTz7>W8=*J3khR2_{idjN~X?JI^}KRG$M_lYN-*}p#@K`c)57!lh`1OrflXCb4f zB&+G8YX?I5+5?4#9Rf^>VE;1;9IO#4@tmy&b?r1#;>aJ&zoS0cz{{5ad!N{UU_XKZ zJYxXZ9>gnbEAcGOTev-6#_$6}`PcjyQO+L&2E7DVPXWIB1e#8^Z>wBxwY=1ZSjNNM z=1TU8(r&%m!o7FjYvF+hzV^Ta4}44EF$90P2cNN->AU{YZTB=K;Kkz=1vanXGn9>u z4=3Qc&oHn92E!u=k3IG{Q64{l8^WlaIgyH4hrALo0Atb3!87}}Mp`8NIZC_rzI#29 z2_qZ=0p|cF?}}~CA@d1ZaA2`aVYt=XRC;3n(+BoHc5q}{+gVZD6?yKy&v=41BzgQX zpgchoE+dX`F;N-8k_{u;k|PAgAB^9|N8E*9}_eiEljZ}oI`Xe!r zsK}NWlaoZ1c;*L6(;YdOFplnVViLQn2{$-eH=7HY*Y9d{qWtpYga zp!i!I+a1xpmim}k&Ft2kR3(l>pHubEk`PyDp3h`St~>5M;#t^axS!A}85`c|;KoKm zap5dsf<^}q1|HwKHGFEKf1OG&2JPOvAfN}-(a0hoAK{%Bd5++%40C<+Xmjj?2ixMd z6!RPBh!~F=?662U7WuQFXI}M;5CQ0|`Q44<5EF5=IpF8zwFU=;@G^29Swh!sbB=S5jC&w@<$7+O@oQc^-Z#uYANbn9m( zFqv_dz_Re=@|>X)ZToA{LhSCl8NGY1Vs|`F8ZK>Z`S{3Vk8`oD{`B-@Lile2%}&xCO;Rd+v;dgmWIS+Z}Bmf1E8pet;V+^Whju#)>)wQHVt} zaP>!@efHT+3u$S=Ja+YJnIO6wL&O3yk%Gn(Av(g{>Vba&&$nMao(mp8bM{Xt0WR>6 z?vV_S1{z4Se`?|fKLF0N&n}GTv@_0Fj*`o@J?#v>5V%o;Uhc`z+s4J>2ibM@5pUdvM~d|Zx%>>H=HpBRX9rVq5)f!XK6@2N~%D{lf1PXOHfpO`);R_NA8 z{8Wbieu^ItCx3!Gm|YR>xFbCrabfMlty~NpeCGM*_s=f%JUf4qJj?O7)9vlo*nka= zTkp8_fv3Zv(L`wzw#M;D)iWQr^oOKK0Y{o>ihbx z0QS#)|EcePHd%A!xWfnEXp@_YJDiouQ!$^k!alZq@OEH5_0$jPKxh9@g!!}b`Ll0& z>KjjfV~p=7@eK)kp_5s4^KG3n=F1J~b671SAALlKPgDO9@|=AZ$ew)a`?o`>{7uh2 z_2f66!Y7B=i0jF*&yLN(NhK^_VLZ!M9v2J0aj~5L_%aeZY70D{LbyphOu79*@PO!F zrIo(gLDTV*-f!H`mV8xKArGv1R1O{-GjNA=w#O~r%J8{LR}zY?R5=#eCZMy=TKvUR z&bsL)IM7))0qmxmJ_U7PFnke&a1Y*&e_$H})0kDvE$Xz5BBVgYPB{>Od17aj4f+%% zGs}`JVucZ}X$v+x`|WSLi4OF(v!D#LLJ(}&kPM&HLmyPcwxc?t%9#P48nt1mm9|kf z3q}W4Qs<7m@T9)T5SpHU|KNi>&DW8s%5tbrg$!#=8Hrq96gvi0jNM9(Ff)Fb*|+as zpF~%;FLulY+m@&}0z;ZlUIBYCAi*|l+>XM|j{O-brNZF^><5U0n}}Y;PQ}r{>~r{A zuyy!Dr`aKL9)015-+$_d|N4~b^bI8H^>wLU<6+9n4oAm!?c#5Gu3XuT?aqz++Gfhj znwE`CU?KKi;xG_+_X3&#PjtNtC|;=u|M=~ay|epj&2r5f&m3FUgfQ0Dwyn)*@ITTZ zf*+zmnF=A1N`21facwAT5hT?z#=T|6u~6DFHt*WSKUn%}k22&bv(sePX% z&dBWKuD$dx-;QeKxuJH|$7b+$=hvQJy8>@)6m*0{{0`w5vZC&T3E++=qYki5CKh%OCIGi-tm7$$gZlh%+m_%q^PR1%dj@yEca! zn$X)Um^cK6f=wTfN`#UX_pgkn44a_6CNv#tUj|{wBbxS0cHx&5z;pJpk6#r^9C!Z; zd0;7CKbmj%&A^rMPfQRGf2vCX7cYa09hW0yzA~O1n%M;)suA%BXAJ!dl)C~Cid2U- zkGFqiJhkjuyUNt3KWELLZ*lm+AAZuIcQHbJ_V#bBKORTObM>{afLRCA}jwgK6fP&NxNSYe#>ZUB9tZWrc^T}-R5 z22B1@&KCT=gk2F&)2@$I*Q*`1Wid9)mzrgB)wQnvl?4dYTVIVH)!(3s$aBMG*Dkx_ zqu2d1JKr+=A!@nYaCUhNJPQb~l&8MGAFbfGSw7|)1J4CNi~0QrFMb-PqCQZmzP-FF z6gWQAE9NO*g9dubL!lY)U;uzaUrmGUB~SmZ`U}S*;83vg{uT2SRIhCr1rLB2%5dkP z&-$@l(`IbtP2RQGEd>Cc(eeTk?Uwuoql(@cL6Xc z^6K*3H9H&e;P0!&f}yEATV5E=tIhLetO8$vJ1bz`_hHxUUH>yY^$@6HSfI6DZGGws z6=`N?7b?%I>_7GO|KH@<`PmHD|CByvufzAZg%6nm*Fu3_-Tq$hZ{x=@4-RK%UtA#2 ztIP9IlLNnh;eW9t$TK_hKf>exd%5R!UJyP+2|x?Pd6oN@*C#;4`~Ru&@SYgK$0*s< zLe+WI$HV&iJ+pYS62i=$@!6RLYeVW+*Pl&?LNA~8;Kzw3?kRnA;nJw&PlD$qBBYA{ z|2!!<<{Y>`SmfMN=iISlufw|^G3Qn-e#2`O!RBH2?N2cNI&R#PZjJVh?w8z0-F0pV z=QbmDwY$Py={6x{tLsDRl}cOc8r?N`U4`Sz66wyJ?Al#7&h19()$UrwF2}i7q8{g7 z<6IY;d6PTUo#x&Ou4BhOiR~wl_6c{A^4{s*=(eLC%R3&!weE5dk?Cp>vaKsXw-tMa zxW2b0>T7d(caiHvnO2-}l_>k&`*7UjHlx0!;Qy%W$BWdzpjsOd;}vW}>8n(?i&)>0 zsGF?Uxa(DR6KbP|U&g!It-`w&u`BVWmY1X6Ykf_N+-r2*f9hV3+*8~l>Cx#f@%a-l z&{D+Bj#M#iN0wKjd#!u;f>`9Ty5U%fL25CDgL}8{=Ad?dCjulWjHg~#ZGwx{A?RM>|OAsqiBR4 z)`GIvX6j_Qhfyw%azFIt3TTEPTK8`BJzn)v z_fGgrom=hBL!1`83UBtnWH9zFbf`DFX+W&C=gx88*LgQb`HUc`YsgKxjqa!2^U9|k zIBHyjnlHtk{p_QNw_`tm*jBW)6xY-T8?cw8gVnbm9B*_#@b%?zP9J*VQe0;a+ac9A zU)|~YUJt%4u)^z=PfzN)!F|yUgT>DMB-+0cG?#;q zRy3X*j<+G5URvpT{@Lw^&EDva`0KH=x^WfPVO+CuJ2Y*)uTSwN$FVSau|F(zA3_b} zr%zoUs?gr*S#g|tdO*7a=h5rv1t+TOGpOqq-GBINXaqM$%d2(O{W!lHwIs*t6b=ty zha1qpPI3P|PaVlKPCB+MW2y#40a)FS0lTzeVYyelHsiW#i~$F115AkOg6YhU;=dZ^-+ zHn_Aoxxb8obrI?t0=dnqE!eXMwBjl_UpUvIGOIA3t#b8v*J9LKh4k~?PvKmSRs-nW zwEgv<>BEuroJQ2!3A!GX?RW1$*-$roh^fVKA*?Y_%(WqB6Kd>4EmwnNDN?RPd+hNx zQdFAXIEpyf{Y{BBE=5gSWkarM7*>IJX=cmx_qn&=JYFyR{8sGQhvF*1Wb#Og%oyMg2DyZ!%UkSZW8mHUHDm|ahIb7!=crYy)t}OO4hZ%()+JjtMNph{0 z^o=*X_N%YO90>noDcYb%{@;u%D?ve8Bqd?sTpPX_@7E*#A6DFb5c{QgA3OF_cym-uvnWBE z#aNrocYp96^n>@rMH8{#YOrf5xOJ`x>Bo+JTe%$5OkL-eDP@_9Yyrtc~`Zn3O<;~Z|-bwZ|unV?AleUPym-4SJ2$q z(NpYfi_TxQ3LQR?-@U#)A5LfOm}?Sv-r(@uMXkBkGAe6ny~tHnueFq1xv{CU)B~(l zoJd-8-BCgn{22+ka(iQI2MSbkyll-im)lyqd&)JrT>jG5=6p9#U4`2pWi=NrDYvw> zc9kz}&E-4G?fLd{SK~!isLH(|QK;0`*4H(~~b(*R5t=E!3KmSGBsSRTovq!I5W@tR@FjbmVx}Y7SVzVmMxd1z%JyS8QBY zZY~wOJBuv4)-8@(Xz$GB+sYp*HMX_(tS`59u0x5cRUAeGU%Eu0^`ZicRAJQ~73qOv zl#2OmH8t+^`OAcgYH=GHkzU-nzPqQj`4YBJ=iX)+7Ztn8jk!x3JDT&n)~Yq`49jTh z=}2Z&uX1nq8SP!=?m}ac^;FlO*F_Dqm%3Y zf33^&p!K4T&SD;S2Q55W51(4?E@HH!6ORH4j5W7)cIVw%cQFqN`L-_1_m?Q6+}+a% zo!mR$U3H%O&`IP5X>(H%?%sx)%We6V9=B=-ti7rYH6*ioI=hflt(^K)P7$`{S?siJ zn1_>RHFfs%bhaaNtuo)A%53adkDM0ee8A`6!gKjz0D(`T$_vtYMzRVhZSKN!RzO(= zmNpELhT`jtSXKe14MSoo*I-tGrVZnrW%YD+w)M1jb%PS)5i)W~7tVFXz^GG`7QR zY;RR9Cl13?W=m@?{99SoZMf^Rtd=&Qw02x%8C7j~EMXa)#nyaBPr1-p+~D4suslS) zF>z>Gorn9o)M@bHp44e{nB;jfzco#qo*@p)Jk*=db!Z2)gUXu}pTk*oxQ9q*UDDXmXnCu#(q&$EzN@iF zeyq)}bc-5Wddr$dySmCftvzjY?L3U;J{RY;=GyY@`R;B^jh0*G?uv6ca&Zz#m8f=K zh)ZChVRe`D?M?Yy&ioy%)VRCjQdn7Z!2!$YL%x|>JotzJJDV={mBf7zRn)mXx~!Jg zwmeoa>j;R!2oDB%u}bai!nCdADtB+3Y{Re8tKA>Q>D`T&s{Jb9{ZTr(+$gJ7VHUqH z&f$^)vi6iX@S^cL_s5CMVk^3FB6l_J$BIoKgniy6|tlV zS6uJ@G|n$|j{m(Umm0KTBliv9iPZNlsX`s@dHi=d~A0kh9or zJXk|~Et}VtuhOL;Z)|QJp3*`bEG)+7=G9nUwR>Q0UajTTxCiIv)mdJx`-{1Gt1Yk2 zJv29OjpeO&e>pdAt>vw8U!R+Y`*B{wT0Gp3OlZ2`+E-a-z5A;QnO>Pj_eh0IFHMts zv_huWrrG^I#2-&R&W*V~AyaSd^H@R9CsbOXR`Nq)BzP`};&P*6)-NE4Rnv)E11ZmR#%h#mQa3F-NYha}$|# zEbTikv6EK2f5>KbcjcQ~8$H+>JO!l5bTP$zSH96htabl)D#Oq2z^iu$;+*b$8@ghA zp^fez<4i2lI}M}BO~%Q^d`NC~-%;{9Tx93EXqc*5<(^8WHx`SH9X7^R)l|8EO6D~; zb~iWXOp2On_s_|^9*%ulDNxs%8u#>^TrCKcTkD=l=5}}C&Oq>3B0sAf4%c>@#S>~* zxkFKMzSkG7t#aR2Do20LiTPetQd{kwkJD+?ytz$njr+Ga1Iu)+c~E_=`+?GV-^d$K zEriu@ojV+zVU@3TN0gGww=`n)mMFW%y`UW3!(tjSq3Tw-qe|vbi94~7T;+bKYezR0JHc33#p0HpF2p>!5xr0IK{ak;|1+J3s|k`g0Z`#(_uRNNE~#nl*iejKLBvY!*sUwLnV zQ)|He+C_dAjk2)@;jCo^s@&`57VwLk8s10G$z>~cZjF0=gB$T_5)tYlz+00U;o9qAw6`&%Id!*ocDSDIa(6Qq{;UKyD{e(HqrKDC z7%gb_7g8Cm9j)!rS=H{Hsm#XSL}raUFPTYT8(*x&TKBGGHnEf0b#7%cJMxznJZm^V znS%#HSS;FQR8_loC-Zt5yD#D66}4DZJ&-cr@#R>fJleD@`d&3G1r z2Ns$jT5^r9I?m^MjSDx_%6m>%7iV$(5@+G#xHt=Q5OR7n+~Blow}-F+>2>aXaek?T%T-%w+Ucv^`{QihGb$PDo(n^ASGl9JoG%t} z3(ssOhTCR3>5J?!A8(QPs&JNsKXi#Zch56y)IHzY_XPi^* zE{StgBlGO82q)IKwq&-JxGVs#;av_&)VlU$2@E!VKCmu}5_PVlatW(owd>4eCp@Qi zjqA$f;%+WdzILtqP$s*lGjhq=dRL5dam&I*Lpv_6wI|QJz7{;vaF@m>pRx4bI1 zF3xLg?rFUg%XmJJ^7+-SH_mUiNyM*#P;-r2ALllfdblP*a;@7CC*#>Io&{P)o%?W{ z(NgT(pxY#zvD$qk&OpD?Z4@UWh8&Nu0Jl&p6_X-)iC#S31EbIcST$x z*NRCtk=f!l#hG|q+uqof%&%YNHplr|8rXC6L>={2?#j4~?uAoTRJ&h}v$gVNJ^5VE z`Yszq>TBIqafwpLB^{mXI^x_qHxTC*dsc=(S=7tfT7 z`Hp5A7wgx$!MR0vpV`x@8}^n}_*UK4`HOU8{Ux328{M^`7}t*07_H%N{abhgzb!7( zfV8vDDFA2s=~VTSF?GLRf7+o1MJFX;zWF6VmCl7Rak4>nk~W8lSOLW zr?N%5d+QhX1|Z&d-#%}-uEw5%yaEe@-D;6S61hKXZ~V|>Q=k| zD=ufBfs}0$Rdbj-?~L=kROrsQjq0!mWi3@}@oX|Kg9Qy{Pnfz}gILwtYWMj#w+SE5 zg~_!F)8`lBthjP4!&+PX*>&!Vm5NyJHN@5K?zo5_ZlcF=z+2;fH_ne+Nfue_ey>sy zbWAL@ZGBs{w%(0YD#U3YR!o*`bbBh5jPFoE)#Sbum$@j9yWZsD)2^)9{eD~q4>T*4 z$>D3U{$3N$5Nxo8_cb>b&8^nv-Dq4OzI+>Rt(_Kk&zvHdY+Lc^rFTxuwSO2F34KLn za^A@?)&5aj#5bf8-FU{ShU%-`eTgC*)H}ks*SN}kC6k9GYQCrscUr0%tK3&J*%Yir zAJ=kTX{>gCk|{uEi@IrJjr-F~J|`5c&em&=6JTSl+nXumyJ;@p(W(!V&{CcIvrM5N zNLZCtHLiB|XUY_DH^4{1n&EA{Zd~L3JW~n}pyP3)ajpAWCZE^TozL?b97yWjSSBBz z(c%LWtwXCC8{K#&o1fv@b0D1E+HbyCRlY-wfn0~KD?{5B~rer#yyfLpy4jA zq1HW`DF9K!^E9+j=l*(bels3hXjNO)wAy`RZhm)jA>Yo=eNe#~_svkCyWH7~rxnfk zMnb8hwWqt>h0i40tfJ;s?%Q!W|2)M%7;CA$I0j)2yN*s41g*vh|DAN< ze0vwZ`q13jR%*uw=k~M$mDac?(&buO^KEcvNmp)f?Z$0EvnJJQ+(JE>F5BAHmcIyV z5q|DvjCJm*bP;{L+=W4<*trfL+qbk}hO$0ejT@|gN*Bfh0pArdc=M5!Rl3Ig^PF-O zs$1)xP8W;yNxEw_CXHv(1*tdM?&<8Yby@Y=M)z#GNN27I-=V?KD}#h9XmV5OV*Kp8 z;-pZ$w%L6*UADUeACDF=V9uFks@LY+bLqky`7u}NW(8lpFk$lUV7iodoOG!c_b=&E zxKu388sRnkUJZQEe>-(rTFPLnVA%=WDHYhtkE+a#v?} zD<31^PR8n2$E&Wdao-%6@<9rf-=`V{Ma zscEztcZx5hOEqO%0=A+rBGFl!YTdDP2^-Z)9jWJt)tEHgNzn)Ag`S@Hqy3iZ93J;)GC2bH zXJ^$pJnzqBbC#!j=k=f$HQ=FtrU;gug>)Cl;n9Dl5IScQzMyAMnW}Sm_Ma(`HhvDz z{xb#qa$dI=(muDwy(v?Mm9(~F;Kg&P&>?bb-J3%(`$Aw-XD_}cw#uCzC)@KhegnPG3l_b4%k!dm5WK zp7J}Imb=O=3%NOd+QsKdxwea3&8jtMx;DDbNF1bx!7%|RlANjucrv#>M&L6u{!F^X63ursj*tumCX|1+B$w! zF#xK%b(FXs%bj8-qjp`Rt{At&-EkIgNur#!t|#O)VL1kkis)eWz!#NbB3u{eW6{>E zPomJT%UG1MK%Lt#PXT1Hz-ss5P@ounGRixwHf67I|0`s-;v+tMF(zjWt_F`sYFuAB zS9r?8Uu=Y|W-WB-IUH^9h&Y|WK|$Y0#)IK>PIu4xHp{|8;Y=1j9@I%SZcCigjptsM zSx$&HGAkOJ-VJ)?J^?!k26dJt4o|{Yo}Jhb4$zC7yELP$@TD zDIRp*SSjCMEuM0IESs&yIYJQ}pQ_%JEx^{}tHu+~kN>~5TuE;nMHGICa{vkP3pgMy zL_#*2vBwKsnC_`IBiSCyOCqC@EMbXDI7G^Ut3iTr0>sIX0Ab(4zVE9Z-1#-}1!}`JKbIIUk7id1S-pwN5gL&}=g* z1COVxgfQ&uoRF`O9Smm35?${J>M4hYBSIg;eS<5{7g!Yc(soy@VMHkHqZ@50%p%av zE~;bie3-5e2*=Z#^+5Zz)C$t;e?M%*O5u83wor~edvgQl(s7LrhLQ^19)dQH)p!RV){~>b^SUDf zv1c)ZhjwQuXK$N^IiQL`x+5lc3Wn&;5FlduYT_K`A7GM(E6=D?ODoW|@5MtFh zP>t>hL3vFQOs;)v=-v=yHE95^!ZNxqgrRqJ5#}+%yu3dIAiTCQ!Uq(2^FkmWJrF{W zbCB5)#N2!^B8SxqL0r-bOwNZQh~kbhH6M=1IX6Nkxhkp9BOwU3EqPaQn)>O{5EQ5x zpxrAXoSs2?%%NZ?p2iVFn=wR>J4w=z&<*rsm7Z|Lb=V2i25L$PJ?R9D_k}4v<%GJ= zxHi=2X(z<3BBUORkN9n@Ny(H9J+l%>mkAl=jGkQyWmf~n!FlqW!{rhj1aot`!9n-= zb~z5gv;LZZ7{(Vm5!R4saNK>dQ><=c>0X?8U+M%{H?%@3^l~R84-&&Y^wTR&tgF)a zIA;z(Hb}2VWV2r6fng)qegFapme9O zq30O_*63{q(kU;ep;->Fg}g-X#N`}g3wfE|b#iv^NVJ~F5U=uHAma_72(-%#;#T%p z#5nAuvb!PY2TQ-cw;CLcKa3)*d%|Fc`KSZIuSV8gY;aWmxC6naI%iZdI5mIbFfdH0 z$uWbWhba}r1j2t3b!{1VE57k@ z0%}YZHai1H#kW2nS7dFm29ApFd^szqj&S$R6r%`d#rHl&vjgjm!n9!Euh{D&JS~Vk znVix+1a6CcJ_>D7<121#Sbegln$izG#&=w>zx797SSav&#L!Ox#`c_!Vn+LYIi5B4 zBr!%?2@BTGK0xm_FdG>dvJUtt%nO*o`EhXmCIdUxK_A371CxvNt~3T_tV2G4eO}Uc z67lEy7sjk#LL3yiVTKj!S09kOwV;oqA@m8<8vE(D2oTY1jchFUdK>sb79${TnHY`5 z2WFB%Ivhdei^L2fRge?Qt4uOPM^*uHB==0=#ldNdj{0aA%5keja9@?pw>FB#Bnd68 z0@mtNTJ|wx#?)*h!@6tqyARd6Wo*%rV!||up<_M<9^h5lm(lT6z|uZ=lm75Awry<# zoR;W>56TBPMM7@UfK$gCm$XbLBT#>fPkZT4ACg<;+yj^P(J3Fmt2ze)@go2S2;4;4 z^a`E!VUtLFNH6EZOMBz{>5LCUP64M5u+b6mvUrb?_;xsb2IwzI;6w^1(l`(1TtWnI zXPCGBen;N6@}9I>XK$z>U$cpXLghqgN@hB<6O4j^z?FC7JM%zrzWxNteg1-`@E1&? zlvy*j;qM%BT6=_v=l`rnnRS?*C0^GQ?xF!s0d5)d8*M_X`-Ibpzi0T?6o!U5x*9AC z%x7~k((SGSdy3x2f2Z{tsi$4*xyYxVMi0C#mKsIdHHxh;M8_6)4g^{vpzXunl*R?QwiA{F5P*pS}qhV6|snO3cY53tW^v62|!Z?wk-RvUPIpW zxJd0QqAdKmU7PKFLK|{NKwE_uvp-td<2IJaY#3Cv`f32Z`UUc0Ns%c1DCgD z*#9l6+H&hb3A9D}GAR=4TSbLFyTI|HR1@uKgRPbWF>->0BLIm9gN}9a!wEA}NuGTE z!W|B0U6x&;r!VrTDc=3r1Pb0jZEt|^C!TS4io;`uPKaMCu$#R?|{KQK5 zm$rgDqkaA=n}$DsnH!~sUpL3GsLPMz6I#S&3n*)WNGZmbvJsc;!djv7ybg~~;*RvC_Lm_run_config_dialog = FALSE; +} + +// FUNCTION: CONFIG 0x00403bf0 +void CConfigCommandLineInfo::ParseParam(LPCSTR pszParam, BOOL bFlag, BOOL bLast) +{ + if (bFlag) { + if (lstrcmpiA(pszParam, "config") == 0) { + currentConfigApp->m_run_config_dialog = TRUE; + } + } +} diff --git a/CONFIG_orig/ConfigCommandLineInfo.h b/CONFIG_orig/ConfigCommandLineInfo.h new file mode 100644 index 00000000..82510df1 --- /dev/null +++ b/CONFIG_orig/ConfigCommandLineInfo.h @@ -0,0 +1,21 @@ +#if !defined(AFX_CONFIGCOMMANDLINEINFO_H) +#define AFX_CONFIGCOMMANDLINEINFO_H + +#include "StdAfx.h" +#include "compat.h" +#include "config.h" +#include "decomp.h" + +// VTABLE: CONFIG 0x004060e8 +// SIZE 0x24 +class CConfigCommandLineInfo : public CCommandLineInfo { +public: + CConfigCommandLineInfo(); + + void ParseParam(LPCSTR pszParam, BOOL bFlag, BOOL bLast) override; +}; + +// SYNTHETIC: CONFIG 0x00403b80 +// CConfigCommandLineInfo::`scalar deleting destructor' + +#endif // !defined(AFX_CONFIGCOMMANDLINEINFO_H) diff --git a/CONFIG_orig/MainDlg.cpp b/CONFIG_orig/MainDlg.cpp new file mode 100644 index 00000000..7ae5393e --- /dev/null +++ b/CONFIG_orig/MainDlg.cpp @@ -0,0 +1,346 @@ +#include "MainDlg.h" + +#include "AboutDlg.h" +#include "config.h" +#include "res/resource.h" + +#include + +DECOMP_SIZE_ASSERT(CDialog, 0x60) +DECOMP_SIZE_ASSERT(CMainDialog, 0x70) + +// FUNCTION: CONFIG 0x00403d50 +CMainDialog::CMainDialog(CWnd* pParent) : CDialog(IDD, pParent) +{ + afxCurrentWinApp; + m_icon = LoadIconA(AfxFindResourceHandle(MAKEINTRESOURCE(IDI_CONFIG), RT_GROUP_ICON), MAKEINTRESOURCE(IDI_CONFIG)); +} + +// FUNCTION: CONFIG 0x00403e50 +void CMainDialog::DoDataExchange(CDataExchange* pDX) +{ +} + +BEGIN_MESSAGE_MAP(CMainDialog, CDialog) +ON_WM_SYSCOMMAND() +ON_WM_PAINT() +ON_WM_QUERYDRAGICON() +ON_COMMAND(IDC_CHK_FLIP_VIDEO_MEM_PAGES, OnCheckboxFlipVideoMemPages) +ON_LBN_SELCHANGE(IDC_LIST_3DDEVICES, OnList3DevicesSelectionChanged) +ON_COMMAND(IDC_RAD_PALETTE_16BIT, OnRadiobuttonPalette16bit) +ON_COMMAND(IDC_RAD_PALETTE_256, OnRadiobuttonPalette256) +ON_COMMAND(IDC_CHK_3D_VIDEO_MEMORY, OnCheckbox3DVideoMemory) +ON_WM_DESTROY() // FIXME: CONFIG.EXE calls Default +ON_COMMAND(IDABORT, OnButtonCancel) +ON_COMMAND(IDC_CHK_3DSOUND, OnCheckbox3DSound) +ON_COMMAND(IDC_RAD_MODEL_QUALITY_LOW, OnRadiobuttonModelLowQuality) +ON_COMMAND(IDC_RAD_MODEL_QUALITY_HIGH, OnRadiobuttonModelHighQuality) +ON_COMMAND(IDC_RAD_TEXTURE_QUALITY_LOW, OnRadiobuttonTextureLowQuality) +ON_COMMAND(IDC_RAD_TEXTURE_QUALITY_HIGH, OnRadiobuttonTextureHighQuality) +ON_COMMAND(IDC_CHK_JOYSTICK, OnCheckboxJoystick) +ON_COMMAND(IDC_BTN_ADVANCED, OnButtonAdvanced) +ON_COMMAND(IDC_CHK_DRAW_CURSOR, OnCheckboxDrawCursor) +ON_COMMAND(IDC_CHK_MUSIC, OnCheckboxMusic) +END_MESSAGE_MAP() + +// FUNCTION: CONFIG 0x00403e80 +BOOL CMainDialog::OnInitDialog() +{ + CDialog::OnInitDialog(); + SwitchToAdvanced(FALSE); + CMenu* system_menu = CMenu::FromHandle(::GetSystemMenu(m_hWnd, FALSE)); + CString about_text; + about_text.LoadString(IDS_ABOUT); + if (system_menu) { + AppendMenuA(system_menu->m_hMenu, MF_SEPARATOR, 0, NULL); + AppendMenuA(system_menu->m_hMenu, MF_STRING, 16, (LPCTSTR) about_text); + } + SendMessage(WM_SETICON, ICON_BIG, (LPARAM) m_icon); + SendMessage(WM_SETICON, ICON_SMALL, (LPARAM) m_icon); + LegoDeviceEnumerate* enumerator = currentConfigApp->m_device_enumerator; + enumerator->FUN_1009d210(); + m_modified = currentConfigApp->ReadRegisterSettings(); + CWnd* list_3d_devices = GetDlgItem(IDC_LIST_3DDEVICES); + int driver_i = 0; + int device_i = 0; + int selected = 0; + char device_name[256]; + const list& driver_list = enumerator->GetDriverList(); + for (list::const_iterator it_driver = driver_list.begin(); it_driver != driver_list.end(); it_driver++) { + const MxDriver& driver = *it_driver; + for (list::const_iterator it_device = driver.m_devices.begin(); + it_device != driver.m_devices.end(); + it_device++) { + const Direct3DDeviceInfo& device = *it_device; + if (&device == currentConfigApp->m_device) { + selected = device_i; + } + device_i += 1; + sprintf( + device_name, + driver_i == 0 ? "%s ( Primary Device )" : "%s ( Secondary Device )", + device.m_deviceName + ); + ::SendMessage(list_3d_devices->m_hWnd, LB_ADDSTRING, 0, (LPARAM) device_name); + } + driver_i += 1; + } + ::SendMessage(list_3d_devices->m_hWnd, LB_SETCURSEL, selected, 0); + UpdateInterface(); + return TRUE; +} + +// FUNCTION: CONFIG 0x00404080 +void CMainDialog::OnSysCommand(UINT nID, LPARAM lParam) +{ + if ((nID & 0xfff0) == 0x10) { + CAboutDialog about_dialog; + about_dialog.DoModal(); + } + else { + Default(); + } +} + +// FUNCTION: CONFIG 0x00404150 +void CMainDialog::OnPaint() +{ + if (IsIconic()) { + CPaintDC painter(this); + ::SendMessage(m_hWnd, WM_ICONERASEBKGND, (WPARAM) painter.m_hDC, 0); + RECT dim; + GetClientRect(&dim); + DrawIcon( + painter.m_hDC, + (dim.right - dim.left - GetSystemMetrics(SM_CXICON) + 1) / 2, + (dim.bottom - dim.top - GetSystemMetrics(SM_CYICON) + 1) / 2, + m_icon + ); + } + else { + Default(); + } +} + +// FUNCTION: CONFIG 0x00404230 +HCURSOR CMainDialog::OnQueryDragIcon() +{ + return m_icon; +} + +// FUNCTION: CONFIG 0x00404240 +void CMainDialog::OnList3DevicesSelectionChanged() +{ + LegoDeviceEnumerate* device_enumerator = currentConfigApp->m_device_enumerator; + int selected = ::SendMessage(GetDlgItem(IDC_LIST_3DDEVICES)->m_hWnd, LB_GETCURSEL, 0, 0); + device_enumerator->GetDevice(selected, currentConfigApp->m_driver, currentConfigApp->m_device); + if (currentConfigApp->GetHardwareDeviceColorModel()) { + GetDlgItem(IDC_CHK_DRAW_CURSOR)->EnableWindow(TRUE); + } + else { + currentConfigApp->m_3d_video_ram = FALSE; + currentConfigApp->m_flip_surfaces = FALSE; + CheckDlgButton(IDC_CHK_3D_VIDEO_MEMORY, currentConfigApp->m_3d_video_ram); + CheckDlgButton(IDC_CHK_FLIP_VIDEO_MEM_PAGES, currentConfigApp->m_flip_surfaces); + } + m_modified = TRUE; + UpdateInterface(); +} + +// FUNCTION: CONFIG 0x00404320 +void CMainDialog::OnCancel() +{ + CDialog::OnCancel(); +} + +// FUNCTION: CONFIG 0x00404330 +void CMainDialog::OnDestroy() +{ + CDialog::Default(); +} + +// FUNCTION: CONFIG 0x00404340 +void CMainDialog::OnButtonCancel() +{ + if (m_modified) { + currentConfigApp->WriteRegisterSettings(); + } + OnCancel(); +} + +// FUNCTION: CONFIG 0x00404360 +void CMainDialog::UpdateInterface() +{ + currentConfigApp->ValidateSettings(); + GetDlgItem(IDC_CHK_3D_VIDEO_MEMORY) + ->EnableWindow(!currentConfigApp->m_flip_surfaces && !currentConfigApp->GetHardwareDeviceColorModel()); + CheckDlgButton(IDC_CHK_FLIP_VIDEO_MEM_PAGES, currentConfigApp->m_flip_surfaces); + CheckDlgButton(IDC_CHK_3D_VIDEO_MEMORY, currentConfigApp->m_3d_video_ram); + BOOL full_screen = currentConfigApp->m_full_screen; + currentConfigApp->AdjustDisplayBitDepthBasedOnRenderStatus(); + if (currentConfigApp->GetHardwareDeviceColorModel()) { + CheckDlgButton(IDC_CHK_DRAW_CURSOR, TRUE); + } + else { + CheckDlgButton(IDC_CHK_DRAW_CURSOR, FALSE); + currentConfigApp->m_draw_cursor = FALSE; + GetDlgItem(IDC_CHK_DRAW_CURSOR)->EnableWindow(FALSE); + } + if (full_screen) { + CheckRadioButton( + IDC_RAD_PALETTE_256, + IDC_RAD_PALETTE_16BIT, + currentConfigApp->m_display_bit_depth == 8 ? IDC_RAD_PALETTE_256 : IDC_RAD_PALETTE_16BIT + ); + } + else { + CheckDlgButton(IDC_RAD_PALETTE_256, 0); + CheckDlgButton(IDC_RAD_PALETTE_16BIT, 0); + currentConfigApp->m_display_bit_depth = 0; + } + GetDlgItem(IDC_RAD_PALETTE_256) + ->EnableWindow(full_screen && currentConfigApp->GetConditionalDeviceRenderBitDepth()); + GetDlgItem(IDC_RAD_PALETTE_16BIT)->EnableWindow(full_screen && currentConfigApp->GetDeviceRenderBitStatus()); + CheckDlgButton(IDC_CHK_3DSOUND, currentConfigApp->m_3d_sound); + CheckDlgButton(IDC_CHK_DRAW_CURSOR, currentConfigApp->m_draw_cursor); + switch (currentConfigApp->m_model_quality) { + case 1: + CheckRadioButton(IDC_RAD_MODEL_QUALITY_LOW, IDC_RAD_MODEL_QUALITY_HIGH, IDC_RAD_MODEL_QUALITY_LOW); + break; + case 2: + CheckRadioButton(IDC_RAD_MODEL_QUALITY_LOW, IDC_RAD_MODEL_QUALITY_HIGH, IDC_RAD_MODEL_QUALITY_HIGH); + break; + } + CheckRadioButton( + IDC_RAD_TEXTURE_QUALITY_LOW, + IDC_RAD_TEXTURE_QUALITY_HIGH, + currentConfigApp->m_texture_quality == 0 ? IDC_RAD_TEXTURE_QUALITY_LOW : IDC_RAD_TEXTURE_QUALITY_HIGH + ); + CheckDlgButton(IDC_CHK_JOYSTICK, currentConfigApp->m_use_joystick); + CheckDlgButton(IDC_CHK_MUSIC, currentConfigApp->m_music); +} + +// FUNCTION: CONFIG 0x004045e0 +void CMainDialog::OnCheckbox3DSound() +{ + currentConfigApp->m_3d_sound = IsDlgButtonChecked(IDC_CHK_3DSOUND); + m_modified = TRUE; + UpdateInterface(); +} + +// FUNCTION: CONFIG 0x00404610 +void CMainDialog::OnCheckbox3DVideoMemory() +{ + currentConfigApp->m_3d_video_ram = IsDlgButtonChecked(IDC_CHK_3D_VIDEO_MEMORY); + m_modified = TRUE; + UpdateInterface(); +} + +// FUNCTION: CONFIG 0x00404640 +void CMainDialog::OnRadiobuttonPalette16bit() +{ + currentConfigApp->m_display_bit_depth = 16; + m_modified = TRUE; + UpdateInterface(); +} + +// FUNCTION: CONFIG 0x00404670 +void CMainDialog::OnRadiobuttonPalette256() +{ + currentConfigApp->m_display_bit_depth = 8; + m_modified = TRUE; + UpdateInterface(); +} + +// FUNCTION: CONFIG 0x004046a0 +void CMainDialog::OnCheckboxFlipVideoMemPages() +{ + currentConfigApp->m_flip_surfaces = IsDlgButtonChecked(IDC_CHK_FLIP_VIDEO_MEM_PAGES); + m_modified = TRUE; + UpdateInterface(); +} + +// FUNCTION: CONFIG 0x004046d0 +void CMainDialog::OnRadiobuttonModelLowQuality() +{ + currentConfigApp->m_model_quality = 1; + m_modified = TRUE; + UpdateInterface(); +} + +// FUNCTION: CONFIG 0x00404700 +void CMainDialog::OnRadiobuttonModelHighQuality() +{ + currentConfigApp->m_model_quality = 2; + m_modified = TRUE; + UpdateInterface(); +} + +// FUNCTION: CONFIG 0x00404730 +void CMainDialog::OnRadiobuttonTextureLowQuality() +{ + currentConfigApp->m_texture_quality = 0; + m_modified = TRUE; + UpdateInterface(); +} + +// FUNCTION: CONFIG 0x00404760 +void CMainDialog::OnRadiobuttonTextureHighQuality() +{ + currentConfigApp->m_texture_quality = 1; + m_modified = TRUE; + UpdateInterface(); +} + +// FUNCTION: CONFIG 0x00404790 +void CMainDialog::OnCheckboxJoystick() +{ + currentConfigApp->m_use_joystick = IsDlgButtonChecked(IDC_CHK_JOYSTICK); + m_modified = TRUE; + UpdateInterface(); +} + +// FUNCTION: CONFIG 0x004047c0 +void CMainDialog::OnButtonAdvanced() +{ + SwitchToAdvanced(!m_advanced); +} + +// FUNCTION: CONFIG 0x004047d0 +void CMainDialog::SwitchToAdvanced(BOOL p_advanced) +{ + RECT dialog_rect; + RECT grp_advanced_rect; + ::GetWindowRect(m_hWnd, &dialog_rect); + ::GetWindowRect(GetDlgItem(IDC_GRP_ADVANCED)->m_hWnd, &grp_advanced_rect); + CWnd* button_advanced = GetDlgItem(IDC_BTN_ADVANCED); + m_advanced = p_advanced; + int height; + if (p_advanced) { + height = grp_advanced_rect.bottom - dialog_rect.top + 10; + GetDlgItem(IDC_BMP_SHARK)->EnableWindow(TRUE); + button_advanced->SetWindowText("Basic"); + } + else { + height = grp_advanced_rect.top - dialog_rect.top; + GetDlgItem(IDC_BMP_SHARK)->EnableWindow(FALSE); + button_advanced->SetWindowText("Advanced"); + } + SetWindowPos(&wndTop, 0, 0, dialog_rect.right - dialog_rect.left, height, SWP_NOMOVE); +} + +// FUNCTION: CONFIG 0x00404890 +void CMainDialog::OnCheckboxDrawCursor() +{ + currentConfigApp->m_draw_cursor = IsDlgButtonChecked(IDC_CHK_DRAW_CURSOR); + m_modified = TRUE; + UpdateInterface(); +} + +// FUNCTION: CONFIG 0x004048c0 +void CMainDialog::OnCheckboxMusic() +{ + currentConfigApp->m_music = IsDlgButtonChecked(IDC_CHK_MUSIC); + m_modified = TRUE; + UpdateInterface(); +} diff --git a/CONFIG_orig/MainDlg.h b/CONFIG_orig/MainDlg.h new file mode 100644 index 00000000..eeebc868 --- /dev/null +++ b/CONFIG_orig/MainDlg.h @@ -0,0 +1,70 @@ +#if !defined(AFX_MAINDLG_H) +#define AFX_MAINDLG_H + +#include "StdAfx.h" +#include "compat.h" +#include "decomp.h" +#include "res/resource.h" + +// VTABLE: CONFIG 0x004063e0 +// SIZE 0x70 +class CMainDialog : public CDialog { +public: + CMainDialog(CWnd* pParent); + enum { + IDD = IDD_MAIN + }; + +protected: + void DoDataExchange(CDataExchange* pDX) override; + void UpdateInterface(); + void SwitchToAdvanced(BOOL p_advanced); + + undefined m_unk0x60[4]; // 0x60 + HCURSOR m_icon; // 0x64 + BOOL m_modified; // 0x68 + BOOL m_advanced; // 0x6c + // Implementation + +protected: + BOOL OnInitDialog() override; + void OnSysCommand(UINT nID, LPARAM lParam); + void OnPaint(); + HCURSOR OnQueryDragIcon(); + void OnList3DevicesSelectionChanged(); + void OnCancel(); + void OnDestroy(); + void OnButtonCancel(); + void OnCheckbox3DSound(); + void OnCheckbox3DVideoMemory(); + void OnRadiobuttonPalette16bit(); + void OnRadiobuttonPalette256(); + void OnCheckboxFlipVideoMemPages(); + void OnRadiobuttonModelLowQuality(); + void OnRadiobuttonModelHighQuality(); + void OnRadiobuttonTextureLowQuality(); + void OnRadiobuttonTextureHighQuality(); + void OnCheckboxJoystick(); + void OnButtonAdvanced(); + void OnCheckboxDrawCursor(); + void OnCheckboxMusic(); + + DECLARE_MESSAGE_MAP() +}; + +// SYNTHETIC: CONFIG 0x00403de0 +// CMainDialog::`scalar deleting destructor' + +// FUNCTION: CONFIG 0x00403e60 +// CMainDialog::_GetBaseMessageMap + +// FUNCTION: CONFIG 0x00403e70 +// CMainDialog::GetMessageMap + +// GLOBAL: CONFIG 0x00406120 +// CMainDialog::messageMap + +// GLOBAL: CONFIG 0x00406128 +// CMainDialog::_messageEntries + +#endif // !defined(AFX_MAINDLG_H) diff --git a/CONFIG_orig/StdAfx.cpp b/CONFIG_orig/StdAfx.cpp new file mode 100644 index 00000000..3e0b3d04 --- /dev/null +++ b/CONFIG_orig/StdAfx.cpp @@ -0,0 +1,5 @@ +// stdafx.cpp : source file that includes just the standard includes +// simple.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" diff --git a/CONFIG_orig/StdAfx.h b/CONFIG_orig/StdAfx.h new file mode 100644 index 00000000..39243b3b --- /dev/null +++ b/CONFIG_orig/StdAfx.h @@ -0,0 +1,31 @@ +#if !defined(AFX_STDAFX_H) +#define AFX_STDAFX_H + +#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers + +#include // MFC extensions +#include // MFC core and standard components +#ifndef _AFX_NO_AFXCMN_SUPPORT +#include // MFC support for Windows Common Controls +#endif // _AFX_NO_AFXCMN_SUPPORT + +#if 0 + +// FUNCTION: CONFIG 0x402ca0 +// CObject::Serialize + +// FUNCTION: CONFIG 0x402cb0 +// CObject::AssertValid + +// FUNCTION: CONFIG 0x402cc0 +// CObject::Dump + +// FUNCTION: CONFIG 0x00403c90 +// CWnd::BeginModalState + +// FUNCTION: CONFIG 0x00403ca0 +// CWnd::EndModalState + +#endif + +#endif // !defined(AFX_STDAFX_H) diff --git a/CONFIG_orig/config.cpp b/CONFIG_orig/config.cpp new file mode 100644 index 00000000..d4457b55 --- /dev/null +++ b/CONFIG_orig/config.cpp @@ -0,0 +1,435 @@ +#include "config.h" + +#include "ConfigCommandLineInfo.h" +#include "MainDlg.h" +#include "detectdx5.h" + +#include // _chdir +#include +#include +#include // _spawnl + +DECOMP_SIZE_ASSERT(CWinApp, 0xc4) +DECOMP_SIZE_ASSERT(CConfigApp, 0x108) + +DECOMP_STATIC_ASSERT(offsetof(CConfigApp, m_display_bit_depth) == 0xd0) + +BEGIN_MESSAGE_MAP(CConfigApp, CWinApp) +ON_COMMAND(ID_HELP, OnHelp) +END_MESSAGE_MAP() + +// FUNCTION: CONFIG 0x00402c40 +CConfigApp::CConfigApp() +{ +} + +#define MiB (1024 * 1024) + +// FUNCTION: CONFIG 0x00402dc0 +BOOL CConfigApp::InitInstance() +{ + if (!IsLegoNotRunning()) { + return FALSE; + } + if (!DetectDirectX5()) { + AfxMessageBox( + "\"LEGO\xae Island\" is not detecting DirectX 5 or later. Please quit all other applications and try " + "again." + ); + return FALSE; + } +#ifdef _AFXDLL + Enable3dControls(); +#else + Enable3dControlsStatic(); +#endif + CConfigCommandLineInfo cmdInfo; + ParseCommandLine(cmdInfo); + if (_stricmp(afxCurrentAppName, "config") == 0) { + m_run_config_dialog = TRUE; + } + m_device_enumerator = new LegoDeviceEnumerate; + if (m_device_enumerator->DoEnumerate()) { + return FALSE; + } + m_driver = NULL; + m_device = NULL; + m_full_screen = TRUE; + m_wide_view_angle = TRUE; + m_use_joystick = FALSE; + m_music = TRUE; + m_flip_surfaces = FALSE; + m_3d_video_ram = FALSE; + m_joystick_index = -1; + m_display_bit_depth = 16; + MEMORYSTATUS memory_status; + memory_status.dwLength = sizeof(memory_status); + GlobalMemoryStatus(&memory_status); + if (memory_status.dwTotalPhys < 12 * MiB) { + m_3d_sound = FALSE; + m_model_quality = 0; + m_texture_quality = 1; + } + else if (memory_status.dwTotalPhys < 20 * MiB) { + m_3d_sound = FALSE; + m_model_quality = 1; + m_texture_quality = 1; + } + else { + m_model_quality = 2; + m_3d_sound = TRUE; + m_texture_quality = 1; + } + if (!m_run_config_dialog) { + ReadRegisterSettings(); + ValidateSettings(); + WriteRegisterSettings(); + delete m_device_enumerator; + m_device_enumerator = NULL; + m_driver = NULL; + m_device = NULL; + char password[256]; + ReadReg("password", password, sizeof(password)); + const char* exe = _stricmp("ogel", password) == 0 ? "isled.exe" : "isle.exe"; + char diskpath[1024]; + if (ReadReg("diskpath", diskpath, sizeof(diskpath))) { + _chdir(diskpath); + } + _spawnl(_P_NOWAIT, exe, exe, "/diskstream", "/script", "\\lego\\scripts\\isle\\isle.si", NULL); + return FALSE; + } + CMainDialog main_dialog(NULL); + main_dialog.DoModal(); + return FALSE; +} + +// FUNCTION: CONFIG 0x00403100 +BOOL CConfigApp::IsLegoNotRunning() +{ + HWND hWnd = FindWindowA("Lego Island MainNoM App", "LEGO\xae"); + if (_stricmp(afxCurrentAppName, "config") == 0 || !hWnd) { + return TRUE; + } + if (SetForegroundWindow(hWnd)) { + ShowWindow(hWnd, SW_RESTORE); + } + return FALSE; +} + +// FUNCTION: CONFIG 0x004031b0 +BOOL CConfigApp::WriteReg(const char* p_key, const char* p_value) const +{ + HKEY hKey; + DWORD pos; + + if (RegCreateKeyExA( + HKEY_LOCAL_MACHINE, + "SOFTWARE\\Mindscape\\LEGO Island", + 0, + "string", + 0, + KEY_READ | KEY_WRITE, + NULL, + &hKey, + &pos + ) == ERROR_SUCCESS) { + if (RegSetValueExA(hKey, p_key, 0, REG_SZ, (LPBYTE) p_value, strlen(p_value)) == ERROR_SUCCESS) { + if (RegCloseKey(hKey) == ERROR_SUCCESS) { + return TRUE; + } + } + else { + RegCloseKey(hKey); + } + } + return FALSE; +} + +// FUNCTION: CONFIG 0x00403240 +BOOL CConfigApp::ReadReg(LPCSTR p_key, LPCSTR p_value, DWORD p_size) const +{ + HKEY hKey; + DWORD valueType; + + BOOL out = FALSE; + DWORD size = p_size; + if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Mindscape\\LEGO Island", 0, KEY_READ, &hKey) == ERROR_SUCCESS) { + if (RegQueryValueExA(hKey, p_key, NULL, &valueType, (LPBYTE) p_value, &size) == ERROR_SUCCESS) { + if (RegCloseKey(hKey) == ERROR_SUCCESS) { + out = TRUE; + } + } + } + return out; +} + +// FUNCTION: CONFIG 0x004032b0 +BOOL CConfigApp::ReadRegBool(LPCSTR p_key, BOOL* p_bool) const +{ + char buffer[256]; + + BOOL read = ReadReg(p_key, buffer, sizeof(buffer)); + if (read) { + if (strcmp("YES", buffer) == 0) { + *p_bool = TRUE; + return read; + } + + if (strcmp("NO", buffer) == 0) { + *p_bool = FALSE; + return read; + } + + read = FALSE; + } + return read; +} + +// FUNCTION: CONFIG 0x00403380 +BOOL CConfigApp::ReadRegInt(LPCSTR p_key, int* p_value) const +{ + char buffer[256]; + + BOOL read = ReadReg(p_key, buffer, sizeof(buffer)); + if (read) { + *p_value = atoi(buffer); + } + + return read; +} + +// FUNCTION: CONFIG 0x004033d0 +BOOL CConfigApp::IsDeviceInBasicRGBMode() const +{ + /* + * BUG: should be: + * return !GetHardwareDeviceColorModel() && (m_device->m_HELDesc.dcmColorModel & D3DCOLOR_RGB); + */ + return !GetHardwareDeviceColorModel() && m_device->m_HELDesc.dcmColorModel == D3DCOLOR_RGB; +} + +// FUNCTION: CONFIG 0x00403400 +D3DCOLORMODEL CConfigApp::GetHardwareDeviceColorModel() const +{ + return m_device->m_HWDesc.dcmColorModel; +} + +// FUNCTION: CONFIG 0x00403410 +BOOL CConfigApp::IsPrimaryDriver() const +{ + return m_driver == &m_device_enumerator->GetDriverList().front(); +} + +// FUNCTION: CONFIG 0x00403430 +BOOL CConfigApp::ReadRegisterSettings() +{ + char buffer[256]; + BOOL is_modified = FALSE; + int tmp = -1; + + if (ReadReg("3D Device ID", buffer, sizeof(buffer))) { + tmp = m_device_enumerator->ParseDeviceName(buffer); + if (tmp >= 0) { + tmp = m_device_enumerator->GetDevice(tmp, m_driver, m_device); + } + } + if (tmp != 0) { + is_modified = TRUE; + m_device_enumerator->FUN_1009d210(); + tmp = m_device_enumerator->FUN_1009d0d0(); + m_device_enumerator->GetDevice(tmp, m_driver, m_device); + } + if (!ReadRegInt("Display Bit Depth", &m_display_bit_depth)) { + is_modified = TRUE; + } + if (!ReadRegBool("Flip Surfaces", &m_flip_surfaces)) { + is_modified = TRUE; + } + if (!ReadRegBool("Full Screen", &m_full_screen)) { + is_modified = TRUE; + } + if (!ReadRegBool("Back Buffers in Video RAM", &m_3d_video_ram)) { + is_modified = TRUE; + } + if (!ReadRegBool("Wide View Angle", &m_wide_view_angle)) { + is_modified = TRUE; + } + if (!ReadRegBool("3DSound", &m_3d_sound)) { + is_modified = TRUE; + } + if (!ReadRegBool("Draw Cursor", &m_draw_cursor)) { + is_modified = TRUE; + } + if (!ReadRegInt("Island Quality", &m_model_quality)) { + is_modified = TRUE; + } + if (!ReadRegInt("Island Texture", &m_texture_quality)) { + is_modified = TRUE; + } + if (!ReadRegBool("UseJoystick", &m_use_joystick)) { + is_modified = TRUE; + } + if (!ReadRegBool("Music", &m_music)) { + is_modified = TRUE; + } + if (!ReadRegInt("JoystickIndex", &m_joystick_index)) { + is_modified = TRUE; + } + return is_modified; +} + +// FUNCTION: CONFIG 0x00403630 +BOOL CConfigApp::ValidateSettings() +{ + BOOL is_modified = FALSE; + + if (!IsPrimaryDriver() && !m_full_screen) { + m_full_screen = TRUE; + is_modified = TRUE; + } + if (IsDeviceInBasicRGBMode()) { + if (m_3d_video_ram) { + m_3d_video_ram = FALSE; + is_modified = TRUE; + } + if (m_flip_surfaces) { + m_flip_surfaces = FALSE; + is_modified = TRUE; + } + if (m_display_bit_depth != 16) { + m_display_bit_depth = 16; + is_modified = TRUE; + } + } + if (!GetHardwareDeviceColorModel()) { + m_draw_cursor = FALSE; + is_modified = TRUE; + } + else { + if (!m_3d_video_ram) { + m_3d_video_ram = TRUE; + is_modified = TRUE; + } + if (m_full_screen && !m_flip_surfaces) { + m_flip_surfaces = TRUE; + is_modified = TRUE; + } + } + if (m_flip_surfaces) { + if (!m_3d_video_ram) { + m_3d_video_ram = TRUE; + is_modified = TRUE; + } + if (!m_full_screen) { + m_full_screen = TRUE; + is_modified = TRUE; + } + } + if ((m_display_bit_depth != 8 && m_display_bit_depth != 16) && (m_display_bit_depth != 0 || m_full_screen)) { + m_display_bit_depth = 8; + is_modified = TRUE; + } + if (m_model_quality < 0 || m_model_quality > 2) { + m_model_quality = 1; + is_modified = TRUE; + } + if (m_texture_quality < 0 || m_texture_quality > 1) { + m_texture_quality = 0; + is_modified = TRUE; + } + return is_modified; +} + +// FUNCTION: CONFIG 0x004037a0 +DWORD CConfigApp::GetConditionalDeviceRenderBitDepth() const +{ + if (IsDeviceInBasicRGBMode()) { + return 0; + } + if (GetHardwareDeviceColorModel()) { + return 0; + } + return m_device->m_HELDesc.dwDeviceRenderBitDepth & 0x800; +} + +// FUNCTION: CONFIG 0x004037e0 +DWORD CConfigApp::GetDeviceRenderBitStatus() const +{ + if (GetHardwareDeviceColorModel()) { + return m_device->m_HWDesc.dwDeviceRenderBitDepth & 0x400; + } + else { + return m_device->m_HELDesc.dwDeviceRenderBitDepth & 0x400; + } +} + +// FUNCTION: CONFIG 0x00403810 +BOOL CConfigApp::AdjustDisplayBitDepthBasedOnRenderStatus() +{ + if (m_display_bit_depth == 8) { + if (GetConditionalDeviceRenderBitDepth()) { + return FALSE; + } + } + if (m_display_bit_depth == 16) { + if (GetDeviceRenderBitStatus()) { + return FALSE; + } + } + if (GetConditionalDeviceRenderBitDepth()) { + m_display_bit_depth = 8; + return TRUE; + } + if (GetDeviceRenderBitStatus()) { + m_display_bit_depth = 16; + return TRUE; + } + m_display_bit_depth = 8; + return TRUE; +} + +// FUNCTION: CONFIG 00403890 +void CConfigApp::WriteRegisterSettings() const + +{ + char buffer[128]; + +#define WriteRegBool(NAME, VALUE) WriteReg(NAME, VALUE ? "YES" : "NO") +#define WriteRegInt(NAME, VALUE) \ + do { \ + sprintf(buffer, "%d", VALUE); \ + WriteReg(NAME, buffer); \ + } while (0) + + m_device_enumerator->FormatDeviceName(buffer, m_driver, m_device); + WriteReg("3D Device ID", buffer); + WriteReg("3D Device Name", m_device->m_deviceName); + WriteRegInt("Display Bit Depth", m_display_bit_depth); + WriteRegBool("Flip Surfaces", m_flip_surfaces); + WriteRegBool("Full Screen", m_full_screen); + WriteRegBool("Back Buffers in Video RAM", m_3d_video_ram); + WriteRegBool("Wide View Angle", m_wide_view_angle); + WriteRegBool("3DSound", m_3d_sound); + WriteRegBool("Draw Cursor", m_draw_cursor); + WriteRegInt("Island Quality", m_model_quality); + WriteRegInt("Island Texture", m_texture_quality); + WriteRegBool("UseJoystick", m_use_joystick); + WriteRegBool("Music", m_music); + WriteRegInt("JoystickIndex", m_joystick_index); + +#undef WriteRegBool +#undef WriteRegInt +} + +// FUNCTION: CONFIG 0x00403a90 +int CConfigApp::ExitInstance() +{ + if (m_device_enumerator) { + delete m_device_enumerator; + m_device_enumerator = NULL; + } + return CWinApp::ExitInstance(); +} + +// GLOBAL: CONFIG 0x00408e50 +CConfigApp g_theApp; diff --git a/CONFIG_orig/config.h b/CONFIG_orig/config.h new file mode 100644 index 00000000..9172e2d5 --- /dev/null +++ b/CONFIG_orig/config.h @@ -0,0 +1,91 @@ +#if !defined(AFX_CONFIG_H) +#define AFX_CONFIG_H + +#include "StdAfx.h" +#include "compat.h" +#include "decomp.h" + +#include + +class LegoDeviceEnumerate; +struct Direct3DDeviceInfo; +struct MxDriver; + +#define currentConfigApp ((CConfigApp*) afxCurrentWinApp) + +// VTABLE: CONFIG 0x00406040 +// SIZE 0x108 +class CConfigApp : public CWinApp { +public: + CConfigApp(); + + // Overrides + // ClassWizard generated virtual function overrides + //{{AFX_VIRTUAL(CConfigApp) + +public: + BOOL InitInstance() override; + int ExitInstance() override; + //}}AFX_VIRTUAL + + // Implementation + + BOOL WriteReg(const char* p_key, const char* p_value) const; + BOOL ReadReg(LPCSTR p_key, LPCSTR p_value, DWORD p_size) const; + BOOL ReadRegBool(LPCSTR p_key, BOOL* p_bool) const; + BOOL ReadRegInt(LPCSTR p_key, int* p_value) const; + BOOL IsDeviceInBasicRGBMode() const; + D3DCOLORMODEL GetHardwareDeviceColorModel() const; + BOOL IsPrimaryDriver() const; + BOOL ReadRegisterSettings(); + BOOL ValidateSettings(); + DWORD GetConditionalDeviceRenderBitDepth() const; + DWORD GetDeviceRenderBitStatus() const; + BOOL AdjustDisplayBitDepthBasedOnRenderStatus(); + void CConfigApp::WriteRegisterSettings() const; + + //{{AFX_MSG(CConfigApp) + // NOTE - the ClassWizard will add and remove member functions here. + // DO NOT EDIT what you see in these blocks of generated code ! + //}}AFX_MSG + DECLARE_MESSAGE_MAP() + +private: + BOOL IsLegoNotRunning(); + +public: + LegoDeviceEnumerate* m_device_enumerator; // 0x0c4 + MxDriver* m_driver; // 0x0c8 + Direct3DDeviceInfo* m_device; // 0x0cc + int m_display_bit_depth; // 0x0d0 + BOOL m_flip_surfaces; // 0x0d4 + BOOL m_full_screen; // 0x0d8 + BOOL m_3d_video_ram; // 0x0dc + BOOL m_wide_view_angle; // 0x0e0 + BOOL m_3d_sound; // 0x0e4 + BOOL m_draw_cursor; // 0x0e8 + BOOL m_use_joystick; // 0x0ec + int m_joystick_index; // 0x0f0 + BOOL m_run_config_dialog; // 0x0f4 + int m_model_quality; // 0x0f8 + int m_texture_quality; // 0x0fc + undefined m_unk0x100[4]; // 0x100 + BOOL m_music; // 0x104 +}; + +// SYNTHETIC: CONFIG 0x00402cd0 +// CConfigApp::`scalar deleting destructor' + +// FUNCTION: CONFIG 0x402c20 +// CConfigApp::_GetBaseMessageMap + +// FUNCTION: CONFIG 0x402c30 +// CConfigApp::GetMessageMap + +// GLOBAL: CONFIG 0x406008 +// CConfigApp::messageMap + +// GLOBAL: CONFIG 0x406010 +// CConfigApp::_messageEntries + +#endif // !defined(AFX_CONFIG_H) diff --git a/CONFIG_orig/detectdx5.cpp b/CONFIG_orig/detectdx5.cpp new file mode 100644 index 00000000..546f0dbd --- /dev/null +++ b/CONFIG_orig/detectdx5.cpp @@ -0,0 +1,142 @@ +#include "detectdx5.h" + +#include +#include + +typedef HRESULT WINAPI DirectDrawCreate_fn(GUID FAR* lpGUID, LPDIRECTDRAW FAR* lplpDD, IUnknown FAR* pUnkOuter); +typedef HRESULT WINAPI +DirectInputCreateA_fn(HINSTANCE hinst, DWORD dwVersion, LPDIRECTINPUTA* ppDI, LPUNKNOWN punkOuter); + +// FUNCTION: CONFIG 0x004048f0 +BOOL DetectDirectX5() +{ + unsigned int version; + BOOL found; + DetectDirectX(&version, &found); + return version >= 0x500; +} + +// FUNCTION: CONFIG 0x00404920 +void DetectDirectX(unsigned int* p_version, BOOL* p_found) +{ + OSVERSIONINFOA os_version; + + os_version.dwOSVersionInfoSize = sizeof(os_version); + if (!GetVersionExA(&os_version)) { + *p_version = 0; + *p_found = 0; + return; + } + if (os_version.dwPlatformId == 2) { + *p_found = 2; + if (os_version.dwMajorVersion < 4) { + *p_found = 0; + return; + } + if (os_version.dwMajorVersion != 4) { + *p_version = 0x501; + return; + } + *p_version = 0x200; + HMODULE dinput_module = LoadLibraryA("DINPUT.DLL"); + if (!dinput_module) { + OutputDebugStringA("Couldn't LoadLibrary DInput\r\n"); + return; + } + DirectInputCreateA_fn* func_DirectInputCreateA = + (DirectInputCreateA_fn*) GetProcAddress(dinput_module, "DirectInputCreateA"); + FreeLibrary(dinput_module); + if (!func_DirectInputCreateA) { + OutputDebugStringA("Couldn't GetProcAddress DInputCreate\r\n"); + return; + } + *p_version = 0x300; + return; + } + *p_found = 1; + if (LOWORD(os_version.dwBuildNumber) >= 0x550) { + *p_version = 0x501; + return; + } + HMODULE ddraw_module = LoadLibraryA("DDRAW.DLL"); + if (!ddraw_module) { + *p_version = 0; + *p_found = 0; + FreeLibrary(ddraw_module); + return; + } + DirectDrawCreate_fn* func_DirectDrawCreate = + (DirectDrawCreate_fn*) GetProcAddress(ddraw_module, "DirectDrawCreate"); + if (!func_DirectDrawCreate) { + *p_version = 0; + *p_found = 0; + FreeLibrary(ddraw_module); + OutputDebugStringA("Couldn't LoadLibrary DDraw\r\n"); + return; + } + LPDIRECTDRAW ddraw; + if (FAILED(func_DirectDrawCreate(NULL, &ddraw, NULL))) { + *p_version = 0; + *p_found = 0; + FreeLibrary(ddraw_module); + OutputDebugStringA("Couldn't create DDraw\r\n"); + return; + } + *p_version = 0x100; + LPDIRECTDRAW2 ddraw2; + if (FAILED(ddraw->QueryInterface(IID_IDirectDraw2, (LPVOID*) &ddraw2))) { + ddraw->Release(); + FreeLibrary(ddraw_module); + OutputDebugStringA("Couldn't QI DDraw2\r\n"); + return; + } + ddraw->Release(); + *p_version = 0x200; + HMODULE dinput_module = LoadLibraryA("DINPUT.DLL"); + if (!dinput_module) { + OutputDebugStringA("Couldn't LoadLibrary DInput\r\n"); + ddraw2->Release(); + FreeLibrary(ddraw_module); + return; + } + DirectInputCreateA_fn* func_DirectInputCreateA = + (DirectInputCreateA_fn*) GetProcAddress(dinput_module, "DirectInputCreateA"); + FreeLibrary(dinput_module); + if (!func_DirectInputCreateA) { + FreeLibrary(ddraw_module); + ddraw2->Release(); + OutputDebugStringA("Couldn't GetProcAddress DInputCreate\r\n"); + return; + } + *p_version = 0x300; + DDSURFACEDESC surface_desc; + memset(&surface_desc, 0, sizeof(surface_desc)); + surface_desc.dwSize = sizeof(surface_desc); + surface_desc.dwFlags = DDSD_CAPS; + surface_desc.ddsCaps.dwCaps = DDCAPS2_NONLOCALVIDMEM; + if (FAILED(ddraw2->SetCooperativeLevel(NULL, DISCL_BACKGROUND))) { + ddraw2->Release(); + FreeLibrary(ddraw_module); + *p_version = 0; + OutputDebugStringA("Couldn't Set coop level\r\n"); + return; + } + LPDIRECTDRAWSURFACE surface; + if (FAILED(ddraw2->CreateSurface(&surface_desc, &surface, NULL))) { + ddraw2->Release(); + FreeLibrary(ddraw_module); + *p_version = 0; + OutputDebugStringA("Couldn't CreateSurface\r\n"); + return; + } + LPDIRECTDRAWSURFACE3 surface3; + if (FAILED(surface->QueryInterface(IID_IDirectDrawSurface3, (LPVOID*) &surface3))) { + ddraw2->Release(); + FreeLibrary(ddraw_module); + return; + } + *p_version = 0x500; + surface3->Release(); + ddraw2->Release(); + FreeLibrary(ddraw_module); +} diff --git a/CONFIG_orig/detectdx5.h b/CONFIG_orig/detectdx5.h new file mode 100644 index 00000000..6f45837c --- /dev/null +++ b/CONFIG_orig/detectdx5.h @@ -0,0 +1,10 @@ +#if !defined(AFX_DETECTDX5_H) +#define AFX_DETECTDX5_H + +#include + +extern BOOL DetectDirectX5(); + +extern void DetectDirectX(unsigned int* p_version, BOOL* p_found); + +#endif // !defined(AFX_DETECTDX5_H) diff --git a/CONFIG_orig/res/CONFIG.ico b/CONFIG_orig/res/CONFIG.ico new file mode 100644 index 0000000000000000000000000000000000000000..1e67eec26e9136180306e9fcd88ff9eabb836a59 GIT binary patch literal 74814 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 literal 0 HcmV?d00001 diff --git a/CONFIG_orig/res/resource.h b/CONFIG_orig/res/resource.h new file mode 100644 index 00000000..4c72eaa1 --- /dev/null +++ b/CONFIG_orig/res/resource.h @@ -0,0 +1,25 @@ +#define IDI_CONFIG 128 + +#define IDD_ABOUT 100 +#define IDS_ABOUT 101 + +#define IDD_MAIN 102 + +#define IDC_LIST_3DDEVICES 1000 +#define IDC_CHK_FLIP_VIDEO_MEM_PAGES 1001 +#define IDC_CHK_3D_VIDEO_MEMORY 1003 +#define IDC_RAD_PALETTE_256 1004 +#define IDC_RAD_PALETTE_16BIT 1005 +#define IDC_CHK_3DSOUND 1006 +#define IDC_CHK_DRAW_CURSOR 1008 +#define IDC_RAD_MODEL_QUALITY_LOW 1010 +#define IDC_RAD_MODEL_QUALITY_HIGH 1011 +#define IDC_RAD_TEXTURE_QUALITY_LOW 1013 +#define IDC_RAD_TEXTURE_QUALITY_HIGH 1014 +#define IDC_CHK_JOYSTICK 1015 +#define IDC_GRP_ADVANCED 1017 +#define IDC_BTN_ADVANCED 1020 +#define IDC_BMP_SHARK 1023 +#define IDC_CHK_MUSIC 1024 + +#define IDB_SHARK 135 diff --git a/CONFIG_orig/res/resrc1.h b/CONFIG_orig/res/resrc1.h new file mode 100644 index 00000000..dcbbc622 --- /dev/null +++ b/CONFIG_orig/res/resrc1.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by config.rc +// +#define IDAPPLY 4 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/CONFIG_orig/res/shark.bmp b/CONFIG_orig/res/shark.bmp new file mode 100644 index 0000000000000000000000000000000000000000..0829a1d1da6bd18c3729c84bf0e16d16a7bb2c43 GIT binary patch literal 56230 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 literal 0 HcmV?d00001 diff --git a/ICON_RES_SOURCE/CONFIGraw.png b/ICON_RES_SOURCE/CONFIGraw.png new file mode 100644 index 0000000000000000000000000000000000000000..15e9e2b565e6730f93a701eb9f198ae7feaada3a GIT binary patch literal 7363 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 literal 0 HcmV?d00001 diff --git a/ISLE/isleapp.cpp b/ISLE/isleapp.cpp index a22f685b..62047412 100644 --- a/ISLE/isleapp.cpp +++ b/ISLE/isleapp.cpp @@ -1,3 +1,17 @@ +//------------------------------------------------------------------------------------------------------------------ +// +// BE WARNED!!! +// +// YOU ARE STEPPING INTO THE TERRITORY OF DECOMPILED CODE VERSES A DUMBASS +// +// THERE WILL BE A LOT OF SHIT THAT IS STUPID - AND A LOT OF SHIT THAT CAN BE FIXED BUT I DONT KNOW HOW +// +// YOU HAVE BEEN WARNED +// +//------------------------------------------------------------------------------------------------------------------ + +// ident - this file is post complete decomp, but has been modified to include the checks and updates from pre-complete decomp + #include "isleapp.h" #include "3dmanager/lego3dmanager.h" @@ -28,6 +42,9 @@ #include "roi/legoroi.h" #include "viewmanager/viewmanager.h" +// i shit you not, this was a thing that could've happened +//#include "discord-rpc/discord.h" + #include DECOMP_SIZE_ASSERT(IsleApp, 0x8c) @@ -66,10 +83,12 @@ int g_targetDepth = 16; BOOL g_reqEnableRMDevice = FALSE; // STRING: ISLE 0x4101c4 -#define WNDCLASS_NAME "Lego Island MainNoM App" +//#define WNDCLASS_NAME "Lego Island MainNoM App" +#define WNDCLASS_NAME "TMAOMNI PrimaryRuntimeWrapper" // STRING: ISLE 0x4101dc -#define WINDOW_TITLE "LEGO\xAE" +//#define WINDOW_TITLE "LEGO\xAE" +#define WINDOW_TITLE "LEGO Island: The Modder's Arrival" // Might be static functions of IsleApp BOOL FindExistingInstance(); @@ -172,14 +191,28 @@ void IsleApp::Close() TickleManager()->Tickle(); } } + //Discord_Shutdown(); } +/*BOOL IsleApp::GetWorkingDir() +{ + string s1 = GetCommandLine(); + s1 = s1.substr(0, s1.find_last_of("\\/")); + //p_assign = s1.c_str(); + const char* ret = s1.c_str(); + if (!WriteReg("temp", ret)) + return FALSE; + + return TRUE; + //return ret; +}*/ + // FUNCTION: ISLE 0x4013b0 BOOL IsleApp::SetupLegoOmni() { BOOL result = FALSE; char mediaPath[256]; - GetProfileStringA("LEGO Island", "MediaPath", "", mediaPath, sizeof(mediaPath)); + GetProfileStringA("LEGO Island TMA", "MediaPath", "", mediaPath, sizeof(mediaPath)); #ifdef COMPAT_MODE BOOL failure; @@ -231,6 +264,31 @@ void IsleApp::SetupVideoFlags( } } +//TODO: FIXME +/*void InitDiscord() +{ + DiscordEventHandlers handlers; + memset(&handlers, 0, sizeof(handlers)); + handlers.ready = handleDiscordReady; + handlers.errored = handleDiscordError; + + Discord_Initialize("1249977928561721357", &handlers, 1, NULL, NULL); +} + +void UpdatePresence() +{ + char buffer[256]; + DiscordRichPresence discordPresence; + memset(&discordPresence, 0, sizeof(discordPresence)); + discordPresence.state = "Lego Island:"; + //sprintf(buffer, "Ranked | Mode: %d", GameEngine.GetMode()); + discordPresence.details = "The Modder's Arrival"; + discordPresence.endTimestamp = time(0) + 5 * 60; + //discordPresence.largeImageKey = "img"; + discordPresence.instance = 1; + Discord_UpdatePresence(&discordPresence); +}*/ + // FUNCTION: ISLE 0x401610 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { @@ -253,9 +311,9 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine if (!soundReady) { MessageBoxA( NULL, - "\"LEGO\xAE Island\" is not detecting a DirectSound compatible sound card. Please quit all other " - "applications and try again.", - "Lego Island Error", + "\"LEGO Island: The Modder's Arrival\" failed to detect a DirectSound compatible sound card/driver. Please ensure any " + "possibly interfering applications have been terminated before re-launching \"LEGO Island: The Modder's Arrival\".", + "Sound Card Failure!", MB_OK ); return 0; @@ -264,12 +322,28 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine // Create global app instance g_isle = new IsleApp(); + // Crash if config open. You wana break the game? Too Bad!! + HWND hWnd = FindWindowA(NULL, "Configuration for LEGO Island: The Modder's Arrival"); + if (hWnd) { + MessageBoxA( + NULL, + "\"LEGO Island: The Modder's Arrival\" requests that you exit \"LEGO Island: The Modder's Arrival\" configuration dialogue " + "before continuing. This ensures that no unwanted behavior occurs by preventing you from changing configurations " + "while the game is running.", + "Please close Config!", + MB_OK + ); + return 0; + } + // Create window + // Flip Surfaces don't work in Windowed mode, crash. if (g_isle->SetupWindow(hInstance, lpCmdLine) != SUCCESS) { MessageBoxA( NULL, - "\"LEGO\xAE Island\" failed to start. Please quit all other applications and try again.", - "LEGO\xAE Island Error", + "\"LEGO Island: The Modder's Arrival\" encountered an error while attempting to create the application window. Please ensure any possibly " + "interfering applications have been terminated before re-launching \"LEGO Island: The Modder's Arrival\".", + "Failed to Create Window!", MB_OK ); return 0; @@ -570,6 +644,7 @@ MxResult IsleApp::SetupWindow(HINSTANCE hInstance, LPSTR lpCmdLine) wndclass.hIcon = LoadIconA(hInstance, MAKEINTRESOURCEA(APP_ICON)); wndclass.hCursor = m_cursorArrow = m_cursorCurrent = LoadCursorA(hInstance, MAKEINTRESOURCEA(ISLE_ARROW)); m_cursorBusy = LoadCursorA(hInstance, MAKEINTRESOURCEA(ISLE_BUSY)); + //m_cursorBusy = CreateAniCursor(ISLE_BUSY); m_cursorNo = LoadCursorA(hInstance, MAKEINTRESOURCEA(ISLE_NO)); wndclass.hInstance = hInstance; wndclass.hbrBackground = (HBRUSH) GetStockObject(BLACK_BRUSH); @@ -682,6 +757,34 @@ MxResult IsleApp::SetupWindow(HINSTANCE hInstance, LPSTR lpCmdLine) return SUCCESS; } +BOOL IsleApp::WriteReg(const char* p_key, const char* p_value) const +{ + HKEY hKey; + DWORD pos; + + if (RegCreateKeyExA( + HKEY_LOCAL_MACHINE, + "SOFTWARE\\ActionSoft\\LEGO Island TMA", + 0, + "string", + 0, + KEY_READ | KEY_WRITE, + NULL, + &hKey, + &pos + ) == ERROR_SUCCESS) { + if (RegSetValueExA(hKey, p_key, 0, REG_SZ, (LPBYTE) p_value, strlen(p_value)) == ERROR_SUCCESS) { + if (RegCloseKey(hKey) == ERROR_SUCCESS) { + return TRUE; + } + } + else { + RegCloseKey(hKey); + } + } + return FALSE; +} + // FUNCTION: ISLE 0x402740 BOOL IsleApp::ReadReg(LPCSTR name, LPSTR outValue, DWORD outSize) { @@ -690,7 +793,7 @@ BOOL IsleApp::ReadReg(LPCSTR name, LPSTR outValue, DWORD outSize) BOOL out = FALSE; DWORD size = outSize; - if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Mindscape\\LEGO Island", 0, KEY_READ, &hKey) == ERROR_SUCCESS) { + if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\ActionSoft\\LEGO Island TMA", 0, KEY_READ, &hKey) == ERROR_SUCCESS) { if (RegQueryValueExA(hKey, name, NULL, &valueType, (LPBYTE) outValue, &size) == ERROR_SUCCESS) { if (RegCloseKey(hKey) == ERROR_SUCCESS) { out = TRUE; @@ -741,21 +844,86 @@ void IsleApp::LoadConfig() { char buffer[1024]; + //big nasty fuckin' hack comin' up + //a hack which doesn't even work, FUCK + /*GetWorkingDir(); + + if (!ReadReg("temp", buffer, sizeof(buffer))) { + MessageBoxA( + NULL, + "\"LEGO Island: The Modder's Arrival\" encountered an error while attempting to aquire the current directory from temporary registry key. " + "Please restart the computer and/or contact support to resolve the issue.", + "Failed to Aquire Key: \"temp\"", + MB_OK + ); + } + + strcpy(m_curDirBase, buffer); + strcpy(m_curDir1, m_curDirBase); + strcat(m_curDir1, "\""); + + if (!WriteReg("diskpath", m_curDirBase)) + { + MessageBoxA( + NULL, + "\"LEGO Island: The Modder's Arrival\" encountered an error while attempting to assign the diskpath registry key. " + "Please restart the computer and/or contact support to resolve the issue.", + "Failed to Assign Key: \"diskpath\"", + MB_OK + ); + }*/ + + //We're not streaming off CD in this mod, return disk path for cd path + //if (!WriteReg("cdpath", GetWorkingDir())) + //{ + // MessageBoxA( + // NULL, + // "\"LEGO Island: The Modder's Arrival\" encountered an error while attempting to assign the cdpath registry key. " + // "Please restart the computer and/or contact support to resolve the issue.", + // "Failed to Assign Key: \"cdpath\"", + // MB_OK + // ); + //} + if (!ReadReg("diskpath", buffer, sizeof(buffer))) { - strcpy(buffer, MxOmni::GetHD()); + //strcpy(buffer, MxOmni::GetHD()); + MessageBoxA( + NULL, + "\"LEGO Island: The Modder's Arrival\" encountered an error while attempting to aquire the \"diskpath\" registry key. " + "Please ensure you followed the instructions in the README text document properly and relaunch the game.", + "Failed to Aquire Key: \"diskpath\"", + MB_OK + ); + Close(); + MxOmni::DestroyInstance(); } m_hdPath = new char[strlen(buffer) + 1]; strcpy(m_hdPath, buffer); MxOmni::SetHD(m_hdPath); + MxOmni::SetCD(m_hdPath); - if (!ReadReg("cdpath", buffer, sizeof(buffer))) { - strcpy(buffer, MxOmni::GetCD()); - } + //if (!ReadReg("cdpath", buffer, sizeof(buffer))) { + // strcpy(buffer, GetWorkingDir()); + //} + + //if (!ReadReg("savepath", buffer, sizeof(buffer))) { + // if (!WriteReg("savepath", MxOmni::GetHD() + "\\SAV")) + // { + // MessageBoxA( + // NULL, + // "\"LEGO Island: The Modder's Arrival\" encountered an error while attempting to assign the savepath registry key. " + // "Please restart the computer and/or contact support to resolve the issue.", + // "Failed to Assign Key: \"savepath\"", + // MB_OK + // ); + // return 0; + // } + //} - m_cdPath = new char[strlen(buffer) + 1]; - strcpy(m_cdPath, buffer); - MxOmni::SetCD(m_cdPath); + //m_cdPath = new char[strlen(buffer) + 1]; + //strcpy(m_cdPath, buffer); + //MxOmni::SetCD(m_cdPath); ReadRegBool("Flip Surfaces", &m_flipSurfaces); ReadRegBool("Full Screen", &m_fullScreen); @@ -799,6 +967,23 @@ void IsleApp::LoadConfig() if (ReadReg("savepath", buffer, sizeof(buffer))) { m_savePath = new char[strlen(buffer) + 1]; strcpy(m_savePath, buffer); + } else { + m_savePath = new char[strlen(buffer) + 1]; + //strcpy(m_savePath, m_curDirBase); + strcpy(m_savePath, m_hdPath); + strcat(m_savePath, "\\SAV"); + if (!WriteReg("savepath", m_savePath)) + { + MessageBoxA( + NULL, + "\"LEGO Island: The Modder's Arrival\" encountered an error while attempting to assign the savepath registry key. " + "Please restart the computer and/or contact support to resolve the issue.", + "Failed to Assign Key: \"savepath\"", + MB_OK + ); + Close(); + MxOmni::DestroyInstance(); + } } } @@ -853,6 +1038,7 @@ inline void IsleApp::Tick(BOOL sleepIfNotNextFrame) MxDSAction ds; if (!stream) { + // since we have disabled cd drive functionality, this should only trigger if lego\scripts\isle\isle.si is missing stream = Streamer()->Open("\\lego\\scripts\\nocd", MxStreamer::e_diskStream); if (!stream) { return; diff --git a/ISLE/isleapp.h b/ISLE/isleapp.h index 6a8289ce..15fb7e78 100644 --- a/ISLE/isleapp.h +++ b/ISLE/isleapp.h @@ -28,6 +28,7 @@ class IsleApp { ); MxResult SetupWindow(HINSTANCE hInstance, LPSTR lpCmdLine); + BOOL WriteReg(const char* p_key, const char* p_value) const; BOOL ReadReg(LPCSTR name, LPSTR outValue, DWORD outSize); BOOL ReadRegBool(LPCSTR name, BOOL* out); BOOL ReadRegInt(LPCSTR name, int* out); diff --git a/ISLE/res/TMA.ico b/ISLE/res/TMA.ico new file mode 100644 index 0000000000000000000000000000000000000000..1783b45a5e333df0fb5494ae57bbbab219674c19 GIT binary patch literal 41086 zcmeI4K~ftr5Ji;~yKJCRl>>N{y|2I(xPmKJV#k4Ur^#rBMsoB2s0~su!xv@GsHN6- zzxf&)3P|bO{FTz}{Ct!CJf-w&?){!0OZa;}+~i(LPbvNUu|95>KuX8IQ%a}#ksj0O z@iZTfDSt)Vq$UC)AOa#F0wN#+A|L`H@TCdd4{A}UgXHg}A0r_CV+h3PPtzFnd-*?j z0mOd{fgpbQe++)@|DXW};TM1L4-t_6#t;a>pC^q`*XJ+sj}iE2{~bs>1sh2}#Hybr zmLHTqv3%*r2rz!)A0xo{#pqwR|BqEO8dd0+Vq>l;o@SkTb{_>yq1a{w{ z%lp6AlKUQ7Do z?>!;^VFJ0*oJGjbbc6rY`?8euy=SvHU&o z&-J$2$ogB_d0hIKKo9?kf13cN-{rR`j`OY)jN*W`R_eR zzb^sCKgatjy*Fa19Eftc&cEaPs+GSWUnK4@p1 z&oEs(o{w(#zM6hrZzfas?cB$=2~Jbyo?D)0N0wt6`IzU_eLMGYwwA>gap{ZyYzX=9 zeeVIbr=rJ8_8wc)_I*CGIV>*yl|bgx@;+lI{)GTz#NwaXe{8?8xMyH~s~Pw?TYaX( z;(jgZm(N_r!ZX_HGtMmT*D_6A|CNB})9N$MEbiBP4}Y)G>U(YL_qz7dKmY9Gc^Geh z6#qVZ&-3#?o#s1}-6uPc4=m;cH>toO#H=dHcw*R#Fn z<8SRt|NQ;G#Zmk(|2fwd)35HoEjAhxfn5>6f3R0d)Hos_K1Kl1ssG$lVs%0ocnp0bu3re}6*&rF;xvPvbLyT%5JmqY5wNkdh0B_1w@V0KocX{Zrep`0pOv;D%c=|{V?(N_oNalItUc%RHl(g< z$A&bGXEX2G$h0Ndt3;9ii0{>_PVLN->pQvbRnKHlvL-F*$-8!7{YXyaLT<$L0^^H- A^8f$< delta 107 zcmaFHd5lSbfq{vEkwHO$0Z1}37%)y05MgIz0D*>yh2qTr|Noy@Xk~K%$OmG^1_)*b ia+QJD42bQ3*!}Q=K6h+C7xw6d&wOKq$CAFy|#9E zS({@}s2O9dR(mg2s6pnu|(X6OX9(pxsxT?d=#NEWn@g%GiDUGp*fw?8h?%YuAh#-uo<$spQA2=Yv476J%_x@BJ*n^ zyCDA1d*W|^Ee7V5$O_4TKuivH@Yf|6;eV%qLir4|nQM$YVf6vO@csZ^fV%(^#vFbG zDo}y~C5{e2a${VD14A+}`^R~Tb^}f}6SJ$h#o;GT| z-KpwvsFXCwl^PEPbo^WQrhjsuN%i+U@%}>TG@J7~h!Q;()A%nukC7#)E4 W0D@*tU|?X|z`(#80a8D4=2`%FOAkK) delta 76 zcmX@cbc|_&7GuN2jiM7Bk9xfTG?$r087 diff --git a/ISLE/res/exclaim.cur b/ISLE/res/exclaim.cur new file mode 100644 index 0000000000000000000000000000000000000000..0db9ab834be5a13f7704f49a6dc6771c64b5e13d GIT binary patch literal 766 zcmb7CF%H5o47>soV>_|7Bfo&BWaOjp!7Nf}Po7y5V z?j_?n#?{yV<*i=p=e0`%l|7IvdyILl`W<7ec`c+l$E;nt%14sINxv~F0(4P-)9Y^9nYMkLmz+DHKoiNJiq!r z&f$0chkirf#UA=p4 m_unk0x1c; // 0x1c + undefined4 m_unk0x28; // 0x28 + undefined4 m_unk0x2c; // 0x2c + undefined m_unk0x30[0x0c]; // 0x30 + Mx3DPointFloat m_unk0x3c; // 0x3c +}; + +// STUB: LEGO1 0x10042c90 +// List::~List +// TODO: Update once type is known. +// STUB to resolve diff in scalar dtor and not create a new one. + +#endif // ACT3SHARK_H diff --git a/LEGO1/lego/legoomni/include/legocarbuild.h b/LEGO1/lego/legoomni/include/legocarbuild.h index 6add3be3..a11c3803 100644 --- a/LEGO1/lego/legoomni/include/legocarbuild.h +++ b/LEGO1/lego/legoomni/include/legocarbuild.h @@ -91,10 +91,13 @@ class LegoCarBuild : public LegoWorld { LegoCarBuild(); ~LegoCarBuild() override; +<<<<<<< Updated upstream +======= // FUNCTION: LEGO1 0x10022930 // FUNCTION: BETA10 0x10070070 MxBool VTable0x5c() override { return TRUE; } // vtable+0x5c +>>>>>>> Stashed changes // FUNCTION: LEGO1 0x10022940 // FUNCTION: BETA10 0x10070090 const char* ClassName() const override // vtable+0x0c @@ -114,6 +117,10 @@ class LegoCarBuild : public LegoWorld { MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 void ReadyWorld() override; // vtable+0x50 +<<<<<<< Updated upstream + MxBool VTable0x5c() override; // vtable+0x5c +======= +>>>>>>> Stashed changes MxBool Escape() override; // vtable+0x64 void Enable(MxBool p_enable) override; // vtable+0x68 virtual void VTable0x6c(); // vtable+0x6c diff --git a/LEGO1/lego/legoomni/include/legoextraactor.h b/LEGO1/lego/legoomni/include/legoextraactor.h index 5f930820..f3e1ab6e 100644 --- a/LEGO1/lego/legoomni/include/legoextraactor.h +++ b/LEGO1/lego/legoomni/include/legoextraactor.h @@ -2,7 +2,10 @@ #define LEGOEXTRAACTOR_H #include "legoanimactor.h" +<<<<<<< Updated upstream +======= #include "legopathboundary.h" +>>>>>>> Stashed changes // VTABLE: LEGO1 0x100d6c00 LegoAnimActor // VTABLE: LEGO1 0x100d6c10 LegoPathActor @@ -37,9 +40,15 @@ class LegoExtraActor : public virtual LegoAnimActor { return !strcmp(p_name, LegoExtraActor::ClassName()) || LegoAnimActor::IsA(p_name); } +<<<<<<< Updated upstream + void SetWorldSpeed(MxFloat p_worldSpeed) override; // vtable+0x30 + MxS32 VTable0x68(Vector3&, Vector3&, Vector3&) override; // vtable+0x68 + MxU32 VTable0x6c( +======= void SetWorldSpeed(MxFloat p_worldSpeed) override; // vtable+0x30 MxS32 VTable0x68(Vector3& p_point1, Vector3& p_point2, Vector3& p_point3) override; // vtable+0x68 inline MxU32 VTable0x6c( +>>>>>>> Stashed changes LegoPathBoundary* p_boundary, Vector3& p_v1, Vector3& p_v2, @@ -78,6 +87,8 @@ class LegoExtraActor : public virtual LegoAnimActor { LegoAnimActorStruct* m_disAnim; // 0x64 }; +<<<<<<< Updated upstream +======= // FUNCTION: LEGO1 0x1002b980 inline MxU32 LegoExtraActor::VTable0x6c( LegoPathBoundary* p_boundary, @@ -180,6 +191,7 @@ inline MxU32 LegoExtraActor::VTable0x6c( return 0; } +>>>>>>> Stashed changes // GLOBAL: LEGO1 0x100d6be8 // LegoExtraActor::`vbtable'{for `LegoAnimActor'} diff --git a/LEGO1/lego/legoomni/include/legojetski.h b/LEGO1/lego/legoomni/include/legojetski.h new file mode 100644 index 00000000..56057da2 --- /dev/null +++ b/LEGO1/lego/legoomni/include/legojetski.h @@ -0,0 +1,70 @@ +#ifndef LEGOJETSKI_H +#define LEGOJETSKI_H + +#include "legojetskiraceactor.h" +#include "legoracemap.h" + +// VTABLE: LEGO1 0x100d5a08 LegoCarRaceActor +// VTABLE: LEGO1 0x100d5a28 LegoRaceActor +// VTABLE: LEGO1 0x100d5a30 LegoAnimActor +// VTABLE: LEGO1 0x100d5a40 LegoPathActor +// VTABLE: LEGO1 0x100d5b10 LegoRaceMap +// SIZE 0x1dc +class LegoJetski : public LegoJetskiRaceActor, public LegoRaceMap { +public: + LegoJetski(); + ~LegoJetski() override; + + MxLong Notify(MxParam& p_param) override; // vtable+0x04 + + // FUNCTION: LEGO1 0x10013e90 + const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f053c + return "LegoJetski"; + } + + // FUNCTION: LEGO1 0x10013eb0 + MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, LegoJetski::ClassName()) || LegoJetskiRaceActor::IsA(p_name); + } + + void ParseAction(char*) override; // vtable+0x20 + void SetWorldSpeed(MxFloat p_worldSpeed) override; // vtable+0x30 + MxU32 VTable0x6c( + LegoPathBoundary* p_boundary, + Vector3& p_v1, + Vector3& p_v2, + float p_f1, + float p_f2, + Vector3& p_v3 + ) override; // vtable+0x6c + void VTable0x70(float p_float) override; // vtable+0x70 + MxResult VTable0x94(LegoPathActor* p_actor, MxBool p_bool) override; // vtable+0x94 + void SwitchBoundary(LegoPathBoundary*& p_boundary, LegoUnknown100db7f4*& p_edge, float& p_unk0xe4) + override; // vtable+0x98 + MxResult VTable0x9c() override; // vtable+0x9c + + virtual void FUN_100136f0(float p_worldSpeed); + + // SYNTHETIC: LEGO1 0x10013e30 + // LegoJetski::`scalar deleting destructor' +}; + +// GLOBAL: LEGO1 0x100d59b8 +// LegoJetski::`vbtable'{for `LegoCarRaceActor'} + +// GLOBAL: LEGO1 0x100d59c8 +// LegoJetski::`vbtable'{for `LegoRaceActor'} + +// GLOBAL: LEGO1 0x100d59d8 +// LegoJetski::`vbtable'{for `LegoAnimActor'} + +// GLOBAL: LEGO1 0x100d59e0 +// LegoJetski::`vbtable' + +// GLOBAL: LEGO1 0x100d59f0 +// LegoJetski::`vbtable'{for `LegoJetskiRaceActor'} + +#endif // LEGOJETSKI_H diff --git a/LEGO1/lego/legoomni/include/radio.h b/LEGO1/lego/legoomni/include/radio.h index 9ff8cb9c..05d51be4 100644 --- a/LEGO1/lego/legoomni/include/radio.h +++ b/LEGO1/lego/legoomni/include/radio.h @@ -15,9 +15,12 @@ class RadioState : public LegoState { public: RadioState(); +<<<<<<< Updated upstream +======= // FUNCTION: LEGO1 0x1002cf50 MxBool IsSerializable() override { return FALSE; } // vtable+0x14 +>>>>>>> Stashed changes // FUNCTION: LEGO1 0x1002cf60 // FUNCTION: BETA10 0x100f2850 const char* ClassName() const override // vtable+0x0c @@ -32,6 +35,11 @@ class RadioState : public LegoState { return !strcmp(p_name, RadioState::ClassName()) || LegoState::IsA(p_name); } +<<<<<<< Updated upstream + MxBool IsSerializable() override; // vtable+0x14 + +======= +>>>>>>> Stashed changes // SYNTHETIC: LEGO1 0x1002d020 // RadioState::`scalar deleting destructor' diff --git a/LEGO1/lego/legoomni/src/actors/act3brickster.cpp b/LEGO1/lego/legoomni/src/actors/act3brickster.cpp new file mode 100644 index 00000000..24340578 --- /dev/null +++ b/LEGO1/lego/legoomni/src/actors/act3brickster.cpp @@ -0,0 +1,47 @@ +#include "act3brickster.h" + +DECOMP_SIZE_ASSERT(Act3Brickster, 0x1b4) + +// STUB: LEGO1 0x10040e10 +Act3Brickster::Act3Brickster() +{ + // TODO +} + +// FUNCTION: LEGO1 0x10040f20 +Act3Brickster::~Act3Brickster() +{ + // TODO +} + +// STUB: LEGO1 0x10040ff0 +void Act3Brickster::ParseAction(char* p_extra) +{ + // TODO +} + +// STUB: LEGO1 0x10041050 +void Act3Brickster::VTable0x70(float p_und) +{ + // TODO +} + +// STUB: LEGO1 0x100416b0 +MxResult Act3Brickster::VTable0x94(LegoPathActor*, MxBool) +{ + // TODO + return SUCCESS; +} + +// STUB: LEGO1 0x10042990 +void Act3Brickster::SwitchBoundary(LegoPathBoundary*& p_boundary, LegoUnknown100db7f4*& p_edge, float& p_unk0xe4) +{ + // TODO +} + +// STUB: LEGO1 0x100429d0 +MxResult Act3Brickster::VTable0x9c() +{ + // TODO + return SUCCESS; +} diff --git a/LEGO1/lego/legoomni/src/actors/act3cop.cpp b/LEGO1/lego/legoomni/src/actors/act3cop.cpp new file mode 100644 index 00000000..557386ce --- /dev/null +++ b/LEGO1/lego/legoomni/src/actors/act3cop.cpp @@ -0,0 +1,35 @@ +#include "act3cop.h" + +DECOMP_SIZE_ASSERT(Act3Cop, 0x188) + +// STUB: LEGO1 0x1003fe30 +Act3Cop::Act3Cop() +{ + // TODO +} + +// STUB: LEGO1 0x1003ff70 +MxResult Act3Cop::VTable0x94(LegoPathActor*, MxBool) +{ + // TODO + return SUCCESS; +} + +// STUB: LEGO1 0x10040060 +void Act3Cop::ParseAction(char* p_extra) +{ + // TODO +} + +// STUB: LEGO1 0x100401f0 +void Act3Cop::VTable0x70(float p_und) +{ + // TODO +} + +// STUB: LEGO1 0x10040d20 +MxResult Act3Cop::VTable0x9c() +{ + // TODO + return SUCCESS; +} diff --git a/LEGO1/lego/legoomni/src/actors/act3shark.cpp b/LEGO1/lego/legoomni/src/actors/act3shark.cpp new file mode 100644 index 00000000..8cc9f698 --- /dev/null +++ b/LEGO1/lego/legoomni/src/actors/act3shark.cpp @@ -0,0 +1,28 @@ +#include "act3shark.h" + +DECOMP_SIZE_ASSERT(Act3Shark, 0x1a8) + +// STUB: LEGO1 0x10042ab0 +Act3Shark::Act3Shark() +{ + // TODO +} + +// STUB: LEGO1 0x10042ce0 +MxResult Act3Shark::FUN_10042ce0(void*) +{ + // TODO + return SUCCESS; +} + +// STUB: LEGO1 0x10042d40 +void Act3Shark::VTable0x70(float p_float) +{ + // TODO +} + +// STUB: LEGO1 0x10042f30 +void Act3Shark::ParseAction(char*) +{ + // TODO +} diff --git a/LEGO1/lego/legoomni/src/actors/radio.cpp b/LEGO1/lego/legoomni/src/actors/radio.cpp index 0291c18c..7666c7da 100644 --- a/LEGO1/lego/legoomni/src/actors/radio.cpp +++ b/LEGO1/lego/legoomni/src/actors/radio.cpp @@ -228,6 +228,15 @@ RadioState::RadioState() m_active = FALSE; } +<<<<<<< Updated upstream +// FUNCTION: LEGO1 0x1002cf50 +MxBool RadioState::IsSerializable() +{ + return FALSE; +} + +======= +>>>>>>> Stashed changes // FUNCTION: LEGO1 0x1002d090 MxU32 RadioState::FUN_1002d090() { diff --git a/LEGO1/lego/legoomni/src/build/legocarbuild.cpp b/LEGO1/lego/legoomni/src/build/legocarbuild.cpp index c65064c1..21e8b151 100644 --- a/LEGO1/lego/legoomni/src/build/legocarbuild.cpp +++ b/LEGO1/lego/legoomni/src/build/legocarbuild.cpp @@ -130,6 +130,16 @@ LegoCarBuild::LegoCarBuild() NotificationManager()->Register(this); } +<<<<<<< Updated upstream +// FUNCTION: LEGO1 0x10022930 +// FUNCTION: BETA10 0x10070070 +MxBool LegoCarBuild::VTable0x5c() +{ + return TRUE; +} + +======= +>>>>>>> Stashed changes // FUNCTION: LEGO1 0x10022a80 // FUNCTION: BETA10 0x1006aea3 LegoCarBuild::~LegoCarBuild() diff --git a/LEGO1/lego/legoomni/src/common/legobuildingmanager.cpp b/LEGO1/lego/legoomni/src/common/legobuildingmanager.cpp index 2d97b3ef..2dfed092 100644 --- a/LEGO1/lego/legoomni/src/common/legobuildingmanager.cpp +++ b/LEGO1/lego/legoomni/src/common/legobuildingmanager.cpp @@ -661,6 +661,10 @@ MxBool LegoBuildingManager::FUN_10030110(LegoBuildingInfo* p_data) } // FUNCTION: LEGO1 0x10030150 +<<<<<<< Updated upstream +// FUNCTION: BETA10 0x100644ff +======= +>>>>>>> Stashed changes void LegoBuildingManager::ScheduleAnimation(LegoEntity* p_entity, MxLong p_length, MxBool p_haveSound, MxBool p_unk0x28) { m_world = CurrentWorld(); diff --git a/LEGO1/lego/legoomni/src/common/legoplantmanager.cpp b/LEGO1/lego/legoomni/src/common/legoplantmanager.cpp index c7a821ae..b1a6e9e6 100644 --- a/LEGO1/lego/legoomni/src/common/legoplantmanager.cpp +++ b/LEGO1/lego/legoomni/src/common/legoplantmanager.cpp @@ -618,11 +618,15 @@ void LegoPlantManager::ScheduleAnimation(LegoEntity* p_entity, MxLong p_length) entry->m_entity = p_entity; entry->m_roi = p_entity->GetROI(); +<<<<<<< Updated upstream + entry->m_time = Timer()->GetTime() + p_length + 1000; +======= MxLong time = Timer()->GetTime(); time += p_length; entry->m_time = time + 1000; +>>>>>>> Stashed changes FUN_100271b0(p_entity, -1); } diff --git a/LEGO1/lego/legoomni/src/entity/legojetski.cpp b/LEGO1/lego/legoomni/src/entity/legojetski.cpp new file mode 100644 index 00000000..5ad8524d --- /dev/null +++ b/LEGO1/lego/legoomni/src/entity/legojetski.cpp @@ -0,0 +1,90 @@ +#include "legojetski.h" + +#include "mxmisc.h" +#include "mxnotificationmanager.h" + +DECOMP_SIZE_ASSERT(LegoJetski, 0x1dc) + +// STUB: LEGO1 0x100136a0 +void LegoJetski::SetWorldSpeed(MxFloat p_worldSpeed) +{ + // TODO +} + +// FUNCTION: LEGO1 0x100136f0 +void LegoJetski::FUN_100136f0(float p_worldSpeed) +{ + if (p_worldSpeed < 0) { + LegoCarRaceActor::m_unk0x0c = 2; + m_maxLinearVel = 0; + SetWorldSpeed(0); + } + else { + m_maxLinearVel = p_worldSpeed; + } +} + +// STUB: LEGO1 0x10013740 +void LegoJetski::VTable0x70(float p_float) +{ + // TODO +} + +// FUNCTION: LEGO1 0x10013820 +LegoJetski::LegoJetski() +{ + NotificationManager()->Register(this); +} + +// FUNCTION: LEGO1 0x10013aa0 +LegoJetski::~LegoJetski() +{ + NotificationManager()->Unregister(this); +} + +// STUB: LEGO1 0x10013bb0 +void LegoJetski::ParseAction(char*) +{ + // TODO +} + +// STUB: LEGO1 0x10013c30 +MxLong LegoJetski::Notify(MxParam& p_param) +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x10013c40 +MxResult LegoJetski::VTable0x94(LegoPathActor* p_actor, MxBool p_bool) +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x10014150 +MxU32 LegoJetski::VTable0x6c( + LegoPathBoundary* p_boundary, + Vector3& p_v1, + Vector3& p_v2, + float p_f1, + float p_f2, + Vector3& p_v3 +) +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x100141d0 +void LegoJetski::SwitchBoundary(LegoPathBoundary*& p_boundary, LegoUnknown100db7f4*& p_edge, float& p_unk0xe4) +{ + // TODO +} + +// STUB: LEGO1 0x10014210 +MxResult LegoJetski::VTable0x9c() +{ + // TODO + return SUCCESS; +} diff --git a/LEGO1/lego/legoomni/src/entity/legonavcontroller.cpp b/LEGO1/lego/legoomni/src/entity/legonavcontroller.cpp index 58b27935..1a908bd9 100644 --- a/LEGO1/lego/legoomni/src/entity/legonavcontroller.cpp +++ b/LEGO1/lego/legoomni/src/entity/legonavcontroller.cpp @@ -343,7 +343,7 @@ MxBool LegoNavController::CalculateNewPosDir( m_rotationalVel = CalculateNewVel(m_targetRotationalVel, m_rotationalVel, m_rotationalAccel * 40.0f, deltaTime); } else { - m_rotationalVel = m_targetRotationalVel; + m_rotationalVel = ((m_targetRotationalVel * 25.0f) * deltaTime); } m_linearVel = CalculateNewVel(m_targetLinearVel, m_linearVel, m_linearAccel, deltaTime); @@ -1041,4 +1041,4 @@ MxLong LegoNavController::Notify(MxParam& p_param) } return 0; -} +} \ No newline at end of file diff --git a/LEGO1/lego/legoomni/src/paths/legoextraactor.cpp b/LEGO1/lego/legoomni/src/paths/legoextraactor.cpp index 2c2bd166..d763b6e8 100644 --- a/LEGO1/lego/legoomni/src/paths/legoextraactor.cpp +++ b/LEGO1/lego/legoomni/src/paths/legoextraactor.cpp @@ -3,6 +3,10 @@ #include "anim/legoanim.h" #include "legocachesoundmanager.h" #include "legolocomotionanimpresenter.h" +<<<<<<< Updated upstream +#include "legopathboundary.h" +======= +>>>>>>> Stashed changes #include "legosoundmanager.h" #include "legoworld.h" #include "misc.h" @@ -420,3 +424,108 @@ MxS32 LegoExtraActor::VTable0x68(Vector3& p_point1, Vector3& p_point2, Vector3& { return LegoPathActor::VTable0x68(p_point1, p_point2, p_point3); } +<<<<<<< Updated upstream + +// FUNCTION: LEGO1 0x1002b980 +MxU32 LegoExtraActor::VTable0x6c( + LegoPathBoundary* p_boundary, + Vector3& p_v1, + Vector3& p_v2, + float p_f1, + float p_f2, + Vector3& p_v3 +) +{ + LegoAnimPresenterSet& presenters = p_boundary->GetPresenters(); + + for (LegoAnimPresenterSet::iterator itap = presenters.begin(); itap != presenters.end(); itap++) { + if ((*itap)->VTable0x94(p_v1, p_v2, p_f1, p_f2, p_v3)) { + return 1; + } + } + + LegoPathActorSet& plpas = p_boundary->GetActors(); + LegoPathActorSet lpas(plpas); + + for (LegoPathActorSet::iterator itpa = lpas.begin(); itpa != lpas.end(); itpa++) { + if (plpas.find(*itpa) != plpas.end()) { + LegoPathActor* actor = *itpa; + + if (this != actor && !(actor->GetActorState() & LegoPathActor::c_noCollide)) { + LegoROI* roi = actor->GetROI(); + + if ((roi != NULL && roi->GetVisibility()) || actor->GetCameraFlag()) { + if (actor->GetUserNavFlag()) { + MxMatrix local2world = roi->GetLocal2World(); + Vector3 local60(local2world[3]); + Mx3DPointFloat local54(p_v1); + + local54 -= local60; + float local1c = p_v2.Dot(p_v2, p_v2); + float local24 = p_v2.Dot(p_v2, local54) * 2.0f; + float local20 = local54.Dot(local54, local54); + + if (m_unk0x15 != 0 && local20 < 10.0f) { + return 0; + } + + local20 -= 1.0f; + + if (local1c >= 0.001 || local1c <= -0.001) { + float local40 = (local24 * local24) + (local20 * local1c * -4.0f); + + if (local40 >= -0.001) { + local1c *= 2.0f; + local24 = -local24; + + if (local40 < 0.0f) { + local40 = 0.0f; + } + + local40 = sqrt(local40); + float local20X = (local24 + local40) / local1c; + float local1cX = (local24 - local40) / local1c; + + if (local1cX < local20X) { + local40 = local20X; + local20X = local1cX; + local1cX = local40; + } + + if ((local20X >= 0.0f && local20X <= p_f1) || (local1cX >= 0.0f && local1cX <= p_f1) || + (local20X <= -0.01 && p_f1 + 0.01 <= local1cX)) { + p_v3 = p_v1; + + if (HitActor(actor, TRUE) < 0) { + return 0; + } + + actor->HitActor(this, FALSE); + return 2; + } + } + } + } + else { + if (roi->FUN_100a9410(p_v1, p_v2, p_f1, p_f2, p_v3, m_collideBox && actor->GetCollideBox())) { + if (HitActor(actor, TRUE) < 0) { + return 0; + } + + actor->HitActor(this, FALSE); + return 2; + } + } + } + } + } + } + + if (m_unk0x15 != 0) { + m_unk0x15--; + } + + return 0; +} +======= +>>>>>>> Stashed changes diff --git a/LEGO1/lego/sources/geom/legobox.cpp b/LEGO1/lego/sources/geom/legobox.cpp new file mode 100644 index 00000000..0a5f2bdb --- /dev/null +++ b/LEGO1/lego/sources/geom/legobox.cpp @@ -0,0 +1,19 @@ +#include "legobox.h" + +#include "decomp.h" +#include "misc/legoutil.h" + +DECOMP_SIZE_ASSERT(LegoBox, 0x18) + +// FUNCTION: LEGO1 0x100d3740 +LegoResult LegoBox::Read(LegoStorage* p_storage) +{ + LegoResult result; + if ((result = m_min.Read(p_storage)) != SUCCESS) { + return result; + } + if ((result = m_max.Read(p_storage)) != SUCCESS) { + return result; + } + return SUCCESS; +} diff --git a/LEGO1/lego/sources/geom/legobox.h b/LEGO1/lego/sources/geom/legobox.h new file mode 100644 index 00000000..f0816c98 --- /dev/null +++ b/LEGO1/lego/sources/geom/legobox.h @@ -0,0 +1,32 @@ +#ifndef __LEGOBOX_H +#define __LEGOBOX_H + +#include "legovertex.h" + +// SIZE 0x18 +class LegoBox { +public: + LegoVertex& GetMin() { return m_min; } + void SetMin(LegoVertex& p_min) { m_min = p_min; } + LegoVertex& GetMax() { return m_max; } + void SetMax(LegoVertex& p_max) { m_max = p_max; } + // LegoVertex GetCenter() + // { + // return LegoVertex( + // (m_min.GetX() + m_max.GetX()) / 2, + // (m_min.GetY() + m_max.GetY()) / 2, + // (m_min.GetZ() + m_max.GetZ()) / 2 + // ); + // } + LegoFloat GetDX() { return m_max.GetX() - m_min.GetX(); } + LegoFloat GetDY() { return m_max.GetY() - m_min.GetY(); } + LegoFloat GetDZ() { return m_max.GetZ() - m_min.GetZ(); } + LegoBool IsEmpty() { return m_min.IsOrigin() && m_max.IsOrigin(); } + LegoResult Read(LegoStorage* p_storage); + +protected: + LegoVertex m_min; // 0x00 + LegoVertex m_max; // 0x0c +}; + +#endif // __LEGOBOX_H diff --git a/LEGO1/lego/sources/geom/legomesh.cpp b/LEGO1/lego/sources/geom/legomesh.cpp new file mode 100644 index 00000000..51b61fb0 --- /dev/null +++ b/LEGO1/lego/sources/geom/legomesh.cpp @@ -0,0 +1,91 @@ +#include "legomesh.h" + +#include "misc/legostorage.h" + +DECOMP_SIZE_ASSERT(LegoMeshUnkComponent, 0x1c) +DECOMP_SIZE_ASSERT(LegoMesh, 0x24) + +// FUNCTION: LEGO1 0x100d3810 +LegoMesh::LegoMesh() +{ + m_alpha = 0.0F; + m_shading = e_flat; + m_unk0x14 = 0; + m_textureName = NULL; + m_unk0x0d = 0; + m_unk0x10 = NULL; + m_unk0x20 = 0; + m_unk0x21 = FALSE; + m_materialName = NULL; +} + +// FUNCTION: LEGO1 0x100d3860 +LegoMesh::~LegoMesh() +{ + if (m_textureName != NULL) { + delete[] m_textureName; + } + + if (m_materialName != NULL) { + delete[] m_materialName; + } + + if (m_unk0x10 != NULL) { + delete m_unk0x10; + } +} + +// FUNCTION: LEGO1 0x100d38f0 +LegoResult LegoMesh::Read(LegoStorage* p_storage) +{ + LegoResult result; + LegoU32 textureLength, materialLength; + if ((result = m_color.Read(p_storage)) != SUCCESS) { + return result; + } + if ((result = p_storage->Read(&m_alpha, sizeof(m_alpha))) != SUCCESS) { + return result; + } + if ((result = p_storage->Read(&m_shading, sizeof(m_shading))) != SUCCESS) { + return result; + } + if ((result = p_storage->Read(&m_unk0x0d, sizeof(m_unk0x0d))) != SUCCESS) { + return result; + } + if ((result = p_storage->Read(&m_unk0x20, sizeof(m_unk0x20))) != SUCCESS) { + return result; + } + if ((result = p_storage->Read(&m_unk0x21, sizeof(m_unk0x21))) != SUCCESS) { + return result; + } + + if ((result = p_storage->Read(&textureLength, sizeof(textureLength))) != SUCCESS) { + return result; + } + if (textureLength) { + m_textureName = new LegoChar[textureLength + 1]; + + if ((result = p_storage->Read(m_textureName, textureLength)) != SUCCESS) { + return result; + } + + m_textureName[textureLength] = '\0'; + strlwr(m_textureName); + } + + if ((result = p_storage->Read(&materialLength, sizeof(materialLength))) != SUCCESS) { + return result; + } + if (materialLength) { + m_materialName = new LegoChar[materialLength + 1]; + + if ((result = p_storage->Read(m_materialName, materialLength)) != SUCCESS) { + return result; + } + + m_materialName[materialLength] = '\0'; + strlwr(m_materialName); + } + + return SUCCESS; +} diff --git a/LEGO1/lego/sources/geom/legomesh.h b/LEGO1/lego/sources/geom/legomesh.h new file mode 100644 index 00000000..1832ae7b --- /dev/null +++ b/LEGO1/lego/sources/geom/legomesh.h @@ -0,0 +1,78 @@ +#ifndef __LEGOMESH_H +#define __LEGOMESH_H + +#include "decomp.h" +#include "misc/legocolor.h" +#include "misc/legotypes.h" + +class LegoStorage; + +// SIZE 0x1c +struct LegoMeshUnkComponent { + ~LegoMeshUnkComponent() + { + if (m_unk0x08) { + delete m_unk0x08; + } + if (m_unk0x0c) { + delete m_unk0x0c; + } + if (m_unk0x10) { + delete m_unk0x10; + } + if (m_unk0x14) { + delete m_unk0x14; + } + if (m_unk0x18) { + delete m_unk0x18; + } + } + + undefined m_unk0x00[8]; // 0x00 + undefined* m_unk0x08; // 0x08 + undefined* m_unk0x0c; // 0x0c + undefined* m_unk0x10; // 0x10 + undefined* m_unk0x14; // 0x14 + undefined* m_unk0x18; // 0x18 +}; + +// VTABLE: LEGO1 0x100dd228 +// SIZE 0x24 +class LegoMesh { +public: + enum { + e_flat, + e_gouraud, + e_wireframe + }; + + LegoMesh(); + virtual ~LegoMesh(); + LegoColor GetColor() { return m_color; } + void SetColor(LegoColor p_color) { m_color = p_color; } + LegoFloat GetAlpha() { return m_alpha; } + LegoU8 GetShading() { return m_shading; } + void SetShading(LegoU8 p_shading) { m_shading = p_shading; } + LegoU8 GetUnknown0x0d() { return m_unk0x0d; } + const LegoChar* GetTextureName() { return m_textureName; } + const LegoChar* GetMaterialName() { return m_materialName; } + LegoBool GetUnknown0x21() { return m_unk0x21; } + LegoResult Read(LegoStorage* p_storage); + + // SYNTHETIC: LEGO1 0x100d3840 + // LegoMesh::`scalar deleting destructor' + +protected: + LegoColor m_color; // 0x04 + LegoFloat m_alpha; // 0x08 + LegoU8 m_shading; // 0x0c + LegoU8 m_unk0x0d; // 0x0d + LegoMeshUnkComponent* m_unk0x10; // 0x10 - unused, except in destructor + undefined4 m_unk0x14; // 0x14 - unused + LegoChar* m_textureName; // 0x18 + LegoChar* m_materialName; // 0x1c + undefined m_unk0x20; // 0x20 - unused + LegoBool m_unk0x21; // 0x21 +}; + +#endif // __LEGOMESH_H diff --git a/LEGO1/lego/sources/geom/legosphere.cpp b/LEGO1/lego/sources/geom/legosphere.cpp new file mode 100644 index 00000000..7b916326 --- /dev/null +++ b/LEGO1/lego/sources/geom/legosphere.cpp @@ -0,0 +1,19 @@ +#include "legosphere.h" + +#include "decomp.h" +#include "misc/legostorage.h" + +DECOMP_SIZE_ASSERT(LegoSphere, 0x10) + +// FUNCTION: LEGO1 0x100d3770 +LegoResult LegoSphere::Read(LegoStorage* p_storage) +{ + LegoResult result; + if ((result = m_center.Read(p_storage)) != SUCCESS) { + return result; + } + if ((result = p_storage->Read(&m_radius, sizeof(m_radius))) != SUCCESS) { + return result; + } + return SUCCESS; +} diff --git a/LEGO1/lego/sources/geom/legosphere.h b/LEGO1/lego/sources/geom/legosphere.h new file mode 100644 index 00000000..566713a2 --- /dev/null +++ b/LEGO1/lego/sources/geom/legosphere.h @@ -0,0 +1,21 @@ +#ifndef __LEGOSPHERE_H +#define __LEGOSPHERE_H + +#include "legovertex.h" + +// SIZE 0x10 +class LegoSphere { +public: + LegoSphere() { m_radius = 0.0F; } + LegoVertex& GetCenter() { return m_center; } + void SetCenter(LegoVertex& p_center) { m_center = p_center; } + LegoFloat GetRadius() { return m_radius; } + void SetRadius(LegoFloat p_radius) { m_radius = p_radius; } + LegoResult Read(LegoStorage* p_storage); + +protected: + LegoVertex m_center; // 0x00 + LegoFloat m_radius; // 0x0c +}; + +#endif // __LEGOSPHERE_H diff --git a/LEGO1/lego/sources/geom/legovertex.cpp b/LEGO1/lego/sources/geom/legovertex.cpp new file mode 100644 index 00000000..2977d60a --- /dev/null +++ b/LEGO1/lego/sources/geom/legovertex.cpp @@ -0,0 +1,30 @@ +#include "legovertex.h" + +#include "decomp.h" +#include "misc/legostorage.h" + +DECOMP_SIZE_ASSERT(LegoVertex, 0x0c) + +// FUNCTION: LEGO1 0x100d37b0 +LegoVertex::LegoVertex() +{ + m_coordinates[0] = 0.0F; + m_coordinates[1] = 0.0F; + m_coordinates[2] = 0.0F; +} + +// FUNCTION: LEGO1 0x100d37c0 +LegoResult LegoVertex::Read(LegoStorage* p_storage) +{ + LegoResult result; + if ((result = p_storage->Read(&m_coordinates[0], sizeof(m_coordinates[0]))) != SUCCESS) { + return result; + } + if ((result = p_storage->Read(&m_coordinates[1], sizeof(m_coordinates[1]))) != SUCCESS) { + return result; + } + if ((result = p_storage->Read(&m_coordinates[2], sizeof(m_coordinates[2]))) != SUCCESS) { + return result; + } + return SUCCESS; +} diff --git a/LEGO1/lego/sources/geom/legovertex.h b/LEGO1/lego/sources/geom/legovertex.h new file mode 100644 index 00000000..91aca80a --- /dev/null +++ b/LEGO1/lego/sources/geom/legovertex.h @@ -0,0 +1,30 @@ +#ifndef __LEGOVERTEX_H +#define __LEGOVERTEX_H + +#include "misc/legotypes.h" + +class LegoStorage; + +// SIZE 0x0c +class LegoVertex { +public: + LegoVertex(); + LegoFloat GetCoordinate(LegoU32 p_i) { return m_coordinates[p_i]; } + void SetCoordinate(LegoU32 p_i, LegoFloat p_coordinate) { m_coordinates[p_i] = p_coordinate; } + LegoFloat GetX() { return m_coordinates[0]; } + void SetX(LegoFloat p_x) { m_coordinates[0] = p_x; } + LegoFloat GetY() { return m_coordinates[1]; } + void SetY(LegoFloat p_y) { m_coordinates[1] = p_y; } + LegoFloat GetZ() { return m_coordinates[2]; } + void SetZ(LegoFloat p_z) { m_coordinates[2] = p_z; } + LegoBool IsOrigin() { return m_coordinates[0] == 0.0 && m_coordinates[1] == 0.0 && m_coordinates[2] == 0.0; } + LegoResult Read(LegoStorage* p_storage); + + LegoFloat& operator[](int i) { return m_coordinates[i]; } + LegoFloat operator[](int i) const { return m_coordinates[i]; } + +protected: + LegoFloat m_coordinates[3]; // 0x00 +}; + +#endif // __LEGOVERTEX_H diff --git a/LEGO1/lego/sources/misc/legocolor.cpp b/LEGO1/lego/sources/misc/legocolor.cpp new file mode 100644 index 00000000..1dc1dce4 --- /dev/null +++ b/LEGO1/lego/sources/misc/legocolor.cpp @@ -0,0 +1,22 @@ +#include "legocolor.h" + +#include "decomp.h" +#include "legostorage.h" + +DECOMP_SIZE_ASSERT(LegoColor, 0x03) + +// FUNCTION: LEGO1 0x100d3a20 +LegoResult LegoColor::Read(LegoStorage* p_storage) +{ + LegoResult result; + if ((result = p_storage->Read(&m_red, sizeof(m_red))) != SUCCESS) { + return result; + } + if ((result = p_storage->Read(&m_green, sizeof(m_green))) != SUCCESS) { + return result; + } + if ((result = p_storage->Read(&m_blue, sizeof(m_blue))) != SUCCESS) { + return result; + } + return SUCCESS; +} diff --git a/LEGO1/lego/sources/misc/legocolor.h b/LEGO1/lego/sources/misc/legocolor.h new file mode 100644 index 00000000..027362ce --- /dev/null +++ b/LEGO1/lego/sources/misc/legocolor.h @@ -0,0 +1,26 @@ +#ifndef __LEGOCOLOR_H +#define __LEGOCOLOR_H + +#include "legotypes.h" + +class LegoStorage; + +// SIZE 0x03 +class LegoColor { +public: + LegoColor() { m_red = m_green = m_blue = 0; } + LegoU8 GetRed() { return m_red; } + void SetRed(LegoU8 p_red) { m_red = p_red; } + LegoU8 GetGreen() { return m_green; } + void SetGreen(LegoU8 p_green) { m_green = p_green; } + LegoU8 GetBlue() { return m_blue; } + void SetBlue(LegoU8 p_blue) { m_blue = p_blue; } + LegoResult Read(LegoStorage* p_storage); + +protected: + LegoU8 m_red; // 0x00 + LegoU8 m_green; // 0x01 + LegoU8 m_blue; // 0x02 +}; + +#endif // __LEGOCOLOR_H diff --git a/LEGO1/omni/include/mxsmack.h b/LEGO1/omni/include/mxsmack.h new file mode 100644 index 00000000..e7fdf3ce --- /dev/null +++ b/LEGO1/omni/include/mxsmack.h @@ -0,0 +1,54 @@ +#ifndef MXSMACK_H +#define MXSMACK_H + +#include "decomp.h" +#include "mxrectlist.h" +#include "mxtypes.h" + +#include + +struct MxBITMAPINFO; + +// These functions are not part of the public interface, +// but present in SMACK.LIB and used directly by Mindscape. +extern "C" +{ + u32 SmackGetSizeTables(); + void SmackDoTables( + u8* p_huffmanTrees, + u8* p_huffmanTables, + u32 p_codeSize, + u32 p_abSize, + u32 p_detailSize, + u32 p_typeSize + ); + void SmackDoFrameToBuffer(u8* p_source, u8* p_huffmanTables, u8* p_unk0x6b4); + u32 SmackGetSizeDeltas(u32 p_width, u32 p_height); + u8 SmackGetRect(u8* p_unk0x6b4, u32* p_rect); +} + +// SIZE 0x6b8 +struct MxSmack { + SmackTag m_smackTag; // 0x00 + undefined m_unk0x390[784]; // 0x390 + MxU32* m_frameSizes; // 0x6a0 + MxU8* m_frameTypes; // 0x6a4 + MxU8* m_huffmanTrees; // 0x6a8 + MxU8* m_huffmanTables; // 0x6ac + MxU32 m_maxFrameSize; // 0x6b0 + MxU8* m_unk0x6b4; // 0x6b4 + + static MxResult LoadHeader(MxU8* p_data, MxSmack* p_mxSmack); + static void Destroy(MxSmack* p_mxSmack); + static MxResult LoadFrame( + MxBITMAPINFO* p_bitmapInfo, + MxU8* p_bitmapData, + MxSmack* p_mxSmack, + MxU8* p_chunkData, + MxBool p_paletteChanged, + MxRectList* p_list + ); + static MxBool GetRect(MxU8* p_unk0x6b4, MxU16* p_und, u32* p_smackRect, MxRect32* p_rect); +}; + +#endif // MXSMACK_H diff --git a/LEGO1/omni/include/mxstreamlist.h b/LEGO1/omni/include/mxstreamlist.h new file mode 100644 index 00000000..36a9350a --- /dev/null +++ b/LEGO1/omni/include/mxstreamlist.h @@ -0,0 +1,69 @@ +#ifndef MXSTREAMLIST_H +#define MXSTREAMLIST_H + +#include "mxdsstreamingaction.h" +#include "mxdssubscriber.h" +#include "mxnextactiondatastart.h" +#include "mxstl/stlcompat.h" + +template +class MxStreamList : public list { +public: + MxBool PopFront(T& p_obj) + { + if (this->empty()) { + return FALSE; + } + + p_obj = this->front(); + this->pop_front(); + return TRUE; + } +}; + +// SIZE 0x0c +class MxStreamListMxDSAction : public MxStreamList { +public: + // FUNCTION: BETA10 0x10150e30 + MxDSAction* FindAndErase(MxDSAction* p_action) { return FindInternal(p_action, TRUE); } + + // FUNCTION: BETA10 0x10150fc0 + MxDSAction* Find(MxDSAction* p_action) { return FindInternal(p_action, FALSE); } + + // There chance this list actually holds MxDSStreamingListAction + // instead of MxDSAction. Until then, we use this helper. + MxBool PopFrontStreamingAction(MxDSStreamingAction*& p_obj) + { + if (empty()) { + return FALSE; + } + + p_obj = (MxDSStreamingAction*) front(); + pop_front(); + return TRUE; + } + +private: + MxDSAction* FindInternal(MxDSAction* p_action, MxBool p_delete); +}; + +// SIZE 0x0c +class MxStreamListMxNextActionDataStart : public MxStreamList { +public: + MxNextActionDataStart* Find(MxU32 p_id, MxS16 p_value); + MxNextActionDataStart* FindAndErase(MxU32 p_id, MxS16 p_value); +}; + +// SIZE 0x0c +class MxStreamListMxDSSubscriber : public MxStreamList { +public: + MxDSSubscriber* Find(MxDSObject* p_object); +}; + +// TEMPLATE: BETA10 0x10150950 +// MxStreamList::PopFront + +// TEMPLATE: BETA10 0x10150a70 +// MxStreamList::PopFront + +#endif // MXSTREAMLIST_H diff --git a/LEGO1/omni/src/stream/mxdssource.cpp b/LEGO1/omni/src/stream/mxdssource.cpp new file mode 100644 index 00000000..c2d86abb --- /dev/null +++ b/LEGO1/omni/src/stream/mxdssource.cpp @@ -0,0 +1,23 @@ +#include "mxdssource.h" + +#include "mxdsbuffer.h" + +DECOMP_SIZE_ASSERT(MxDSSource, 0x14) + +// FUNCTION: LEGO1 0x100bffd0 +MxResult MxDSSource::ReadToBuffer(MxDSBuffer* p_buffer) +{ + return Read(p_buffer->GetBuffer(), p_buffer->GetWriteOffset()); +} + +// FUNCTION: LEGO1 0x100bfff0 +MxLong MxDSSource::GetLengthInDWords() +{ + return m_lengthInDWords; +} + +// FUNCTION: LEGO1 0x100c0000 +MxU32* MxDSSource::GetBuffer() +{ + return m_pBuffer; +} diff --git a/LEGO1/omni/src/stream/mxstreamlist.cpp b/LEGO1/omni/src/stream/mxstreamlist.cpp new file mode 100644 index 00000000..37e59463 --- /dev/null +++ b/LEGO1/omni/src/stream/mxstreamlist.cpp @@ -0,0 +1,83 @@ +#include "mxstreamlist.h" + +// Wrappers around STL list that are used by the MxStream* classes. +DECOMP_SIZE_ASSERT(MxStreamListMxDSAction, 0x0c); +DECOMP_SIZE_ASSERT(MxStreamListMxNextActionDataStart, 0x0c); +DECOMP_SIZE_ASSERT(MxStreamListMxDSSubscriber, 0x0c); + +// FUNCTION: LEGO1 0x100b8450 +// FUNCTION: BETA10 0x10134c1d +MxDSSubscriber* MxStreamListMxDSSubscriber::Find(MxDSObject* p_object) +{ + for (iterator it = begin(); it != end(); it++) { + if (p_object->GetObjectId() == -1 || p_object->GetObjectId() == (*it)->GetObjectId()) { + if (p_object->GetUnknown24() == -2 || p_object->GetUnknown24() == (*it)->GetUnknown48()) { + return *it; + } + } + } + + return NULL; +} + +// FUNCTION: LEGO1 0x100bfa80 +// FUNCTION: BETA10 0x10147e02 +MxDSAction* MxStreamListMxDSAction::FindInternal(MxDSAction* p_action, MxBool p_delete) +{ + // DECOMP ALPHA 0x1008b99d ? + + MxDSAction* found = NULL; + +#ifdef COMPAT_MODE + iterator it; + for (it = begin(); it != end(); it++) { +#else + for (iterator it = begin(); it != end(); it++) { +#endif + if (p_action->GetObjectId() == -1 || p_action->GetObjectId() == (*it)->GetObjectId()) { + if (p_action->GetUnknown24() == -2 || p_action->GetUnknown24() == -3 || + p_action->GetUnknown24() == (*it)->GetUnknown24()) { + found = *it; + if (p_action->GetUnknown24() != -3) { + break; + } + } + } + } + + if (p_delete && found != NULL) { + erase(it); + } + + return found; +} + +// FUNCTION: LEGO1 0x100c21e0 +// FUNCTION: BETA10 0x1014f4e6 +MxNextActionDataStart* MxStreamListMxNextActionDataStart::Find(MxU32 p_id, MxS16 p_value) +{ + for (iterator it = begin(); it != end(); it++) { + if (p_id == (*it)->GetObjectId() && p_value == (*it)->GetUnknown24()) { + return *it; + } + } + + return NULL; +} + +// FUNCTION: LEGO1 0x100c2240 +// FUNCTION: BETA10 0x1014f58c +MxNextActionDataStart* MxStreamListMxNextActionDataStart::FindAndErase(MxU32 p_id, MxS16 p_value) +{ + MxNextActionDataStart* match = NULL; + + for (iterator it = begin(); it != end(); it++) { + if (p_id == (*it)->GetObjectId() && (p_value == -2 || p_value == (*it)->GetUnknown24())) { + match = *it; + erase(it); + break; + } + } + + return match; +} diff --git a/LEGO1/omni/src/stream/mxstreamprovider.cpp b/LEGO1/omni/src/stream/mxstreamprovider.cpp new file mode 100644 index 00000000..740b2c65 --- /dev/null +++ b/LEGO1/omni/src/stream/mxstreamprovider.cpp @@ -0,0 +1,17 @@ +#include "mxstreamprovider.h" + +#include "decomp.h" + +DECOMP_SIZE_ASSERT(MxStreamProvider, 0x10); + +// FUNCTION: LEGO1 0x100d07c0 +MxResult MxStreamProvider::SetResourceToGet(MxStreamController* p_resource) +{ + m_pLookup = p_resource; + return SUCCESS; +} + +// FUNCTION: LEGO1 0x100d07d0 +void MxStreamProvider::VTable0x20(MxDSAction* p_action) +{ +} diff --git a/LEGO1/omni/src/video/mxsmack.cpp b/LEGO1/omni/src/video/mxsmack.cpp new file mode 100644 index 00000000..d0a9480c --- /dev/null +++ b/LEGO1/omni/src/video/mxsmack.cpp @@ -0,0 +1,270 @@ +#include "mxsmack.h" + +#include "mxbitmap.h" + +#include + +DECOMP_SIZE_ASSERT(SmackTag, 0x390); +DECOMP_SIZE_ASSERT(MxSmack, 0x6b8); + +// FUNCTION: LEGO1 0x100c5a90 +// FUNCTION: BETA10 0x10151e70 +MxResult MxSmack::LoadHeader(MxU8* p_data, MxSmack* p_mxSmack) +{ +// Macros for readability +// If bit0 of SmackerType is set, there is an extra frame ("ring frame") +// at the end. It is a duplicate of the first frame to simplify looping. +#define FRAME_COUNT(_tag) (_tag->Frames + (_tag->SmackerType & 1)) + + MxResult result = SUCCESS; + MxU32* frameSizes = NULL; + MxU8* frameTypes = NULL; + MxU8* huffmanTrees = NULL; + MxU32 sizetables = 0; + + // Forced to declare here because of the gotos. + MxU32 i; + MxU32 treeSize; + MxU32* data; + MxU32 size; + MxS32 width; + + if (!p_data || !p_mxSmack) { + return FAILURE; + } + + SmackTag* smackTag = &p_mxSmack->m_smackTag; + p_mxSmack->m_frameTypes = NULL; + p_mxSmack->m_frameSizes = NULL; + p_mxSmack->m_huffmanTrees = NULL; + p_mxSmack->m_huffmanTables = NULL; + + memcpy(smackTag, p_data, SmackHeaderSize(smackTag)); + p_data += SmackHeaderSize(smackTag); + + frameSizes = new MxU32[FRAME_COUNT(smackTag)]; + + if (!frameSizes) { + result = FAILURE; + goto done; + } + + memcpy(frameSizes, p_data, FRAME_COUNT(smackTag) * sizeof(MxU32)); + + p_data += FRAME_COUNT(smackTag) * sizeof(MxU32); + p_mxSmack->m_maxFrameSize = 0; + + for (i = 0; i < FRAME_COUNT(smackTag); i++) { + if (p_mxSmack->m_maxFrameSize < frameSizes[i]) { + p_mxSmack->m_maxFrameSize = frameSizes[i]; + } + } + + frameTypes = new MxU8[FRAME_COUNT(smackTag)]; + + if (!frameTypes) { + result = FAILURE; + goto done; + } + + memcpy(frameTypes, p_data, FRAME_COUNT(smackTag)); + p_data += FRAME_COUNT(smackTag); + + treeSize = smackTag->tablesize + 0x1000; + huffmanTrees = new MxU8[treeSize <= 0x2000 ? 0x2000 : treeSize]; + + if (!huffmanTrees) { + result = FAILURE; + goto done; + } + + memcpy(huffmanTrees + 0x1000, p_data, smackTag->tablesize); + p_data += smackTag->tablesize; + + sizetables = SmackGetSizeTables(); + p_mxSmack->m_huffmanTables = + new MxU8[smackTag->codesize + smackTag->detailsize + smackTag->typesize + smackTag->absize + sizetables]; + + if (!p_mxSmack->m_huffmanTables) { + result = FAILURE; + goto done; + } + + SmackDoTables( + huffmanTrees, + p_mxSmack->m_huffmanTables, + smackTag->codesize, + smackTag->absize, + smackTag->detailsize, + smackTag->typesize + ); + + size = SmackGetSizeDeltas(smackTag->Width, smackTag->Height) + 32; + p_mxSmack->m_unk0x6b4 = new MxU8[size]; + memset(p_mxSmack->m_unk0x6b4, 0, size); + + width = p_mxSmack->m_smackTag.Width; + data = (MxU32*) p_mxSmack->m_unk0x6b4; + + *data = 1; + data++; + *data = NULL; // MxU8* bitmapData + data++; + *data = smackTag->Width / 4; + data++; + *data = smackTag->Height / 4; + data++; + *data = width - 4; + data++; + *data = width * 3; + data++; + *data = width; + data++; + *data = width * 3 + (width - smackTag->Width); + data++; + data++; + *data = smackTag->Width; + data++; + *data = smackTag->Height; + +done: + p_mxSmack->m_frameTypes = frameTypes; + p_mxSmack->m_frameSizes = frameSizes; + p_mxSmack->m_huffmanTrees = huffmanTrees; + return result; + +#undef FRAME_COUNT +} + +// FUNCTION: LEGO1 0x100c5d40 +// FUNCTION: BETA10 0x10152298 +void MxSmack::Destroy(MxSmack* p_mxSmack) +{ + if (p_mxSmack->m_frameSizes) { + delete[] p_mxSmack->m_frameSizes; + } + if (p_mxSmack->m_frameTypes) { + delete[] p_mxSmack->m_frameTypes; + } + if (p_mxSmack->m_huffmanTrees) { + delete[] p_mxSmack->m_huffmanTrees; + } + if (p_mxSmack->m_huffmanTables) { + delete[] p_mxSmack->m_huffmanTables; + } + if (p_mxSmack->m_unk0x6b4) { + delete[] p_mxSmack->m_unk0x6b4; + } +} + +// FUNCTION: LEGO1 0x100c5db0 +// FUNCTION: BETA10 0x10152391 +MxResult MxSmack::LoadFrame( + MxBITMAPINFO* p_bitmapInfo, + MxU8* p_bitmapData, + MxSmack* p_mxSmack, + MxU8* p_chunkData, + MxBool p_paletteChanged, + MxRectList* p_list +) +{ + p_bitmapInfo->m_bmiHeader.biHeight = -MxBitmap::HeightAbs(p_bitmapInfo->m_bmiHeader.biHeight); + *(MxU8**) (p_mxSmack->m_unk0x6b4 + 4) = p_bitmapData; + + // Reference: https://wiki.multimedia.cx/index.php/Smacker#Palette_Chunk + if (p_paletteChanged) { + MxU8 palette[772]; + + MxU8* intoChunk = p_chunkData + 1; + MxU8* intoPalette = palette; + MxU16 paletteIndex = 0; + // TODO: struct incorrect, Palette at wrong offset? + MxU8* currentPalette = &p_mxSmack->m_smackTag.Palette[4]; + + do { + if (*intoChunk & 0x80) { + MxU8 length = (*intoChunk & 0x7f) + 1; + memcpy(intoPalette, ¤tPalette[paletteIndex * 3], length * 3); + intoPalette += length * 3; + paletteIndex += length; + intoChunk++; + } + else { + if (*intoChunk & 0x40) { + MxU8 length = (*intoChunk & 0x3f) + 1; + memcpy(intoPalette, ¤tPalette[*(intoChunk + 1) * 3], length * 3); + intoPalette += length * 3; + paletteIndex += length; + intoChunk += 2; + } + else { + *(MxU32*) intoPalette = *(MxU32*) intoChunk; + intoPalette += 3; + paletteIndex++; + intoChunk += 3; + } + } + } while (paletteIndex < 256); + + for (MxU32 i = 0; i < 256; i++) { + memcpy(currentPalette, &palette[i * 3], 3); + currentPalette += 3; + p_bitmapInfo->m_bmiColors[i].rgbBlue = palette[i * 3 + 2] * 4; + p_bitmapInfo->m_bmiColors[i].rgbGreen = palette[i * 3 + 1] * 4; + p_bitmapInfo->m_bmiColors[i].rgbRed = palette[i * 3] * 4; + } + + p_chunkData += *p_chunkData * 4; + } + + SmackDoFrameToBuffer(p_chunkData, p_mxSmack->m_huffmanTables, p_mxSmack->m_unk0x6b4); + + MxU16 und = 1; + u32 smackRect[4]; + MxRect32 rect; + + while (GetRect(p_mxSmack->m_unk0x6b4, &und, smackRect, &rect)) { + MxRect32* newRect = new MxRect32(rect); + p_list->Append(newRect); + } + + return SUCCESS; +} + +// FUNCTION: LEGO1 0x100c6050 +// FUNCTION: BETA10 0x10152739 +MxBool MxSmack::GetRect(MxU8* p_unk0x6b4, MxU16* p_und, u32* p_smackRect, MxRect32* p_rect) +{ + u32 left, bottom, top, right; + + if (!*p_und) { + return FALSE; + } + + if (*p_und == 1) { + if (!SmackGetRect(p_unk0x6b4, p_smackRect)) { + return FALSE; + } + *p_und = 2; + } + + left = p_smackRect[0]; + top = p_smackRect[1]; + right = p_smackRect[2] + p_smackRect[0]; + bottom = p_smackRect[3] + p_smackRect[1]; + + while (SmackGetRect(p_unk0x6b4, p_smackRect)) { + if (left > p_smackRect[0]) { + left = p_smackRect[0]; + } + if (right < p_smackRect[0] + p_smackRect[2]) { + right = p_smackRect[0] + p_smackRect[2]; + } + + bottom = p_smackRect[1] + p_smackRect[3]; + } + + *p_und = 0; + *p_rect = MxRect32(left, top, right, bottom); + return TRUE; +} diff --git a/LEGO1/realtime/matrix.cpp b/LEGO1/realtime/matrix.cpp new file mode 100644 index 00000000..c1de1535 --- /dev/null +++ b/LEGO1/realtime/matrix.cpp @@ -0,0 +1,5 @@ +#include "matrix.h" + +#include "decomp.h" + +DECOMP_SIZE_ASSERT(Matrix4, 0x08); diff --git a/LEGO1/realtime/vector.cpp b/LEGO1/realtime/vector.cpp new file mode 100644 index 00000000..ad09b0b0 --- /dev/null +++ b/LEGO1/realtime/vector.cpp @@ -0,0 +1,7 @@ +#include "vector.h" + +#include "decomp.h" + +DECOMP_SIZE_ASSERT(Vector2, 0x08); +DECOMP_SIZE_ASSERT(Vector3, 0x08); +DECOMP_SIZE_ASSERT(Vector4, 0x08); diff --git a/LEGO1/res/lego1.rc b/LEGO1/res/lego1.rc index 44e07d7c..50a707dc 100644 --- a/LEGO1/res/lego1.rc +++ b/LEGO1/res/lego1.rc @@ -12,8 +12,8 @@ LEGO1_ARROW CURSOR "arrow.cur" LEGO1_BUSY CURSOR "busy.cur" 1 VERSIONINFO -FILEVERSION 1,1,0,0 -PRODUCTVERSION 1,1,0,0 +FILEVERSION 0,0,0,1 +PRODUCTVERSION 0,0,0,1 FILEOS 0x40004 FILETYPE 0x2 { @@ -21,14 +21,14 @@ BLOCK "StringFileInfo" { BLOCK "040904b0" { - VALUE "CompanyName", "Mindscape, Inc." - VALUE "FileDescription", "LegoOmni Library" - VALUE "FileVersion", "1, 1, 0, 0" - VALUE "InternalName", "LegoOmni Library" - VALUE "LegalCopyright", "Copyright \xA9 1997" - VALUE "OriginalFilename", "LegoOmni Library" - VALUE "ProductName", "LegoOmni Library" - VALUE "ProductVersion", "1, 1, 0, 0" + VALUE "CompanyName", "FUNNIMAN.EXE" + VALUE "FileDescription", "b_TMAOmni Library" + VALUE "FileVersion", "0, 0, 0, 1" + VALUE "InternalName", "b_TMAOmni Library" + VALUE "LegalCopyright", "Copyright \xA9 2025" + VALUE "OriginalFilename", "B_TMA.DLL" + VALUE "ProductName", "LEGO Island: The Modder's Arrival" + VALUE "ProductVersion", "0, 0, 0, 1" } } diff --git a/LEGO1/res/lego1_beta.rc b/LEGO1/res/lego1_beta.rc new file mode 100644 index 00000000..9b69f61c --- /dev/null +++ b/LEGO1/res/lego1_beta.rc @@ -0,0 +1,39 @@ +#include "resource.h" + +LEGO1_LEAF4 CURSOR "leaf_4.cur" +LEGO1_LEAF7 CURSOR "leaf_7.cur" +LEGO1_LEAF1 CURSOR "leaf_1.cur" +LEGO1_LEAF2 CURSOR "leaf_2.cur" +LEGO1_LEAF6 CURSOR "leaf_6.cur" +LEGO1_LEAF0 CURSOR "leaf_0.cur" +LEGO1_LEAF5 CURSOR "leaf_5.cur" +LEGO1_LEAF3 CURSOR "leaf_3.cur" +LEGO1_ARROW CURSOR "arrow.cur" +LEGO1_BUSY CURSOR "busy.cur" + +1 VERSIONINFO +FILEVERSION 0,0,0,1 +PRODUCTVERSION 0,0,0,1 +FILEOS 0x40004 +FILETYPE 0x2 +{ +BLOCK "StringFileInfo" +{ + BLOCK "040904b0" + { + VALUE "CompanyName", "FUNNIMAN.EXE" + VALUE "FileDescription", "x10_TMAOmni Library" + VALUE "FileVersion", "0, 0, 0, 1" + VALUE "InternalName", "x10_TMAOmni Library" + VALUE "LegalCopyright", "Copyright \xA9 2025" + VALUE "OriginalFilename", "X10_TMA.DLL" + VALUE "ProductName", "LEGO Island: The Modder's Arrival" + VALUE "ProductVersion", "0, 0, 0, 1" + } +} + +BLOCK "VarFileInfo" +{ + VALUE "Translation", 0x0409, 0x04B0 +} +} diff --git a/README.md b/README.md index c24dc4ef..55914345 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,6 @@ -# LEGO Island Decompilation +# LEGO Island: The Modder's Arrival -[Development Vlog](https://www.youtube.com/playlist?list=PLbpl-gZkNl2COf_bB6cfgTapD5WduAfPz) | [Contributing](/CONTRIBUTING.md) | [Matrix](https://matrix.to/#/#isledecomp:matrix.org) | [Forums](https://forum.mattkc.com/viewforum.php?f=1) | [Patreon](https://www.patreon.com/mattkc) - -This is a functionally complete decompilation of LEGO Island (Version 1.1, English). It aims to be as accurate as possible, matching the recompiled instructions to the original machine code as much as possible. The goal is to provide a workable codebase that can be modified, improved, and ported to other platforms later on. - -## Status - - - -Both `ISLE.EXE` and `LEGO1.DLL` are completely decompiled and, to the best of our knowledge, are functionally identical to the originals. However, work is still ongoing to improve the accuracy, naming, documentation, and structure of the source code. While there may still be unresolved bugs that are not present in retail, the game should be fully playable with the binaries derived from this source code. - -Due to various complexities with regard to the compiler, these binaries are not a byte-for-byte match of the original executables. We remain hopeful that this can be resolved at some point. +## [Original LEGO Island decomp](https://github.com/isledecomp/isle) ## Building @@ -30,18 +20,14 @@ You will need the following software installed: 1. Open a Command Prompt (`cmd`). 1. From Visual C++ 4.2, run `BIN/VCVARS32.BAT x86` to populate the path and other environment variables for compiling with MSVC. -1. Make a folder for compiled objects to go, such as a `build` folder inside the source repository (the folder you cloned/downloaded to). -1. In your Command Prompt, `cd` to the build folder. -1. Configure the project with CMake by running: -``` -cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=RelWithDebInfo -``` +1. Run "reconfigureCMake.bat" to configure CMake for building + - **Visual C++ 4.2 has issues with paths containing spaces**. If you get configure or build errors, make sure neither CMake, the repository, nor Visual C++ 4.2 is in a path that contains spaces. - Replace `` with the source repository. This can be `..` if your build folder is inside the source repository. - `RelWithDebInfo` is recommended because it will produce debug symbols useful for further decompilation work. However, you can change this to `Release` if you don't need them. While `Debug` builds can be compiled and used, they are not recommended as the primary goal is to match the code to the original binary. This is because the retail binaries were compiled as `Release` builds. - `NMake Makefiles` is most recommended because it will be immediately compatible with Visual C++ 4.2. For faster builds, you can use `Ninja` (if you have it installed), however due to limitations in Visual C++ 4.2, you can only build `Release` builds this way (debug symbols cannot be generated with `Ninja`). -1. Build the project by running `nmake` or `cmake --build ` -1. When this is done, there should be a recompiled `ISLE.EXE` and `LEGO1.DLL` in the build folder. +1. Build the project by running `nmake` or `cmake --build ` or by running "compile.bat" +1. When this is done, there should be a compiled `TMA_LAUNCHER.EXE` and `B_TMA.DLL` in the build folder. 1. Note that `nmake` must be run twice under certain conditions, so it is advisable to always (re-)compile using `nmake && nmake`. If you have a CMake-compatible IDE, it should be pretty straightforward to use this repository, as long as you can use `VCVARS32.BAT` and set the generator to `NMake Makefiles`. @@ -67,24 +53,19 @@ You can pass as many CMake flags as you'd like in the `CMAKE_FLAGS` environment ## Usage -The simplest way to use the recompiled binaries is to swap the original executables (`ISLE.EXE`, `LEGO1.DLL`, and `CONFIG.EXE`) in LEGO Island's installation directory for the ones that you've built from this source code. By default, LEGO Island is installed to `C:\Program Files\LEGO Island` on 32-bit operating systems and `C:\Program Files (x86)\LEGO Island` on 64-bit operating systems. +In order to run TMA, you must first configure the `diskpath` environment variable (`usage of cdpath has been disabled entirely`). This is necessary since, currently, nothing creates this environment variable, or populates it. -For advanced users, you can get LEGO Island to run from anywhere as long as `ISLE.EXE` and `LEGO1.DLL` are in the same directory and the `cdpath` and `diskpath` registry keys (usually found in `HKEY_LOCAL_MACHINE\Software\Mindscape\LEGO Island` on 32-bit operating systems and `HKEY_LOCAL_MACHINE\Software\Wow6432Node\Mindscape\LEGO Island` on 64-bit operating systems) point to the correct location for the asset files (the directory that contains the `LEGO` folder). +The registry keys can be created in (usually found in `HKEY_LOCAL_MACHINE\Software\ActionSoft\LEGO Island TMA` on 32-bit operating systems and `HKEY_LOCAL_MACHINE\Software\Wow6432Node\ActionSoft\LEGO Island TMA` on 64-bit operating systems), and should point to the location where the `TMA_LAUNCHER.EXE`, `B_TMA.DLL`, and LEGO files/folders are stored (by default, this is the build folder). As long as you -If you see an error about `d3drm.dll`, you will need to acquire a copy and place it in the same directory as the game executables, as it has not shipped with Windows since Windows XP. We have published a [known good copy here](https://legoisland.org/download/d3drm.zip) that works with LEGO Island. +The build folder contains a copy of `d3drm.dll`, `D3D8.dll`, `D3DImm.dll`, `DDraw.dll`, and `dgVoodoo.conf` files, DO NOT REMOVE ANY OF THEM. -## Contributing +NOTE: Due to Github size limitations, and the fact this is a repo just for me to keep mirrored across devices, this repo does not include anything within the Lego folder. For the time being, access to the Lego folder cannot be requested, but may be able to in the future. -If you're interested in helping or contributing to this project, check out the [CONTRIBUTING](/CONTRIBUTING.md) page. +### What does what? -## Additional Information +`TMA_LAUNCHER.EXE` - The wrapper for `B_TMA.DLL`, launches the game - the equivalant to `ISLE.EXE` -### Which version of LEGO Island do I have? +`B_TMA.DLL` - The primary dll, containing all game logic - the equivalant to `LEGO1.DLL` -Right click on `LEGO1.DLL`, select `Properties`, and switch to the `Details` tab. Under `Version` you should either see `1.0.0.0` (1.0) or `1.1.0.0` (1.1). Additionally, you can look at the game disc files; 1.0's files will all say August 8, 1997, and 1.1's files will all say September 8, 1997. Version 1.1 is by far the most common, especially if you're not using the English or Japanese versions, so that's most likely the version you have. - -Please note that some localized versions of LEGO Island were recompiled with small changes despite maintaining a version number parallel with other versions; this decompilation specifically targets the English release of version 1.1 of LEGO Island. You can verify you have the correct version using the checksums below: - -* ISLE.EXE `md5: f6da12249e03eed1c74810cd23beb9f5` -* LEGO1.DLL `md5: 4e2f6d969ea2ef8655ba3fc221a0c8fe` -* CONFIG.EXE `md5: 92d958a64a273662c591c88b09100f4a` +`CONFIGURE.EXE` - Primary configuration application, contains some options - the equivalant to `CONFIG.EXE` + For more advanced configurations, you will need to acquire `dgVoodooSetup.exe`, and place it in the same folder as `dgVoodoo.conf` \ No newline at end of file diff --git a/build/D3D8.dll b/build/D3D8.dll new file mode 100644 index 0000000000000000000000000000000000000000..6036139cbd7ab295ba29063e5545a1206a29c6d6 GIT binary patch literal 141824 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

i@2zmCp+KNExyu{&6B*C`Z^3RyjaQ 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 tDOw1RI3uL@xWI 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

6~j#B-y%_8IiTej@^ni% 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 NUL \ No newline at end of file diff --git a/build/compile_commands.json b/build/compile_commands.json new file mode 100644 index 00000000..e14c57e9 --- /dev/null +++ b/build/compile_commands.json @@ -0,0 +1,1448 @@ +[ +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\tglrl.dir\\LEGO1\\tgl\\d3drm\\renderer.cpp.obj /FdCMakeFiles\\tglrl.dir\\tglrl.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\tgl\\d3drm\\renderer.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/tgl/d3drm/renderer.cpp", + "output": "CMakeFiles/tglrl.dir/LEGO1/tgl/d3drm/renderer.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\tglrl.dir\\LEGO1\\tgl\\d3drm\\texture.cpp.obj /FdCMakeFiles\\tglrl.dir\\tglrl.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\tgl\\d3drm\\texture.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/tgl/d3drm/texture.cpp", + "output": "CMakeFiles/tglrl.dir/LEGO1/tgl/d3drm/texture.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\tglrl.dir\\LEGO1\\tgl\\d3drm\\view.cpp.obj /FdCMakeFiles\\tglrl.dir\\tglrl.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\tgl\\d3drm\\view.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/tgl/d3drm/view.cpp", + "output": "CMakeFiles/tglrl.dir/LEGO1/tgl/d3drm/view.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\tglrl.dir\\LEGO1\\tgl\\d3drm\\device.cpp.obj /FdCMakeFiles\\tglrl.dir\\tglrl.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\tgl\\d3drm\\device.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/tgl/d3drm/device.cpp", + "output": "CMakeFiles/tglrl.dir/LEGO1/tgl/d3drm/device.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\tglrl.dir\\LEGO1\\tgl\\d3drm\\group.cpp.obj /FdCMakeFiles\\tglrl.dir\\tglrl.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\tgl\\d3drm\\group.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/tgl/d3drm/group.cpp", + "output": "CMakeFiles/tglrl.dir/LEGO1/tgl/d3drm/group.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\tglrl.dir\\LEGO1\\tgl\\d3drm\\camera.cpp.obj /FdCMakeFiles\\tglrl.dir\\tglrl.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\tgl\\d3drm\\camera.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/tgl/d3drm/camera.cpp", + "output": "CMakeFiles/tglrl.dir/LEGO1/tgl/d3drm/camera.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\tglrl.dir\\LEGO1\\tgl\\d3drm\\light.cpp.obj /FdCMakeFiles\\tglrl.dir\\tglrl.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\tgl\\d3drm\\light.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/tgl/d3drm/light.cpp", + "output": "CMakeFiles/tglrl.dir/LEGO1/tgl/d3drm/light.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\tglrl.dir\\LEGO1\\tgl\\d3drm\\meshbuilder.cpp.obj /FdCMakeFiles\\tglrl.dir\\tglrl.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\tgl\\d3drm\\meshbuilder.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/tgl/d3drm/meshbuilder.cpp", + "output": "CMakeFiles/tglrl.dir/LEGO1/tgl/d3drm/meshbuilder.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\tglrl.dir\\LEGO1\\tgl\\d3drm\\mesh.cpp.obj /FdCMakeFiles\\tglrl.dir\\tglrl.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\tgl\\d3drm\\mesh.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/tgl/d3drm/mesh.cpp", + "output": "CMakeFiles/tglrl.dir/LEGO1/tgl/d3drm/mesh.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\realtime.dir\\LEGO1\\realtime\\orientableroi.cpp.obj /FdCMakeFiles\\realtime.dir\\realtime.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\realtime\\orientableroi.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/realtime/orientableroi.cpp", + "output": "CMakeFiles/realtime.dir/LEGO1/realtime/orientableroi.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\realtime.dir\\LEGO1\\realtime\\realtime.cpp.obj /FdCMakeFiles\\realtime.dir\\realtime.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\realtime\\realtime.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/realtime/realtime.cpp", + "output": "CMakeFiles/realtime.dir/LEGO1/realtime/realtime.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\realtime.dir\\LEGO1\\realtime\\realtimeview.cpp.obj /FdCMakeFiles\\realtime.dir\\realtime.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\realtime\\realtimeview.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/realtime/realtimeview.cpp", + "output": "CMakeFiles/realtime.dir/LEGO1/realtime/realtimeview.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\viewmanager.dir\\LEGO1\\viewmanager\\viewlod.cpp.obj /FdCMakeFiles\\viewmanager.dir\\viewmanager.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\viewmanager\\viewlod.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/viewmanager/viewlod.cpp", + "output": "CMakeFiles/viewmanager.dir/LEGO1/viewmanager/viewlod.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\viewmanager.dir\\LEGO1\\viewmanager\\viewmanager.cpp.obj /FdCMakeFiles\\viewmanager.dir\\viewmanager.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\viewmanager\\viewmanager.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/viewmanager/viewmanager.cpp", + "output": "CMakeFiles/viewmanager.dir/LEGO1/viewmanager/viewmanager.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\viewmanager.dir\\LEGO1\\viewmanager\\viewlodlist.cpp.obj /FdCMakeFiles\\viewmanager.dir\\viewmanager.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\viewmanager\\viewlodlist.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/viewmanager/viewlodlist.cpp", + "output": "CMakeFiles/viewmanager.dir/LEGO1/viewmanager/viewlodlist.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\viewmanager.dir\\LEGO1\\viewmanager\\viewroi.cpp.obj /FdCMakeFiles\\viewmanager.dir\\viewmanager.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\viewmanager\\viewroi.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/viewmanager/viewroi.cpp", + "output": "CMakeFiles/viewmanager.dir/LEGO1/viewmanager/viewroi.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\mxdirectx.dir\\LEGO1\\mxdirectx\\mxdirect3d.cpp.obj /FdCMakeFiles\\mxdirectx.dir\\mxdirectx.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\mxdirectx\\mxdirect3d.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/mxdirectx/mxdirect3d.cpp", + "output": "CMakeFiles/mxdirectx.dir/LEGO1/mxdirectx/mxdirect3d.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\mxdirectx.dir\\LEGO1\\mxdirectx\\mxdirectxinfo.cpp.obj /FdCMakeFiles\\mxdirectx.dir\\mxdirectx.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\mxdirectx\\mxdirectxinfo.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/mxdirectx/mxdirectxinfo.cpp", + "output": "CMakeFiles/mxdirectx.dir/LEGO1/mxdirectx/mxdirectxinfo.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\mxdirectx.dir\\LEGO1\\mxdirectx\\legodxinfo.cpp.obj /FdCMakeFiles\\mxdirectx.dir\\mxdirectx.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\mxdirectx\\legodxinfo.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/mxdirectx/legodxinfo.cpp", + "output": "CMakeFiles/mxdirectx.dir/LEGO1/mxdirectx/legodxinfo.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\mxdirectx.dir\\LEGO1\\mxdirectx\\mxdirectdraw.cpp.obj /FdCMakeFiles\\mxdirectx.dir\\mxdirectx.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\mxdirectx\\mxdirectdraw.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/mxdirectx/mxdirectdraw.cpp", + "output": "CMakeFiles/mxdirectx.dir/LEGO1/mxdirectx/mxdirectdraw.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\roi.dir\\LEGO1\\lego\\sources\\roi\\legoroi.cpp.obj /FdCMakeFiles\\roi.dir\\roi.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources\\roi\\legoroi.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/sources/roi/legoroi.cpp", + "output": "CMakeFiles/roi.dir/LEGO1/lego/sources/roi/legoroi.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\roi.dir\\LEGO1\\lego\\sources\\roi\\legolod.cpp.obj /FdCMakeFiles\\roi.dir\\roi.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources\\roi\\legolod.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/sources/roi/legolod.cpp", + "output": "CMakeFiles/roi.dir/LEGO1/lego/sources/roi/legolod.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\geom.dir\\LEGO1\\lego\\sources\\geom\\legoedge.cpp.obj /FdCMakeFiles\\geom.dir\\geom.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources\\geom\\legoedge.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/sources/geom/legoedge.cpp", + "output": "CMakeFiles/geom.dir/LEGO1/lego/sources/geom/legoedge.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\geom.dir\\LEGO1\\lego\\sources\\geom\\legoweedge.cpp.obj /FdCMakeFiles\\geom.dir\\geom.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources\\geom\\legoweedge.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/sources/geom/legoweedge.cpp", + "output": "CMakeFiles/geom.dir/LEGO1/lego/sources/geom/legoweedge.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\geom.dir\\LEGO1\\lego\\sources\\geom\\legounkown100db7f4.cpp.obj /FdCMakeFiles\\geom.dir\\geom.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources\\geom\\legounkown100db7f4.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/sources/geom/legounkown100db7f4.cpp", + "output": "CMakeFiles/geom.dir/LEGO1/lego/sources/geom/legounkown100db7f4.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\geom.dir\\LEGO1\\lego\\sources\\geom\\legowegedge.cpp.obj /FdCMakeFiles\\geom.dir\\geom.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources\\geom\\legowegedge.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/sources/geom/legowegedge.cpp", + "output": "CMakeFiles/geom.dir/LEGO1/lego/sources/geom/legowegedge.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\shape.dir\\LEGO1\\lego\\sources\\shape\\legobox.cpp.obj /FdCMakeFiles\\shape.dir\\shape.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources\\shape\\legobox.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/sources/shape/legobox.cpp", + "output": "CMakeFiles/shape.dir/LEGO1/lego/sources/shape/legobox.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\shape.dir\\LEGO1\\lego\\sources\\shape\\legosphere.cpp.obj /FdCMakeFiles\\shape.dir\\shape.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources\\shape\\legosphere.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/sources/shape/legosphere.cpp", + "output": "CMakeFiles/shape.dir/LEGO1/lego/sources/shape/legosphere.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\shape.dir\\LEGO1\\lego\\sources\\shape\\legovertex.cpp.obj /FdCMakeFiles\\shape.dir\\shape.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources\\shape\\legovertex.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/sources/shape/legovertex.cpp", + "output": "CMakeFiles/shape.dir/LEGO1/lego/sources/shape/legovertex.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\shape.dir\\LEGO1\\lego\\sources\\shape\\legomesh.cpp.obj /FdCMakeFiles\\shape.dir\\shape.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources\\shape\\legomesh.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/sources/shape/legomesh.cpp", + "output": "CMakeFiles/shape.dir/LEGO1/lego/sources/shape/legomesh.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\shape.dir\\LEGO1\\lego\\sources\\shape\\legocolor.cpp.obj /FdCMakeFiles\\shape.dir\\shape.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources\\shape\\legocolor.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/sources/shape/legocolor.cpp", + "output": "CMakeFiles/shape.dir/LEGO1/lego/sources/shape/legocolor.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\anim.dir\\LEGO1\\lego\\sources\\anim\\legoanim.cpp.obj /FdCMakeFiles\\anim.dir\\anim.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources\\anim\\legoanim.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/sources/anim/legoanim.cpp", + "output": "CMakeFiles/anim.dir/LEGO1/lego/sources/anim/legoanim.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\misc.dir\\LEGO1\\lego\\sources\\misc\\legotexture.cpp.obj /FdCMakeFiles\\misc.dir\\misc.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources\\misc\\legotexture.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/sources/misc/legotexture.cpp", + "output": "CMakeFiles/misc.dir/LEGO1/lego/sources/misc/legotexture.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\misc.dir\\LEGO1\\lego\\sources\\misc\\legostorage.cpp.obj /FdCMakeFiles\\misc.dir\\misc.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources\\misc\\legostorage.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/sources/misc/legostorage.cpp", + "output": "CMakeFiles/misc.dir/LEGO1/lego/sources/misc/legostorage.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\misc.dir\\LEGO1\\lego\\sources\\misc\\legoimage.cpp.obj /FdCMakeFiles\\misc.dir\\misc.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources\\misc\\legoimage.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/sources/misc/legoimage.cpp", + "output": "CMakeFiles/misc.dir/LEGO1/lego/sources/misc/legoimage.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\misc.dir\\LEGO1\\lego\\sources\\misc\\legocontainer.cpp.obj /FdCMakeFiles\\misc.dir\\misc.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources\\misc\\legocontainer.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/sources/misc/legocontainer.cpp", + "output": "CMakeFiles/misc.dir/LEGO1/lego/sources/misc/legocontainer.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\misc.dir\\LEGO1\\lego\\sources\\misc\\legotree.cpp.obj /FdCMakeFiles\\misc.dir\\misc.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources\\misc\\legotree.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/sources/misc/legotree.cpp", + "output": "CMakeFiles/misc.dir/LEGO1/lego/sources/misc/legotree.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\misc.dir\\LEGO1\\lego\\sources\\misc\\legounknown.cpp.obj /FdCMakeFiles\\misc.dir\\misc.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources\\misc\\legounknown.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/sources/misc/legounknown.cpp", + "output": "CMakeFiles/misc.dir/LEGO1/lego/sources/misc/legounknown.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\3dmanager.dir\\LEGO1\\lego\\sources\\3dmanager\\lego3dview.cpp.obj /FdCMakeFiles\\3dmanager.dir\\3dmanager.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources\\3dmanager\\lego3dview.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/sources/3dmanager/lego3dview.cpp", + "output": "CMakeFiles/3dmanager.dir/LEGO1/lego/sources/3dmanager/lego3dview.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\3dmanager.dir\\LEGO1\\lego\\sources\\3dmanager\\lego3dmanager.cpp.obj /FdCMakeFiles\\3dmanager.dir\\3dmanager.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources\\3dmanager\\lego3dmanager.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/sources/3dmanager/lego3dmanager.cpp", + "output": "CMakeFiles/3dmanager.dir/LEGO1/lego/sources/3dmanager/lego3dmanager.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\3dmanager.dir\\LEGO1\\lego\\sources\\3dmanager\\legoview1.cpp.obj /FdCMakeFiles\\3dmanager.dir\\3dmanager.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources\\3dmanager\\legoview1.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/sources/3dmanager/legoview1.cpp", + "output": "CMakeFiles/3dmanager.dir/LEGO1/lego/sources/3dmanager/legoview1.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\3dmanager.dir\\LEGO1\\lego\\sources\\3dmanager\\tglsurface.cpp.obj /FdCMakeFiles\\3dmanager.dir\\3dmanager.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources\\3dmanager\\tglsurface.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/sources/3dmanager/tglsurface.cpp", + "output": "CMakeFiles/3dmanager.dir/LEGO1/lego/sources/3dmanager/tglsurface.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\notify\\mxnotificationmanager.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\notify\\mxnotificationmanager.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/notify/mxnotificationmanager.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/notify/mxnotificationmanager.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\common\\mxdebug.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\common\\mxdebug.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/common/mxdebug.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/common/mxdebug.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\common\\mxmisc.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\common\\mxmisc.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/common/mxmisc.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/common/mxmisc.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\common\\mxatom.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\common\\mxatom.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/common/mxatom.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/common/mxatom.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\action\\mxdsaction.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\action\\mxdsaction.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/action/mxdsaction.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/action/mxdsaction.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\common\\mxtimer.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\common\\mxtimer.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/common/mxtimer.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/common/mxtimer.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\common\\mxcore.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\common\\mxcore.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/common/mxcore.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/common/mxcore.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\common\\mxstring.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\common\\mxstring.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/common/mxstring.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/common/mxstring.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\audio\\mxsoundmanager.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\audio\\mxsoundmanager.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/audio/mxsoundmanager.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/audio/mxsoundmanager.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\main\\mxomni.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\main\\mxomni.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/main/mxomni.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/main/mxomni.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\notify\\mxactionnotificationparam.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\notify\\mxactionnotificationparam.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/notify/mxactionnotificationparam.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/notify/mxactionnotificationparam.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\main\\mxomnicreateflags.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\main\\mxomnicreateflags.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/main/mxomnicreateflags.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/main/mxomnicreateflags.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\main\\mxomnicreateparam.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\main\\mxomnicreateparam.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/main/mxomnicreateparam.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/main/mxomnicreateparam.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\common\\mxobjectfactory.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\common\\mxobjectfactory.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/common/mxobjectfactory.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/common/mxobjectfactory.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\audio\\mxsoundpresenter.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\audio\\mxsoundpresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/audio/mxsoundpresenter.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/audio/mxsoundpresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\audio\\mxwavepresenter.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\audio\\mxwavepresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/audio/mxwavepresenter.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/audio/mxwavepresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\video\\mxvideopresenter.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\video\\mxvideopresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/video/mxvideopresenter.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/video/mxvideopresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\video\\mxflcpresenter.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\video\\mxflcpresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/video/mxflcpresenter.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/video/mxflcpresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\video\\mxsmkpresenter.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\video\\mxsmkpresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/video/mxsmkpresenter.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/video/mxsmkpresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\video\\mxloopingflcpresenter.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\video\\mxloopingflcpresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/video/mxloopingflcpresenter.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/video/mxloopingflcpresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\video\\mxloopingsmkpresenter.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\video\\mxloopingsmkpresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/video/mxloopingsmkpresenter.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/video/mxloopingsmkpresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\common\\mxpresenter.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\common\\mxpresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/common/mxpresenter.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/common/mxpresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\common\\mxmediapresenter.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\common\\mxmediapresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/common/mxmediapresenter.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/common/mxmediapresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\common\\mxcompositepresenter.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\common\\mxcompositepresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/common/mxcompositepresenter.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/common/mxcompositepresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\system\\mxcriticalsection.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\system\\mxcriticalsection.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/system/mxcriticalsection.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/system/mxcriticalsection.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\common\\mxutilities.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\common\\mxutilities.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/common/mxutilities.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/common/mxutilities.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\common\\mxvariabletable.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\common\\mxvariabletable.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/common/mxvariabletable.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/common/mxvariabletable.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\stream\\mxdssubscriber.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\stream\\mxdssubscriber.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/stream/mxdssubscriber.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/stream/mxdssubscriber.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\common\\mxmediamanager.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\common\\mxmediamanager.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/common/mxmediamanager.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/common/mxmediamanager.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\system\\mxticklethread.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\system\\mxticklethread.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/system/mxticklethread.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/system/mxticklethread.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\audio\\mxaudiomanager.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\audio\\mxaudiomanager.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/audio/mxaudiomanager.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/audio/mxaudiomanager.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\system\\mxautolock.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\system\\mxautolock.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/system/mxautolock.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/system/mxautolock.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\stream\\mxstreamer.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\stream\\mxstreamer.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/stream/mxstreamer.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/stream/mxstreamer.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\video\\mxstillpresenter.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\video\\mxstillpresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/video/mxstillpresenter.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/video/mxstillpresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\video\\mxdisplaysurface.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\video\\mxdisplaysurface.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/video/mxdisplaysurface.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/video/mxdisplaysurface.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\video\\mxbitmap.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\video\\mxbitmap.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/video/mxbitmap.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/video/mxbitmap.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\video\\flic.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\video\\flic.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/video/flic.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/video/flic.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\common\\mxticklemanager.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\common\\mxticklemanager.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/common/mxticklemanager.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/common/mxticklemanager.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\stream\\mxdschunk.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\stream\\mxdschunk.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/stream/mxdschunk.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/stream/mxdschunk.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\video\\mxvideomanager.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\video\\mxvideomanager.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/video/mxvideomanager.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/video/mxvideomanager.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\video\\mxvideoparamflags.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\video\\mxvideoparamflags.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/video/mxvideoparamflags.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/video/mxvideoparamflags.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\video\\mxvideoparam.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\video\\mxvideoparam.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/video/mxvideoparam.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/video/mxvideoparam.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\video\\mxpalette.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\video\\mxpalette.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/video/mxpalette.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/video/mxpalette.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\system\\mxscheduler.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\system\\mxscheduler.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/system/mxscheduler.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/system/mxscheduler.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\system\\mxthread.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\system\\mxthread.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/system/mxthread.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/system/mxthread.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\action\\mxdsobject.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\action\\mxdsobject.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/action/mxdsobject.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/action/mxdsobject.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\event\\mxeventmanager.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\event\\mxeventmanager.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/event/mxeventmanager.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/event/mxeventmanager.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\audio\\mxmusicmanager.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\audio\\mxmusicmanager.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/audio/mxmusicmanager.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/audio/mxmusicmanager.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\stream\\mxstreamcontroller.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\stream\\mxstreamcontroller.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/stream/mxstreamcontroller.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/stream/mxstreamcontroller.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\audio\\mxmusicpresenter.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\audio\\mxmusicpresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/audio/mxmusicpresenter.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/audio/mxmusicpresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\audio\\mxmidipresenter.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\audio\\mxmidipresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/audio/mxmidipresenter.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/audio/mxmidipresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\audio\\mxloopingmidipresenter.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\audio\\mxloopingmidipresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/audio/mxloopingmidipresenter.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/audio/mxloopingmidipresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\event\\mxeventpresenter.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\event\\mxeventpresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/event/mxeventpresenter.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/event/mxeventpresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\stream\\mxstreamchunk.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\stream\\mxstreamchunk.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/stream/mxstreamchunk.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/stream/mxstreamchunk.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\video\\mxregioncursor.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\video\\mxregioncursor.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/video/mxregioncursor.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/video/mxregioncursor.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\video\\mxregion.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\video\\mxregion.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/video/mxregion.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/video/mxregion.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\video\\mxsmk.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\video\\mxsmk.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/video/mxsmk.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/video/mxsmk.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\stream\\mxramstreamcontroller.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\stream\\mxramstreamcontroller.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/stream/mxramstreamcontroller.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/stream/mxramstreamcontroller.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\stream\\mxdsbuffer.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\stream\\mxdsbuffer.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/stream/mxdsbuffer.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/stream/mxdsbuffer.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\stream\\mxdiskstreamcontroller.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\stream\\mxdiskstreamcontroller.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/stream/mxdiskstreamcontroller.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/stream/mxdiskstreamcontroller.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\system\\mxsemaphore.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\system\\mxsemaphore.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/system/mxsemaphore.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/system/mxsemaphore.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\action\\mxdsobjectaction.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\action\\mxdsobjectaction.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/action/mxdsobjectaction.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/action/mxdsobjectaction.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\action\\mxdsmediaaction.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\action\\mxdsmediaaction.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/action/mxdsmediaaction.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/action/mxdsmediaaction.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\action\\mxdsanim.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\action\\mxdsanim.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/action/mxdsanim.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/action/mxdsanim.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\action\\mxdssound.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\action\\mxdssound.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/action/mxdssound.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/action/mxdssound.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\action\\mxdsevent.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\action\\mxdsevent.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/action/mxdsevent.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/action/mxdsevent.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\action\\mxdsstill.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\action\\mxdsstill.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/action/mxdsstill.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/action/mxdsstill.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\action\\mxdsmultiaction.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\action\\mxdsmultiaction.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/action/mxdsmultiaction.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/action/mxdsmultiaction.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\action\\mxdsserialaction.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\action\\mxdsserialaction.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/action/mxdsserialaction.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/action/mxdsserialaction.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\action\\mxdsparallelaction.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\action\\mxdsparallelaction.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/action/mxdsparallelaction.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/action/mxdsparallelaction.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\action\\mxdsselectaction.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\action\\mxdsselectaction.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/action/mxdsselectaction.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/action/mxdsselectaction.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\stream\\mxdsfile.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\stream\\mxdsfile.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/stream/mxdsfile.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/stream/mxdsfile.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\stream\\mxio.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\stream\\mxio.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/stream/mxio.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/stream/mxio.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\action\\mxdsstreamingaction.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\action\\mxdsstreamingaction.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/action/mxdsstreamingaction.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/action/mxdsstreamingaction.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\stream\\mxramstreamprovider.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\stream\\mxramstreamprovider.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/stream/mxramstreamprovider.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/stream/mxramstreamprovider.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smacker -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\omni.dir\\LEGO1\\omni\\src\\stream\\mxdiskstreamprovider.cpp.obj /FdCMakeFiles\\omni.dir\\omni.pdb -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\src\\stream\\mxdiskstreamprovider.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/omni/src/stream/mxdiskstreamprovider.cpp", + "output": "CMakeFiles/omni.dir/LEGO1/omni/src/stream/mxdiskstreamprovider.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\worlds\\score.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\worlds\\score.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/worlds/score.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/worlds/score.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\actors\\helicopter.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\actors\\helicopter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/actors/helicopter.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/actors/helicopter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\worlds\\gasstation.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\worlds\\gasstation.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/worlds/gasstation.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/worlds/gasstation.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\audio\\legocachsound.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\audio\\legocachsound.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/audio/legocachsound.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/audio/legocachsound.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\common\\legoobjectfactory.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\common\\legoobjectfactory.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/common/legoobjectfactory.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/common/legoobjectfactory.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\actors\\skateboard.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\actors\\skateboard.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/actors/skateboard.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/actors/skateboard.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\entity\\legoentity.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\entity\\legoentity.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/entity/legoentity.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/entity/legoentity.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\audio\\lego3dsound.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\audio\\lego3dsound.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/audio/lego3dsound.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/audio/lego3dsound.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\entity\\legocameracontroller.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\entity\\legocameracontroller.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/entity/legocameracontroller.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/entity/legocameracontroller.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\race\\legoracers.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\race\\legoracers.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/race/legoracers.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/race/legoracers.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\race\\legoraceactor.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\race\\legoraceactor.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/race/legoraceactor.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/race/legoraceactor.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\common\\legostate.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\common\\legostate.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/common/legostate.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/common/legostate.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\actors\\buildingentity.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\actors\\buildingentity.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/actors/buildingentity.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/actors/buildingentity.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\actors\\buildings.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\actors\\buildings.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/actors/buildings.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/actors/buildings.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\common\\misc.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\common\\misc.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/common/misc.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/common/misc.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\race\\legorace.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\race\\legorace.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/race/legorace.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/race/legorace.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\race\\jetskirace.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\race\\jetskirace.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/race/jetskirace.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/race/jetskirace.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\race\\carrace.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\race\\carrace.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/race/carrace.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/race/carrace.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\actors\\pizzeria.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\actors\\pizzeria.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/actors/pizzeria.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/actors/pizzeria.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\worlds\\elevatorbottom.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\worlds\\elevatorbottom.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/worlds/elevatorbottom.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/worlds/elevatorbottom.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\audio\\legoloadcachesoundpresenter.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\audio\\legoloadcachesoundpresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/audio/legoloadcachesoundpresenter.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/audio/legoloadcachesoundpresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\actors\\act2genactor.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\actors\\act2genactor.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/actors/act2genactor.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/actors/act2genactor.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\actors\\act2actor.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\actors\\act2actor.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/actors/act2actor.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/actors/act2actor.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\actors\\islepathactor.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\actors\\islepathactor.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/actors/islepathactor.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/actors/islepathactor.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\paths\\legopathstruct.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\paths\\legopathstruct.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/paths/legopathstruct.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/paths/legopathstruct.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\paths\\legoanimactor.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\paths\\legoanimactor.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/paths/legoanimactor.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/paths/legoanimactor.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\entity\\legoworld.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\entity\\legoworld.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/entity/legoworld.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/entity/legoworld.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\build\\legocarbuild.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\build\\legocarbuild.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/build/legocarbuild.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/build/legocarbuild.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\common\\legoplantmanager.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\common\\legoplantmanager.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/common/legoplantmanager.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/common/legoplantmanager.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\actors\\bumpbouy.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\actors\\bumpbouy.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/actors/bumpbouy.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/actors/bumpbouy.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\modeldb\\modeldb.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\modeldb\\modeldb.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/modeldb/modeldb.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/modeldb/modeldb.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\actors\\racecar.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\actors\\racecar.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/actors/racecar.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/actors/racecar.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\control\\legocontrolmanager.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\control\\legocontrolmanager.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/control/legocontrolmanager.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/control/legocontrolmanager.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\audio\\legosoundmanager.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\audio\\legosoundmanager.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/audio/legosoundmanager.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/audio/legosoundmanager.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\paths\\legoextraactor.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\paths\\legoextraactor.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/paths/legoextraactor.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/paths/legoextraactor.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\actors\\isleactor.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\actors\\isleactor.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/actors/isleactor.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/actors/isleactor.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\actors\\radio.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\actors\\radio.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/actors/radio.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/actors/radio.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\entity\\legoactor.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\entity\\legoactor.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/entity/legoactor.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/entity/legoactor.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\paths\\legopathactor.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\paths\\legopathactor.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/paths/legopathactor.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/paths/legopathactor.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\common\\legobuildingmanager.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\common\\legobuildingmanager.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/common/legobuildingmanager.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/common/legobuildingmanager.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\worlds\\isle.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\worlds\\isle.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/worlds/isle.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/worlds/isle.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\actors\\ambulance.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\actors\\ambulance.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/actors/ambulance.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/actors/ambulance.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\actors\\pizza.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\actors\\pizza.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/actors/pizza.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/actors/pizza.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\actors\\motorcycle.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\actors\\motorcycle.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/actors/motorcycle.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/actors/motorcycle.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\actors\\act3ammo.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\actors\\act3ammo.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/actors/act3ammo.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/actors/act3ammo.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\audio\\legocachesoundmanager.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\audio\\legocachesoundmanager.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/audio/legocachesoundmanager.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/audio/legocachesoundmanager.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\worlds\\infocenterdoor.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\worlds\\infocenterdoor.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/worlds/infocenterdoor.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/worlds/infocenterdoor.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\common\\legogamestate.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\common\\legogamestate.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/common/legogamestate.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/common/legogamestate.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\common\\legobackgroundcolor.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\common\\legobackgroundcolor.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/common/legobackgroundcolor.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/common/legobackgroundcolor.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\common\\legofullscreenmovie.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\common\\legofullscreenmovie.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/common/legofullscreenmovie.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/common/legofullscreenmovie.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\common\\legoutils.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\common\\legoutils.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/common/legoutils.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/common/legoutils.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\actors\\act3actors.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\actors\\act3actors.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/actors/act3actors.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/actors/act3actors.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\control\\legometerpresenter.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\control\\legometerpresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/control/legometerpresenter.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/control/legometerpresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\common\\legoactioncontrolpresenter.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\common\\legoactioncontrolpresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/common/legoactioncontrolpresenter.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/common/legoactioncontrolpresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\common\\mxcontrolpresenter.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\common\\mxcontrolpresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/common/mxcontrolpresenter.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/common/mxcontrolpresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\paths\\legopathpresenter.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\paths\\legopathpresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/paths/legopathpresenter.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/paths/legopathpresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\common\\legophoneme.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\common\\legophoneme.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/common/legophoneme.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/common/legophoneme.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\paths\\legopathcontroller.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\paths\\legopathcontroller.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/paths/legopathcontroller.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/paths/legopathcontroller.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\entity\\legojetskiraceactor.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\entity\\legojetskiraceactor.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/entity/legojetskiraceactor.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/entity/legojetskiraceactor.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\audio\\lego3dwavepresenter.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\audio\\lego3dwavepresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/audio/lego3dwavepresenter.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/audio/lego3dwavepresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\common\\legoanimmmpresenter.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\common\\legoanimmmpresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/common/legoanimmmpresenter.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/common/legoanimmmpresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\common\\mxtransitionmanager.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\common\\mxtransitionmanager.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/common/mxtransitionmanager.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/common/mxtransitionmanager.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\actors\\towtrack.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\actors\\towtrack.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/actors/towtrack.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/actors/towtrack.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\entity\\act2policestation.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\entity\\act2policestation.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/entity/act2policestation.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/entity/act2policestation.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\video\\legophonemepresenter.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\video\\legophonemepresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/video/legophonemepresenter.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/video/legophonemepresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\video\\legotexturepresenter.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\video\\legotexturepresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/video/legotexturepresenter.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/video/legotexturepresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\worlds\\legoact2.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\worlds\\legoact2.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/worlds/legoact2.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/worlds/legoact2.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\common\\legovariables.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\common\\legovariables.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/common/legovariables.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/common/legovariables.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\main\\scripts.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\main\\scripts.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/main/scripts.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/main/scripts.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\entity\\legoentitypresenter.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\entity\\legoentitypresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/entity/legoentitypresenter.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/entity/legoentitypresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\entity\\legonavcontroller.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\entity\\legonavcontroller.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/entity/legonavcontroller.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/entity/legonavcontroller.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\paths\\legopathboundary.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\paths\\legopathboundary.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/paths/legopathboundary.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/paths/legopathboundary.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\main\\legomain.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\main\\legomain.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/main/legomain.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/main/legomain.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\input\\legoinputmanager.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\input\\legoinputmanager.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/input/legoinputmanager.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/input/legoinputmanager.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\race\\legoracemap.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\race\\legoracemap.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/race/legoracemap.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/race/legoracemap.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\worlds\\jukebox.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\worlds\\jukebox.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/worlds/jukebox.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/worlds/jukebox.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\video\\legoflctexturepresenter.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\video\\legoflctexturepresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/video/legoflctexturepresenter.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/video/legoflctexturepresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\worlds\\police.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\worlds\\police.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/worlds/police.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/worlds/police.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\common\\legoanimationmanager.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\common\\legoanimationmanager.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\build\\legocarbuildpresenter.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\build\\legocarbuildpresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/build/legocarbuildpresenter.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/build/legocarbuildpresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\entity\\legopovcontroller.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\entity\\legopovcontroller.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/entity/legopovcontroller.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/entity/legopovcontroller.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\common\\legotextureinfo.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\common\\legotextureinfo.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/common/legotextureinfo.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/common/legotextureinfo.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\actors\\doors.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\actors\\doors.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/actors/doors.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/actors/doors.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\entity\\legoworldpresenter.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\entity\\legoworldpresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/entity/legoworldpresenter.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/entity/legoworldpresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\actors\\dunebuggy.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\actors\\dunebuggy.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/actors/dunebuggy.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/actors/dunebuggy.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\video\\legoanimpresenter.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\video\\legoanimpresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\video\\legoloopinganimpresenter.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\video\\legoloopinganimpresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/video/legoloopinganimpresenter.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/video/legoloopinganimpresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\video\\legolocomotionanimpresenter.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\video\\legolocomotionanimpresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/video/legolocomotionanimpresenter.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/video/legolocomotionanimpresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\video\\legohideanimpresenter.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\video\\legohideanimpresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/video/legohideanimpresenter.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/video/legohideanimpresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\worlds\\infocenter.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\worlds\\infocenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/worlds/infocenter.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/worlds/infocenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\race\\raceskel.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\race\\raceskel.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/race/raceskel.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/race/raceskel.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\worlds\\act3.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\worlds\\act3.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/worlds/act3.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/worlds/act3.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\video\\legomodelpresenter.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\video\\legomodelpresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/video/legomodelpresenter.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/video/legomodelpresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\common\\mxcompositemediapresenter.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\common\\mxcompositemediapresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/common/mxcompositemediapresenter.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/common/mxcompositemediapresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\worlds\\hospital.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\worlds\\hospital.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/worlds/hospital.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/worlds/hospital.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\actors\\bike.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\actors\\bike.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/actors/bike.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/actors/bike.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\entity\\legoactorpresenter.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\entity\\legoactorpresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/entity/legoactorpresenter.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/entity/legoactorpresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\worlds\\registrationbook.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\worlds\\registrationbook.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/worlds/registrationbook.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/worlds/registrationbook.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\video\\legopalettepresenter.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\video\\legopalettepresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/video/legopalettepresenter.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/video/legopalettepresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\entity\\act2brick.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\entity\\act2brick.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/entity/act2brick.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/entity/act2brick.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\video\\legovideomanager.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\video\\legovideomanager.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/video/legovideomanager.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/video/legovideomanager.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\video\\legopartpresenter.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\video\\legopartpresenter.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/video/legopartpresenter.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/video/legopartpresenter.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\actors\\jetski.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\actors\\jetski.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/actors/jetski.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/actors/jetski.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\audio\\mxbackgroundaudiomanager.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\audio\\mxbackgroundaudiomanager.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/audio/mxbackgroundaudiomanager.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/audio/mxbackgroundaudiomanager.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\race\\legoracespecial.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\race\\legoracespecial.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/race/legoracespecial.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/race/legoracespecial.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\worlds\\historybook.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\worlds\\historybook.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/worlds/historybook.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/worlds/historybook.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\common\\legocharactermanager.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\common\\legocharactermanager.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/common/legocharactermanager.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/common/legocharactermanager.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\actors\\jukeboxentity.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\actors\\jukeboxentity.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/actors/jukeboxentity.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/actors/jukeboxentity.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\main.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\main.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/main.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/main.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\entity\\legolocations.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\entity\\legolocations.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/entity/legolocations.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/entity/legolocations.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\notify\\legoeventnotificationparam.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\notify\\legoeventnotificationparam.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/notify/legoeventnotificationparam.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/notify/legoeventnotificationparam.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\common\\legoactors.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\common\\legoactors.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/common/legoactors.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/common/legoactors.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\define.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\define.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/define.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/define.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECTX5_SDK -DENABLE_DECOMP_ASSERTS -Dlego1_EXPORTS -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\vec -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\lego1.dir\\LEGO1\\lego\\legoomni\\src\\common\\legoplants.cpp.obj /FdCMakeFiles\\lego1.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\src\\common\\legoplants.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/lego/legoomni/src/common/legoplants.cpp", + "output": "CMakeFiles/lego1.dir/LEGO1/lego/legoomni/src/common/legoplants.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DENABLE_DECOMP_ASSERTS -DISLE_APP -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\omni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\sources -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include -ID:\\ISLE\\Decomp\\isle-master\\LEGO1\\lego\\legoomni\\include\\actions -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\smartheap /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MT /FID:/ISLE/Decomp/isle-master/3rdparty/smartheap/SMRTHEAP.HPP /FoCMakeFiles\\isle.dir\\ISLE\\isleapp.cpp.obj /FdCMakeFiles\\isle.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\ISLE\\isleapp.cpp", + "file": "D:/ISLE/Decomp/isle-master/ISLE/isleapp.cpp", + "output": "CMakeFiles/isle.dir/ISLE/isleapp.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECT3D_VERSION=0x500 -DENABLE_DECOMP_ASSERTS -DMXDIRECTX_FOR_CONFIG -D_AFXDLL -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MD /FoCMakeFiles\\config.dir\\LEGO1\\mxdirectx\\mxdirectxinfo.cpp.obj /FdCMakeFiles\\config.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\mxdirectx\\mxdirectxinfo.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/mxdirectx/mxdirectxinfo.cpp", + "output": "CMakeFiles/config.dir/LEGO1/mxdirectx/mxdirectxinfo.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECT3D_VERSION=0x500 -DENABLE_DECOMP_ASSERTS -DMXDIRECTX_FOR_CONFIG -D_AFXDLL -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MD /FoCMakeFiles\\config.dir\\LEGO1\\mxdirectx\\legodxinfo.cpp.obj /FdCMakeFiles\\config.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\LEGO1\\mxdirectx\\legodxinfo.cpp", + "file": "D:/ISLE/Decomp/isle-master/LEGO1/mxdirectx/legodxinfo.cpp", + "output": "CMakeFiles/config.dir/LEGO1/mxdirectx/legodxinfo.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECT3D_VERSION=0x500 -DENABLE_DECOMP_ASSERTS -DMXDIRECTX_FOR_CONFIG -D_AFXDLL -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MD /FoCMakeFiles\\config.dir\\CONFIG\\config.cpp.obj /FdCMakeFiles\\config.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\CONFIG\\config.cpp", + "file": "D:/ISLE/Decomp/isle-master/CONFIG/config.cpp", + "output": "CMakeFiles/config.dir/CONFIG/config.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECT3D_VERSION=0x500 -DENABLE_DECOMP_ASSERTS -DMXDIRECTX_FOR_CONFIG -D_AFXDLL -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MD /FoCMakeFiles\\config.dir\\CONFIG\\ConfigCommandLineInfo.cpp.obj /FdCMakeFiles\\config.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\CONFIG\\ConfigCommandLineInfo.cpp", + "file": "D:/ISLE/Decomp/isle-master/CONFIG/ConfigCommandLineInfo.cpp", + "output": "CMakeFiles/config.dir/CONFIG/ConfigCommandLineInfo.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECT3D_VERSION=0x500 -DENABLE_DECOMP_ASSERTS -DMXDIRECTX_FOR_CONFIG -D_AFXDLL -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MD /FoCMakeFiles\\config.dir\\CONFIG\\AboutDlg.cpp.obj /FdCMakeFiles\\config.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\CONFIG\\AboutDlg.cpp", + "file": "D:/ISLE/Decomp/isle-master/CONFIG/AboutDlg.cpp", + "output": "CMakeFiles/config.dir/CONFIG/AboutDlg.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECT3D_VERSION=0x500 -DENABLE_DECOMP_ASSERTS -DMXDIRECTX_FOR_CONFIG -D_AFXDLL -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MD /FoCMakeFiles\\config.dir\\CONFIG\\MainDlg.cpp.obj /FdCMakeFiles\\config.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\CONFIG\\MainDlg.cpp", + "file": "D:/ISLE/Decomp/isle-master/CONFIG/MainDlg.cpp", + "output": "CMakeFiles/config.dir/CONFIG/MainDlg.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECT3D_VERSION=0x500 -DENABLE_DECOMP_ASSERTS -DMXDIRECTX_FOR_CONFIG -D_AFXDLL -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MD /FoCMakeFiles\\config.dir\\CONFIG\\detectdx5.cpp.obj /FdCMakeFiles\\config.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\CONFIG\\detectdx5.cpp", + "file": "D:/ISLE/Decomp/isle-master/CONFIG/detectdx5.cpp", + "output": "CMakeFiles/config.dir/CONFIG/detectdx5.cpp.obj" +}, +{ + "directory": "D:/ISLE/Decomp/isle-master/build", + "command": "D:\\tools\\MSVC420\\bin\\CL.EXE /nologo /TP -DDIRECT3D_VERSION=0x500 -DENABLE_DECOMP_ASSERTS -DMXDIRECTX_FOR_CONFIG -D_AFXDLL -ID:\\ISLE\\Decomp\\isle-master\\util -ID:\\ISLE\\Decomp\\isle-master\\LEGO1 -ID:\\ISLE\\Decomp\\isle-master\\3rdparty\\dx5\\inc /W3 /GX /D \"WIN32\" /D \"_WINDOWS\" /Zi /O2 /D \"NDEBUG\" -MD /FoCMakeFiles\\config.dir\\CONFIG\\StdAfx.cpp.obj /FdCMakeFiles\\config.dir\\ -c D:\\ISLE\\Decomp\\isle-master\\CONFIG\\StdAfx.cpp", + "file": "D:/ISLE/Decomp/isle-master/CONFIG/StdAfx.cpp", + "output": "CMakeFiles/config.dir/CONFIG/StdAfx.cpp.obj" +} +] \ No newline at end of file diff --git a/build/d3drm.dll b/build/d3drm.dll new file mode 100644 index 0000000000000000000000000000000000000000..eecda3219eb0bd1e55c3223ec8df8868b15983ef GIT binary patch literal 350208 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 z

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≥%x%JXsg}zJ5h+Jf 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

cMAr(4#i;nth_q+S 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 literal 0 HcmV?d00001 diff --git a/build/dgVoodoo.conf b/build/dgVoodoo.conf new file mode 100644 index 0000000000000000000000000000000000000000..d9e2eaa52df6d1fb056b241d65a6393c4f35e630 GIT binary patch literal 128 zcmZ>9b$1PBVgLh12*r>Bq(PX0kr5)q0%AiHHGssCfCB?WoRI;j6lMTO9;kHzD+7ZC PNG}vXr5zwNm}CS1Wb6bg literal 0 HcmV?d00001 diff --git a/cmake/reccmp.cmake b/cmake/reccmp.cmake index 60aeecc1..3829c86b 100644 --- a/cmake/reccmp.cmake +++ b/cmake/reccmp.cmake @@ -1,58 +1,58 @@ -function(reccmp_find_project RESULT) - set(curdir "${CMAKE_CURRENT_SOURCE_DIR}") - while(1) - if(EXISTS "${curdir}/reccmp-project.yml") - break() - endif() - get_filename_component(nextdir "${curdir}" DIRECTORY) - if(nextdir STREQUAL curdir) - set(curdir "${RESULT}-NOTFOUND") - break() - endif() - set(curdir "${nextdir}") - endwhile() - set("${RESULT}" "${curdir}" PARENT_SCOPE) -endfunction() - -function(reccmp_add_target TARGET) - cmake_parse_arguments(ARGS "" "ID" "" ${ARGN}) - if(NOT ARGS_ID) - message(FATAL_ERROR "Missing ID argument") - endif() - set_property(TARGET ${TARGET} PROPERTY INTERFACE_RECCMP_ID "${ARGS_ID}") - set_property(GLOBAL APPEND PROPERTY RECCMP_TARGETS ${TARGET}) -endfunction() - -function(reccmp_configure) - cmake_parse_arguments(ARGS "COPY_TO_SOURCE_FOLDER" "DIR" "" ${ARGN}) - set(binary_dir "${CMAKE_BINARY_DIR}") - if(ARGS_DIR) - set(binary_dir "${ARGS_DIR}") - endif() - - reccmp_find_project(reccmp_project_dir) - if(NOT reccmp_project_dir) - message(FATAL_ERROR "Cannot find reccmp-project.yml") - endif() - - if(CMAKE_CONFIGURATION_TYPES) - set(outputdir "${binary_dir}/$") - else() - set(outputdir "${binary_dir}") - endif() - set(build_yml_txt "project: '${reccmp_project_dir}'\ntargets:\n") - get_property(RECCMP_TARGETS GLOBAL PROPERTY RECCMP_TARGETS) - foreach(target ${RECCMP_TARGETS}) - get_property(id TARGET "${target}" PROPERTY INTERFACE_RECCMP_ID) - string(APPEND build_yml_txt " ${id}:\n") - string(APPEND build_yml_txt " path: '$'\n") - if(WIN32 AND MSVC) - string(APPEND build_yml_txt " pdb: '$'\n") - endif() - endforeach() - file(GENERATE OUTPUT "${outputdir}/reccmp-build.yml" CONTENT "${build_yml_txt}") - - if(ARGS_COPY_TO_SOURCE_FOLDER) - file(GENERATE OUTPUT "${CMAKE_SOURCE_DIR}/reccmp-build.yml" CONTENT "${build_yml_txt}" CONDITION $) - endif() -endfunction() +function(reccmp_find_project RESULT) + set(curdir "${CMAKE_CURRENT_SOURCE_DIR}") + while(1) + if(EXISTS "${curdir}/reccmp-project.yml") + break() + endif() + get_filename_component(nextdir "${curdir}" DIRECTORY) + if(nextdir STREQUAL curdir) + set(curdir "${RESULT}-NOTFOUND") + break() + endif() + set(curdir "${nextdir}") + endwhile() + set("${RESULT}" "${curdir}" PARENT_SCOPE) +endfunction() + +function(reccmp_add_target TARGET) + cmake_parse_arguments(ARGS "" "ID" "" ${ARGN}) + if(NOT ARGS_ID) + message(FATAL_ERROR "Missing ID argument") + endif() + set_property(TARGET ${TARGET} PROPERTY INTERFACE_RECCMP_ID "${ARGS_ID}") + set_property(GLOBAL APPEND PROPERTY RECCMP_TARGETS ${TARGET}) +endfunction() + +function(reccmp_configure) + cmake_parse_arguments(ARGS "COPY_TO_SOURCE_FOLDER" "DIR" "" ${ARGN}) + set(binary_dir "${CMAKE_BINARY_DIR}") + if(ARGS_DIR) + set(binary_dir "${ARGS_DIR}") + endif() + + reccmp_find_project(reccmp_project_dir) + if(NOT reccmp_project_dir) + message(FATAL_ERROR "Cannot find reccmp-project.yml") + endif() + + if(CMAKE_CONFIGURATION_TYPES) + set(outputdir "${binary_dir}/$") + else() + set(outputdir "${binary_dir}") + endif() + set(build_yml_txt "project: '${reccmp_project_dir}'\ntargets:\n") + get_property(RECCMP_TARGETS GLOBAL PROPERTY RECCMP_TARGETS) + foreach(target ${RECCMP_TARGETS}) + get_property(id TARGET "${target}" PROPERTY INTERFACE_RECCMP_ID) + string(APPEND build_yml_txt " ${id}:\n") + string(APPEND build_yml_txt " path: '$'\n") + if(WIN32 AND MSVC) + string(APPEND build_yml_txt " pdb: '$'\n") + endif() + endforeach() + file(GENERATE OUTPUT "${outputdir}/reccmp-build.yml" CONTENT "${build_yml_txt}") + + if(ARGS_COPY_TO_SOURCE_FOLDER) + file(GENERATE OUTPUT "${CMAKE_SOURCE_DIR}/reccmp-build.yml" CONTENT "${build_yml_txt}" CONDITION $) + endif() +endfunction() \ No newline at end of file diff --git a/compile.bat b/compile.bat new file mode 100644 index 00000000..eb454fe7 --- /dev/null +++ b/compile.bat @@ -0,0 +1,9 @@ +@echo off +cd build +echo Pass #1 +nmake +echo Pass #2 +nmake +echo Compolation complete! Check above for errors. +echo Press any key to quit. +pause > NUL \ No newline at end of file diff --git a/reconfigureCMake.bat b/reconfigureCMake.bat new file mode 100644 index 00000000..ef9ea312 --- /dev/null +++ b/reconfigureCMake.bat @@ -0,0 +1,3 @@ +cd build +cmake .. -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=RelWithDebInfo +cd.. \ No newline at end of file diff --git a/tools/datacmp.py b/tools/datacmp.py new file mode 100644 index 00000000..cbd18877 --- /dev/null +++ b/tools/datacmp.py @@ -0,0 +1,371 @@ +# (New) Data comparison. + +import os +import argparse +import logging +from enum import Enum +from typing import Iterable, List, NamedTuple, Optional, Tuple +from struct import unpack +from isledecomp.compare import Compare as IsleCompare +from isledecomp.compare.db import MatchInfo +from isledecomp.cvdump import Cvdump +from isledecomp.cvdump.types import ( + CvdumpKeyError, + CvdumpIntegrityError, +) +from isledecomp.bin import Bin as IsleBin +import colorama + +colorama.just_fix_windows_console() + + +# Ignore all compare-db messages. +logging.getLogger("isledecomp.compare").addHandler(logging.NullHandler()) + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser(description="Comparing data values.") + parser.add_argument( + "original", metavar="original-binary", help="The original binary" + ) + parser.add_argument( + "recompiled", metavar="recompiled-binary", help="The recompiled binary" + ) + parser.add_argument( + "pdb", metavar="recompiled-pdb", help="The PDB of the recompiled binary" + ) + parser.add_argument( + "decomp_dir", metavar="decomp-dir", help="The decompiled source tree" + ) + parser.add_argument( + "-v", + "--verbose", + action=argparse.BooleanOptionalAction, + default=False, + help="", + ) + parser.add_argument( + "--no-color", "-n", action="store_true", help="Do not color the output" + ) + parser.add_argument( + "--all", + "-a", + dest="show_all", + action="store_true", + help="Only show variables with a problem", + ) + parser.add_argument( + "--print-rec-addr", + action="store_true", + help="Print addresses of recompiled functions too", + ) + + (args, _) = parser.parse_known_args() + + if not os.path.isfile(args.original): + parser.error(f"Original binary {args.original} does not exist") + + if not os.path.isfile(args.recompiled): + parser.error(f"Recompiled binary {args.recompiled} does not exist") + + if not os.path.isfile(args.pdb): + parser.error(f"Symbols PDB {args.pdb} does not exist") + + if not os.path.isdir(args.decomp_dir): + parser.error(f"Source directory {args.decomp_dir} does not exist") + + return args + + +class CompareResult(Enum): + MATCH = 1 + DIFF = 2 + ERROR = 3 + WARN = 4 + + +class ComparedOffset(NamedTuple): + offset: int + # name is None for scalar types + name: Optional[str] + match: bool + values: Tuple[str, str] + + +class ComparisonItem(NamedTuple): + """Each variable that was compared""" + + orig_addr: int + recomp_addr: int + name: str + + # The list of items that were compared. + # For a complex type, these are the members. + # For a scalar type, this is a list of size one. + # If we could not retrieve type information, this is + # a list of size one but without any specific type. + compared: List[ComparedOffset] + + # If present, the error message from the types parser. + error: Optional[str] = None + + # If true, there is no type specified for this variable. (i.e. non-public) + # In this case, we can only compare the raw bytes. + # This is different from the situation where a type id _is_ given, but + # we could not retrieve it for some reason. (This is an error.) + raw_only: bool = False + + @property + def result(self) -> CompareResult: + if self.error is not None: + return CompareResult.ERROR + + if all(c.match for c in self.compared): + return CompareResult.MATCH + + # Prefer WARN for a diff without complete type information. + return CompareResult.WARN if self.raw_only else CompareResult.DIFF + + +def create_comparison_item( + var: MatchInfo, + compared: Optional[List[ComparedOffset]] = None, + error: Optional[str] = None, + raw_only: bool = False, +) -> ComparisonItem: + """Helper to create the ComparisonItem from the fields in MatchInfo.""" + if compared is None: + compared = [] + + return ComparisonItem( + orig_addr=var.orig_addr, + recomp_addr=var.recomp_addr, + name=var.name, + compared=compared, + error=error, + raw_only=raw_only, + ) + + +def do_the_comparison(args: argparse.Namespace) -> Iterable[ComparisonItem]: + """Run through each variable in our compare DB, then do the comparison + according to the variable's type. Emit the result.""" + with IsleBin(args.original, find_str=True) as origfile, IsleBin( + args.recompiled + ) as recompfile: + isle_compare = IsleCompare(origfile, recompfile, args.pdb, args.decomp_dir) + + # TODO: We don't currently retain the type information of each variable + # in our compare DB. To get those, we build this mini-lookup table that + # maps recomp addresses to their type. + # We still need to build the full compare DB though, because we may + # need the matched symbols to compare pointers (e.g. on strings) + mini_cvdump = Cvdump(args.pdb).globals().types().run() + + recomp_type_reference = { + recompfile.get_abs_addr(g.section, g.offset): g.type + for g in mini_cvdump.globals + if recompfile.is_valid_section(g.section) + } + + for var in isle_compare.get_variables(): + type_name = recomp_type_reference.get(var.recomp_addr) + + # Start by assuming we can only compare the raw bytes + data_size = var.size + is_type_aware = type_name is not None + + if is_type_aware: + try: + # If we are type-aware, we can get the precise + # data size for the variable. + data_type = mini_cvdump.types.get(type_name) + data_size = data_type.size + except (CvdumpKeyError, CvdumpIntegrityError) as ex: + yield create_comparison_item(var, error=repr(ex)) + continue + + orig_raw = origfile.read(var.orig_addr, data_size) + recomp_raw = recompfile.read(var.recomp_addr, data_size) + + # The IMAGE_SECTION_HEADER defines the SizeOfRawData and VirtualSize for the section. + # If VirtualSize > SizeOfRawData, the section is comprised of the initialized data + # corresponding to bytes in the file, and the rest is padded with zeroes when + # Windows loads the image. + # The linker might place variables initialized to zero on the threshold between + # physical data and the virtual (uninitialized) data. + # If this happens (i.e. we get an incomplete read) we just do the same padding + # to prepare for the comparison. + if orig_raw is not None and len(orig_raw) < data_size: + orig_raw = orig_raw.ljust(data_size, b"\x00") + + if recomp_raw is not None and len(recomp_raw) < data_size: + recomp_raw = recomp_raw.ljust(data_size, b"\x00") + + # If one or both variables are entirely uninitialized + if orig_raw is None or recomp_raw is None: + # If both variables are uninitialized, we consider them equal. + match = orig_raw is None and recomp_raw is None + + # We can match a variable initialized to all zeroes with + # an uninitialized variable, but this may or may not actually + # be correct, so we flag it for the user. + uninit_force_match = not match and ( + (orig_raw is None and all(b == 0 for b in recomp_raw)) + or (recomp_raw is None and all(b == 0 for b in orig_raw)) + ) + + orig_value = "(uninitialized)" if orig_raw is None else "(initialized)" + recomp_value = ( + "(uninitialized)" if recomp_raw is None else "(initialized)" + ) + yield create_comparison_item( + var, + compared=[ + ComparedOffset( + offset=0, + name=None, + match=match, + values=(orig_value, recomp_value), + ) + ], + raw_only=uninit_force_match, + ) + continue + + if not is_type_aware: + # If there is no specific type information available + # (i.e. if this is a static or non-public variable) + # then we can only compare the raw bytes. + yield create_comparison_item( + var, + compared=[ + ComparedOffset( + offset=0, + name="(raw)", + match=orig_raw == recomp_raw, + values=(orig_raw, recomp_raw), + ) + ], + raw_only=True, + ) + continue + + # If we are here, we can do the type-aware comparison. + compared = [] + compare_items = mini_cvdump.types.get_scalars_gapless(type_name) + format_str = mini_cvdump.types.get_format_string(type_name) + + orig_data = unpack(format_str, orig_raw) + recomp_data = unpack(format_str, recomp_raw) + + def pointer_display(addr: int, is_orig: bool) -> str: + """Helper to streamline pointer textual display.""" + if addr == 0: + return "nullptr" + + ptr_match = ( + isle_compare.get_by_orig(addr) + if is_orig + else isle_compare.get_by_recomp(addr) + ) + + if ptr_match is not None: + return f"Pointer to {ptr_match.match_name()}" + + # This variable did not match if we do not have + # the pointer target in our DB. + return f"Unknown pointer 0x{addr:x}" + + # Could zip here + for i, member in enumerate(compare_items): + if member.is_pointer: + match = isle_compare.is_pointer_match(orig_data[i], recomp_data[i]) + + value_a = pointer_display(orig_data[i], True) + value_b = pointer_display(recomp_data[i], False) + + values = (value_a, value_b) + else: + match = orig_data[i] == recomp_data[i] + values = (orig_data[i], recomp_data[i]) + + compared.append( + ComparedOffset( + offset=member.offset, + name=member.name, + match=match, + values=values, + ) + ) + + yield create_comparison_item(var, compared=compared) + + +def value_get(value: Optional[str], default: str): + return value if value is not None else default + + +def main(): + args = parse_args() + + def display_match(result: CompareResult) -> str: + """Helper to return color string or not, depending on user preference""" + if args.no_color: + return result.name + + match_color = ( + colorama.Fore.GREEN + if result == CompareResult.MATCH + else ( + colorama.Fore.YELLOW + if result == CompareResult.WARN + else colorama.Fore.RED + ) + ) + return f"{match_color}{result.name}{colorama.Style.RESET_ALL}" + + var_count = 0 + problems = 0 + + for item in do_the_comparison(args): + var_count += 1 + if item.result in (CompareResult.DIFF, CompareResult.ERROR): + problems += 1 + + if not args.show_all and item.result == CompareResult.MATCH: + continue + + address_display = ( + f"0x{item.orig_addr:x} / 0x{item.recomp_addr:x}" + if args.print_rec_addr + else f"0x{item.orig_addr:x}" + ) + + print(f"{item.name[:80]} ({address_display}) ... {display_match(item.result)} ") + if item.error is not None: + print(f" {item.error}") + + for c in item.compared: + if not args.verbose and c.match: + continue + + (value_a, value_b) = c.values + if c.match: + print(f" {c.offset:5} {value_get(c.name, '(value)'):30} {value_a}") + else: + print( + f" {c.offset:5} {value_get(c.name, '(value)'):30} {value_a} : {value_b}" + ) + + if args.verbose: + print() + + print( + f"{os.path.basename(args.original)} - Variables: {var_count}. Issues: {problems}" + ) + return 0 if problems == 0 else 1 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/tools/decomplint/decomplint.py b/tools/decomplint/decomplint.py new file mode 100644 index 00000000..4ff28168 --- /dev/null +++ b/tools/decomplint/decomplint.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python3 + +import os +import sys +import argparse +import colorama +from isledecomp.dir import walk_source_dir, is_file_cpp +from isledecomp.parser import DecompLinter + +colorama.just_fix_windows_console() + + +def display_errors(alerts, filename): + sorted_alerts = sorted(alerts, key=lambda a: a.line_number) + + for alert in sorted_alerts: + error_type = ( + f"{colorama.Fore.RED}error: " + if alert.is_error() + else f"{colorama.Fore.YELLOW}warning: " + ) + components = [ + colorama.Fore.LIGHTWHITE_EX, + filename, + ":", + str(alert.line_number), + " : ", + error_type, + colorama.Fore.LIGHTWHITE_EX, + alert.code.name.lower(), + ] + print("".join(components)) + + if alert.line is not None: + print(f"{colorama.Fore.WHITE} {alert.line}") + + +def parse_args() -> argparse.Namespace: + p = argparse.ArgumentParser( + description="Syntax checking and linting for decomp annotation markers." + ) + p.add_argument("target", help="The file or directory to check.") + p.add_argument( + "--module", + required=False, + type=str, + help="If present, run targeted checks for markers from the given module.", + ) + p.add_argument( + "--warnfail", + action=argparse.BooleanOptionalAction, + default=False, + help="Fail if syntax warnings are found.", + ) + + (args, _) = p.parse_known_args() + return args + + +def process_files(files, module=None): + warning_count = 0 + error_count = 0 + + linter = DecompLinter() + for filename in files: + success = linter.check_file(filename, module) + + warnings = [a for a in linter.alerts if a.is_warning()] + errors = [a for a in linter.alerts if a.is_error()] + + error_count += len(errors) + warning_count += len(warnings) + + if not success: + display_errors(linter.alerts, filename) + print() + + return (warning_count, error_count) + + +def main(): + args = parse_args() + + files_to_check = [] + if os.path.isdir(args.target): + files_to_check = list(walk_source_dir(args.target)) + elif os.path.isfile(args.target) and is_file_cpp(args.target): + files_to_check = [args.target] + else: + sys.exit("Invalid target") + + (warning_count, error_count) = process_files(files_to_check, module=args.module) + + print(colorama.Style.RESET_ALL, end="") + + would_fail = error_count > 0 or (warning_count > 0 and args.warnfail) + if would_fail: + return 1 + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/tools/ghidra_scripts/README.md b/tools/ghidra_scripts/README.md new file mode 100644 index 00000000..1e5082d7 --- /dev/null +++ b/tools/ghidra_scripts/README.md @@ -0,0 +1,25 @@ +# Ghidra Scripts + +The scripts in this directory provide additional functionality in Ghidra, e.g. imports of symbols and types from the PDB debug symbol file. + +## Setup + +### Ghidrathon +Since these scripts and its dependencies are written in Python 3, [Ghidrathon](https://github.com/mandiant/Ghidrathon) must be installed first. Follow the instructions and install a recent build (these scripts were tested with Python 3.12 and Ghidrathon v4.0.0). + +### Script Directory +- In Ghidra, _Open Window -> Script Manager_. +- Click the _Manage Script Directories_ button on the top right. +- Click the _Add_ (Plus icon) button and select this file's parent directory. +- Close the window and click the _Refresh_ button. +- This script should now be available under the folder _LEGO1_. + +### Virtual environment +As of now, there must be a Python virtual environment set up under `$REPOSITORY_ROOT/.venv`, and the dependencies of `isledecomp` must be installed there, see [here](../README.md#tooling). + +## Development +- Type hints for Ghidra (optional): Download a recent release from https://github.com/VDOO-Connected-Trust/ghidra-pyi-generator, + unpack it somewhere, and `pip install` that directory in this virtual environment. This provides types and headers for Python. + Be aware that some of these files contain errors - in particular, `from typing import overload` seems to be missing everywhere, leading to spurious type errors. +- Note that the imported modules persist across multiple runs of the script (see [here](https://github.com/mandiant/Ghidrathon/issues/103)). + If you indend to modify an imported library, you have to use `import importlib; importlib.reload(${library})` or restart Ghidra for your changes to have any effect. Unfortunately, even that is not perfectly reliable, so you may still have to restart Ghidra for some changes in `isledecomp` to be applied. diff --git a/tools/ghidra_scripts/import_functions_and_types_from_pdb.py b/tools/ghidra_scripts/import_functions_and_types_from_pdb.py new file mode 100644 index 00000000..54bb7e9f --- /dev/null +++ b/tools/ghidra_scripts/import_functions_and_types_from_pdb.py @@ -0,0 +1,322 @@ +# Imports types and function signatures from debug symbols (PDB file) of the recompilation. +# +# This script uses Python 3 and therefore requires Ghidrathon to be installed in Ghidra (see https://github.com/mandiant/Ghidrathon). +# Furthermore, the virtual environment must be set up beforehand under $REPOSITORY_ROOT/.venv, and all required packages must be installed +# (see $REPOSITORY_ROOT/tools/README.md). +# Also, the Python version of the virtual environment must probably match the Python version used for Ghidrathon. + +# @author J. Schulz +# @category LEGO1 +# @keybinding +# @menupath +# @toolbar + + +# In order to make this code run both within and outside of Ghidra, the import order is rather unorthodox in this file. +# That is why some of the lints below are disabled. + +# pylint: disable=wrong-import-position,ungrouped-imports +# pylint: disable=undefined-variable # need to disable this one globally because pylint does not understand e.g. `askYesNo()`` + +# Disable spurious warnings in vscode / pylance +# pyright: reportMissingModuleSource=false + +from enum import Enum +import importlib +from dataclasses import dataclass, field +import logging.handlers +import sys +import logging +from pathlib import Path +import traceback +from typing import TYPE_CHECKING, Optional + + +if TYPE_CHECKING: + import ghidra + from lego_util.headers import * # pylint: disable=wildcard-import # these are just for headers + + +logger = logging.getLogger(__name__) + + +def reload_module(module: str): + """ + Due to a a quirk in Jep (used by Ghidrathon), imported modules persist for the lifetime of the Ghidra process + and are not reloaded when relaunching the script. Therefore, in order to facilitate development + we force reload all our own modules at startup. See also https://github.com/mandiant/Ghidrathon/issues/103. + + Note that as of 2024-05-30, this remedy does not work perfectly (yet): Some changes in isledecomp are + still not detected correctly and require a Ghidra restart to be applied. + """ + importlib.reload(importlib.import_module(module)) + + +reload_module("lego_util.statistics") +from lego_util.statistics import Statistics + + +@dataclass +class Globals: + verbose: bool + loglevel: int + running_from_ghidra: bool = False + # statistics + statistics: Statistics = field(default_factory=Statistics) + + +class SupportedModules(Enum): + LEGO1 = 1 + BETA10 = 2 + + def orig_filename(self): + if self == self.LEGO1: + return "LEGO1.DLL" + return "BETA10.DLL" + + def recomp_filename_without_extension(self): + # in case we want to support more functions + return "LEGO1" + + def build_dir_name(self): + if self == self.BETA10: + return "build_debug" + return "build" + + +# hard-coded settings that we don't want to prompt in Ghidra every time +GLOBALS = Globals( + verbose=False, + # loglevel=logging.INFO, + loglevel=logging.DEBUG, +) + + +def setup_logging(): + logging.root.handlers.clear() + formatter = logging.Formatter("%(levelname)-8s %(message)s") + # formatter = logging.Formatter("%(name)s %(levelname)-8s %(message)s") # use this to identify loggers + stdout_handler = logging.StreamHandler(sys.stdout) + stdout_handler.setFormatter(formatter) + file_handler = logging.FileHandler( + Path(__file__).absolute().parent.joinpath("import.log"), mode="w" + ) + file_handler.setFormatter(formatter) + logging.root.setLevel(GLOBALS.loglevel) + logging.root.addHandler(stdout_handler) + logging.root.addHandler(file_handler) + logger.info("Starting import...") + + +# This script can be run both from Ghidra and as a standalone. +# In the latter case, only the PDB parser will be used. +setup_logging() +try: + from ghidra.program.flatapi import FlatProgramAPI + from ghidra.util.exception import CancelledException + + GLOBALS.running_from_ghidra = True +except ImportError as importError: + logger.error( + "Failed to import Ghidra functions, doing a dry run for the source code parser. " + "Has this script been launched from Ghidra?" + ) + logger.debug("Precise import error:", exc_info=importError) + + GLOBALS.running_from_ghidra = False + CancelledException = None + + +def get_repository_root(): + return Path(__file__).absolute().parent.parent.parent + + +def add_python_path(path: str): + """ + Scripts in Ghidra are executed from the tools/ghidra_scripts directory. We need to add + a few more paths to the Python path so we can import the other libraries. + """ + venv_path = get_repository_root().joinpath(path) + logger.info("Adding %s to Python Path", venv_path) + assert venv_path.exists() + sys.path.insert(1, str(venv_path)) + + +# We need to quote the types here because they might not exist when running without Ghidra +def import_function_into_ghidra( + api: "FlatProgramAPI", + pdb_function: "PdbFunction", + type_importer: "PdbTypeImporter", +): + hex_original_address = f"{pdb_function.match_info.orig_addr:x}" + + # Find the Ghidra function at that address + ghidra_address = getAddressFactory().getAddress(hex_original_address) + # pylint: disable=possibly-used-before-assignment + function_importer = PdbFunctionImporter.build(api, pdb_function, type_importer) + + ghidra_function = getFunctionAt(ghidra_address) + if ghidra_function is None: + ghidra_function = createFunction(ghidra_address, "temp") + assert ( + ghidra_function is not None + ), f"Failed to create function at {ghidra_address}" + logger.info("Created new function at %s", ghidra_address) + + logger.debug("Start handling function '%s'", function_importer.get_full_name()) + + if function_importer.matches_ghidra_function(ghidra_function): + logger.info( + "Skipping function '%s', matches already", + function_importer.get_full_name(), + ) + return + + logger.debug( + "Modifying function %s at 0x%s", + function_importer.get_full_name(), + hex_original_address, + ) + + function_importer.overwrite_ghidra_function(ghidra_function) + + GLOBALS.statistics.functions_changed += 1 + + +def process_functions(extraction: "PdbFunctionExtractor"): + pdb_functions = extraction.get_function_list() + + if not GLOBALS.running_from_ghidra: + logger.info("Completed the dry run outside Ghidra.") + return + + api = FlatProgramAPI(currentProgram()) + # pylint: disable=possibly-used-before-assignment + type_importer = PdbTypeImporter(api, extraction) + + for pdb_func in pdb_functions: + func_name = pdb_func.match_info.name + try: + import_function_into_ghidra(api, pdb_func, type_importer) + GLOBALS.statistics.successes += 1 + except Lego1Exception as e: + log_and_track_failure(func_name, e) + except RuntimeError as e: + cause = e.args[0] + if CancelledException is not None and isinstance(cause, CancelledException): + # let Ghidra's CancelledException pass through + logging.critical("Import aborted by the user.") + return + + log_and_track_failure(func_name, cause, unexpected=True) + logger.error(traceback.format_exc()) + except Exception as e: # pylint: disable=broad-exception-caught + log_and_track_failure(func_name, e, unexpected=True) + logger.error(traceback.format_exc()) + + +def log_and_track_failure( + function_name: Optional[str], error: Exception, unexpected: bool = False +): + if GLOBALS.statistics.track_failure_and_tell_if_new(error): + logger.error( + "%s(): %s%s", + function_name, + "Unexpected error: " if unexpected else "", + error, + ) + + +def main(): + if GLOBALS.running_from_ghidra: + origfile_name = getProgramFile().getName() + + if origfile_name == "LEGO1.DLL": + module = SupportedModules.LEGO1 + elif origfile_name in ["LEGO1D.DLL", "BETA10.DLL"]: + module = SupportedModules.BETA10 + else: + raise Lego1Exception( + f"Unsupported file name in import script: {origfile_name}" + ) + else: + module = SupportedModules.LEGO1 + + logger.info("Importing file: %s", module.orig_filename()) + + repo_root = get_repository_root() + origfile_path = repo_root.joinpath("legobin").joinpath(module.orig_filename()) + build_directory = repo_root.joinpath(module.build_dir_name()) + recompiledfile_name = f"{module.recomp_filename_without_extension()}.DLL" + recompiledfile_path = build_directory.joinpath(recompiledfile_name) + pdbfile_name = f"{module.recomp_filename_without_extension()}.PDB" + pdbfile_path = build_directory.joinpath(pdbfile_name) + + if not GLOBALS.verbose: + logging.getLogger("isledecomp.bin").setLevel(logging.WARNING) + logging.getLogger("isledecomp.compare.core").setLevel(logging.WARNING) + logging.getLogger("isledecomp.compare.db").setLevel(logging.WARNING) + logging.getLogger("isledecomp.compare.lines").setLevel(logging.WARNING) + logging.getLogger("isledecomp.cvdump.symbols").setLevel(logging.WARNING) + + logger.info("Starting comparison") + with Bin(str(origfile_path), find_str=True) as origfile, Bin( + str(recompiledfile_path) + ) as recompfile: + isle_compare = IsleCompare( + origfile, recompfile, str(pdbfile_path), str(repo_root) + ) + + logger.info("Comparison complete.") + + # try to acquire matched functions + migration = PdbFunctionExtractor(isle_compare) + try: + process_functions(migration) + finally: + if GLOBALS.running_from_ghidra: + GLOBALS.statistics.log() + + logger.info("Done") + + +# sys.path is not reset after running the script, so we should restore it +sys_path_backup = sys.path.copy() +try: + # make modules installed in the venv available in Ghidra + add_python_path(".venv/Lib/site-packages") + # This one is needed when isledecomp is installed in editable mode in the venv + add_python_path("tools/isledecomp") + + import setuptools # pylint: disable=unused-import # required to fix a distutils issue in Python 3.12 + + reload_module("isledecomp") + from isledecomp import Bin + + reload_module("isledecomp.compare") + from isledecomp.compare import Compare as IsleCompare + + reload_module("isledecomp.compare.db") + + reload_module("lego_util.exceptions") + from lego_util.exceptions import Lego1Exception + + reload_module("lego_util.pdb_extraction") + from lego_util.pdb_extraction import ( + PdbFunctionExtractor, + PdbFunction, + ) + + if GLOBALS.running_from_ghidra: + reload_module("lego_util.ghidra_helper") + + reload_module("lego_util.function_importer") + from lego_util.function_importer import PdbFunctionImporter + + reload_module("lego_util.type_importer") + from lego_util.type_importer import PdbTypeImporter + + if __name__ == "__main__": + main() +finally: + sys.path = sys_path_backup diff --git a/tools/ghidra_scripts/lego_util/__init__.py b/tools/ghidra_scripts/lego_util/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tools/ghidra_scripts/lego_util/exceptions.py b/tools/ghidra_scripts/lego_util/exceptions.py new file mode 100644 index 00000000..1a92ba2a --- /dev/null +++ b/tools/ghidra_scripts/lego_util/exceptions.py @@ -0,0 +1,47 @@ +class Lego1Exception(Exception): + """ + Our own base class for exceptions. + Makes it easier to distinguish expected and unexpected errors. + """ + + +class TypeNotFoundError(Lego1Exception): + def __str__(self): + return f"Type not found in PDB: {self.args[0]}" + + +class TypeNotFoundInGhidraError(Lego1Exception): + def __str__(self): + return f"Type not found in Ghidra: {self.args[0]}" + + +class TypeNotImplementedError(Lego1Exception): + def __str__(self): + return f"Import not implemented for type: {self.args[0]}" + + +class ClassOrNamespaceNotFoundInGhidraError(Lego1Exception): + def __init__(self, namespaceHierachy: list[str]): + super().__init__(namespaceHierachy) + + def get_namespace_str(self) -> str: + return "::".join(self.args[0]) + + def __str__(self): + return f"Class or namespace not found in Ghidra: {self.get_namespace_str()}" + + +class MultipleTypesFoundInGhidraError(Lego1Exception): + def __str__(self): + return ( + f"Found multiple types matching '{self.args[0]}' in Ghidra: {self.args[1]}" + ) + + +class StackOffsetMismatchError(Lego1Exception): + pass + + +class StructModificationError(Lego1Exception): + def __str__(self): + return f"Failed to modify struct in Ghidra: '{self.args[0]}'\nDetailed error: {self.__cause__}" diff --git a/tools/ghidra_scripts/lego_util/function_importer.py b/tools/ghidra_scripts/lego_util/function_importer.py new file mode 100644 index 00000000..45e93c8d --- /dev/null +++ b/tools/ghidra_scripts/lego_util/function_importer.py @@ -0,0 +1,421 @@ +# This file can only be imported successfully when run from Ghidra using Ghidrathon. + +# Disable spurious warnings in vscode / pylance +# pyright: reportMissingModuleSource=false + +import logging +from typing import Optional +from abc import ABC, abstractmethod + +from ghidra.program.model.listing import Function, Parameter +from ghidra.program.flatapi import FlatProgramAPI +from ghidra.program.model.listing import ParameterImpl +from ghidra.program.model.symbol import SourceType +from ghidra.program.model.data import ( + TypeDef, + TypedefDataType, + Pointer, + ComponentOffsetSettingsDefinition, +) + +from lego_util.pdb_extraction import ( + PdbFunction, + CppRegisterSymbol, + CppStackSymbol, +) +from lego_util.ghidra_helper import ( + add_data_type_or_reuse_existing, + create_ghidra_namespace, + get_or_add_pointer_type, + get_ghidra_namespace, + sanitize_name, +) + +from lego_util.exceptions import StackOffsetMismatchError, Lego1Exception +from lego_util.type_importer import PdbTypeImporter + +logger = logging.getLogger(__name__) + + +class PdbFunctionImporter(ABC): + """A representation of a function from the PDB with each type replaced by a Ghidra type instance.""" + + def __init__( + self, + api: FlatProgramAPI, + func: PdbFunction, + type_importer: "PdbTypeImporter", + ): + self.api = api + self.match_info = func.match_info + self.type_importer = type_importer + + assert self.match_info.name is not None + + colon_split = sanitize_name(self.match_info.name).split("::") + self.name = colon_split.pop() + namespace_hierachy = colon_split + self.namespace = self._do_get_namespace(namespace_hierachy) + + def _do_get_namespace(self, namespace_hierarchy: list[str]): + return get_ghidra_namespace(self.api, namespace_hierarchy) + + def get_full_name(self) -> str: + return f"{self.namespace.getName()}::{self.name}" + + @staticmethod + def build(api: FlatProgramAPI, func: PdbFunction, type_importer: "PdbTypeImporter"): + return ( + ThunkPdbFunctionImport(api, func, type_importer) + if func.signature is None + else FullPdbFunctionImporter(api, func, type_importer) + ) + + @abstractmethod + def matches_ghidra_function(self, ghidra_function: Function) -> bool: + ... + + @abstractmethod + def overwrite_ghidra_function(self, ghidra_function: Function): + ... + + +class ThunkPdbFunctionImport(PdbFunctionImporter): + """For importing thunk functions (like vtordisp or debug build thunks) into Ghidra. + Only the name of the function will be imported.""" + + def _do_get_namespace(self, namespace_hierarchy: list[str]): + """We need to create the namespace because we don't import the return type here""" + return create_ghidra_namespace(self.api, namespace_hierarchy) + + def matches_ghidra_function(self, ghidra_function: Function) -> bool: + name_match = self.name == ghidra_function.getName(False) + namespace_match = self.namespace == ghidra_function.getParentNamespace() + + logger.debug("Matches: namespace=%s name=%s", namespace_match, name_match) + + return name_match and namespace_match + + def overwrite_ghidra_function(self, ghidra_function: Function): + ghidra_function.setName(self.name, SourceType.USER_DEFINED) + ghidra_function.setParentNamespace(self.namespace) + + +# pylint: disable=too-many-instance-attributes +class FullPdbFunctionImporter(PdbFunctionImporter): + """For importing functions into Ghidra where all information are available.""" + + def __init__( + self, + api: FlatProgramAPI, + func: PdbFunction, + type_importer: "PdbTypeImporter", + ): + super().__init__(api, func, type_importer) + + assert func.signature is not None + self.signature = func.signature + + self.is_stub = func.is_stub + + if self.signature.class_type is not None: + # Import the base class so the namespace exists + self.type_importer.import_pdb_type_into_ghidra(self.signature.class_type) + + self.return_type = type_importer.import_pdb_type_into_ghidra( + self.signature.return_type + ) + self.arguments = [ + ParameterImpl( + f"param{index}", + type_importer.import_pdb_type_into_ghidra(type_name), + api.getCurrentProgram(), + ) + for (index, type_name) in enumerate(self.signature.arglist) + ] + + def matches_ghidra_function(self, ghidra_function: Function) -> bool: + """Checks whether this function declaration already matches the description in Ghidra""" + name_match = self.name == ghidra_function.getName(False) + namespace_match = self.namespace == ghidra_function.getParentNamespace() + ghidra_return_type = ghidra_function.getReturnType() + return_type_match = self.return_type == ghidra_return_type + + # Handle edge case: Return type X that is larger than the return register. + # In that case, the function returns `X*` and has another argument `X* __return_storage_ptr`. + if ( + (not return_type_match) + and (self.return_type.getLength() > 4) + and ( + get_or_add_pointer_type(self.api, self.return_type) + == ghidra_return_type + ) + and any( + param + for param in ghidra_function.getParameters() + if param.getName() == "__return_storage_ptr__" + ) + ): + logger.debug( + "%s has a return type larger than 4 bytes", self.get_full_name() + ) + return_type_match = True + + # match arguments: decide if thiscall or not, and whether the `this` type matches + calling_convention_match = ( + self.signature.call_type == ghidra_function.getCallingConventionName() + ) + + ghidra_params_without_this = list(ghidra_function.getParameters()) + + if calling_convention_match and self.signature.call_type == "__thiscall": + this_argument = ghidra_params_without_this.pop(0) + calling_convention_match = self._this_type_match(this_argument) + + if self.is_stub: + # We do not import the argument list for stubs, so it should be excluded in matches + args_match = True + elif calling_convention_match: + args_match = self._parameter_lists_match(ghidra_params_without_this) + else: + args_match = False + + logger.debug( + "Matches: namespace=%s name=%s return_type=%s calling_convention=%s args=%s", + namespace_match, + name_match, + return_type_match, + calling_convention_match, + "ignored" if self.is_stub else args_match, + ) + + return ( + name_match + and namespace_match + and return_type_match + and calling_convention_match + and args_match + ) + + def _this_type_match(self, this_parameter: Parameter) -> bool: + if this_parameter.getName() != "this": + logger.info("Expected first argument to be `this` in __thiscall") + return False + + if self.signature.this_adjust != 0: + # In this case, the `this` argument should be custom defined + if not isinstance(this_parameter.getDataType(), TypeDef): + logger.info( + "`this` argument is not a typedef while `this adjust` = %d", + self.signature.this_adjust, + ) + return False + # We are not checking for the _correct_ `this` type here, which we could do in the future + + return True + + def _parameter_lists_match(self, ghidra_params: "list[Parameter]") -> bool: + # Remove return storage pointer from comparison if present. + # This is relevant to returning values larger than 4 bytes, and is not mentioned in the PDB + ghidra_params = [ + param + for param in ghidra_params + if param.getName() != "__return_storage_ptr__" + ] + + if len(self.arguments) != len(ghidra_params): + logger.info("Mismatching argument count") + return False + + for this_arg, ghidra_arg in zip(self.arguments, ghidra_params): + # compare argument types + if this_arg.getDataType() != ghidra_arg.getDataType(): + logger.debug( + "Mismatching arg type: expected %s, found %s", + this_arg.getDataType(), + ghidra_arg.getDataType(), + ) + return False + # compare argument names + stack_match = self.get_matching_stack_symbol(ghidra_arg.getStackOffset()) + if stack_match is None: + logger.debug("Not found on stack: %s", ghidra_arg) + return False + + if stack_match.name.startswith("__formal"): + # "__formal" is the placeholder for arguments without a name + continue + + if stack_match.name == "__$ReturnUdt": + # These appear in templates and cannot be set automatically, as they are a NOTYPE + continue + + if stack_match.name != ghidra_arg.getName(): + logger.debug( + "Argument name mismatch: expected %s, found %s", + stack_match.name, + ghidra_arg.getName(), + ) + return False + return True + + def overwrite_ghidra_function(self, ghidra_function: Function): + """Replace the function declaration in Ghidra by the one derived from C++.""" + + if ghidra_function.hasCustomVariableStorage(): + # Unfortunately, calling `ghidra_function.setCustomVariableStorage(False)` + # leads to two `this` parameters. Therefore, we first need to remove all `this` parameters + # and then re-generate a new one + ghidra_function.replaceParameters( + Function.FunctionUpdateType.DYNAMIC_STORAGE_ALL_PARAMS, # this implicitly sets custom variable storage to False + True, + SourceType.USER_DEFINED, + [ + param + for param in ghidra_function.getParameters() + if param.getName() != "this" + ], + ) + + if ghidra_function.hasCustomVariableStorage(): + raise Lego1Exception("Failed to disable custom variable storage.") + + ghidra_function.setName(self.name, SourceType.USER_DEFINED) + ghidra_function.setParentNamespace(self.namespace) + ghidra_function.setReturnType(self.return_type, SourceType.USER_DEFINED) + ghidra_function.setCallingConvention(self.signature.call_type) + + if self.is_stub: + logger.debug( + "%s is a stub, skipping parameter import", self.get_full_name() + ) + else: + ghidra_function.replaceParameters( + Function.FunctionUpdateType.DYNAMIC_STORAGE_ALL_PARAMS, + True, # force + SourceType.USER_DEFINED, + self.arguments, + ) + self._import_parameter_names(ghidra_function) + + # Special handling for `this adjust` and virtual inheritance + if self.signature.this_adjust != 0: + self._set_this_adjust(ghidra_function) + + def _import_parameter_names(self, ghidra_function: Function): + # When we call `ghidra_function.replaceParameters`, Ghidra will generate the layout. + # Now we read the parameters again and match them against the stack layout in the PDB, + # both to verify the layout and to set the parameter names. + ghidra_parameters: list[Parameter] = ghidra_function.getParameters() + + # Try to add Ghidra function names + for index, param in enumerate(ghidra_parameters): + if param.isStackVariable(): + self._rename_stack_parameter(index, param) + else: + if param.getName() == "this": + # 'this' parameters are auto-generated and cannot be changed + continue + + # Appears to never happen - could in theory be relevant to __fastcall__ functions, + # which we haven't seen yet + logger.warning( + "Unhandled register variable in %s", self.get_full_name() + ) + continue + + def _rename_stack_parameter(self, index: int, param: Parameter): + match = self.get_matching_stack_symbol(param.getStackOffset()) + if match is None: + raise StackOffsetMismatchError( + f"Could not find a matching symbol at offset {param.getStackOffset()} in {self.get_full_name()}" + ) + + if match.data_type == "T_NOTYPE(0000)": + logger.warning("Skipping stack parameter of type NOTYPE") + return + + if param.getDataType() != self.type_importer.import_pdb_type_into_ghidra( + match.data_type + ): + logger.error( + "Type mismatch for parameter: %s in Ghidra, %s in PDB", param, match + ) + return + + name = match.name + if name == "__formal": + # these can cause name collisions if multiple ones are present + name = f"__formal_{index}" + + param.setName(name, SourceType.USER_DEFINED) + + def get_matching_stack_symbol(self, stack_offset: int) -> Optional[CppStackSymbol]: + return next( + ( + symbol + for symbol in self.signature.stack_symbols + if isinstance(symbol, CppStackSymbol) + and symbol.stack_offset == stack_offset + ), + None, + ) + + def get_matching_register_symbol( + self, register: str + ) -> Optional[CppRegisterSymbol]: + return next( + ( + symbol + for symbol in self.signature.stack_symbols + if isinstance(symbol, CppRegisterSymbol) and symbol.register == register + ), + None, + ) + + def _set_this_adjust( + self, + ghidra_function: Function, + ): + """ + When `this adjust` is non-zero, the pointer type of `this` needs to be replaced by an offset version. + The offset can only be set on a typedef on the pointer. We also must enable custom storage so we can modify + the auto-generated `this` parameter. + """ + + # Necessary in order to overwite the auto-generated `this` + ghidra_function.setCustomVariableStorage(True) + + this_parameter = next( + ( + param + for param in ghidra_function.getParameters() + if param.isRegisterVariable() and param.getName() == "this" + ), + None, + ) + + if this_parameter is None: + logger.error( + "Failed to find `this` parameter in a function with `this adjust = %d`", + self.signature.this_adjust, + ) + else: + current_ghidra_type = this_parameter.getDataType() + assert isinstance(current_ghidra_type, Pointer) + class_name = current_ghidra_type.getDataType().getName() + typedef_name = f"{class_name}PtrOffset0x{self.signature.this_adjust:x}" + + typedef_ghidra_type = TypedefDataType( + current_ghidra_type.getCategoryPath(), + typedef_name, + current_ghidra_type, + ) + ComponentOffsetSettingsDefinition.DEF.setValue( + typedef_ghidra_type.getDefaultSettings(), self.signature.this_adjust + ) + typedef_ghidra_type = add_data_type_or_reuse_existing( + self.api, typedef_ghidra_type + ) + + this_parameter.setDataType(typedef_ghidra_type, SourceType.USER_DEFINED) diff --git a/tools/ghidra_scripts/lego_util/ghidra_helper.py b/tools/ghidra_scripts/lego_util/ghidra_helper.py new file mode 100644 index 00000000..24e70c65 --- /dev/null +++ b/tools/ghidra_scripts/lego_util/ghidra_helper.py @@ -0,0 +1,122 @@ +"""A collection of helper functions for the interaction with Ghidra.""" + +import logging +import re + +from lego_util.exceptions import ( + ClassOrNamespaceNotFoundInGhidraError, + TypeNotFoundInGhidraError, + MultipleTypesFoundInGhidraError, +) + +# Disable spurious warnings in vscode / pylance +# pyright: reportMissingModuleSource=false + +from ghidra.program.flatapi import FlatProgramAPI +from ghidra.program.model.data import DataType, DataTypeConflictHandler, PointerDataType +from ghidra.program.model.symbol import Namespace + +logger = logging.getLogger(__name__) + + +def get_ghidra_type(api: FlatProgramAPI, type_name: str): + """ + Searches for the type named `typeName` in Ghidra. + + Raises: + - NotFoundInGhidraError + - MultipleTypesFoundInGhidraError + """ + result = api.getDataTypes(type_name) + if len(result) == 0: + raise TypeNotFoundInGhidraError(type_name) + if len(result) == 1: + return result[0] + + raise MultipleTypesFoundInGhidraError(type_name, result) + + +def get_or_add_pointer_type(api: FlatProgramAPI, pointee: DataType) -> DataType: + new_pointer_data_type = PointerDataType(pointee) + new_pointer_data_type.setCategoryPath(pointee.getCategoryPath()) + return add_data_type_or_reuse_existing(api, new_pointer_data_type) + + +def add_data_type_or_reuse_existing( + api: FlatProgramAPI, new_data_type: DataType +) -> DataType: + result_data_type = ( + api.getCurrentProgram() + .getDataTypeManager() + .addDataType(new_data_type, DataTypeConflictHandler.KEEP_HANDLER) + ) + if result_data_type is not new_data_type: + logger.debug( + "Reusing existing data type instead of new one: %s (class: %s)", + result_data_type, + result_data_type.__class__, + ) + return result_data_type + + +def get_ghidra_namespace( + api: FlatProgramAPI, namespace_hierachy: list[str] +) -> Namespace: + namespace = api.getCurrentProgram().getGlobalNamespace() + for part in namespace_hierachy: + namespace = api.getNamespace(namespace, part) + if namespace is None: + raise ClassOrNamespaceNotFoundInGhidraError(namespace_hierachy) + return namespace + + +def create_ghidra_namespace( + api: FlatProgramAPI, namespace_hierachy: list[str] +) -> Namespace: + namespace = api.getCurrentProgram().getGlobalNamespace() + for part in namespace_hierachy: + namespace = api.getNamespace(namespace, part) + if namespace is None: + namespace = api.createNamespace(namespace, part) + return namespace + + +# These appear in debug builds +THUNK_OF_RE = re.compile(r"^Thunk of '(.*)'$") + + +def sanitize_name(name: str) -> str: + """ + Takes a full class or function name and replaces characters not accepted by Ghidra. + Applies mostly to templates, names like `vbase destructor`, and thunks in debug build. + """ + if (match := THUNK_OF_RE.fullmatch(name)) is not None: + is_thunk = True + name = match.group(1) + else: + is_thunk = False + + # Replace characters forbidden in Ghidra + new_name = ( + name.replace("<", "[") + .replace(">", "]") + .replace("*", "#") + .replace(" ", "_") + .replace("`", "'") + ) + + if "<" in name: + new_name = "_template_" + new_name + + if is_thunk: + split = new_name.split("::") + split[-1] = "_thunk_" + split[-1] + new_name = "::".join(split) + + if new_name != name: + logger.info( + "Changed class or function name from '%s' to '%s' to avoid Ghidra issues", + name, + new_name, + ) + return new_name diff --git a/tools/ghidra_scripts/lego_util/headers.pyi b/tools/ghidra_scripts/lego_util/headers.pyi new file mode 100644 index 00000000..b1655437 --- /dev/null +++ b/tools/ghidra_scripts/lego_util/headers.pyi @@ -0,0 +1,20 @@ +from typing import TypeVar, Any +import ghidra + +# pylint: disable=invalid-name,unused-argument + +T = TypeVar("T") + +# from ghidra.app.script.GhidraScript +def currentProgram() -> "ghidra.program.model.listing.Program": ... +def getAddressFactory() -> " ghidra.program.model.address.AddressFactory": ... +def state() -> "ghidra.app.script.GhidraState": ... +def askChoice(title: str, message: str, choices: list[T], defaultValue: T) -> T: ... +def askYesNo(title: str, question: str) -> bool: ... +def getFunctionAt( + entryPoint: ghidra.program.model.address.Address, +) -> ghidra.program.model.listing.Function: ... +def createFunction( + entryPoint: ghidra.program.model.address.Address, name: str +) -> ghidra.program.model.listing.Function: ... +def getProgramFile() -> Any: ... # actually java.io.File diff --git a/tools/ghidra_scripts/lego_util/pdb_extraction.py b/tools/ghidra_scripts/lego_util/pdb_extraction.py new file mode 100644 index 00000000..6a0db6f8 --- /dev/null +++ b/tools/ghidra_scripts/lego_util/pdb_extraction.py @@ -0,0 +1,182 @@ +from dataclasses import dataclass +import re +from typing import Any, Optional +import logging + +from isledecomp.bin import InvalidVirtualAddressError +from isledecomp.cvdump.symbols import SymbolsEntry +from isledecomp.compare import Compare as IsleCompare +from isledecomp.compare.db import MatchInfo + +logger = logging.getLogger(__file__) + + +@dataclass +class CppStackOrRegisterSymbol: + name: str + data_type: str + + +@dataclass +class CppStackSymbol(CppStackOrRegisterSymbol): + stack_offset: int + """Should have a value iff `symbol_type=='S_BPREL32'.""" + + +@dataclass +class CppRegisterSymbol(CppStackOrRegisterSymbol): + register: str + """Should have a value iff `symbol_type=='S_REGISTER'.` Should always be set/converted to lowercase.""" + + +@dataclass +class FunctionSignature: + original_function_symbol: SymbolsEntry + call_type: str + arglist: list[str] + return_type: str + class_type: Optional[str] + stack_symbols: list[CppStackOrRegisterSymbol] + # if non-zero: an offset to the `this` parameter in a __thiscall + this_adjust: int + + +@dataclass +class PdbFunction: + match_info: MatchInfo + signature: Optional[FunctionSignature] + is_stub: bool + + +class PdbFunctionExtractor: + """ + Extracts all information on a given function from the parsed PDB + and prepares the data for the import in Ghidra. + """ + + def __init__(self, compare: IsleCompare): + self.compare = compare + + scalar_type_regex = re.compile(r"t_(?P\w+)(?:\((?P\d+)\))?") + + _call_type_map = { + "ThisCall": "__thiscall", + "C Near": "default", + "STD Near": "__stdcall", + } + + def _get_cvdump_type(self, type_name: Optional[str]) -> Optional[dict[str, Any]]: + return ( + None + if type_name is None + else self.compare.cv.types.keys.get(type_name.lower()) + ) + + def get_func_signature(self, fn: SymbolsEntry) -> Optional[FunctionSignature]: + function_type_str = fn.func_type + if function_type_str == "T_NOTYPE(0000)": + logger.debug("Treating NOTYPE function as thunk: %s", fn.name) + return None + + # get corresponding function type + + function_type = self.compare.cv.types.keys.get(function_type_str.lower()) + if function_type is None: + logger.error( + "Could not find function type %s for function %s", fn.func_type, fn.name + ) + return None + + class_type = function_type.get("class_type") + + arg_list_type = self._get_cvdump_type(function_type.get("arg_list_type")) + assert arg_list_type is not None + arg_list_pdb_types = arg_list_type.get("args", []) + assert arg_list_type["argcount"] == len(arg_list_pdb_types) + + stack_symbols: list[CppStackOrRegisterSymbol] = [] + + # for some unexplained reason, the reported stack is offset by 4 when this flag is set + stack_offset_delta = -4 if fn.frame_pointer_present else 0 + + for symbol in fn.stack_symbols: + if symbol.symbol_type == "S_REGISTER": + stack_symbols.append( + CppRegisterSymbol( + symbol.name, + symbol.data_type, + symbol.location, + ) + ) + elif symbol.symbol_type == "S_BPREL32": + stack_offset = int(symbol.location[1:-1], 16) + stack_symbols.append( + CppStackSymbol( + symbol.name, + symbol.data_type, + stack_offset + stack_offset_delta, + ) + ) + + call_type = self._call_type_map[function_type["call_type"]] + + # parse as hex number, default to 0 + this_adjust = int(function_type.get("this_adjust", "0"), 16) + + return FunctionSignature( + original_function_symbol=fn, + call_type=call_type, + arglist=arg_list_pdb_types, + return_type=function_type["return_type"], + class_type=class_type, + stack_symbols=stack_symbols, + this_adjust=this_adjust, + ) + + def get_function_list(self) -> list[PdbFunction]: + handled = ( + self.handle_matched_function(match) + for match in self.compare.get_functions() + ) + return [signature for signature in handled if signature is not None] + + def handle_matched_function(self, match_info: MatchInfo) -> Optional[PdbFunction]: + assert match_info.orig_addr is not None + match_options = self.compare.get_match_options(match_info.orig_addr) + assert match_options is not None + + function_data = next( + ( + y + for y in self.compare.cvdump_analysis.nodes + if y.addr == match_info.recomp_addr + ), + None, + ) + if function_data is None: + try: + # this can be either a thunk (which we want) or an external function + # (which we don't want), so we tell them apart based on the validity of their address. + self.compare.orig_bin.get_relative_addr(match_info.orig_addr) + return PdbFunction(match_info, None, False) + except InvalidVirtualAddressError: + logger.debug( + "Skipping external function %s (address 0x%x not in original binary)", + match_info.name, + match_info.orig_addr, + ) + return None + + function_symbol = function_data.symbol_entry + if function_symbol is None: + logger.debug( + "Could not find function symbol (likely a PUBLICS entry): %s", + match_info.name, + ) + return None + + function_signature = self.get_func_signature(function_symbol) + + is_stub = match_options.get("stub", False) + + return PdbFunction(match_info, function_signature, is_stub) diff --git a/tools/ghidra_scripts/lego_util/statistics.py b/tools/ghidra_scripts/lego_util/statistics.py new file mode 100644 index 00000000..02232b01 --- /dev/null +++ b/tools/ghidra_scripts/lego_util/statistics.py @@ -0,0 +1,68 @@ +from dataclasses import dataclass, field +import logging + +from lego_util.exceptions import ( + TypeNotFoundInGhidraError, + ClassOrNamespaceNotFoundInGhidraError, +) + +logger = logging.getLogger(__name__) + + +@dataclass +class Statistics: + functions_changed: int = 0 + successes: int = 0 + failures: dict[str, int] = field(default_factory=dict) + known_missing_types: dict[str, int] = field(default_factory=dict) + known_missing_namespaces: dict[str, int] = field(default_factory=dict) + + def track_failure_and_tell_if_new(self, error: Exception) -> bool: + """ + Adds the error to the statistics. Returns `False` if logging the error would be redundant + (e.g. because it is a `TypeNotFoundInGhidraError` with a type that has been logged before). + """ + error_type_name = error.__class__.__name__ + self.failures[error_type_name] = ( + self.failures.setdefault(error_type_name, 0) + 1 + ) + + if isinstance(error, TypeNotFoundInGhidraError): + return self._add_occurence_and_check_if_new( + self.known_missing_types, error.args[0] + ) + + if isinstance(error, ClassOrNamespaceNotFoundInGhidraError): + return self._add_occurence_and_check_if_new( + self.known_missing_namespaces, error.get_namespace_str() + ) + + # We do not have detailed tracking for other errors, so we want to log them every time + return True + + def _add_occurence_and_check_if_new(self, target: dict[str, int], key: str) -> bool: + old_count = target.setdefault(key, 0) + target[key] = old_count + 1 + return old_count == 0 + + def log(self): + logger.info("Statistics:\n~~~~~") + logger.info( + "Missing types (with number of occurences): %s\n~~~~~", + self.format_statistics(self.known_missing_types), + ) + logger.info( + "Missing classes/namespaces (with number of occurences): %s\n~~~~~", + self.format_statistics(self.known_missing_namespaces), + ) + logger.info("Successes: %d", self.successes) + logger.info("Failures: %s", self.failures) + logger.info("Functions changed: %d", self.functions_changed) + + def format_statistics(self, stats: dict[str, int]) -> str: + if len(stats) == 0: + return "" + return ", ".join( + f"{entry[0]} ({entry[1]})" + for entry in sorted(stats.items(), key=lambda x: x[1], reverse=True) + ) diff --git a/tools/ghidra_scripts/lego_util/type_importer.py b/tools/ghidra_scripts/lego_util/type_importer.py new file mode 100644 index 00000000..1f4a077e --- /dev/null +++ b/tools/ghidra_scripts/lego_util/type_importer.py @@ -0,0 +1,541 @@ +import logging +from typing import Any, Callable, Iterator, Optional, TypeVar + +# Disable spurious warnings in vscode / pylance +# pyright: reportMissingModuleSource=false + +# pylint: disable=too-many-return-statements # a `match` would be better, but for now we are stuck with Python 3.9 +# pylint: disable=no-else-return # Not sure why this rule even is a thing, this is great for checking exhaustiveness + +from isledecomp.cvdump.types import VirtualBasePointer +from lego_util.exceptions import ( + ClassOrNamespaceNotFoundInGhidraError, + TypeNotFoundError, + TypeNotFoundInGhidraError, + TypeNotImplementedError, + StructModificationError, +) +from lego_util.ghidra_helper import ( + add_data_type_or_reuse_existing, + get_or_add_pointer_type, + create_ghidra_namespace, + get_ghidra_namespace, + get_ghidra_type, + sanitize_name, +) +from lego_util.pdb_extraction import PdbFunctionExtractor + +from ghidra.program.flatapi import FlatProgramAPI +from ghidra.program.model.data import ( + ArrayDataType, + CategoryPath, + DataType, + DataTypeConflictHandler, + Enum, + EnumDataType, + StructureDataType, + StructureInternal, + TypedefDataType, + ComponentOffsetSettingsDefinition, +) +from ghidra.util.task import ConsoleTaskMonitor + + +logger = logging.getLogger(__name__) + + +class PdbTypeImporter: + """Allows PDB types to be imported into Ghidra.""" + + def __init__(self, api: FlatProgramAPI, extraction: PdbFunctionExtractor): + self.api = api + self.extraction = extraction + # tracks the structs/classes we have already started to import, otherwise we run into infinite recursion + self.handled_structs: set[str] = set() + + # tracks the enums we have already handled for the sake of efficiency + self.handled_enums: dict[str, Enum] = {} + + @property + def types(self): + return self.extraction.compare.cv.types + + def import_pdb_type_into_ghidra( + self, type_index: str, slim_for_vbase: bool = False + ) -> DataType: + """ + Recursively imports a type from the PDB into Ghidra. + @param type_index Either a scalar type like `T_INT4(...)` or a PDB reference like `0x10ba` + @param slim_for_vbase If true, the current invocation + imports a superclass of some class where virtual inheritance is involved (directly or indirectly). + This case requires special handling: Let's say we have `class C: B` and `class B: virtual A`. Then cvdump + reports a size for B that includes both B's fields as well as the A contained at an offset within B, + which is not the correct structure to be contained in C. Therefore, we need to create a "slim" version of B + that fits inside C. + This value should always be `False` when the referenced type is not (a pointer to) a class. + """ + type_index_lower = type_index.lower() + if type_index_lower.startswith("t_"): + return self._import_scalar_type(type_index_lower) + + try: + type_pdb = self.extraction.compare.cv.types.keys[type_index_lower] + except KeyError as e: + raise TypeNotFoundError( + f"Failed to find referenced type '{type_index_lower}'" + ) from e + + type_category = type_pdb["type"] + + # follow forward reference (class, struct, union) + if type_pdb.get("is_forward_ref", False): + return self._import_forward_ref_type( + type_index_lower, type_pdb, slim_for_vbase + ) + + if type_category == "LF_POINTER": + return get_or_add_pointer_type( + self.api, + self.import_pdb_type_into_ghidra( + type_pdb["element_type"], slim_for_vbase + ), + ) + elif type_category in ["LF_CLASS", "LF_STRUCTURE"]: + return self._import_class_or_struct(type_pdb, slim_for_vbase) + elif type_category == "LF_ARRAY": + return self._import_array(type_pdb) + elif type_category == "LF_ENUM": + return self._import_enum(type_pdb) + elif type_category == "LF_PROCEDURE": + logger.warning( + "Not implemented: Function-valued argument or return type will be replaced by void pointer: %s", + type_pdb, + ) + return get_ghidra_type(self.api, "void") + elif type_category == "LF_UNION": + return self._import_union(type_pdb) + else: + raise TypeNotImplementedError(type_pdb) + + _scalar_type_map = { + "rchar": "char", + "int4": "int", + "uint4": "uint", + "real32": "float", + "real64": "double", + } + + def _scalar_type_to_cpp(self, scalar_type: str) -> str: + if scalar_type.startswith("32p"): + return f"{self._scalar_type_to_cpp(scalar_type[3:])} *" + return self._scalar_type_map.get(scalar_type, scalar_type) + + def _import_scalar_type(self, type_index_lower: str) -> DataType: + if (match := self.extraction.scalar_type_regex.match(type_index_lower)) is None: + raise TypeNotFoundError(f"Type has unexpected format: {type_index_lower}") + + scalar_cpp_type = self._scalar_type_to_cpp(match.group("typename")) + return get_ghidra_type(self.api, scalar_cpp_type) + + def _import_forward_ref_type( + self, + type_index, + type_pdb: dict[str, Any], + slim_for_vbase: bool = False, + ) -> DataType: + referenced_type = type_pdb.get("udt") or type_pdb.get("modifies") + if referenced_type is None: + try: + # Example: HWND__, needs to be created manually + return get_ghidra_type(self.api, type_pdb["name"]) + except TypeNotFoundInGhidraError as e: + raise TypeNotImplementedError( + f"{type_index}: forward ref without target, needs to be created manually: {type_pdb}" + ) from e + logger.debug( + "Following forward reference from %s to %s", + type_index, + referenced_type, + ) + return self.import_pdb_type_into_ghidra(referenced_type, slim_for_vbase) + + def _import_array(self, type_pdb: dict[str, Any]) -> DataType: + inner_type = self.import_pdb_type_into_ghidra(type_pdb["array_type"]) + + array_total_bytes: int = type_pdb["size"] + data_type_size = inner_type.getLength() + array_length, modulus = divmod(array_total_bytes, data_type_size) + assert ( + modulus == 0 + ), f"Data type size {data_type_size} does not divide array size {array_total_bytes}" + + return ArrayDataType(inner_type, array_length, 0) + + def _import_union(self, type_pdb: dict[str, Any]) -> DataType: + try: + logger.debug("Dereferencing union %s", type_pdb) + union_type = get_ghidra_type(self.api, type_pdb["name"]) + assert ( + union_type.getLength() == type_pdb["size"] + ), f"Wrong size of existing union type '{type_pdb['name']}': expected {type_pdb['size']}, got {union_type.getLength()}" + return union_type + except TypeNotFoundInGhidraError as e: + # We have so few instances, it is not worth implementing this + raise TypeNotImplementedError( + f"Writing union types is not supported. Please add by hand: {type_pdb}" + ) from e + + def _import_enum(self, type_pdb: dict[str, Any]) -> DataType: + underlying_type = self.import_pdb_type_into_ghidra(type_pdb["underlying_type"]) + field_list = self.extraction.compare.cv.types.keys.get(type_pdb["field_type"]) + assert field_list is not None, f"Failed to find field list for enum {type_pdb}" + + result = self._get_or_create_enum_data_type( + type_pdb["name"], underlying_type.getLength() + ) + # clear existing variant if there are any + for existing_variant in result.getNames(): + result.remove(existing_variant) + + variants: list[dict[str, Any]] = field_list["variants"] + for variant in variants: + result.add(variant["name"], variant["value"]) + + return result + + def _import_class_or_struct( + self, + type_in_pdb: dict[str, Any], + slim_for_vbase: bool = False, + ) -> DataType: + field_list_type: str = type_in_pdb["field_list_type"] + field_list = self.types.keys[field_list_type.lower()] + + class_size: int = type_in_pdb["size"] + class_name_with_namespace: str = sanitize_name(type_in_pdb["name"]) + if slim_for_vbase: + class_name_with_namespace += "_vbase_slim" + + if class_name_with_namespace in self.handled_structs: + logger.debug( + "Class has been handled or is being handled: %s", + class_name_with_namespace, + ) + return get_ghidra_type(self.api, class_name_with_namespace) + + logger.debug( + "--- Beginning to import class/struct '%s'", class_name_with_namespace + ) + + # Add as soon as we start to avoid infinite recursion + self.handled_structs.add(class_name_with_namespace) + + self._get_or_create_namespace(class_name_with_namespace) + + new_ghidra_struct = self._get_or_create_struct_data_type( + class_name_with_namespace, class_size + ) + + if (old_size := new_ghidra_struct.getLength()) != class_size: + logger.warning( + "Existing class %s had incorrect size %d. Setting to %d...", + class_name_with_namespace, + old_size, + class_size, + ) + + logger.info("Adding class data type %s", class_name_with_namespace) + logger.debug("Class information: %s", type_in_pdb) + + components: list[dict[str, Any]] = [] + components.extend(self._get_components_from_base_classes(field_list)) + # can be missing when no new fields are declared + components.extend(self._get_components_from_members(field_list)) + components.extend( + self._get_components_from_vbase( + field_list, class_name_with_namespace, new_ghidra_struct + ) + ) + + components.sort(key=lambda c: c["offset"]) + + if slim_for_vbase: + # Make a "slim" version: shrink the size to the fields that are actually present. + # This makes a difference when the current class uses virtual inheritance + assert ( + len(components) > 0 + ), f"Error: {class_name_with_namespace} should not be empty. There must be at least one direct or indirect vbase pointer." + last_component = components[-1] + class_size = last_component["offset"] + last_component["type"].getLength() + + self._overwrite_struct( + class_name_with_namespace, + new_ghidra_struct, + class_size, + components, + ) + + logger.info("Finished importing class %s", class_name_with_namespace) + + return new_ghidra_struct + + def _get_components_from_base_classes(self, field_list) -> Iterator[dict[str, Any]]: + non_virtual_base_classes: dict[str, int] = field_list.get("super", {}) + + for super_type, offset in non_virtual_base_classes.items(): + # If we have virtual inheritance _and_ a non-virtual base class here, we play safe and import slim version. + # This is technically not needed if only one of the superclasses uses virtual inheritance, but I am not aware of any instance. + import_slim_vbase_version_of_superclass = "vbase" in field_list + ghidra_type = self.import_pdb_type_into_ghidra( + super_type, slim_for_vbase=import_slim_vbase_version_of_superclass + ) + + yield { + "type": ghidra_type, + "offset": offset, + "name": "base" if offset == 0 else f"base_{ghidra_type.getName()}", + } + + def _get_components_from_members(self, field_list: dict[str, Any]): + members: list[dict[str, Any]] = field_list.get("members") or [] + for member in members: + yield member | {"type": self.import_pdb_type_into_ghidra(member["type"])} + + def _get_components_from_vbase( + self, + field_list: dict[str, Any], + class_name_with_namespace: str, + current_type: StructureInternal, + ) -> Iterator[dict[str, Any]]: + vbasepointer: Optional[VirtualBasePointer] = field_list.get("vbase", None) + + if vbasepointer is not None and any(x.direct for x in vbasepointer.bases): + vbaseptr_type = get_or_add_pointer_type( + self.api, + self._import_vbaseptr( + current_type, class_name_with_namespace, vbasepointer + ), + ) + yield { + "type": vbaseptr_type, + "offset": vbasepointer.vboffset, + "name": "vbase_offset", + } + + def _import_vbaseptr( + self, + current_type: StructureInternal, + class_name_with_namespace: str, + vbasepointer: VirtualBasePointer, + ) -> StructureInternal: + pointer_size = 4 # hard-code to 4 because of 32 bit + + components = [ + { + "offset": 0, + "type": get_or_add_pointer_type(self.api, current_type), + "name": "o_self", + } + ] + for vbase in vbasepointer.bases: + vbase_ghidra_type = self.import_pdb_type_into_ghidra(vbase.type) + + type_name = vbase_ghidra_type.getName() + + vbase_ghidra_pointer = get_or_add_pointer_type(self.api, vbase_ghidra_type) + vbase_ghidra_pointer_typedef = TypedefDataType( + vbase_ghidra_pointer.getCategoryPath(), + f"{type_name}PtrOffset", + vbase_ghidra_pointer, + ) + # Set a default value of -4 for the pointer offset. While this appears to be correct in many cases, + # it does not always lead to the best decompile. It can be fine-tuned by hand; the next function call + # makes sure that we don't overwrite this value on re-running the import. + ComponentOffsetSettingsDefinition.DEF.setValue( + vbase_ghidra_pointer_typedef.getDefaultSettings(), -4 + ) + + vbase_ghidra_pointer_typedef = add_data_type_or_reuse_existing( + self.api, vbase_ghidra_pointer_typedef + ) + + components.append( + { + "offset": vbase.index * pointer_size, + "type": vbase_ghidra_pointer_typedef, + "name": f"o_{type_name}", + } + ) + + size = len(components) * pointer_size + + new_ghidra_struct = self._get_or_create_struct_data_type( + f"{class_name_with_namespace}::VBasePtr", size + ) + + self._overwrite_struct( + f"{class_name_with_namespace}::VBasePtr", + new_ghidra_struct, + size, + components, + ) + + return new_ghidra_struct + + def _overwrite_struct( + self, + class_name_with_namespace: str, + new_ghidra_struct: StructureInternal, + class_size: int, + components: list[dict[str, Any]], + ): + new_ghidra_struct.deleteAll() + new_ghidra_struct.growStructure(class_size) + + # this case happened e.g. for IUnknown, which linked to an (incorrect) existing library, and some other types as well. + # Unfortunately, we don't get proper error handling for read-only types. + # However, we really do NOT want to do this every time because the type might be self-referential and partially imported. + if new_ghidra_struct.getLength() != class_size: + new_ghidra_struct = self._delete_and_recreate_struct_data_type( + class_name_with_namespace, class_size, new_ghidra_struct + ) + + for component in components: + offset: int = component["offset"] + logger.debug( + "Adding component %s to class: %s", component, class_name_with_namespace + ) + + try: + # Make sure there is room for the new structure and that we have no collision. + existing_type = new_ghidra_struct.getComponentAt(offset) + assert ( + existing_type is not None + ), f"Struct collision: Offset {offset} in {class_name_with_namespace} is overlapped by another component" + + if existing_type.getDataType().getName() != "undefined": + # collision of structs beginning in the same place -> likely due to unions + logger.warning( + "Struct collision: Offset %d of %s already has a field (likely an inline union)", + offset, + class_name_with_namespace, + ) + + new_ghidra_struct.replaceAtOffset( + offset, + component["type"], + -1, # set to -1 for fixed-size components + component["name"], # name + None, # comment + ) + except Exception as e: + raise StructModificationError(class_name_with_namespace) from e + + def _get_or_create_namespace(self, class_name_with_namespace: str): + colon_split = class_name_with_namespace.split("::") + class_name = colon_split[-1] + try: + get_ghidra_namespace(self.api, colon_split) + logger.debug("Found existing class/namespace %s", class_name_with_namespace) + except ClassOrNamespaceNotFoundInGhidraError: + logger.info("Creating class/namespace %s", class_name_with_namespace) + class_name = colon_split.pop() + parent_namespace = create_ghidra_namespace(self.api, colon_split) + self.api.createClass(parent_namespace, class_name) + + def _get_or_create_enum_data_type( + self, enum_type_name: str, enum_type_size: int + ) -> Enum: + if (known_enum := self.handled_enums.get(enum_type_name, None)) is not None: + return known_enum + + result = self._get_or_create_data_type( + enum_type_name, + "enum", + Enum, + lambda: EnumDataType( + CategoryPath("/imported"), enum_type_name, enum_type_size + ), + ) + self.handled_enums[enum_type_name] = result + return result + + def _get_or_create_struct_data_type( + self, class_name_with_namespace: str, class_size: int + ) -> StructureInternal: + return self._get_or_create_data_type( + class_name_with_namespace, + "class/struct", + StructureInternal, + lambda: StructureDataType( + CategoryPath("/imported"), class_name_with_namespace, class_size + ), + ) + + T = TypeVar("T", bound=DataType) + + def _get_or_create_data_type( + self, + type_name: str, + readable_name_of_type_category: str, + expected_type: type[T], + new_instance_callback: Callable[[], T], + ) -> T: + """ + Checks if a data type provided under the given name exists in Ghidra. + Creates one using `new_instance_callback` if there is not. + Also verifies the data type. + + Note that the return value of `addDataType()` is not the same instance as the input + even if there is no name collision. + """ + try: + data_type = get_ghidra_type(self.api, type_name) + logger.debug( + "Found existing %s type %s under category path %s", + readable_name_of_type_category, + type_name, + data_type.getCategoryPath(), + ) + except TypeNotFoundInGhidraError: + data_type = ( + self.api.getCurrentProgram() + .getDataTypeManager() + .addDataType( + new_instance_callback(), DataTypeConflictHandler.KEEP_HANDLER + ) + ) + logger.info( + "Created new %s data type %s", readable_name_of_type_category, type_name + ) + assert isinstance( + data_type, expected_type + ), f"Found existing type named {type_name} that is not a {readable_name_of_type_category}" + return data_type + + def _delete_and_recreate_struct_data_type( + self, + class_name_with_namespace: str, + class_size: int, + existing_data_type: DataType, + ) -> StructureInternal: + logger.warning( + "Failed to modify data type %s. Will try to delete the existing one and re-create the imported one.", + class_name_with_namespace, + ) + + assert ( + self.api.getCurrentProgram() + .getDataTypeManager() + .remove(existing_data_type, ConsoleTaskMonitor()) + ), f"Failed to delete and re-create data type {class_name_with_namespace}" + data_type = StructureDataType( + CategoryPath("/imported"), class_name_with_namespace, class_size + ) + data_type = ( + self.api.getCurrentProgram() + .getDataTypeManager() + .addDataType(data_type, DataTypeConflictHandler.KEEP_HANDLER) + ) + assert isinstance(data_type, StructureInternal) # for type checking + return data_type diff --git a/tools/isledecomp/.gitignore b/tools/isledecomp/.gitignore new file mode 100644 index 00000000..a7c50887 --- /dev/null +++ b/tools/isledecomp/.gitignore @@ -0,0 +1,2 @@ +isledecomp.egg-info/ +build \ No newline at end of file diff --git a/tools/isledecomp/isledecomp/__init__.py b/tools/isledecomp/isledecomp/__init__.py new file mode 100644 index 00000000..59c55869 --- /dev/null +++ b/tools/isledecomp/isledecomp/__init__.py @@ -0,0 +1,4 @@ +from .bin import * +from .dir import * +from .parser import * +from .utils import * diff --git a/tools/isledecomp/isledecomp/bin.py b/tools/isledecomp/isledecomp/bin.py new file mode 100644 index 00000000..2f20224b --- /dev/null +++ b/tools/isledecomp/isledecomp/bin.py @@ -0,0 +1,574 @@ +import logging +import struct +import bisect +from functools import cached_property +from typing import Iterator, List, Optional, Tuple +from dataclasses import dataclass +from collections import namedtuple + + +class MZHeaderNotFoundError(Exception): + """MZ magic string not found at the start of the binary.""" + + +class PEHeaderNotFoundError(Exception): + """PE magic string not found at the offset given in 0x3c.""" + + +class SectionNotFoundError(KeyError): + """The specified section was not found in the file.""" + + +class InvalidVirtualAddressError(IndexError): + """The given virtual address is too high or low + to point to something in the binary file.""" + + +PEHeader = namedtuple( + "PEHeader", + [ + "Signature", + "Machine", + "NumberOfSections", + "TimeDateStamp", + "PointerToSymbolTable", # deprecated + "NumberOfSymbols", # deprecated + "SizeOfOptionalHeader", + "Characteristics", + ], +) + +ImageSectionHeader = namedtuple( + "ImageSectionHeader", + [ + "name", + "virtual_size", + "virtual_address", + "size_of_raw_data", + "pointer_to_raw_data", + "pointer_to_relocations", + "pointer_to_line_numbers", + "number_of_relocations", + "number_of_line_numbers", + "characteristics", + ], +) + + +@dataclass +class Section: + name: str + virtual_size: int + virtual_address: int + view: memoryview + + @cached_property + def size_of_raw_data(self) -> int: + return len(self.view) + + @cached_property + def extent(self): + """Get the highest possible offset of this section""" + return max(self.size_of_raw_data, self.virtual_size) + + def match_name(self, name: str) -> bool: + return self.name == name + + def contains_vaddr(self, vaddr: int) -> bool: + return self.virtual_address <= vaddr < self.virtual_address + self.extent + + def read_virtual(self, vaddr: int, size: int) -> memoryview: + ofs = vaddr - self.virtual_address + + # Negative index will read from the end, which we don't want + if ofs < 0: + raise InvalidVirtualAddressError + + try: + return self.view[ofs : ofs + size] + except IndexError as ex: + raise InvalidVirtualAddressError from ex + + def addr_is_uninitialized(self, vaddr: int) -> bool: + """We cannot rely on the IMAGE_SCN_CNT_UNINITIALIZED_DATA flag (0x80) in + the characteristics field so instead we determine it this way.""" + if not self.contains_vaddr(vaddr): + return False + + # Should include the case where size_of_raw_data == 0, + # meaning the entire section is uninitialized + return (self.virtual_size > self.size_of_raw_data) and ( + vaddr - self.virtual_address >= self.size_of_raw_data + ) + + +logger = logging.getLogger(__name__) + + +class Bin: + """Parses a PE format EXE and allows reading data from a virtual address. + Reference: https://learn.microsoft.com/en-us/windows/win32/debug/pe-format""" + + # pylint: disable=too-many-instance-attributes + + def __init__(self, filename: str, find_str: bool = False) -> None: + logger.debug('Parsing headers of "%s"... ', filename) + self.filename = filename + self.view: memoryview = None + self.imagebase = None + self.entry = None + self.sections: List[Section] = [] + self._section_vaddr: List[int] = [] + self.find_str = find_str + self._potential_strings = {} + self._relocations = set() + self._relocated_addrs = set() + self.imports = [] + self.thunks = [] + self.exports: List[Tuple[int, str]] = [] + self.is_debug: bool = False + + def __enter__(self): + logger.debug("Bin %s Enter", self.filename) + with open(self.filename, "rb") as f: + self.view = memoryview(f.read()) + + (mz_str,) = struct.unpack("2s", self.view[0:2]) + if mz_str != b"MZ": + raise MZHeaderNotFoundError + + # Skip to PE header offset in MZ header. + (pe_header_start,) = struct.unpack(" List[int]: + return sorted(self._relocated_addrs) + + def find_string(self, target: str) -> Optional[int]: + # Pad with null terminator to make sure we don't + # match on a subset of the full string + if not target.endswith(b"\x00"): + target += b"\x00" + + c = target[0] + if c not in self._potential_strings: + return None + + for addr in self._potential_strings[c]: + if target == self.read(addr, len(target)): + return addr + + return None + + def is_relocated_addr(self, vaddr) -> bool: + return vaddr in self._relocated_addrs + + def _prepare_string_search(self): + """We are intersted in deduplicated string constants found in the + .rdata and .data sections. For each relocated address in these sections, + read the first byte and save the address if that byte is an ASCII character. + When we search for an arbitrary string later, we can narrow down the list + of potential locations by a lot.""" + + def is_ascii(b): + return b" " <= b < b"\x7f" + + sect_data = self.get_section_by_name(".data") + sect_rdata = self.get_section_by_name(".rdata") + potentials = filter( + lambda a: sect_data.contains_vaddr(a) or sect_rdata.contains_vaddr(a), + self.get_relocated_addresses(), + ) + + for addr in potentials: + c = self.read(addr, 1) + if c is not None and is_ascii(c): + k = ord(c) + if k not in self._potential_strings: + self._potential_strings[k] = set() + + self._potential_strings[k].add(addr) + + def _populate_relocations(self): + """The relocation table in .reloc gives each virtual address where the next four + bytes are, itself, another virtual address. During loading, these values will be + patched according to the virtual address space for the image, as provided by Windows. + We can use this information to get a list of where each significant "thing" + in the file is located. Anything that is referenced absolutely (i.e. excluding + jump destinations given by local offset) will be here. + One use case is to tell whether an immediate value in an operand represents + a virtual address or just a big number.""" + + reloc = self.get_section_by_name(".reloc").view + ofs = 0 + reloc_addrs = [] + + # Parse the structure in .reloc to get the list locations to check. + # The first 8 bytes are 2 dwords that give the base page address + # and the total block size (including this header). + # The page address is used to compact the list; each entry is only + # 2 bytes, and these are added to the base to get the full location. + # If the entry read in is zero, we are at the end of this section and + # these are padding bytes. + while True: + (page_base, block_size) = struct.unpack("<2I", reloc[ofs : ofs + 8]) + if block_size == 0: + break + + # HACK: ignore the relocation type for now (the top 4 bits of the value). + values = list(struct.iter_unpack(" Iterator[Tuple[int, int, float]]: + """Floating point instructions that refer to a memory address can + point to constant values. Search the code sections to find FP + instructions and check whether the pointer address refers to + read-only data.""" + + # TODO: Should check any section that has code, not just .text + text = self.get_section_by_name(".text") + rdata = self.get_section_by_name(".rdata") + + # These are the addresses where a relocation occurs. + # Meaning: it points to an absolute address of something + for addr in self._relocations: + if not text.contains_vaddr(addr): + continue + + # Read the two bytes before the relocated address. + # We will check against possible float opcodes + raw = text.read_virtual(addr - 2, 6) + (opcode, opcode_ext, const_addr) = struct.unpack(" Iterator[Tuple[int, str]]: + """Search for possible strings at each verified address in .data.""" + section = self.get_section_by_name(".data") + for addr in self._relocated_addrs: + if section.contains_vaddr(addr): + raw = self.read_string(addr) + if raw is None: + continue + + try: + string = raw.decode(encoding) + except UnicodeDecodeError: + continue + + yield (addr, string) + + def get_section_by_name(self, name: str) -> Section: + section = next( + filter(lambda section: section.match_name(name), self.sections), + None, + ) + + if section is None: + raise SectionNotFoundError + + return section + + def get_section_by_index(self, index: int) -> Section: + """Convert 1-based index into 0-based.""" + return self.sections[index - 1] + + def get_section_extent_by_index(self, index: int) -> int: + return self.get_section_by_index(index).extent + + def get_section_offset_by_index(self, index: int) -> int: + """The symbols output from cvdump gives addresses in this format: AAAA.BBBBBBBB + where A is the index (1-based) into the section table and B is the local offset. + This will return the virtual address for the start of the section at the given index + so you can get the virtual address for whatever symbol you are looking at. + """ + return self.get_section_by_index(index).virtual_address + + def get_section_offset_by_name(self, name: str) -> int: + """Same as above, but use the section name as the lookup""" + + section = self.get_section_by_name(name) + return section.virtual_address + + def get_abs_addr(self, section: int, offset: int) -> int: + """Convenience function for converting section:offset pairs from cvdump + into an absolute vaddr.""" + return self.get_section_offset_by_index(section) + offset + + def get_relative_addr(self, addr: int) -> Tuple[int, int]: + """Convert an absolute address back into a (section, offset) pair.""" + i = bisect.bisect_right(self._section_vaddr, addr) - 1 + i = max(0, i) + + section = self.sections[i] + if section.contains_vaddr(addr): + return (i + 1, addr - section.virtual_address) + + raise InvalidVirtualAddressError(f"{self.filename} : {hex(addr)}") + + def is_valid_section(self, section_id: int) -> bool: + """The PDB will refer to sections that are not listed in the headers + and so should ignore these references.""" + try: + _ = self.get_section_by_index(section_id) + return True + except IndexError: + return False + + def is_valid_vaddr(self, vaddr: int) -> bool: + """Does this virtual address point to anything in the exe?""" + try: + (_, __) = self.get_relative_addr(vaddr) + except InvalidVirtualAddressError: + return False + + return True + + def read_string(self, offset: int, chunk_size: int = 1000) -> Optional[bytes]: + """Read until we find a zero byte.""" + b = self.read(offset, chunk_size) + if b is None: + return None + + try: + return b[: b.index(b"\x00")] + except ValueError: + # No terminator found, just return what we have + return b + + def read(self, vaddr: int, size: int) -> Optional[bytes]: + """Read (at most) the given number of bytes at the given virtual address. + If we return None, the given address points to uninitialized data.""" + (section_id, offset) = self.get_relative_addr(vaddr) + section = self.sections[section_id - 1] + + if section.addr_is_uninitialized(vaddr): + return None + + # Clamp the read within the extent of the current section. + # Reading off the end will most likely misrepresent the virtual addressing. + _size = min(size, section.size_of_raw_data - offset) + return bytes(section.view[offset : offset + _size]) diff --git a/tools/isledecomp/isledecomp/compare/__init__.py b/tools/isledecomp/isledecomp/compare/__init__.py new file mode 100644 index 00000000..f8d18500 --- /dev/null +++ b/tools/isledecomp/isledecomp/compare/__init__.py @@ -0,0 +1 @@ +from .core import Compare diff --git a/tools/isledecomp/isledecomp/compare/asm/__init__.py b/tools/isledecomp/isledecomp/compare/asm/__init__.py new file mode 100644 index 00000000..3fd22f6e --- /dev/null +++ b/tools/isledecomp/isledecomp/compare/asm/__init__.py @@ -0,0 +1,2 @@ +from .parse import ParseAsm +from .swap import can_resolve_register_differences diff --git a/tools/isledecomp/isledecomp/compare/asm/const.py b/tools/isledecomp/isledecomp/compare/asm/const.py new file mode 100644 index 00000000..7c715c0c --- /dev/null +++ b/tools/isledecomp/isledecomp/compare/asm/const.py @@ -0,0 +1,27 @@ +# Duplicates removed, according to the mnemonics capstone uses. +# e.g. je and jz are the same instruction. capstone uses je. +# See: /arch/X86/X86GenAsmWriter.inc in the capstone repo. +JUMP_MNEMONICS = { + "ja", + "jae", + "jb", + "jbe", + "jcxz", # unused? + "je", + "jecxz", + "jg", + "jge", + "jl", + "jle", + "jmp", + "jne", + "jno", + "jnp", + "jns", + "jo", + "jp", + "js", +} + +# Guaranteed to be a single operand. +SINGLE_OPERAND_INSTS = {"push", "call", *JUMP_MNEMONICS} diff --git a/tools/isledecomp/isledecomp/compare/asm/fixes.py b/tools/isledecomp/isledecomp/compare/asm/fixes.py new file mode 100644 index 00000000..d0e326da --- /dev/null +++ b/tools/isledecomp/isledecomp/compare/asm/fixes.py @@ -0,0 +1,314 @@ +import re +from typing import List, Tuple, Set + +DiffOpcode = Tuple[str, int, int, int, int] + +REG_FIND = re.compile(r"(?: |\[)(e?[a-d]x|e?[s,d]i|[a-d][l,h]|e?[b,s]p)") + +ALLOWED_JUMP_SWAPS = ( + ("ja", "jb"), + ("jae", "jbe"), + ("jb", "ja"), + ("jbe", "jae"), + ("jg", "jl"), + ("jge", "jle"), + ("jl", "jg"), + ("jle", "jge"), + ("je", "je"), + ("jne", "jne"), +) + + +def jump_swap_ok(a: str, b: str) -> bool: + """For the instructions a,b, are they both jump instructions + that are compatible with a swapped cmp operand order?""" + # Grab the mnemonic + (jmp_a, _, __) = a.partition(" ") + (jmp_b, _, __) = b.partition(" ") + + return (jmp_a, jmp_b) in ALLOWED_JUMP_SWAPS + + +def is_operand_swap(a: str, b: str) -> bool: + """This is a hack to avoid parsing the operands. It's not as simple as + breaking on the comma because templates or string literals interfere + with this. Instead we check: + 1. Do both strings use the exact same set of characters? + 2. If we do break on ', ', is the first token of each different? + 2 is needed to catch an edge case like: + cmp eax, dword ptr [ecx + 0x1234] + cmp ecx, dword ptr [eax + 0x1234] + """ + return a.partition(", ")[0] != b.partition(", ")[0] and sorted(a) == sorted(b) + + +def can_cmp_swap(orig: List[str], recomp: List[str]) -> bool: + # Make sure we have 1 cmp and 1 jmp for both + if len(orig) != 2 or len(recomp) != 2: + return False + + if not orig[0].startswith("cmp") or not recomp[0].startswith("cmp"): + return False + + if not orig[1].startswith("j") or not recomp[1].startswith("j"): + return False + + # Checking two things: + # Are the cmp operands flipped? + # Is the jump instruction compatible with a flip? + return is_operand_swap(orig[0], recomp[0]) and jump_swap_ok(orig[1], recomp[1]) + + +def patch_jump(a: str, b: str) -> str: + """For jump instructions a, b, return `(mnemonic_a) (operand_b)`. + The reason to do it this way (instead of just returning `a`) is that + the jump instructions might use different displacement offsets + or labels. If we just replace `b` with `a`, this diff would be + incorrectly eliminated.""" + (mnemonic_a, _, __) = a.partition(" ") + (_, __, operand_b) = b.partition(" ") + + return mnemonic_a + " " + operand_b + + +def patch_cmp_swaps( + codes: List[DiffOpcode], orig_asm: List[str], recomp_asm: List[str] +) -> Set[int]: + """Can we resolve the diffs between orig and recomp by patching + swapped cmp instructions? + For example: + cmp eax, ebx cmp ebx, eax + je .label je .label + + cmp eax, ebx cmp ebx, eax + ja .label jb .label + """ + + fixed_lines = set() + + for code, i1, i2, j1, j2 in codes: + # To save us the trouble of finding "compatible" cmp instructions + # use the diff information we already have. + if code != "replace": + continue + + # If the ranges in orig and recomp are not equal, use the shorter one + for i, j in zip(range(i1, i2), range(j1, j2)): + if can_cmp_swap(orig_asm[i : i + 2], recomp_asm[j : j + 2]): + # Patch cmp + fixed_lines.add(j) + + # Patch the jump if necessary + patched = patch_jump(orig_asm[i + 1], recomp_asm[j + 1]) + # We only register a fix if it actually matches + if orig_asm[i + 1] == patched: + fixed_lines.add(j + 1) + + return fixed_lines + + +def effective_match_possible(orig_asm: List[str], recomp_asm: List[str]) -> bool: + # We can only declare an effective match based on the text + # so you need the same amount of "stuff" in each + if len(orig_asm) != len(recomp_asm): + return False + + # mnemonic_orig = [inst.partition(" ")[0] for inst in orig_asm] + # mnemonic_recomp = [inst.partition(" ")[0] for inst in recomp_asm] + + # Cannot change mnemonics. Must be same starting list + # TODO: Fine idea but this will exclude jump swaps for cmp operand order + # if sorted(mnemonic_orig) != sorted(mnemonic_recomp): + # return False + + return True + + +def find_regs_used(inst: str) -> List[str]: + return REG_FIND.findall(inst) + + +def find_regs_changed(a: str, b: str) -> List[Tuple[str, str]]: + """For instructions a, b, return the pairs of registers that were used. + This is not a very precise way to compare the instructions, so it depends + on the input being two instructions that would match *except* for + the register choice.""" + return zip(REG_FIND.findall(a), REG_FIND.findall(b)) + + +def bad_register_swaps( + swaps: Set[int], orig_asm: List[str], recomp_asm: List[str] +) -> Set[int]: + """The list of recomp indices in `swaps` tells which instructions are + a match for orig except for the registers used. From that list, check + whether a register swap should not be allowed. + For now, this means checking for `push` instructions where the register + was not used in any other register swaps on previous instructions.""" + rejects = set() + + # Foreach `push` instruction where we have excused the diff + pushes = [j for j in swaps if recomp_asm[j].startswith("push")] + + for j in pushes: + okay = False + # Get the operands in each + reg = (orig_asm[j].partition(" ")[2], recomp_asm[j].partition(" ")[2]) + # If this isn't a register at all, ignore it + try: + int(reg[0], 16) + continue + except ValueError: + pass + + # For every other excused diff that is *not* a push: + # Assumes same index in orig as in recomp, but so does our naive match + for k in swaps.difference(pushes): + changed_regs = find_regs_changed(orig_asm[k], recomp_asm[k]) + if reg in changed_regs or reg[::-1] in changed_regs: + okay = True + break + + if not okay: + rejects.add(j) + + return rejects + + +# Instructions that result in a change to the first operand +MODIFIER_INSTRUCTIONS = ("adc", "add", "lea", "mov", "neg", "sbb", "sub", "pop", "xor") + + +def instruction_alters_regs(inst: str, regs: Set[str]) -> bool: + (mnemonic, _, op_str) = inst.partition(" ") + (first_operand, _, __) = op_str.partition(", ") + + return (mnemonic in MODIFIER_INSTRUCTIONS and first_operand in regs) or ( + mnemonic == "call" and "eax" in regs + ) + + +def relocate_instructions( + codes: List[DiffOpcode], orig_asm: List[str], recomp_asm: List[str] +) -> Set[int]: + """Collect the list of instructions deleted from orig and inserted + into recomp, according to the diff opcodes. Using this list, match up + any pairs of instructions that we assume to be relocated and return + the indices in recomp where this has occurred. + For now, we are checking only for an exact match on the instruction. + We are not checking whether the given instruction can be moved from + point A to B. (i.e. does this set a register that is used by the + instructions between A and B?)""" + deletes = { + i for code, i1, i2, _, __ in codes for i in range(i1, i2) if code == "delete" + } + inserts = [ + j for code, _, __, j1, j2 in codes for j in range(j1, j2) if code == "insert" + ] + + relocated = set() + + for j in inserts: + line = recomp_asm[j] + recomp_regs_used = set(find_regs_used(line)) + for i in deletes: + # Check for exact match. + # TODO: This will grab the first instruction that matches. + # We should probably use the nearest index instead, if it matters + if orig_asm[i] == line: + # To account for a move in either direction + reloc_start = min(i, j) + reloc_end = max(i, j) + if not any( + instruction_alters_regs(orig_asm[k], recomp_regs_used) + for k in range(reloc_start, reloc_end) + ): + relocated.add(j) + deletes.remove(i) + break + + return relocated + + +DWORD_REGS = ("eax", "ebx", "ecx", "edx", "esi", "edi", "ebp", "esp") +WORD_REGS = ("ax", "bx", "cx", "dx", "si", "di", "bp", "sp") +BYTE_REGS = ("ah", "al", "bh", "bl", "ch", "cl", "dh", "dl") + + +def naive_register_replacement(orig_asm: List[str], recomp_asm: List[str]) -> Set[int]: + """Replace all registers of the same size with a placeholder string. + After doing that, compare orig and recomp again. + Return indices from recomp that are now equal to the same index in orig. + This requires orig and recomp to have the same number of instructions, + but this is already a requirement for effective match.""" + orig_raw = "\n".join(orig_asm) + recomp_raw = "\n".join(recomp_asm) + + # TODO: hardly the most elegant way to do this. + for rdw in DWORD_REGS: + orig_raw = orig_raw.replace(rdw, "~reg4") + recomp_raw = recomp_raw.replace(rdw, "~reg4") + + for rw in WORD_REGS: + orig_raw = orig_raw.replace(rw, "~reg2") + recomp_raw = recomp_raw.replace(rw, "~reg2") + + for rb in BYTE_REGS: + orig_raw = orig_raw.replace(rb, "~reg1") + recomp_raw = recomp_raw.replace(rb, "~reg1") + + orig_scrubbed = orig_raw.split("\n") + recomp_scrubbed = recomp_raw.split("\n") + + return { + j for j in range(len(recomp_scrubbed)) if orig_scrubbed[j] == recomp_scrubbed[j] + } + + +def find_effective_match( + codes: List[DiffOpcode], orig_asm: List[str], recomp_asm: List[str] +) -> bool: + """Check whether the two sequences of instructions are an effective match. + Meaning: do they differ only by instruction order or register selection?""" + if not effective_match_possible(orig_asm, recomp_asm): + return False + + already_equal = { + j for code, _, __, j1, j2 in codes for j in range(j1, j2) if code == "equal" + } + + # We need to come up with some answer for each of these lines + recomp_lines_disputed = { + j + for code, _, __, j1, j2 in codes + for j in range(j1, j2) + if code in ("insert", "replace") + } + + cmp_swaps = patch_cmp_swaps(codes, orig_asm, recomp_asm) + # This naive result includes lines that already match, so remove those + naive_swaps = naive_register_replacement(orig_asm, recomp_asm).difference( + already_equal + ) + relocates = relocate_instructions(codes, orig_asm, recomp_asm) + + bad_swaps = bad_register_swaps(naive_swaps, orig_asm, recomp_asm) + + corrections = set().union( + naive_swaps.difference(bad_swaps), + cmp_swaps, + relocates, + ) + + return corrections.issuperset(recomp_lines_disputed) + + +def assert_fixup(asm: List[Tuple[str, str]]): + """Detect assert calls and replace the code filename and line number + values with macros (from assert.h).""" + for i, (_, line) in enumerate(asm): + if "_assert" in line and line.startswith("call"): + try: + asm[i - 3] = (asm[i - 3][0], "push __LINE__") + asm[i - 2] = (asm[i - 2][0], "push __FILE__") + except IndexError: + continue diff --git a/tools/isledecomp/isledecomp/compare/asm/instgen.py b/tools/isledecomp/isledecomp/compare/asm/instgen.py new file mode 100644 index 00000000..c65aa033 --- /dev/null +++ b/tools/isledecomp/isledecomp/compare/asm/instgen.py @@ -0,0 +1,249 @@ +"""Pre-parser for x86 instructions. Will identify data/jump tables used with +switch statements and local jump/call destinations.""" +import re +import bisect +import struct +from enum import Enum, auto +from collections import namedtuple +from typing import Iterable, List, NamedTuple, Optional, Tuple, Union +from capstone import Cs, CS_ARCH_X86, CS_MODE_32 +from .const import JUMP_MNEMONICS + +disassembler = Cs(CS_ARCH_X86, CS_MODE_32) + +DisasmLiteTuple = Tuple[int, int, str, str] +DisasmLiteInst = namedtuple("DisasmLiteInst", "address, size, mnemonic, op_str") + +displacement_regex = re.compile(r".*\+ (0x[0-9a-f]+)\]") + + +class SectionType(Enum): + CODE = auto() + DATA_TAB = auto() + ADDR_TAB = auto() + + +class FuncSection(NamedTuple): + type: SectionType + contents: List[Union[DisasmLiteInst, Tuple[str, int]]] + + +def stop_at_int3( + disasm_lite_gen: Iterable[DisasmLiteTuple], +) -> Iterable[DisasmLiteTuple]: + """Wrapper for capstone disasm_lite generator. We want to stop reading + instructions if we hit the int3 instruction.""" + for inst in disasm_lite_gen: + # inst[2] is the mnemonic + if inst[2] == "int3": + break + + yield inst + + +class InstructGen: + # pylint: disable=too-many-instance-attributes + def __init__(self, blob: bytes, start: int) -> None: + self.blob = blob + self.start = start + self.end = len(blob) + start + self.section_end: int = self.end + self.code_tracks: List[List[DisasmLiteInst]] = [] + + # Todo: Could be refactored later + self.cur_addr: int = 0 + self.cur_section_type: SectionType = SectionType.CODE + self.section_start = start + + self.sections: List[FuncSection] = [] + + self.confirmed_addrs = {} + self.analysis() + + def _finish_section(self, type_: SectionType, stuff): + sect = FuncSection(type_, stuff) + self.sections.append(sect) + + def _insert_confirmed_addr(self, addr: int, type_: SectionType): + # Ignore address outside the bounds of the function + if not self.start <= addr < self.end: + return + + self.confirmed_addrs[addr] = type_ + + # This newly inserted address might signal the end of this section. + # For example, a jump table at the end of the function means we should + # stop reading instructions once we hit that address. + # However, if there is a jump table in between code sections, we might + # read a jump to an address back to the beginning of the function + # (e.g. a loop that spans the entire function) + # so ignore this address because we have already passed it. + if type_ != self.cur_section_type and addr > self.cur_addr: + self.section_end = min(self.section_end, addr) + + def _next_section(self, addr: int) -> Optional[SectionType]: + """We have reached the start of a new section. Tell what kind of + data we are looking at (code or other) and how much we should read.""" + + # Assume the start of every function is code. + if addr == self.start: + self.section_end = self.end + return SectionType.CODE + + # The start of a new section must be an address that we've seen. + new_type = self.confirmed_addrs.get(addr) + if new_type is None: + return None + + self.cur_section_type = new_type + + # The confirmed addrs dict is sorted by insertion order + # i.e. the order in which we read the addresses + # So we have to sort and then find the next item + # to see where this section should end. + + # If we are in a CODE section, ignore contiguous CODE addresses. + # These are not the start of a new section. + # However: if we are not in CODE, any upcoming address is a new section. + # Do this so we can detect contiguous non-CODE sections. + confirmed = [ + conf_addr + for (conf_addr, conf_type) in sorted(self.confirmed_addrs.items()) + if self.cur_section_type != SectionType.CODE + or conf_type != self.cur_section_type + ] + + index = bisect.bisect_right(confirmed, addr) + if index < len(confirmed): + self.section_end = confirmed[index] + else: + self.section_end = self.end + + return new_type + + def _get_code_for(self, addr: int) -> List[DisasmLiteInst]: + """Start disassembling at the given address.""" + # If we are reading a code block beyond the first, see if we already + # have disassembled instructions beginning at the specified address. + # For a CODE/ADDR/CODE function, we might get lucky and produce the + # correct instruction after the jump table's junk instructions. + for track in self.code_tracks: + for i, inst in enumerate(track): + if inst.address == addr: + return track[i:] + + # If we are here, we don't have the instructions. + # Todo: Could try to be clever here and disassemble only + # as much as we probably need (i.e. if a jump table is between CODE + # blocks, there are probably only a few bad instructions after the + # jump table is finished. We could disassemble up to the next verified + # code address and stitch it together) + + blob_cropped = self.blob[addr - self.start :] + instructions = [ + DisasmLiteInst(*inst) + for inst in stop_at_int3(disassembler.disasm_lite(blob_cropped, addr)) + ] + self.code_tracks.append(instructions) + return instructions + + def _handle_jump(self, inst: DisasmLiteInst): + # If this is a regular jump and its destination is within the + # bounds of the binary data (i.e. presumed function size) + # add it to our list of confirmed addresses. + if inst.op_str[0] == "0": + value = int(inst.op_str, 16) + self._insert_confirmed_addr(value, SectionType.CODE) + + # If this is jumping into a table of addresses, save the destination + elif (match := displacement_regex.match(inst.op_str)) is not None: + value = int(match.group(1), 16) + self._insert_confirmed_addr(value, SectionType.ADDR_TAB) + + def analysis(self): + self.cur_addr = self.start + + while (sect_type := self._next_section(self.cur_addr)) is not None: + self.section_start = self.cur_addr + + if sect_type == SectionType.CODE: + instructions = self._get_code_for(self.cur_addr) + + # If we didn't get any instructions back, something is wrong. + # i.e. We can only read part of the full instruction that is up next. + if len(instructions) == 0: + # Nudge the current addr so we will eventually move on to the + # next section. + # Todo: Maybe we could just call it quits here + self.cur_addr += 1 + break + + for inst in instructions: + # section_end is updated as we read instructions. + # If we are into a jump/data table and would read + # a junk instruction, stop here. + if self.cur_addr >= self.section_end: + break + + # print(f"{inst.address:x} : {inst.mnemonic} {inst.op_str}") + + if inst.mnemonic in JUMP_MNEMONICS: + self._handle_jump(inst) + # Todo: log calls too (unwind section) + elif inst.mnemonic == "mov": + # Todo: maintain pairing of data/jump tables + if (match := displacement_regex.match(inst.op_str)) is not None: + value = int(match.group(1), 16) + self._insert_confirmed_addr(value, SectionType.DATA_TAB) + + # Do this instead of copying instruction address. + # If there is only one instruction, we would get stuck here. + self.cur_addr += inst.size + + # End of for loop on instructions. + # We are at the end of the section or the entire function. + # Cut out only the valid instructions for this section + # and save it for later. + + # Todo: don't need to iter on every instruction here. + # They are already in order. + instruction_slice = [ + inst for inst in instructions if inst.address < self.section_end + ] + self._finish_section(SectionType.CODE, instruction_slice) + + elif sect_type == SectionType.ADDR_TAB: + # Clamp to multiple of 4 (dwords) + read_size = ((self.section_end - self.cur_addr) // 4) * 4 + offsets = range(self.section_start, self.section_start + read_size, 4) + dwords = self.blob[ + self.cur_addr - self.start : self.cur_addr - self.start + read_size + ] + addrs = [addr for addr, in struct.iter_unpack(" {t1:x}") + + self._finish_section(SectionType.ADDR_TAB, jump_table) + self.cur_addr = self.section_end + + else: + # Todo: variable data size? + read_size = self.section_end - self.cur_addr + offsets = range(self.section_start, self.section_start + read_size) + bytes_ = self.blob[ + self.cur_addr - self.start : self.cur_addr - self.start + read_size + ] + data = [b for b, in struct.iter_unpack(" Optional[int]: + try: + return int(string, 16) + except ValueError: + pass + + return None + + +def bytes_to_dword(b: bytes) -> Optional[int]: + if len(b) == 4: + return struct.unpack(" None: + self.relocate_lookup = relocate_lookup + self.name_lookup = name_lookup + self.bin_lookup = bin_lookup + self.replacements = {} + self.number_placeholders = True + + def reset(self): + self.replacements = {} + + def is_relocated(self, addr: int) -> bool: + if callable(self.relocate_lookup): + return self.relocate_lookup(addr) + + return False + + def lookup( + self, addr: int, use_cache: bool = True, exact: bool = False + ) -> Optional[str]: + """Return a replacement name for this address if we find one.""" + if use_cache and (cached := self.replacements.get(addr, None)) is not None: + return cached + + if callable(self.name_lookup): + if (name := self.name_lookup(addr, exact)) is not None: + if use_cache: + self.replacements[addr] = name + + return name + + return None + + def replace(self, addr: int) -> str: + """Same function as lookup above, but here we return a placeholder + if there is no better name to use.""" + if (name := self.lookup(addr)) is not None: + return name + + # The placeholder number corresponds to the number of addresses we have + # already replaced. This is so the number will be consistent across the diff + # if we can replace some symbols with actual names in recomp but not orig. + idx = len(self.replacements) + 1 + placeholder = f"" if self.number_placeholders else "" + self.replacements[addr] = placeholder + return placeholder + + def hex_replace_always(self, match: re.Match) -> str: + """If a pointer value was matched, always insert a placeholder""" + value = int(match.group(1), 16) + return match.group(0).replace(match.group(1), self.replace(value)) + + def hex_replace_relocated(self, match: re.Match) -> str: + """For replacing immediate value operands. We only want to + use the placeholder if we are certain that this is a valid address. + We can check the relocation table to find out.""" + value = int(match.group(1), 16) + if self.is_relocated(value): + return match.group(0).replace(match.group(1), self.replace(value)) + + return match.group(0) + + def hex_replace_annotated(self, match: re.Match) -> str: + """For replacing immediate value operands. Here we replace the value + only if the name lookup returns something. Do not use a placeholder.""" + value = int(match.group(1), 16) + placeholder = self.lookup(value, use_cache=False) + if placeholder is not None: + return match.group(0).replace(match.group(1), placeholder) + + return match.group(0) + + def hex_replace_indirect(self, match: re.Match) -> str: + """Edge case for hex_replace_always. The context of the instruction + tells us that the pointer value is an absolute indirect. + So we go to that location in the binary to get the address. + If we cannot identify the indirect address, fall back to a lookup + on the original pointer value so we might display something useful.""" + value = int(match.group(1), 16) + indirect_value = None + + if callable(self.bin_lookup): + indirect_value = self.bin_lookup(value, 4) + + if indirect_value is not None: + indirect_addr = bytes_to_dword(indirect_value) + if ( + indirect_addr is not None + and self.lookup(indirect_addr, use_cache=False) is not None + ): + return match.group(0).replace( + match.group(1), "->" + self.replace(indirect_addr) + ) + + return match.group(0).replace(match.group(1), self.replace(value)) + + def sanitize(self, inst: DisasmLiteInst) -> Tuple[str, str]: + # For jumps or calls, if the entire op_str is a hex number, the value + # is a relative offset. + # Otherwise (i.e. it looks like `dword ptr [address]`) it is an + # absolute indirect that we will handle below. + # Providing the starting address of the function to capstone.disasm has + # automatically resolved relative offsets to an absolute address. + # We will have to undo this for some of the jumps or they will not match. + + if ( + inst.mnemonic in SINGLE_OPERAND_INSTS + and (op_str_address := from_hex(inst.op_str)) is not None + ): + if inst.mnemonic == "call": + return (inst.mnemonic, self.replace(op_str_address)) + + if inst.mnemonic == "push": + if self.is_relocated(op_str_address): + return (inst.mnemonic, self.replace(op_str_address)) + + # To avoid falling into jump handling + return (inst.mnemonic, inst.op_str) + + if inst.mnemonic == "jmp": + # The unwind section contains JMPs to other functions. + # If we have a name for this address, use it. If not, + # do not create a new placeholder. We will instead + # fall through to generic jump handling below. + potential_name = self.lookup(op_str_address, exact=True) + if potential_name is not None: + return (inst.mnemonic, potential_name) + + # Else: this is any jump + # Show the jump offset rather than the absolute address + jump_displacement = op_str_address - (inst.address + inst.size) + return (inst.mnemonic, hex(jump_displacement)) + + if inst.mnemonic == "call": + # Special handling for absolute indirect CALL. + op_str = ptr_replace_regex.sub(self.hex_replace_indirect, inst.op_str) + else: + op_str = ptr_replace_regex.sub(self.hex_replace_always, inst.op_str) + + # We only want relocated addresses for pointer displacement. + # i.e. ptr [register + something] + # Otherwise we would use a placeholder for every stack variable, + # vtable call, or this->member access. + op_str = displace_replace_regex.sub(self.hex_replace_relocated, op_str) + + # In the event of pointer comparison, only replace the immediate value + # if it is a known address. + if inst.mnemonic == "cmp": + op_str = immediate_replace_regex.sub(self.hex_replace_annotated, op_str) + else: + op_str = immediate_replace_regex.sub(self.hex_replace_relocated, op_str) + + return (inst.mnemonic, op_str) + + def parse_asm(self, data: bytes, start_addr: Optional[int] = 0) -> List[str]: + asm = [] + + ig = InstructGen(data, start_addr) + + for sect_type, sect_contents in ig.sections: + if sect_type == SectionType.CODE: + for inst in sect_contents: + # Use heuristics to disregard some differences that aren't representative + # of the accuracy of a function (e.g. global offsets) + + # If there is no pointer or immediate value in the op_str, + # there is nothing to sanitize. + # This leaves us with cases where a small immediate value or + # small displacement (this.member or vtable calls) appears. + # If we assume that instructions we want to sanitize need to be 5 + # bytes -- 1 for the opcode and 4 for the address -- exclude cases + # where the hex value could not be an address. + # The exception is jumps which are as small as 2 bytes + # but are still useful to sanitize. + if "0x" in inst.op_str and ( + inst.mnemonic in JUMP_MNEMONICS or inst.size > 4 + ): + result = self.sanitize(inst) + else: + result = (inst.mnemonic, inst.op_str) + + # mnemonic + " " + op_str + asm.append((hex(inst.address), " ".join(result))) + elif sect_type == SectionType.ADDR_TAB: + asm.append(("", "Jump table:")) + for i, (ofs, _) in enumerate(sect_contents): + asm.append((hex(ofs), f"Jump_dest_{i}")) + + elif sect_type == SectionType.DATA_TAB: + asm.append(("", "Data table:")) + for ofs, b in sect_contents: + asm.append((hex(ofs), hex(b))) + + return asm diff --git a/tools/isledecomp/isledecomp/compare/asm/swap.py b/tools/isledecomp/isledecomp/compare/asm/swap.py new file mode 100644 index 00000000..599444cf --- /dev/null +++ b/tools/isledecomp/isledecomp/compare/asm/swap.py @@ -0,0 +1,80 @@ +import re + +REGISTER_LIST = set( + [ + "ax", + "bp", + "bx", + "cx", + "di", + "dx", + "eax", + "ebp", + "ebx", + "ecx", + "edi", + "edx", + "esi", + "esp", + "si", + "sp", + ] +) +WORDS = re.compile(r"\w+") + + +def get_registers(line: str): + to_replace = [] + # use words regex to find all matching positions: + for match in WORDS.finditer(line): + reg = match.group(0) + if reg in REGISTER_LIST: + to_replace.append((reg, match.start())) + return to_replace + + +def replace_register( + lines: list[str], start_line: int, reg: str, replacement: str +) -> list[str]: + return [ + line.replace(reg, replacement) if i >= start_line else line + for i, line in enumerate(lines) + ] + + +# Is it possible to make new_asm the same as original_asm by swapping registers? +def can_resolve_register_differences(original_asm, new_asm): + # Split the ASM on spaces to get more granularity, and so + # that we don't modify the original arrays passed in. + original_asm = [part for line in original_asm for part in line.split()] + new_asm = [part for line in new_asm for part in line.split()] + + # Swapping ain't gonna help if the lengths are different + if len(original_asm) != len(new_asm): + return False + + # Look for the mismatching lines + for i, original_line in enumerate(original_asm): + new_line = new_asm[i] + if new_line != original_line: + # Find all the registers to replace + to_replace = get_registers(original_line) + + for replace in to_replace: + (reg, reg_index) = replace + replacing_reg = new_line[reg_index : reg_index + len(reg)] + if replacing_reg in REGISTER_LIST: + if replacing_reg != reg: + # Do a three-way swap replacing in all the subsequent lines + temp_reg = "&" * len(reg) + new_asm = replace_register(new_asm, i, replacing_reg, temp_reg) + new_asm = replace_register(new_asm, i, reg, replacing_reg) + new_asm = replace_register(new_asm, i, temp_reg, reg) + else: + # No replacement to do, different code, bail out + return False + # Check if the lines are now the same + for i, original_line in enumerate(original_asm): + if new_asm[i] != original_line: + return False + return True diff --git a/tools/isledecomp/isledecomp/compare/core.py b/tools/isledecomp/isledecomp/compare/core.py new file mode 100644 index 00000000..c44f3987 --- /dev/null +++ b/tools/isledecomp/isledecomp/compare/core.py @@ -0,0 +1,914 @@ +import os +import logging +import difflib +import struct +import uuid +from dataclasses import dataclass +from typing import Any, Callable, Iterable, List, Optional +from isledecomp.bin import Bin as IsleBin, InvalidVirtualAddressError +from isledecomp.cvdump.demangler import demangle_string_const +from isledecomp.cvdump import Cvdump, CvdumpAnalysis +from isledecomp.cvdump.types import scalar_type_pointer +from isledecomp.parser import DecompCodebase +from isledecomp.dir import walk_source_dir +from isledecomp.types import SymbolType +from isledecomp.compare.asm import ParseAsm +from isledecomp.compare.asm.fixes import assert_fixup, find_effective_match +from .db import CompareDb, MatchInfo +from .diff import combined_diff +from .lines import LinesDb + + +logger = logging.getLogger(__name__) + + +@dataclass +class DiffReport: + # pylint: disable=too-many-instance-attributes + match_type: SymbolType + orig_addr: int + recomp_addr: int + name: str + udiff: Optional[List[str]] = None + ratio: float = 0.0 + is_effective_match: bool = False + is_stub: bool = False + + @property + def effective_ratio(self) -> float: + return 1.0 if self.is_effective_match else self.ratio + + def __str__(self) -> str: + """For debug purposes. Proper diff printing (with coloring) is in another module.""" + return f"{self.name} (0x{self.orig_addr:x}) {self.ratio*100:.02f}%{'*' if self.is_effective_match else ''}" + + +def create_reloc_lookup(bin_file: IsleBin) -> Callable[[int], bool]: + """Function generator for relocation table lookup""" + + def lookup(addr: int) -> bool: + return addr > bin_file.imagebase and bin_file.is_relocated_addr(addr) + + return lookup + + +def create_bin_lookup(bin_file: IsleBin) -> Callable[[int, int], Optional[str]]: + """Function generator for reading from the bin file""" + + def lookup(addr: int, size: int) -> Optional[bytes]: + try: + return bin_file.read(addr, size) + except InvalidVirtualAddressError: + return None + + return lookup + + +class Compare: + # pylint: disable=too-many-instance-attributes + def __init__( + self, orig_bin: IsleBin, recomp_bin: IsleBin, pdb_file: str, code_dir: str + ): + self.orig_bin = orig_bin + self.recomp_bin = recomp_bin + self.pdb_file = pdb_file + self.code_dir = code_dir + # Controls whether we dump the asm output to a file + self.debug: bool = False + self.runid: str = uuid.uuid4().hex[:8] + + self._lines_db = LinesDb(code_dir) + self._db = CompareDb() + + self._load_cvdump() + self._load_markers() + # Detect floats first to eliminate potential overlap with string data + self._find_float_const() + self._find_original_strings() + self._match_imports() + self._match_exports() + self._match_thunks() + self._find_vtordisp() + + def _load_cvdump(self): + logger.info("Parsing %s ...", self.pdb_file) + self.cv = ( + Cvdump(self.pdb_file) + .lines() + .globals() + .publics() + .symbols() + .section_contributions() + .types() + .run() + ) + self.cvdump_analysis = CvdumpAnalysis(self.cv) + + for sym in self.cvdump_analysis.nodes: + # Skip nodes where we have almost no information. + # These probably came from SECTION CONTRIBUTIONS. + if sym.name() is None and sym.node_type is None: + continue + + # The PDB might contain sections that do not line up with the + # actual binary. The symbol "__except_list" is one example. + # In these cases, just skip this symbol and move on because + # we can't do much with it. + if not self.recomp_bin.is_valid_section(sym.section): + continue + + addr = self.recomp_bin.get_abs_addr(sym.section, sym.offset) + sym.addr = addr + + # If this symbol is the final one in its section, we were not able to + # estimate its size because we didn't have the total size of that section. + # We can get this estimate now and assume that the final symbol occupies + # the remainder of the section. + if sym.estimated_size is None: + sym.estimated_size = ( + self.recomp_bin.get_section_extent_by_index(sym.section) + - sym.offset + ) + + if sym.node_type == SymbolType.STRING: + string_info = demangle_string_const(sym.decorated_name) + if string_info is None: + logger.debug( + "Could not demangle string symbol: %s", sym.decorated_name + ) + continue + + # TODO: skip unicode for now. will need to handle these differently. + if string_info.is_utf16: + continue + + raw = self.recomp_bin.read(addr, sym.size()) + try: + # We use the string length reported in the mangled symbol as the + # data size, but this is not always accurate with respect to the + # null terminator. + # e.g. ??_C@_0BA@EFDM@MxObjectFactory?$AA@ + # reported length: 16 (includes null terminator) + # c.f. ??_C@_03DPKJ@enz?$AA@ + # reported length: 3 (does NOT include terminator) + # This will handle the case where the entire string contains "\x00" + # because those are distinct from the empty string of length 0. + decoded_string = raw.decode("latin1") + rstrip_string = decoded_string.rstrip("\x00") + + if decoded_string != "" and rstrip_string != "": + sym.friendly_name = rstrip_string + else: + sym.friendly_name = decoded_string + + except UnicodeDecodeError: + pass + + self._db.set_recomp_symbol( + addr, sym.node_type, sym.name(), sym.decorated_name, sym.size() + ) + + for (section, offset), ( + filename, + line_no, + ) in self.cvdump_analysis.verified_lines.items(): + addr = self.recomp_bin.get_abs_addr(section, offset) + self._lines_db.add_line(filename, line_no, addr) + + # The _entry symbol is referenced in the PE header so we get this match for free. + self._db.set_function_pair(self.orig_bin.entry, self.recomp_bin.entry) + + def _load_markers(self): + # Assume module name is the base filename of the original binary. + (module, _) = os.path.splitext(os.path.basename(self.orig_bin.filename)) + + codefiles = list(walk_source_dir(self.code_dir)) + codebase = DecompCodebase(codefiles, module.upper()) + + def orig_bin_checker(addr: int) -> bool: + return self.orig_bin.is_valid_vaddr(addr) + + # If the address of any annotation would cause an exception, + # remove it and report an error. + bad_annotations = codebase.prune_invalid_addrs(orig_bin_checker) + + for sym in bad_annotations: + logger.error( + "Invalid address 0x%x on %s annotation in file: %s", + sym.offset, + sym.type.name, + sym.filename, + ) + + # Match lineref functions first because this is a guaranteed match. + # If we have two functions that share the same name, and one is + # a lineref, we can match the nameref correctly because the lineref + # was already removed from consideration. + for fun in codebase.iter_line_functions(): + recomp_addr = self._lines_db.search_line(fun.filename, fun.line_number) + if recomp_addr is not None: + self._db.set_function_pair(fun.offset, recomp_addr) + if fun.should_skip(): + self._db.mark_stub(fun.offset) + + for fun in codebase.iter_name_functions(): + self._db.match_function(fun.offset, fun.name) + if fun.should_skip(): + self._db.mark_stub(fun.offset) + + for var in codebase.iter_variables(): + if var.is_static and var.parent_function is not None: + self._db.match_static_variable( + var.offset, var.name, var.parent_function + ) + else: + if self._db.match_variable(var.offset, var.name): + self._check_if_array_and_match_elements(var.offset, var.name) + + for tbl in codebase.iter_vtables(): + self._db.match_vtable(tbl.offset, tbl.name, tbl.base_class) + + for string in codebase.iter_strings(): + # Not that we don't trust you, but we're checking the string + # annotation to make sure it is accurate. + try: + # TODO: would presumably fail for wchar_t strings + orig = self.orig_bin.read_string(string.offset).decode("latin1") + string_correct = string.name == orig + except UnicodeDecodeError: + string_correct = False + + if not string_correct: + logger.error( + "Data at 0x%x does not match string %s", + string.offset, + repr(string.name), + ) + continue + + self._db.match_string(string.offset, string.name) + + def _check_if_array_and_match_elements(self, orig_addr: int, name: str): + """ + Checks if the global variable at `orig_addr` is an array. + If yes, adds a match for all its elements. If it is an array of structs, all fields in that struct are also matched. + Note that there is no recursion, so an array of arrays would not be handled entirely. + This step is necessary e.g. for `0x100f0a20` (LegoRacers.cpp). + """ + + def _add_match_in_array( + name: str, type_id: str, orig_addr: int, recomp_addr: int + ): + self._db.set_recomp_symbol( + recomp_addr, + SymbolType.POINTER if scalar_type_pointer(type_id) else SymbolType.DATA, + name, + name, + # we only need the matches when they are referenced elsewhere, hence we don't need the size + size=None, + ) + self._db.set_pair(orig_addr, recomp_addr) + + matchinfo = self._db.get_by_orig(orig_addr) + if matchinfo is None or matchinfo.recomp_addr is None: + return + recomp_addr = matchinfo.recomp_addr + + node = next( + (x for x in self.cvdump_analysis.nodes if x.addr == recomp_addr), + None, + ) + if node is None or node.data_type is None: + return + + if not node.data_type.key.startswith("0x"): + # scalar type, so clearly not an array + return + + data_type = self.cv.types.keys[node.data_type.key.lower()] + + if data_type["type"] == "LF_ARRAY": + array_element_type = self.cv.types.get(data_type["array_type"]) + + assert node.data_type.members is not None + + for array_element in node.data_type.members: + orig_element_base_addr = orig_addr + array_element.offset + recomp_element_base_addr = recomp_addr + array_element.offset + if array_element_type.members is None: + _add_match_in_array( + f"{name}{array_element.name}", + array_element_type.key, + orig_element_base_addr, + recomp_element_base_addr, + ) + else: + for member in array_element_type.members: + _add_match_in_array( + f"{name}{array_element.name}.{member.name}", + array_element_type.key, + orig_element_base_addr + member.offset, + recomp_element_base_addr + member.offset, + ) + + def _find_original_strings(self): + """Go to the original binary and look for the specified string constants + to find a match. This is a (relatively) expensive operation so we only + look at strings that we have not already matched via a STRING annotation.""" + # Release builds give each de-duped string a symbol so they are easy to find and match. + for string in self._db.get_unmatched_strings(): + addr = self.orig_bin.find_string(string.encode("latin1")) + if addr is None: + escaped = repr(string) + logger.debug("Failed to find this string in the original: %s", escaped) + continue + + self._db.match_string(addr, string) + + def is_real_string(s: str) -> bool: + """Heuristic to ignore values that only look like strings. + This is mostly about short strings (len <= 4) that could be byte or word values. + """ + # 0x10 is the MSB of the address space for DLLs (LEGO1), so this is a pointer + if len(s) == 0 or "\x10" in s: + return False + + # assert(0) is common + if len(s) == 1 and s[0] != "0": + return False + + # Hack because str.isprintable() will fail on strings with newlines or tabs + if len(s) <= 4 and "\\x" in repr(s): + return False + + return True + + # Debug builds do not de-dupe the strings, so we need to find them via brute force scan. + # We could try to match the string addrs if there is only one in orig and recomp. + # When we sanitize the asm, the result is the same regardless. + if self.orig_bin.is_debug: + for addr, string in self.orig_bin.iter_string("latin1"): + if is_real_string(string): + self._db.set_orig_symbol( + addr, SymbolType.STRING, string, len(string) + ) + + for addr, string in self.recomp_bin.iter_string("latin1"): + if is_real_string(string): + self._db.set_recomp_symbol( + addr, SymbolType.STRING, string, None, len(string) + ) + + def _find_float_const(self): + """Add floating point constants in each binary to the database. + We are not matching anything right now because these values are not + deduped like strings.""" + for addr, size, float_value in self.orig_bin.find_float_consts(): + self._db.set_orig_symbol(addr, SymbolType.FLOAT, str(float_value), size) + + for addr, size, float_value in self.recomp_bin.find_float_consts(): + self._db.set_recomp_symbol( + addr, SymbolType.FLOAT, str(float_value), None, size + ) + + def _match_imports(self): + """We can match imported functions based on the DLL name and + function symbol name.""" + orig_byaddr = { + addr: (dll.upper(), name) for (dll, name, addr) in self.orig_bin.imports + } + recomp_byname = { + (dll.upper(), name): addr for (dll, name, addr) in self.recomp_bin.imports + } + # Combine these two dictionaries. We don't care about imports from recomp + # not found in orig because: + # 1. They shouldn't be there + # 2. They are already identified via cvdump + orig_to_recomp = { + addr: recomp_byname.get(pair, None) for addr, pair in orig_byaddr.items() + } + + # Now: we have the IAT offset in each matched up, so we need to make + # the connection between the thunk functions. + # We already have the symbol name we need from the PDB. + for orig, recomp in orig_to_recomp.items(): + if orig is None or recomp is None: + continue + + # Match the __imp__ symbol + self._db.set_pair(orig, recomp, SymbolType.POINTER) + + # Read the relative address from .idata + try: + (recomp_rva,) = struct.unpack(" DiffReport: + # Detect when the recomp function size would cause us to read + # enough bytes from the original function that we cross into + # the next annotated function. + next_orig = self._db.get_next_orig_addr(match.orig_addr) + if next_orig is not None: + orig_size = min(next_orig - match.orig_addr, match.size) + else: + orig_size = match.size + + orig_raw = self.orig_bin.read(match.orig_addr, orig_size) + recomp_raw = self.recomp_bin.read(match.recomp_addr, match.size) + + # It's unlikely that a function other than an adjuster thunk would + # start with a SUB instruction, so alert to a possible wrong + # annotation here. + # There's probably a better place to do this, but we're reading + # the function bytes here already. + try: + if orig_raw[0] == 0x2B and recomp_raw[0] != 0x2B: + logger.warning( + "Possible thunk at 0x%x (%s)", match.orig_addr, match.name + ) + except IndexError: + pass + + def orig_lookup(addr: int, exact: bool) -> Optional[str]: + m = self._db.get_by_orig(addr, exact) + if m is None: + return None + + if m.orig_addr == addr: + return m.match_name() + + offset = addr - m.orig_addr + if m.compare_type != SymbolType.DATA or offset >= m.size: + return None + + return m.offset_name(offset) + + def recomp_lookup(addr: int, exact: bool) -> Optional[str]: + m = self._db.get_by_recomp(addr, exact) + if m is None: + return None + + if m.recomp_addr == addr: + return m.match_name() + + offset = addr - m.recomp_addr + if m.compare_type != SymbolType.DATA or offset >= m.size: + return None + + return m.offset_name(offset) + + orig_should_replace = create_reloc_lookup(self.orig_bin) + recomp_should_replace = create_reloc_lookup(self.recomp_bin) + + orig_bin_lookup = create_bin_lookup(self.orig_bin) + recomp_bin_lookup = create_bin_lookup(self.recomp_bin) + + orig_parse = ParseAsm( + relocate_lookup=orig_should_replace, + name_lookup=orig_lookup, + bin_lookup=orig_bin_lookup, + ) + recomp_parse = ParseAsm( + relocate_lookup=recomp_should_replace, + name_lookup=recomp_lookup, + bin_lookup=recomp_bin_lookup, + ) + + orig_combined = orig_parse.parse_asm(orig_raw, match.orig_addr) + recomp_combined = recomp_parse.parse_asm(recomp_raw, match.recomp_addr) + + if self.debug: + self._dump_asm(orig_combined, recomp_combined) + + # Check for assert calls only if we expect to find them + if self.orig_bin.is_debug or self.recomp_bin.is_debug: + assert_fixup(orig_combined) + assert_fixup(recomp_combined) + + # Detach addresses from asm lines for the text diff. + orig_asm = [x[1] for x in orig_combined] + recomp_asm = [x[1] for x in recomp_combined] + + diff = difflib.SequenceMatcher(None, orig_asm, recomp_asm, autojunk=False) + ratio = diff.ratio() + + if ratio != 1.0: + # Check whether we can resolve register swaps which are actually + # perfect matches modulo compiler entropy. + codes = diff.get_opcodes() + is_effective_match = find_effective_match(codes, orig_asm, recomp_asm) + unified_diff = combined_diff( + diff, orig_combined, recomp_combined, context_size=10 + ) + else: + is_effective_match = False + unified_diff = [] + + return DiffReport( + match_type=SymbolType.FUNCTION, + orig_addr=match.orig_addr, + recomp_addr=match.recomp_addr, + name=match.name, + udiff=unified_diff, + ratio=ratio, + is_effective_match=is_effective_match, + ) + + def _compare_vtable(self, match: MatchInfo) -> DiffReport: + vtable_size = match.size + + # The vtable size should always be a multiple of 4 because that + # is the pointer size. If it is not (for whatever reason) + # it would cause iter_unpack to blow up so let's just fix it. + if vtable_size % 4 != 0: + logger.warning( + "Vtable for class %s has irregular size %d", match.name, vtable_size + ) + vtable_size = 4 * (vtable_size // 4) + + orig_table = self.orig_bin.read(match.orig_addr, vtable_size) + recomp_table = self.recomp_bin.read(match.recomp_addr, vtable_size) + + raw_addrs = zip( + [t for (t,) in struct.iter_unpack(" str: + """Format the function reference at this vtable index as text. + If we have not identified this function, we have the option to + display the raw address. This is only worth doing for the original addr + because we should always be able to identify the recomp function. + If the original function is missing then this probably means that the class + should override the given function from the superclass, but we have not + implemented this yet. + """ + + if m is not None: + orig = hex(m.orig_addr) if m.orig_addr is not None else "no orig" + recomp = ( + hex(m.recomp_addr) if m.recomp_addr is not None else "no recomp" + ) + return f"({orig} / {recomp}) : {m.name}" + + if raw_addr is not None: + return f"0x{raw_addr:x} from orig not annotated." + + return "(no match)" + + orig_text = [] + recomp_text = [] + ratio = 0 + n_entries = 0 + + # Now compare each pointer from the two vtables. + for i, (raw_orig, raw_recomp) in enumerate(raw_addrs): + orig = self._db.get_by_orig(raw_orig) + recomp = self._db.get_by_recomp(raw_recomp) + + if ( + orig is not None + and recomp is not None + and orig.recomp_addr == recomp.recomp_addr + ): + ratio += 1 + + n_entries += 1 + index = f"vtable0x{i*4:02x}" + orig_text.append((index, match_text(orig, raw_orig))) + recomp_text.append((index, match_text(recomp))) + + ratio = ratio / float(n_entries) if n_entries > 0 else 0 + + # n=100: Show the entire table if there is a diff to display. + # Otherwise it would be confusing if the table got cut off. + + sm = difflib.SequenceMatcher( + None, + [x[1] for x in orig_text], + [x[1] for x in recomp_text], + ) + + unified_diff = combined_diff(sm, orig_text, recomp_text, context_size=100) + + return DiffReport( + match_type=SymbolType.VTABLE, + orig_addr=match.orig_addr, + recomp_addr=match.recomp_addr, + name=match.name, + udiff=unified_diff, + ratio=ratio, + ) + + def _compare_match(self, match: MatchInfo) -> Optional[DiffReport]: + """Router for comparison type""" + + if match.size is None or match.size == 0: + return None + + options = self._db.get_match_options(match.orig_addr) + if options.get("skip", False): + return None + + if options.get("stub", False): + return DiffReport( + match_type=match.compare_type, + orig_addr=match.orig_addr, + recomp_addr=match.recomp_addr, + name=match.name, + is_stub=True, + ) + + if match.compare_type == SymbolType.FUNCTION: + return self._compare_function(match) + + if match.compare_type == SymbolType.VTABLE: + return self._compare_vtable(match) + + return None + + ## Public API + + def is_pointer_match(self, orig_addr, recomp_addr) -> bool: + """Check whether these pointers point at the same thing""" + + # Null pointers considered matching + if orig_addr == 0 and recomp_addr == 0: + return True + + match = self._db.get_by_orig(orig_addr) + if match is None: + return False + + return match.recomp_addr == recomp_addr + + def get_by_orig(self, addr: int) -> Optional[MatchInfo]: + return self._db.get_by_orig(addr) + + def get_by_recomp(self, addr: int) -> Optional[MatchInfo]: + return self._db.get_by_recomp(addr) + + def get_all(self) -> List[MatchInfo]: + return self._db.get_all() + + def get_functions(self) -> List[MatchInfo]: + return self._db.get_matches_by_type(SymbolType.FUNCTION) + + def get_vtables(self) -> List[MatchInfo]: + return self._db.get_matches_by_type(SymbolType.VTABLE) + + def get_variables(self) -> List[MatchInfo]: + return self._db.get_matches_by_type(SymbolType.DATA) + + def get_match_options(self, addr: int) -> Optional[dict[str, Any]]: + return self._db.get_match_options(addr) + + def compare_address(self, addr: int) -> Optional[DiffReport]: + match = self._db.get_one_match(addr) + if match is None: + return None + + return self._compare_match(match) + + def compare_all(self) -> Iterable[DiffReport]: + for match in self._db.get_matches(): + diff = self._compare_match(match) + if diff is not None: + yield diff + + def compare_functions(self) -> Iterable[DiffReport]: + for match in self.get_functions(): + diff = self._compare_match(match) + if diff is not None: + yield diff + + def compare_variables(self): + pass + + def compare_pointers(self): + pass + + def compare_strings(self): + pass + + def compare_vtables(self) -> Iterable[DiffReport]: + for match in self.get_vtables(): + diff = self._compare_match(match) + if diff is not None: + yield self._compare_match(match) diff --git a/tools/isledecomp/isledecomp/compare/db.py b/tools/isledecomp/isledecomp/compare/db.py new file mode 100644 index 00000000..ad030548 --- /dev/null +++ b/tools/isledecomp/isledecomp/compare/db.py @@ -0,0 +1,554 @@ +"""Wrapper for database (here an in-memory sqlite database) that collects the +addresses/symbols that we want to compare between the original and recompiled binaries.""" + +import sqlite3 +import logging +from typing import Any, List, Optional +from isledecomp.types import SymbolType +from isledecomp.cvdump.demangler import get_vtordisp_name + +_SETUP_SQL = """ + DROP TABLE IF EXISTS `symbols`; + DROP TABLE IF EXISTS `match_options`; + + CREATE TABLE `symbols` ( + compare_type int, + orig_addr int, + recomp_addr int, + name text, + decorated_name text, + size int + ); + + CREATE TABLE `match_options` ( + addr int not null, + name text not null, + value text, + primary key (addr, name) + ) without rowid; + + CREATE VIEW IF NOT EXISTS `match_info` + (compare_type, orig_addr, recomp_addr, name, size) AS + SELECT compare_type, orig_addr, recomp_addr, name, size + FROM `symbols` + ORDER BY orig_addr NULLS LAST; + + CREATE INDEX `symbols_or` ON `symbols` (orig_addr); + CREATE INDEX `symbols_re` ON `symbols` (recomp_addr); + CREATE INDEX `symbols_na` ON `symbols` (name); +""" + + +class MatchInfo: + def __init__( + self, + ctype: Optional[int], + orig: Optional[int], + recomp: Optional[int], + name: Optional[str], + size: Optional[int], + ) -> None: + self.compare_type = SymbolType(ctype) if ctype is not None else None + self.orig_addr = orig + self.recomp_addr = recomp + self.name = name + self.size = size + + def match_name(self) -> Optional[str]: + """Combination of the name and compare type. + Intended for name substitution in the diff. If there is a diff, + it will be more obvious what this symbol indicates.""" + if self.name is None: + return None + + ctype = self.compare_type.name if self.compare_type is not None else "UNK" + name = repr(self.name) if ctype == "STRING" else self.name + return f"{name} ({ctype})" + + def offset_name(self, ofs: int) -> Optional[str]: + if self.name is None: + return None + + return f"{self.name}+{ofs} (OFFSET)" + + +def matchinfo_factory(_, row): + return MatchInfo(*row) + + +logger = logging.getLogger(__name__) + + +class CompareDb: + # pylint: disable=too-many-public-methods + def __init__(self): + self._db = sqlite3.connect(":memory:") + self._db.executescript(_SETUP_SQL) + + def set_orig_symbol( + self, + addr: int, + compare_type: Optional[SymbolType], + name: Optional[str], + size: Optional[int], + ): + # Ignore collisions here. + if self._orig_used(addr): + return + + compare_value = compare_type.value if compare_type is not None else None + self._db.execute( + "INSERT INTO `symbols` (orig_addr, compare_type, name, size) VALUES (?,?,?,?)", + (addr, compare_value, name, size), + ) + + def set_recomp_symbol( + self, + addr: int, + compare_type: Optional[SymbolType], + name: Optional[str], + decorated_name: Optional[str], + size: Optional[int], + ): + # Ignore collisions here. The same recomp address can have + # multiple names (e.g. _strlwr and __strlwr) + if self._recomp_used(addr): + return + + compare_value = compare_type.value if compare_type is not None else None + self._db.execute( + "INSERT INTO `symbols` (recomp_addr, compare_type, name, decorated_name, size) VALUES (?,?,?,?,?)", + (addr, compare_value, name, decorated_name, size), + ) + + def get_unmatched_strings(self) -> List[str]: + """Return any strings not already identified by STRING markers.""" + + cur = self._db.execute( + "SELECT name FROM `symbols` WHERE compare_type = ? AND orig_addr IS NULL", + (SymbolType.STRING.value,), + ) + + return [string for (string,) in cur.fetchall()] + + def get_all(self) -> List[MatchInfo]: + cur = self._db.execute("SELECT * FROM `match_info`") + cur.row_factory = matchinfo_factory + + return cur.fetchall() + + def get_matches(self) -> Optional[MatchInfo]: + cur = self._db.execute( + """SELECT * FROM `match_info` + WHERE orig_addr IS NOT NULL + AND recomp_addr IS NOT NULL + """, + ) + cur.row_factory = matchinfo_factory + + return cur.fetchall() + + def get_one_match(self, addr: int) -> Optional[MatchInfo]: + cur = self._db.execute( + """SELECT * FROM `match_info` + WHERE orig_addr = ? + AND recomp_addr IS NOT NULL + """, + (addr,), + ) + cur.row_factory = matchinfo_factory + return cur.fetchone() + + def _get_closest_orig(self, addr: int) -> Optional[int]: + value = self._db.execute( + """SELECT max(orig_addr) FROM `symbols` + WHERE ? >= orig_addr + LIMIT 1 + """, + (addr,), + ).fetchone() + return value[0] if value is not None else None + + def _get_closest_recomp(self, addr: int) -> Optional[int]: + value = self._db.execute( + """SELECT max(recomp_addr) FROM `symbols` + WHERE ? >= recomp_addr + LIMIT 1 + """, + (addr,), + ).fetchone() + return value[0] if value is not None else None + + def get_by_orig(self, addr: int, exact: bool = True) -> Optional[MatchInfo]: + if not exact and not self._orig_used(addr): + addr = self._get_closest_orig(addr) + if addr is None: + return None + + cur = self._db.execute( + """SELECT * FROM `match_info` + WHERE orig_addr = ? + """, + (addr,), + ) + cur.row_factory = matchinfo_factory + return cur.fetchone() + + def get_by_recomp(self, addr: int, exact: bool = True) -> Optional[MatchInfo]: + if not exact and not self._recomp_used(addr): + addr = self._get_closest_recomp(addr) + if addr is None: + return None + + cur = self._db.execute( + """SELECT * FROM `match_info` + WHERE recomp_addr = ? + """, + (addr,), + ) + cur.row_factory = matchinfo_factory + return cur.fetchone() + + def get_matches_by_type(self, compare_type: SymbolType) -> List[MatchInfo]: + cur = self._db.execute( + """SELECT * FROM `match_info` + WHERE compare_type = ? + AND orig_addr IS NOT NULL + AND recomp_addr IS NOT NULL + """, + (compare_type.value,), + ) + cur.row_factory = matchinfo_factory + + return cur.fetchall() + + def _orig_used(self, addr: int) -> bool: + cur = self._db.execute("SELECT 1 FROM symbols WHERE orig_addr = ?", (addr,)) + return cur.fetchone() is not None + + def _recomp_used(self, addr: int) -> bool: + cur = self._db.execute("SELECT 1 FROM symbols WHERE recomp_addr = ?", (addr,)) + return cur.fetchone() is not None + + def set_pair( + self, orig: int, recomp: int, compare_type: Optional[SymbolType] = None + ) -> bool: + if self._orig_used(orig): + logger.debug("Original address %s not unique!", hex(orig)) + return False + + compare_value = compare_type.value if compare_type is not None else None + cur = self._db.execute( + "UPDATE `symbols` SET orig_addr = ?, compare_type = ? WHERE recomp_addr = ?", + (orig, compare_value, recomp), + ) + + return cur.rowcount > 0 + + def set_pair_tentative( + self, orig: int, recomp: int, compare_type: Optional[SymbolType] = None + ) -> bool: + """Declare a match for the original and recomp addresses given, but only if: + 1. The original address is not used elsewhere (as with set_pair) + 2. The recomp address has not already been matched + If the compare_type is given, update this also, but only if NULL in the db. + + The purpose here is to set matches found via some automated analysis + but to not overwrite a match provided by the human operator.""" + if self._orig_used(orig): + # Probable and expected situation. Just ignore it. + return False + + compare_value = compare_type.value if compare_type is not None else None + + cur = self._db.execute( + """UPDATE `symbols` + SET orig_addr = ?, compare_type = coalesce(compare_type, ?) + WHERE recomp_addr = ? + AND orig_addr IS NULL""", + (orig, compare_value, recomp), + ) + + return cur.rowcount > 0 + + def set_function_pair(self, orig: int, recomp: int) -> bool: + """For lineref match or _entry""" + return self.set_pair(orig, recomp, SymbolType.FUNCTION) + + def create_orig_thunk(self, addr: int, name: str) -> bool: + """Create a thunk function reference using the orig address. + We are here because we have a match on the thunked function, + but it is not thunked in the recomp build.""" + + if self._orig_used(addr): + return False + + thunk_name = f"Thunk of '{name}'" + + # Assuming relative jump instruction for thunks (5 bytes) + cur = self._db.execute( + """INSERT INTO `symbols` + (orig_addr, compare_type, name, size) + VALUES (?,?,?,?)""", + (addr, SymbolType.FUNCTION.value, thunk_name, 5), + ) + + return cur.rowcount > 0 + + def create_recomp_thunk(self, addr: int, name: str) -> bool: + """Create a thunk function reference using the recomp address. + We start from the recomp side for this because we are guaranteed + to have full information from the PDB. We can use a regular function + match later to pull in the orig address.""" + + if self._recomp_used(addr): + return False + + thunk_name = f"Thunk of '{name}'" + + # Assuming relative jump instruction for thunks (5 bytes) + cur = self._db.execute( + """INSERT INTO `symbols` + (recomp_addr, compare_type, name, size) + VALUES (?,?,?,?)""", + (addr, SymbolType.FUNCTION.value, thunk_name, 5), + ) + + return cur.rowcount > 0 + + def _set_opt_bool(self, addr: int, option: str, enabled: bool = True): + if enabled: + self._db.execute( + """INSERT OR IGNORE INTO `match_options` + (addr, name) + VALUES (?, ?)""", + (addr, option), + ) + else: + self._db.execute( + """DELETE FROM `match_options` WHERE addr = ? AND name = ?""", + (addr, option), + ) + + def mark_stub(self, orig: int): + self._set_opt_bool(orig, "stub") + + def skip_compare(self, orig: int): + self._set_opt_bool(orig, "skip") + + def get_match_options(self, addr: int) -> Optional[dict[str, Any]]: + cur = self._db.execute( + """SELECT name, value FROM `match_options` WHERE addr = ?""", (addr,) + ) + + return { + option: value if value is not None else True + for (option, value) in cur.fetchall() + } + + def is_vtordisp(self, recomp_addr: int) -> bool: + """Check whether this function is a vtordisp based on its + decorated name. If its demangled name is missing the vtordisp + indicator, correct that.""" + row = self._db.execute( + """SELECT name, decorated_name + FROM `symbols` + WHERE recomp_addr = ?""", + (recomp_addr,), + ).fetchone() + + if row is None: + return False + + (name, decorated_name) = row + if "`vtordisp" in name: + return True + + if decorated_name is None: + # happens in debug builds, e.g. for "Thunk of 'LegoAnimActor::ClassName'" + return False + + new_name = get_vtordisp_name(decorated_name) + if new_name is None: + return False + + self._db.execute( + """UPDATE `symbols` + SET name = ? + WHERE recomp_addr = ?""", + (new_name, recomp_addr), + ) + + return True + + def _find_potential_match( + self, name: str, compare_type: SymbolType + ) -> Optional[int]: + """Name lookup""" + match_decorate = compare_type != SymbolType.STRING and name.startswith("?") + if match_decorate: + sql = """ + SELECT recomp_addr + FROM `symbols` + WHERE orig_addr IS NULL + AND decorated_name = ? + AND (compare_type IS NULL OR compare_type = ?) + LIMIT 1 + """ + else: + sql = """ + SELECT recomp_addr + FROM `symbols` + WHERE orig_addr IS NULL + AND name = ? + AND (compare_type IS NULL OR compare_type = ?) + LIMIT 1 + """ + + row = self._db.execute(sql, (name, compare_type.value)).fetchone() + return row[0] if row is not None else None + + def _find_static_variable( + self, variable_name: str, function_sym: str + ) -> Optional[int]: + """Get the recomp address of a static function variable. + Matches using a LIKE clause on the combination of: + 1. The variable name read from decomp marker. + 2. The decorated name of the enclosing function. + For example, the variable "g_startupDelay" from function "IsleApp::Tick" + has symbol: `?g_startupDelay@?1??Tick@IsleApp@@QAEXH@Z@4HA` + The function's decorated name is: `?Tick@IsleApp@@QAEXH@Z`""" + + row = self._db.execute( + """SELECT recomp_addr FROM `symbols` + WHERE decorated_name LIKE '%' || ? || '%' || ? || '%' + AND orig_addr IS NULL + AND (compare_type = ? OR compare_type = ? OR compare_type IS NULL)""", + ( + variable_name, + function_sym, + SymbolType.DATA.value, + SymbolType.POINTER.value, + ), + ).fetchone() + return row[0] if row is not None else None + + def _match_on(self, compare_type: SymbolType, addr: int, name: str) -> bool: + # Update the compare_type here too since the marker tells us what we should do + + # Truncate the name to 255 characters. It will not be possible to match a name + # longer than that because MSVC truncates the debug symbols to this length. + # See also: warning C4786. + name = name[:255] + + logger.debug("Looking for %s %s", compare_type.name.lower(), name) + recomp_addr = self._find_potential_match(name, compare_type) + if recomp_addr is None: + return False + + return self.set_pair(addr, recomp_addr, compare_type) + + def get_next_orig_addr(self, addr: int) -> Optional[int]: + """Return the original address (matched or not) that follows + the one given. If our recomp function size would cause us to read + too many bytes for the original function, we can adjust it.""" + result = self._db.execute( + """SELECT orig_addr + FROM `symbols` + WHERE orig_addr > ? + ORDER BY orig_addr + LIMIT 1""", + (addr,), + ).fetchone() + + return result[0] if result is not None else None + + def match_function(self, addr: int, name: str) -> bool: + did_match = self._match_on(SymbolType.FUNCTION, addr, name) + if not did_match: + logger.error("Failed to find function symbol with name: %s", name) + + return did_match + + def match_vtable( + self, addr: int, name: str, base_class: Optional[str] = None + ) -> bool: + # Set up our potential match names + bare_vftable = f"{name}::`vftable'" + for_name = base_class if base_class is not None else name + for_vftable = f"{name}::`vftable'{{for `{for_name}'}}" + + # Only allow a match against "Class:`vftable'" + # if this is the derived class. + if base_class is None or base_class == name: + name_options = (for_vftable, bare_vftable) + else: + name_options = (for_vftable, for_vftable) + + row = self._db.execute( + """ + SELECT recomp_addr + FROM `symbols` + WHERE orig_addr IS NULL + AND (name = ? OR name = ?) + AND (compare_type = ?) + LIMIT 1 + """, + (*name_options, SymbolType.VTABLE.value), + ).fetchone() + + if row is not None and self.set_pair(addr, row[0], SymbolType.VTABLE): + return True + + logger.error("Failed to find vtable for class: %s", name) + return False + + def match_static_variable(self, addr: int, name: str, function_addr: int) -> bool: + """Matching a static function variable by combining the variable name + with the decorated (mangled) name of its parent function.""" + + cur = self._db.execute( + """SELECT name, decorated_name + FROM `symbols` + WHERE orig_addr = ?""", + (function_addr,), + ) + + if (result := cur.fetchone()) is None: + logger.error("No function for static variable: %s", name) + return False + + # Get the friendly name for the "failed to match" error message + (function_name, decorated_name) = result + + recomp_addr = self._find_static_variable(name, decorated_name) + if recomp_addr is not None: + # TODO: This variable could be a pointer, but I don't think we + # have a way to tell that right now. + if self.set_pair(addr, recomp_addr, SymbolType.DATA): + return True + + logger.error( + "Failed to match static variable %s from function %s", + name, + function_name, + ) + + return False + + def match_variable(self, addr: int, name: str) -> bool: + did_match = self._match_on(SymbolType.DATA, addr, name) or self._match_on( + SymbolType.POINTER, addr, name + ) + if not did_match: + logger.error("Failed to find variable: %s", name) + + return did_match + + def match_string(self, addr: int, value: str) -> bool: + did_match = self._match_on(SymbolType.STRING, addr, value) + if not did_match: + escaped = repr(value) + logger.error("Failed to find string: %s", escaped) + + return did_match diff --git a/tools/isledecomp/isledecomp/compare/diff.py b/tools/isledecomp/isledecomp/compare/diff.py new file mode 100644 index 00000000..ad453191 --- /dev/null +++ b/tools/isledecomp/isledecomp/compare/diff.py @@ -0,0 +1,98 @@ +from difflib import SequenceMatcher +from typing import Dict, List, Tuple + +CombinedDiffInput = List[Tuple[str, str]] +CombinedDiffOutput = List[Tuple[str, List[Dict[str, Tuple[str, str]]]]] + + +def combined_diff( + diff: SequenceMatcher, + orig_combined: CombinedDiffInput, + recomp_combined: CombinedDiffInput, + context_size: int = 3, +) -> CombinedDiffOutput: + """We want to diff the original and recomp assembly. The "combined" assembly + input has two components: the address of the instruction and the assembly text. + We have already diffed the text only. This is the SequenceMatcher object. + The SequenceMatcher can generate "opcodes" that describe how to turn "Text A" + into "Text B". These refer to list indices of the original arrays, so we can + use those to create the final diff and include the address for each line of assembly. + This is almost the same procedure as the difflib.unified_diff function, but we + are reusing the already generated SequenceMatcher object. + """ + + unified_diff = [] + + for group in diff.get_grouped_opcodes(context_size): + subgroups = [] + + # Keep track of the addresses we've seen in this diff group. + # This helps create the "@@" line. (Does this have a name?) + # Do it this way because not every line in each list will have an + # address. If our context begins or ends on a line that does not + # have one, we will have an incomplete range string. + orig_addrs = set() + recomp_addrs = set() + + first, last = group[0], group[-1] + orig_range = len(orig_combined[first[1] : last[2]]) + recomp_range = len(recomp_combined[first[3] : last[4]]) + + for code, i1, i2, j1, j2 in group: + if code == "equal": + # The sections are equal, so the list slices are guaranteed + # to have the same length. We only need the diffed value (asm text) + # from one of the lists, but we need the addresses from both. + # Use zip to put the two lists together and then take out what we want. + both = [ + (a, b, c) + for ((a, b), (c, _)) in zip( + orig_combined[i1:i2], recomp_combined[j1:j2] + ) + ] + + for orig_addr, _, recomp_addr in both: + if orig_addr is not None: + orig_addrs.add(orig_addr) + + if recomp_addr is not None: + recomp_addrs.add(recomp_addr) + + subgroups.append({"both": both}) + else: + for orig_addr, _ in orig_combined[i1:i2]: + if orig_addr is not None: + orig_addrs.add(orig_addr) + + for recomp_addr, _ in recomp_combined[j1:j2]: + if recomp_addr is not None: + recomp_addrs.add(recomp_addr) + + subgroups.append( + { + "orig": orig_combined[i1:i2], + "recomp": recomp_combined[j1:j2], + } + ) + + orig_sorted = sorted(orig_addrs) + recomp_sorted = sorted(recomp_addrs) + + # We could get a diff group that has no original addresses. + # This might happen for a stub function where we are not able to + # produce even a single instruction from the original. + # In that case, show the best slug line that we can. + def peek_front(list_, default=""): + try: + return list_[0] + except IndexError: + return default + + orig_first = peek_front(orig_sorted) + recomp_first = peek_front(recomp_sorted) + + diff_slug = f"@@ -{orig_first},{orig_range} +{recomp_first},{recomp_range} @@" + + unified_diff.append((diff_slug, subgroups)) + + return unified_diff diff --git a/tools/isledecomp/isledecomp/compare/lines.py b/tools/isledecomp/isledecomp/compare/lines.py new file mode 100644 index 00000000..0e9c4332 --- /dev/null +++ b/tools/isledecomp/isledecomp/compare/lines.py @@ -0,0 +1,69 @@ +"""Database used to match (filename, line_number) pairs +between FUNCTION markers and PDB analysis.""" +import sqlite3 +import logging +from functools import cache +from typing import Optional +from pathlib import Path +from isledecomp.dir import PathResolver + + +_SETUP_SQL = """ + DROP TABLE IF EXISTS `lineref`; + CREATE TABLE `lineref` ( + path text not null, + filename text not null, + line int not null, + addr int not null + ); + CREATE INDEX `file_line` ON `lineref` (filename, line); +""" + + +logger = logging.getLogger(__name__) + + +@cache +def my_samefile(path: str, source_path: str) -> bool: + return Path(path).samefile(source_path) + + +@cache +def my_basename_lower(path: str) -> str: + return Path(path).name.lower() + + +class LinesDb: + def __init__(self, code_dir) -> None: + self._db = sqlite3.connect(":memory:") + self._db.executescript(_SETUP_SQL) + self._path_resolver = PathResolver(code_dir) + + def add_line(self, path: str, line_no: int, addr: int): + """To be added from the LINES section of cvdump.""" + sourcepath = self._path_resolver.resolve_cvdump(path) + filename = my_basename_lower(sourcepath) + + self._db.execute( + "INSERT INTO `lineref` (path, filename, line, addr) VALUES (?,?,?,?)", + (sourcepath, filename, line_no, addr), + ) + + def search_line(self, path: str, line_no: int) -> Optional[int]: + """Using path and line number from FUNCTION marker, + get the address of this function in the recomp.""" + filename = my_basename_lower(path) + cur = self._db.execute( + "SELECT path, addr FROM `lineref` WHERE filename = ? AND line = ?", + (filename, line_no), + ) + for source_path, addr in cur.fetchall(): + if my_samefile(path, source_path): + return addr + + logger.error( + "Failed to find function symbol with filename and line: %s:%d", + path, + line_no, + ) + return None diff --git a/tools/isledecomp/isledecomp/cvdump/__init__.py b/tools/isledecomp/isledecomp/cvdump/__init__.py new file mode 100644 index 00000000..334788c0 --- /dev/null +++ b/tools/isledecomp/isledecomp/cvdump/__init__.py @@ -0,0 +1,5 @@ +from .symbols import SymbolsEntry +from .analysis import CvdumpAnalysis +from .parser import CvdumpParser +from .runner import Cvdump +from .types import CvdumpTypesParser diff --git a/tools/isledecomp/isledecomp/cvdump/analysis.py b/tools/isledecomp/isledecomp/cvdump/analysis.py new file mode 100644 index 00000000..e030035e --- /dev/null +++ b/tools/isledecomp/isledecomp/cvdump/analysis.py @@ -0,0 +1,187 @@ +"""For collating the results from parsing cvdump.exe into a more directly useful format.""" + +from typing import Dict, List, Tuple, Optional +from isledecomp.cvdump import SymbolsEntry +from isledecomp.types import SymbolType +from .parser import CvdumpParser +from .demangler import demangle_string_const, demangle_vtable +from .types import CvdumpKeyError, CvdumpIntegrityError, TypeInfo + + +class CvdumpNode: + # pylint: disable=too-many-instance-attributes + # These two are required and allow us to identify the symbol + section: int + offset: int + # aka the mangled name from the PUBLICS section + decorated_name: Optional[str] = None + # optional "nicer" name (e.g. of a function from SYMBOLS section) + friendly_name: Optional[str] = None + # To be determined by context after inserting data, unless the decorated + # name makes this obvious. (i.e. string constants or vtables) + # We choose not to assume that section 1 (probably ".text") contains only + # functions. Smacker functions are linked to their own section "_UNSTEXT" + node_type: Optional[SymbolType] = None + # Function size can be read from the LINES section so use this over any + # other value if we have it. + # TYPES section can tell us the size of structs and other complex types. + confirmed_size: Optional[int] = None + # Estimated by reading the distance between this symbol and the one that + # follows in the same section. + # If this is the last symbol in the section, we cannot estimate a size. + estimated_size: Optional[int] = None + # Size as reported by SECTION CONTRIBUTIONS section. Not guaranteed to be + # accurate. + section_contribution: Optional[int] = None + addr: Optional[int] = None + symbol_entry: Optional[SymbolsEntry] = None + # Preliminary - only used for non-static variables at the moment + data_type: Optional[TypeInfo] = None + + def __init__(self, section: int, offset: int) -> None: + self.section = section + self.offset = offset + + def set_decorated(self, name: str): + self.decorated_name = name + + if self.decorated_name.startswith("??_7"): + self.node_type = SymbolType.VTABLE + self.friendly_name = demangle_vtable(self.decorated_name) + + elif self.decorated_name.startswith("??_8"): + # This is the `vbtable' symbol for virtual inheritance. + # Should be okay to reuse demangle_vtable. We still want to + # remove things like "const" from the output. + self.node_type = SymbolType.DATA + self.friendly_name = demangle_vtable(self.decorated_name) + + elif self.decorated_name.startswith("??_C@"): + self.node_type = SymbolType.STRING + (strlen, _) = demangle_string_const(self.decorated_name) + self.confirmed_size = strlen + + elif not self.decorated_name.startswith("?") and "@" in self.decorated_name: + # C mangled symbol. The trailing at-sign with number tells the number of bytes + # in the parameter list for __stdcall, __fastcall, or __vectorcall + # For __cdecl it is more ambiguous and we would have to know which section we are in. + # https://learn.microsoft.com/en-us/cpp/build/reference/decorated-names?view=msvc-170#FormatC + self.node_type = SymbolType.FUNCTION + + def name(self) -> Optional[str]: + """Prefer "friendly" name if we have it. + This is what we have been using to match functions.""" + return ( + self.friendly_name + if self.friendly_name is not None + else self.decorated_name + ) + + def size(self) -> Optional[int]: + if self.confirmed_size is not None: + return self.confirmed_size + + # Better to undershoot the size because we can identify a comparison gap easily + if self.estimated_size is not None and self.section_contribution is not None: + return min(self.estimated_size, self.section_contribution) + + # Return whichever one we have, or neither + return self.estimated_size or self.section_contribution + + +class CvdumpAnalysis: + """Collects the results from CvdumpParser into a list of nodes (i.e. symbols). + These can then be analyzed by a downstream tool.""" + + verified_lines: Dict[Tuple[str, str], Tuple[str, str]] + + def __init__(self, parser: CvdumpParser): + """Read in as much information as we have from the parser. + The more sections we have, the better our information will be.""" + node_dict: Dict[Tuple[int, int], CvdumpNode] = {} + + # PUBLICS is our roadmap for everything that follows. + for pub in parser.publics: + key = (pub.section, pub.offset) + if key not in node_dict: + node_dict[key] = CvdumpNode(*key) + + node_dict[key].set_decorated(pub.name) + + for sizeref in parser.sizerefs: + key = (sizeref.section, sizeref.offset) + if key not in node_dict: + node_dict[key] = CvdumpNode(*key) + + node_dict[key].section_contribution = sizeref.size + + for glo in parser.globals: + key = (glo.section, glo.offset) + if key not in node_dict: + node_dict[key] = CvdumpNode(*key) + + node_dict[key].node_type = SymbolType.DATA + node_dict[key].friendly_name = glo.name + + try: + # Check our types database for type information. + # If we did not parse the TYPES section, we can only + # get information for built-in "T_" types. + g_info = parser.types.get(glo.type) + node_dict[key].confirmed_size = g_info.size + node_dict[key].data_type = g_info + # Previously we set the symbol type to POINTER here if + # the variable was known to be a pointer. We can derive this + # information later when it's time to compare the variable, + # so let's set these to symbol type DATA instead. + # POINTER will be reserved for non-variable pointer data. + # e.g. thunks, unwind section. + except (CvdumpKeyError, CvdumpIntegrityError): + # No big deal if we don't have complete type information. + pass + + for key, _ in parser.lines.items(): + # Here we only set if the section:offset already exists + # because our values include offsets inside of the function. + if key in node_dict: + node_dict[key].node_type = SymbolType.FUNCTION + + # The LINES section contains every code line in the file, naturally. + # There isn't an obvious separation between functions, so we have to + # read everything. However, any function that would be in LINES + # has to be somewhere else in the PDB (probably PUBLICS). + # Isolate the lines that we actually care about for matching. + self.verified_lines = { + key: value for (key, value) in parser.lines.items() if key in node_dict + } + + for sym in parser.symbols: + key = (sym.section, sym.offset) + if key not in node_dict: + node_dict[key] = CvdumpNode(*key) + + if sym.type == "S_GPROC32": + node_dict[key].friendly_name = sym.name + node_dict[key].confirmed_size = sym.size + node_dict[key].node_type = SymbolType.FUNCTION + node_dict[key].symbol_entry = sym + + self.nodes: List[CvdumpNode] = [ + v for _, v in dict(sorted(node_dict.items())).items() + ] + self._estimate_size() + + def _estimate_size(self): + """Get the distance between one section:offset value and the next one + in the same section. This gives a rough estimate of the size of the symbol. + If we have information from SECTION CONTRIBUTIONS, take whichever one is + less to get the best approximate size.""" + for i in range(len(self.nodes) - 1): + this_node = self.nodes[i] + next_node = self.nodes[i + 1] + + # If they are in different sections, we can't compare them + if this_node.section != next_node.section: + continue + + this_node.estimated_size = next_node.offset - this_node.offset diff --git a/tools/isledecomp/isledecomp/cvdump/demangler.py b/tools/isledecomp/isledecomp/cvdump/demangler.py new file mode 100644 index 00000000..9b2445da --- /dev/null +++ b/tools/isledecomp/isledecomp/cvdump/demangler.py @@ -0,0 +1,121 @@ +"""For demangling a subset of MSVC mangled symbols. +Some unofficial information about the mangling scheme is here: +https://en.wikiversity.org/wiki/Visual_C%2B%2B_name_mangling +""" +import re +from collections import namedtuple +from typing import Optional +import pydemangler + + +class InvalidEncodedNumberError(Exception): + pass + + +_encoded_number_translate = str.maketrans("ABCDEFGHIJKLMNOP", "0123456789ABCDEF") + + +def parse_encoded_number(string: str) -> int: + # TODO: assert string ends in "@"? + if string.endswith("@"): + string = string[:-1] + + try: + return int(string.translate(_encoded_number_translate), 16) + except ValueError as e: + raise InvalidEncodedNumberError(string) from e + + +string_const_regex = re.compile( + r"\?\?_C@\_(?P[0-1])(?P\d|[A-P]+@)(?P\w+)@(?P.+)@" +) +StringConstInfo = namedtuple("StringConstInfo", "len is_utf16") + + +def demangle_string_const(symbol: str) -> Optional[StringConstInfo]: + """Don't bother to decode the string text from the symbol. + We can just read it from the binary once we have the length.""" + match = string_const_regex.match(symbol) + if match is None: + return None + + try: + strlen = ( + parse_encoded_number(match.group("len")) + if "@" in match.group("len") + else int(match.group("len")) + ) + except (ValueError, InvalidEncodedNumberError): + return None + + is_utf16 = match.group("is_utf16") == "1" + return StringConstInfo(len=strlen, is_utf16=is_utf16) + + +def get_vtordisp_name(symbol: str) -> Optional[str]: + # pylint: disable=c-extension-no-member + """For adjuster thunk functions, the PDB will sometimes use a name + that contains "vtordisp" but often will just reuse the name of the + function being thunked. We want to use the vtordisp name if possible.""" + name = pydemangler.demangle(symbol) + if name is None: + return None + + if "`vtordisp" not in name: + return None + + # Now we remove the parts of the friendly name that we don't need + try: + # Assuming this is the last of the function prefixes + thiscall_idx = name.index("__thiscall") + # To match the end of the `vtordisp{x,y}' string + end_idx = name.index("}'") + return name[thiscall_idx + 11 : end_idx + 2] + except ValueError: + return name + + +def demangle_vtable(symbol: str) -> str: + # pylint: disable=c-extension-no-member + """Get the class name referenced in the vtable symbol.""" + raw = pydemangler.demangle(symbol) + + if raw is None: + pass # TODO: This shouldn't happen if MSVC behaves + + # Remove storage class and other stuff we don't care about + return ( + raw.replace(" str: + """Parked implementation of MSVC symbol demangling. + We only use this for vtables and it works okay with the simple cases or + templates that refer to other classes/structs. Some namespace support. + Does not support backrefs, primitive types, or vtables with + virtual inheritance.""" + + # Seek ahead 4 chars to strip off "??_7" prefix + t = symbol[4:].split("@") + # "?$" indicates a template class + if t[0].startswith("?$"): + class_name = t[0][2:] + # PA = Pointer/reference + # V or U = class or struct + if t[1].startswith("PA"): + generic = f"{t[1][3:]} *" + else: + generic = t[1][1:] + + return f"{class_name}<{generic}>::`vftable'" + + # If we have two classes listed, it is a namespace hierarchy. + # @@6B@ is a common generic suffix for these vtable symbols. + if t[1] != "" and t[1] != "6B": + return t[1] + "::" + t[0] + "::`vftable'" + + return t[0] + "::`vftable'" diff --git a/tools/isledecomp/isledecomp/cvdump/parser.py b/tools/isledecomp/isledecomp/cvdump/parser.py new file mode 100644 index 00000000..c8f1d67d --- /dev/null +++ b/tools/isledecomp/isledecomp/cvdump/parser.py @@ -0,0 +1,182 @@ +import re +from typing import Iterable, Tuple +from collections import namedtuple +from .types import CvdumpTypesParser +from .symbols import CvdumpSymbolsParser + +# e.g. `*** PUBLICS` +_section_change_regex = re.compile(r"\*\*\* (?P

[A-Z/ ]{2,})") + +# e.g. ` 27 00034EC0 28 00034EE2 29 00034EE7 30 00034EF4` +_line_addr_pairs_findall = re.compile(r"\s+(?P\d+) (?P[A-F0-9]{8})") + +# We assume no spaces in the file name +# e.g. ` Z:\lego-island\isle\LEGO1\viewmanager\viewroi.cpp (None), 0001:00034E90-00034E97, line/addr pairs = 2` +_lines_subsection_header = re.compile( + r"^\s*(?P\S+).*?, (?P
[A-F0-9]{4}):(?P[A-F0-9]{8})-(?P[A-F0-9]{8}), line/addr pairs = (?P\d+)" +) + +# e.g. `S_PUB32: [0001:0003FF60], Flags: 00000000, __read` +_publics_line_regex = re.compile( + r"^(?P\w+): \[(?P
\w{4}):(?P\w{8})], Flags: (?P\w{8}), (?P\S+)" +) + +# e.g. ` Debug start: 00000008, Debug end: 0000016E` +_gproc_debug_regex = re.compile( + r"\s*Debug start: (?P\w{8}), Debug end: (?P\w{8})" +) + +# e.g. ` 00DA 0001:00000000 00000073 60501020` +_section_contrib_regex = re.compile( + r"\s*(?P\w{4}) (?P
\w{4}):(?P\w{8}) (?P\w{8}) (?P\w{8})" +) + +# e.g. `S_GDATA32: [0003:000004A4], Type: T_32PRCHAR(0470), g_set` +_gdata32_regex = re.compile( + r"S_GDATA32: \[(?P
\w{4}):(?P\w{8})\], Type:\s*(?P\S+), (?P.+)" +) + +# e.g. 0003 "CMakeFiles/isle.dir/ISLE/res/isle.rc.res" +# e.g. 0004 "C:\work\lego-island\isle\3rdparty\smartheap\SHLW32MT.LIB" "check.obj" +_module_regex = re.compile(r"(?P\w{4})(?: \"(?P.+?)\")?(?: \"(?P.+?)\")") + +# User functions only +LinesEntry = namedtuple("LinesEntry", "filename line_no section offset") + +# Strings, vtables, functions +# superset of everything else +# only place you can find the C symbols (library functions, smacker, etc) +PublicsEntry = namedtuple("PublicsEntry", "type section offset flags name") + +# (Estimated) size of any symbol +SizeRefEntry = namedtuple("SizeRefEntry", "module section offset size") + +# global variables +GdataEntry = namedtuple("GdataEntry", "section offset type name") + +ModuleEntry = namedtuple("ModuleEntry", "id lib obj") + + +class CvdumpParser: + # pylint: disable=too-many-instance-attributes + def __init__(self) -> None: + self._section: str = "" + self._lines_function: Tuple[str, int] = ("", 0) + + self.lines = {} + self.publics = [] + self.sizerefs = [] + self.globals = [] + self.modules = [] + + self.types = CvdumpTypesParser() + self.symbols_parser = CvdumpSymbolsParser() + + @property + def symbols(self): + return self.symbols_parser.symbols + + def _lines_section(self, line: str): + """Parsing entries from the LINES section. We only care about the pairs of + line_number and address and the subsection header to indicate which code file + we are in.""" + + # Subheader indicates a new function and possibly a new code filename. + # Save the section here because it is not given on the lines that follow. + if (match := _lines_subsection_header.match(line)) is not None: + self._lines_function = ( + match.group("filename"), + int(match.group("section"), 16), + ) + return + + # Match any pairs as we find them + for line_no, offset in _line_addr_pairs_findall.findall(line): + key = (self._lines_function[1], int(offset, 16)) + self.lines[key] = (self._lines_function[0], int(line_no)) + + def _publics_section(self, line: str): + """Match each line from PUBLICS and pull out the symbol information. + These are MSVC mangled symbol names. String constants and vtable + addresses can only be found here.""" + if (match := _publics_line_regex.match(line)) is not None: + self.publics.append( + PublicsEntry( + type=match.group("type"), + section=int(match.group("section"), 16), + offset=int(match.group("offset"), 16), + flags=int(match.group("flags"), 16), + name=match.group("name"), + ) + ) + + def _globals_section(self, line: str): + """S_PROCREF may be useful later. + Right now we just want S_GDATA32 symbols because it is the simplest + way to access global variables.""" + if (match := _gdata32_regex.match(line)) is not None: + self.globals.append( + GdataEntry( + section=int(match.group("section"), 16), + offset=int(match.group("offset"), 16), + type=match.group("type"), + name=match.group("name"), + ) + ) + + def _section_contributions(self, line: str): + """Gives the size of elements across all sections of the binary. + This is the easiest way to get the data size for .data and .rdata + members that do not have a primitive data type.""" + if (match := _section_contrib_regex.match(line)) is not None: + self.sizerefs.append( + SizeRefEntry( + module=int(match.group("module"), 16), + section=int(match.group("section"), 16), + offset=int(match.group("offset"), 16), + size=int(match.group("size"), 16), + ) + ) + + def _modules_section(self, line: str): + """Record the object file (and lib file, if used) linked into the binary. + The auto-incrementing id is cross-referenced in SECTION CONTRIBUTIONS + (and perhaps other locations)""" + if (match := _module_regex.match(line)) is not None: + self.modules.append( + ModuleEntry( + id=int(match.group("id"), 16), + lib=match.group("lib"), + obj=match.group("obj"), + ) + ) + + def read_line(self, line: str): + if (match := _section_change_regex.match(line)) is not None: + self._section = match.group(1) + return + + if self._section == "TYPES": + self.types.read_line(line) + + elif self._section == "SYMBOLS": + self.symbols_parser.read_line(line) + + elif self._section == "LINES": + self._lines_section(line) + + elif self._section == "PUBLICS": + self._publics_section(line) + + elif self._section == "SECTION CONTRIBUTIONS": + self._section_contributions(line) + + elif self._section == "GLOBALS": + self._globals_section(line) + + elif self._section == "MODULES": + self._modules_section(line) + + def read_lines(self, lines: Iterable[str]): + for line in lines: + self.read_line(line) diff --git a/tools/isledecomp/isledecomp/cvdump/runner.py b/tools/isledecomp/isledecomp/cvdump/runner.py new file mode 100644 index 00000000..9463acfa --- /dev/null +++ b/tools/isledecomp/isledecomp/cvdump/runner.py @@ -0,0 +1,83 @@ +import io +from os import name as os_name +from enum import Enum +from typing import List +import subprocess +from isledecomp.lib import lib_path_join +from isledecomp.dir import winepath_unix_to_win +from .parser import CvdumpParser + + +class DumpOpt(Enum): + LINES = 0 + SYMBOLS = 1 + GLOBALS = 2 + PUBLICS = 3 + SECTION_CONTRIB = 4 + MODULES = 5 + TYPES = 6 + + +cvdump_opt_map = { + DumpOpt.LINES: "-l", + DumpOpt.SYMBOLS: "-s", + DumpOpt.GLOBALS: "-g", + DumpOpt.PUBLICS: "-p", + DumpOpt.SECTION_CONTRIB: "-seccontrib", + DumpOpt.MODULES: "-m", + DumpOpt.TYPES: "-t", +} + + +class Cvdump: + def __init__(self, pdb: str) -> None: + self._pdb: str = pdb + self._options = set() + + def lines(self): + self._options.add(DumpOpt.LINES) + return self + + def symbols(self): + self._options.add(DumpOpt.SYMBOLS) + return self + + def globals(self): + self._options.add(DumpOpt.GLOBALS) + return self + + def publics(self): + self._options.add(DumpOpt.PUBLICS) + return self + + def section_contributions(self): + self._options.add(DumpOpt.SECTION_CONTRIB) + return self + + def modules(self): + self._options.add(DumpOpt.MODULES) + return self + + def types(self): + self._options.add(DumpOpt.TYPES) + return self + + def cmd_line(self) -> List[str]: + cvdump_exe = lib_path_join("cvdump.exe") + flags = [cvdump_opt_map[opt] for opt in self._options] + + if os_name == "nt": + return [cvdump_exe, *flags, self._pdb] + + return ["wine", cvdump_exe, *flags, winepath_unix_to_win(self._pdb)] + + def run(self) -> CvdumpParser: + parser = CvdumpParser() + call = self.cmd_line() + with subprocess.Popen(call, stdout=subprocess.PIPE) as proc: + for line in io.TextIOWrapper(proc.stdout, encoding="utf-8"): + # Blank lines are there to help the reader; they have no context significance + if line != "\n": + parser.read_line(line) + + return parser diff --git a/tools/isledecomp/isledecomp/cvdump/symbols.py b/tools/isledecomp/isledecomp/cvdump/symbols.py new file mode 100644 index 00000000..73cb152e --- /dev/null +++ b/tools/isledecomp/isledecomp/cvdump/symbols.py @@ -0,0 +1,163 @@ +from dataclasses import dataclass, field +import logging +import re +from re import Match +from typing import NamedTuple, Optional + + +logger = logging.getLogger(__name__) + + +class StackOrRegisterSymbol(NamedTuple): + symbol_type: str + location: str + """Should always be set/converted to lowercase.""" + data_type: str + name: str + + +# S_GPROC32 = functions +@dataclass +class SymbolsEntry: + # pylint: disable=too-many-instance-attributes + type: str + section: int + offset: int + size: int + func_type: str + name: str + stack_symbols: list[StackOrRegisterSymbol] = field(default_factory=list) + frame_pointer_present: bool = False + addr: Optional[int] = None # Absolute address. Will be set later, if at all + + +class CvdumpSymbolsParser: + _symbol_line_generic_regex = re.compile( + r"\(\w+\)\s+(?P[^\s:]+)(?::\s+(?P\S.*))?|(?::)$" + ) + """ + Parses the first part, e.g. `(00008C) S_GPROC32`, and splits off the second part after the colon (if it exists). + There are three cases: + - no colon, e.g. `(000350) S_END` + - colon but no data, e.g. `(000370) S_COMPILE:` + - colon and data, e.g. `(000304) S_REGISTER: esi, Type: 0x1E14, this`` + """ + + _symbol_line_function_regex = re.compile( + r"\[(?P
\w{4}):(?P\w{8})\], Cb: (?P\w+), Type:\s+(?P[^\s,]+), (?P.+)" + ) + """ + Parses the second part of a function symbol, e.g. + `[0001:00034E90], Cb: 00000007, Type: 0x1024, ViewROI::IntrinsicImportance` + """ + + # the second part of e.g. + _stack_register_symbol_regex = re.compile( + r"(?P\S+), Type:\s+(?P[\w()]+), (?P.+)$" + ) + """ + Parses the second part of a stack or register symbol, e.g. + `esi, Type: 0x1E14, this` + """ + + _debug_start_end_regex = re.compile( + r"^\s*Debug start: (?P\w+), Debug end: (?P\w+)$" + ) + + _parent_end_next_regex = re.compile( + r"\s*Parent: (?P\w+), End: (?P\w+), Next: (?P\w+)$" + ) + + _flags_frame_pointer_regex = re.compile(r"\s*Flags: Frame Ptr Present$") + + _register_stack_symbols = ["S_BPREL32", "S_REGISTER"] + + # List the unhandled types so we can check exhaustiveness + _unhandled_symbols = [ + "S_COMPILE", + "S_OBJNAME", + "S_THUNK32", + "S_LABEL32", + "S_LDATA32", + "S_LPROC32", + "S_UDT", + ] + + """Parser for cvdump output, SYMBOLS section.""" + + def __init__(self): + self.symbols: list[SymbolsEntry] = [] + self.current_function: Optional[SymbolsEntry] = None + # If we read an S_BLOCK32 node, increment this level. + # This is so we do not end the proc early by reading an S_END + # that indicates the end of the block. + self.block_level: int = 0 + + def read_line(self, line: str): + if (match := self._symbol_line_generic_regex.match(line)) is not None: + self._parse_generic_case(line, match) + elif (match := self._parent_end_next_regex.match(line)) is not None: + # We do not need this info at the moment, might be useful in the future + pass + elif (match := self._debug_start_end_regex.match(line)) is not None: + # We do not need this info at the moment, might be useful in the future + pass + elif (match := self._flags_frame_pointer_regex.match(line)) is not None: + if self.current_function is None: + logger.error( + "Found a `Flags: Frame Ptr Present` but self.current_function is None" + ) + return + self.current_function.frame_pointer_present = True + else: + # Most of these are either `** Module: [...]` or data we do not care about + logger.debug("Unhandled line: %s", line[:-1]) + + def _parse_generic_case(self, line, line_match: Match[str]): + symbol_type: str = line_match.group("symbol_type") + second_part: Optional[str] = line_match.group("second_part") + + if symbol_type == "S_GPROC32": + assert second_part is not None + if (match := self._symbol_line_function_regex.match(second_part)) is None: + logger.error("Invalid function symbol: %s", line[:-1]) + return + self.current_function = SymbolsEntry( + type=symbol_type, + section=int(match.group("section"), 16), + offset=int(match.group("offset"), 16), + size=int(match.group("size"), 16), + func_type=match.group("func_type"), + name=match.group("name"), + ) + self.symbols.append(self.current_function) + + elif symbol_type in self._register_stack_symbols: + assert second_part is not None + if self.current_function is None: + logger.error("Found stack/register outside of function: %s", line[:-1]) + return + if (match := self._stack_register_symbol_regex.match(second_part)) is None: + logger.error("Invalid stack/register symbol: %s", line[:-1]) + return + + new_symbol = StackOrRegisterSymbol( + symbol_type=symbol_type, + location=match.group("location").lower(), + data_type=match.group("data_type"), + name=match.group("name"), + ) + self.current_function.stack_symbols.append(new_symbol) + + elif symbol_type == "S_BLOCK32": + self.block_level += 1 + elif symbol_type == "S_END": + if self.block_level > 0: + self.block_level -= 1 + assert self.block_level >= 0 + else: + self.current_function = None + elif symbol_type in self._unhandled_symbols: + return + else: + logger.error("Unhandled symbol type: %s", line) diff --git a/tools/isledecomp/isledecomp/cvdump/types.py b/tools/isledecomp/isledecomp/cvdump/types.py new file mode 100644 index 00000000..42a9e985 --- /dev/null +++ b/tools/isledecomp/isledecomp/cvdump/types.py @@ -0,0 +1,737 @@ +from dataclasses import dataclass +import re +import logging +from typing import Any, Dict, List, NamedTuple, Optional + + +logger = logging.getLogger(__name__) + + +class CvdumpTypeError(Exception): + pass + + +class CvdumpKeyError(KeyError): + pass + + +class CvdumpIntegrityError(Exception): + pass + + +class FieldListItem(NamedTuple): + """Member of a class or structure""" + + offset: int + name: str + type: str + + +@dataclass +class VirtualBaseClass: + type: str + index: int + direct: bool + + +@dataclass +class VirtualBasePointer: + vboffset: int + bases: list[VirtualBaseClass] + + +class ScalarType(NamedTuple): + offset: int + name: Optional[str] + type: str + + @property + def size(self) -> int: + return scalar_type_size(self.type) + + @property + def format_char(self) -> str: + return scalar_type_format_char(self.type) + + @property + def is_pointer(self) -> bool: + return scalar_type_pointer(self.type) + + +class TypeInfo(NamedTuple): + key: str + size: Optional[int] + name: Optional[str] = None + members: Optional[List[FieldListItem]] = None + + def is_scalar(self) -> bool: + # TODO: distinction between a class with zero members and no vtable? + return self.members is None + + +def normalize_type_id(key: str) -> str: + """Helper for TYPES parsing to ensure a consistent format. + If key begins with "T_" it is a built-in type. + Else it is a hex string. We prefer lower case letters and + no leading zeroes. (UDT identifier pads to 8 characters.)""" + if key[0] == "0": + return f"0x{key[-4:].lower()}" + + # Remove numeric value for "T_" type. We don't use this. + return key.partition("(")[0] + + +def scalar_type_pointer(type_name: str) -> bool: + return type_name.startswith("T_32P") + + +def scalar_type_size(type_name: str) -> int: + if scalar_type_pointer(type_name): + return 4 + + if "CHAR" in type_name: + return 2 if "WCHAR" in type_name else 1 + + if "SHORT" in type_name: + return 2 + + if "QUAD" in type_name or "64" in type_name: + return 8 + + return 4 + + +def scalar_type_signed(type_name: str) -> bool: + if scalar_type_pointer(type_name): + return False + + # According to cvinfo.h, T_WCHAR is unsigned + return not type_name.startswith("T_U") and not type_name.startswith("T_W") + + +def scalar_type_format_char(type_name: str) -> str: + if scalar_type_pointer(type_name): + return "L" + + # "Really a char" + if type_name.startswith("T_RCHAR"): + return "c" + + # floats + if type_name.startswith("T_REAL"): + return "d" if "64" in type_name else "f" + + size = scalar_type_size(type_name) + char = ({1: "b", 2: "h", 4: "l", 8: "q"}).get(size, "l") + + return char if scalar_type_signed(type_name) else char.upper() + + +def member_list_to_struct_string(members: List[ScalarType]) -> str: + """Create a string for use with struct.unpack""" + + format_string = "".join(m.format_char for m in members) + if len(format_string) > 0: + return "<" + format_string + + return "" + + +def join_member_names(parent: str, child: Optional[str]) -> str: + """Helper method to combine parent/child member names. + Child member name is None if the child is a scalar type.""" + + if child is None: + return parent + + # If the child is an array index, join without the dot + if child.startswith("["): + return f"{parent}{child}" + + return f"{parent}.{child}" + + +class CvdumpTypesParser: + """Parser for cvdump output, TYPES section. + Tricky enough that it demands its own parser.""" + + # Marks the start of a new type + INDEX_RE = re.compile(r"(?P0x\w+) : .* (?PLF_\w+)") + + # LF_FIELDLIST class/struct member (1/2) + LIST_RE = re.compile( + r"\s+list\[\d+\] = LF_MEMBER, (?P\w+), type = (?P.*), offset = (?P\d+)" + ) + + # LF_FIELDLIST vtable indicator + VTABLE_RE = re.compile(r"^\s+list\[\d+\] = LF_VFUNCTAB") + + # LF_FIELDLIST superclass indicator + SUPERCLASS_RE = re.compile( + r"^\s+list\[\d+\] = LF_BCLASS, (?P\w+), type = (?P.*), offset = (?P\d+)" + ) + + # LF_FIELDLIST virtual direct/indirect base pointer, line 1/2 + VBCLASS_RE = re.compile( + r"^\s+list\[\d+\] = LF_(?PI?)VBCLASS, .* base type = (?P.*)$" + ) + + # LF_FIELDLIST virtual direct/indirect base pointer, line 2/2 + VBCLASS_LINE_2_RE = re.compile( + r"^\s+virtual base ptr = .+, vbpoff = (?P\d+), vbind = (?P\d+)$" + ) + + # LF_FIELDLIST member name (2/2) + MEMBER_RE = re.compile(r"^\s+member name = '(?P.*)'$") + + LF_FIELDLIST_ENUMERATE = re.compile( + r"^\s+list\[\d+\] = LF_ENUMERATE,.*value = (?P\d+), name = '(?P[^']+)'$" + ) + + # LF_ARRAY element type + ARRAY_ELEMENT_RE = re.compile(r"^\s+Element type = (?P.*)") + + # LF_ARRAY total array size + ARRAY_LENGTH_RE = re.compile(r"^\s+length = (?P\d+)") + + # LF_CLASS/LF_STRUCTURE field list reference + CLASS_FIELD_RE = re.compile( + r"^\s+# members = \d+, field list type (?P0x\w+)," + ) + + # LF_CLASS/LF_STRUCTURE name and other info + CLASS_NAME_RE = re.compile( + r"^\s+Size = (?P\d+), class name = (?P(?:[^,]|,\S)+)(?:, UDT\((?P0x\w+)\))?" + ) + + # LF_MODIFIER, type being modified + MODIFIES_RE = re.compile(r".*modifies type (?P.*)$") + + # LF_ARGLIST number of entries + LF_ARGLIST_ARGCOUNT = re.compile(r".*argument count = (?P\d+)$") + + # LF_ARGLIST list entry + LF_ARGLIST_ENTRY = re.compile( + r"^\s+list\[(?P\d+)\] = (?P[\w()]+)$" + ) + + # LF_POINTER element + LF_POINTER_ELEMENT = re.compile(r"^\s+Element type : (?P.+)$") + + # LF_MFUNCTION attribute key-value pairs + LF_MFUNCTION_ATTRIBUTES = [ + re.compile(r"\s*Return type = (?P[\w()]+)$"), + re.compile(r"\s*Class type = (?P[\w()]+)$"), + re.compile(r"\s*This type = (?P[\w()]+)$"), + # Call type may contain whitespace + re.compile(r"\s*Call type = (?P[\w()\s]+)$"), + re.compile(r"\s*Parms = (?P[\w()]+)$"), # LF_MFUNCTION only + re.compile(r"\s*# Parms = (?P[\w()]+)$"), # LF_PROCEDURE only + re.compile(r"\s*Arg list type = (?P[\w()]+)$"), + re.compile( + r"\s*This adjust = (?P[\w()]+)$" + ), # By how much the incoming pointers are shifted in virtual inheritance; hex value without `0x` prefix + re.compile( + r"\s*Func attr = (?P[\w()]+)$" + ), # Only for completeness, is always `none` + ] + + LF_ENUM_ATTRIBUTES = [ + re.compile(r"^\s*# members = (?P\d+)$"), + re.compile(r"^\s*enum name = (?P.+)$"), + ] + LF_ENUM_TYPES = re.compile( + r"^\s*type = (?P\S+) field list type (?P0x\w{4})$" + ) + LF_ENUM_UDT = re.compile(r"^\s*UDT\((?P0x\w+)\)$") + LF_UNION_LINE = re.compile( + r"^.*field list type (?P0x\w+),.*Size = (?P\d+)\s*,class name = (?P(?:[^,]|,\S)+)(?:,\s.*UDT\((?P0x\w+)\))?$" + ) + + MODES_OF_INTEREST = { + "LF_ARRAY", + "LF_CLASS", + "LF_ENUM", + "LF_FIELDLIST", + "LF_MODIFIER", + "LF_POINTER", + "LF_STRUCTURE", + "LF_ARGLIST", + "LF_MFUNCTION", + "LF_PROCEDURE", + "LF_UNION", + } + + def __init__(self) -> None: + self.mode: Optional[str] = None + self.last_key = "" + self.keys: Dict[str, Dict[str, Any]] = {} + + def _new_type(self): + """Prepare a new dict for the type we just parsed. + The id is self.last_key and the "type" of type is self.mode. + e.g. LF_CLASS""" + self.keys[self.last_key] = {"type": self.mode} + + def _set(self, key: str, value): + self.keys[self.last_key][key] = value + + def _add_member(self, offset: int, type_: str): + obj = self.keys[self.last_key] + if "members" not in obj: + obj["members"] = [] + + obj["members"].append({"offset": offset, "type": type_}) + + def _set_member_name(self, name: str): + """Set name for most recently added member.""" + obj = self.keys[self.last_key] + obj["members"][-1]["name"] = name + + def _add_variant(self, name: str, value: int): + obj = self.keys[self.last_key] + if "variants" not in obj: + obj["variants"] = [] + variants: list[dict[str, Any]] = obj["variants"] + variants.append({"name": name, "value": value}) + + def _get_field_list(self, type_obj: Dict[str, Any]) -> List[FieldListItem]: + """Return the field list for the given LF_CLASS/LF_STRUCTURE reference""" + + if type_obj.get("type") == "LF_FIELDLIST": + field_obj = type_obj + else: + field_list_type = type_obj["field_list_type"] + field_obj = self.keys[field_list_type] + + members: List[FieldListItem] = [] + + super_ids = field_obj.get("super", []) + for super_id in super_ids: + # May need to resolve forward ref. + superclass = self.get(super_id) + if superclass.members is not None: + members += superclass.members + + raw_members = field_obj.get("members", []) + members += [ + FieldListItem( + offset=m["offset"], + type=m["type"], + name=m["name"], + ) + for m in raw_members + ] + + return sorted(members, key=lambda m: m.offset) + + def _mock_array_members(self, type_obj: Dict) -> List[FieldListItem]: + """LF_ARRAY elements provide the element type and the total size. + We want the list of "members" as if this was a struct.""" + + if type_obj.get("type") != "LF_ARRAY": + raise CvdumpTypeError("Type is not an LF_ARRAY") + + array_type = type_obj.get("array_type") + if array_type is None: + raise CvdumpIntegrityError("No array element type") + + array_element_size = self.get(array_type).size + assert ( + array_element_size is not None + ), "Encountered an array whose type has no size" + + n_elements = type_obj["size"] // array_element_size + + return [ + FieldListItem( + offset=i * array_element_size, + type=array_type, + name=f"[{i}]", + ) + for i in range(n_elements) + ] + + def get(self, type_key: str) -> TypeInfo: + """Convert our dictionary values read from the cvdump output + into a consistent format for the given type.""" + + # Scalar type. Handled here because it makes the recursive steps + # much simpler. + if type_key.startswith("T_"): + size = scalar_type_size(type_key) + return TypeInfo( + key=type_key, + size=size, + ) + + # Go to our dictionary to find it. + obj = self.keys.get(type_key.lower()) + if obj is None: + raise CvdumpKeyError(type_key) + + # These type references are just a wrapper around a scalar + if obj.get("type") == "LF_ENUM": + underlying_type = obj.get("underlying_type") + if underlying_type is None: + raise CvdumpKeyError(f"Missing 'underlying_type' in {obj}") + return self.get(underlying_type) + + if obj.get("type") == "LF_POINTER": + return self.get("T_32PVOID") + + if obj.get("is_forward_ref", False): + # Get the forward reference to follow. + # If this is LF_CLASS/LF_STRUCTURE, it is the UDT value. + # For LF_MODIFIER, it is the type being modified. + forward_ref = obj.get("udt", None) or obj.get("modifies", None) + if forward_ref is None: + raise CvdumpIntegrityError(f"Null forward ref for type {type_key}") + + return self.get(forward_ref) + + # Else it is not a forward reference, so build out the object here. + if obj.get("type") == "LF_ARRAY": + members = self._mock_array_members(obj) + else: + members = self._get_field_list(obj) + + return TypeInfo( + key=type_key, + size=obj.get("size"), + name=obj.get("name"), + members=members, + ) + + def get_by_name(self, name: str) -> TypeInfo: + """Find the complex type with the given name.""" + # TODO + raise NotImplementedError + + def get_scalars(self, type_key: str) -> List[ScalarType]: + """Reduce the given type to a list of scalars so we can + compare each component value.""" + + obj = self.get(type_key) + if obj.is_scalar(): + # Use obj.key here for alias types like LF_POINTER + return [ScalarType(offset=0, type=obj.key, name=None)] + + # mypy? + assert obj.members is not None + + # Dedupe repeated offsets if this is a union type + unique_offsets = {m.offset: m for m in obj.members} + unique_members = [m for _, m in unique_offsets.items()] + + return [ + ScalarType( + offset=m.offset + cm.offset, + type=cm.type, + name=join_member_names(m.name, cm.name), + ) + for m in unique_members + for cm in self.get_scalars(m.type) + ] + + def get_scalars_gapless(self, type_key: str) -> List[ScalarType]: + """Reduce the given type to a list of scalars so we can + compare each component value.""" + + obj = self.get(type_key) + total_size = obj.size + assert ( + total_size is not None + ), "Called get_scalar_gapless() on a type without size" + + scalars = self.get_scalars(type_key) + + output = [] + last_extent = total_size + + # Walk the scalar list in reverse; we assume a gap could not + # come at the start of the struct. + for scalar in scalars[::-1]: + this_extent = scalar.offset + scalar_type_size(scalar.type) + size_diff = last_extent - this_extent + # We need to add the gap fillers in reverse here + for i in range(size_diff - 1, -1, -1): + # Push to front + output.insert( + 0, + ScalarType( + offset=this_extent + i, + name="(padding)", + type="T_UCHAR", + ), + ) + + output.insert(0, scalar) + last_extent = scalar.offset + + return output + + def get_format_string(self, type_key: str) -> str: + members = self.get_scalars_gapless(type_key) + return member_list_to_struct_string(members) + + def read_line(self, line: str): + if line.endswith("\n"): + line = line[:-1] + if len(line) == 0: + return + + if (match := self.INDEX_RE.match(line)) is not None: + type_ = match.group(2) + if type_ not in self.MODES_OF_INTEREST: + self.mode = None + return + + # Don't need to normalize, it's already in the format we want + self.last_key = match.group(1) + self.mode = type_ + self._new_type() + + if type_ == "LF_ARGLIST": + submatch = self.LF_ARGLIST_ARGCOUNT.match(line) + assert submatch is not None + self.keys[self.last_key]["argcount"] = int(submatch.group("argcount")) + # TODO: This should be validated in another pass + return + + if self.mode is None: + return + + if self.mode == "LF_MODIFIER": + if (match := self.MODIFIES_RE.match(line)) is not None: + # For convenience, because this is essentially the same thing + # as an LF_CLASS forward ref. + self._set("is_forward_ref", True) + self._set("modifies", normalize_type_id(match.group("type"))) + + elif self.mode == "LF_ARRAY": + if (match := self.ARRAY_ELEMENT_RE.match(line)) is not None: + self._set("array_type", normalize_type_id(match.group("type"))) + + elif (match := self.ARRAY_LENGTH_RE.match(line)) is not None: + self._set("size", int(match.group("length"))) + + elif self.mode == "LF_FIELDLIST": + self.read_fieldlist_line(line) + + elif self.mode == "LF_ARGLIST": + self.read_arglist_line(line) + + elif self.mode in ["LF_MFUNCTION", "LF_PROCEDURE"]: + self.read_mfunction_line(line) + + elif self.mode in ["LF_CLASS", "LF_STRUCTURE"]: + self.read_class_or_struct_line(line) + + elif self.mode == "LF_POINTER": + self.read_pointer_line(line) + + elif self.mode == "LF_ENUM": + self.read_enum_line(line) + + elif self.mode == "LF_UNION": + self.read_union_line(line) + + else: + # Check for exhaustiveness + logger.error("Unhandled data in mode: %s", self.mode) + + def read_fieldlist_line(self, line: str): + # If this class has a vtable, create a mock member at offset 0 + if (match := self.VTABLE_RE.match(line)) is not None: + # For our purposes, any pointer type will do + self._add_member(0, "T_32PVOID") + self._set_member_name("vftable") + + # Superclass is set here in the fieldlist rather than in LF_CLASS + elif (match := self.SUPERCLASS_RE.match(line)) is not None: + superclass_list: dict[str, int] = self.keys[self.last_key].setdefault( + "super", {} + ) + superclass_list[normalize_type_id(match.group("type"))] = int( + match.group("offset") + ) + + # virtual base class (direct or indirect) + elif (match := self.VBCLASS_RE.match(line)) is not None: + virtual_base_pointer = self.keys[self.last_key].setdefault( + "vbase", + VirtualBasePointer( + vboffset=-1, # default to -1 until we parse the correct value + bases=[], + ), + ) + assert isinstance( + virtual_base_pointer, VirtualBasePointer + ) # type checker only + + virtual_base_pointer.bases.append( + VirtualBaseClass( + type=match.group("type"), + index=-1, # default to -1 until we parse the correct value + direct=match.group("indirect") != "I", + ) + ) + + elif (match := self.VBCLASS_LINE_2_RE.match(line)) is not None: + virtual_base_pointer = self.keys[self.last_key].get("vbase", None) + assert isinstance( + virtual_base_pointer, VirtualBasePointer + ), "Parsed the second line of an (I)VBCLASS without the first one" + vboffset = int(match.group("vboffset")) + + if virtual_base_pointer.vboffset == -1: + # default value + virtual_base_pointer.vboffset = vboffset + elif virtual_base_pointer.vboffset != vboffset: + # vboffset is always equal to 4 in our examples. We are not sure if there can be multiple + # virtual base pointers, and if so, how the layout is supposed to look. + # We therefore assume that there is always only one virtual base pointer. + logger.error( + "Unhandled: Found multiple virtual base pointers at offsets %d and %d", + virtual_base_pointer.vboffset, + vboffset, + ) + + virtual_base_pointer.bases[-1].index = int(match.group("vbindex")) + # these come out of order, and the lists are so short that it's fine to sort them every time + virtual_base_pointer.bases.sort(key=lambda x: x.index) + + # Member offset and type given on the first of two lines. + elif (match := self.LIST_RE.match(line)) is not None: + self._add_member( + int(match.group("offset")), normalize_type_id(match.group("type")) + ) + + # Name of the member read on the second of two lines. + elif (match := self.MEMBER_RE.match(line)) is not None: + self._set_member_name(match.group("name")) + + elif (match := self.LF_FIELDLIST_ENUMERATE.match(line)) is not None: + self._add_variant(match.group("name"), int(match.group("value"))) + + def read_class_or_struct_line(self, line: str): + # Match the reference to the associated LF_FIELDLIST + if (match := self.CLASS_FIELD_RE.match(line)) is not None: + if match.group("field_type") == "0x0000": + # Not redundant. UDT might not match the key. + # These cases get reported as UDT mismatch. + self._set("is_forward_ref", True) + else: + field_list_type = normalize_type_id(match.group("field_type")) + self._set("field_list_type", field_list_type) + + elif line.lstrip().startswith("Derivation list type"): + # We do not care about the second line, but we still match it so we see an error + # when another line fails to match + pass + elif (match := self.CLASS_NAME_RE.match(line)) is not None: + # Last line has the vital information. + # If this is a FORWARD REF, we need to follow the UDT pointer + # to get the actual class details. + self._set("name", match.group("name")) + udt = match.group("udt") + if udt is not None: + self._set("udt", normalize_type_id(udt)) + self._set("size", int(match.group("size"))) + else: + logger.error("Unmatched line in class: %s", line[:-1]) + + def read_arglist_line(self, line: str): + if (match := self.LF_ARGLIST_ENTRY.match(line)) is not None: + obj = self.keys[self.last_key] + arglist: list = obj.setdefault("args", []) + assert int(match.group("index")) == len( + arglist + ), "Argument list out of sync" + arglist.append(match.group("arg_type")) + else: + logger.error("Unmatched line in arglist: %s", line[:-1]) + + def read_pointer_line(self, line: str): + if (match := self.LF_POINTER_ELEMENT.match(line)) is not None: + self._set("element_type", match.group("element_type")) + else: + stripped_line = line.strip() + # We don't parse these lines, but we still want to check for exhaustiveness + # in case we missed some relevant data + if not any( + stripped_line.startswith(prefix) + for prefix in ["Pointer", "const Pointer", "L-value", "volatile"] + ): + logger.error("Unrecognized pointer attribute: %s", line[:-1]) + + def read_mfunction_line(self, line: str): + """ + The layout is not consistent, so we want to be as robust as possible here. + - Example 1: + Return type = T_LONG(0012), Call type = C Near + Func attr = none + - Example 2: + Return type = T_CHAR(0010), Class type = 0x101A, This type = 0x101B, + Call type = ThisCall, Func attr = none + """ + + obj = self.keys[self.last_key] + + key_value_pairs = line.split(",") + for pair in key_value_pairs: + if pair.isspace(): + continue + obj |= self.parse_function_attribute(pair) + + def parse_function_attribute(self, pair: str) -> dict[str, str]: + for attribute_regex in self.LF_MFUNCTION_ATTRIBUTES: + if (match := attribute_regex.match(pair)) is not None: + return match.groupdict() + logger.error("Unknown attribute in function: %s", pair) + return {} + + def read_enum_line(self, line: str): + obj = self.keys[self.last_key] + + # We need special comma handling because commas may appear in the name. + # Splitting by "," yields the wrong result. + enum_attributes = line.split(", ") + for pair in enum_attributes: + if pair.endswith(","): + pair = pair[:-1] + if pair.isspace(): + continue + obj |= self.parse_enum_attribute(pair) + + def parse_enum_attribute(self, attribute: str) -> dict[str, Any]: + for attribute_regex in self.LF_ENUM_ATTRIBUTES: + if (match := attribute_regex.match(attribute)) is not None: + return match.groupdict() + if attribute == "NESTED": + return {"is_nested": True} + if attribute == "FORWARD REF": + return {"is_forward_ref": True} + if attribute.startswith("UDT"): + match = self.LF_ENUM_UDT.match(attribute) + assert match is not None + return {"udt": normalize_type_id(match.group("udt"))} + if (match := self.LF_ENUM_TYPES.match(attribute)) is not None: + result = match.groupdict() + result["underlying_type"] = normalize_type_id(result["underlying_type"]) + return result + logger.error("Unknown attribute in enum: %s", attribute) + return {} + + def read_union_line(self, line: str): + """This is a rather barebones handler, only parsing the size""" + if (match := self.LF_UNION_LINE.match(line)) is None: + raise AssertionError(f"Unhandled in union: {line}") + self._set("name", match.group("name")) + if match.group("field_type") == "0x0000": + self._set("is_forward_ref", True) + + self._set("size", int(match.group("size"))) + if match.group("udt") is not None: + self._set("udt", normalize_type_id(match.group("udt"))) diff --git a/tools/isledecomp/isledecomp/dir.py b/tools/isledecomp/isledecomp/dir.py new file mode 100644 index 00000000..ca7e3fd5 --- /dev/null +++ b/tools/isledecomp/isledecomp/dir.py @@ -0,0 +1,103 @@ +import os +import subprocess +import sys +import pathlib +from typing import Iterator + + +def winepath_win_to_unix(path: str) -> str: + return subprocess.check_output(["winepath", path], text=True).strip() + + +def winepath_unix_to_win(path: str) -> str: + return subprocess.check_output(["winepath", "-w", path], text=True).strip() + + +class PathResolver: + """Intended to resolve Windows/Wine paths used in the PDB (cvdump) output + into a "canonical" format to be matched against code file paths from os.walk. + MSVC may include files from the parent dir using `..`. We eliminate those and create + an absolute path so that information about the same file under different names + will be combined into the same record. (i.e. line_no/addr pairs from LINES section.) + """ + + def __init__(self, basedir) -> None: + """basedir is the root path of the code directory in the format for your OS. + We will convert it to a PureWindowsPath to be platform-independent + and match that to the paths from the PDB.""" + + # Memoize the converted paths. We will need to do this for each path + # in the PDB, for each function in that file. (i.e. lots of repeated work) + self._memo = {} + + # Convert basedir to an absolute path if it is not already. + # If it is not absolute, we cannot do the path swap on unix. + self._realdir = pathlib.Path(basedir).resolve() + + self._is_unix = os.name != "nt" + if self._is_unix: + self._basedir = pathlib.PureWindowsPath( + winepath_unix_to_win(str(self._realdir)) + ) + else: + self._basedir = self._realdir + + def _memo_wrapper(self, path_str: str) -> str: + """Wrapper so we can memoize from the public caller method""" + path = pathlib.PureWindowsPath(path_str) + if not path.is_absolute(): + # pathlib syntactic sugar for path concat + path = self._basedir / path + + if self._is_unix: + # If the given path is relative to the basedir, deconstruct the path + # and swap in our unix path to avoid an expensive call to winepath. + try: + # Will raise ValueError if we are not relative to the base. + section = path.relative_to(self._basedir) + # Should combine to pathlib.PosixPath + mockpath = (self._realdir / section).resolve() + if mockpath.is_file(): + return str(mockpath) + except ValueError: + pass + + # We are not relative to the basedir, or our path swap attempt + # did not point at an actual file. Either way, we are forced + # to call winepath using our original path. + return winepath_win_to_unix(str(path)) + + # We must be on Windows. Convert back to WindowsPath. + # The resolve() call will eliminate intermediate backdir references. + return str(pathlib.Path(path).resolve()) + + def resolve_cvdump(self, path_str: str) -> str: + """path_str is in Windows/Wine path format. + We will return a path in the format for the host OS.""" + if path_str not in self._memo: + self._memo[path_str] = self._memo_wrapper(path_str) + + return self._memo[path_str] + + +def is_file_cpp(filename: str) -> bool: + (_, ext) = os.path.splitext(filename) + return ext.lower() in (".h", ".cpp") + + +def walk_source_dir(source: str, recursive: bool = True) -> Iterator[str]: + """Generator to walk the given directory recursively and return + any C++ files found.""" + + source = os.path.abspath(source) + for subdir, _, files in os.walk(source): + for file in files: + if is_file_cpp(file): + yield os.path.join(subdir, file) + + if not recursive: + break + + +def get_file_in_script_dir(fn): + return os.path.join(os.path.dirname(os.path.abspath(sys.argv[0])), fn) diff --git a/tools/isledecomp/isledecomp/lib/DUMPBIN.EXE b/tools/isledecomp/isledecomp/lib/DUMPBIN.EXE new file mode 100644 index 0000000000000000000000000000000000000000..c57ed02cf5ada945542683c25c83e4b935f79a57 GIT binary patch literal 5632 zcmeHLeQXh&%6nwUf@Tyt46v zD}H6;9z9!@N=9+qNadw;s!%AJ(jiSUDg`N9kfOVXrF=1?1=p-u6==Fn#E9aq6*T#y z*Fvpm^VI2D?ecbuq&gk$=slRbfD+RYXYF?KW)9~spoFnWa9u)??buk%ixV@2t8F|d zh|W0%OfA7E(bt!#kG*;(LiFSvw1cL0)P(#)j>&m(&WlB04UmXNgGMH0rifTq)Q+0T z$HWpuP({#DqX(HS16gks6H5>wnh9nd#RpgphKSjLxeX$$XOxXJc%mohjnLyf+aSVm z4J}uM;vbnm3S__Cz&3~wZEqu&m!F^xSkZt_Cn-W!Jm5+yhhWZ&KinxMp>?SCl(J0BM3u&AF3grQU46A09!0l7NYt&hU5z8}NjP{Q^< z4<&G`(}B%yL|J=cJ=CoefdHs_$4NfaaCH`1wP;{Nb@eVY^^+dl(& zbMxH?aKP5 zIHAi@1lwWz=N84&q8qMn^jfE#=A9Re>a1_T+Hx9dmZv)FP1wIexdW9O@2qHYomM-1 zj?vzHAEMl@`TG{P;Xv}>6O(g%S}t}_>-b#GOkqoCueC5?>pFbsH$EMqM5flm?CQei z;gNkct#K)KlWE@6H<2Imx^&lO84&?fyf`B><-ZD{wMN3a=Cl282x^0%rY&;A zzJ;^9AgsG}FGMx7?g z3@&Qi-}JZGdtS6Z%S_K+wtLx)zTGHlj1uE z9uLO$$N1+Ymn|F)LV)G1HpPl5700B!mM%3EH2bxZ^_6O%rQjvj2Rl{9;Rs%d zyIX6z&zn!>#4Y!C?qoi7SSzJWorYPS%bJ3q_3mV{gun58$uwx!@JRpAp0FIuy2vbjjS2&6%1(s~wAEwvaWo!V&tRTPz{UlN+*e&CI8=g_JQ~rq6>eYi6Yk zA!6e_P4tL6naWI5%4TvblRZLox8pBe%=0%Ek>8=m9ID6hkW7_IN%L3OMHs1BRbACw)0(} z<=gOA;;#A_WTOdu$9vf7R)~ATV2sc(B{9Zm2&Nm=rBAPka2|-IwVRDFUT*;)AEYYrciH4 z4ZRS$7Z{oL8omi^|WHHIL;Z^#c{#jvdC`KrZoPxD5a04*UZTumq<7 literal 0 HcmV?d00001 diff --git a/tools/isledecomp/isledecomp/lib/LINK.EXE b/tools/isledecomp/isledecomp/lib/LINK.EXE new file mode 100644 index 0000000000000000000000000000000000000000..9d35a8993d959611a7e1c15cb41bd8c3c676a784 GIT binary patch literal 514048 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%0Dw%fIS}4V*0PQ23-r0^ie}44 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%0D=lYG)_*cDJR?I* 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%0DSs~wI- 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 V`|k<-_XPfX0{=aM|Bol|{{Z)(1AYJi literal 0 HcmV?d00001 diff --git a/tools/isledecomp/isledecomp/lib/MSPDB41.DLL b/tools/isledecomp/isledecomp/lib/MSPDB41.DLL new file mode 100644 index 0000000000000000000000000000000000000000..9d2953e2b3308944c7fd531780fe63020a74bc71 GIT binary patch literal 271872 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%0D64W!-TzeE*> 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 literal 0 HcmV?d00001 diff --git a/tools/isledecomp/isledecomp/lib/__init__.py b/tools/isledecomp/isledecomp/lib/__init__.py new file mode 100644 index 00000000..f1081a81 --- /dev/null +++ b/tools/isledecomp/isledecomp/lib/__init__.py @@ -0,0 +1,13 @@ +"""Provides a reference point for redistributed tools found in this directory. +This allows you to get the path for these tools from a script run anywhere.""" +from os.path import join, dirname + + +def lib_path() -> str: + """Returns the directory for this module.""" + return dirname(__file__) + + +def lib_path_join(name: str) -> str: + """Convenience wrapper for os.path.join.""" + return join(lib_path(), name) diff --git a/tools/isledecomp/isledecomp/lib/cvdump.exe b/tools/isledecomp/isledecomp/lib/cvdump.exe new file mode 100644 index 0000000000000000000000000000000000000000..8c1eff6e058dbf5226ae1b5876cec4f55240d84f GIT binary patch literal 979968 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%0AhV?W@?7ZOhAoV6Lh{Sm@NIl7p&Ljo?Jl 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

+ Address display: + + + + + + +
`; + + shadow.querySelectorAll('input[type=radio]').forEach(radio => { + const checked = this.option === radio.getAttribute('value'); + setBooleanAttribute(radio, 'checked', checked); + + radio.addEventListener('change', evt => (this.option = evt.target.value)); + }); + } + + set option(value) { + this.setAttribute('data-option', parseInt(value)); + } + + get option() { + return this.getAttribute('data-option') ?? 1; + } + + attributeChangedCallback(name, oldValue, newValue) { + if (name !== 'data-option') { + return; + } + + this.dispatchEvent(new Event('change')); + } +} + +class DiffDisplay extends window.HTMLElement { + static observedAttributes = ['data-option']; + + connectedCallback() { + if (this.querySelector('diff-display-options') !== null) { + return; + } + + const optControl = new DiffDisplayOptions(); + optControl.option = this.option; + optControl.addEventListener('change', evt => (this.option = evt.target.option)); + this.appendChild(optControl); + + const div = document.createElement('div'); + const obj = getDataByAddr(this.address); + + const createHeaderLine = (text, className) => { + const div = document.createElement('div'); + div.textContent = text; + div.className = className; + return div; + }; + + const groups = obj.diff; + groups.forEach(([slug, subgroups]) => { + const secondTable = document.createElement('table'); + secondTable.classList.add('diffTable'); + + const hdr = document.createElement('div'); + hdr.appendChild(createHeaderLine('---', 'diffneg')); + hdr.appendChild(createHeaderLine('+++', 'diffpos')); + hdr.appendChild(createHeaderLine(slug, 'diffslug')); + div.appendChild(hdr); + + const tbody = document.createElement('tbody'); + secondTable.appendChild(tbody); + + const diffs = formatAsm(subgroups, this.option); + for (const el of diffs) { + tbody.appendChild(el); + } + + div.appendChild(secondTable); + }); + + this.appendChild(div); + } + + get address() { + return this.getAttribute('data-address'); + } + + set address(value) { + this.setAttribute('data-address', value); + } + + get option() { + return this.getAttribute('data-option') ?? 1; + } + + set option(value) { + this.setAttribute('data-option', value); + } +} + +class ListingOptions extends window.HTMLElement { + constructor() { + super(); + + // Register to receive updates + appState.addListener(() => this.onUpdate()); + + const input = this.querySelector('input[type=search]'); + input.oninput = evt => (appState.query = evt.target.value); + + const hidePerf = this.querySelector('input#cbHidePerfect'); + hidePerf.onchange = evt => (appState.hidePerfect = evt.target.checked); + hidePerf.checked = appState.hidePerfect; + + const hideStub = this.querySelector('input#cbHideStub'); + hideStub.onchange = evt => (appState.hideStub = evt.target.checked); + hideStub.checked = appState.hideStub; + + const showRecomp = this.querySelector('input#cbShowRecomp'); + showRecomp.onchange = evt => (appState.showRecomp = evt.target.checked); + showRecomp.checked = appState.showRecomp; + + this.querySelector('button#pagePrev').addEventListener('click', evt => { + appState.page = appState.page - 1; + }); + + this.querySelector('button#pageNext').addEventListener('click', evt => { + appState.page = appState.page + 1; + }); + + this.querySelector('select#pageSelect').addEventListener('change', evt => { + appState.page = evt.target.value; + }); + + this.querySelectorAll('input[name=filterType]').forEach(radio => { + const checked = appState.filterType === parseInt(radio.getAttribute('value')); + setBooleanAttribute(radio, 'checked', checked); + + radio.onchange = evt => (appState.filterType = radio.getAttribute('value')); + }); + + this.onUpdate(); + } + + onUpdate() { + // Update input placeholder based on search type + this.querySelector('input[type=search]').placeholder = appState.filterType === 1 + ? 'Search for offset or function name...' + : 'Search for instruction...'; + + // Update page number and max page + this.querySelector('fieldset#pageDisplay > legend').textContent = `Page ${appState.page + 1} of ${Math.max(1, appState.pageCount())}`; + + // Disable prev/next buttons on first/last page + setBooleanAttribute(this.querySelector('button#pagePrev'), 'disabled', appState.page === 0); + setBooleanAttribute(this.querySelector('button#pageNext'), 'disabled', appState.page === appState.maxPage()); + + // Update page select dropdown + const pageSelect = this.querySelector('select#pageSelect'); + setBooleanAttribute(pageSelect, 'disabled', appState.resultsCount() === 0); + pageSelect.innerHTML = ''; + + if (appState.resultsCount() === 0) { + const opt = document.createElement('option'); + opt.textContent = '- no results -'; + pageSelect.appendChild(opt); + } else { + for (const row of appState.pageHeadings()) { + const opt = document.createElement('option'); + opt.value = row[0]; + if (appState.page === row[0]) { + opt.setAttribute('selected', ''); + } + + const [start, end] = [row[1], row[2]]; + + opt.textContent = `${appState.sortCol}: ${start} to ${end}`; + pageSelect.appendChild(opt); + } + } + + // Update row count + this.querySelector('#rowcount').textContent = `${appState.resultsCount()}`; + } +} + +// Main application. +class ListingTable extends window.HTMLElement { + constructor() { + super(); + + // Register to receive updates + appState.addListener(() => this.somethingChanged()); + } + + setDiffRow(address, shouldExpand) { + const tbody = this.querySelector('tbody'); + const funcrow = tbody.querySelector(`func-row[data-address="${address}"]`); + if (funcrow === null) { + return; + } + + const existing = tbody.querySelector(`diff-row[data-address="${address}"]`); + if (existing !== null) { + if (!shouldExpand) { + tbody.removeChild(existing); + } + + return; + } + + const diffrow = document.createElement('diff-row'); + diffrow.address = address; + + // Decide what goes inside the diff row. + const obj = getDataByAddr(address); + + if ('stub' in obj) { + const msg = document.createElement('no-diff'); + const p = document.createElement('div'); + p.innerText = 'Stub. No diff.'; + msg.appendChild(p); + diffrow.appendChild(msg); + } else if (obj.diff.length === 0) { + const msg = document.createElement('no-diff'); + const p = document.createElement('div'); + p.innerText = 'Identical function - no diff'; + msg.appendChild(p); + diffrow.appendChild(msg); + } else { + const dd = new DiffDisplay(); + dd.option = '1'; + dd.address = address; + diffrow.appendChild(dd); + } + + // Insert the diff row after the parent func row. + tbody.insertBefore(diffrow, funcrow.nextSibling); + } + + connectedCallback() { + const thead = this.querySelector('thead'); + const headers = thead.querySelectorAll('th:not([data-no-sort])'); // TODO + headers.forEach(th => { + const col = th.getAttribute('data-col'); + if (col) { + const span = th.querySelector('span'); + if (span) { + span.addEventListener('click', evt => { appState.sortCol = col; }); + } + } + }); + + this.somethingChanged(); + } + + somethingChanged() { + // Toggle recomp/diffs column + setBooleanAttribute(this.querySelector('table'), 'show-recomp', appState.showRecomp); + this.querySelectorAll('func-row[data-address]').forEach(row => { + setBooleanAttribute(row, 'show-recomp', appState.showRecomp); + }); + + const thead = this.querySelector('thead'); + const headers = thead.querySelectorAll('th'); + + // Update sort indicator + headers.forEach(th => { + const col = th.getAttribute('data-col'); + const indicator = th.querySelector('sort-indicator'); + if (indicator === null) { + return; + } + + if (appState.sortCol === col) { + indicator.setAttribute('data-sort', appState.sortDesc ? 'desc' : 'asc'); + } else { + indicator.removeAttribute('data-sort'); + } + }); + + // Add the rows + const tbody = this.querySelector('tbody'); + tbody.innerHTML = ''; // ? + + for (const obj of appState.pageSlice()) { + const row = document.createElement('func-row'); + row.setAttribute('data-address', obj.address); // ? + row.addEventListener('name-click', evt => { + appState.toggleExpanded(obj.address); + this.setDiffRow(obj.address, appState.isExpanded(obj.address)); + }); + setBooleanAttribute(row, 'show-recomp', appState.showRecomp); + setBooleanAttribute(row, 'expanded', appState.isExpanded(row)); + + const items = [ + ['address', obj.address], + ['recomp', obj.recomp], + ['name', obj.name], + ['diffs', countDiffs(obj)], + ['matching', getMatchPercentText(obj)] + ]; + + items.forEach(([slotName, content]) => { + const div = document.createElement('span'); + div.setAttribute('slot', slotName); + div.innerText = content; + row.appendChild(div); + }); + + tbody.appendChild(row); + + if (appState.isExpanded(obj.address)) { + this.setDiffRow(obj.address, true); + } + } + } +} + +window.onload = () => { + window.customElements.define('listing-table', ListingTable); + window.customElements.define('listing-options', ListingOptions); + window.customElements.define('diff-display', DiffDisplay); + window.customElements.define('diff-display-options', DiffDisplayOptions); + window.customElements.define('sort-indicator', SortIndicator); + window.customElements.define('func-row', FuncRow); + window.customElements.define('diff-row', DiffRow); + window.customElements.define('no-diff', NoDiffMessage); + window.customElements.define('can-copy', CanCopy); +}; diff --git a/tools/reccmp/reccmp.py b/tools/reccmp/reccmp.py new file mode 100644 index 00000000..bcdb0899 --- /dev/null +++ b/tools/reccmp/reccmp.py @@ -0,0 +1,344 @@ +#!/usr/bin/env python3 + +import argparse +import base64 +import json +import logging +import os +from datetime import datetime + +from isledecomp import ( + Bin, + get_file_in_script_dir, + print_combined_diff, + diff_json, + percent_string, +) +from isledecomp.compare import Compare as IsleCompare +from isledecomp.types import SymbolType +from pystache import Renderer +import colorama + +colorama.just_fix_windows_console() + + +def gen_json(json_file: str, orig_file: str, data): + """Create a JSON file that contains the comparison summary""" + + # If the structure of the JSON file ever changes, we would run into a problem + # reading an older format file in the CI action. Mark which version we are + # generating so we could potentially address this down the road. + json_format_version = 1 + + # Remove the diff field + reduced_data = [ + {key: value for (key, value) in obj.items() if key != "diff"} for obj in data + ] + + with open(json_file, "w", encoding="utf-8") as f: + json.dump( + { + "file": os.path.basename(orig_file).lower(), + "format": json_format_version, + "timestamp": datetime.now().timestamp(), + "data": reduced_data, + }, + f, + ) + + +def gen_html(html_file, data): + js_path = get_file_in_script_dir("reccmp.js") + with open(js_path, "r", encoding="utf-8") as f: + reccmp_js = f.read() + + output_data = Renderer().render_path( + get_file_in_script_dir("template.html"), {"data": data, "reccmp_js": reccmp_js} + ) + + with open(html_file, "w", encoding="utf-8") as htmlfile: + htmlfile.write(output_data) + + +def gen_svg(svg_file, name_svg, icon, svg_implemented_funcs, total_funcs, raw_accuracy): + icon_data = None + if icon: + with open(icon, "rb") as iconfile: + icon_data = base64.b64encode(iconfile.read()).decode("utf-8") + + total_statistic = raw_accuracy / total_funcs + full_percentbar_width = 127.18422 + output_data = Renderer().render_path( + get_file_in_script_dir("template.svg"), + { + "name": name_svg, + "icon": icon_data, + "implemented": f"{(svg_implemented_funcs / total_funcs * 100):.2f}% ({svg_implemented_funcs}/{total_funcs})", + "accuracy": f"{(raw_accuracy / svg_implemented_funcs * 100):.2f}%", + "progbar": total_statistic * full_percentbar_width, + "percent": f"{(total_statistic * 100):.2f}%", + }, + ) + with open(svg_file, "w", encoding="utf-8") as svgfile: + svgfile.write(output_data) + + +def print_match_verbose(match, show_both_addrs: bool = False, is_plain: bool = False): + percenttext = percent_string( + match.effective_ratio, match.is_effective_match, is_plain + ) + + if show_both_addrs: + addrs = f"0x{match.orig_addr:x} / 0x{match.recomp_addr:x}" + else: + addrs = hex(match.orig_addr) + + if match.is_stub: + print(f"{addrs}: {match.name} is a stub. No diff.") + return + + if match.effective_ratio == 1.0: + ok_text = ( + "OK!" + if is_plain + else (colorama.Fore.GREEN + "✨ OK! ✨" + colorama.Style.RESET_ALL) + ) + if match.ratio == 1.0: + print(f"{addrs}: {match.name} 100% match.\n\n{ok_text}\n\n") + else: + print( + f"{addrs}: {match.name} Effective 100% match. (Differs in register allocation only)\n\n{ok_text} (still differs in register allocation)\n\n" + ) + else: + print_combined_diff(match.udiff, is_plain, show_both_addrs) + + print( + f"\n{match.name} is only {percenttext} similar to the original, diff above" + ) + + +def print_match_oneline(match, show_both_addrs: bool = False, is_plain: bool = False): + percenttext = percent_string( + match.effective_ratio, match.is_effective_match, is_plain + ) + + if show_both_addrs: + addrs = f"0x{match.orig_addr:x} / 0x{match.recomp_addr:x}" + else: + addrs = hex(match.orig_addr) + + if match.is_stub: + print(f" {match.name} ({addrs}) is a stub.") + else: + print(f" {match.name} ({addrs}) is {percenttext} similar to the original") + + +def parse_args() -> argparse.Namespace: + def virtual_address(value) -> int: + """Helper method for argparse, verbose parameter""" + return int(value, 16) + + parser = argparse.ArgumentParser( + allow_abbrev=False, + description="Recompilation Compare: compare an original EXE with a recompiled EXE + PDB.", + ) + parser.add_argument( + "original", metavar="original-binary", help="The original binary" + ) + parser.add_argument( + "recompiled", metavar="recompiled-binary", help="The recompiled binary" + ) + parser.add_argument( + "pdb", metavar="recompiled-pdb", help="The PDB of the recompiled binary" + ) + parser.add_argument( + "decomp_dir", metavar="decomp-dir", help="The decompiled source tree" + ) + parser.add_argument( + "--total", + "-T", + metavar="", + help="Total number of expected functions (improves total accuracy statistic)", + ) + parser.add_argument( + "--verbose", + "-v", + metavar="", + type=virtual_address, + help="Print assembly diff for specific function (original file's offset)", + ) + parser.add_argument( + "--json", + metavar="", + help="Generate JSON file with match summary", + ) + parser.add_argument( + "--diff", + metavar="", + help="Diff against summary in JSON file", + ) + parser.add_argument( + "--html", + "-H", + metavar="", + help="Generate searchable HTML summary of status and diffs", + ) + parser.add_argument( + "--no-color", "-n", action="store_true", help="Do not color the output" + ) + parser.add_argument( + "--svg", "-S", metavar="", help="Generate SVG graphic of progress" + ) + parser.add_argument("--svg-icon", metavar="icon", help="Icon to use in SVG (PNG)") + parser.add_argument( + "--print-rec-addr", + action="store_true", + help="Print addresses of recompiled functions too", + ) + parser.add_argument( + "--silent", + action="store_true", + help="Don't display text summary of matches", + ) + + parser.set_defaults(loglevel=logging.INFO) + parser.add_argument( + "--debug", + action="store_const", + const=logging.DEBUG, + dest="loglevel", + help="Print script debug information", + ) + + args = parser.parse_args() + + if not os.path.isfile(args.original): + parser.error(f"Original binary {args.original} does not exist") + + if not os.path.isfile(args.recompiled): + parser.error(f"Recompiled binary {args.recompiled} does not exist") + + if not os.path.isfile(args.pdb): + parser.error(f"Symbols PDB {args.pdb} does not exist") + + if not os.path.isdir(args.decomp_dir): + parser.error(f"Source directory {args.decomp_dir} does not exist") + + return args + + +def main(): + args = parse_args() + logging.basicConfig(level=args.loglevel, format="[%(levelname)s] %(message)s") + + with Bin(args.original, find_str=True) as origfile, Bin( + args.recompiled + ) as recompfile: + if args.verbose is not None: + # Mute logger events from compare engine + logging.getLogger("isledecomp.compare.db").setLevel(logging.CRITICAL) + logging.getLogger("isledecomp.compare.lines").setLevel(logging.CRITICAL) + + isle_compare = IsleCompare(origfile, recompfile, args.pdb, args.decomp_dir) + + if args.loglevel == logging.DEBUG: + isle_compare.debug = True + + print() + + ### Compare one or none. + + if args.verbose is not None: + match = isle_compare.compare_address(args.verbose) + if match is None: + print(f"Failed to find a match at address 0x{args.verbose:x}") + return + + print_match_verbose( + match, show_both_addrs=args.print_rec_addr, is_plain=args.no_color + ) + return + + ### Compare everything. + + function_count = 0 + total_accuracy = 0 + total_effective_accuracy = 0 + htmlinsert = [] + + for match in isle_compare.compare_all(): + if not args.silent and args.diff is None: + print_match_oneline( + match, show_both_addrs=args.print_rec_addr, is_plain=args.no_color + ) + + if match.match_type == SymbolType.FUNCTION and not match.is_stub: + function_count += 1 + total_accuracy += match.ratio + total_effective_accuracy += match.effective_ratio + + # If html, record the diffs to an HTML file + html_obj = { + "address": f"0x{match.orig_addr:x}", + "recomp": f"0x{match.recomp_addr:x}", + "name": match.name, + "matching": match.effective_ratio, + } + + if match.is_effective_match: + html_obj["effective"] = True + + if match.udiff is not None: + html_obj["diff"] = match.udiff + + if match.is_stub: + html_obj["stub"] = True + + htmlinsert.append(html_obj) + + # Compare with saved diff report. + if args.diff is not None: + with open(args.diff, "r", encoding="utf-8") as f: + saved_data = json.load(f) + + diff_json( + saved_data, + htmlinsert, + args.original, + show_both_addrs=args.print_rec_addr, + is_plain=args.no_color, + ) + + ## Generate files and show summary. + + if args.json is not None: + gen_json(args.json, args.original, htmlinsert) + + if args.html is not None: + gen_html(args.html, json.dumps(htmlinsert)) + + implemented_funcs = function_count + + if args.total: + function_count = int(args.total) + + if function_count > 0: + effective_accuracy = total_effective_accuracy / function_count * 100 + actual_accuracy = total_accuracy / function_count * 100 + print( + f"\nTotal effective accuracy {effective_accuracy:.2f}% across {function_count} functions ({actual_accuracy:.2f}% actual accuracy)" + ) + + if args.svg is not None: + gen_svg( + args.svg, + os.path.basename(args.original), + args.svg_icon, + implemented_funcs, + function_count, + total_effective_accuracy, + ) + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/tools/reccmp/template.html b/tools/reccmp/template.html new file mode 100644 index 00000000..3ac15b45 --- /dev/null +++ b/tools/reccmp/template.html @@ -0,0 +1,365 @@ + + + + Decompilation Status + + + + + + +
+

Decompilation Status

+ + +
+
+ Options: + + + + + + +
+
+ Search filters on: + + + + + + +
+
+
+

Results:

+
+ Page + + + +
+
+
+ + + + + + + + + + + + + +
+
+ Address + +
+
+
+ Recomp + +
+
+
+ Name + +
+
+
+ + Matching +
+
+
+
+ + + + + + diff --git a/tools/reccmp/template.svg b/tools/reccmp/template.svg new file mode 100644 index 00000000..fad7ba10 --- /dev/null +++ b/tools/reccmp/template.svg @@ -0,0 +1,119 @@ + + + + + + + + {{name}}{{percent}}{{percent}}Implemented: {{implemented}}Accuracy: {{accuracy}} diff --git a/tools/roadmap/roadmap.py b/tools/roadmap/roadmap.py new file mode 100644 index 00000000..b7294a95 --- /dev/null +++ b/tools/roadmap/roadmap.py @@ -0,0 +1,494 @@ +"""For all addresses matched by code annotations or recomp pdb, +report how "far off" the recomp symbol is from its proper place +in the original binary.""" + +import os +import argparse +import logging +import statistics +import bisect +from typing import Iterator, List, Optional, Tuple +from collections import namedtuple +from isledecomp import Bin as IsleBin +from isledecomp.bin import InvalidVirtualAddressError +from isledecomp.cvdump import Cvdump +from isledecomp.compare import Compare as IsleCompare +from isledecomp.types import SymbolType + +# Ignore all compare-db messages. +logging.getLogger("isledecomp.compare").addHandler(logging.NullHandler()) + + +def or_blank(value) -> str: + """Helper for dealing with potential None values in text output.""" + return "" if value is None else str(value) + + +class ModuleMap: + """Load a subset of sections from the pdb to allow you to look up the + module number based on the recomp address.""" + + def __init__(self, pdb, binfile) -> None: + cvdump = Cvdump(pdb).section_contributions().modules().run() + self.module_lookup = {m.id: (m.lib, m.obj) for m in cvdump.modules} + self.library_lookup = {m.obj: m.lib for m in cvdump.modules} + self.section_contrib = [ + ( + binfile.get_abs_addr(sizeref.section, sizeref.offset), + sizeref.size, + sizeref.module, + ) + for sizeref in cvdump.sizerefs + if binfile.is_valid_section(sizeref.section) + ] + + # For bisect performance enhancement + self.contrib_starts = [start for (start, _, __) in self.section_contrib] + + def get_lib_for_module(self, module: str) -> Optional[str]: + return self.library_lookup.get(module) + + def get_all_cmake_modules(self) -> List[str]: + return [ + obj + for (_, (__, obj)) in self.module_lookup.items() + if obj.startswith("CMakeFiles") + ] + + def get_module(self, addr: int) -> Optional[str]: + i = bisect.bisect_left(self.contrib_starts, addr) + # If the addr matches the section contribution start, we are in the + # right spot. Otherwise, we need to subtract one here. + # We don't want the insertion point given by bisect, but the + # section contribution that contains the address. + + (potential_start, _, __) = self.section_contrib[i] + if potential_start != addr: + i -= 1 + + # Safety catch: clamp to range of indices from section_contrib. + i = max(0, min(i, len(self.section_contrib) - 1)) + + (start, size, module_id) = self.section_contrib[i] + if start <= addr < start + size: + if (module := self.module_lookup.get(module_id)) is not None: + return module + + return None + + +def print_sections(sections): + print(" name | start | v.size | raw size") + print("---------|----------|----------|----------") + for sect in sections: + name = sect.name + print( + f"{name:>8} | {sect.virtual_address:8x} | {sect.virtual_size:8x} | {sect.size_of_raw_data:8x}" + ) + print() + + +ALLOWED_TYPE_ABBREVIATIONS = ["fun", "dat", "poi", "str", "vta", "flo"] + + +def match_type_abbreviation(mtype: Optional[SymbolType]) -> str: + """Return abbreviation of the given SymbolType name""" + if mtype is None: + return "" + + return mtype.name.lower()[:3] + + +def get_cmakefiles_prefix(module: str) -> str: + """For the given .obj, get the "CMakeFiles/something.dir/" prefix. + For lack of a better option, this is the library for this module.""" + if module.startswith("CMakeFiles"): + return "/".join(module.split("/", 2)[:2]) + "/" + + return module + + +def truncate_module_name(prefix: str, module: str) -> str: + """Remove the CMakeFiles prefix and the .obj suffix for the given module. + Input: CMakeFiles/lego1.dir/, CMakeFiles/lego1.dir/LEGO1/define.cpp.obj + Output: LEGO1/define.cpp""" + + if module.startswith(prefix): + module = module[len(prefix) :] + + if module.endswith(".obj"): + module = module[:-4] + + return module + + +def avg_remove_outliers(entries: List[int]) -> int: + """Compute the average from this list of entries (addresses) + after removing outlier values.""" + + if len(entries) == 1: + return entries[0] + + avg = statistics.mean(entries) + sd = statistics.pstdev(entries) + + return int(statistics.mean([e for e in entries if abs(e - avg) <= 2 * sd])) + + +RoadmapRow = namedtuple( + "RoadmapRow", + [ + "orig_sect_ofs", + "recomp_sect_ofs", + "orig_addr", + "recomp_addr", + "displacement", + "sym_type", + "size", + "name", + "module", + ], +) + + +class DeltaCollector: + """Reads each row of the results and aggregates information about the + placement of each module.""" + + def __init__(self, match_type: str = "fun") -> None: + # The displacement for each symbol from each module + self.disp_map = {} + + # Each address for each module + self.addresses = {} + + # The earliest address for each module + self.earliest = {} + + # String abbreviation for which symbol type we are checking + self.match_type = "fun" + + match_type = str(match_type).strip().lower()[:3] + if match_type in ALLOWED_TYPE_ABBREVIATIONS: + self.match_type = match_type + + def read_row(self, row: RoadmapRow): + if row.module is None: + return + + if row.sym_type != self.match_type: + return + + if row.orig_addr is not None: + if row.module not in self.addresses: + self.addresses[row.module] = [] + + self.addresses[row.module].append(row.orig_addr) + + if row.orig_addr < self.earliest.get(row.module, 0xFFFFFFFFF): + self.earliest[row.module] = row.orig_addr + + if row.displacement is not None: + if row.module not in self.disp_map: + self.disp_map[row.module] = [] + + self.disp_map[row.module].append(row.displacement) + + def iter_sorted(self) -> Iterator[Tuple[int, int]]: + """Compute the average address for each module, then generate them + in ascending order.""" + avg_address = { + mod: avg_remove_outliers(values) for mod, values in self.addresses.items() + } + for mod, avg in sorted(avg_address.items(), key=lambda x: x[1]): + yield (avg, mod) + + +def suggest_order(results: List[RoadmapRow], module_map: ModuleMap, match_type: str): + """Suggest the order of modules for CMakeLists.txt""" + + dc = DeltaCollector(match_type) + for row in results: + dc.read_row(row) + + # First, show the order of .obj files for the "CMake Modules" + # Meaning: the modules where the .obj file begins with "CMakeFiles". + # These are the libraries where we directly control the order. + # The library name (from cvdump) doesn't make it obvious that these are + # our libraries so we derive the name based on the CMakeFiles prefix. + leftover_modules = set(module_map.get_all_cmake_modules()) + + # A little convoluted, but we want to take the first two tokens + # of the string with '/' as the delimiter. + # i.e. CMakeFiles/isle.dir/ + # The idea is to print exactly what appears in CMakeLists.txt. + cmake_prefixes = sorted(set(get_cmakefiles_prefix(mod) for mod in leftover_modules)) + + # Save this off because we'll use it again later. + computed_order = list(dc.iter_sorted()) + + for prefix in cmake_prefixes: + print(prefix) + + last_earliest = 0 + # Show modules ordered by the computed average of addresses + for _, module in computed_order: + if not module.startswith(prefix): + continue + + leftover_modules.remove(module) + + avg_displacement = None + displacements = dc.disp_map.get(module) + if displacements is not None and len(displacements) > 0: + avg_displacement = int(statistics.mean(displacements)) + + # Call attention to any modules where ordering by earliest + # address is different from the computed order we display. + earliest = dc.earliest.get(module) + ooo_mark = "*" if earliest < last_earliest else " " + last_earliest = earliest + + code_file = truncate_module_name(prefix, module) + print(f"0x{earliest:08x}{ooo_mark} {avg_displacement:10} {code_file}") + + # These modules are included in the final binary (in some form) but + # don't contribute any symbols of the type we are checking. + # n.b. There could still be other modules that are part of + # CMakeLists.txt but are not included in the pdb for whatever reason. + # In other words: don't take the list we provide as the final word on + # what should or should not be included. + # This is merely a suggestion of the order. + for module in leftover_modules: + if not module.startswith(prefix): + continue + + # aligned with previous print + code_file = truncate_module_name(prefix, module) + print(f" no suggestion {code_file}") + + print() + + # Now display the order of all libaries in the final file. + library_order = {} + + for start, module in computed_order: + lib = module_map.get_lib_for_module(module) + if lib is None: + lib = get_cmakefiles_prefix(module) + + if start < library_order.get(lib, 0xFFFFFFFFF): + library_order[lib] = start + + print("Library order (average address shown):") + for lib, start in sorted(library_order.items(), key=lambda x: x[1]): + # Strip off any OS path for brevity + if not lib.startswith("CMakeFiles"): + lib = os.path.basename(lib) + + print(f"{lib:40} {start:08x}") + + +def print_text_report(results: List[RoadmapRow]): + """Print the result with original and recomp addresses.""" + for row in results: + print( + " ".join( + [ + f"{or_blank(row.orig_sect_ofs):14}", + f"{or_blank(row.recomp_sect_ofs):14}", + f"{or_blank(row.displacement):>8}", + f"{row.sym_type:3}", + f"{or_blank(row.size):6}", + or_blank(row.name), + ] + ) + ) + + +def print_diff_report(results: List[RoadmapRow]): + """Print only entries where we have the recomp address. + This is intended for generating a file to diff against. + The recomp addresses are always changing so we hide those.""" + for row in results: + if row.orig_addr is None or row.recomp_addr is None: + continue + + print( + " ".join( + [ + f"{or_blank(row.orig_sect_ofs):14}", + f"{or_blank(row.displacement):>8}", + f"{row.sym_type:3}", + f"{or_blank(row.size):6}", + or_blank(row.name), + ] + ) + ) + + +def export_to_csv(csv_file: str, results: List[RoadmapRow]): + with open(csv_file, "w+", encoding="utf-8") as f: + f.write( + "orig_sect_ofs,recomp_sect_ofs,orig_addr,recomp_addr,displacement,row_type,size,name,module\n" + ) + for row in results: + f.write(",".join(map(or_blank, row))) + f.write("\n") + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser( + description="Show all addresses from original and recomp." + ) + parser.add_argument( + "original", metavar="original-binary", help="The original binary" + ) + parser.add_argument( + "recompiled", metavar="recompiled-binary", help="The recompiled binary" + ) + parser.add_argument( + "pdb", metavar="recompiled-pdb", help="The PDB of the recompiled binary" + ) + parser.add_argument( + "decomp_dir", metavar="decomp-dir", help="The decompiled source tree" + ) + parser.add_argument("--csv", metavar="", help="If set, export to CSV") + parser.add_argument( + "--verbose", "-v", action="store_true", help="Show recomp addresses in output" + ) + parser.add_argument( + "--order", + const="fun", + nargs="?", + type=str, + help="Show suggested order of modules (using the specified symbol type)", + ) + + (args, _) = parser.parse_known_args() + + if not os.path.isfile(args.original): + parser.error(f"Original binary {args.original} does not exist") + + if not os.path.isfile(args.recompiled): + parser.error(f"Recompiled binary {args.recompiled} does not exist") + + if not os.path.isfile(args.pdb): + parser.error(f"Symbols PDB {args.pdb} does not exist") + + if not os.path.isdir(args.decomp_dir): + parser.error(f"Source directory {args.decomp_dir} does not exist") + + return args + + +def main(): + args = parse_args() + + with IsleBin(args.original, find_str=True) as orig_bin, IsleBin( + args.recompiled + ) as recomp_bin: + engine = IsleCompare(orig_bin, recomp_bin, args.pdb, args.decomp_dir) + + module_map = ModuleMap(args.pdb, recomp_bin) + + def is_same_section(orig: int, recomp: int) -> bool: + """Compare the section name instead of the index. + LEGO1.dll adds extra sections for some reason. (Smacker library?)""" + + try: + orig_name = orig_bin.sections[orig - 1].name + recomp_name = recomp_bin.sections[recomp - 1].name + return orig_name == recomp_name + except IndexError: + return False + + def to_roadmap_row(match): + orig_sect = None + orig_ofs = None + orig_sect_ofs = None + recomp_sect = None + recomp_ofs = None + recomp_sect_ofs = None + orig_addr = None + recomp_addr = None + displacement = None + module_name = None + + if match.recomp_addr is not None and recomp_bin.is_valid_vaddr( + match.recomp_addr + ): + if (module_ref := module_map.get_module(match.recomp_addr)) is not None: + (_, module_name) = module_ref + + row_type = match_type_abbreviation(match.compare_type) + name = ( + repr(match.name) + if match.compare_type == SymbolType.STRING + else match.name + ) + + if match.orig_addr is not None: + orig_addr = match.orig_addr + (orig_sect, orig_ofs) = orig_bin.get_relative_addr(match.orig_addr) + orig_sect_ofs = f"{orig_sect:04}:{orig_ofs:08x}" + + if match.recomp_addr is not None: + recomp_addr = match.recomp_addr + (recomp_sect, recomp_ofs) = recomp_bin.get_relative_addr( + match.recomp_addr + ) + recomp_sect_ofs = f"{recomp_sect:04}:{recomp_ofs:08x}" + + if ( + orig_sect is not None + and recomp_sect is not None + and is_same_section(orig_sect, recomp_sect) + ): + displacement = recomp_ofs - orig_ofs + + return RoadmapRow( + orig_sect_ofs, + recomp_sect_ofs, + orig_addr, + recomp_addr, + displacement, + row_type, + match.size, + name, + module_name, + ) + + def roadmap_row_generator(matches): + for match in matches: + try: + yield to_roadmap_row(match) + except InvalidVirtualAddressError: + # This is here to work around the fact that we have RVA + # values (i.e. not real virtual addrs) in our compare db. + pass + + results = list(roadmap_row_generator(engine.get_all())) + + if args.order is not None: + suggest_order(results, module_map, args.order) + return + + if args.csv is None: + if args.verbose: + print("ORIG sections:") + print_sections(orig_bin.sections) + + print("RECOMP sections:") + print_sections(recomp_bin.sections) + + print_text_report(results) + else: + print_diff_report(results) + + if args.csv is not None: + export_to_csv(args.csv, results) + + +if __name__ == "__main__": + main() diff --git a/tools/verexp/verexp.py b/tools/verexp/verexp.py new file mode 100644 index 00000000..e112c07a --- /dev/null +++ b/tools/verexp/verexp.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python3 + +import argparse +import difflib +import subprocess +import os + +from isledecomp.lib import lib_path_join +from isledecomp.utils import print_diff + + +def main(): + parser = argparse.ArgumentParser( + allow_abbrev=False, + description="Verify Exports: Compare the exports of two DLLs.", + ) + parser.add_argument( + "original", metavar="original-binary", help="The original binary" + ) + parser.add_argument( + "recompiled", metavar="recompiled-binary", help="The recompiled binary" + ) + parser.add_argument( + "--no-color", "-n", action="store_true", help="Do not color the output" + ) + + args = parser.parse_args() + + if not os.path.isfile(args.original): + parser.error(f"Original binary file {args.original} does not exist") + + if not os.path.isfile(args.recompiled): + parser.error(f"Recompiled binary {args.recompiled} does not exist") + + def get_exports(file): + call = [lib_path_join("DUMPBIN.EXE"), "/EXPORTS"] + + if os.name != "nt": + call.insert(0, "wine") + file = ( + subprocess.check_output(["winepath", "-w", file]) + .decode("utf-8") + .strip() + ) + + call.append(file) + + raw = subprocess.check_output(call).decode("utf-8").split("\r\n") + exports = [] + + start = False + + for line in raw: + if not start: + if line == " ordinal hint name": + start = True + else: + if line: + exports.append(line[27 : line.rindex(" (")]) + elif exports: + break + + return exports + + og_exp = get_exports(args.original) + re_exp = get_exports(args.recompiled) + + udiff = difflib.unified_diff(og_exp, re_exp) + has_diff = print_diff(udiff, args.no_color) + + return 1 if has_diff else 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/tools/vtable/vtable.py b/tools/vtable/vtable.py new file mode 100644 index 00000000..aa294659 --- /dev/null +++ b/tools/vtable/vtable.py @@ -0,0 +1,111 @@ +#!/usr/bin/env python3 + +import os +import argparse +import logging +from typing import List +import colorama +from isledecomp.bin import Bin as IsleBin +from isledecomp.compare import Compare as IsleCompare +from isledecomp.utils import print_combined_diff + +# Ignore all compare-db messages. +logging.getLogger("isledecomp.compare").addHandler(logging.NullHandler()) + +colorama.just_fix_windows_console() + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser(description="Comparing vtables.") + parser.add_argument( + "original", metavar="original-binary", help="The original binary" + ) + parser.add_argument( + "recompiled", metavar="recompiled-binary", help="The recompiled binary" + ) + parser.add_argument( + "pdb", metavar="recompiled-pdb", help="The PDB of the recompiled binary" + ) + parser.add_argument( + "decomp_dir", metavar="decomp-dir", help="The decompiled source tree" + ) + parser.add_argument( + "--verbose", "-v", action="store_true", help="Show more detailed information" + ) + parser.add_argument( + "--no-color", "-n", action="store_true", help="Do not color the output" + ) + + (args, _) = parser.parse_known_args() + + if not os.path.isfile(args.original): + parser.error(f"Original binary {args.original} does not exist") + + if not os.path.isfile(args.recompiled): + parser.error(f"Recompiled binary {args.recompiled} does not exist") + + if not os.path.isfile(args.pdb): + parser.error(f"Symbols PDB {args.pdb} does not exist") + + if not os.path.isdir(args.decomp_dir): + parser.error(f"Source directory {args.decomp_dir} does not exist") + + return args + + +def show_vtable_diff(udiff: List, _: bool = False, plain: bool = False): + print_combined_diff(udiff, plain) + + +def print_summary(vtable_count: int, problem_count: int): + if problem_count == 0: + print(f"Vtables found: {vtable_count}.\n100% match.") + return + + print(f"Vtables found: {vtable_count}.\nVtables not matching: {problem_count}.") + + +def main(): + args = parse_args() + vtable_count = 0 + problem_count = 0 + + with IsleBin(args.original) as orig_bin, IsleBin(args.recompiled) as recomp_bin: + engine = IsleCompare(orig_bin, recomp_bin, args.pdb, args.decomp_dir) + + for tbl_match in engine.compare_vtables(): + vtable_count += 1 + if tbl_match.ratio < 1: + problem_count += 1 + + udiff = list(tbl_match.udiff) + + print( + tbl_match.name, + f": orig 0x{tbl_match.orig_addr:x}, recomp 0x{tbl_match.recomp_addr:x}", + ) + show_vtable_diff(udiff, args.verbose, args.no_color) + print() + + print_summary(vtable_count, problem_count) + + # Now compare adjuster thunk functions, if there are any. + # These matches are generated by the compare engine. + # They should always match 100%. If not, there is a problem + # with the inheritance or an overriden function. + for fun_match in engine.get_functions(): + if "`vtordisp" not in fun_match.name: + continue + + diff = engine.compare_address(fun_match.orig_addr) + if diff.ratio < 1.0: + problem_count += 1 + print( + f"Problem with adjuster thunk {fun_match.name} (0x{fun_match.orig_addr:x} / 0x{fun_match.recomp_addr:x})" + ) + + return 1 if problem_count > 0 else 0 + + +if __name__ == "__main__": + raise SystemExit(main())

{}ZRk?AmwqlUJ4!#EveWbvQAQI|%ErO% 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 Df>Y06_`aQI zsK{`H?8O73m8;-OHGiaHW6_4YVJ8_8E|S|a)02Y!tUIMY>OSjaoj}8ru$L(9T+u@p zxk(V)i{LG~ISXeLvkc=i>n5uv=QFG3j6SolJi_nK*HT*ESkX&8lhZ831>!VIPKi*F z{-44Gehy}aH;1N9moXy>s|?jptC$h0E7x_#T(Ik%>mtyv)a^eGn zO8w!DrK@_2wk3hKD8lIV*AhG#JfvbtLC7 zYJaZ8*Kbvp8lNZ|UW6OeJM6NjwHu^EC9=w)i-^U4j}wI0hJlct^2K*RpM^1%l)uK5 zpX!gmHhvbrtc&|e3*UFaF=VS$f*Yn1-=Wy=TlQPjkaVo%^J1|e)MVR+P!Z9@1e5w# zo#j0A^+AIGs|H2sZbK)c0voU^OB909hIKyu>HN%Jgp3WT&zfL%jatZmo4_}jp+Yw7 z*(zI9F1wL9uLCg3M=2gX2z=oWK}^8(%flS#~GrM%Dd4LsBZwN%F&#e^gzEGCNPzITu4^ zOHXfvqQRFH{(Jp&u)qz_hfM+LYKYQM`%IFxJu0wX6l#}?)mVA1Z|c$7*P<+pFzX z_h;n%+Eg>_G~CxeO93eoy5&m6#=7S!Hx5C#?qhwbY1aO_O3MZ#-}a2k+K%#mxq zNqq?C>fn*5gt~Z{Ubt%IryOTw|JZzV1tfo7MFM`LiZIc^x1nqq$LZ~d6PKnohKrK# zp=T`0;ZEe=z22!b^V=V15zuf5ol^UDtRu6F(9?mBxTixNin3vvxxf7|K`g0j+MV(; z)Sl#Cie*)EM@}1cwrss^Kh6bvD#^(o4l$m>lFEI`bUf+aW$Px&to;*tZGDMba7ks? zPE&a;A3N@bp=F9qcl7YhDy4Y2kwVo%D%AceX+Vs22eu2CpP?ozH&U~6{tJR8ljqBX zekeDg+U0vbmg_Riv_~XMYFEEdilHrk458}AFv)nyny|m)5Ctk_I?eH3vC%I z;uT3bqJtnXHbpwK;tryIX(i6hQ{`3~>num{(_moj;xBLTy67gY%_p5g($ph56~q(F z*QA3?O}e14fW;G@ymI~(2w{0LH`)6omzgT(`h+=?d{s6ujvlw)$2Y>tbjVeDo~}BQ zuKIJj>a}#$n_xe5bDVI|&@rgx^jjSQo=DD}Md*hkjZq*F)gA>MWJt0orU}zsyYo(y z*Bzd9xzblW&b^d-@6uBfl_ekN*bv*C74oU&Jrd-eqjzn%*C)q3%AE^Ox(t43u`$B& zs5(O{Npd&za$zn(H)5DuK~L-jhmcYZIB((2k9+6i=i|nsGch06PedB&Z(CPh1W7O# z8)#SnRY%*9X(Wjz-aABFj*cKvc~CEpqe~5{I_At`Ov%rw^pG<~%S!H&W`sIE#usY? z6m4RZV1vD%a1kZBw+)4EiaW=>SILoaXWk0$d;6u5ljA?84{;q!D!?Ex81seNhwC@N z24_2^U-GblQi=r!7^P1qLgXS5e$5JPKB>bQiq(#98LNXgR37Au#wRs6UmR;j zd0?E5aveBsw(5uf{UhDrjr2q_(hFszf2idpcj0{msbP%_c(O(gW}o=DH;Rn1ff@G% zNWWNxml{l}Wc2)0e;_f&6Q(i*3T;mawC&AzbsA8+RCo#lX=A@&_KMT=cQ+rM4{4Og z=bTp>wiD9C%t87QQ8(Xq=OKQL#&vF1&I8ROPn`&eSC5bNv|Lm$L7uQs7t;OgzGfm! zjtP>Z+&UONV4ln5Ig*;WgZ+L-qOmYhw1=mQVENeoZ7f=^Bkl^lK36dL&zNFHE`^r5 zaXnRSTxUXR<(0uP%ROBcJa08%4HW-$ws;AJ_tPO`NkNmdi?pbb^7#>mm$ogGPuwXV4czIyv-w;Fy&H+nHY=@8LPh@A z@eJv7v5z&2J!p0G$g6i*?~4=)?>|5iCj`=zR*BOGw~}%yF&;>Pv2Udw5mOAz)!Gjy zZ;U(pn`o^quar=d^$))XY-Zp7TV5`T8_<+6*jr5K^FI8)0CEdH?`NWrl(MvpT_Q;uV@ z{7^revAxiZr@1{mV`S2(PS+LBs4q@pdLuCojPsYA-9=(O%=r+!ltR@+>)!?_D)xHI zLd3(neN_YEf@P!?QV%S6+$r$Da^?1r=Yi$2?F;iBST5PVFzz!FY%2U2f` zTcP#`j?8Dg3-%TNqwkXOi%w@zg_V3JR&}TaFYALH zu4k&Am+vQDfR2!xgRh{WCpTEr%f&7?&e)gXjQu-2H;7;KPi`_qN}GAnlU~;8H0Zm; zYJ94smz}{OyAR#{)hT2(;&Sdwwig6T)$9V6V(U<42c|IL}>KjEh z(s5BBzM)}sKNt3A*D zGEYb-fwbIq2sNY*!o*}!%Bw6Fkwol3>wDm~b0&1q(8B{tqjOuau4wh%XI%V74_K86 zYwC_hr}eaN+Caevr_?W7#yrkl?^eHTmb$rA%D$$Jk&SIB2I!S+TRW7iTFLgLcLi%p zZl(Q;1F`x-c|kq$f@poYb*4PhK0$cy_%N1ndt;ao5qLtwbya0aXlEnJ*X)MDHrp@i z%Yf(tA!&SvP||{>_VHD4YMlg!6XyB-2zn(AcHOcTxu_fwD{u3pto)Vfxe?KsN)IK+ zhZZDqMNSde(ov0RF(Z9t3fl!?#M_`8MD^gab0oMXRKy z1Ur9jaj@5E2e)Di-qE>nF{}?^o-*M>SBX8f^AHCSs)eN*P{Z#5(|#N;NE3m>v_vVJ zi3%xx8G`D_3`SuP+Cj#rx)fc~AK>Dvw8{3*OTAF+>$3e=V?h#DhdqOWT!Rt3Fy5)7 z5zg=80(1e6Two-IcKS!6?aqu=*cIr_-r|Fsb(Fq`9wtJyN0k^&n#xYasxzR z%RCUTtZ#I#|Gjcg_V_=7#s)=v&QICGJlgFiWB|;{4Fh)M7JB}Fu!Qoxz5|~z980SG ztFSfba~}P&cK!p*nwcnuz@E!Mh+;0YWG(3Prc-AwJ-19p1tWPGmFuZ!He;FE164>j zDk6-=onn+d6vwn;y!g_9FL{)d=hv&2PLDHRNd`PWUFAb>5#@AH&L5-6Aj)d48G3%y zu)kD(#vm(;)8Sq0nUvX%R`A9!r;K%0Q$V>bdHw(BKHG20w7|-fL(eZD1yY;Xr}`2z zIg>OtIDdpvP@WO|&$R*PaNbq` zr>E|dUbC5hW?o2PrmGYc&Ds9C=DR*y0q?(fqO<@;MY2?M^8EyBXqCXdQp@NEmbc@$}h*KO_z0 zc(=1U;y=<1Q`V&#XTO`Tm6X`b9ABl4H`x+9XP)x>`gi`?0;M19Bw5$QGG zt$pgzWazl!zCnu`C3@9gFp!4oBBax+g9SvnqmH2bL4Se|>A!UMn-CWC)yV7o+Ep1A z=BzsC&DjF4h2D^ubPZrjNoL_T%3w?JPb>&Cy-cR`z21nNt@*)Bq4rLNPDlBYm&>>% zf1_hlM*3*)P&XdWpz+y%i90@__FE*k^z?UDtK^vArl%DEn3?;#G&z+e;+pi2nA}8( zjwIvRd{2vv_=a4PsaC7F>k^YaRa5^XtPWYojO;|MOPly&;kf#Z6EE4Gb8J4w63sS- z5#2G_L@Hzot7Qs(;z(^9Fd{zf)qnB_Sg#nhl;VywIL{8^`U5mNH++0|aiSEGm|JUZ zxR^)~GA++iEW$d)rz&hqZ7joZr!1aM9s_lXJX^LcQo*V52ypn}OVsH4`xI^X?}Eq1 zgmzxzH}o6Fczr8cHYYs;+UF(ZY=Zrtzg z9W}vBjlq}kNbf~B!XsB~-+E#(2u___W;K+>_HEL~vffcBA9AFgMirA+W{GftAZZ*O zfsx;_TnG;sO)waw4;>%*+r&7K%y?`*8Y~%n{uX~>8^&9&HH)^lZ69MQ>xu4{4>7@b zj`G4yFIixYMdOk7PYCU-Vi2q`aj3I0LK>12L6ORcf@mnNV;gD`vx19rnFg&UZI7^l zC74Cs+yc1plF{DW_wi@`j{oM;LH*&lC=G#07Q~z`5N}wN-O(m6DbutTk4{K+D_SdH zTJ~|r2ks>Bz1*=v#<;^E$%ux|^!5Sh*UE`gznIXAQ~;8p*`p5-rwt&P0_w*e({o&4 z+mat^>a@@K^;QZYe1ywI7&G6DV1TjKN_NV3I2WBz0`U8eU*mmu=j(s&UmbjPI``TC zUFSkx=QMcg-|F1ubWYd98T)r)%b@;Uo@>9`zhBGueE-JezW?3*+p&$g`A6n&(l)C8 zf1SUvgZtNbwKqR*|4wua>fhzL?|*;)+W*1+%@@%5f9>BD(*8Vru9%~?icd5`-T0LzW*4%c6rt7U=2Kcto@wl-D8amxb*51 zxHC2Je@x^bV*YHeA#`1MdkvB6M%uGqJ?P+mV^keZ`JGX?EEwf3%E=nlQrKX|hdNZZ z1TVx3VsWEYF@czz+JxqQ9~90SMdIq}@My%+DtIO~340M=U-g!{{n zL%vN-bYHz@Y-FAb`>n|7x|%`VroYGvWEWo$Mg?;>Sk<_f$y5jD@MHqgWUBrC$K_Kn z!bPGKitkk1h!)qQq>(B0|Dr;bQ~hP!kZK|qqh~d^d@1oCDL=f&Eq@X>ls}WpY2_0$ z2RJU03fi^huo#G?i1b(j>L5c#DM*_a=;R`C7HiA%ols@Wh#P;>8;>9UgYCVE3Pf4g z->ww~zsRMqy_rhW(#n92NTm*SrZTJ}UMY$i>B=&zD^r~4roWYecD)4e(o6VZE_*7= zi-l3(mPFdhfL~f${EYlo242()YF`XUr8%8fD$SCqEHf|5<+3tUIlj0!Q#rxBn`ACR z0aC@}B8i^`d<<@H8t+Kb!mzaPkZGZ#7p+d3m0MEe&u2CboM3WH&FA=g8tAsnZKpOc zLj(ECR8Ex(J((swnPc9~G?xl3yYJ-g z?#kWWox8gyclSg0ZrkSjxZ7S8+_w1vZiG7C+{sOP^W*y4!>`q~XY>7BseG4Q_{(g5 z*xYdUBzNFjv_JC`IC%a3qxj(tu!gRO9~vz3Fqgvh;I6ma`qgzH#v?&+i)INJ#6zIC z$SG^KP}^1UcOIXevAoHqyb8U9rSqraGere%v4i`6!|sZI2!CBqW!nFnwASEyE~fwV zJX5MGqB8a?(kj-+?iJ$?yKsXcqYbG(mdyk z2Mib+8v?8PT9c^GOJtTowOJIdIZQR;Cn+iFC90q@hGM3<%#jO`0ZpP(FVRHvb%MD} zGKu7TN=Yxw(#~b7bqc`gCQ(E$rH}7sfVy!}a>Odm`GR)$X91Q1%pDND_l)L1yMBD5 zGavF4P0urF*DHKTdL4GDge(&popawc3-hmO6{}V&RyF-(el9RwfOTlPG~#b`X;34l zHag!^n&k9GQlHnp>VP6uuV-bAPRr?;O#2+PbUi)%1B@X0|EDKaoNUrt1>5)F@hfk1 zg71>`Z|1M|yQ4_~Pbl4Sdfy7?FTaWh*H14$|2MJ=eddjiH!#Fvy6#=GkiPA~9}7?= zN-tA^9_WGTdZX>ZAL-jy>Na=X#hvps@W~n6#EsCt%Fkt;yCeDCOyLK9Bp}iDs44ZV z%Z$JxQq=aSDe+Zn%i|O%6m%?;xKKPsMeN#srx^E)IK^{$YmuV#qms;8ETjnz{7b9@ z(F2!&ev1g|_Cnd_7x=hocn`dTOSo&}uB*!_OFh2{XMUxdC4TFs&;uJtN0v>v*<0WB z@`bR+hM%mqo@jKYhLxQ&&LZwkkT^<9)ARfK)9d>NB$m8za3U~sa!t>5SNc0BM2UeH zud_qRAu&wa9{nNp7bW_LSdSD{IR;k6M1(XP_Ol024tf@+E@g51QQ7#=r5SHw*1BIJ zuv9nlc#)G>;j-mJ5{_l9zbQTEr?gE=mv(uPQm7v`x{9azLS2>q3gIE7Zkpf^9FdO8 zUGT_QDv`VJkzeNCb#q6zPRSq8{Q2%me564N4x}G6zsX@Rv~y|z?bGQEp)z!K1)`b@e4k4&NVH>4EfAn?6-WeTiyoI^a~{Z!{!Xh72_U+QIyiD}g>s~9cobNEvUL}QP_Sj|S! zPkw>`Gl=d|FQLABEUfd@LJE0b>`a-jFFwX{;^?pq19Rfh6yu-iJo8~LAGR-uY(sJY zdl2;f~pk#c5fl4Pi9X?_NxxD(B|b_{0P zn6FdgtHXa6wo%(dx zioP!TNq?_?LM?cx#`jL_?Us9F#t+ynZh0o&2zKZ|O7z(}-Zwg9uh!YUL}Wsu5%%TB zjS4U)Z_gcoax0XP++^m*Wh&F(wwoswB^6m?AF~ogDm=1|kJ~qcIxtOm0-}OJpMXjr zfz=noq6K$cI~QklK`w8tOkY3u9qDzv|ss`!1OfZ8ZctJ!%=MsO8JvyInr_k24y$}B;g4RCp4_CkkS-`L%+t7( zFUo^#F2Rn&1VP3J8%eac9!UI!O2gDyYTQ6smCdQH6;W}gjRqOPtHkei(zM`030oC# zPVDy9-Viz1l`f}tEpoY6c5VRiAKPf5XTCasGD_DgLsFgMjC@$}WV>Q~>XqW;aS|+d zg^l+VcR#tOa$?av#d(;f{i&nn*rd1u>9)so(@e6BYE(6}i)sjSgvEP<-Q-_)F~%K3 z)7SXZ!*McpjX$;*Cu6gP+!|J2pKT3i56Fts4ZSqIRZcP(8TC6~E-fm$Z11)O!>8RQ zI3U#i&tOlhW_+}!oE`qwxIRg&JDzTP+7Hj%U^Tz9tVU)g)cy!B1vd{t5`7|0Y0DmG=Oagn`tJQ2U6YguRK>s!8dlSd zMO9{CXGsbf*w?fhQl509rrBEC99_FY9+Q0tyl3!i)vVx^+q1I@dUm^8*qbH!o{gku zR#Fsv8k~+XGUCl}$E<}b^8IU0FI*x0Yc~B`?e#BV0PV|yBLH_SJv@CNYpWm(d)~0( zMBunAfLGfd(|sq@@k#2oG^C;c-AaJ2ZNu=Qf-&ivV|rXC3C}ntA8}KBP*TX4ysl#+ zpv%HzSj6Y#D)t;F;->UV%G>UdcJ9T;7w$o}-p50_c%`*f&ipIMlYA5y$2 zozu1oaR?#35^GOglWdCXbysDR<` zA{0y1Nm&^9GWQlnU3%esnWj23O-sCKx?ZO#HvuovjMQV_;TM(p=lIp}$5D-vFn(vX zTd$m$82{WdH}JT7mTA?`X1smC{j+V}4*jKKX%}G`;}4WVJ|9 zx27`rvvx{x*4DfD?Rsel`YLo~j*W)7EYAZb`Bbxw_BnNr$e8Rqhh9A%wr`V6tBRc8 zY03GR;g3`aNZ_2F81=z#dls%KLqS=wCe}`JREOk zP>?t^62G+x&IKCcO&T|)!Yq#_UP9x!``M3vu9QUEV}f*w64#mvrfaRCjww=r8!cz+ z4yn)VN#o=_n5;nx{>@dU;8I>fo#>|2Xo@v$!!+~>=h|Y0jG=fqlbUcEd7BjIl~_;Q?IaM=SjjHAN_xp*$jn=ZUj8D-?m+VgzZABOl|f8)E$HM(mq&!F~*b2zs> z(mX-&Zi6m7UKuV%6KNjr(ZKnIOqQ?91a<)=@&R77e(^lZ{ExQcv|w$}n)7TwsCdq^ z17Izj2#S-|aaLS9idWV^lQriS^u1J?03QaNxOPy{g!|I?BPvlBYjIrEBEl{;gnx=T9LE>0*ZNsMdpgxVFrwQ7%Z!gXXV>i0~_ zk>PSZ8Ep9yc@Iy?<<-sk)Vx3VlK`rT!zp?9(O~m+9)$GBub?xE2ideh_@^ z%cZ^Gw6rzaxI(l%6ttWhcfrXz?o1@HmT{Hf-!batc}4U1-@*Tf`TrXK-^=KG|K*#z ze(F>BY2}1~k$6p6lRMj&xp9B3nlQ?MOVDDJIPSf~avreW5L1gFu0mcYPVFt}dZ8rs zc5uyw_|6mihi)9-zseE_`$IqJitSk&j`pSA39fw^4eu{@!j2=fav2dusYbxXt7g@B zr{pqD=unG(_KFMf!-ebcI6=JYz)1t>4W)2^q3b~vN%sQPX<2h44d!3YK9oDpxaFIz z%52Z4um7`I*r{nHNr~FQs@Df_0MAar@=|`*VnG6emDrawDR{$Mfo8o*6p;M)u=_oA zBzWYvfKRS+Ze)E~pAlPhpsS@3+-O(6g=+Nt&;xVE5Pm*&q%_vG_9F&qlv;Df1i&P^ zT8B!Cv*k&6xkK$)BZ$4llL&_O8=AFxh>hq5?IKF*Gw0Wn9A8Jt1TW3au=Jr3Fx@uU z+hMQ7Gl9LD({8=2MNj9rRK>DIa}cU#O0VS?eb!7xnCUA@*G1Cn$_S5GrylInxMIY| zL1`n;?x9u=m}NLcrdBf{-pH9zG2_SJc^ksu&oW-{2SvHNzhRLZi`OE?mGC@2CggUp zRl%{8r)r~r24iHg=i6Paz)`v#V2I8Y>xkf$$7nRHmBf|6QmIAwfO?4~lq)6qm_e6N zY4Ug3VLp<%)EZfzT@={f?XpuKR;)nteO+P&Iug@8-1~o}n-UM25_|XNrX0vXk9S1Q z?S=FgK`x=^I)ktuyN(Q@_$kdd_^vKmH6FJva0{GUip3+M=wF_ve1~jec%$xWRv-Hr zfG+!mFxL?q{yp=1_Xk;7oZJP5XUhz?FvD^zL8EjaGfOx0j81ZwGbB^8WRJ{qGr#Fs z!OSc(&sRs%pZ!PX8RLjt-(^r}Zw}v#A>?P1RZ*4$NV8TOK?ZMrAm8Lq9j^%&H&{&( zl*$Q-Ubr7i{CZE*z9vAwY&5Ma{Db;LCzzj1iKF1#FTeRd;R5ud<*;c=EnfpLyA*Bg z*6B#`2jz+ixu`B!=<_dQyfLndZ?%=d|QWj_!Q zVgHxCzh5ECe-C5>o|vFOPI)DD%ikb)2xV%5Y@NW0QGiB2wb5SNpPGh`rm$i<-M^QU z%phZv43v&AnLibFm!|(sM`vv;s zNtC{mVboX*bbCG)!~{roi2(qGXsl+JSPcHp;rB!(Pgrfcw%pzZA(Vu>K`48XxPVtM z^|=iqUqJFP!{wEoLAI6r&fqm7(AfON{KgP48^hD?#;`9p-x4ycV5-g8sNf*r!U>Yk zIE$4fm}AG(qLdNj=vf<9c8vN76!z?za>F$fuP`^|Q?E|f-Xy74o7C&*m!@9trk+S7 z;(Y3fxImKB6HV&LUh1iC>I$oNW_ju{K+RhZT?tUx|}w*2riI6`Sdle&c*CgQebAwUGknk z`E)l|XI+z5pfJkh4_}cz<__18a#Dv%%kJ4Cx;n*!Jyt;pA?gu@@0)|x323Mx>H0t~ zq0MK+4z*6jt&ZP%UF3V+_?3zF5w^~EBK1yb3sFktK+7&)N^I*=Jrj46i3G}B$nA-w zi&gqthgR?f{{5-$@17*~Y25m3z-sYx9*bCe(k%f9?9O0pRRR0ia z?|ttn74C1qHIU~f=m{*Vw7RA0U_0P@3jFeGK{`Ve>BPF+R(oiWU6Sz)TK^>@48toi zEt>HiNWB$kWzb;5bR)m)brIy8-_|6E@LYuWQjtORH_I)fTPqJ^VfY zP_&weW${lHs9F?j(em0sQX7$msFD4B&zXC7XK!}%7j64#KA-HJxp!vHnKLtIX3m^B zCsggI*7)MD-88kgqjgP@?Fq`q_7GAEQUjL;JMEPHooL?4iSy!Z-ac!AcnKi@%7dxd z)IwV`$qJ-K0Qq!?k(NUe{~fe6_AwGVA&?c107|UJ6>}`eVE}`t$+}>f!@lhBJCNm4 z(e}d+p=b&@58odL#3=vR$jZNEh~+c=5B>AfKSBQ)uk@cIQ(~Qj+vl95?PK<;@19;LHU6>-_w}< zXYQZGk^V{XXO1?4_PxwtH`etEwYlSP$6sXYyAMBNgq(*Th=$%m==tYya|C@PX3%;U z&YhIyAoDL6<8b2;j${qda~gBm1^$LDBB{IXdlyccA#7Ns-5^=NL%V@a1u+L`H;}5% zwv;g2`X_kN10Uok`#NN^mh65*cf|qc7ci$JE<6Xz+zN6)C=Wbw=4r?7t->J>Jm~<5 z4?I15;EB!Fe6RQsL_XMrWrQoT2ntkYc2(r0kXqw>ySVy1vV5`xrH!XWH53*|-Um@d zSs$;8<>4}|jiaATc@5R?XgA&6MWwc(WV&v_)imqqH0#Jh4U;<0Kfj%{S`>m}6QQed zq94_Mt-ahQ{(yBn(9dOEH&S$~3whu{4J%cx7>ZVQt@wjg*s!hAicheHEJ>;40x7CP z7*}4TiZ`C;q9`f9{W52R=0PxgFzp1y81LOH4X{T`;r3|Af_M3&nWmKG-*kA~t%2&= z8thxHbJGzFu2(OP%IDKspJEvcBoYwDYpdZ{lP_MS@x3cZ=x2GC*P*$l$g>h6B5q!{ z9av(}83M%v30_9m^QQKM)aQ=TmO@^{F$XNG{i=0m~k8cF00c63klO$@v}nCD3|x>h6MP z*NlP2CJyck?a;H`J*A^Ck^LH!gE4dI_rL%BGny3Ni1Qq^1)Z)N$R6y z6r+04?nd;d^AYT#(T!njWSxV$$8j7gu|^ymOTxf$8mR%pbJ%n6Z%jued9Fu%(lyT1 z7t+vauvbopeK>D$*C}a7v8#spt1!F=Ho~wMPre1qz|xe z4#`N!qb-CaV{1hfz$53E}xSS)mPB&|DC6gj@T*Z9Ip@32e(ec8#1S_>EmGB2bVdf zzUzZA?8V;$$&mWQ)Lo!%t;jhOZ9T^e$L+`jYo88yzy=RZ)2_1@?7<2299hc+ku^pw z>vok)l%B)GB~CJs$);e~Y*Cc3vHF4+;Y=l*zVZ)+L{40E`qFsreSC*0dOH~Phd6!u zHGGH4?GrCgqC|0>7iF658Ax5W6Yd@a8Hz=!Xrs&TBvp>y-X&2{?3Nv{rC6qXc;v$? zAKCJe#Se&5sQCk9wts{H2!|A2;c{WQQJzI^N=a1a74Pr>!-$Zx9PkUL&`1o+`?%ea zF*G2JH4xpYmAJ@@v%88sxCtr|DPjzE6=mVV?c#k@Kn^2OluHj~ey9FQm#ZCS_0kXS z#pF1TB>cwp>3YH!PEbTQR&PcmU;Hr^St?#Z1af`=(s%8;p_O1@T|rzIg^S({swPyM z{q8EEjpMcomnWc+OoRqqDHB1EFB^EF8MhlgdP?wuee@9W^KzodV)~p;Sj?lTQQ{A+ z9a6|XEm&x0AF!ldgfB4Jh6~pUo0D>ED({xZX*TP{d>|!mZ!J@n|V=0&u1$ z$xGkIiD*{rq%_yYa+PYpkC#`;!cB zLOqQ^pLo-4<$1<MSuruIm7AUy2U4u@mmpvca;MDJ+ zFM0c*>aCaU(aH|G9^HAIFGj#X(lYXt0r#I6vX?=R3tmVLK=_7LqLBJB_ILG#@7f>C zf=ab;>6rLx?a+Cd;oRtI{RlMID@A$1dyV^Hgf3JD)3{aQ13NJfSL-o+ZC(#!w3D&- zgJ$`QP+r-O|CivCv?&caE4;AfqC^K&^|_sP@|X!{3D^_OaYX#xc9{Lo z@2-W~5$24*1e7Z7;t~Q+B8}LDYKDEb;Pj^k;$8R^9;jgluSIRB^Kr{&q16Bjx(f2OwRL-qVz+S5JLWTuprWC@>1gH8p_ONjjkdD? znxrk99&O>*v5Wv!=9#VQ;MOg3R-uK(d^9^gei6-xwltg32|o>0@BtHWiwk4|cSPEq zhMJkgybh~NBdG8m3ZlJeyI(=Q%Z7Oz#h=4n9$UhTvCoIyfD5Oys6Sc?aUxRx|3dnl8f$zgM5R1uN0>cy4u7 zi3^QfKoKQN?}6b8hEq~dm(}>2Px|WAe31I zkHfAeEP?(G&PQM)j)n=x*25`dbtQwk7*t)VdINO>8lt82$pr);-Ki zT&+Kk-j%kATcb%Qf6?d$`pV&A$Hqh4+Q4oo2>S)SFDN3%x$7OXYT)6>y!F%oiY za**+UBOY8y!E%fQWI;-dv=fmJu-CDND|jicSE8l5!xh=U03#@i9y%@x&i85+7#GL1 zifr~XjON@0?@ePs#uFT#sjw#l9vHq-fzV2 zz7HY*w$m56+KDZeEfkuGId6g3czucy7C&z{gL=2v0Y_I5X~@jFkr^>wc9N~awZ=Qf zkA$ft3kLrHk`!`_EePfH%vhV%bj~JfU*|S(4Vdf~-@=FTg0)$VhvmfrxJT74j`xvD zo4{Q~S>?5Q~1DLOVt`*|#Eo z476K51fE$HuJPP$F^2+UpCmQ|N$QDElO1*?^7eKLN1lE2tXB%@?T6+o*CX@#qObQ@ zQhj8mGEzXjC-49XOH896vVBOn>!54kkaADMDqdd)HD`Ch3ylQQ(3kX)IiLj67mPTa8&UwnUBRr1BT#ck){vWnj-`U zRPYiqFVpqt>hyVZw~F5H4%r{6(@Q&@!~v=2;WjqR;_}xj`+c;M#|(WV~`W>MyeEW?gXV3e9*W(W*q~lmh~C7F=E{=T7PNsCl~dgn|8Fgq1w`- z2g+rv*#R}LvfescJQ>#VQT5t^>puMmm;>sLiW64>3E=YZ8enYbvnIkCG^hoLS;pmw z=;C(`x|FQaHK+X4R(5P7co((GZr}-e~AtPH)K*+ zVOYwb<2>ioKWLEhJC-aj?6*b(eK2XV$kf&90RK0;0a;ncq*|CBvNspZed-WhiuJI2 z92{rSA8}KYs(jVi>q_>9SGR??@-B+~AX^T}1g>)X?@Zff^mP6uh1%{M^e z6E4oV9$nZDnC;X*?Y9-o4IgSu$FH;TYmxM%FdFZSD~YVhIG>b-7*&{xD!@mR=Awib znVlUbG$>V}^Rtq7yMfkiQvvhHZ>2N9CA^l7RhaoRt+E5K6agtNF#@QmheO^MwPntN z4_(2#h!%VIz6~|hH&X&>p~i^r?GEL4&sgU07q6M1zkzhfJ}z{51g1NeIYZD?f3{#} z<8!c;^zV8kD5NI5y&$~yJ&bwuzv`)uv`RX|>cn|O^LmfXe{paFG%CLsD({7Da^%ZI z$XL&^8ogt7$o@h>IB--ieZfA}{z4iK>M+0T#G;R%a>KwZ0_{)g+ftrbOZ)Rg1MTSA znbA*Z!bhkHk5Ur`$Xiw3KH`uL*i(joO&AlyJe0RDt-^6yExhH@2kidx_Hl^$HSgH4 zCasdPg3kf1+K}_tAe?RLZcLZ~TYREaW zctHvS94Iuss~CF}SuFfs%3@uuw<39{OyExa^#@Z7jjwND zl+c=dSvT}qcLTX|3a+rPJrmwZ#{{2^VEw(oKJ~W+i;lTA!p9?)EKVdk1(VH%lJA!?#8xyV+TTX*6M0IOz+a-zuJ&Per5CY*Ubdoca^M6DLB67I!VlXu(07a^4CF@ z13DAct9;SDVJ}LxiL;=wAoc0a53cXC;Sy%$F-*S@lIc%tj?kP^t;(*gb_f^)p({H7 zHV{>gH?}F=kEYKwOdS`*y{q5G9T1;z*i|aN9Ht)V#sw+U&QQNoVvHA%IeI?dNUaq; znnw#p7Y>sAG`>haGoOw?$|R%4A^@r%5&uPcMUF4ZF6QUx-JS2)Dapjhsr9z=Ff!ae zOtiQ_SM)58jDEr!*`9!HH|B!lr8x@ru7PA>+0LFquRU;TPhp=uRCv&T-1ycg zWlOxySw{9*dH%{J11rezBVV95QU!{iRdOmG|NDA%QM(l z!{s{p@+;JlQYNBMw+t_^>-$6Vvx0v-nD$1&b8Du6S?LquqUuyET|vk0HL3dh!OpCL z=Ng4P-DR%D+XAL2(Z4geF59s1ghdNqRnH)6#;{UiUW+oQFW0w#fqj2;D**erT$kul zt)(xv(3b5x=EOU6(R<0-Q(ccVyU)Lz?s_}$K=HWJfQcY-BKvY%D&F8PCHlu<`cYrX zuVy+WwUUjCF+Z7^`3wd4R7+Ptv?0@*X+%;8bA_QAKtq?5AYebE5BD8|2UFzMTV6#@ zAWuSn8S^gJuY&8>E$b)Z>h}g>Z*l#AX0j?pYtS!16*B9=1(*$j`d~aXW2fw20+U5X z|A%=NSUWR&NJC1eNb}LsQvBvP9rwEFRB;l`Fp$?b{0*EAe&osG0H!G@^ULK0Mu54_ z!0QUHu>qD%&Fj<`#k?L!!{c<$fDiV=Zv9=FeA%ky>4ZjXX*&g3F!iEH$TXG0UJxnf z7qf2kr2bP~I<>lxRt24JrxqNA{e+@Iy>we2O6flXQ~ILPsYtQN(J4|3_B6pU1s{GD z6%tBwH{q@p+(??ce55DGxla96BF_d8nXTe~q4_#c^t1Y$Y@dNXf(k`#Oi}pn0M0~D zx){k_gWxZs{Y`<-*?2y>#@aCj<&MTF`tGUo98-KSZL!wXI0hC0*Fsam!D|p+M40^w z`J?L}!;yEgHIVB@<}VeV8qg7&Bv|r*d$9;So)EcRk1ow5q5D|0BNpLIg85#vODLP5 zG1v}H<_>fQ77o-S7Q=o#tYij0&u&{dC!{j6twPQ_LixL6i!ZPX>j;gwW z`au7PE>Al2S6d>pZ_7TVX{;%I2e&DKE%WzSje0hi-WIU=fSYY!{hkT;O-jod)E$kQM@hVVX-<#GAm(cIs8|?5F)Yu#U z3}1nymX#;A9D$evJ4Ogp(x5d`2Q3g@Fv_zB^8RC-J@7ihXm9Y-8TuD>Up>S&r=qT% zQ=cj*zY2G;&gH|5ja1tWZG!o9h+yb8)W8Rno>Bk6Z;=DC0hhiX2_2k}b|gD#Q<44{oxs7w zfca+mWAZqFz77H3uP4H{^{+8}Z+=7KyN8Ujk(-c@7vE}(U@YQKVfvC}7P|wsktEr( zIQ))*nyZz%IE}R3n9$a`8zPXQjw^&r8Ll5(t-O?+-~(YBJmR5PrXM2{k-zg(vO2ET z5EYZG2^u_T1K~IG`)Ai5GU#E$_|*4f&w?Z5JbhdZAQ5LBSAX+Mg|?c=M0oclF^7X% zECaqr)pnzL=^5N|iN09clu|F}#MI^#Q~F~fdNmkA0`WLJyJKk5k;hvmv8b0mU7L_h zp;&U0Os`ED2AL|&{2CBrBuR;nx&IHs zUtarUK8RQs&q=0Sly7JuXV%0eVG&e&j#^Ab2Fa2+iTr| zP{VX_x{182^#;7bf(q7j#I4w|vJ;npE=O^Wc<1d{Egc3Iz5mq2t)gg%fs4Wu;3&AL zIof!Amax7t{(n=#_Q_W;?=#xR_V;R^hG`OA@uS0-yJg>ZwbFSEG1K{m-khN^XecE@ zWe_@o4XJR_0>X=xP;Hb!Oh(3O6Rxj9mV3p%RF>b66-qGP0)Q|WP&?ib zdTNrMNB(RMfkqn2ZH8KY${Rv@5!XEbF&{Y+!9R3f>gB&Y#!+DcXJG=FgX^63(BMvE=6b zxx;9oAuTh;oB1(+<``}E{nJ2(f86=AAz^!#{-4=R=hu6Tiflq3{{-4|5dM7mibVbI z_CqmzP5yikV&A_PzRLXR7{Q2KzLaY+1j8o#CzM_g}6t-H+3kJjC7kl`>E z`hU09#rh**|M!~x|BWbp;`)C?EVv*cg|3TbFe#K{@SP!1sKCq*3LP{k6sC^y&(i9XhiefP&dNXU;LdOe13rm_EO#zFZfFuy}6ekn8xzr1#wJ`q>J z_)_7yB%~*SD6N+v-lDA$?l@0~V!5orR)gjJ4~bJkn&qD__rPS?_(dJ3RUSUGnTDI$ z^W4>Be>M{;`|CV+g@%-a-79+dKY94@Vas z;x_ElwI>{;2OGf_iv(h(#B&)u2;fLKTB$Uy)N@p+60=fkxl-$+mFj{>bf}e5SU%|O zt8IY(qPY7t)Q!Z}K<8UfCFgoc#d5P=8MZ^fzrwzlA1uFsBq2&QdpIK(Ur-ez4b_OQ ztNL>ih;q>uB+PwLzc}K{sj7`khI^g~PtZOJ?Gbr`+ruObY+{r49@Hd&@5-O#Qtz0w zA6ElO(a*E#C+!FpY_#L`hR@eiM0|NE89uiMFQr%{a5}#Yk7-2=wrOqRAa;@X4zH7N zehXKC7^*gEA^E^SfWOW1iFo6YZ{#(@axWD?iu_m#vw$4<1iRcZWm_Nw1ti%gxG;lu z==7lt@P0}+mEi+5uOpoP_!o<8S_Z5pz-EGmd+xa8Ug6OyU_!wQ^-4OWa^M+S)V-j= zNin(`I3>8gI|Vk9aTgs%04Cz{2ZAyL{^4}nZ*7!R;PqFjD}`WQT_>&bdjnSd8}aUF38vXBK3@e~BLh zz&}dc?E&jQGWaVc{M!eE-#8fj2e*!>{#(Dm^xw~qf$D$CVD%pv{89%l(;%zvlMzq?<4KI0rq?!jrMcR(el zN<e-K}|d`dF>@~i&D(Jqv0sKv?{=0l}ZV5-9{4!I`$q zU%pm8T`QjnW9drGlo7daLbCog(0sj^Cqnz}c*M`w@ItL_Tg<9b{h$e{zuPcY*nXOd z3T%M@!<^ks`3yREhV0*VY7J$9knz&uA~;oWgsyhN^(Qv94xycqhOX_bC(!_g8ZOtC z<5Ge@EmDY+Ym9(RM6L?wcKTk3?w%c0R95Jna7zt0-cD$u!Zs2?#pYTp11u`EoWY^p zqkzx}vavl5r!%;628WRm=WJTSLw>TS%6fjG0PN3Yg{}prnObo+{AIs)uU4F+mt`;4 zigWd+!m0Hj56a0hEVO`rkYBM_Nq=|7ddFj_ppUBp3UP*PL7H)j(1lDreEg5DO`XSI z9k;t$tlG%}IZYbx!41bF6VQi(~ zVyy@k=vQb(@cmh@6`_a*+_&%dwp??L`O#J|t; zZx{b|^Y1bK?d9J-{w2YI)*?7e7tXX6C;z(nmt31^Et&l5*wD+{M*OBcJvjk#lgSi97St!^RI`0Gx?VsENU&;{F}qS zx%@kgfAjfwI{#+zZz2Dd^6xDEr7N*o3;8(JS{Cx}O#b!r?>+pxm4CPK??e2%oqr$a z-wytLntvbQ-~IgiI{zNz-$VQ>__vFHyZQGRe)Z0%y594&*iIng!F^8H!H8KrE9v0T z5iZX{J7Gj*%SR@eJA-qUD941vOgX1DrWwPoAKR^Bc!~%I=Exx9ivfD=Ndu5qLdcR2 zj|8NY4UZc!s2JSD4pl(Lq`~kMk&P8z!^Z(n5z$!TeelG`P(MW^V}*Cq#{o|f!C2v) z`EkHgL@ri%_y6i+pr;~YvBJCL5y<3a-FV%@&oP|quOS0DjhQ|WE|lTMdI{Aa;>1$!N$HH_pv zZi5B!L$%;XmN4`btZ+_cLw!#D6v>gu)St;=!GGvpqj31o3W^k5iWK(1IXE*wN@+>g zK{I|j9K)28mCy7lG4=r%TaoX;!;nAn2(fq3vEzeC{tHmx5t{YHe{qneL2)++XxjJtN zrGa9`xIBkYCig=?xfYoSWqN7wUGu@~F}f7@s$9_NAHH`lMX}o}@kZ8Ui7Cjd&&vWm zChJ9gdj(9&RErznRD=XiC0XzvSCU1Pzo|UCy(C-5=CCA3FVEFVasgf|fkB)6ktz?#7 zJXb53s~1;kB~^OyVy$GcUc6K*S*jPW&`MU^RJ^jiWTjqQ54zQ>bTd(q{mlwrFQ)FT z7iXad>&4tW#oTd=x#JddBPnRP9w{ztFDb;MsJ)~JkK*={VmwOPOG@x4Z7(UsqpZE8 z43F~ml5#vM+Dj_%nAKh~3y<0DCA0CkyuIXdJm$2Q%)w)BdkOrO7FV{HRN^tOy<{Hh ziJDZ!YC`?bBp&)3=%TaGWV#OGP!ms{dZmUyEjJ{h7Swfs{p@d=jr zSW7(J5>K_nPgvl6V2Srw;zuphg3%p&H_{lDRu=);$4-_Th`WyKHQv2VTmi}{zC4P}5exW7)iY30!5`V!Gf7TM; zWr;s!i9cb9@36#Qv&09(XSnH4HvXv)-Kq3HVZr|cOT5PtKWd4;V~M|QiJxtO7qY}P zOT5hzf7ufMn0miX^2@mDQzD?WQI-#1(8|0~P)OVZ=%e~~4A zp(TESCH^@}+-Hf`S>jh%;@`ByH(KHwEb(hC@g_^W(GnkR`c$m^;`(PseEcTM_Zuwn zjh6TZOZ?+b|04^$A6VkwwZw0;#BZ_0M_b=(E#);?;#T@t)4yd&KLJPiYWp-;;;St2 zZ(8Ek^t&wIpR&ZCu*7#*;*VJ3+b!`2E%Ey;@t<1acUt0`E%Ey-aclW|E#F_Y#9y|= zt?A#jeE*9jUWA)xD*dm-&R31^f)b}1zrZqndMxoyOZ)!H5}$2>Klko<_&Y7}GcEW` zw!}AB;yfBM+s*tVXqR-Qo`9v zI7bQRD&c8LI9~}*SHg7MWa3HVl5QV!!39nSb^-B0ECA?Y*`<3uI zC49XSZdSsrO1NDK->if;DdF3d@RnG3#Y%%{E9%X_Rc2td8StBdb!OmtBXCzU$<++< zwkqLvC493I-lT+YSHfGA@SRHdE+u@A65gtWA5g;El<-4JnDhutJReuW9ZL9VCA?b+ zKd*%MDB+isFzFqb<-e|k4=Uk9N?0i2E+yQpgpVm<(o-Vpqf6I7|wafU0#`6l}N!Md2-TlUMpYbGrE%g3eEb{1it?}GvJZbYw?`hLY&)1CS zg;>;5{3hf1mhn8(A>S`Bp0t^wbWa)24~*x9Sme@s+MLkyZsYkHKOKkPg8nwu_jBXq z^ETu8w(-2sDc?63&%60)KTN_;%2y1bK=82hFbRLC{0mtq0QoMCv~U0h#U|WffGF8c z*3#lUV;OFKru)RLTj?B2^`R#7CrX~_6Ib?2Zs>~*37!Z3fBF@m;Oid*U*v!D=ZW!U z`0hdSqXIt}DF4c?!U5@(ZF7xhn) zUo854Bw}=n9G|$hUovC&V(JHq&9U^^K5_Y=>0gdZf99a+C%qBH2j#zgueI7%d=|x} z-!W+V&2i~(8Z`aOap|uZH2tJMsQ7-{s)7l52q{l z4B}Ld22cw!`VWTbC4-l*+%p({`LF$S5c-7Em3s!mFaO%X%UA9h48Qy{2QOc_XE6No zcicTFeUy6!!!Q4e!OK_f84SPt4}LNz{>nXr;g|n|!O9=Jm%{<+!bGK*^QXL}plZz- z!^7zlQxav2$%j~_PTn#|od3XGNy%g0?@5<;0utxHV+i?4kw0GRFNXh;A>@}j_KD$7 z8A5)kCZ9O}fgcZEf2pIMIR70($WIsClh%LG{LsV*rz=;%#O536WIw4!WsG%3eiUCf z*`Gw)Yti`x%YfG`iK4TiIX@>_zoFyZ-9I17C*a)Y4BxtN41G=igmL{-{Owg0pUaab zkFF16*Kiz>rfH(>2Ds>o-sMqrOASh_@QJ_uFrE?;0du_=yFr8Uazxr@N({}KEb%!M zO}=-}Ye{lq|kG;#p)EgRKu_XIW_;S;~RGZA&n_ScoGDx{fj+<57a+-jc)#g$~% zH+KDm@*9^{`sXk7iOPie3uBduG))(qTd7g<#ggwZ-B6@)iKKs#r9Sb&9f>Q47BTS~ znx=AWT>U&rkw$s9u$_u%6VnZ`w|>X%Dj7k7b|4XqPt3QJYm~<~K%y>+4gKwYE{YBG zurYC1iZMo8w7z`NBU)aTBrca%?o>#aXxw8xfBz2#p(olyDJ6#1)o~evS7qDnhp}z7 zQOI!^0kR*0YhEONwspHYi=2fP6Uz8r9bE6U1;&}?eX&m_3*e#3KDd2!M^?K<&Sqkc z?$9EK;l>9FqPQu;7Eh`ga)kIUcN*wI7Dt-0_1%#skGSUvya7E-GYCX zfq%BhQSr|r{N2Kz41Z;gAoC$Z#DCJr@pp)=-${gjP89!o$y_D<4gB*@F8+&v!U*Z_ z5#qK)_{ZqKRWj>1{Ez)AN&guc{Wk-J5#sLzg}|HXhmtp0=TTWC=q zoB`6Av26kTiSmU*IIwE#S$AQBTRhTkVtjT4ev5XCF^{kVz=`B(!cqUwnj&~jo(O}C zCP(axZ3p9bfwX_+3tRvgg;$}%`x0iD@+iD>VO$wIyg;AW_pl1`o`FCrl?S}qhD`Cd z8$XB|t1Q3<+oxAM;n`fD?SU;7+N#5r3f0}POo5$lIK!R~!(A2jEIhPYr#9bHcO(^V zfnkqvdRrtgb~{;|gflaEsAXH6c^w>y?sR1U@F5E{u2h~8y`V@I8zFRC7bE${5}e@X6|j&;PakJ@LuuhtHw`@G*T-4wXKcIJX`ieKPyu z^Xt|aeX67FWqQJxq} z&}KPE4z?5Hj~+^AmE$i4FD)6oOp!kXc(74VIvYcW2X`}x>z65>-Z*&uh7He_3|^L4 zI0SgGK~6d)L$BYMWbmeoLoI{XFF$M}9h9NN8=D-S|KosnN-}uUgnbC`a>F*#kr{gZ zQj@{+irbq9r)Or^MmjZv!NYV>9xZKlxKPf|h3foFHk@oUKiA(*>j0#oSvp(@RW8gB zh3?b%;mH~g%g#4lM84h~HlD9l(`GynG2Q|1m2a8Yj|?7E*#OqF%?WsC4gub(QNn{t z9l@*r6yV+erNQghvte}ggF!Zex6TWAmka^k4WopYDdBAz3wY1w4_?2?ql8CiFsPrK z+V6@X!28+y(b3arzf7X%+j)c6@1jw{+biqmZ~@-6gTagXlMRep&WB8LL75H@nRZ=u zu8H#$EP7Sz5YIoqom_1ybKLejE%B=?@wt}xQcL`1OZ<9Ee5NJtjgMn|!=J32(R+>a zF~_yEzr^`iYzJbVj|DRLJnP6ZX@}mkiHxM>6Hn(`lK< zyxAnz2^ReMd~6n_PJBL=0DoA9x8fgr)gOP_2}bd^H;$n@Q8D~!fkXJy<|SQ^;{T_0 z1LE&AR#Y%%6M^^mc1qn3f0pl>_a5tW=mvw0wbnmVLt#J(29;sz2;0_prBh76zi%>h)A)yg+?5m(I z?>9@t;?>xiLgN@c6V@-T#VqxUZ!oSOze-j=YON90@4i4>{nq_wzxw4{+wXZx z`&~pu(1_X-E~C2#3EFQ-wEgz&@7*h# zEXQcFJ!+FZFJAG-Rq5VuMytf_HAsE(#VX3*uRd|@WvNemdvSf@+RIuWYOkT!Cq2GC zFMlJxKDpNRc`2@aa>aMo81>m7E~7gjvVD@&XMcZ&9eZVIpZ%dluXFoQeX`I##M(lE z*Uk3HLXrDykJ@Y4_4^i~6>GM6Ur$)SY7)pn z3CE|G@N|0y<(gwvr(toltMvdVN#YZb+#78%M6Db?_9`%zmpq4mhMWy6#2t-5!gPTf zqSEHL6Px>nQWRE3!}qX_eEM% zyjN?wYr4vC*VMf{Dvq{jCtbW66oESznnvIwNc}_qFyzyqa|P4y)&E55`AO*aGO!#O z{q91}259hItXF6FIj5`AFwdk}s*XbScJ$d1RCXD$FH{&NxEc|`{;^dcQnNiVYH zPCk?pSaXL7Ig39f_*jA=b+(@#XUsjGR?fj_wf7qqT2VhEdRfNjHAt6qeBL&EdKp`i z6|C7RKE&J$`9HQFmp9np+6;#`?LPrPa*8&ch7<@?OX7I=3QI7oyo=0XWqLtNKCBL2 zg>o&!DnWfUN|uZt{b~61HTcnk)IU~>akSPj`^Oe4Z2*2mdc3lOknwuzAPLOZC+r|q z@z(3ju91+2vlf~(%r*N=Qr2|m*W+oJfPS+nNizDqG-CRZcgBW7@f=N>CjD-Z^h?H% zMr3>6=y5d1C#2T3H72!Y4oa80Ft*P@-h~dzAdBRNO(6ut~2$_z~%7 z%kD={w4YEX!FGhWx~*Cn0x*f(OG=^Igh zE}?fsKX_U{?}(LsHFCjF35S41DtGJCpQA;?H>=IQ*42-C$`Lk+Xwrx#7UpK~bL04Y z0Ud@HI*k(*K0){J3Hqs!p`eZGTOq3^6=@ul$4P*UJ-a!d!f8NTN8l6|y)Anx6SP?m zX*d1h*g1obnKNy{^_g&Rxy%!ofEDprtst*s367sLZ8O%p*Nj`jc{xrCclg3KBwrK$ z9oGf|IDB?T0-3eKg|=+%@SlYuQndoWMasM$ZMv9@bW~X`0xzE+xs|Y~Z;eG0_|x$4 zodjSLL-t=$eY7+aZR5p^vLx8E+^cGpfxVNluYR4eKOY625-m`vL^YE4uS9|Rmifhq z@c+n)Kff3Ve}~xgwK)85eNDyRC{V%wRwVC_|8?ryPZEER*t0SY|Gk6YzZc2-F7wyH@5*Oni?a;yNuJ`Gv1C@y|hN5OF%SG$y=*697882(;S^VK-w4}||>BvlA+;9so1Rq+QK@wOd+LJLWi4%wgVJea1XEXT;Dq(;2V%hZ?W1^gk(cz6%B`AVQP&soC*HxnWd zu$^D7owfr<5qJ1OC=y5+KPlk?o5zK!Be0q~!XAOC#u^1mtg@BdwL{9mVp z{qWzVzO~{%JpN8{`{NP8qLG#k4mXH58W z9fVXi|3XN49$sPYBCj-ek$2yU+@y3|MVpZdca?P$3CD17Dz>B?Td;I}kz03#>>I1< zNjg&-nHWiDRk|7JjUjMYac><83ol>7xUz3;di!nlt*kcM3+o{dE8r2o!V1NxFP*`2 zefbrf;?ly$^BApMj48lP#i70#Yu17n#j5!qT+Lz#V_sNpRVG4yPa#Sgs6KPWiMoFE`H(K>3|Jo$Y$U9YO~pJ~pSPDPwWRutxIeB&Nk)IXHDQ0; zzzrq6y^C|Bb&Gb%|Dn1K-X&*2wy1VVl5E6v$(yL1P9<#mb;-UZ%3H}lMqJ-!Dr+d? zZ?*W+GP5D0mA!Ikm3^)xzOp2Oh^s7*zw^~lQ#MZ z$L9*b>(6g4SKkhu-|!iN$H!}5$Z2S|yl1gdA6M{5qVef!CFv85QCI7|2+6(vwO1&6 z{r|>meaXOE{dwkAKjB7S2S3(+#MjGlXsoBzkX8!x*X!Ih`YbSY5-Z_6BevUjRO!!& zwj#h~o;`tiw%qPdL?ywqdzgv3HcpE~A~f$b5z2)#{J-^$J*$A3##CMKEK zkr}X|ow?T5bs`eMU~!@YxiNv@gd4TDVXB^l^Qn#{kOAcVMrhR_56&Unw!D4ewr*tE zwhlUZn*~DJ=3f3ihF?sy7q^^1;LB^z4%r{3lBz->N-x?!{ZT~UBeS&aGc?l=lUPM( z93YgaS>WT#*_je6$QPPW;8l4&GxC}){Ut1(*-U>!Z3K9g=F*+pLKTiG7FtweYCqM? zxo&)UFzn_$1$m7xauMep$%xCZ+qX%VMde7+C9#nC^@piSv5GrQCr7J4|y&=S2Z_pggskI#h8108t8B{bq%&P-b`_$zI-6uwi z_2u=%@X;PVL>U=N?O`VT0e|kLc=zSCQ?PQCB(D;l^Fi}&nVJ`0G`$~gkJ7x>7kQXa zFz-^t2>%Uqg|Frvm~nPffzHI9+QuL`d?a1I(eV)!Y?P+^g1!1h*U#6!u*h0=icsMHkwp~xtH#m_XErM68^wJL; z7$B?g1@40&sq&;f6Y=l1i!T;|eB)qFFXWu9*}ol0i@+DwBIk_L8h?P{Gvl=7uFbRu zb=#u5PB`a8|6nKbaH{zP$=jZ!gD^c61HB+UaCY!1JLnhut9=cmR_+=tQ%?i?;L%7Y zfjh3pWI@g^Y}&ptMzCy=XeFgk(v67JMJ<25MvPc`BV5j zYy<;XP~c)yEfzmCmrZQzSXZj2%V`bol-qs$E}Ir@>ztVUeYKok-;Z@jOh1M8fn4(? z@F@%qV`FZ?Z{#pLmFtcAn)JR3HIC8y9EIMrz)3*Ty$Y8|MH3C4Wk**W!@E?WsYHG< z;DoB})tcMddU^X2yiC%hpF!0m2l-T7dC$<22I^yD zLaY05y}JiXn#uHST)?Hzc0#UzWnC7pWB34(L$M74wQnML83sJMGWSWqOE=)rmAOv> zp38toSLQwmc$o$~x-$1kz#D78qbqZt1U$3-=*ry353l9@y;z|eRis;UCk@i6@H z=TOF<=Mxxzql0I*-_Xb3=->^1{EZIY@WztO=P{`eamJhT0VKK@1nZ-nD-2q02PE+-*Is)>|n^YE`b*8xX9?dnWIIR_VsJ?`!%Z2OTwS=(7bTL@v^w6&f!6 z;^mRE^z>lwX=^4y`*sX(8`sHg<2v3pb|CMCkc2-g-k*j;?+*XiUy>>o3O$mhSGrLE zjxrrMNiJCCZ2ZZR<$5Q^u-mpIYI4Fn*W=gG4dqF|e};;GhQyz@p-J$c@ehXo;m;`a zPnY;JTSZqFme z{w0&K>$B_-`h9v;5S-nAc7v^2eD`eV$fQ?5Hv>~c!Fp%o^M+Ccn0B3ckHBqHf+hnW zGW-k)pBQt0_>(_=_~{ZpG1mU@zkAllUVoQ_PmHlY{K+3b{7ea-7+Zh%-^DrZ$K3v7 zC46E`{ozmk_~9GvPmHBM{O@{CM*Xjp;}4chpug{5D97J)9)FTC@CYQv&>sVj6@zDo zHUeq@i#C#erqjCF(zIS^9k zPs$JNxPgi=lS};?O79pjz0}Tm(Q-J8Qh+b3c0%JwI+uFxbI{71$Lc_tp-P81f;b=g z+8IYRJzv_rgVRgJY)b#wfayKr>z4HTfa$%Wz>qiqDSlx||J;D-9pbuJdR)JDh&%eF$N4L?h;@fn=2#Z_x2$N>a)A0%nZvMrn%80R z7G~aWg8{pDYeUzi%-G;q^My#0Q=E7H2N9g?hIgc*ZykTjwW;&?tK)W83pd`w#yA#s z$M;X^I4=yd;kY~nz3B`x+zczKxWNerfsQKiNb!dedM{bDuB-8`%%v+J>o%p36-ay%R8doJFdTR|5?KMacQw%{;QMZH?DrcSdcU~cm|cQ z0T!=`(1*pJlm-;KT}YGTq;tuUu>#!}dyvtCSH&%(j%V zMvWl(hr(aH(Wc=5eJ5>GX9{lA6gdlu+*3N>lQ3F}(SEi1`?yNrSbm}5eSnR{hRPgO z4ffD{r$~o#E11amyl2{;A+>#;=D@dDB)FWkhT5K~!~1^hi|`9}c|v8!pwQod8!u(O z`m6Zu{$&P@*d(t+n zs}f=}C3LlhQAG3lh|Qmk%L!%2WRZYC<;NG@grZ@EE|lL!tU@pG>NC@E1@&_cPH_h~ zrrt|eDI)%BQGrFr)*wZgO^YwM;rHTO@+q@Cj*e*lp>AxMsJ%}t6$?r->Pl^KQ$ap zf^{`Fqta|GH>Y8`Sf6cPa67XWGl#xge0Vu+op666J=zg)l|3Dub4GfCE|3TwEWRa! zH@+XdsdGjGkNY!jK4*%@&O`g|q4wS9FAS%$o&REPSi@IHIQ6B)u+*@|Pre?82%qjdIrLXCp6B`C>0!q?Ab>RR zS6s_y7#Eo2 z!r2&O=8*UIxx7W`@Ak|Dt-M-C?ZT&+C!WWo1}9cK-t{^Z!fgrBLEXO04X zH5O#=HozxMpSX-*?wd*|E97i~fIdP3s zTjO4i!3U!Z4lR>x+|*r&d$*YH>^6CquWnn45s!^O1^yGC8Xd&31(z=)<}O$1?2cpt2Wh zLablK>cTDo`5|q~|QVaGsZqozZdIgU=nYqld1k2iODeM5-j#F(c zjAg%zg`)F49Au%g3#J&AB^+w?7eq@#Dy+EFA1bubA_6S6f}99sL<;RRpHP>c)_={t z95B^YG_9X%8$2lg=$WzdaasBWG4Z_=l)nYE8fJM7Ir_WerznmFCY+4Sv^@gnc!3C3n;o2Anp&k*^}_%-^gdP)7(LjUFZoLO3BUu(xTg+6`F zTv|u?szdW(FB?es06{B(O&mwdoO*HuAqoL%xmL0muxgglOROK{R>f|M@~L=mTwjJ) zwKdgWq0jLG-d4B&QozfJ!ShAoO#{5(oT@_cTO1ew*mMFmvt>?IGX_NhVA1+yZ%y%+ z=;NsPRR1L?-X1Idc(z#`Cl{aX5Pn&_n~L`Y=VZGRlucDZ`9R-Sdpy|1t0h~Oe}W#o z6XfU=6M_d*(DEHU!Gri#2Z|1n^ z|KCDnM$tY!4MkM>Abk_x<^mjAjWeiITDxB1HKba0eb4sapnk{S>U`T?aMTs7LC-?h zLSCN;pGSc0GE?f|>G-moW+HW<8tsg!kKC=%RoP%~R^#|+L}b;G2QkI93g;l-c`1<< zb|d@qdXYOW2?_q_c8-_CG!Wq!jvFRWw8Dr5j_Q*!02X-3onBmSZm*UuBA;sC0wW#{ z{yGAa<&6(%$f9Ec_zR|1hpnf4VT!BuEYL5wVH#|Kco2#-Ee?fdeH4jQiEFSU>yETl zArfliSE0~SM8qaL2-CKL-iI>j#o5spdRsPLpaV<}7TU?)X^7+Ggd_!`b9bnXO7O{i z8YdQeAIEHgc_T31DF3dpUH6G1ohBL1f#2VhaOst zc$k4rzoyWpepwioGTb&7aay2sN5-!!z!4rCbFjgWE#pl(A-+8lu{G!YrcP{(zBOA? zJ~3V}A42${zY0kQQ$D#f+ zuGVj3wCmIK61)DY7C45v@kn~;4!pDJ_7e|g=?hQT#g*Slwdu|iPh{e)R@tqU<%XQU zrX*8$L!uJ$w3Emw!uRtpiL)n=4ahL!mx~+TWjQk3P2p*b(R5W%k!!0c_;Ae_J#g&E z4N;LrZcO^i{S7t(!K)(y54CeUS$ctR71qVzEGH|Gf1Cl*XD3b%a-n=LWi-lXSme#L z3Q%%L9%3{D=ucMjD19bSGSjm>dm<&CMph7GZN}*bDL*&9{A86~NBVFmkH0fOMz)Hq zu`IaWurpzP?@z4Tn$dPtL<~8E%=92Amqvx%*2*barpNdvqyKHB+Y(Pwv%CcGZ%zU~ zd3)WqDQWp}_#TVHS6v=L8ch~d`^tvzV&#lrYt}1W`&RPYr&7@U&b?T~us?>ms z&doaPco}#juj9y=DILMxDaddtnY0O>IIR)xtk|%n-PZXhd&@3TYg|sIfTEll^^L-N zh;$Q1124l0kF;Hq!@G)fQAPtV-3pIR!;{0io^&5Z1J7lJN7^jO;oVNUCZmCuX@y7H zE6L$`M%#X4t?)=&B{@9rXzAIn{pd72IXow6j*N(&lW07&oFMJA#$Uw`2~tN!6~R*L>Y6Hvi}Kk{r1>gH7~kxXRv;(kaq>kaRo6Um*d<0VYhQr{M$zMIe3fnrSwF zdhnWjTi{ge4V%5Rc-hm6GVDFq;A|9Aiqj{KT!U%10_UhsEWu!8ZR&fpZglHuY$>yb z47zhR#}YcnSwAjTaRryjlT2K$11=5|7e9_nBp!deRN_IFn8=0^K;!s9Y^cO*pfiWi z5!;Rq1Ugj#O}IQk7OzAX)>LLo@LLecCSFnA#!Wvo|ETA6IRBm}Aizh4Oo;R?X(>mvzh3QR-&pV68}ATN{Z4uu3BD(S7llOlRC|2-)lNEw zD}AL`OTllSR%DmkeEGfeEqfXqnj=MVHxd*d!*{*7S1ZB`q*V~7^hF*y#PXYQq8DoV zP&)O>@3!J*)DP)HootyNOWswz`<`?+{ z{9xBiOrcqNr&e~%FqR)K>jiCWzS@=#Z8&OkZM+LHeHOWBY_KhW5r4hVD+i(UhXVJB zuGSlo#`S1X>JIxPn{8FWQ~sPCV~o&QJJOAiXGew+8oT2R847&4rzpJ{@M;6|zXPUB$F3#C`G=f~%0@ztgN zf%QA~31dRlbbWpwtsZKh9D`Fi*P|tlV8=(n-b~kx2QX}0k2D`TZ4P`mU_p&1S=9|V zjDs#8JH^T(`cl5c2q0t(aJtR=I`KQjY z?ZE%r6X)0p(8|9>xDNk*{BJ}2Vf@=1_)Bp(Qq$}da*T1L^D_f|i^eaRm^$9f@{=r^ z&Hrg)=G)*5!Nz+->=9{u7}-WUC*j3w;z$ly$)mj{2bDgG@>;s`E&KZ%>ZDrR9_(Pr z{*|YB-FTZnbNiXLZ!}Yv=WXoX6YukOKbxEig+k9Gt@t0>GM71_TOJsrug^SkPO$eB zSKABd9ehyl)cY7iKCOT6L!_nd-1^`6-V%}H{%-0?bKK!Jf%3XLaHi4LjSwn_H>&(PV%R*l-Goe`5FsI_xv$-PB64^vA(s-`OduA7HdD?8dg0R0W`ewc z3&t8n=0Z}N_yXm6iQwa8A0nOW_1)kElc@{>v_L|SR88l_jm$`mBzkmYr2Vi)C!(`zFO?2(75k@e?led7O-nv_fLu8mYX4EJ9WuGn2dq7ov8SO&!Kk!okO`H@s) zi}|G6(PwsxD8HBcC9@kj&2Ge2;7D&J;AAlptC2a`e60T+>Qj|YQAdTR&oY=`uy?HM z#ya#>aLDV=m}6_0CO&14F1wBcDP&W}04h8aGQh)c;8R1c=uV3!2JI-Z>(O~*t0PTz zeK(AKLoY7Ulqv52BXT@IIhKkiVmY?R9Qtmb*#9O{+(aon;?7u#CNl*o*p&k2;Z>Bz zE!M@-EHKlEpT30zWr!MmV`T%R`+;-BoLJ)X&BP5hkxeis<3(_T$L9Z%$VM_l?ZnmE zM?GbZ8#VFJcHT~fZYwRrPz*KC%zpk-~V;07s{^hSN2yZ@w|qWVue|l z|1u=9G~7=yB_7E^8(b1imDxX4=nqH*k#Q9*j_-Q+1T>)>=uwl=d6*N6xi<75h&8c; zcVZ5A!w@I%^^ua;1icr_OYAh9;?rs>%1c~ZxZ~c=wmDCqW1E5hujBu#=zsh04B>xu z<{aCDcs_$Cz5gqoCX40yKRbR1OfZK4O%d7X@j19!X^sK;4mBmGLv@i85g7A7B~S_m z8ZLVs4GXtXAxw^aTG>ISm{xX(_^AdRA)3~Xi68XPUO>PJC{nI>aw5!fe|qoU25d{< z7qYs6*>TA%D#XFxQ6dW2Ep9o&Le@{yO0uj^pY7J|EqY~+mI7qpoFfAJ!{l6(=Qh}S zEm=*dROS>`X(g+9-qBLHJV+Q=UMCnSiu=5jRC{SI7nw8MK-7_oh(f@d}=$yZBzg}K`6?0po*OT z6@5K-lvEs`?^IIMzLSIQ>K@-{!(sq`S^m>?R*J(Ce&gflPFTg0*094CroLrkVQsjG zkJK4(qVmcd$D57v+&H~yeu&CR=~v89@;fO1wh`p-#x#IGx8I{T--G<}^e7n?F&fGJ zVpM&R=$W8B8{D!j#jifXbVeu8IFv1c+7D|Sl+#8Ia{VzZ*RO>3&wgk(;p;Kdf0`%T zk@dUu^jcoB!Y`X_$hz&cK2+MYUwb-ZxKaq;!8~wHFXo@ejeQa%B*$-*ZGcPHJ~NEQ ze)JG1<1d{-%W;pZ7>_6E_y%H%b5Ms*P3_fR(VZEgLc2DrFZgy!;OKHK4?_t2k?!tE zgU&1h<*R(uDfp9#RkHrT?Sa&O7q&4!O5UJ}^Y;`kwEM^Dh0_OZz-0N?HB?v|dlC30>iKwfzkAk>l++ zpE-iaI54{rZ-bAmz^}vAb}b&pIjF1k8;CSNM(3a@t~N?wWXr;)v9$_uUv21rpGPT@ zng8l8VDjF*L4KyX+CGgG`bOFgU=>Hp?m~AJ45T9@K7uv&C=RKv)@~G{KeiGXYO(T0 zio!Lt2Jb}(Ul2NGgv4nJ`Xc&fN&=JU_{A8}+72O56*-lii_+>AQD3dtzmQhf(EG=Y zf?fVg!flV^y?1_*E%Y#9Y9QT#ASR)Q39nFyl2p}b55JD5`1kLmz+n!Z;}Im`xS%g` zWOnlgi27i9@Hw&dP1NaO!ZC(3`ub^PUz=>pUv%t!UbMj0d7`RFqKI=r3Y{Bqd0h`T zOA44JTwO&?^}q41*_sNo#qw_slVlqxWBF|r2LCVoPPzw&mD38 z{1k%k9!maUjF;=XO$s09@j_?u0}Yv0bkyjOS&K+?$TT1l9Wu)hQHM+=;sXzv^N=FR zka_lR@k8b>Lmn~*=M8zt+*>`$A(Ou;Zpgg+ISiTd*pLalk#NYkH_>=WM_=YCZ@}?# z6wVRM@nW(NXiiMggM}a-bqqsN@bh=fM(sar^yoKZ*d!h=$D5Dwd|zmz`F<%Q9$y^$X@Jx8Lb{q;S??7*Ku6=-l2A*g(4J&-FnU z9wM6#^c>0j)?*DHsytL}2yMdMq#z;%NKrL>xn_~&Mdd$KoRt4W3*&WoRQ_{4juTAz z52|TX*UCil#PsfIrujSzllh~~KNx^I1Lt>e{_l=Bznk;Z#ydHc6XSopxsUq``Xf~V zigd|}NSwci*SDma)O>sLyaUmX)@Hmo-ZXfAqkr&nu2AV8k0Wcs{_*p7hR{Ev#mW8= zEiAr&EPZz*{o^?I4_g+HrS;xVlQ&Uf`WpKO)Q?Df&j2JEFhADel>dQ|=EpLQ@^2k> zemOpxx$-|uUiksW7qw0*ch2?!peGw&2K{OD6a7hQnq-J1qo2Y5QmOtVR!EYa_ycyg zun`s8f4gx2;^--yY4;c67d!E3{)=Z|4P2Fv9S3wVUB%cRclgi11&VRC3#!Cd{CuBC zy9}<2!G5r>&?fMv-7UA9{Eo&F{Uyd1aE7s7QTZ*1>;J6ex2vy8IGC=0%p(c2mG~TQ zAzeRG&h($oJFn2yOSzg{^LrE1^O z76kt`0n4IT{wTFrC=YGX-k4N_QV2D&@Au5yd-rD9T^8v3{C<46**kM*&ip%b=FB-~ z&bT8p^CC0zg$XQgnfOEPv&ioW=r~#o^vd;}oWK1?`pKEHzs~rUz<|=mm#D?5hL%?- zd4E%Wsv0eEm6wuVUthB<>veXf>veP2R3M~fe?`|h(G^J~MT5{tSRLxj#jWoe%!Of5 zYR8_4=HzK^VQOazZIB}TW-Y0O7)GXutq@($1iMz)La%byMP8!Yy0m|Ef~hH=!S)xH z`(WA~(4IMq2(G3WkF41LAe94es!DGxw^CK$nqWl=hqJ}AU*^+@Pwvif8+=g8jek0-6`QO9%%SvYymQrh=(V-wO zH5z^e?;t{G(;mFx1#d_7w?e1NzXxK!p}vZ!hwwq0sL{@h-)hyZee|9ou;c2WohOWO z5GlBdK-k6SJ2{c|z!J?fAP1lt*Xz_{7xzSl}%Y@UBV%Z}~FqyBPq} z`-iBvs9aspV^q$hJiKcDjuezf)aSHMRHiQYsl@!KiZfMaQ9eq-OePjQxhkLJxB@rH4u7*=IsMAkg?{4}O+~R)HdcGP)u;T)xPe ze4Lin-hUJN1L!q#upYmo3(EPtGq(Y$>MP`{kS&_>RY#`vJBo#b?f9MVD2MBKr2o{k|8hHqP{b!xLd6y@Yb>Ks}D;$h6jHB^f^ z`dE}zVm>A7Z;ZbU;&>YWg{ita-T3<^LDDPofA$jcpAI?DN(T`KvfOCb#$-esQnu$b z-@iEHi{J3egQwFk51MGwuYnnX1b!x6|4;j7ID&=DheI~!FZ*ZqUTE3pV?lpX!=LIV z_+*-N9$WGKe+T>`UjO`L@Nc{*_{s3m&`*bG{=Rb2^z5{665lVt@*%le+uDCg%jfGA z$*0Wm?w{#+Cxyr95s_H5=Wu#@lqA29S2?)6X+xUcNX0*i{C1uniiMQaG<|*{@A}Rq z?hN&e$JKtIzxfPtSG z^b?u8fSZKqrUd*{diera@X)?!`Vo>;EWj&HnO190&Z1)k3+NcZUiy4uCz;T@SPnl% z0Q&=EV?Ek5%0=59=Rz_{6|AXgv#M(x$OKXUl!{*kKN!Mb3;{m~!9p6$PBtE7k0Qn+ z1mPT8vxj2@Tk|^o!m51D0saE6_7Hz@i8+Yfo*kcIaSn_2^En$aC6kpG=N}<*HRt1q zG_^LTcdGUa`4(yyUm`|dK0Kgx9A0KiSn~FY^^iAKtcRIZPOJw>=!e07V~IEWZ^&h} zSKqyQ;_x!7V)FJH^|OWI@CyDN_2c$Mf?kaJcffN7heBTeG!Q2vXsPI_P7if_5ks6Y zJxemag5Tkt_ay4pu4UHP3*w8-7axzy!DnN9eYQBfyo`GA0{FsNMlrr4FAJX7FMz(# z`2O{A7Ie2uL1uN@u7JUr|{@O zR>U@2T+M;>LjGf?!~7A~>Q|gdDKfS+o{#fASr!EVgkROD2{RF(rv1#g-YCL)SJOV#Ne_ft^ z4u_}Xhk%!prdAi6kHTI7B#gRD;KyanZvoGT_M*!OUPhHm+5g7+=CRDLVHtr;J03Qh zCypW+%S)5+2Rgq&B*~l){VuD1`g&AG-GH`-}Dtx~%cl z@y{YM%#7ttKHtQC%Yw|AP2QC4730AxC&nW)W;Z1~-Cjti2Lj~ft!HAr#rjC=8QHUE zG#aVaGebh|v(T5!M6Sul!^9UZ!WH=9%BY5^;0gK?ve1{ytDnF>L9aypGMjR#>ZgxK zD89aB#u6llC+4r4l%-U;^eR7KUHo5icqaaFk%Yj%%b{2L_|p1ou1A;0?}_mc<15DF za^yo|{#qJ)ne@PzA0A74Gb0IU$Ai{$vLAc`W1M1_kvu>2x!CE#eH`Vo92YxZDwjO} z8Q&_tzkx~4@)QN@D3v@v>`%CSero#6fRQTyB(8tW&m_OnRivx<#6e}l$pX~c{1Cpg zPK9;SaPs$^O`bZZW5a43{}-k#(dp=E96?xjRO~7|Qp*QKGJm@Ye+Nim90j%sEg+1* zYe_#xzTUs|JLu*7E?oVft$;x|xuE$m5|RsiM15C}dWiDEnO`h$2TTwvddZyZHi{#O zFWhRvof$>VpeRU=DS3r>%FiqP9ooPMp z2odsg{+;3v^o_6QvqMj0P)y+GX>Kn=D-}7Oag)>oE@vD?E5TBo)=x7 z7xI_wzH8G~fbv`Ig{jtty>K9@eb2SOy^wv6#lDxo3Hx3F%(SxOrb7SIp2Et`93C2< zr21d|I0Q@#Do#Hyc>E0sDjI*GGtTkezCd~Q;HO1-o@C_>WThFMhdXb+ z80`UU2q>;iZ@(45sHW+)wEdNJq55Acy)gJ~@Ux_!T>(OxqK?VxM++(OuRhLgU%zo_bbx&+Kf#{0G&1uX9bxajh$HOD+hdHrReqGQyfG<#hO38U zw0F_w^J%Y@{G_D!7^r0M23;yV96*4Tz`mcI!(}}BZEsh980)#eANOBnSeJ2nn6!Q7 zQjE<79h8DOX0x~CdXv0u-!?AI?x-XY{W7GXkW%HuRlsy@2BmfP2cE+IdcPY|u7^_3`OiVCDE zUtirk!E21Q8l2!n5ox^8dgbk~#}ELl^ROB5Ymz zxH>V~o1Xre{C94q{P!3C>q114mn{CEzmk>@35=8MGYgWD-7`PVxC9zcouA?)6J2QX zQ*H#3@>8Gwby|MveEsohJ|BIAWR5h*fhH%%FOlCv`H62yf&0{BDf0U!ar=Nv=Wm65 zyqNzB(#(_OI|C=11SYJJ~UI<}qX3DqJ z{mZ#$i!-Logr_Ot8T|!*m*`zEb%&*BpKpefFCLT9pbGCH=VkQyl()e^mAO zzs~dLbM$HBl%o)+m|T!2c!k)7_X`f^Vjjqeihr*?W2QG!+HG}G%Uc*fAv?6Q9kij7 zT6W7|{m@UWxKXmnC1mF9)G2-I8IM;gmmwgib&P;?%eE5rhU$6brjMe8N{Upa% z13O^9Ncc`N-4uwMJip*i`TP^gi;K~>rdVI*+f$w|`2J%TwZ5Fc9+>(di^}=(^y^9a z8&{lpfN=V9_#5J9u{k7uG`)|p6yxKYm6y$=9KU+Lz34*6EURzAWMRc0u+hMSeQZ>A`#JNOyJnHBq0;L^!G1$JZO$kDDy?6&Z2l zfOkgtlcD|{E&R#+%JkiM(Jp0D)Q{FHY!+zzZo8!M)7MijveqtoeK7cUQ~^V_Jk5}$ zsK4-TZwrb2Qu^}2za;Zd1PcZDCo1x>nR&W@q6x`Qb3a#@@oDZ<{2R*g@Xj{ZG|L2z z3sVJsM}46@ck#JhF7n zViDh?n`#OIpoM>$LQR4EN%=jK19g%-H-sKfCRq64w=cx_r5I1Fze1n;tS@*;_{im7 zq#^=7wWY_0r1XR2Qx4-WMZ1>r@I#9FbLS5zp5x=H3*a-Cr?6IHvCgz}JC|wrwL!A= zd9g_xFB>YWRzxQivAps`auJI${(ZpTsDuBU0bZ!EOyDMNaIN#5KS_Zbgkc7J9UnX( zQUX}2`z6u=)8QrK{{{bvF2Q(`_Bs_(pg!sG)lK-?k^*1ff9O*2b-s<7J{ad4)06e& z_#)(0T-e*4rg16zN959%I8U!3c@xc-(ut%(pOmo*Jyn0u{N*@?e~nA&a^gtRK;g-m-)Rb>D0oaaCyE!%4aMnK zQu=6CKP`Qn^~3b^k?x0=-F0w@*yqv);TDk#xTZrUm=alzG`0kA5c4RI6jYB5DVUfx=$!RjlWmbRmXnK*P2frp_>1~CcX?3JALrTT+KPV% z_h!Hjbh;bf1L5%;ehcvz*HH+sh`Q8r(nhh7#O;W=R8RQiLnad!1#3AXh56o|SIQvQHh7fx zp>@JhQ5zt2c;bVSvjgv0Xc!A`v9fuIl_Cw~o-jw&2C}(@5b>uvlaYyu!YLoN# z7}`y4Ur@{KY8_qZI`)A9542AOJ()T+STMCdm>)Vj zarJ=E*(vw;Q+C?rzqA~YKfgO?eCOwWWA7|#IT9Q?bt>+wKhm1h`KhV(^5`3mbdH#M zlPpaJym@vxcX!Tb+1bvl)||5P&@DFkJB;`G?i?HA4)xD88|;kKLbj`{nOGWJR|LY= z^Jyu3oZ@)3aT{|R^n^zGtl)U|9CeDy+Zd?Rdfy~LI9brcij5~2qVGh**tO5WiPgbj%V z*=V5KszMct}1l z1M-2Xx_rQwTt4vVn9G(A81gWmMP8Kg`PlRQdjW%Mabpm!K!O}SFdjzZ*#Y;k<$2&r zS2`9)Mp|5U(Re2Azrf#@&Zon^rI2UCJ8Z_xy^bH}!#h*D%7z7zKrSPYcV!GRRsEKP z2pH^(S?QdNfu*e9>C#DVg6AQ47i$lE5%TyKRYQO)B1#Nn)cUaISApIQ{S0P1;J1la(+gB`42R$@Jl z`0$0-!(`(r_9xKqn){Q?T!5q+Um7fn^Q_F29q7g6@JPR8^9X)zQCfsao*(+u5NGzT zOPg6QpT-YY+P=LTHY`s+_0&^Py3F>ddHv7)_27G@Q-<9=n9JYwjj_Yle71hg6~4RQ z!}W=?Y+hG*!ZDw%F~_I$jA%T`Ch?$Jq18tH8phui_0zrwKm5>~b~~lkq};|Z46&StbbaNT31rbl)Cj#3uxfih8@)XFiEWHB-AM=Ex4Z=8`K z($UzY_3G61;DfGhaB1&?JeqFn{(#KU90H*`REAGF3Po;YWe&E_7tlV9Mp3n%Ml2g# z{08C&*7UHZQ<3@YJ(1PzxEcGfMpv66QTSFgq&PO^UeAgzp#RwP0yb#}HYMX2IiZ#U z+U8bHnv<1S?!DL3_EkJ=yUIi2$m{|-M%WdZ?qRqB zb2{A_z1wE*?1vm&9MQj0D;A*48zvpb1)V$WK3fPf2V=t5vXgKO6ykHcH;x%=}v zetgr($_tdKTflt9aPfM10j>yOjxFARqj98KW{;M*2(#cc51ASd*24+-E^!cX@h+vq z)$uy)XwAyv1@o=8t~ka{PHA$k7)R$`>2RrDQ?O77RO9eyxw6aYZE`mLbzyNEe(T|L z7@`}O?IQBKFEjsy%gpael^^n7++xD!Ihj5DMz9#mi?a&87YP%tKrC)P7l<$fQY*w| zMJ6uZVh79ZvMs)W9Ou$KvrZ&AbGUv?+nK|>Tg)yddPee}Ji3e42Q{B7z?`v4H_5#y z5x&P{;4zXE#9&}YNqAb489^VIw`ga9b-<7w_shqHL$$?isJyx|KavwEbHLL&?qZLW zxg%wHk+S?qSpjbrU3NYX_o{bSHSn{*)QmAoQ@33nP7Q4EP!rvF6>l)H?yWEW{bKFU zYd9NZMR7I@-4t8mG#Ute2l_Q{W5OBp<9bbX|t{nuw04QHBCWg1C@$dCw zLIKkWUv;$QC^{)Pq4ng~! zh2j=nT^O1|Bj(wBYV{+(Kw~iRi2e_oRljr|obO%6xMav5I2Mf82mE_YO*CH#v zQF?yaj(*jSe$Ni}xVUy_DXVZtsWWgpz{~+WpGZ$w8Cg3YUm|N4;4cK4(Y0iFOaCHk zY5hn4WXF7thJdGCyQg+Qy2?6+uw;8=0B{oeWLW_Nb5-7ihIsaY?y6h z4^ahG|0%k}{&;|vB?t(m$R;GIkFMQ{k4tS|5AC2oi}`j$E52XMR911Ewd|t?fmguW z9eC@!!vLrS8k_(NPKK5j0bP3@i$9bMIZBh}Tro8T{5S6t@X;8$-XRBh=$4#SxB?0| zd7P!0ced?wXty8Ft9YKk^RWKQ z`_pIXPu1VXP6o6)Py@`&D@1n?Y+is~=y)A6`yLHCsQO{`R(tzj9BOGSdtdPz)pe1Y zqwF3h`=X1z7U77&{Cgr5Cn6Qc>Dq*TQz~8$j)kiOYR+u~#CRMJjsOKJA*m>HK=S%Bt!*?bfU;8@NJ@g5LjUQ6&q|d_6IX4%`*= zR@YTlY2{Ewbnb-@dk4^a0yI>+l=fJpLQ@XJ#_eZ4<8}?)BV)DG&iwJrfpI&>HJykw z^>qHQexc~>e&C>X&>y|l+gIzj$LAF}Uw|_P-Kj%WgCpvvt&R<}sJgBp#*JKX^SuV-!S%H9Bap@%=J@7O{l{xDTeWk@1uV-u56j+Jvk80ab@f2Mqp9V}Nqum?YdKk_nTKKC>@X%cGztp*di^G0I(fiF-oKDe9H zfDOBe01WhZ$&;!omwiD-qJdbSC=Z-#1b|s|15~&zIQ;y1PgQ@J(@ZHmj>d}66p=>H zieKJePIi#EraE??lSOd}`oQ+!6eVVtKaJ~=$FT=EHEZgri~X8ZAF*HanPiXsn&>C^ zj?Sy%y|vR}v!>@1RmmG57%58Ch8@PH=zUuE)+HVig&_0H}J{ojA($T=% zL6>lQ7Sw3)qk;r3?fHJt!};@QXGS^%tjna$hZd4hTD)4C2>3AEI!S9*4#Y%YvEZ;8 zTvmw_j6M8PGrr15+cDP{ue_SYU~SO$!`U?9AH_lv50jn1htFifC$i*jea_25e4SZqdCM>m|Ho%#>0(9 zmeRIg>A6~3_a}TsttS77*UEz*l-e*LAaW~hxb*D9|FV=CE#n~clE zG|>U=MdU(7QC-wk&!ybw!um>0k=Eq_X_Wh%1Ee)n1+&$9pP<51fRB25JUi}tLgP#FAERJCyL!Lw*&WmQ1i zcZ^pU*x@W!V*MMVol}_Olc~sxHs}>$E)Gkr%o6;o1zzE62hXaG{&vv=vHtZ7rIv}9 zK0t@7fyl9eWiF{@2X^#kQ$-CL2B7?C4yLkgSqOy%G`~?1`D#MUnqJ1ak1D=3$O8{3 zdIBuGvttPW>Tq%aXW1hhLUuX`kR0d`1`~uU;t+sRS<6z= z!r5^Yboc65C##1 z1H9hTO$Z}Ibw@{Yh!|m3pq;kPuUo6##k07LEK>M+($R7>bc<{#sPiVB1auY}K(4|I z#@^OB3NJ(?I_WL~nns`}eF2^~5w^MXe|Ed^*5{XEvv^Fl!__Y**J=JkWPg`y zK%dl!fr0Diqr5lpbm3{ilY_c=@RK@=b!5NAvPgx+SDjM6>Xg!|v&9~Jh?Zua*0Nd& z`D-(MQhJ81&Jo_Dd=Va_2J8g#Am4wH*C_|QPC>*JDRpAk6)6Q&D!LCieSO6hMQ*I0 zIxB}&l%3Rf$^oqbOcJJ`I`?*P7Tjf*Q~U4#B>rl#mBAvE67nLf7Slkv$F3a6hO{5g z=G*$KNQXdWi~fk_hzm6cMQ!?p8nnpdOvd~J>b6ZLnoZI<+QZRiaIV|jnK{V1s0=az z(9Z(4dv{r$eRr7$sJ`mv66&$I@DEMRth~Vga(O*Brf**!Honw2KSVsBlLZk76nR4< zbMr-8pO^v&b0?y?`F%z-v-ZxU+!x)yZOC%OG~C!>R08~pj@acyupry@SK|rlIH5bIGJ2q&QcdqTU-)RpHY?xfDg;!Cb0`=ll z^xp)3Lalan8u+ml6QVgZ8MM2WoQnxEc^R#lSgUPcnXEN&dU;v>HF()XOq5!!>ij~` zUogg2YkIIMR$)Jfp64?f93EK89t5-fE{N#xNu4!Gn|3GP?LmIXc^2H3Cxl|$hMPth z@W{ZGomBqSb9bGxGkb>zcz~U%L-}iOVbr^`ahN*Sr8-7t?}z-HwUac@VN*-7zd7}F z$TjxRLBCg_wa1>%j_s$??x<(&JW=th=35(&(93J?dIm+rMOMu3fig1Uf0FsfNBo;2 ziymR$ZAA*T)E-gjrTJfEOtWId4x%Hv1;UrV#)T?7J+RN+r2NZw_g}HY&V$EKc`F1D z`H`kAkZO%ll}C`pJ5lcMUFDEkXrEQ0v^l-6HFid}zDeIAFTP1)!&0(xsM(~}Y_6({ z`Zps6wy3qxFL+4LN3vtqR6zbycC5$0sDA_PR@53u^-e&VvjHOOs)pQ{yv4kEcPaMO zt^R)jEbh?N_bs?wR|-!AELEM41zu}|u1WQu2;0Cxf4zQnM98Jb6p7n$32qO`Gd#;U=^)QnNK8Z^1>}Xe;q~Oy1f-+Op!)9VK9o z**WIltZuvuF=8j?qw9jD@YVP>B}~y$_({}_Yb84*#F7!T(zMAgPhvHw14JNb%pw=K zwx%t^c6pKl8U1`djd-w7HcY z*c2}yxXix;<%1RPi8O_%ze^FzDxOf<-IdGMqn>qI^9o>;N)-e<%i%gsviT<=J9-k{ z1pF<QLDym=k2`Nuo%Vd7`TS05rDf34!(5i$ak_>$PnicH5Li zAxWXmtP`K2;pHd`VO+!>)ZesCNXWXqA4%)h5SV=`PgJfS+5Z*;jxu3Vm6}&yRjk*_^V!X@It98}d2UrA=<%*cR311puN({q& z*$sZ4BxfaDG8w#*En3gcp$2Pc5;J*28T#ETKXbQ>EqbH_mI0VAoi2{No&8=Wb8d93 z7VM$YHuF_-NF@{&n5Co}p$p%?x73)bIz7g%+>meOLED_qcV0~e-ZwFEqrsr^GPwh> z%O#|gUrXZx{mg^(!-mvV1Mb9Wc8KZZA(6F|kYAEYJBtFeOFoHNBjN$PSwN!1MVN_y zz%+cbaX+i@6t`vX9TuJ9&s*8v=6PGcj?t$$oc%n=;Z*c` z_eg7AMntyXgIDD@cgggX;NdDgCGkPEQShfLIT) za#yXoazZVe=~UMdcZ>roP-`Y>eJx*lnx+0|08jvN%V`<(r9xMDvxO*W+0Q&&pncLj+asI;1 z+V$-#89YFfOG09wiyzK5?R&_upR^X0)pg7rh*gcJq4@#Dk;txF5K$cGmBL|)#0I&> zxdV%WttwhJm42J&&Y(kBOR*QFSIj*!S1E&h=v1T(inCs2?hL0gx4=PPL-a9>T{C6{@ISD$wu#jU93yWJX?F$NLlqO-^&W?Gt+lnw)Uk z$}czeQ_hZExe%3u_PK1T18MYH#VZxLZ(?NeB&y5qvdMP*lE_boN{QWkD?)GR?br&B z*1z^#tiiTy!52zwoeKwkEX(P^mrX=#34CkWhKMH1iSdANU%}5UCUX?d&ky;11;XG1)$`e92bx7gY zk(yZ&_e+*IN0uMRni`X*hrVUMTAl{ERGr$C7xi;7WgP<-=d5dRz-d)uRzr*y+j3DL7E$b1FM$HaHuQJ)WyfdbZ{x zc*$pSSNmU`(zET^2cY$Pzx}Undf6=$#&nE41QX!)cj0(_H#Eqd*&t3#QvT8-ZEy4L zSuq%E0?|?3kb?@JG(<0$hA z5%Gg({#;$9NILg2xHBUs2^ev-3VK1#Yp%*~xN#Xt--tmO{5wO~Kcx6HMciKroZd}4 zzg-kujvyZ^9wVp#%C9bNtF4>jcdwX?B@Esp+3I!&o79f8nT;NB1;-jkvxvuQqGgd|#b^Ts;m=+oBgZvol0al5#Bz~G_?pGIM8DxvP z`6`G`BK;$~p6zOIfPHJos*Kg9~y@kXp$0fXOGC z&%K52mRfE>P&qeiMStbo0%^@Jd1x6nWBjE-YIz(lYT0I`CwFCDLoXV-R||l;>7(t! zw-APOFhvo=WWw2dHhJm^8AEL&%d1V&$;yc zBprM{bm{rKL6D!{a_RZEQ2wKrnm-tP-U%JzMUwpB&CmOIE|RZa9K8;I595vXi<@p^ z|4gbah{Ld3!A{bTdyL2={j}6N56P6aUbYw9g7zqIj7y?gC+oSJ+(-v@+Vv=wJ#f)g z?0TI85$VYBGpVijHsomw&D{UOSQ%xHNL}`uda@=_LLG`g30PVMk0VN;8*oJlBeb(9 ztz%+5~1}7qx{%fvsOQ3rydtn=EC9smv=gD>Dnp%+91UYNFUqpbmA%g*tN= z(iu&q^F19;=^4rVKFt^sDyKf|8IgX3?6BIKZ1th)0t!70~@l(oL1ibMA<#C7XAhfK|!#5 zh;nXtaDZ}d1dK4w<;hR6rXIS~tJ=a@e~7DEuu|6A;(A>hL9qzn2FSZo|8wpLtG zN4KXnxVh*9C)Bz~>jP*ISkN1ccg0T+{m`b=7Kkirqk}6Xx69+E{oLX83jsqy0z>dR z?Bk@hPofM~(G@ydBZWx=75aop;fLv^>HRJtEK@7?Xg_&_ltUjtZ?H%E8Qz)y&@{0V z*^Eh}w9#%tT1R45)^t>X?xkfty~~G<9Yr&Ow4*S9{F(sH8={;YE`|StK+w+OcD&%W z7}zlBdbI&&h2gG4T00frsRqM&ZMt}EMp11l4mF<@)ft5(&1ZL@0aADn-g%mT9^`4* zfk@3OM#663NAp>+3pqjWO^3xMugv$(_)((SD_YM{4>mM3;|V-1@?uavPhGi{DQK zm+O0xiz+pEld%K2*!56uVvAnEa8+yafjGtl?-1Cs@^*nKP>C2=5}ZXCQcWZLUE~nx zAx|RF)aRJLEhcM`iQ1GBqGKnlbZm=VN0%cNar}mv_29&$kf`Ad7}s)aF_Rj!MW63V zms@FaI5qLzZjX4m! z7~<@Fgr~BmZtT3FYhdyz?^#*$ekc#Jkaq8fD@Q?ba`x_FAT3a){Lir6-UBOh8jpJS zHXhyqoQ#uXLGK`sfNaD(KHG&9P%T5DOfn8#xgUh#TRq8fSdGSZqNlnB?v`3c5{8$% zs&%_FbrG7!H}D`y)gWmkFz55*O@Kr~?C>FSU^QLJ?pQU+#omZj!Hyqfi>LYpQlb4I zef-EukLUx4@Z~GHO#g5^0u0k}um7-I55(~Lk9O8z({J_?XrMfw=Qw3fM|nD3PwDSo z%G^u6Lr56#1_=WK5C&9|Frdu=c>p3I3}}NepiS9BZi}E+)Y$%+frcx!zrnl^Vt(!E zn~AP>Yd^s+%2*gjOH?5qpd*OXU!eCmIS6Sf4iC~ghF^UhL*GnJwEp7j4~gSyweNzI zoi3Y`6&%58$;v|6*&C_#CFwXnGJL~5-m1=jQR z#}k*gbIB#0#*#J70}yQ993q;>Pq)KY)Cn99uxM~MBFNY1B zC#y@2^N_Og6CC_77$^yDZ!Px#Lr@YG0=rV70I>i!<{#P9oF|^V8**h@aUgi?C6u7b z>4YftgD4l{O&g0vt5KZ0O-emc6h;L<$@*bye~D8Hsoe z%XkgTIG#Y*ODNmd#1#0lsDq461o{a1Wj?1DywyfG5WTPnSEVrb6jq_J_D6Z;+u&BO z7xTTZ`YuvSTPNtVc$?s}n}Eha&G%0r6`Z7m zsS_bbM@Im8bmaXeE1w8*JjLH5FQtzV&5L>brI{pomvQD>)cV<=fMa@W=@REoP_hVlUXh%4)zzXV#COd-IrsThAKJ8s>H4&)e;EvZB*oPB?fY+Zj^@?`!TE!{Ds%tR)ktI8d z{nj!%14YH$c3v^oPQiFLchNc;Uvi0fhKsP?(SoLKEWld=?VL>HW1|Njz?5#I1nT4C zDWvRnsEex2=8Fm0%RaI?67MLlq@mLIoL~1<)$i#1LoQOnK>c$E9iH7Mf>3T_x zxr|<**V;yKp_j}Ox)Z7OMan8vUK(M@mD)YGaD>R)LAFHoSSxXn(pO6PO1Vo<$#H$S zHjk$az7>;C@cH;lD4@{Icg5u62oKSIB*Hj|a0uZ%?O_p~6O)f3JXE`1grQ|VjPNk+ zKSj7GCLcg}q*gD&1u^+`g!8p|BJ5(hY(I{&A$8P^eSeXE{&9uvV1xfiJq21I} zlZ__P6}Clc%_}BfD~10Lk9_6%M=oCSDNk#dpf$`C#@IMyiphox>SYb%7hCDlx)0z) zY*ukwK%F;1d-F!jcd&No3^(iUcoveE=MJIBi(;rnb3;u>Y%=t!99ThUvP~`opPgM^ zgw9oJx@cB$y(+9)wce>5`37)9whkXkWfjgI%V#Kh9+oiU>_3i%N6WFu zfLe20jQS5zASUn827U;9=c^Jqec*=9+E>eybipC&f<^l+U2xzFmM$Qd6ycu&1YrcE z1Y(VP2~-gnFV?7|7NYACI6gvq4ALtj3#YdaBxEt^t)3-MTZSxTA`*aaBEw5i>jY2_ zc>+hrqkS2>VenDJ_CrD%;G|Id43+p%#~BEYrPh=9ORyYPSVs{VYWm1Vei^aI`}dG+ zCrpdA4nMwl6wwiT|IzTPEBiMNn?}ocqiaek+6ObCJ*yfy0I z1Nfq!j`MzUX&XT_8^E1NEwAB|_O4$a0I9_b+LwTbJ$qxZ4sQJ-YPOCaM(xQCKBH*1 z;Frl&MKS(J;hzH*F#3@=G_v(ffcC&XK>MRe`HgtWUFWAfKq+Zc3YatEDIYyQW!dXU zsUTh}FwzC(gmQPj22}boL~y~$Bn2JtGRX!yz64&dVY2ql3H~|#svB)AF4yzjz3%Qay=sD&!WeMrmX3XS1mQYw-~veMz3;DuW2P1a4Y;D?E2 z@pFSqbH4|U*CHR1Z>%Lx*!zk71ZzoxlB*6AR)Bp*x8jS|NLzVGt}I4@D3uFIbl%bA zzk~7h8tz%ZId&5*4}d4X?oY%~Na5XtuMmQ@w`)%2_*kWe`Y z2aulie_Y*u90n%qrDtEwhHdGCOORjMUU9k>@osg|gW2ssk?Mveq=19U5x6Ne?D{A|R7$jli(dWmf# zD6wq>!NUB7Ns7*Ra^Xp38YRBFQ0ZCKIP~;RJ2XB$s~brWge|Pz*SaZY)nw7vNF|RD z3FN^sxdl?3;o8rj#_ELEHr{O~L`RPMJWx=?956d_aNkIDWG@jik?gSO$oJwgGy>?z z!-&y4a815r_h(u7}eUI%x21G!f!02R!(am#Gkf zIC{%&p_BjcmzVo1536%%hhBm}8zR>V=M>kP;D|CM>Vz@#UluPE5>+8LfuRx{Pr16` z_^)uc>i8WAvI1&}Gf=7Bu?P95J8*J=4TCgm#?Bs;W5X|(qTtKSfEEC+1Mx=8*%zv1 zcIf-ld~6F&l7nv&N|oW{2bnMCbIW@v{4_NHwtC%_K#hHUw_#j7B!yd%1k4o8LT3d9boG_sWx@F>?Pme$1vJM-LcWSFbXe4Xly(fr5vSbf zI}bKG@=;@7>_&%bw^B0D+2A!wQ-Lk$f!m;h^HP%RS@ZCe=TTs;pD>)*ar(2vX{A3n zzpQRNffMzRQk;#1593YU_yqn&0S`n4HzyF2<%;^ilAt!fzo7Oyaq~i29|vHWJ=L1D-ojebu@!kg*$NF@9Sek0)x{O@}HcRBwX#9uYsioZbfX!u3EP(>r#cF^aI&(Pn; zpTuA79Ow`F+YNkHDKE_e>@1y3rPiRVZ4cu2OnWcdBCWlaD)~la<0iy)>gS!vK%!p$tv@ay=7+_pMpH{{1BNR6w$M3KOC3e+`_yjNHJ z24HmCO|c1j-yw8TgUptt@JxcfjVc0fpcT&SlkliE>_BAOQN$=skQ!|~fH(PCrG0{O zz~()`Eo)D%7_GcSoo185vj9MOiFy(NCv9eV9hDv@hNa>}=Bed(_Z}@ z=Q&zdARVm`|Aj~<;I*@jlxN&dZc=eVf8f^VI*UY=&<)JCV5$J~8GA7~Z`Vpiyod0GJpt1TY~QI4nuP76qD#$qdm zGjz1@<>7U`+8E0|6S^5kC&|M70msPk6Q{bR@COK}>P*x|`@yg6wp#uDhj@I;v0@nmY0jWcetUam-}9*gmM;A}XZ^ zUPgHGjt2mnY*KDR`aGPkLi*6^k@oRY*hN{xG>A;)s0~YT=$d$W0X4h~9|G(Kvf&0a z=!9aVYNGk^dsIt#iM~5J#&Yluc^SaZm%`)`NC*E5yh<<67@37E4?Tf^z)N)_)eqd% z9rQz%$=Q5x8yxKVVQ-S^@C}<`GERjp;e}CRN5`+x3z#PI9Vl#r6rLR~%t!F`vL>Bh z){@N1Iz^3ni4r?HXOW}Au!a~E1}lqWcoV&)Zle~|s@q!W2QnyrQX@Fh9zT(Q-7^P8 zDI8LG6Xg|yRO5kKbOda`WYVAKfcSD0ru?h&f z@9mb>IO!g9oshP0*{x2mHlR2`uhvt+B@S2}arvY+?mB~BiMcMVTZ!IiMCTC&kd!+S ziir8lXS=oP9dqzepV;B$NY2zC{sIrhfPvTYcFSYEZ_8t%d`%Q>r^-Ygr;2n80RWTO zI}nKSHB_W~hNpXy(sf|hFK92=YraAh*w7L=p@wu${ z#$?|Kg8qG^`Q4~f3z@p;lvI=(T*~-r?LD^g22qE`NsLof?}59oG0N>*uiqA$^%C^= z06UgE<;HkQK5}Snl6L;5nM$u(ut+Y&OdVa zGwry-C#(H0&VhRpOZrm!l0>^QEpHmQ7HUr=$}7pjk*I+O@RE&o;T_w&fd_c;>(NS0 zyC!uLGcE56M*pFCcI7YGNn3b-nu4tROFFXHccVqNC=HhJlERyT(xLl2V4iwt%LXGJ zoGm7uA~DUR72wCwVEvmFfFPdi_~eyJQ?ElFP6CyNQJq(c$S+f55T|=de5emColoj% z$VX?DcF?Y^4JtB{IxHhLP=cv zUH&6IYg3L(`hKqpd^{ZSdweC>j|pXo{22_Fa&DB2TMo|QGs*M0@U19qY5M-QfcIw? zI);vD(hqH$`u67{u+OMgbsZl-7&fk>vp3|S_ak`dUDWkks!sE+Cy*KaEskHqev%(o zv7>!ncMWt59$eTH#3jY4i6RpXQs;hik^9%o_Va9d9?PJo_S!3%+qhDIve$S2iqi3 z=Ly=E^qdC~XN-iZY(-fee&T(ay7XARcc~M~ae)KD`<`dSW8!I}q0Ur$9&}m(2 z>N7o0^e#VOOr7!)<>qu^A{9U)H;Hp~khSTJ!7*$&D|PT=*yQQBaiHkCH9SKP>Bznw zXqbR6Jp;s-W%OlHuTF4rx(4lq>J{*a&>ED6Xsvd&4(#*DLW-+>q|&}oJElV-m#YS8 z<*2v=y_kSHJ$wv6TBom0K%L{5j-qkZcq42lA$OGydne+!FUAD=H+?yc{p)%v+FyyB zBeZ-yt~FK8Rh08Pda5s*IrFt+{YB5rO_5Ux>6EWV&rDiWQS2z~$9m==sWP|dnT`5s z2#d_4wLA38q*qVc+91{0sNeq)IkAH8)2H;;qoZ7Hz_1LUp({_7sb?9CXXE~=kb)E!dPw*tPvT*PQyZH^mX_MW&O0b(>q{v_& zQ+7DUCNu!Q$*V#9W-Tw9Tf7s)$tB7#BAku6SSR?tNl1~%W$MX{uH?VGKVh2c5#up@R0E?O7|cL_Vmh!pBaJ9tE0IWP|04YE@!Z9hgWE`5D&LaZypct#5shF`kjuM@P2Pf+V8iG76elvz%{4P_pbXMMFURTJW|VQM2aCe zg~Bdk2u^|Hzt9kzvJSzUqo^9`hTvC7als+T7@z5|Uah(u>J-|{oZ=gT?Cjm%-K&>o z)~(0%Zk58#)N{#DI)NC0+McA;kr| zSGOgctbfUO;J>qje>gIE2Rr}wJ9rqcO1cg{IU<7&7Whm4qc}MxB`&QUT$WOW z{SB5Nu|t)@BxEA5S-@f^c9Ge@V&!-)N8x&119<*6u8xGKS;E#5)2$BV(J3#Z)dYt6 zQQE|T9@CBxWf5hZib{hjPX_!lK&JuhzVF9K%qgRuXk_Y^;S7<5qFPTBiE{)O(cbTh zS%fB^szrNO+1VN8?^65w4)2-!Yg0Cu&gobhJeN1PUT^TO^BX*SIB)Rh%DiXpdy2QS z8htK0<8%0yVv1a-oyH>Z|Bv==jt}s{ywvTz1>Y{ey>wt33oaRAL9wd6H!KmTaknz{ z5&DM|sk1OJMuz8-WH7yOAw3Q!)si+0Cue;0=0;ZT@6L2_G??WS`rW)GoG&xIEAjGD z=huyj;hiyEeiR9RrJ%`d^m;XxVjE%c% z^zi{aI!^>k1ZUyF_V==I5^Xx20=}nLo%(%tBQ*I%(snew!nM@fE{}qrVDH$c=|ct^vFv&i~aOIG*=+^N@zH$?w~_K?j7B#}5K z!s?0&cS0e90T`{`+N-*n*Rvt0TfZrdlVD}p;hIwcdG5k_E`cfI z$h6zh3S(TuKcZXI&k1`qjrZ3-jB=T8lJIWKO7$1CnU{Z(=D(O8MNr9LxFj(DbSoxA zYZ}1^be4d8Zm*fzP=V_>>rBEb5KIbvAf=<_+h zu*6-fe$x%2&>s?A79!yyziE#=g7Nb~WzNDJ>@>W4?*9kN$rcWmX^2F5Y6&%Spx52l z&l_+y!eZ0tP~M*FS?w~+a0mP@4Q2yasY7+lRDD^hYYl5J-03a5Ys~3!C-nqbNB|My zj5U-9j_lykjycw3lLL9GwJ49=<0;RW%U`6gKN7g+-nt$|6_z+`J+sx{!V24+|TGp&I+ z)3o9|uloqCA^gsQK_d2>dbfsdN3F{Ct$fa8)X6JP5?%OY{~D#Rj!M6U6%!1P`DmdC4}=6!UYLoPeOQnLU=+#nEaqv>oYMSJSibe z77Nz&Qxn3zgz$`n@XUnpoP_X#gz%Dt@Er-^WeMTC62i+9!oh^_s)X?Bgm5S!+>#J( zO$a}j5T+9j*8bX%5Pn1t<8q%}>)Y*fY-2!ljOX_V{|V3E@to4X*|Xx`2h%&Ag?N_X zk@2j-^Dv%Gcz%xOSv949^RA z_TusOn`4`e=WBQvp2zS!jpqeCNAP@%r!WWU@GQjh81g)g=P|rLjpqeCd+{8>(~0L} zJOgu4cRY5a8;oZRJ$l>k#dn6M4RxDsi8sC%QeI0x(fgl}b|8M4<=a5O7=y=aiA&5! z;f1LGy?FNG>BKV|dA^3{Y2aqBh~F`IbaqwePo(W&ONP^${~gYj+>gK0Z15H>JxsGrYWWQQPP4lyf?QY&k(bhw zcmGV>)Tj*zPM}+ONAMN(v)~X6Mx_sLV&z(_2#PDKX^|!}Cq3AWb#NNl=G~V+%|&$y zA47}*k1v|Wa-BdYe4MGdE(?`ZdL(JxevmN3n{&W?V?fe>k(12sg|G)vX~KV6ugKpibD3mFUbb#^p?bAMH& z*Bc*pyUorFU1;@AT&*v(+9s^7KF-8WvxTS=f5>r>=-+i&z*ePaw6u=yy+D4_S;d_2U`2RKIGg&Xs zHE@n?6rOAF6yx#Xslam^p0DD05(LA>?>V$*WjmbxoH@?ipXu>i@%sv%LwHW$IfcjJ znq$kuGak_w&HmO z&mlY~@SMWqK>j>DgExb(H@>M_Q1_*buHfilyrS%0Y20R2+!`0r@lH z2fIcJ!H9r>e478Pzi9}@&+<^%`p`FP8spmn#M4uc zXQ}?sx3B9@5Wm*6QA<4K`vab%c#Qm%_B}lN@Z_PfC-M6?JTW|j5YEBVgLkTr%?_N; zcJ#}}znt7${LRgE;-Rqk*FV>pJ9KDnt}S~g{@LlzfPt=|L!E=@mHy@Oe}e|&H5-X? zk$kA+b`BoGBeJs%-blw6rK6mG7f!%5l34-%!pdZyzCfyp7aH`AlbIJc(wdDH@;H(#!z_nDFkFaQh6^*m;vnxs z)bS)X&Vzh@_gdOo*_DT=>wJ;5K7?TR)XWo6Uj`zBMGkwF_LUuUjVVsU$^GaKR=Q9? zeTeF#-AQ%P^VsNi+(nj41e4Uqovc3N*{z<7s?VF-Q`P5fAnj$>XA--0;ziYGddm9D zx+n+&lf>}(mxml~SSh%oYiVK=Q89CP$j}VF6rlN938h(nKOKA4cG&lfHAL5x$|{2W!VZ+&K@t`8mU zOJ5&4W7-d9735mMs9J5ZzKX5Hy^Ehg@pR$4Ko|7Io~_gubk3?}GrBfDGxuZVjF;T} z&?a=g%|~%vnDO|RFy)rAa_I5aehVL!hr03Cfy1PcwIMU?hB_s(w#5v4pxcS8Z8gI_ zR-PAG`yj&2Jbwsfu=4!KTJlW`BF!T~SU{u~?GkutVv2a-_;PXmF$!C-KK-%dH)em3 z_mFsh{1)50i|h|)-~N!cmk;REA&BVPBZwH>r%MolKI+>ih#Q(&r%-=X;JgUvd6KyU zWfD*a;7N+1w+wx*`aw)wXgbc|X;0zIU|+)R(kIFmK2CfohC=~CxGz*54Ndy;Zc166 zFGYFK@3NCvSo%kD;E{s#N}xL~t>nE==)zbtk|PM}2YoeMK^C_yjpS&*SV`Lddj>v7 zd@9_rEsYH3AWSEZNDqq%u+N;6jpEiM*vBo!5!QC05u@*21?(UW0TWp&ZsROZZ5Qpfk9%AssFwB7 z(h10Ji)J03jvFXNWD@l*mzP1qcaX>suWem4Yg1{7P5qWr&-Kwy39#RZPAH;IX!V-_ z^+GU&ee4@>7K6;vQF;kSN{j*z5jBF!Fbi76+U%V#7l9$d8NH=b8nb}z!G5gNnVl0U zak3m5uDHIjxhoIQ;{G|f4G|rU33ua$M&I2&9DD7-8!sb#N`Hg(@pA2xShe<4?Z-eX zMZFWGIXO1T1zXU6@Pbdvw-*f#n|_wCH5#4gTy?hXzj3)ZLpF3>WUZKG1+r6Qwy zeJ%Tf_SWehDgmxnPT~X}Iq9QY9=Dw8iS@-5!WoP&kiSmao}*}7CrwU1GzVNB%ymLZ z3_p8tr|Ik*1mkGTyqtjcG>V7Y3BI4g41n+OSE0yl>y%hY??DaoeSls+${-J$l53!T znUf5ekcA8w40SM-pV*%mdeZMp+jA4EG_P-!%JnMcqr_@np?GK1E{)_S8wRbgCT;h_ ztyl0G(f!r6+I`jW?%x$0Ox<7juIT=9r*gm3woo31Zr3Mwx!%HLBQrwR|I_$<;hzcP zLsz~H`6$`&=;M?5@VHPtZY^L8koK*2M1}cyge;(asRJ_t z6M?1yr&xTvNTU?Te;TjiHe#=qM#9HojDV5j0>!(pcn%cTh6@&*^@1>p1EJS^$eX&W zpDl!QsL?E?r$Aaq#{JlgcaNK6dm#5Y2$_*@u&NTg)-tDdYVx@lA&!7>;-r9plJp|< zq*Ru+r%&1)mb8!z$HDTnoBE`EP)`eAoBx-(w}FqUx)c6qCPNrtWCBKwN_ASJV!;*- zYk~NZ7n7j8O^9Sz6|lQJDRpf{m=Ua^36lty>!?p_UAt>r+qJEIdA4pXf>>(;d>Bwy zf%3Gtb!%+t^IRI*Vr3!J=se%wIp^NFlNV~Y`~Ux+KRTH^_q?C;JHPWgzgNL_UJs)Eco<~L!y^L?LhiETL_ zY{NUY34fnnt1uN$Gz88%W}dS3!Gv?*fp_txA+53PuWrEwV5p_p`AS0e176Nk)%nem zn9a)HgtHk}HwiPGZ-bR|s&ntJ-pluutvLE72wabKDzO-|3QDA-|4cF6C8y*^@A4?i z?L=@jh;gvH*e8Ck7aM=4x?mH?^AH(@IP7xN171On@KC7v25LV1xc3Swbw8%~9Oqn| zU$5$ZQO;{YUj*=#HruQhn`Tj@W=ey>;q>c3XJJO`SukkJIxM#b;*TPTe53l|NbXmvA zV~k_X)Y!Au?n+^1Ww-LxW``R(IWw2+kf#T{r$^M2@ZIeEBjo!EpQrfzfRFpnJ*TE6v+h_R^+|h4Z}pNRtN)q< zViEK~i_-&f&oR3xGHZPLoX$O|iJN8zXUz|$$3stKc7;0kq!0Og$*1EeyHk@Gg_BAr=~i0&wtPf=R@CeVW(L4hP3=6M~1w()6fpLIPnj zQSyh9-EFwAB6#BE=nd+IZc^%Ch1;{%uWE=wB0MMLQQOSfq4e0;ma@$DP|4oDQ8?cy zIWx8eJFZa4ZVNy41jd~oMk&)%Nu{JcKQ20C-L$K8$e%^r?{miQRK#%HIBEMN0$#zMj31{UK0wCpJobcs8?~B{xAgIP?n}eHzwY)ny3U!ChO#|zlJflWI!*>>_bnl3N_Em{A}k!b<~!ZL+OHrH^?(u*@Nk1ZD` zWU}bL!?IM@Q$_poIFNv_Jn&VwZxI*NL<3fF_?)wdGvrkhvgcR&*Dv*nT^Yp)dODa< zOwXEJrbdy{g|>qxicLl_S|zv(!0Ti0o|Vk{`MZ1H`356drg^-3t%d_u!$EPc)zGV1 zzVtxbM~TZ_yIqSsJ7G7}iYE*S!F(*?{Na!95#=}5d8xdkfDS;A=@C2bV@~CJ(1_Y^ zmNOYH1w^$9I^*XR8T=~rjQy%zS^(KpxsX(4Oi-)yU53gLxRf2k>0!4A_$^?an&{@3 z$s$m_Ej zQ>KbY28!1vfYIU%eBIpEQ~w~j>31S7&c#!;gU*$6&op(a9%qp zq-Gf421k^F151wfeNy1B)p^pZ7tagmHoN+;nTB+tejHJ1wkf))Y}N!b=tOW8+vNA47jQf zNYXPPJz9SkLtpClliSEU8Y)IH$x0_42;sS(XM%$b<8PC@R_2;OdZHlj(JYSD6ox4) z7~F0GNuzMPO%9tAzif#;+;igfal4zHyBv_xLAhhf6cHN6azHpMD$Pk8kptD8gn3*w+;! zx;yX#^Qs>YxuU0o*@lA&r>9Sj}tK9iG>joy8ax`;aG?2Quv9I#Eh|U-5 zI>a22cPx2vBUzqwLT+Xm!!A-^9LLdz>C^$7NOO0!*-kvILt0s8E|CGeVCNV)`dK`tbbE4=o^_@vRej&q|GnQLE-t*>+ z&p0ZO0xX0zh+644NOkN9vEyRdgN@rtX(jVJoHVT!48N|tdP#H@fq}}BiCnt}5*rOW zG3ZRhz6*L^8}fQ2ji#SsTWZGEC?15mL7^`15*egRAgD-o{+XQAcHW%Tu`TCKc`4g^ zR>?0)_WhVS56lRqYLnOoSN~-7H2bCOT|t8p+_U|)l6~3hgS_`%2+6dsaYiWpib7A) zx@<^~6QXgS-6wL&@Bgv!}XbgBXoP_>7pspR@41l$=yz?FFf9GHK>#J(_pF~-@$Q77Tn zo9&SO633@4N@UA8A0lF`BAXTqG4NAa^~!L1+{~Mw4yQ*cKbS5i*ZdFR2i=9iML3z; zAOai!p&&tu=kE+PJC8h}KqlK*npIM!gtPDnL`<=miE%Ri{2fvi=*W2pI2$_uvi#Cs zbF$T0@)jJ5Z#_nv?`0b!9S?~pG|)~{>fO8M1vEgy*^hG(2m@=wY;wB|hmksHqYeXL zwC~n08!30LHpQ2`w}E5Z%)v5ARTlJI~;k+xw}6A8H*b@9WRfPY=@{ zwSG{fg57*Q_2UoSJ|0B0guH3^wxoo+9)~_NVtuN;op+o%{mE6QPCxbwHqr?FZJsJi z+T4mx1qv1GMWLc&Q?Kkao}6vEq=9p{zfaCTb$d@HPMuzP=c&_o-t{NaKRIH0=Ezig zpAq9^*S%raRc2R3@~fsIxWHH2yo108uwiJ91feOENTlK5ROBSi)b+Bb!Hi~CyWCl~&E!bXOC zHY@3YdK^8IX6M)cpbF;h7i1~_+;l;hev~HtyKX8~<~juPgVO>XmO10&9OEIYV=?bR ziRNuhF-FhTPOkjOeA08Hrt&TSitr`r@wiT(%=d8VH6PaLv-ut_z59HfzMJpi(vO(> zkBw0O!>0UW!I=E%`7Z~BM;@=toJ_sFE{m18lnCQGyeDp<3D85kBpFh z(4_Z{kiON-PxlD(^SBw`lcyRVat0Y+nZ1ya7LV_ksefRE`U9qakrDbg$&{}gq5MJ9 zzuw{c$NWZ3{pBOn@0j|Jj!^$blm74s=_}0otsG(f9y94rjFA4cN#8m`db>&AI70ev zlfHL^^vBKkpB!QQvrT$pg!CIs`pqMxuQloI!==0M57Y~MRN4#UgW;polz(8j@~q!e zCjIFV(tl{ue>6gRnOVPz5!P>~Nq=R8^fyfUp%K#en)HJsq(5cg^XcK>Q|1TcSZla2 zxGJw4WyybbH~n!TT$0#upu7e1{Bt9vKckfxoF{eWs7F zK66d|H;hn!#FQ@^q5LbR{R1Pk-*3tXMyNkw(ie|V|8D@Q0lVA>ClP=2y0KW&8a z%T4-iBcxwz`Zsrk`VW}&H%3VRq3Pd`Mwp*oQ{EY&{7TcmwZrw#g&#woOtKf24~Cz$ zrv3Ke+Sld5>}L*7-~d0Jru+k^ERUv+As|pzC=d{oKWfVN4_BV_#b$iBj5NLm_^pUq z<=($Kj2gs_jvl4CaB}RL^ANdK)?to;ljJ2kVlS${P^B<7vWwY(BO=<)i} zc8MBWwoJ(mmuxSSP$^M_2jg0t$0`SeO>Ywndrs+AVWqZRfGlt~0ZLx=i>De1Be5Xv z>Twr~@b>pzq`1Q)aDc`u4iJu6_ECelJrjq0K|IgLm8_&$>BP;k36T7n;hx*moV~w- zueSiIo`{184Y+gLjf&+dfl{Jy=Fee3u(9Wr^E`@U&k8PGhGbMmw-jwo_2A8neqcVe zeS!FJS%;q)BEEDH2&2XM`~?GqO;x<$C~s7BZhXy@Aq4prssLJKLd{BinNO^+j~bs+ z@WqykWJg%K3yB16EjflvxLNZ@w?OgNuxh z9>MFiUqg5mamLdzSZ@T_*Iua4FKA%rBf)-84CN|5xRW zE7B2NUAbr5YbKXWi*-tz4$6y^s?xcOO1P;?mcQdY4B|?{cfA9{NCZK#&aZLF=^JhM zo$&eKzWww~Bl3tT|MxJf3EPu&?mH+Pa))T~)w@G?s7e0g?u#Qw>qb7q~5 zDCFnJe{KxU`fCw|Y!4v<>ijwKpFKok-;>!B?AjCSe4bXdq?r+y^i=O!^+R}v_U>eU zWu?<EObf26WoJlf6u? z)SqQ_!C2wPa>bGce#@*+h~zLQyb)%jG4y;GEg^*esmq=pWu7j6ezbY|(DS9{>GbE% zHc!Y7&5praq6#6!0`H{Q}*BBKGUfv3=fZ}=PN`#A4CnSK9YU@X{uGq!?Gr>+At6ZBxT3rcn+oM#U(@7f4UX@2Xm%d#@x z9Y+R$?}C1ZntTo~&bTC+3%>yeQW-*o)1{aSF>zpzR+5OIW+u89*e4NRG@unR?AH?c z)gkBew~N(ODtWx2H>iYnOF0sXc1b8yIZY`sT+1?EYbkSWNrzE19M^Ld)j z7Ct}bqu_s%7Kt@ZOgP_r5Exq$ZIM-Oe7~^B31>aVo_bwMwZ2C(+ZfisDt46Ka>rW| zPMhAzK8=uyB83oa^z3;@n54e)Ds18oS@ST6GuChxE8g967&Y@F+2LKHc>Zxcw4b>2WnPc-xf z_##G@(r?Ocz6B^&`!l=tW=5>hDmm;fNs(B&B5+l{B+_H;7jEMv)KBc0;Nj7d>xH$v z==-f*A16woQfiU`L!4C+dDEVwi8HP21aX$s0_m5TIy)=sS8`HIn4Z{{+R!$AHf>LR zWSgGD?Wu}w`b65E8oy1SNZVswBGPJhO3pDvX*Lnu6sbXb?xg*KC~HmGo&bS&Uj0Ye z_2|Y;$j%RLDs5!{pPceG+QTL96LV2DPJ|&Sn9WKJECA+L!t#$x-()n5;r7>uj6n?r z8N8u1W1XTLrd7R!0D7BWw}!G=>4?@Hi=8pyjOJ`s^vmGlHzyN6jsZ%}4}T_D30*J7 zFEzX%8BkAdtKOBqZRl+NS}3EU*~GNUrFQRg+fStn4YBYE=Y7?R2*z*H>um!Oo24nI zz8Ry`gMAIpO;9I&PkJU>U}jS|)`k21e6}7L*XpCF*dc ziUKNoaa<89`|M7QW&H=F4?ozi8W!-4P)YL~b$rcH_l!C2J%d|@zBNbyMo#H-6V5l! zg4Umh+6kxjQY(n1ukt+|2^ifsqYP&3X~n2T)_hl61k#9 zcCFVIkxE!qW38_tBN)VF%IK|_zEtvlR|h6JNZXGk$g>2E5v{E`bP47wVgG!D{U`0EXx)`36HFT0?etuO zXuPA~f&sw{y%|M$3fwUC){<(jt>@*1LxiSh;>V#@X>+N=rA*Z)-w{<|G0v8X8orOWELQxrD@ z7jxo50Ti&n^E!NMb}a{r^)bD!OiP&syJsI-!5VvFYQX_NUq+9mmxeT18^_ZjFW0k_i{xB<%;WSMtd2` zOonXZIc`%mXj$At1aS9vAgF4lX)!F#^p;(w9?VoQ65W3{IbM{^N)#v86eY9Y{mB>V z#g%qU^^m+|DCyRTdO!gl=TDae zs^Hr9e;oi;b!#vU12aRwPhheb`~)D2!A}5Ez|XBH&hP&lf$vNg*aZ0Ux&N<$5B#M! zI^d@fI=Zz_-5|SuJojEyXLm+QUada4x~=^hv0320Xs){T(svj4h3p(;mc&Caq}G(} z>a?jT$r^a*K6UwXhNKslKWFl(%l~n3`HmxD5RdQvg?+p5)(S|raK3kZOIGwgxM03By>`@) zGyPfYhV_}AtsUbPZ;w5DN2E28?HYgtPdL5TiXM1$SLa{JZ@3fkr74Pp^G`ecxaH{} zj16UYc5e18&x(CLbw;m}3Bi;i9dYSn;8!aSI%A1G>sDplmG};9`iFBL zp?DXS!>EF?ssWm`h0G}QzKn@Xc3rQPVfi`lTt-MJ04GCTk8+t?Na6nilO*`gH!|yb zOW>T_*H?;Tq6-@O!Sug)N!uu-$N6YhQPIs!0bt58>=C8XX6I3+JiA~lXdzo0%)AOa z-!<59)raRn6^@3L>%c22U3G5zJu}Bug2z%bqt-Jw(-pUu?XuaRu@OzIj5te)&CPEt zqbt#-M2p`ih|nOS*0&tYEl~QOySi{?bDfb0>o3^~mo?!$lVZ{8QE9}k$GH>mmcik| zVE*KUbMY0*XftZOFidN+=1;~8*-`C0C_dPXd|p2s_=07-h&sfwecw~><$Yk$;vBtQ z?UQ9U0T^R&Vk264Wz2``=;i2({!PYC(HXqGV&GRM5R_U5YR4jreTYxJ?Z%u-?+09` zctcjFr$9SutO@6Z)dH&J8uF1W`K}%k6<%GioY|_M5;4>VzU2md=SU~r?PAnk4K6YL z6Zl;u_GGM?T*S&X^p<$mT>`gPqzf&8z|6XEGWOMOKsvK40<>!uRJcK) z+EVcCLR7%OcDjzZTnxM#ReoeN341}M^L}nP_(m47Yf3P?Kq6kj?QeE2-l~?rua%~C2)4+50lie2Ks{A#p>sbgiz+iN5&d2Tnnn@sO}neI_~^{`BFO9X-h%n|%_s3hG)WGzH3 zH4*@Ec4gAJYS+jMCps({eHV_kn{a$dR}7;@mSzRh+}!hZt2Mu!;Of{mc29P@jNA%grJ zN8$jHkKSphki*JFG}@@%`l49WYdj;i@gB;E;|PR9Hu?ci*!-%>)}(X%GYnXn=I7L3 zDh#mqzIv-W>@)QFrGz(UJ*_F6a(K65&2JFb=ePM0S7z7vTf-}EyPgokySjc)uApHe3Wd#Bs2Or$U>|TuY-jiwKh1UWfZF=!uGT_ z^zz$QE(`QqWjCz4vHf%JB5oE#aW$(w_*M{5C`TlSSzA7_93!5rbVGRb9V`eM8F)=Z z;Xqu@tTys|`{iuo_z$YIaE7faWVqC?>Pf%YhfKV2P{#>duDWbJB;9vAKF!SE7&=a$ zH>qW<`d4s*6ZSf<@R`t82A>JvHR?N~cDWRmCa+u^#S!%dIilR(;Xsn3iF2uda22X^ z(@%9MeY$64oaQ@}KL0QJP)dsId|mknxJ;i)|LgArA^1+Eu1~q>%y%k1yv2{svh&9m zol08YWXRcsZwP%h#q`-!cFMCU%jNsO^lW0;W2SmX)1aEPau!IIP!w}52?h{Lk_8I-6;+!uJwL2-|Bq-zqzaGJEXR4 z_OI&TLkf5w_IwHzdC7E-hySAUDf#K5j)T9KyNKFHQM%{T$seBLe7d~bcR6Cg)&77l2C(j??|KlcceoaRtt1xd!Vpii?`|_?nXzwyAdu8ob4|Rx2lUG_IBUhXkoMS zoBvU~ssfdTf4=!gzfIEyqrJITRGvBe+l4mJB!ME({tS`;N#3DP4Vv=I-=1R1?|){b zDfjhPyahnfB>x0OW1VSys&bx)Uok`FDXVH1t^z@)L;*h=*<*F7NuoXO|3W(~Y;`Gv zVWeO#N5Cfo%dNi!gsiA1SB@5RzWjYzj7Xu8qVaeuP~u6tyt{~*ZV`%c_kR3;ZcgYS+Oj_V~i&Q9L4df55V7D*X~Z zc&*lQ;|~}rys#9-{(#+903_EJFj;Y4sR*M7MFxd|GA=L`Wubl(B3Rk+2WVN*S=Xr- z9-TEyx#Cz*)(pAz+lPc|OI>Wwo*vtBUDSHeUv15F$m*h++cNisgKN&))D#Yn+IYY4 zxkR9-_`Gnspj>2{6lv@38s-~j2vZ_HG+|-=r-Zpkz_p7_7$9as+J*iUR>6|3i0{FQHM}>QE_*8VwE38$cs z3rA}Rir5y+;hXHRcDO!Lmv4FY1I@4XO*Oye(&hJ74DE7Zay7n#IEZbTJzjXwZv{(4 z-`CnGM@2y;)F&e~<2C%MB%RlUwmMf_21;D)CF{#_^@=}c)DVdlilV`!;dmiF<_36X zoFY{WPeidgASLn1u`ucU?h>v|a$Q=2I)tJrd#<}c+#Ad*PvSkqxq9<^ppzo*?38I$ z`>l0HRh?G)SoZE3QBYfS#9GvkUYbx2)*{DRG~j8cF>)XE%y`|4dKUdVb2q;8yKFa) zsi$x4bj^QjZw%wZJJ+OVKxIY8i3{W_GPBx`0ir4P0lK-vUhYNIs2NhsiOWDAOb#gi zC4O|2040mC!-DIp*z`zUeBI$PTiVkb)|wJZQZI59SEdq1d@1QAC-!RjzseyB2X0T@ z9OruC_J9%RYhgNkcd6j)Lb6c?(8&OpB%f7Cj%Z=LPUe)Af(ogX!Bg?t{>=XBMoA$kgE6BEvcm0KgW(CnS z$9>eMy5OwZg8qAVvHzoUq!u)o%iN3ha|%f0m~qLlVcfI3-6~o^qyMe9q1jLKl<-19 zn%+<6%kp{q2`~Y*)yUAzJ8m987(8MDks!Qkz+ZBSzb)reKfr>ZKCBZ%c5BooO6&R7 zqOzxgsTn?{&(AP(L-ampS7y^?t+2O_3cHl>QB2OY(40kT$#<`HJrH|7jq%~sW;Of{ zjrv6e#bmTRJRYM@WKuvudi=r+D^IeoN1?MSUeIBN!y#-L?h>y!dKca-B~t5UiUoo@fP#R5bR+K*ex>r$QzY^WI-9<(sy2lr z|8?R;`o!y;>5+5yP%QJ-dzqe5gAWC#xu~F7QnjA(KYKkF;m)LJJ&!FKWI zSSnWg$2JHEqmChJb3n3FVxs zGJIgd79>!NOhR<)O8+0PAY;0 z@(M^Df|2pylsZq~w4uBO;Ro<}Mp8|$ajD1veJYg&WUJ@vPvC=Fzx)a~k7F6O-loujs*?nu!COFq5@u7&=EY|rbIiS}= z+k&EFjyJ-w+d}#&eJ_*+N&zj+35gQ+Hw)EN_g#zGMfUEs*clOKW1bF_5hd7|m>fy; zEl*2FTM-G3>D|>JFSWGC;80G9^faHOx7GRHJlSHxMZ@wE6J@rQ3SG4zj6rYI`R&X3 zJlZs^Uv#11T$Bc!zem$ULqT-eQUwL7oagq{hf($ULwKg*iPSN&1P3Y2so1misLAY| z>j#s&1VV@_8%&K}h6_*G6zbxppu~rx;w5tgN>rMHlHxR=q`q=E;qdVH$D6!%1V}iw z3+OPJUp=YSc^UM=*t7MQU|A`zoIR*~wEQ_ZU2GAEF_S7zd3{-po6I@yffhnfwSUmdq+Pb-;Sfh%V@`%Dfs zC&f9KlbY!t*f>P>LWl^AbVM(~c+DzCPWd%c6VCS+D1~V-Hb&KWCMEjHQO`CLSIOCi zLkZ{Ko_Ze}aREb5zL<0_oHHC4mS^XL(NLJ`wCy3<^xqbPx4 z$Hyd@ENnng^HH48Ppb1jBAn1UK>I}OFbU0Ll)~y!3Y#-oDTOJ-^g)%vezaaVp?J_1 zWuk}vr`V{uaqx2Cl3c>+1A%+}Rr*zGJzW4)^D~|KG4#ONsn(JKYaJ$@YZ>e$8LV$V zO~fcDw!WSe8(MyG*m|g+=WL_VLT@K~GCvJ-;uhzhpg!z7C*nYS*EXr<#4kPXygz@K z(|#}dM%JQZUHfC5Vx(lh1SRlcJ5Mmg>n2&Xj#Ycasy%Ae9aSf7{ceLwK%`L zltvr+wefVDmHsI+jUVuA`V~4Q_obuux+9I5+$1Y~)LM6>dga8}`p+VqvDZ2FqGL9* z`u79WZuIqK$atuoQ);)2wO5b-0OVEu#MqWO@AveErtHqv|7Oa|B|X-LVp-_ap zAlq7URBsmr9NsAkX%ezB#~4>eS*X_VB5Y-jdN1O3Q)#B(fRDu!fKwaR=B({>4L(3i z{xZg(PQT@In4mSK!-3D^4@!6%v9FaAcbUxOZU$PZ{5MqX7x-y*tmY$D^HHn$nAO~G zH4j+L8h$eOm15UEKyv`kclc{Bkqun%7ycK*kIX3WqaDQe8t?E8QGuVYPZ9WuYWTrx zGvEVc+5Ldhzh$~7Wzzs%zrfJ|liY|QfAyNu*!tT9f|eXb717El@X_YKGU%q#>>6C~ zF3>PB<+YNxt!ETKsDPOCLx}5Htke3^brm! zE2H4SE$xxnL*Zd6R~Df!TZc0d=-8<4vw=_`vr#UU_>xXnw7@J;h68Wlx*w6^#)h-9 zt6fs+z&qa%cJ%>NAcS2l4q$sZ4V{O-QXs0bi;h<9sot9k*=RCHjK}dhd=J%nV z-MSjr{3;_b9==CYzP6CwOW7}sCpgCdqmFIK*7tS*G8d!i&d<4|fVflQ@e3);0QB?V- zxUo3C?NE#UGz-dps5)-pGJThoJ|dVreauStvm4cAasg8S2^Q;on#q!fuIaK9*F{Fq zyZO@uL`!}RfeG$xq?RU$*lX{8ks1S;w_-o}-&d)-NM@h>&PQS!cJqK`Lsj>-$V36^ z39(1I5#HJdU}|T>D`Vf!B};k|3!TVx3Q*O{&ip31S{g|I%e(nngX-os=^@V5iM>lV zf2q2;`eT_tM%G*s`~DxYxZM`Z;DvMvU+H&Oxt-}@kX~o-$**r@+)wmzavqg>iyJ2x zRAZ@zIp($icDSHUI8F3ptIPpiXq#D@{&4pBFnz*@j`U1}lm@0lY)1aoWS@`g4Dx%J z4DDXWT*AnFj|@L&6md+250yTKI|uZ|q`?-A-gNK9sPC1f`?9Cglv_|tPE z^yx6;t`VP8)VLBNhLr$ zCW4QC1c^Rx7iM+Z4JgQzEBvVAZ37uC`0&6U<~mtvco1pVa|i14rB0B!^jvs|e@P$o zV6SwI6e{yE4~K5}58}c@Npd_g-^PD?`jF?jgE_`??;!UboF9b&sqsvc5Qg@>@yvZI z0`Or++ppyxE@P79cdYX?U^3gZQivIeabVwDhCH?frx(lZJL5C&U6DRr$3>A6@-tj@ zyssp)Yo&d)om|niU;Q3$kHt138=jr531z3R#~xvOb<=IE?74d`cohT>UceH?`9&7g zK7VQ%{4?#u8SCiz@gzYMn7)AX`$u6~5Df{JVMpu<_U8k%nBNcY=dVP%XSY9Mz#?^F z7Ru%2gk2)mA}U}Dx+<5g6z5;D&dVtUWz)BEgb^#CDq+NSz)t7^boYhuz`yQjNshfz zJ$HRLmN`OOj6ZWPQ+8Hi0^~P&yh&(IVs6<)%MefaeMxY&a{3=&lyjz*K~izl)eP-E95vh$8LFVrVyYO&3Y zuYM8*LYmWgWx^TP3At^YI^icxN{Xms-Z9GJD*!H#I&D*^nG9Im_A{~~LvqVssD*GLC-ETJdV+Hyv)%`Vi--K}1+{Ab9Z%4DkT_D=WZ zR-H+~h{!-I^&$xe4D58K{7QPT(Zx*&9usk_%W#^2ld2y+qG`L^p>MN`j<~d)A?%tI zVK-U`yBvgFlOpV5*)@i+t7MCTxVBA%On{od84}OE{}Gid)JAy7m2K7Y2GWb{`P@;T z03bUaG6D{)@gmkkPYI09k6I6X&z}~@xsvtJ)BaaA_WW||p&$BRwfhLkhrM${#LXLa zvwuxX?TVVJK%t@Vj=8cM%dHK2eXl~iI;W@iOwX}E4YK{mRD0TiK_E0JL;K(iIA$rT zArKr?1DX}Z8A5|Hlnu@h9+V-jGMwRcGJt+UQ73CuhJycu0QwC@8QKRofqsN!$S8Yp zJSCh%L^!Sgkm)tr589TTnN)M+c#ah4o!l{WQQdOX>zeDBp zKHm?48h_V_FLsU|T+dslS3RUk5_KbgU)63){nFi#MHt4Lg7KxGDi~Ez?_h;w1RhlC zHTGp-g^DuhHTGrj=HM8>6gts}=q4OUwVl}D!g>0}+y;Ss`RBD0$!!qOmw&kp0{imM zOO59?2=EuZtI2H;=r4NLuH2wB%aQOT3HmDW5KkbutLBnBJ^FcJru9v}YB{oHe(jZC z=Ula%D>uK6%dhBFB0oys^!zb?LG4Y-^p@b;@_CLZt`(g3ZJ?0}SS^dE6XR7tdGi2J z#_PNf4awW)%PX3WT2NGAw+em1@xkR4A3FBkQ?skxm@R{1bleecb$VyXh~#SAu{JEU z`0CM$HG=b04#}H*9Bp$E`ygKIO4KckK8P2fJHp0=%(ukVq4Q>q&@5nJ6bB(81glGb zjlT`!k4BF8g&9;XjRSozMx7G6cpZbdSwr zc3!`}pqe8Bdvv7C_Ff!H-mbEx<}yhfg}H_|L@f<%6J#HUvUi7Zy_QYCfo#N@*9!rx zY0d^m97?_OjqJPw&V~$3l-JX=z^UMs0Uc0_DdpC}9?q3TW%Kb=*)zPe}k7Rmd+Et%hvWEGq zk31Di-39ZbH#V5<@a)}&YlAq|Cz}ys;OEC{BC$I^ZXe~on{@t&5)bA{R`^Te)-dU8 zdT}6M(qAu&BR%MiRUcgSI=vU-)tVhJ+yr-wH+5KFm|CpcqAt;WebA;%E&=LHGp8=v#BvD#HT z*U*mKYUlMUN(~AHm{3iK4~ioiFD(=f8nNjcr&3+qx_261H7;f-inU?xAI%-O|76!d zw67k6v__L+vgM0!M&kO*jS@PH-zmj>5zm$TD2j{W0bC3VEohv7eUmj~RbpF$)w}Nf zl9mX{tsaTsq=fUuFAMyHp~Ym~N(eQqC_~C*YeVLTx}mD|ff@HYD}oOlxcy>pSR ziM>>fA?^J%9+gfnVsnBFS&s{Z$m<8#eMDY*JmCfPuHdGCCtvX&+m9+~+<9k{G-0Jh zyX)U1+8XghH@blZQ*_#%T|8l>nY%fl#-LG9Qd+$u{nXaW6=x1l#Q#X~^SDac^%YRy z6irgr`5PJ#-0(Tp4_BE0kFc-U#xpattnfzHEuFQpA5u^*gc7 zZv*SGElWc!&Z`^T9)6tt5z;YZ@vx}EK|*Zq>XWF8=%JPb87&(JC)9oO?f3hx&%9fj zigdgyk>t{|#LMunuvC;$zBzcDW6{CK6E>lBRb5SC>gu2J?uj?g&0io_6p4*UQ?PU+ z($n=fsxjzrV-nLa=MBifBaA|kl17bxi3=D_5#|@{^H;EZxSLuVZu1?0?YtUmZCL4h z6$pavC-(G?b4ig%0BT568U`ysiohp5-BJ6&h)a{=xwaysE=jjp^>GsHC^*15M}!uTaIoG1#u!(4f*9Z>!6PGi4 zs`#c_3GuW+Tu+-5Ql9Qor~j%u1P9#xpF8$PYv}ck{nr$GWfW^IG3KJrjS?UA#5*f=jCPUvExC_orz09!bJ7-o>6tboc|Y+rRFmAX!3w7Wp3*^Z3PDrg_g@W zAt=#AHPNGpB6U!^6jq`a=l;v&upEsb!0nQX13ghfK&PU)`xCSy|N6#A40ZL>JvPfc z9-?xJ2s|M)jlc{W729wv#b8=L@O9#v12x*)5qCw;e^Jo9lO18)AGPx&!-Ad(9G<}+ zDfxuF$-fKqxK5J(RLS?LVWg6}w)YCP6}7q3lpLtI`1@s$VO6w#8a^ zOf!iU+3U$1m55~4#}%pNWAvSy^#^Z0D4f|tcEdq?-LbyY#kr>iv6$}ln6$!9X~5V) zfhKC={$pPB+4^C$rbofY?Zb9Cm>vzh{SuCfh>H&j;J6W3@$xGQ5A-*`vNY-Z0CA4! zJluUV$3!-L5RT|C)n@aA96%v^oGr7dY5c~FBH5Lpj$->i+Z3zH2p9^7bPl^y$OSBA=zDKX$@S+v4L3UHyH^cTP%l;)eO!tnD!ZCBvE~rd>{g- zhv?AxHDkRA13hTbx|uO&!+1Sa&m%OHUBqmunUX0}IE864evc(X)0t?#$~Ci~=!K_L zO|pUyI*v>wm*1a+d*3^W6PLI%29*iL3G+L7xcsy5@Dz=u0gW2))qPYptp{%SVBoh% z8bp?sJ;sk_yXIQM-J6670xbHxKb+ISXAL3mzf?)npYv>LI^>jRb$U~XV>6Cb9DBF z0}M(7rCOc~fwq8#Fj?XukfVuWH(D87IEHysXLC2kaD8%;%)AfD@s=X zVf_FAC9hjtEU%kbw5yS~5RTpRz0K9H;C>t0BD*$>^9cCtcZQsq9Iep2+}#z3AUi;? zx|3tf-_7(PE=%6dq>s=8%a&@po3OhP%Zj&?YxEOx(<8;{AvToQ?UcCb@xhY?+ZUiK zP)F{4|G#$p(5#HVpx>uwU^~~?VP=5ID=btSG-aEWd4iSgP&(!cH6fXUHxui;k43K9 zV}fsc+CA^dvKnsq16AEsd)lfSOIM$hZH)*$-e!lg3qx&IctI@`cxmiQ^-&dym%lD1hD*ok_JqRx{3 z0#^;MRBRgY%|ck^c@(9*IQHZb2^=rzj zneAtl?91eXcYbUEp|0=H{z-$i?5&eiUM1Xh9ge5mm7TIn;%V>A{63f_-1T;kCuZu0 zNX~2@#npLAa!Ax{s_{A8*43c<_A`GqUazUoV^7)lPBnMLQ7ou?X~OAY{VqFu%x^NdTobtk5pgtrw0mTW_Hv#pC9M)I@u#M4*MH%tyB*PFxsbP2` ze}j+6uZNE)Kixi;5uiSFv5-f`t})?Ua0f?m(XGVN5?uXMlY94 z(evDIq_Z7w<@>o&V%ItkMIsZV1hS)8;jbXz3bn+Z z?YLGAqfv(8`8g2A(vHl@iD10Q25D+tiU5eq@VzefVa$ zDrz30t3R@-2ncj-saW#M)~LDzQf6ja&oc-+C|f#0-hd0CSl~QbpuJ~`j4>k z^CkSctp915-fL20j3qg`OWm2b&Tl^%MKdTH?gC%|)s}Lg6&|yqV_|NU_Bf?3MKXk< zDNY_j&=e;ddd7u$m{&!W*A$aO;&8ka5m`pqO&|vZb?VWa?SZ(YSN2{Rk3G`U^VVrq zw(O~nw|F18Og&faaa+QthRWKmvX1w%)(n#s*{0N5qq4@ltnI^Ojg$4l-asI5*H0jPdBLEkp zStRH<*U&qTmYD#jE+x86-=o9c6fhlvtQ9#~BeEVN{zFc3+7IRiF5q(opC&&3-$VAJ zx-S}rK*zg6^R6Ck?@*+=X0xw}YleC^eaY|rGt@9e2NQP;qJY_=#S>3c1vjC>}=QpdA02b>Olzb9| zKoo!3Q6;h&t%Nb@kd4Zvxwt@o4E5ir=FiHC%R%kE5sA_1qEoIs|K*mt_r7HIi$}1VF%n0fLCgtULsnqB33XP@%Z z>>VW~f5^O#J4Ci`pw+nZ+f*g)5LFZ0Vg47DC2>Ra;)hS>ZPoCKY3IQ0PCAF*g^J+& zExv6vmdwsdBp+hnyd24ga+xU0_D?czD&As#VMK=@e3)0-9zh8MR<++Z{+jH9@##;m z5MWxd_ty=970pfq>P1M#oQ7AK5Ud|7uzqZ^)s*1o@Ja4xoZrD&A>)6cHaM%U5b00+ zFB~WS;PK3>!4~J&A3q73AuI~tw)W+y)Ncs4EFlrQ?&OS<0AR`y*r=wZ8C|ZI(XF6{ zgtoLQi%_t(q87sROFNDjN)Fk?hOP5hzo=(8&PtC1L7(Az`=TnI9Mbl z=$@^FAl(0#18)+fHM{5l5=SKetjMhhXz?m5qT~iqMN_iXu=@R1ax|{imKMrVQ?sJd zhq7CRF~u37K`LHQNT%1W*-Oy?RR0&-`&11|a+O3M88ucg07qP1JiG2`qs4ADypmmo z#N#Q6p_pBFFxT)sk$Jf6F!T*&CRIh&k^}HKy^96?XmQrFJK!C&i?u@a>4<^Od&h`@ z1lyvtfDs-(VoS1Us$U-;Vh$ioE@G_`ld1|tjln`dRD>%;rgA!*YmBn{L+Od+z-VNA zpM+)Qp{%b&J(xha(PAm}I%X2_`<<=GUUQ|=e-KuJaI0Z-EbS}6H`j2yzw9z}HL0S_ z{thAmN;p?;c|VUvbP=PeXyDm~rxG-R>GL%D{hbv(--YT?sC8Gyt%UGj#&iLk`f!~*u{YZ|BE?s^%RQ51zjKyg{6 zH%5Wk8=h87i0=7n^LUjA*sK0sDS#r*Yk}~21I|`BprY_1mLUa0+}31jMRxVgx|ww} zV>k3-QovFX{%#CG$5LYmFpCVipA|w=c@aW{onrS3?|e7pAK<283CTuXB{pkz-Q--u zPO(p9_#SN0Cgp+Gj11!2D2WA9t3@Inr;+CcD_5reHoJQ52knQ~gY-@Tcu|km%=%Mx zf=122IsQ_g&OY-r9r#bSsBA?(NTW1m8m-ZdI)6ce8?np+a6k&%X(;s5MN zrR<+*)NRUZ6gn{bO#ClsRLXv^M%!Hi8;q$f28&RqOAjcLIom{Fi>B5+xc8$ zzU5gyH}LUyo&FBeclih{d5k~df{4CL0}O2Lq?ujlw=8BZ+zdh?eY=8r9IB_X>ajt3 zD*NCOx#f%>`yGn^+YmX?uINahDm@{iq}jiB<>TRin;7yEPq>L8FEQdJzUd}Lh-54E zBU8Ympa>PhO22UE{iz%lv>YK;mvYPAP+?_-GPl&#z_@b9d7I!Qv7hdhwICX*drfLh z4tr68VSOF<3B#}Eq9pPdb06fgbXQ5qA2a#>HLH{6p76#yg!HD4wx7wfDfffM_MHz;6r?d30Ip}Nvl<+Znc>jeQVQDU2rU${bi{Nt}=VWl|Z zS9fGwmb}Sy4K^ zh5Qk4g>AB<%`R)Jo{&DTjf=(^ZFYh>nnURrj+%(Q!OQe7;Qx%m@$>GWzL7J+u79Dh z?&@LDRLFK6kOuTnnz^1jzgo^H5IaVNad0Vp*cy^v&cu|Y+*Y}*7i9c;PxUQLI+uyc z)z0wDhG>egtLeFJr<2Z!i0O3d6MtrhU9qU{xbB`(5X>ihbE~I(x8XwUiFM%;L!unt zZL2O~W_)|0Gq-x3xsm8m!>Zl<#;9!8BTR$D1AX@M;Kovyi}8Swyl7b`Mtyp zJ=Ax;nou$@8v;?3kLvIURs;!X-rg*{l>$Vw?*# z)4R7oo6AmOKjL4C`yOhjO39Rg)97eLXTt%W6NemtgR(+2ba9U(z!ud^6Hx+x_;}OU zX!=u}M%e{Xg`XzODue&AAODlh!C48z|L6{N?l1B`nV!ym7k(A8r?~Sifd%Y~xh&!3 zjBCM?ej?DvTb4Dm67p1s^mKyl7$R^7icuGkGo&kc&LQKAUv<`0f zfcV`+$6Tl_<6{zc0O(Pd_2B}>b(pg*YMn_QSEI|DC}!#7z9x#*#H0zl)*!WB7Zr^F zWTJARTu_-^)Q`cM;g8Dg_zJs5g$qt)xtl3BPQ9 z9EXUuWC$x)=AGVee0rds`3S$wTJxm53O-hN1!ZnG;pXgdUU@JA zjx6W6_MN}lIgRz@e$Gxy1w=Qi2>H&j!XWI-a{fN|MpG>a@&lhPa;|)ba@lN{8@lsJ zl*3KMyo_~r@|Qz5 zQT0MXs@wIIxh}~o1UfvAt{?H7%|0%FyJSSUE_oK#2M6U|$+#VV>_-fzokDON6eqyg z;$-guXJk%}N}ZKC8Bb08c7Wce?#phzmbwm~AT8S^10k-Ep09rvM^34wHb`Vn7|FrY zsIrSHLAGl^Wz)Hx>vp{_ylDgqc9RZ#KE+l!o*M%?Zkst92DjZMi>rCQ0F004yKJdx zZhscFJ)s+Ka=IGT(IbGP@b4sjWf)?ip(2BiD0G|eS!kRDVS0Blv=b4xXmzFB4L4E2^dNOE=^rOU>{$+o?LEC?sygJ-d7<1~FH?{9 z_6|#3U@7fOXATCXGgZEHat}(67p0SXPw-=?8dr&&Skojf1uM1M(mt%A; zGX{ob>jCET@8`$uMM2=d%Xr=7u-t%(|H=GdqrFFIv_Bu<>c&~w(>p$?mCaw2!1l@uUY(s6iAo-;jt^qQhnOm0FtDbpKr71ev0@c>;`B@3GD?L{TygHkc1^|e|v zIMu6M*ay@-xbi^QZC&vf=>FguB1IXfMP(@W28I=_U(p_@P#MY!8RA75n5@Ay)D&d^ zF38Y!!H%}-oUN)x(0w7-^!s|=I)B`5>p_|17ez>Abo=9?;-`x|ALwSgR_9&})KJSK zJyj3N+Ts)cGWCFTUYiU^s@ukkYR*NTe@2x$Zjk2(SWNXSC6ug|3cV7`l;r))LT(m! zQ0{gw_YRf$tU_kiQ#a$19>gjvf;qh(l}tmB#_`&)1YQyyO=a~UrpHC*4?uJ+%CBBB z3!)&}SVv&}R+P+g_>*BQ7bUY8{$%9en3kkJp1(s}xMN*amT;bLc`uL3t*^-;J@Rw8 z)OgAu8Hz<|R!0qM(_v(7;^8T3A!ZX6aB%Q^pgi^eDE|C*?@0J_?OIMfEs6oOl}C!< z@Iym|=y%OlHwRY^$6RstT-tF`V0G1n9`;t48~p9M9Q%j|;5&b)3p=v^m%O*rveFj-qh#lTz;nCrQ?bs6 z1A)L*rA*j;=f%2y&JWd@Mg+DGbt(UUneI|72AAx(DnyCcLjvqq1>`aNKX|-!G)0jK z#WsAEU+@HXADD|Dl~M}ux9@gT`K0V=_>H`8cIsnSMJbs&|Edtb(<^mTX!ljRO@&oc zTi4dr!cN)YbtUYkM^yTy<0+m&EB9kGct|x!P$e3Spss)(;^9zR=B?3fnUmpEDSu1T z;~;;@u=Vlk`BLx07gI()m-G1)pBMRDYMvkC+x>jSJp1O4MOJa7x|wh|ZpHt$G8qBi zYv$YK&t3 zR#@cz`nHPD&DX!J0>A#>Fgc2Tj~(<|q9*zC%LT&!`;tMwFCO&!{6W9tgMLpQ^c$JE zzkcSk<48G^T%hOGeE!~i5VMz*1cN2e^E?#&3xz^Ozx_Wz z>2$z*B5fM=|;e7Q$;W$$xtfq;|ACBS^KRQdVL`!R71!1_dsDl9J_y2fmfPurR90yfs zpn=nJ)juepv5%hk#kt2XcqhL_?vc)?E`1MvNUQVaR7S6$2eKbW6mq0`D#(St+ypqC zY4mjjo{m@h;R&%+)xR!v_RSm)oIH36T@`5OAiHW*pj{Se?3&A1onx=#eec=2(3h6% zh`p%406c!#?%%5Y>W96sRA5Se!L#e3*ls?r@%bsAH~91o`uvLD@)7u8{*lVXw(PZE z>UnFFChI!hqB{^%Lax{^6^uc9-Wu&@2#};RxXCqvq}^}7)^m6aRAH+8L{7wVqW^pg zSp|{x)wGEvfld%ZPe~9Y*mp4rX;Z>YfLICijnDitSh7F!QqX!-GJA}sAPl3J5;5%g zJ$GSIoM2n-RyxsD_X}r34CmB?-IGxaj)-`eF-g$wlE+Od>**b(lP;7^z%=M|VOSX6 zNW`Nu<1%h3?WIZ71Wmc9`4nZ|x05Smf+SXVqnt4Tt1*%*y>fnSz?pHU++-v6zU+-5 z>|xOG7sl;>O!>*aKQ3&hfU~Cj{k+{+!B#sj3wzu~^hlOHWZAwCM+TGZUGU|Ur>I=x zB&l0uDq8V|_KCt1wcm#8c)ISr^IdF3Z*Gj@Cx(o?P$= z3R%t3d|lXo3QGNK)`pF~=JsL8Ee=Yvd}(Y0wy*aTmu!sr*fiyA>Ypl3K}2$aPh@^k-;& zsSj4)_!W~GajP@7s7fEUSNsK4zldK>SED=)zfpx@sxG^|L*DgbjlXxQJg~_s8vNi} zOz^9$C(}6ryOC`8iUenxFlay2nq&A<&{&%H&7~6uz4?OUGSvOk# zJd}uTxlJTdU*oOFFEa0kQ*HdcG<~V=;jP8_eoa2|#5&*Lp{;sJ|Ef`K)xWrtlXVwE z<1zIiUG8#!x%9Uf!r}MiJZgxrSB|Hq_noEljU^w$7t``s*9NInx&XUersubiQ(h<2 zzm`h2QVEMNS`62!`XS;4tD`un6+ixagde8r_%?Nz2GSpu8tx(qgsS`z zC!tIhOShB&?<~YOOtftG|23@V{HpG@nI+gAeo?c7?fmyyr%At<8(7PCGv8P6eHq{K z5kQr7e_dmmXW}5tR{eZ;JSi?wRpEGYx z?#pM(KVh$~z; zZ0`W!cDxk?mMViNfp+dmq2ZB=Y)uA6w{tDe{Ob3|ca)?@BWNheyd2Ed-1$dV;OOChC6C(T z&V_|+CwVC~knJ^{?VG#-r6rwfK#^2-Yn)zQ;Jhs-w%hIwDJ8xJ&!tSRbS=oS?+)ix zvY6JtPKL~{PT0F!kRP6u=KGperN3cS+)B@P9xqgyTBRy{iOjju2c*Kdv(A^?LUk&~ zQz}P-9KiKe%FSMa5vMM1Ul$FeCf!=*G`jsro!82^E>`0rGc+7HX*NHVGz;XhbnAFM z`8=6rc=+FY=LWj@oXvc@pWs`C=gB;;<0J6K`VOY&K{rCu6aFo!iSzITt;v>RB-oE!l{_M=mAn{;LiDo&A~2bu_FJ1h zzO6bU!sR_89~EbS@RwrVF1iw zOh~#5F4qfPECPM+<3nh=5#~pqnXe6=pW!BlIU77bXl`&inE4s|8RiE{HdWoq<}aR~ zqqe#Yr7tq`)9TyO|dN#?CqKUC2MALiU3~jak8NoVDfA--pk}B|ETK-SP0} zsQo!UU*_`zK9BNwl213E@ABEpClL9Q|AIP4sAQO&;bGpnuSS)QmR(Z#r-tFfky|;9 z0{-7}pZEQ?uS2q%Pn1E9skgur^cf@wdJ(6=nP{9OvO*!N?3a?o*qJynQ$Wzms&}W) z#VdEkLg#h_H|pR?k5x0SC?+8v3Jie1sQwqeAln8i;gt1v90_w)6z>0eFT8F4EPH+E zVITc#-!CW5lzsdDSiLv4zLR;GvNw?pClmQ+<*;$ka5t^}oj&Bc1_TGV&x|$Uo_R^< zyWi8efHFMRl$HCGt7;o^F>?VQ}>?u zw{!Pj@Y7VejmG;zy9T=)y>&MoL{(Tda{12-jk`N|`KA6H>~c7+p5hL&Fd%`4+6WA2 zZcmB)9R!PvIFBix{ZZkp)c8P06(Ya3T*MjCuJ)@xhH`piuzkig>Dm<{y78O3usY6- z|45T)=~OTY=i75|fIq=r7|HKXZaV0E_&wE0=^d9DW`0hzRpk8W_?tJhDE*Ty!qAoR zwq0A{+dZ$mVs{9v6kh55bW7MBA?1ais%|Po1PBUpS_X33eOMuL6zxuZckx-wr<2eBTR4mP5oSBuYPnEFj+o4ZW6}+ zb&*_MR1)Bq=jymIbHA;dVQLv@mLJLio@V6={E73sT#4#!eNk_54LB#7D><;Z z78Qg@CKpXw^^si352?xd0-YASxBBSZW=Wo8)lar-r&{$>`OC>tk|zv!?KG=?nq52H zs-JGx&Ok4CQ*8}V@ix}i2$HT`X4PM5@6ga{08GKx+qqKJ8-4Nj=B`Y!0Hk%UwK{{E zIg`O^EQkEJ8Y?>5Dnx$DMW1{J5=>`foSC;8E8TvfYt*RvZOxyIV?*=Wnm-Na#<|8B zGDo`_Yw&SEC#}XS)m>TZY0^d}N2BfSVN;YGQp}iiaCoD5{(IsQj!qu}oghsfq z3-l{@ugdo+*S9{Jy}JzAdPSzUA3qOpirCsE`>i>VaeJXkHO!S95`b*MxeJNeyQk;s zr_TPj8m*I`tDmM#bSQ1jNsy%AQNPXAE6B6z7rWCAJgvS3iH%i%vtjCZ69lefo@DO_ za`h?wwN}1%)!!4yW!mMDf0=7=B_+WF(J&%-!&5^63$Uk&!m>>KS1k`wJ;gOmuDDu4xmO`u`ZGL)*PF#|95KIr0M zvDXr?S6MEk@IgImSq2`n>!P`kfJjw6&QgPy)kQgXs;(!rMTo!F^-;S%TGf*wHh7QL zz^Mb0a&-!Zva6@t^@;4~rswJu9H|Uw;?yO`pfQ_zZ`a>o)!ks%FShCy^VbEZ`kSq~ zo9+5rth!t5`sG&La)xBpt+4BFv+8cM>sMNJEA9G}RhP2s*IIRJH`U*>vF;u{1Iw)S zGJUoJp{16hmhA27*!1rneO{h&J|^k;P+hlWQYHy<4^3zHGjfaRsArnWK-IEq?D`o7 z#mg{x_9Jk+{z|Lv%E9kythySzzQ!B$wN~A=%-S+$iFsKn6XWYR>z4~E+^Ct6F7jLy z$pzKA0ot`Z-z@#Bi&{v{>!NPmb!Ap;n7%RfPvC2~yYxm*>)@F;&I*u9Tr(!Z8c&@?Q0-tB6IpFyHd%rU z{NVFS^}@s|hPy)Al-;g9O3u_jREOGK;&mpRE19^*XwTL7I;;NL1&6WwYi2J!bNRUW zNI2#5(H%40AMhUn!$Zaz7ZG^gH|V3h%wT&mf@TAfxSQTBCEkSdaeA!9y-33?I+`On z5xJ#grcpL4Rx-=x4>If*$8RNq)ls}Hs8nHU6@;{BMB|fUm=S%82!gYlQSU3W?~LxC z&TKFWg1UZV_T{;tS6Tx$qbXcqC#dI8nK(1g$`T3xcE}x}t zzCAT4ik*($WBE&027giQRT_wu1e%Oe3}Q=ijZ$J1=5g9IR+2C09!m;rt^<5g$&Sx2 zs&nHjya*=75(3BiV^zfI@WiSL6wi{wth03IHWHC+ zoz)Ty?9R;fboI0OT}FSNcbfi;4LHX1vV-JDzb^~G_T$Oq){49>o3;ohV)Ok?ZZN0G z_6mzhY>Ekrj>M*I>Pi(h-NhYt;Oh5&^((SPY|{hkcf0!i6~C~MsqFt;te8wfy(Se< zl12U{Hc2-5XDD#`gKyg(ND1;Uu}Mmif5z^_CMiq)(fqlinqSG2mI9*DddQAO48$D54J-z6PDaxpf4k6+BG)%`u{UVh`7r3ToKA%n&@ z3t2+(+vQ@OWO1qvE(l|m{(0K<5*`cI2J{@F$2()Ol^KJ%M7YJ)Qty^B)>B7i!Ngo! z=0_4Lnk%bY9UNEvSiMMj6UMT#GQdteNq#CC^$DM{?bh53iXVPW#5KBrp9lsjO zkL~^^lhyZB{}X-;J06!C!>4D!r)St)In5wXS6&4S9U%m%Fjtr|%$;Rk3CnJZDQJS{ zX>b~UK_F2QkcJq`V9wZ|t-fk^YT7iB6_yI&Bapd@?^&LoW_2EKKuA*4c!|hN+$#yM z1PQMa3C~+p;=K&x8^@JAm7r~4ts^+1BSWjeFT7K!HLefn4eUD91J*veO(Duh|D!A= zJ`Pl^HnGX`l+5i$ zJ2JkfUTw#z-JuD&DfMbXuMiSdij}Wep4LQa5XzW96gDYif|+S!0xf>0-V|iKsma$5 zVmFG?K^7xJ$#X>~r~8Waa7ua5Lm#$!Gx(yfOU+(o?qH>7b*VDk!1iMP1qylMGN9M1 z^z8IPwv1rSpVY5on0Z7d^Ip^o%Gv}4ZJ8(=5*4bdROwTV93z|>-+QGV^QSoz#z zT!*<1a~5E>)_bXit8y-rf3N zqt`Itqnb?Cuc?M9PB+Xb>WeW5Mk>o1%D_;OINUZH>`guI(JULiw`Z9esJEFcI9l#GJ7j4@d4-7`oqqf*kLEqgY4gx9x*%C0nky*@Dr!Ph=n?(<3so!iZT23Ph?sS1Wou@7EcXV+I z^yq1W7E}8t4yEZUR*NuuYi7PDQ7jXqBT?*E7ss!tnyA4~fpm=2W7c z_g{2g+*w%;FH>ispQ1B18jp5>n6`JvyIvLVh=c+UG0dj_q&V+ z4;vIUGXTBE$imqdM~saplB@HesWCj*)A6XxE{^cWlemqn!Q!^6faud9^WKlK9q}Dm z7YFyXt~D0|RnQc3A}Um&MRCg&f!kwb z?=H@A8rhxsSdG1JUEkv>(>2DXD*c3YeFGfvPfsjV`JHTJ6C73c@cWEpi2BUrPi)cY zLi&%}jDPA?#&hN^-|0_vV%ny@A^wY0jXD;n8o5=4vN_ErI8pBCnJmLRYD9)8mI@Zv4+$7gTB#pnp0KO6>J)OJO!PgxBtNz=$DK-xg>#4%grLu6JbUAW1n@yR zwvx6i%*n#Yt=doaT-?A;?j6W=J=6PgZjqDK4QDdx9z}ti&X;+}x-yVMXDG;_x4diL zNcT`FZy4Ff%X3`LaE?(u18DxH=(=22;5ncQEJ#*xKx|=->P5?PCPx$b>|;ib z39ZYTg3tLj{-YRlt{b{3xbAQpp}6*%o32NtqTNC7Dj20;Qtd1HSk&6_zn8j8WQvvU!qOZL#VQ8O%K^?nNr%|;qH1G}Bv!PK z2s^x)^Rm6KOwjgj&QdRaMY0pVU*6wmw)&zs_YE{I+IKRk!p>9F7Q7 ziK3o4Yz$0P$1?M*PyAQPC%D0jEp(BSrt!wYE)RDkc;(Ho+z|$wqTEff@=2TmUX;!I z=u0knbDl;5kN2*oqVfy#n(&+6bR{>&#N*``(nTOu6-T?vFAS)h;9ouo1Cd49$9r8^ zwr3^EUAds?82l*lumIZoQdVJa)I1Lp*J#g#xOcOWMKQTa4kGli1Rf^lP%-BbXt&^A z-^L}>rBt0ILGo zKV;{rRP8*K29UdAXwcbtYKoQSQThQYuw246q)N|1DUm8&8i`pN|7%yioN%sj=-b&h|jPf!D z$Kemt9@3t!(ceD{vpH-2AmgELV!FO(YR@tBm5rzmL*Hguno?wlA~UM|u|J<3%IU$x zouc0|ssCtT&z>c)RD1WG^H;= zRXbYVvqfL^kH(gK=Hr)hKp=BIuB8fzY-K&TC@)qc)7e?h$9dG}+knexzYjr==+XHG zVIqb*)^H?lD*Ll>7C>0~799}VfB_XCn_z^+v1(IA%9e0x zibN?-!ANiMb-yOyLecTq5^HOpcsVNcf)Sd7A#PJF@@E0G#H0YSi`SuwL-FeEthOz^ ze5f9SjP0V6H+%1;iK|E0qn7hhD-iY&i-Pm#__}aImAtA)BRgs|s_~ezCtl}eabrY9 zh(6)Y;ny7wjOVl}GmAf!g?*6J`OFTT#c=2R6fmCfCUA64f)@rxygK|OYXvMc8fUy6`D=ls~FTXI4O#q9ozdu-Ef&{F#(vs$AmdRxwU9B165V3+5dM`Sut;bd%OeDVDgGURZchic~Yh9MoR z=(y{dq61CAub;<0ZQG^B5Zh#idt1!?ol>2_^$g3S^H6I1nGCW)I3|X=RmXAYV!avN z!QsE0IX+sf2Je)N!J8hsher=x*#l$5s-c^XaX8MTIlr9zETn0SQsR(6J`61@ z1_WP>fsAEQF$+U=VL8x3jUjGW5b=p=RGf14!sp~pbgbb<_E6*NdQu@C@)cB;s%SYB z7=Wd~j5NiTyheF^=ZM{W6ow@H=LO>}*{=Mx)W9y>`XpZQYa$P;{O0t3fd4G9w&E*} zvY7!ldkxoak%9QF_@NPdr=3p$xpS*{$#Kwkc%^VSW|Xio$+?KYe4xookZLkY@)WXA zlN4eX49kVR(ATJ`hLJBTywN65ik|t#ev~*cXN!jMRzKv$+zQ|GYl~GPWshRaj|ggD zqj1uUTa1vvs&rLh=`FHvT8b<7!-g^ih3a4`%WB!$%80ya+^{%aIWuHTAqM1{C4Sr1t>4Fuvil?YY)$h!evmhCD3sb-pg$wrU&bYR4~|Xu`nrAu20NyZrk?KN zDYdIFfUFKR3{#-hbVZ~SNgp@KOoO5rDrKQw@w$9CB5A4e@?~@=grI}HeJ_n~K~N6Q zEC?1n3xvSKPDgW`!CMthYCxxPQVmg|J2}8bL8(C7=#0T)6bM1bVt^@Yg)tvnWn&}{ z_p47b_E5Ur`~9&kqxrTP5A&6Yk5QHzU4vEZBm?{TB_qL*zjcBHsKPNdJyh62bZx%H zG(?c9IBZkZ;)7)Y2#?QR%rz=r!`50!PX;Eq72Cy70#@eh`d7fnIfd%&4Rxjuq{L&c zlJ1P(pV+846SODD<$nl6Pz5NyAu73w0peTlK{l*r!q8G4UabgUo#pHPjOtnP1|FjL z97r*&jWW&1W!P4X6qdnKhQ#8VqxK+b)l2Y&=%+F@Rdea9R95qd(N$JZ3C3H@*V@mQ zLL=EmFKwf@2sRX`=@YNmp5oS#yToUh9$(BK7PqE|_?l&E$nThf6D12Kqz^ST&7BO< zB01)3GuRlJU>^L(WU{bLPa_sm$Ed7el&YR;2Q+9AOj!o3x>_vj)JQR-`J_Fo>;579 zL`mG3B~*+khLV!G?WRZx+>P*2%V;9ilOf9vajtEImn?bva-{iOQFE%wu+ypxuCL1t_^yNK|#mvm8ks2tU;0BP5aKt?6R z3&#@wt`&#OYracIjDS~V)`Vkf^T_Gjya#B;B94U+;z|A+Q^ce2YIMbw-jK0z8?WW4 zhp+1%?o|1Do)}Q`2>k^tEDox=fao$S%uJG`NG@*0=$>`SRUY#l!V1Vj(2FASdIeTy zn$gutfz>eiG*NMkTrwRN%iyZ7qgsqR#g&)--S}f)+E}-*Dn|G7ft}J$cGtD&CL&IQ z@tnot8tL$QWJd5RobLF>0zbnMagxT}6>i@x|oQ8yoe)(!duoGDyi;N^!&x+T~HV@LJI@Zs0 zM6Q;?wG1iph0Qdzq?4*2hYPGwm<$O-8uigRs^P8RLg~(YOing1&MWhUnN`kGoGA?; zKT|5R#_xV>^ec%c4GAJ!%t`EBD+pa&nycy}oCC1TAw;x-wz3RfTg)^?B8Qo*3eha8 zEd*JM#gF26K+LRGvXxDURxMnO&lZ<|E149rmGD2XM0@y9rs9dTg+(JcA|g;;a&>{Z zcDlG8wyH=vk^ zd50{C1Zl|l*5H>cKy3o(xM2t*BghrURAjPZ5>cH?0l-g`bTPGXjmb!ZZVDuOtxon_ z%bk-|2k3p-KWSfQLdoz;l*~#rTzfK)m(ApGT&N-WODPGlwN1owRi_J1(MjlKq7fAu z!v;1jrTVs7pqLYa0;0iu2p*kcp7vCwuDZQWS$_ml>klOtTHH&BoN9WTYY(J{M|yNx z9X^#Gtm3V+7&Hx`MCA-{a+q)ZQJh-Mpx?6k&LKLCq+)5n*_4KQgK%z0V#&~$<%s6L z#qH|V_|gdJk=2w(|=TqAFG$?-otW6 z^)>qE;MbCEOXCZ$9J@LULl)mp^R17|9 zkBRBP5`@3u!CW=w^@OW=&M{SIq(nVGu>VhYjfaYjcW8S^mXgonZS!>dtM#agn3vHX zQjzoG94A{a2U(S#+g2>ycBzDNC|kNi2E2@XgqHB+9Ww4keCa+2jiYOe9g)-Z>JyvP zkf4@fv@sb0*(hZ20#OLi_jF~_Jx^^0m=$j+)eb$YKtvJdxOnw|+|{zzIpb-IxDyRu zW3tu_WhK&iDZ7sgma+lg6x`Q#0q*Z4-h>=R?agxaM_+SB-iB62{nAja@l337mHBz5 z8$K&Go}o<^4+2vxjqvfBxx%M^bRM09@*wT+LMDv(-N&%_lm&HsA1)wpl=A`?ix+nf z$o+$d_{Hrzzq(6zn<_yZ-o%ul1e!JKiP3Di)JT6*_hr#r&rJSOc}l!a z!{ZZy_jBOIqVghsw;+`QLlAfm$jBh+kb^5~oSctSdNReLhxovX!9|JWi{JeeFI4V( zGIC2|Ec$F_Zh;!V`ww>R`|RA8V?@v`$;yhrW5=B4Q#6($ZGH7bay*5);#X@j_~&8xr>Xd-jDNVO#Xp5Tq`A0W>QT<4 zKGs>rf&j-0Rfvn-zV1$vM@bX{hULUJM+0NI45wxlIYTY8WVtJYx_V0;hW+;?Dz>OK zZ{&XS^4oPpf-EXzG`QpIwuuzR2-hN@Ef89QSO!4Q1r-KEOBRYuioZWm@lB=3yymMC z;KtYWbKV>E1yt0v&&n;ZMVO7R`&C-lObL1Ju_(7>5m_-_{XnAP0fC%sb(_!qZwPNTX^Bp@VAIHPRHSUG<`xV5>%XXSUVIspd#c zk#MTSMq3kWNmLF;{@|x3ocs$ObBJmVHtlV7wK`VJHwmwULpj0fDvj0ON+3{~o~b?! zsIVBNU&yt~1{D#O$_hYH2~nbAP@N-%O@4-GUbrA1BDCewW2Cq*!o)d%EYy~nKu-f! zyTvQEge>Zt!7he~((l?cosfE`s0*M==u~poHqD(v8NTi-DZsoR*BeJ>a+fLJa*hb_ z!g$l`dlZI>(5MY%Q|+jjc~y(LMO8P&plO)+D(uX}OGaj7&ja|&XvoFRtbqfeOm#1` zXl0JIKs_W2RL0{W)t%cr-TYmMDm}d@cmmy&DS0Z(T+msz_g{#1nRLyriy$vv#eH4pabwghm15j7@TcnMc=r%fT|M#e z0 zRV^c2ca`?{xYd8{6f0g;$a!t8#H;GTR`Qg1RhP#%bpbgP?>-6^gsocbF^5h{pcDx; zHHj5$P`x1nnN_$QnoX4**{s5O^QqbLBy53b-pe6+(bMMtdPz+LeMISgktHBso4Nl@ z{7RfSN2Xw@s&kcDxo|zI@h~QgEAkrG`$&t>crQ(`3rV@iw_aVTH;lK!1hxzI(h&c5X8rSY0TqxtFoC7exJ z%BubxQ09}yo0#8a#XEPsE{y0x-{$3X11y%8U9BvZ=WwyDktf>5n0Wi%Yc73Oz{zZ= z9#0-fKVsx3+Sj8>uQkNeWY{DZJT(o-5+vena`i|I8!_@TCu7`K%x#ssWdia|9J|K7 zC{d1v%&Rks;63RYsuvE&GiIH~DB`jt(Msj}YynIO0B<6!U8(@F9voFbK!gAN!8FQL z=mfo46lphe#ctYbm&S@zO4D`7QRstoi$g(eabdb`-o_^scjU9MG(PoI>?xhlj!!q|(j z=~Q^Z+>k8e>O^zMe3cg3dPvy1r|bD}HB6SxxO)ru)Dcu?x!dOI!`}*$t2YA>`Yn+> ze*y%$?xlxd`q5r544F9|V3Efd8FpXT-l&!$V(5HV4=&E6x{c-y8BJ*$T6-KXURCYz z6;(TS@%Kgkmd~zsc;$~?=ivF1a`kweSuXbk+xefzlg(`o7n^(GkF0i8QBOnTV|q>0 z%9`jz1S{uK&*0?8^vdW&#LYA7UL0Bz4WUy`ixVTUQy7nm7aBbpQ2P%ZkHmx`zV2^8 zazpvn5ru5XJoJWyeQ={enY~SP7e>9<@M}GYw&7nbHvDbMhMx{oBmRBtZ^BPwj!BR+ zg5e>QL`8lT#aUFubTLYb-op(|6IG1RS!Z{rxZCyjb6K!?d&-3#Y{)Q!E5p>GK z^qK}AF+WGldnzhqHYz{TYfiRbl<)%f%R8y60P6vm0u(&a`q1vEkl!g$hGoHrQzk3k zT)MHj)BKA=q8*RPVM{b#d?4BDjUROIj5tM$ef)L1#fqXEXs||UutiF7r5mhG8mwJ4 z*dgD;3uv&n|6+X-ep)^uf0d@zB2PnztmYSJQ8=4Wte=96##NR&+V}9pcx#sH&EP7J zFDm|^iclL2Uj-Et6+?b5J0x6zHQuC0H3ch%BVV9fT-+2aD~S9rtagKC`H{~vz@odn zC9>aHJyIM0mUIO3ABo(|jMZ$YM`H846$0 zG8UUxW0CR~t?u3zTBL08RUcHNb*F}HGAC}o6mgi2-p z=o&&Oor9YKL3}Wm6kr+WxaM>Et#G#r2SNcP0(eYut#=5v3l;`B;Ls%_!&vK&w*?w% z?Y{IGLf55qmaf$WZ{ z_vs+MD8ItRyor~|T#9(FHr27lQ0>^ZSOC(LYSZjrMj_L+e`h>^sV zM*Y%MD+Twp--M?-ixvoMpOw`vYDc!*P+Fh5<;I?%WhAm-PN>ejWDpioHlN{~P4}Ty zta>HNLQ=i49byy5-auy*8$?NqcYiM@{fy#(>XGN*iIBmIr*NZkj(8sX1C`>*Uxf9Ch@(THGGDw$ROtV%9-AjWaS)Cpsd!vS6IWsIesx}_%dJ1 zVFcGzJ$*^sOOyoWmS*AgG@VCPZ)LEuIiin!Rj%Sbe2h{qovcbZpW72&xg}1@Uel{m z!>@I$zs*4`TFJgL!XVY0z*ZUe3{Dx76!~{P{yFL%;QUCAv{_6>%`d`VqU&WK-XQ~V zy$r<7+|@U3Gb$O2m5jwK87`Icjr9wIYpk(Yx$ub0>PU=CL4AKtkHz(V11mRca8xcd zYSdV46MZP6`YGdaytKaM9obZ7yy_*aTUymm2qam%qT5c^ zmFsX6HyBQ>W7bZAX^S~VgI|?E8>I_b{ZBIVQqPtC<#cZ*c226h1Fm8K5`!GAe?V0V%MLl%k&K`hZis zS=)VEz)JsK=ebb8!h-_goa8=r7P(RJlD~OOf}kOfC_@~NG2b1W?{8(7rD^Wm@HD>I zYjK^(^D^m)F?9MUl-(Y+NN3Rv0Y`+{SxFMcB5|(q3E?=JW!W;Deqp;0NL1xZCxpW- z;=p*M%2*M=3;SF#foMlBRpkveU{`09YOeLM=w}@G<}Wb+^*MWMVlttF`_0c8D9P{u zO2kpQOfdIs6A8-Kl>j)dL8WTGuATC*${k$g_eFokz083B%oP!7hZ`CQg|FB#M2hUK zY`lw`9irBdr_G4pSZ3s!UsI67Ul)g?4J`%u0W~jqfks~K7IjT~0Qb<>2>L5D`t`dhB8-WY4(`ko=c|VBYfRfbVA=gSCA3+jjczD#gjch_ z#a^0mh($_A&=KKyV)k`eRAR#%6_;+^#0d`Z?LC~;{t3`gq+~`krXbtk%T&|zT#?<^ z7rZMg9dUo}>xwY=0O#xaiVV#~2sJby&Z1?aypg2sqPlLHn;oe$mb+VKm>)~kB$ov( z3t?|g$p{K^PLt&)v8hM%0Q`&XT?0 zy5#B^*8K15`j%v>9+6W7UEGQR%}%$pEo7UqbAoku@y=}PF0eDlx|_K3LVXvxc56va zfzvY5-BLNzmY&6LE!HSk6QqR3!y(@=yv&8s2#8pG9sJNctOhTmcqZ&fIszH4lR!~z zlOcoUTwl`BfypI30~q^_8*qoBB#H*3HIK8JABmT^6Q%jg3HZ#$K+X5?IdgBwU+()} z56k{+PN;Hdbs(pafHm&$q{lpDlh`$p36H@)9nM?x&2t21BUy&71#I%K=-+XTYkA_J#Gyx>>>9tG^*DgGC-QNDfOY zoe$<;FdVL`g|Vuo;iaOnT;wnW~DIh*uydOONIDQf^~q9?lZ))XFJsmX^Cy ztEGr#Z@7&1;#%X$q@VJ}b1p%hWxhUI%zCn8t<-0u;JE%31 zd7~b)1a|+}c|6?6PLk|ciNS8B4TrTS^g6a>nMW1IoK#p+C&&j@EKdzTrIRVrVUsde zB&t2GQ-h%-&>+2GqJ(56E@u`C)UW4TK@ZQ7jwOK*-+;SZ%qE1)aCFH&v@Qrw_bv+qjxr^$dN>raw__|Oc41>nC_OS?ZgEM=a@hD<7edi=6zhGe<~sF zMyu?U5I5gS&>fcg7`?`PoZi?cu#Xojw2;31L|9NLS-$$@3-)r5l@N*K#lWfjMD+)+ za)D|*+yRmzxa{TXdw6-4(HAlcu@Qi8>=6AEY9v_0IpSlX8x^4=`LOVJdbQ}Y?!>e} zJ2)5qA761x@Q=#J`6QzhwSw|-F1>e^(byb(qV21&cF|>FqbS;}!JL#nOS*N%NaPb7 z*kInREQoxXBR;{({K%&)O=3w_WG<^8;_kTi4bB$jS2+I>0n#*gc^2iOuMJil3wx~< zQh)G?)}JEYXe}U|)=4PmeHHTqn!S~SpXu1Zf^kByeP#G^tvosJIeWpDD~KuWr)Vg56UV61#C4jG3E1h-%INpxmrHjj|2X2tNo2E*V~JHT_2IGqFib}pG6}N3_V|$o0}^{ zUo;rJ!ohIzb-hJ5j+)-V!t1huE13sKxgr}dzOLV?mpOxzub3o-cKud8XZyN-%?%6o zOYKs}F*eMO?s3Kzd5uMjlkKb20YAup0|H9+7Flx86{}hk-LM$&O+0GlfL0Xf zv7-AwvX0YM|F!#ZofEERtKi|1>^`F;3jv^S+m}g@zpq$->8};PtX0}KT;;W`!W`Dt zc}gQs=v7-?x$S==;gV|9HkX%6RTGwB=QcLrHR1)%Wiw{>qy$4=Mf|caGQ!(O)!XpP z_z8_}qiPTtPM}yLyyv&z^Adm7zqG#_@sYzn(TgTZmdfh{lb5)iqqC}B8Q4*G?j4534i##a8X#;q9xoofx$%$3A)$`=o8#aDw zTOD4ZcGj_;OR216=jU$^DV>#?3C7i0soJNSK;#=0SyQ=*(?SeJM6v)(t@G^Allg*c zMqLDm<%By`gG5Q5o6e-jroN322u~3wO&H|c3o5_0pwi}qO5D-PBUu>iltKGgu9BIb z2&0sL25z~=t>LxK91W{61xZeQT970xBv=jpB3_Mtb6Bvcjk8-oQwbVaw6F=|k!3{P z{jiLF^O66C6^Yaxb|F>)MKK%?DEPkhBfbu=yiTNf-?v`j;W`ofeepZEoiO}{EEze6 z@B~lduHM((!yPdJ=R9F8S$$nUCWXS-^YYfp5a~DHonw@_0=sgyQ z>6suf?5_!gOkZZ2?y`EmodDaqB~Ln;%-0p3!V-Lr2W%fLI;Z}9z)5W~5>$WjSoZgw z?=D%gWZLS9%e9G zkIq@X!mc5@k!y+$%&m8?zLfpSqWC3kyR(Tg^i?gVat$iw@`rb#i7@V%H-JgZ`be@!z{DuoUPs$))cUkm^ zJ9^U99w2u5;lB-bAs(oT}erDEqxziyaMC zm>(V8DN!jabe!Nz{oP$LYn%C}HB#PvN@&YYH3lBz4Jie62S}e!bSoss( z%dETPwt38Q@wmL{?lE$h+*+7@zD{Dx#f`~ri@6c768Y6o--~)z436V>H}g%R8*6`s zLtXrCxlMFSGG93iPhAUUIJM|jecc!GMf5l7m9N{&gET{;`zzMRkwEj(26l+|nh&!= zv>U}xz~gsIuDX!nN#0Sc(20B^`JkkcUE&d|77a8n(*Ouao&i9z(J8VG514o|0j3Mr zpvyJrb5o$-leMbCAPqocZC4qrSL#CX%lQF?3UM{LEF#qzo)l@iP(db-i1|rNUIxL{ z{<9)@{BCJ1g(Mq#J-#ikkT?1p)q=j;e=n4_@(FoU&0r&0m)RnzQoFY(AgVzk8!QT1 zO)wh;w%r8D2L%p<{uHdi%4XI1+>C5v>GZ)EW!7G3V}I@Iib`!%Qw^?_j=PGtwVX^S zXMD97s=vqYUMba-?ocbq^~ndN7Rd)CS)-eLP`)$2QjWo9sJWRYYC-pK8)+@YA@jHI ziQ+w1Rpxx1EGmi5s0~WZ4eXwt?l&@^EV*3wB&Cq(->zl>OH5Jx!eiO{!5D0rk-=$k zkL0%dsi2I9Pt)6|VD+%79l`tXq+zlKl)Vx(JHD>J(>LK6f~T)Lhy2Oe@mZLC(inHX zBQ3PTVqKbRFek$dqp0;RhbouNsm%9v?*~Y8`C|3W@^QY2p7i*-ZIop3tG*Itd-HtV zv1g3)mDLSq>m1oCheibs=xASo$kRF@I_zm*GCw+;)4qsxrGHs9@iR5@5k9b4U30TW z?(>;x`8usSGwrBOo12lg?XjDx9S8Z#0r;!dRqo~QU7l5Y&tau7G-6~UfgTVpJSw|xDBwq7Q)JdYD z5G%|E^TnU4iSNdS=6lu5ebme=Rg>(IGWnujzA)Zm&J#_e+7H>9U5UVRvM^#|9`Uhw z#bKa)S3{ZFkSt0@4x7)FXb=w7eJzz@X0-PC)O{KBdV;@y<8LE>Bm9-}=g9tl{m)4O zS*j41F3PPh6Vw!_+AmkNp9it8nnSxLbk?)owqI#}eev81GkhWa7G``%_sB4zaBTi% zjWKH|iq)>{w{`!Lk7b6&XK2N+<|WLYk%>t>$?i4Fm^Q6W{=L`L;Q81XkRE1J9V;Li z3do0oz$FM3gOjWe=M|PJdkwW^pht(u9Ebh|sg>@tWP~HmEwZ;JHG(0sA9crKuu}MK zk?Ei)X%!(5F>jNMRMOOy{8k2F5rUQs)y0=^D#@ByG#IvL9np0|P7b6WKa~MLiEG=v<`vA^fJjemjFy;Ge<2Du>lEoOwi~Yu;pla!AWP@H<}E^M z_-{r-ZtLM~ch8!sNN|quxeD2jHHRU0s!_u)s@^a)6LWwJNpDc?lMID`kgp)v1TB75 zRrkeX8P(OCKh-N2>W_vUsa6Q-kA6DlqhnIiG4SMg{9^slvGhl`S^YorqY4gHrD--w zz=U44G$=B0hH&fWbWB}lmmW#g-s;lRGQdMjbHYzXl4B&-RC{zD&4bY6$ghVHdUV5x zNYlNOT+!c1;^c6c$nxC8hyE|B`Qd&p;5+V%^91H6LP=LhYGVvtm+k>O=ao#^fCuSmdgruQxn}k9tJ%G!50Vu=!_x4Fl6P)Xb&Y&l#v(m6^2y}v?z=4h z_h!1`nFRyQ7N>5{NFTGPqrZ0^?V|XM{%E|3(xVz{@rrlU&d2-F;c33jPmziCZ~l^M z|Akz950!XA&3+`9Be%=T$Lz;U$?|XC7RfRo*!q-!ot7>K*txWsoz-=WpV`z(e%&+p zAJ3I|qDMV{$}4Ejqm)dr0R=X9u<%c*ECpm4e4g)`Z-XUeW`6Z8g+sdJYzU(I>T>hK zREgV+mDP^t_9p3vUe!Lw2!vc&5HkG9 zI`o`O14=s@H7A5u%5LP>lo|f$i4}M7=4;59R?28WPvq?Mr@i6l6Ws%*6i=*5PjkWdGbiqkH!PH{u)?s=@55~7lx8xtf zvL`fKMtnq1!0{!A_2doNeBHOG#KTPNb;-z(2on6Ch%m9z;uD{h4C@9Ebx^_}^Uz#K z3L~*~hf>0Vz?nq0=(?kb3h(owk|!_OJ;i1~jq}7cw{f(@65jF3|idAP73fK28*9|MSMg=&r0L zG>89P_-MRmry2g-MKINpPxw;v_kdexF=P1YJxM&>akfM?h%^!SU z1jl1EqqJT|(?x1Q=!h_Es7yzs8>VQRjF`rdxsp!@F$Ws^))?Z%ky)t#i^TO6YvsL? z?oRHs)DW+}-`s$cfZY{O;jD0<;i5;nDN52`l_5Q3RP0Maf2OY4vpFjg9BG6abuhqF^lERZvoG zWN^Cg^)U{K%%|ev%IBwxhkKg(c3hw9}~ zxe_wa<0yC!=yZ<_sT7N#;HS24#|^+tyv0YPy~c!G{0~XP)F$B?wrWj0W@^o$gi?ve zY!Jn;3@aH4$1E{r%knX=ESniCn-wdY9V;W!;=EW{aja|xw)wHLg`79wm;q5V2}2(% zE03w2USs2Tr4V&~YwO1Ealb_!;YvjB;a>hFqN1#jf5yi9_>D#7*VriiEEbhtHZQi` z!xDQ8PQ;+(6 zT>bW|Uumc~hDQ}6b2t(5Q#waX1%{0`{}pfAp^)ASU3LB3`0wS^OQW z9(P-_3Db(@IYFGWKaWHj%O$RnM|PuRYS0s?Y*S@eqpA5ugD(^CR{gI35dPuSL}UkE z0Gn7TQBymp{n>emm-bck?fYrE{15i0ACvefql%?W>U@Ss7J33w<%$3J`i$}xo;kjR zOm}vBN<0?dL#4S_Rpu5rXO-q|t;xOWhTM*qvS!_odnP=jeAWFxVc&hWodgSzN&f7OutH;Z z;VxDZ>?b;cC11G+r(M(cqB0h3r}!AdksPalA&$=*?-ur|Zi>;koC9H3Vo%i#NJMW^j0dnLOr)Fy-GS6Aa{h z`J3;f<4|4SqKtnuWx^3fmGD>3Sp92^23_|(qwDV7$Pvk1!OE{(bbR`oia2`)vmg#0 z2Ff=Ifm~Jo6~@Ai657|bmnK!%$Z^>f)`RdD?0?1k%VD;+RlHr(vhW>k*Nd>H=EsU5 zOny24F3v^nM|)RDTCP5{Nj=7WZ!{;M&m&ErVBAd>RcI z?1smU zecc>Mj^aI%LHAz+|B0W{Qkzwt*Q<7N-*y_!{wJo7#}ajXg*WO(7}yPnQ&oMSX{#_cPvl4hK&eYE3R zNBH{~muf*0gAsLHC%jdi6;Ve;6g?Np{>5`YQu$TLWOQE_U@dtI@PWtGN}g7n``Ef9djYjiT8KFOU)P zg76pV^$h_zj9dKzZT48MO2cI-u0u>t($MTj4QDXR*Ddm;UdBh?aJLPr12sy4q7PlB zc*}LC!HhQRq0OpR8MqbJZhb&`Bry(D<7kHGM4-4Pz$7j3X>7o@Th8L z0-N8=a-VR@0Gq;^7ynZ5ijc8nSj>_8f`Lw7*CIqT=&+tDKnJB-RY!pY|Kw^fhJ@zE zpN%9_X{jUX&|A)PnC0rr@D-d9bc8=C#*1t>|A3uL>>Xt{0{e5-cQ|so*StVwjvTa3 zV_0W1)cF0tmis2(SuNMe?OD)qRMjiJu3h!UvQ9VE8O81Y#;W2E{vB>VY&^qx{WP~f zS5EII?^IlVsV7hyd5vSzojM@1x2O* zI!L{N1Mt>?TQ>))A!+q(zmg3$Fs44w3(IG)yeOKGC^e#Oe)^i*-7? zY#JWO<5))i^9^TYGHsWHz~D#7(2iR@41^yG4J-3p%4JKiGQV{i=f!g4H+alVAQI%1 zShPd3>@`IVMyW-d_ugwBA&rNNls<{)3*GV@UdpW;9N_jfZhx#k2|sgUlL!G0@`OFc z?OV7-WZ83ErFP&qvNBu<3cWFfgq-Rq>KT(T>O`8BJOYY8j-6ji^!$3Q(XQW*kxZ;1 zQ7PlAxEXGkWjN+m<+e|ZFT$J4k*j21V^mody`qoaBQ@}K_3@h`-b3;*F7d9v-y)tk zLP;$Yrl!^q_mV9C2J;QI%rI2dU6py9zQN`;m%S;1&q%K5qbhHtSZCodMBCM8`i2$R zl%#@~`l$8EqMo@5pgNf~s*Z|ZE)#q1detk!m*eWqrBn_05NYK|Cm!AC5#fKMQf2z4?lPVSLH3Qski@!wJU-&PG`22Fr4N-Lf1F zp7d>ejBDIIC7AGS`W3fEqOeyNAd-X8mTx!p*t<;aA1a(!s5GxCJs@EL?26v2QtMvO~sE4!= zUt6xei$_GvP&u<=WzG7IV-6K>#mc^-pYn~0qp_%rws^(88mJ7xE#DRvYCU@pXWOu1 z{^?H9Zh|xmXa!$NnqimpfYUC^X;H?hS|mlN!UcJ*CpcddGo+zLDKi;Bs(%p?Aund378-9 zhtnI3kL0{oKa9;BSogl{vUGiyOzb15E{Pa_6iauM(B?~&3iDcLEXUqGFRh9ap18o1 zP{{D5!)(5fX<|Jq8uH~94pSL=tNGTwq%JWFcYzWioq~zB3#HKKCAt3rXJJj=iko6J z`RcqW$7OTPj|rF>|B6E1rrz*zdI*V!Qu~DTdz4J}~^2KRNz24ISJrS%_*AIYmT(WqQ(Ku)32 z-XD*pQ9vm1uq5~YQfLH)1}{+L$r1=Pep34-G3%=5!4g5#%^Ah>v;)0SCwGNgKlK#4 z;`_3~*NX0FTLQ-o&cpgiDItuqQED9V5CeD9 zzj8-a>guH`Vd^y(cXXS?sTM*c8o)`B3sF}F-z0#sOK$oi?%raS?IHnZ_g`?_+yI#(LKpv zA8rg#jruCyEZiNdDoB|@`_pF7qZNwOcl`YYHZg$ik^KqTt6+yWz!41`hdK}6SmL;O zmj#CJMI;?pInEwQ_Oqg=Ddn&}{;a$z5WSYetd$PlP)J{SwAfY)mvUl$hH- z%svWMB(lFtiNQ|gmzd13y_Kd0DLc4z9{}=U>(qpxA5>6?G`bi;YRljOae7!eTLn{`@ zms)QRXI(?*^T_G#My!NHQJtYh(DWL&I{=PFp@6$z_Nt^Yhz>xP&QwdEu05qEVjr7u zj>xzAG@lepe%a2+iaDd#m*>k-+7dT+#nR_WJe}8oQLNv=FH`SbV@9zP6dQ+_4 z;P`-7ghyBJ+`Kb-MF>H=p{csv!7`wFgtY z)`<9(&E7Nhu?NKp%bYHo*`hfO-DV7lm259GGO*Pa6D53YBAOX{)8N?c-_&~LOym*u%5A*0Cn zzEqN!^&zAr^Ta>M{0>F0*>=2y40$L_cDG%Q(7AvylMI=^w=zVCh-H+xUA$gBF}A3< zb5Xg2Zp=Q^1I|R%Jo>Ps=xLScgyG+0&fJO;KV$b?$(#6hG2U#+<&c>9;vMNdjJf#q zModC46fij2SLYpXOE|VR5JT2;$sB-ZHoV@A+TEC#K5LWS-v9wyduQ!$Nc`L{QnYNI z^yv8QzdA{CpM|nr`g6-XzMnq&`^BP4Im_=GTl^CLb{lnPZGs7QxMDnpWldgHiVHG- zWpY7LkZ4B8{Hz%v%l0#e%T?oBm;Z%~@~=I8`EeX-FY=_>CQOTQpkfcOY&^R{HEXfQ zUjx;D(|qMy>HVEgo_W7T*sk7hp~$n^+0lh+U)i^~h09_7mK1(niz7O*#ErUiKFZ`bH;sCALPSN3^Rw zvi}gPcw8@qEBZxSzAsksETNfXWfrS=N|t4!BM&(-wBV8@%an?tSlJ975ZI1lbb;u+ zAe7&0x(b|I%7_!$xgaEyV6Qnr5=wLeeX7^YmV{EBKy7Yfh4c3Z0NI30_I4)Ct9saG@kr>4XkR_=qGB?^$4gNUwR3BwTMLWRZ|32{%{? zZW2BkUos$R3#>E`X&3h%xkSV4fU4ZsSQzK&6JL&&@q3+@#*(*Ii(qIcP4;SfpGJj5fOVCcdgh~*_da+dcA%aR}sHfhzBPQ^Tp)ey{A+|`^oMBX%b{K@cMdB@7k zk_I8=SK{a|4=B@hU&=6ofx}{#65Q41LF?_c5lMfo`r~#FgU|di;&|GI85zp252>#6 zvVJFsc1@mBx+bBrYx1(hz1&}De8Uxwi=P1;E{l!ZQt2<}) zXSaIixDxE>`yT4udf%+p636l1`okY%g}SxaS&%btg81s{;V=qzq^{CIPshoQh%36w z?R)6A(E*=p-|;e!GaT7n>2WfcWI58`c~Yd_@Kl)pOF8gYgLviZO7@+37*2oIH`PU z%MnV4S#=7O(_&?pZ+%}Sid2W0ebxYUeWFKmcW%40+Ht(tIVTkPCH6w)R((#Px6%cJ(0BI~6^pK;-xX!-znCr%G9dKA^CSL2iSi2TeMT*O9!;8(PHgLiKwWzXC(i+d~j+ zM&$f?u6|}^+_2w>ANE{VFP2&tF$9fO-r)PK=U^4++8aFCIuZXCGlB3P}s;H+X!L)guh|TBEq2*SzG!K6DFwOy9zsacE`iTmf?Z5?!-2noUZc0qP-RJW+1nZWfu^XY$BydHiTf{)yXiRVkPPQ#%{T~_77HZzl@Z{ z1=!pac=jLJ|NQ>f_8*$GCvxn>+r|*N0^}$!@SpgzYk%wHAo z7X*r)=gz~O_rxDh9E$$YVLV|RWDkyVmfM;~T|eC_$*YA_0yg%Q0)L#p!U1}K)j%Uf zzr{WwMAKmFj>goYF$MyuW_zp8s6Jfu^jqdTx1LD8b>#kyC#-27m>#M6q<((Ak#l%< zpLhuz>M?oMWS~keefN^<;7y~^d#X0Ru)tl|kD#z`dcX1bWoSy0!Tz^eCmFpr-eovq z?t-`at`KRu+cEemRcdTlQj{$E3&lY7bc$b@g zm&dzYtEqAYK&q+ysiw*m64D5{s;Lf9r(A#p$nD=hxc@oTRL|2?G%dN<7vfEBs;L52 zQ~7mM<q<79qYw(sBf9el0N*j01@Pm~8u z_O*)+^iltM)@i!-s)8S~^0}%?V=I4fu!P3?@RiM>U;0-&YgqB_PFLk7T@}><>l+oi ze!D%q>Gtr`9x@1MlXX*t%IR0RypmCM5jZL0tEOUfL3jwV=o>YI^$OvDG(RxBV_K(Q z+VBn;P1Y##(=?O8*1OtMNbPBvT&`ZO{za*FSuwVEKBfAnr?5ZzlF!w9(Vj`YHy*ix zeSYb+DmBMWolUA#IHUc3vg_bLpRuo~N80aYtNo(aJwCGr+2hkN9=K%m@Gz&@-tx_K z7wqY?-(3_v>V9rs!O|u+fN=%8A$-tsZpir<^;v%O@X&KT&ryf}ysg0hpA2W|>5xIB z^?5HI=|1p{i=WFYFuVnwZ!+#XI(y-P8>0IhLgnZI$KXustxi9r)BotezC@Z~m*kFY ze{NYpuKewhNldf}lfQ8yc_Wcc8XED8bB_-e{s6{Uc!-vTlDE01wb+rIHiL;qDMB3+3K8WIZ*jr(ylX7te=3jkckPbNbn7WI3EU!c7iq|2-yXA-SKGrD`fcf|Q+!_0t2vsC9C3`OQbF`M^T(yMmB~VFY`%s|9^yZ_(94k|-T+uc94>G(W!$ z>ivFsAGMgxN6D+DTFGg-0>A?HJ*#%n>lED^B3Ih*X!fG3h2k2dw6_hnQNh(~yukwV z7jznNOX#r+aMwylP!5EOdQec`g@5+Gr_imc5g!polpfkLKgi$~MkEttdR(76K?;v% z2&cHN3~gaVUW*Ye&m6@Vo`)G8Qr2y7n_gqTYj^Pd)gGLLZM+K|LG)z4Z{q=4s`F$A z)NPyU+j&_oq;&c=-cIU~SD5=r>Sxe8+s=9WUcqzuiasMzwEL%w07qnU`hx*iDzC#A zmD40A5+pf%-QSn{-TMB11@YCawsUdybi^HB?T+QdH@JN}Uv;%jdE2)hk5``fYEP5z z_rCZB&xzf#trY%}Z|9#~zNl=jHu=6*b1c647`~!>Ut8{v9+}0pGM}HX&Wf*|6+J1> z2b+A?`kwPP`8Hg_(||nflBX&^k59|vQF;7Yetg5Mbq~i^dyo9w0zDjGJuK(&&IB6- zGhoY825fmu!S)O`0Ig;uzFPcSoe8dc6kK`AfGdwFxVQ`R-!}Da-`Aj+KfaopZGd9_ zLDRSMrBkW<(s!Z7!(S%bcMgD@DQ|Ti=qqFoL$wHs_ zvMX6|xB9Fg-o@A3kUgDUT%ue-4&eeZ2H z-wW=}{}H&(;%5$j^Z8rGpIzqGO4pVuR|anCc{E-+k4_s^mlFvY3Sr;%HH)N9`Z4mR z9#XB%ov(NBy7LYBrMa^CtMT*Gkk8NZS^P8=^YhgZKdW!yXZ@eJnRVFn6B{> zCR#b+CToIL{X1KFyNt628I;QzjvI3LTO=K{ktFIudQ&k!Uk&lI`WAlHuj0j*Nuz%J zw39~t;txsv;*ZJi4Ur#%+X|ZYwF%0XjhvHkoLbTNY6f-w4UzwXWrt^>%s7(8@xJq8 z7eo{8=x#O|q(%rdF5TNJtFDinNXr*?575#0jO0#4Z%5(2!Y68tUHYqYww}M`0`(Oe zxZ!gJGCT|pHb3(AjYp2K+){#{_47acm&P6VAO5@Zbo}?&KmS$ySAA9xcmE4KO@6%m z)?CFzYnY!i{^;i7S_zy5=3*WhpP zdPNwjJ;}Fz7VUMOc#e5~YlZhco)XSEIimdIh)ZIGf>KkMMZ4A&zK2B9wXb(z49!?E zyA>V~Vfqu$Z9i0-IGSpMP)||LBb3_ZAAG_0Yi!J$eCz*MwC7sCuc8<2z*gX+)Sv)B zdQR+;)k1jMR@`kkuYEFnW7nQ=txk*#PCC?R^!2{tZb*1avCHHVJ}4Jw#MAj_KzBqQ#~vH^_3_dqq54WkuI&q7 zBWEwJeI@*fuEXJ%drdz{(@6RQN!cVlGkC}H6)JnY^nE_&)A#gcL@xEl3$?XqCQ#@8 zANIZlAnGdn|2q$G)X^Cg6OD?D$`Wnf?-@V`Lo%fKk<3)M}XgFTjhAN^wcy?(U@SrkZACfYO7^FHbX z|0^Moi&vNxMNL@1A66=qVnXSrv7V3p(pepsEA}5EIFO$>p-ke}&4MlzAjgL!F&M-^ ztXyRnBcvG%()-BxIa(ClMZ~PwH_G=Kk?~84O1f5q{Q8KQ$N<8^&*NlaJg^=6D_4Ae zhzQ2>A*LjwKtG`Uzr2P!*I|DmZ^FhWsUNOst@x64#r42stmH!JzvCICc@>0(>|RtH zc-Muaz`RU$6p!$u&j*l zlCOKY%tuW<1pPT(e5yBv0&n0ygUy^k&Ga5sqBYd9bGqcW-n-$?CsWV_#l8u2&YS?J zj-gc{~@-z2B-{-Vpv26%~Er;FXK!PK-K`k_W41>tQ zCultgm-jmAIqAQncU!g?1UiYl#Fj?S!EFf=q>9{@*9(lcG`ipFc$fig+u@TtAQR-D z(Mu5Y9b%uY z5(T0PyL(q(wya7ONWZ1Km$X6fhcVqap*ou9#r040s~CLN^D)@)v)(hkp2*3sDfUap zXD@h=u5l&KlQ(?tjcU0~JnE}n!yEpb2r3Y8$nmR`k{ z#e^Hkbu?Go`}FYmi#g#3DgyI11=p_fNbrEz%mvvk@Ee3?cL!FSkBiG@|A6=)Hhv0FOSvCxVXYl#e6y zPADT0`wp?#ItX$t!oD)gm8wCS%L6#ZqZSI@&@qlHIoNqdZUI*SQVOXubioiDrK5=x z0^3o&V;pPZpYywWX-078$@`IoZ__C#?#FxEH*6DG!aY%Re}}FhY)cSXl0+Wdxe$Y7 zKvZoVp37hKJ|pTV0_REa9r?^@8ZUK^+a^Mo)c0D)h(qr{0HGmocx!@U|Lcl<;Yk=) z;K9d>*%r>?9qzaSFB=?spO4y|>C$ zNfZ^>m)hyQ--S{CE3CBXKvU>LNStnxEB1{{@+bVs+dY1r#Cs@Ov2WZA|1{zAFkSVK zVyJp;@-xfn#cMw4{c;s;gnK5Lp%idjpcG&cAoTF6?%sNW5FV=Dgh$KXS$gswe4ZEd zO5BJNK>zZ40R1KzXn6>3fS?`Y0^|ELo{x+VQpO!gBture2Y}{0BNk)?Zi4TkMZT_% zDU-ic?2}&QPdzoy75Lj--Mw)6x)l2)_(nTu0(@d$N+=O0giEjQT^r4Lb*H~=0e`kTt{&5C^8nz3#{P_1t9dkqewPo zuC>cE38HLt>C6>4@gwNefCk#st{_aFfe&z!!2+HGO{UqI`pkL$(1`^#=%bcPj_%vy!pFdh+Ojm zcfSoyN=thdZ+UU!&^w>B-}xd0!}s3ubWRnd8K9&|$}XcZM8(XH&lm?WfnwI%ke>lx zZ0aS%ht4*lS6oBrLv4svuwxiHeC{Fc2RsM=-7qe23>6mY&at|mBmnYFb6*2tQ_O!B zp)0QnY-2HLtPkAFoFo#^ksPSTW-T2;xv%gi#jmzNbLFW_{P}G4RI<8hWJvs?V+8*R ztqT-}p?}Jj-a8`#$^FGwzQumq@D?=;p{LXyD;EShsxV9pmUalbPgbk1FIZ1 zS^|q8iuGp_;-Ghn*WDZfSpMvfr(Rd!L7c*R8zcK>&rIG0N9MR*HvDP4mjRipP4fK- zf4F&HH0{4%hdC8yS;s_{Hg}}u{nBvDJL|;a_bkWYIs(^GOPhyn0l(Zalt!)IQt{`n z`VQfI`)Qs70jv3C2wr#fZV+2MqrKhPr2xTgVAFwUZv)`V-Yy|tKKNbe44mlq=F5Pp zc~x8J$!GtTkMS3%bbUTMQS~!lSAH1qy?1OmU|}cms&!CNOVROA2GLo^v<2z@Oc6~Q zsuzKp*`xuN1{Uy10PGO~&kE`dhBHIc12h9&SWgSX~+nMkh z4na^{-=TeGNYIJOHxF?IO5w2xizWu=9Kf`n zw*V)3_JTJ!rMR|9(*iGhjg#IFNXL6AO22<602;W78ZcMszpoKr^LroL3yZ{5O}@v- z$G@c+fAe<$1o@HZ2uy2YyLBL#QW9&j+{zlg|mbinRcopR(_V z-Aq{!cvM~%a*Yz8w@%*s7}XJXK>-`o#4Y}VNPr{sijw#;Zc5-aBAow&A;+Z$0XeY! z{C$s4mLjwTIEM|Y$v_#xc5y4Z`q(rncWXRHTD+#w(xJCXiSz6iNfiRg=OL>0#bvyo z;1!ZRlearmz8>PPqabm&N#-v}d7Mz4lxS{?m!2iz$ND1*WI_s%9+l&q%{Ku>@lSvWaU8yP9zFURenLBu|Vb&Z|g<`?zo>(+Ko_Y zI>b2OS+)$|MTLzha4onm6@$q(_sa09kwB+Uo$a(f*_q>d?q+HXKse z@^X?K4==~-1D-MbC8hyG3I#(Hb~wfrToK2(Lc6Hkwj^or@(SQf6G?xf%;i0bg>(wG zLlpbuD#=mwMZAPoPodL9D(S8rN?gcs0*b> z_|S8wr~1-sp{~H6K0e)x=LN;!Qg}vwxbT!H?H2lzM)EZu(7y2WK;h56BrKBzw-l*9 zK(B^jLPdk$qX&IUL%y;6I5Z4v6o6-N^Mdff6YWq2b?*Ap^5qbu@z0l@)}T-+fVmk} zOj-q%Ro29avg^|QCDJO5V!w=J8U8vX1JCwgCU_bzqx2Edu)x z{FeK^?3Hv8v84x=!;O_BkbzcVL4Mp%55N~2qI?}aKQ|NtddUD+}7Wc_< zXAXBL@QVGqA$ZNGp)nOIda*{B#V%9?gE|p(96=CHz-xc*H}JZWr`10ViwXZU;9QL# zVS~*c_>p-`Fys#DkEJKC$31bugNKjzQ26=rO@JSy7x?PBFZXtbyCFqLvTR7{ZIePS zUO-o-Q{!9#A>{!Whh@IQz*kYtHd%b-)1K3lkH$+56Xx*v0%W;BINzVR{86!#-4`G- z7&K@t>4DCBzg>OD46ZM3C_wAnIr%HWE4)8Gm7k&5e}~M!c9{2l z1(tX22x<@TpRbIhi|shm-ieSZh)oP${q-M>_J51|6F!W*Kz~#Cu&)Wf>;mD~11Dy4 zF7ofgxA60)zW~3LU6|iW0j~@2Ti+b8#H8?kb}KuJ-3IZC@!Ns%!ER+|v0I@%Jiqnv z>{bDGJKQhzGwug=KA=WC{qyjl3G6xWyN`b(zkYUmo?Jund+L1o@$`ERVggzreLp^7 zzH#CnMh~ImaR|Sbrw5)ygdo5EEsH#uU$bEn&!94-9i0D0KL2mbAHaZv`7J%U4lNZ( zVnF`V^gz@%&%eL@NPpt)uN`0dn%rq?86oVRUSLmLDCrC17II0*OBF7t(bfLP)a{0WnwE zB<{c3WS%$t3Fv2k0+`#w@E>d%;Ya2Ab}gTyt3yHyG1^(CjVUPu1~k|UWd!T>cpgOLPwwlJg2W<@ z-WrD%1yXj8orU-aSTVh8p*@f`8?bbwLPl=mY+Y+d;5-T9rMOz%)Juvi0Vsj~`1${x zm>Tkh6DW~Zg*$p!>L`G6OkXo=59VA*uE zu$vCZj~P^!qVfTNhA&Slc@=tAs1QXZEoK+6w%|g}5YR64+R`C0c6jru!qK;nbEB}H zHYbbMUcVqM*610j`OV<*)Hh$4lxt}$#X#NH?!!q)8zi^X;pz7$BXZckVg&Rh#OQDyuln%5}rWquHggu(8Kq8c}h22<)}2hW?7% zKA=Pur>{Vqb)Ei-rFgD}zBwFSlqxGuD`2lX?ys2BDfok2$bT5@bqD+v(?8_>M^WQy z{S|7~I;5utA>IgT(RP1D3~LhnsoAIlJ!P!8i#DtM72{Zw>gfc+dWhZn8@Q(Q&4YxP zM*{JNJnwCz!_v!c>IIA3KW(({R-6fL!a5_uC#{o+pu7r7NfTsDBdNB*+5ivcMs!47 z;2WReyA3*xA!-nbblM6FT_W_&kd{UGr6rOh!Su@)W7BTg5kK-A><1+yxU7pGiV>nU zvP~mNd5g40k^}}4)sc;7N?_gWf!akS zB0v?jZ$xr`<6+O2dlHh+Op}Y3Ujc|!=P^&^+VKAeq_yDco~B+ zE$L6;oyOBWbs;19q& z9@&Xw_cOMWglYhFQq*#S?_%0a#or(U4)V8~`Jxx_MW+lb+J1J?H-;2#8eBBvRsv%c z_+YR+?*=f_alQm%rb@oBp}n{A%oH5+2!&&3C?R@q7$8oS=IPg$9PW1wql^B*b?HW| zOAow+b?ITuoI!I~o*w$jdpd00O1wwk!UDor0IlS}qOkPWJ`D*n`*5%T_t>ygpbeZ- zt%F44tdR$?9_2cQ!YMx}hZ7P5V#!DTIcKn}hdkdI$t%nFOz15w$qVcQ=TS3I44HVr zkUI-z)gZG7-$8f?{Aypa*zXGG8-ytawPx#aYK`>l*6d^fl5@6(NEWT>r5+Jl!#9Do zX4pZR0$)sPYQ~}vG9v{;?x`^PLFRgV2irn6+C%d{tlyHv{VVjLv_dEGOn$`vyw!h) z3~Ti^sRYlbg}VYr-=vMPk%Z_FyMro)c_Lx{BCL=7Gei)MU<+i$z9I3FV^FTZa9DsJ zn`}g5bGDz~_k{z+SIduu2e8o^P{y-!DIniif3o}-pn=`!Wa+VZ#weirsR75Rew>jI z^^;0RiVzqg$M8nGTu0sVV@b*7ucwl38YlutN-hby1t6d>Uy=^_;}GnZajY<367AdL z`|jX3?WW@Uj^H=#HRHP|_)XJ_3H#lc4L%`G9J$l{Ec-!&7E9`B@J+S;qXTT+szN9~2EIU&1g_xNAwH03w^Di6k z-^_urd%K6Po2b~g^#n`jZ-Iq*(GmaV9y*KY9=a|J+S-=kPV=%OH3<6^OeV}ynB6da zKdDG6mP(}(iKHeNPY4%7fR+7%IOBVv;u)%Z#py5_GpF#QPT7_I1iVr?Y+Vw)Q27_u ziY2hnHtaKXqei5m;)uWEQy{wiGZefo3Ng$1m~M)>S;S&&RwBj`C=&pEUJ3t+FzGP( ziP=vis!7K8+OvA^UD6e{#mPbs`x z06d(9&~tp&WA60}Anp=41uaFSU~d-9XRnf^c44&HCrTg%71Ksfepb=|XPoC8B%|5r;|o`h>CwE zsH#xxUyhxPA&?@eTH00dCEtp8%)~0bWOJJ>BvGc=e`k2Gg)s<23zq|TpqjjLEPZam zkxlA>z-%;>>~{ovHWd4zF|x_W@F*xsK$!ORz2=X{BzGp=qA|YCJ{s{H+3UydSC)8+H)5w4B;ieZkgnDyNGCOr90Kz0IC|ZE*S-y z_yQ+Ufr&l1SO#E13wjWq+h$1jw0WYil$Cle^Usjs1gR~cpjUDeJ2AT+?bjutMo2j@ zS=g6s@lUMw}^BTNaa10 zr6oej9o=sILg6J1JyuVr!g~g7vSM!R{S*$I+xZtN=i{~=jyy3OC@NneUwTHv7oXe< zy?6nKGSt;TybQ;(5mln9MN%kdu1bYs?>XX%(=@SH+~Y;ciqlHCH(4uAlYGjZ z*HoMihrMYs9lzX!`eR)Q&Ei!{WKjMglU6|(emvF*NV0KM#p&U&?;MIKkPxe)XEFnl zFK$5dTSW^aBwZv7w(wLuYa+F1^HfYQtzSSd?efbTs>UyiXB4UADo%`~GU;X3OkrDF3cKpM4PhGs3Vl2v5}=Pk$L849v#w*dVReu&uViv1^-0H;I+YeXr7%yqIT@WdKcJ8s%}!ZAu5fItqB; z2+*G#=KX7rdDy1mcyDSLmKmhS$VD=4q#qA+&*jVbI+DK+Y7(EL9S)^g#1e=?69gm; zG?|mL_&8yw6jUJ^p9Z$aUU7z)xaVrLFru{Uq?CPUe2NGy$#o%oJfNz+iE>|1#`+C9|8Je zm7v_DEI0h6VurB~N{y^xQP!-Yl-)>ggZ$)6XsmzpCo~@urACux8kVHHt zgUmFn#<8pv`~_fCe8#Y-_Bwni_K^k182Ar8`@plCJeW-01_Ko5SCRaIa@u@ssC{^# z9|MRYaCCydOa7Y5m9?dEAHqyUJMj~V*kCBGp|D@U@cuuD*=%SdLuR%-M+CiiJ7d{+ zPJ_4-oUv4#;lCX>Rw5HmkU8`9L&lht;9%Aj2+-Uf5wZ={3#i7OyN>j$R6-OMvmu(~j5 zXxjux5W%6P)GVOCK-WB61RxPz^G!lLp5jOPr+>(o3!SZ0?r3%ut3Lc27T}-$8J~?z zsQ$??jHUHM&Yz9IWX@GjY68`hKsoGW9hN~AXXs2qao5j?xw1Fgy&sNIR6YYr#L(_` zR(#k=AzQX!m$+Vp?N}aD&`bi(JmR|qTRh4}Z3M{Q#Q=aV@h1hJ2L!?>&RIowvgM+Vt zu_FgpfUkES`ci>}v7ykp7YrG1HXaX*c@IeB>8__U9BTbinfHje3V%0s0%YZg=1Xj~ zCblcQZn$X%TnHOdX3&&<7mkVvGL14^Yr1-JtM?s=?v^}yIe zxVM%1i#~A410O>|I0zQ}XK3|61U;lLpT6EElpVn5AOY9S6PdsxWG5lmjJ@ZIGsA>z zhMt`bE1stVpi{+};fU%HOP)sVpoDn>xw--`;Y{@G_R&O#rzP~3E8xH(P9LWd^J(Fo z0el|_Qnm>$FuLCQcT%A!3j4IcgFm+O=DK%Nxiv5mfmCh|%=-5+e}GNqMZru(d^Vm$ z(q;+GlIbK4*A)VJnDhbrwzQ()bP^$b85ePIrHVg(8!kx=@W;;`mO?4zf$9R*B>z;H%^` zCBr>ZX`qB9@%$NU3G6#4S)#zhlmZL>M){LqT)mTzOEx-uEQwlzb|ZBW<2Y3v}bb%MZJK ze;K?codqwfB?w+m@bGF4y!%($WoZrk?S0s{g9v-@RR!(BN5ug%4+#hV{@|ulzPBd7 zxqxmy2A=-|Ez5==s%RmnAn2GBsRL);rE)ya(B2k+(gmO#b){zneu{)V zP$nP6atrW<{$M;$k=*5$Z-r7S;xLc`z%{_x;y@LS;qt1c1OJt@0fmc2LR0G*L^8y9 zPVS|U^uzq~gXzx(4B$cQE7^ecmGJK3^MN-}6xLWCCjR7~tqi=u%X%w)vuUzTK!(s6 zmNB%jNI(w}_hXAN?4#nuu}m}1KU*5exCJMzq(@;YTZ*B6GKcPkz};@^RN- zOPxK{%}9go($Q^Ta`bf`9725utp|haqv%2FqbphcJ>%ImH`+1Bf@s#s{sqzd{zM$7 zVaFX65r;O7W;m>AGS;-~SkvTvO~X}&GCOP9#??a8t_1?ner4e2)HET_=bjkQIF!$~ zQU-RwR-0$(XU6_L4yu&_T>uvm#ru zx@j4+rM?TiVxjDDDb8f6Etp?oD}t>4(L#*D!Yh`6PL2Qr9;aj6CowK@zHmfF5x$Xm zP$Vs^RT$?F=O<3yaGE8Y9EsA9Q2TVf2%Gp%;tQwZExvHYeTOOziI7`JHpr4Kc|x;c ztQ=XgaVVVT3MZ+2s`jvptM=m(#5+lEnNb6vg7Kp3K1)aw{teRHE>v#l#Z`{lA^)1F z1m$4>GS<0Xu{_ulLk3q0-4=u%=^JCSSD_Q$qYgvkhYv`@WECjQNQjmrHFk4o_Dcm} zuGYiP4{!qXJlku;t)WCYuCb5w#fQ_18$(|>n-lQ;OdEPAg3v-q6(+O@)`*YD&;}Ph zF@2yH4_yI$0dA3WgAC-5@2P*3xEmN^gvddP*yS`^`ipsKk2|4b%HuMsIG;OVC<^Jv z(9otzkx;SEG$X@>EOU`17_7)axDEWR`TTFGoa#f~L<098g}WJk^{_i(D*m3z-3tF` z*j{`;275LP=n0Gr+ZQ;C&G6&7i5Difcn?FDyx7`wdGF_cx#o+tW3XCN><1SWCskp# zC$)ZFiqi!_=p%m;PP=)1pKQlAUper*SHE{C^o@>*;jfo9_v-i1w^VEqKJeC{7k7~! z6Bq7a?1*ojK9bT$$-i}aO#8Wm2flrJlG8kR{EBZ~K3yU`=>GQUS^1Sw-@5!4sQj33 zn4X4mq~n?eo4!YlN#w4DpxI``JpWFNc!y5;szeWhBI(=5%Urs3eDeTz?2Ie!k zoR1#5aQK)PFC4!1_`vYN?R@Jm1H%WGAN%&e@WJ&LzcVm=FdVq{f#HMmpB@+(KDd7O ze=;z9aQ^#08W=vfe$W1WVEEwt(@zZyZyMB(#!m-^53c|ILE)kFL;d^u@FcSO@N97U zBk~J}M~vXZ&xOy@(Mg;P=0f@J`niI2Zj%ZpYOVX;e*?^b<%~yXWlR{ zd~p9+RRhBZ*YAG}7Y_fm{=(tmUz2{`pzy)%%bYVX|H0vwvwo&E(Bt_tcK*Qfxb)|nLjdU5i)BvV z?|0+>ekg0Z-k^U|5N_&Oy;2cgMMU3 zhy7%H=y#}F6dn3?@oq8Fg|^{hQ&KvbEBz3D{lX3Bc7+~dkvk~c5`+!GiRO(=ZZYV2 z4tsEamvh60(Sl&}^|<~7F@s9g{&D#~fYU?3a{2k@Y z-h=pu9(?V=Xg>I?zYr{7zj(oZ>>}eQ2=VtJ{__vCKQMuN_kq9zi_f3`9rv>o^TP0G z-D}HUi{_TUw)!>A+3{a$eX|XFeCj)bH9ITHH}p`R_s3@xecs1eD2WF zvLG$!{8qNh`H!VV=Hif3^RH_qaE-i+rORI|7&!z@k)ca41(S2A@L7lAl+`dM5Z z;#I@HWb!OlH5vR{ZsOf8xRplU9f>&c4&L1ecQoR(X=ia;-$0%g-oLUufh$oXPxxh- zXL0QmFLo9;3Hj9MW^qmMkGIa^cEjH_Wfo_He}e}3P<$Jo#{p%+rGET(AjzdNEbA39S>uTWr+di1hb+_>Dme1g(s|XMiR&~SO#=C1y&*pjpa3gKa z$=TeQPI6-h<0+feR zDVFxkOyKCgI{hMNC2+BV+YPrwaM!?X6x=$v!vr@sJAn%q+);4fB)Cm*UnRI3;T|Hm z+u)uexO?E13GT?01a6q%*1>(X;10}4;7Cmo{iMkW+*HBshWkpvT?6+7!CedY<$}8j z?r6c?n3TYg>NNVb!A(ll=;uQI^96Sg{O1YoLin!~+>vmv5Zqhg&K2A`xN`*eZn&ca zcLUs42yPc(HBxZb!aYiGH^HqE-0g5r6x?Zm$!Nh{0{0lf?E*}Ke9x8&x8P538z;C4 zZt4*CHG+Ey;>QT?^>CB+Hu`OcTO;^K16B^fZG(G(;Le0QO>jp6PZkPp6Wr;7TRJC! zGYjr$xR(j;X5^nLxa;6vD!2o1n*?_u>U^2t-U_!(aG!wNF1V$LpCY)U;T|uXy0xQj z3c;U4eUb!s8r(|3T>|$E!Ceh_MhfmdaL)?yA0OgBJLr$JlY{pDeg{qb-XCcLUrv3vSO2)(z$CFa8XaPT@E@fhaLJ85P&TCOT_Kaxz+~n+Y4? zsvIYyA?0i*!-^DrVHsruvJDUw1{wAIc(x3HS?WZ80;A;MpMx?Cr?ifC!?h-*hELs zu!)AsVH5qt!zS9<1)KVCSDKUcUjuCFyEfRY-xfL<{j|lQ{_tuM{#meP&cFF-m9hfNm-a6bz+@wEo@ z6XR)s1MyuY$|e4;n&D(TR)zKw58DO!PeS`^P!92&2H3>!m8d^m6DRzo+uwx064->d zL#aK~K1zpgy5LNBMK_cQuVnNMydoVfgeRnnhNiT)7@wnVUrk1FRl zxp9a`{T?aU6JQhkE{9FyVDdk1oU~p07%FGG5+R;ADKfVYQRz;kP)sI0`RvatVSxO|YGU z9S_@8?Bu2kcA{Xr$S!d*{@-=0lkxs6z@7MhIqVD}Jd^BFC$|W;vdqc&o6_TCJTD&h z68M+ECLXR_>ttg>)_Nx!4;o<4fxilHo=fpy8(>FQI@x@q1U8Kob+FkO^CKr4U$S6Z z$RD;9w(2e?8#|PnoNU}sl{>lRl#ieIQ#=5VbN{%6^cC4T%d-m$i&w^%xpU&<2ZZIW zUzuCtE+{TKM;J?2TAICKc~S1V<%PLLtK9iQv;ldzHe2?(u!NoYoBQ)n0qTHwxhd&+`Y4hS#FF6b+Z0pvUO=eaZmcMzry zW+x2&E?cbNWH7JXtl$jri-A$XoLQjY0x&)BZ-w0jKlwrhcO#4gWjs9GGP=B{1bMcf&jc^Lv=1Ft5M_U{1ks zi%@469n2hb=q{MH!JV5{ zoKcXII~`1r`-ON$uG>{wyfPstr!=>$jN?|3Pik?Fr!Y4;yC|nH7rG2S6v1zLaZy=u zVJ?DlInF_`k_rlQ)4+PU*@^S#B&KLJQ*#OnIqnJ30(WUa(W<1<;x#iC&U9+H+qvn* zY1w7Bq~@+kD$UKsrQ`k>GchMYwnE~$DTxUS(}FookSy3x=0+k<(MlR3R9XXWxI0;iVT8lBs0r|kK)p# zT#O8*2+S=*GH!~LRnC=Lnpa%9Cc9{5?(||$5fwh{?A&MOV7Ay_W?Ft}ZgvhlxmU=S z2TfYRn%smk))R1Xvn4Z&3fu+Rg$1|eE=VaTb0;GSw+c0K=C1IpT9sQGtjR%^hdaB} z?J1dwp)-SXkxvN5tfX%q6DWTgO99O|>HO@1GC)=swmB|2q|E81D1Bvi;euS&VF^V! z3rY%#SR1)p!_o@N5@;HL%k<<%_NLYek6!$3Yd~xCbODx!G%T&+-owIdcnh-Dd^N6D6)M=7gPRFX11HM^wm`(9B}p{FdL zYBJ4}mzP@#?r|c7Q&8?t@wF#*K%4@(oFo_|7Uj&%V@==;tjzhje5wBzmXTfHPAV>4 zfE0zfb62beA^}YKq9k-OgDh9X+(`wHlcp?KkKD=p=H#wtUKv~|Fdo=ckTV_Z%9Xt; zm-`XbWNu z5Rm@cc|tO{2dEr@EfB;x?lk!j{oY($luLC1Lm(~(@hJwA1)yQvOXQrnE2$AY%5Zv0 zMeR;-gUhb)xO1tlpHaDI`TkE>dI9J=yHKFIoxyL`-NOV5pkx``Xnd_LSeZMs7^vqi zEiUB#6oR|xchK=Fl(Z1^Q3A|57hGntx_Jr7v!$vQ3AbvACFo6ew-IvdrfF8u7&dDc_8b@N5LJyc!ZYzp8w+8DPHISA}~7S zxcRQ>^V4+vNcDHtTWg6ibN7Re%YX^|*FK@`>=Uh)P-z11cNUZaDT_-t!2kRI8$C3f z`&<^z?TQTJZc~PH+hNH4wqREk^4}|lBWzMQ=YWw}!nqUXaPC#aIdx|^_YTaoh;Z(M zF??J~|I+wy?mC#Ah?5Vqa9bER#TUjMG=_8AR)ll+BEK`);hgfZaIW=#!?_GmI5+E= zaJKJ8vd>DGL>Lc@4u*Es=fHq`nN7f_@1-y#vAqx`1%_@#&}|oz$E18PTypbZ^09BQ z3MLPx5at$`)i5P6#V|!M9vC-F8O#Ql^)TyTsBAJTVE#*g<^QGay40+TgaFVSKQW`b zXskga@nsU$q7=f1Lx3M{&|o?F(J$0L{~Z295uu#LgTme_atwL@ETp^c>oQt?Tt{9PJERG61NX409blf!jC0=tG(oRR5 zHCzdojrbc-n{0ex(8eznIjuy##atOo9?FPju}cxV82;JtDS)d8ao2N`kXNv5?A0R; zr7b|*{#fVA^HJnV@mGLPuEIaQ714e5FGYR&OQN_QR^MFYjjqD@+n2h!CK+2 zA6h#VtyST#hSPEe_^6prG%Jx{MeSOFwp(ClupXI?cFslnU1-&G{B;3h3lWln(x)K3 zf&EqEZ#u#=(4(`_2QIj8K%ETOX&15jyIFmTQ2)XZ$WBKp?25Adrve``*(gCcHWleo zkY*K2K|ND~dJz;?arvkx$Newrc=7!*6|oagb|LKkT*}xN^$=QkuMV7La`MGPd%ciU;SXo+JR-EUava)!MCA)0R)V1n~(OAS3 zVXwNG5RHpjE3WMVXJAKNEl6{*!A>zjg=4Cd{yxl27|ZklCYWWBY>rYv`* z2Mf6k4qIvNtsb->H^+rpFy`8;a?3(I6W1dmP5V=F*X9;R7t&w*#O$(}MQe+1$t|52 z?I}oDNgE6HiFw(DWw}(tz8nW84h;z{>!$v?+|<_;hYesZ!GdE&K_LO~YkOosbm|-Q zLP<#>R{K_CnJGBFFW)raXNo|eDw#^IQmP_Uk*X+Fv?@k5NfoP7sdOrn%BG4}IaSH3G*zZ* zi7HE#qsmtms!CLqs;#PO)h^X;)gD!?s!r9UYF4$V+EoEnr%I-ltCi|Z^%8ZKI!E24 zY1Xu8j%!*qCp2xEc1=Ljsp-<3(sXNjFtA9qGOb*z)JA9{wNct=ZH#u3Hdd?B>a-@U zO&hOuYLm4oT9-CWo2gx*&C=#*^R%hGxMtGXbn!Z;E?JkNbLrA_QiseTcPJeZjz~w8Bia$;nB<6cs2no8!ZStXVld5N&~&TTt2V021*q1jwySoic7{NA zuc}^kK-HjXWN@ZQ$X3jg{xy*NS3z;NZjY{3SEoCr>(NQ|a(#q8N*|+-)$8;&y;Gl} zPtz~a=jaRdZv94mrM_CfUB6SmTVJc+t3RM`)Hmyo>rd$0^_}`t`X0U1AU8x9q6{&H zScA@BGdK+?hBU(xLyn=);5KYDR2r%c+YLJnyA8F5y@msZMnkjVxZ#AM-Oy<`W#}n)Fd}Wn4(NErdX5CWHUKUDW){j5>t+;(Bw94G*z0aP1{X7O}kCCroE;E zrbbh<>A2~Hsom6RI%VoHNzHO|ggMF_V~#cJ%r>*roMKKhFEQts3(aoxMsuaP+PvMo z)4bbUYu;-r=2PY#v(zHDL|CFMF_u`1&SJATEh&~X%MweDrO@KG zY_wEbsx8|sJ1x5{wU)h>1C~Zhv*ozugr(imX*p%-u}H0QYlJn*8e@&M>Z~@a)0$#U zvo5jbSPQLg>qcv(wc5Jfy3@MbT5H{FJz#CLHd~KdPgvWnoz_#<9;?(Qw*kT9aSjju z(W-CL2lQR~Zars^8I*=dL$qO%L1i!*;tk0Lmm$-TWym*_7}gug4O1ohCPNl zL%pHF&}3*av>MtB0YjIe+rSxRMx`;*7;T(nR2faicw@5BWy~~Y8S{-L#`VT><5pvh zaffl2agVXiSZ{1FHW^!tt;RNEz}RK%HgYDJNok5SMVls>R3?)t-jr-|nKDgTrhHS0 zX}zi3wAEB&+F{yd+GDCS)teejO{Nx8tEtTtFm;)_O`KU~R+=Nt(dJ2JmDyyDHz%82 z=1g;zIp17jUT-cpZ#CDLcbIpX_n7O<_2ve1lexv*YHl+J%w6VgGiQ-ml$JYqHg4&9r7&^Q|S;_11FhR%?xQhjo{AkG0NPZ*8zPSzD~F);4Rv z+GXvwayFSwX^XT)+a}pmHj^#hmTYs`GHqG5d|Qcay{+7~)mCHMVcTWfW2>{(+Zt?5 zwia8ft<4s&b=fclWqfNAs8R*GG=VbXL7T~-P8aAi6BL>S8qEilmVi#zgHp>ut6M>> zHK5lWpx9lY**&1zI?!!BD7OK$+XU)u0sT_uv`=%J{to?S{g3qWxQMu@xR|)uI9;4A z&KZ{ymln4qE+?)q&K#~qJ55!W8qNejCY;2n4% zreIru7x=>xBcB|K`H>%6k zmFlhPYITizyLyLuw`Px~R&(*AjtqQE2~HLXUKR~*_OF6mD|lZUxL*MLuL~To8$3`B zN>hRRnZWV=&cqMw-+>b094lqx@!jI9S7~5 z0QI$l{yIT{r$B=}ph79=P!39r04+v=8e>3@v7ksDXwn9%bb>BZK$&Tv%_X4D9MESW zDAWxa-3ThJ1f5ocQn!OvcY<1XgI;Svv3o(Y2SBxrpxb6p?s3rW2~cl4=(iITe9Gtq z#ioE}(?GRLK({%d+(OW<8`QfI^jirEt_BTnXH>i!RJ_+@0tbx;4^0Lab%Bp&f|F)} zm*#_;mVlqG2S+UjPu&WxS_8hi1Dtgicl zZ5Q}$H#jb5k%G46pza9JcN8c*1~eWED%XL|b3ota;JRDEcWc0TcYvBtfu4In(NfT~ z98?_vx{d;6$AGqDLESpgw+$5T1dXSFuXcg60-wtvV*|WS!R%lO<_0t`sK$I?CuUiD zF$ZW?9ao*e9P5;-M6pJJqMua!ss8 zr?F{LG=-XK&34UBV0k^}WhXEflVk1`i}_Xx=2wN7Q&nRwRg3x40nD3@W6soxxl)f- zj`>k6W4or+?qjd@!s|(pk&5zTy zY?S85=uV8!{OBBukvWBp%Y|%Iu4ZF$EgO-W*?8Q^Mq_>~=11ZbHVzlEQMj66N-Z0K zo7wo=$wpr}8+&8f$jgtr{HR-vp08!&Z8IBfJAnam^m#1$n#NatY^`P^Yb_gBo6+yx zR=F+07G;aI>1;MziY?8y#8wDiz0p<;PQBAsYujr(U~9G=x1F$c+D_SeY;t>qJ<1+y z*V%3M6nmO|iM`P7wr{jo+qc_y+H385?Fa15_T%;w_D=gLdyid?IcpT=syfV5QygiI zC5}Re+p*D6?bzGUJ5D${9j6>}#*<^gk>dq^T*$a_HRHv#j1xCAKHM31 zDy}DvHuCB)2asd+5T!~1#%}DxSHjj#U}-F{vk-W>6Ii*I;bkWSZ z@Jzxo!m(I3KP&`qtOh@~zF{^79W^!`O;$p#nQowTx!Dp($Q<}jy(F7 z>dPMVWi0xz5aTHITQkPZQ*qobjyn!EBgYDldaD|ICD=2EqQG3ol zYDWLaS>MF7-pNA$Y}AzteRM+ChJNbNaTqUYq>N=V3+k^d)??)Z`m6_i7KJ{uq1TpR zM$h-!F7zAmgHCXQ{@$X#;_7HW6L<*PtH*4&0rTA^K)nT2*os+i8|J+M^ub`B92FOh z*~cV6Ndl9%%xFlqS{ms^dEf^PCF*39XYw#|N5Z%}U zlxk!exkjmp&_sgbqBSv^NuWCwMgtS5FJ9x+B!dQBnlw!&C^1Wuqsd1vmuTFY^`Odf zO{HclXtM@m#tu;EE)73Js?+Sn_;EnfplQ@J{gs9L zSdr08F#@ZyD6Gq3uriB1$GkBOtF$Fpr{!R!R*1Elo6RH#&H)F{)w;nQIg=D?E;&|R z5mMPlNsGktju;}ZC14D1a8}c@wyc&=r*jO z1K_<~7`eN#lIF}(tl8vPwMAgv7KN2t4AyS3SiR}6e)~_)3vE~dI!!74D#!r7!) zpUJU8i@+K!3ahjjtkYt#Qqy6rX2WXDiS=3vR%~flvn|1@EeGqiLaf}}Y(7wKtHk=P z8Y{T%Y-X^_wj1lXT3a1v2=y2@8f=ZWJs2VCFaxN^IMHBlv^Qb2Xu({d6=O!5z1<$b z$kByafizAQCy!HNw2#CZ?3?nza;(m_VqB@gtY8P$XuGgV+k;W&8}P>#Y#-42Z2*64 zQ@5)Fn6Y+Y&f2Z+QFEFg|N1&^6@+mnc0sb(e7q1VZa3E48wbtIcVhLu8|&{{tiZq7 zc=2^}co*h)nb<|i!ahnqW_u;rOIeTIlydB+Y{i&ggPGqB?5ga-zRDiV0O~LYtjF$3 z1NK*%Fdt~a9!o2BS=zAA5)f7d-PmpUci>GEW*se0hx8&((9#^4*rUjDklshUN zTd`+RgI$Xqj-A-K*zMSZ^==*ZFY2-CZE!R?ny~h5!CpoyR={nJc1Hl~;4bWHbYnHl z#r?ddS#8fmSrA&~JazQdG9}-dJI78oov-3Jg=ruty zuMHA;-F7K%mPX-5sSYG$n8Z!ZdnC+>CfAcwaH^2rU5OKyccau+X$oF!uSNo0`EkA}>*3AcG&xLJ~~a^t>fHSU@2 z#_in$xL0}{vcsK_8J6PiZWQiN>2P-{1$U-$a93(0?nrHiY*H;`k{Th4bOKU(ry!jt zhg5M4q={{iB2I(!a3Q3IDQPMo8gqhxBc&t{xJ%Ex2tG zfP^hclSks#l?u}2$+&GovgGS=AFT%W(DvZ2NdxWxwBpuO7j8?*Ao;3-M0qkKY_cHX zx*m6=YH$}|5AFgqK&reIcc8j(%S47dPtlMsH{p(x3-mj$=0(sQ{#=;sASBqis zADyEFWh3b}P7J7=?&COx8#y_`og9*V{BF)gz9&*MyF^?MQ@sD5yhm{^InPPB*QEMZ zw@m-jQl6J?as04uaeTjaA5ILo4}7un(&UT2HT*-_gSd46fixa`-7W;(nK|DcL~wln zNAEs-x5oePk-Ti3h&z7ijz`EXs7rD(m*ix=`7O>%2_glAPCvCT&_o7kIhR`nPzL4S`;)T}Rm4X(G-GUyBMnMxsyPyk03LS2w z4I@U-hv5`7V&n)q6e^ikjGee!LV7U{VBd|`jnU4uWAr$r*nRu9T8o&zj0O>|b7D&# z8uv(JMhy1kbkMTrgf<4!_(J;N+|Z#>DQMByE$Dq|6g0oI3%XyV(6L9_Ut$FPFHY>$ zr9lTwj-UmmQqTjlThO`DC}@LeXZm1zpcg<6od8kTy^CdLF zYUq*KiQTs|!*`C_0mLI;f=PVDui;Rb$=pkJm^&@i)G&@t19 zTlUAX@7Ipo^`|arko&LDAot(H2TT{CJLI2m=eb41^wNJf&+>H8LUoA?@mjBPa1!CZ zq{s3i^;pLITeVoW4brYax-9!SQT#ta2gi43KOt1($G5$Mi}Mmr%vF*VqU$C4Yc*`{ zz9>B|-8dcldYzk8xP+tUdr2b&*QbYqv`>)UiA?C4ppzEa{`t8Qm)`!PzR^BIfT8AHbbqx-HD#6P7_rLj{dcPNoYg4d<&H_>ti@W0i4~=?c?iQxbM0=b7@LGwfDVh3Utp`Pm?xOEI1ij{UT9u~6TuDU&CpCpa*F?FK7#YW*Uj&mPvS&ysAaU}YRhEHO%{V? zE;Na*vfOI%K&Q!lmS0*PvFx`zX*q0p9r~?4v3z9_LDS&X)*G#6>vZc3>m2JUoMCUa z`mH~<{tUWC9*2ezx|jYAG>U`)( z?zOmg;y$L6>u3qLo5}bN!MXJfDywRSYPM>gYPG6NwHb5c8r9EmZv8mUt^cBW2U@2; z#L0D!N`e{jwK$V;sHdrCs#mCQQQyY&d)@<`8oz@sjic&k)Gw$%P=BHpGp$(TaCU9R z+4X!)x@M_nt>#Y6-AvEbgP8F?h57EAnzuD4HDc{>?F6Qo`X*?jo(C<|tF=X1kM?fu z&$JIQUDHqE^!g3VY(Lh1ru|BLneHmxRHi?AI%c%F&?R+;ZnLgR_kiwU-4je>)blvM z{s`yS!}KHdV{v|M)+g#$K~mMLzeoQQ{m=D(fd0B?^)KsRh1Sp0da+@w;cCOR(A$(~ zm}6LKSY^1yP-^f&N8*EqM-0D%PR|z&uNyvK+B0z8)|Jn4G=>yY; zIJ+KUzRWz)JOg?)SD1^;r8u|#vH9obN6e3#{|JqlZHWac$8AS!$866* zQ_V-VuWZ*t8_hI(s(qe41H52^-3J`~fA;(BPuP#xUj~l8Ywv)J#R$iE#|-G`Ug;=y zlsRs5`~)1}QDEmE9Y-Kt@h<3}bOb1%6HX0XaI@m(#4U^~idz@=BS!uI57HHX1ns{9 zEd6WT7jc|Q!ZiU$C92U(Z~FDnl|B=C(pRYRRBKc}Qr)BaCDV@n2dv#*hF-Q0RUfNP zt46CYS5Hx!)ppF5ma6mA9`&7SuX>yML9EpNq<&WYy!sXO-=Y0zh-Q>#ELLcGjYE^F z$!~z7^_Y%+KuWASUle#2qIQAk<5YxvOcm0^f+xN)>`GIV)PH>Mir zL5J+Ez|tz?PmDh^{?fP~`eC0pzG{2}T4BF3hMUHkt}p!@*TAgBDl4#Q|(xY*}u}wcKI33)uPq^g{g(eD#p!DQFOU*YY9w>JaO2>uBp_ z$OcWf&b2PGE`xMXk+syi!FsRt|5+aaXZ@q~2srDzkPbRy72Ae_vre{I*i2$BGY;yZ$_6hc@?H2oV`+TN3X%)t?D#!;tV1LN|i2bPj zdHb78XV)hf!^UFQVyZ*qFoVA?cC2Q4G48}Dc0Y7rJmEO#c*^mn<9)|zM_AlYX!g1x zP7{|9ml~G=J%%fo4#Rc8;{Sn+(C@)({|GF8EAB&HTVcF}Yh-vFrMeco5f0Tf;PDF8 zEvnm?M*4ez#lM60`Dawm0gpdaeXa_Jj8FvdSO+XlQKzeKR%e6Lde!$r$LB8fZ@_7v zhPI-&)$ghQrViIAG*>g7g9go9Xc=6kxmDxA4#Rz#UjmEwYo62`*1V2=g-SfKJ8Q5=d~|sU(*~VPx58YzC+xQFPZ;TIv-#!azp?8dbGkyel zp;6$tH-P6FO%78AIBv0NgJ~1=8UMockm)hgpG-$g&zRnUX1gyIkQjQ*e9-)7^ItGSc-#CXG{KLtT!9(FBuj#2mSvG;C1wakz~mZW z@*@nBTP&|a`{l=$&w$C7S+BBAWqOCFLr+;Q^po9z8A6ry0qeuoCzuwp=ON?v5oFwk z*+$yN+NOf@CNX_byAM)sk7Azixcx=@>zE~+f}C5gJ<@SCW?~kH!;$D%=2+!e%QUW(&LuKt&O`g?rx@W?m=kbdO4C-`RdkJNtkL+anE4>HYLFJZ^*|F?JEQC5`OwlAdV+|XobQj@dPuG+P0SK7N# zGKl0P8Em3R2Ak9*Ns>V_G)a;Il9SL#20@Y}ktjillB2v|eXZx7<2}A{-y3(_G2R&O z{L^E2pxL|X`_`Ik&biil3}2Q}$)e;|6va}iiD{WF@VX7g>o${fyja<;>{CvO{T8?2 z#$sT`igAuTYBja4+FER^=);zZ8EmIm!#Vy&J*8e$?}{B1>0!Z&!hr=i$5p+py`8*C zUU%x`cqUDL&4kH=oZ}z7cfC)&p<>o}9;Pch+WXoES_|z%&hQBBb1`*&1(VhfGi~EK z=lC}*(wEg&NKAUvnF`*RsgB(_#{+zy`{wypiYef`n16c>%r+GM)Q1({OWejtlxt;&B}@p}QSZxkoXLdjaS8EB{{N@dYuV z@u5H3$d2pnZO*Y_)G@ujtIj(JX zG<%psL~rLboSK_)Y92RFnLlxg-TW4XKBPaZ8cgUn+a$WFGcoRcre*W};jFi#FK_r5fU;ypOvL{CRg zHxR{S&jK+?ZX=G(vp6;%c%FD(dvYiRl()t7*LUH2KZNZas0>j?fhtxgTf{uq??Dy6 zDe2WrYF0Hjn8M-|*JJ-m3wEvy<`mCV=cEm)NLsOU>ZT=*{OX?k(+Ayw%}x z+ju|nc4LC-MDI-RGVfaNM(=j-X=VW5^FH^!X8T7zt(c~1LG4|wn$`xcq@Oli8-;Ik z8PRwr$oG5g6t2zZxHhwZD)RY!MB|!bGFls^0S^cH&h;(uEdx~?@|_dY>+ks@z!drQ z4*qn;Amdx(pmEu_XFN4BiY*xysI)fj-`-^Tspdj+1yz%~ci|o}F$2EeQkG&>wHjJ2 ztlnbx#X{?Aviec$f_2?`ZAIBx?NVZ!LPPsQ`y-}sPU8H0ZSUahToAfMl#`n*?kE1$ zbUt)?IQ=*?DNM)O;T#5i-gaI%Z-G3E2g(I1iTT?-0)qpim|(Rsupw|b@MGX=;6)&u zoLxMq1sy!St%DtdgM$l#%c+Qd4*u%aLtTk)V$OCBxs>b!X;zclp%f%h34JcllQ+uW zkeh#@3JUiW^i&2}wxjYHO*VET*)H<&kIW8yik6&_C{|X{$;96%=g7M+m0ap4>KOHN zHs%~wFY`8Cl$a9-?z`TOAj56Exk#oq7uTw4&9x-_wd2_Iut4O^z0@c7sZa9y3NypK zmahquV|)2#@OHlS?ekssT?g+yVP11)T?6NRKwRmq&(!DXyYSIop%%HPKcyN87dtzO zkR3gK12=6|e@%Y_e{-;27k>|bKPr>YsGnzm_?G%t`ZrQXpY&hvr&E zP)bfOmEb)_Qq{T{syUUyB6*8^K)%Ae3-c5s7gYyOb)_m8$1KRT=r&h8zwzF3C`A=V zsY~zRO63H;>Z?i-?q+qh6&PuhI!|3m4f>nu)g&xVX>p)uxhkvCS;sa_-SxUqM~hE9v$1PN4DW#QnoeKz|8tiT9WDS7eU< zN4$v{{^LaVr~X)@n4!U4B*9pGZM-nz%%VKs7Unqfx>f?Q%FXHGA&Q<5BlNT1IFS&naUJMbwUqFqo z)i7^CqS7>;&^GV4%xu2k{l)tPJt<66w3=kpe(WU~qs`a8&<+xX?rV>=9KJmG#>@NK z_&)ZH@J-}t{dJqhNzVCgGHGV9QK-DwCDcu95t=Xd2OXoDxy+MH?~n2q^_TT){`WcE z9btv0kTqB175|1A$ETQV`~dWq9zHCq*bP*Y8OHBWc{ew@5!1#Rvy5fNMq>vxOpd?o zpZL!msjbY9iFU)tpkJ5=z<-g6WxE$~ZH2wo z-U_-qWdCSCv2#0Bnd#b{nSa}zb54Hh4?p>?RiGESZf;;rU}xZL;109(+zjVd%#Aqj z{eqK&OQL~p^rpHM!UoVA1aRg#W^F6;sOo_rMN^%1w)fT2csCwq^3-*_Xm ztmK>GV1Jvw;B?Hxj`8J$Pbuxw1jeuX$E@prc1h&a4ZS=!VFXBii+)6p^k-(ebtzC! z0ym)sQE3cp$s+%6%%Fbl_kq)ss55uM+od-%n(xBYePAY<^FiR7h%>KD)e2a>m;=1o z+C!aq!+J=as4?&P6LQH;6z+5&kKEi5*=fhqUdH_9-k;3Db? zE}{cd;`@LdhJ$@es^isTFbwv;Y)t#RnKh@0OmDnzQ;Rj!6172O{k2T|SBOZJeRY^X zKFT)-R_mBAj^2yO)KJIiw|Jv_{T5u+5^ANKR7Eq5*G3E*INmoK!ie^x4nNO1E@RiV z`+@9I?FFESh{4AiNWBj)b!GK{Ltl!^2cJM%2`fe7Ed|P0NBAJprre7 zFIlKq6W|5gD+iSqRHdcpRY~FdHH6I@4?l92m{CG2$Hs|CbeZVzaa-7$6R)?^PwUt8 zOd@;r^Z)4gfP7mSqq(ztK_j)8NWIZ4ZfW3*Q`S$`3(Ic@ne)BFE=2c01L9+nGsKza zta3JjG%q{9IO)Nexv2PqV9e%3%bDD_0rdKO5xn7km!s*WOZ=$DKE46+Dp=6Rvc*lB z>iKihzsUsu6y=7}Q2mfMl*wBXUeZBn|9~oEuy;AtMf^YZIIYw+z~;n@EouXOhkXxy zFX0kv=ymn(`h52H?Bgvw)blXay|;h4|A_yD|2bGI54|jFjW9OjI3oU!We3VOGqZKt z(y1HkgS5xn)4)oXZ5^(@9T{{0%-l973>SvVw`vjSLZ6cxP4)$P2M3B=xhr@mc+HI+ zm(ojT_OZt8$E}~jlWWxWl?Gp3zmak&rpNCpxY=2OFL8j zRxQRiuEOO0liuuFoK{JjNVUI9`(3-s_Y0%y3FwXWUa+HIitm@t@8gUm`G=F|*3rLn z%O3`#R32{rOW63kMt(MWq?n7%>TKm&WOcB+*w^iN?(JY_CtOV}p(_jud>+^c7n75C zSTUFw{3tjT&Se!5@f3Uu-%671r~<#5k*51erfoBEaTl$o>^T=EKy{_$(ISve*JQa+dvuch%f5&?a|r z99s((z=a$VjNVmmxRy!FK{Paogq6v6^|WqUZ*2gWZVV@R26f~Y|FW~|=)Y`;dP;`N z0Y~?>zCkys`cnKi{0)r{jq&giLpawy&UHJuTz6mG9d?`i=Q;On?2h&bvP(u71237S z1t(&(bHq98TzBqpUzI=;vdgD|Qq=tKz`wSo-X95T<>KIj!Q*1{SBSKUXO}_FDCZ!f zR2Qz9-tri+BWZ(tSUyEn^i0l7WnTy^<>G_3o`KwnxggY%g}lTRteQ?8=4;Es1y zMl16k)o|Ve5r;T7wlVJB} zQ{`-f+rI#B`r4aQdt1|~ZyIYK@r3(R-He4Vb$O=4R5lmb-<65_JU=L`94u2aUn@G& zdQqKEqc&gT`v$J`2phRx`!ead=|z+OcJG!7isz#;6n<4{90h*m*S&#&fOl ztMSmtLM1(#n&(S6c(>k(q}nMAlWBtky7R7PSgWk>iA7<&tp+gcz2MiE+uwqDf3R;+ z6B|x-r!`S&H}B}4lbsqy2~?xrb$OeSfvvcst^}S0BB@=9;en_|ZR>6dS}D2^kN#sj z$^&$=5UC9Btt4o!65WS8(QU5Fzj5w!;b5vtM(RkH;V{n}suj0hy$lK{4&JSyGzQNN zSH^PwH_=geR=Fkk?tGm74rnl+!l!>joOQ?Yp6{!5SLOAz z0Pm(S9sWEj!5dE;&u4(L477VtxuZm?dDN;zzAnUr^=v=ArYh8M-Mo`fo_4__MT3RP z(koe)Q~3!>(?)pDM_OI#wtm#qt9%c9rKkZ~>K(|u3t=$#PysyG)A{qjR*vSo?}Tf= z?~mfF72w-D#(SK!DSZDeAfMmBK85MDtA$cE?E@;UDN zSVzd#w_#_ZVP|Z+mEF$%7;bSk{CFz7;?F2L&+V-27^sZ8+sf%p)#d7qyQ#ZwI*(Bs zbHcpTM_>GsuGpO9!%^h+CvJ7+_PI;5IcJKj%b&;tsT6*sR(K`nLlOJ{W~38Q;4AV* zD7$c~fL?|w)7WWqS*Z%IG5f!De{2=SXH*gv`f_J*=m`IK z|1#=_Jt%e$sUEV!8+*Ve`6*cHj$Bgx#e?Zs%pXY8wXE;QgWj^dDZ{vamf~CM*AENNC4z4E}pq4TJCPbFM3A|ENEq&V3g(^h4rll7FFp zJH5M^(UVk|%RwNxgKPx6!CtSzrom2^ik$5E>=5~iyMBk0UBXh~AbX-fghdJMSnCYJ;!>WD*0|)U@_eHE}q`wz-y|hLOi|l zVi#sV&h|v`gNuo-(9`|QeU7z4r0G1zOfW$TN=-w#h1{FxIRk!sySx{6+ui(>6D7PX zSic2K&_Lk^UE$eGR4o9OuR%<8IlpP>FQ=%WLfN|fj@kq+p%0q&W_X~JWV#n>UaF~@ zJn42k=_M$GH>i_~liA(@weQhRXb*^?UaF`nFbN~z zG7UE2G+a*(acu82pxJI9 z+x>(y_E+#-3F3P-)Pc@K__2b=*bSfhMss&1TfTry2|3|2I%Czc8|~L9;S7TpK(C zz3~i;pnh0jE+b?7YG$&^qPW&XXFX_Tv2)u6(Nt^mX4~6?>`(1^M5eQF6j@PFJ#eoT z;a;0MeR!i2iBAiiwaz}Gle_EapPf&&QB6k%76w+}NVy$|4rULQV|v18FczzLi}&DJ zLqul5x&Djt)Iuo*L@R4lu{J`|u!r;d)ysJ5=Kikma&w)$w!j(5v zdw|I2svDVVuuDBiU3>=i>AHG{J(@4ox4aSF9DlQ8{3CoKTbXWf)tesGUDm2I(I6RQ z?&6hW?0$U+Zp_1d>jcaC)EBDfBUiU2S3lQF@Fv=m4JN^lu7gWD;eSl@%1I{BVUTJX zb*VzTp@t7J#u<}QU$)`h_z^}l%FK)gZkz9z&DfdLk(>6JIfu4dP5>T>RQ#TF8D>Q+(vW8s_Cy0ZW@M63{$&QB;FN^;7K2D6T zI57rLA*Qlx4@O*)l0&4v+_!Xc0r(FarQ`z`@j)rJC9U8~z%dxhh$FES1y_ zSk)ik3xDIDdX>G^r^_VwP#`cL!)X*ME6}}W#*E434q-}C? z=M_|EQ&VT>Q+V0+u-Yf7!5%r81Epa3Y6LnE`wj$7p~S`pO9v|j+fj)vqYAqTHya`? z<++FQ+$+$pFh%|fZ@@Jshs1f_Wz%wNPY>KIt3BVMIXv>XtZeQ7>z#tXE49_ecv(i$ zPcVTxZ2JEpO3OqgT*=#n86tx~!Anu1P7)`dgMX&`imOl)FSwgNB`GCD zy3Kn^FJ}_Ijs)t758)g}poMRM4^%v#;Mtf59)9l0q{QKctAeIIj)=BaIUpvtyntya zplV`fOCr_Q7)D)%(z!PpiW&&%{5l*Cs06-SFo}wU=lOS$)O0 z5ni6Hy8(U>Rn}yxtPKJy9P?$@>*z!D^=CiF^wiyV{BU)-;N7b?QFE+?ye zCo;-CBHJ6P-ALh}EJS9h#O~F4Y+vnZOhQ?9ojx0kt-OmP##uDLXW-r_JQ8`}3hPjp ze26=ux7m+OGmc7aKK$$+-p&a;l#k4;;JCM8F&wf^b(EnGtTt9BV%>Oa>L1$BLDZpZ z!ao^>J0gy|RT2MWeH@fi>|+)*a4r+8=T7Ahq>9d=M_TUNQIqn&2q7kg3f1SqLNYHQMnGJP>CBZD+UGJu0F+ z;E$TbghqHc(gxc%I$Q9o8 zXuU_#3|;TdeKJ`-GFfHLM?0-M8q^AHFCK-LS}dxr<$DKJw;i?TM0S*~_gxSwN-R9; ze`VkJzitu_|Jxmuop9L<2bt{hAEIu51tN*X)2QJRt3v(W5nUz4SiuyY9r(j86J=x3 zR!Wc&>ys1v5NjuyD>)w-VDLYNFByeKcm@9crInrCjWSuU5v)lPNPnumieBwuers!QBN$Yrv}8_-DteO5_1c~A(qF} z+EnSTOjc%rCpX|@&4Me%#8=grYARVB!ChXXZUvbI zL+El?z3`=ef!}XGZoeC7DA{>?y01Duzpl8Ve)45yPkcU@sy3jJad7r4+4KG_8U*dT>foCr#?$X-AsrRWd4~6Sn;{aROPcsWC9a>6$ z^KCqObx>12!c#iToGiQ`KbSX|+7-cVRjqfd+Bis)tU=TPn{eWNM_heiMc`j5K^;() zx6=`J;ZtJkdfv|o`x@~z9sFZC)cWSmN9-pYg;O*I&ix2@@s9Jr$qF_p$Bk@D4ov1Y z&PUZf82BFda)w|Gc%(vbOmIH8@B84>pma1u>dE_wLr)kfFD4W2V-N3LIWH=_j1RdI zuA*fikF}z%y~ewV;-1AT)xnOll+9=-7vLPTFcq#f?89O(;|299K4KRoHiEn94WBj6 zJBK~%JE?IqYXRO!Tl{N%c_XvIg(tMDAj7A)FXQlCR`z{>nw1R3pNvkq-gf{M<(BUa zOm{&Pcn2P#J@wc!-p^WGmM8S{GF_4FX>fXZNotv@_|L+0(l#)@@D2D=B$!Nqa z=`WDuGFZh;MAmDlFVSXheCaZNou<5*QN+^KsOkr)(r%b9OoRK<$m&L2_B|2vrB#?W z(T_kl_Mc5)aUWUx5nagflFNw{axg&OV%Ar|^pxA-i=VudSmB zK8sUEx)dV)%rh@doU1KzT0frsNw|cJL^qZA=0>;nM7IT?^$oZm&f-LjKtV4F?yHH0 z-UiOMm$D1a?0a0^m&tN*YH2)&RdCKGfiso}{I>(_egVXu35QlI+=X9LX`LXVh2x5K z(O(_V-$Evh9Y7_1p@sM&d>))C6?q5k$#cW-W}l-PzKv5bRL{!&sKc`#s?PvPY@?n! zA)F8SxfQiU1+@qsX9rLI2rQ07geqhBh*3S^7YE|}TTEZTDzM;j9_4%7MSy!}G6>x1lv!??`Jd74jyW)jyy;-UfAK;cmRc%@}7- zW|Qnn?!^_{{*Tam%i;2`Kp7>h+z#xDX9 z!HlpKE&sA7`@f;r?S6>xyZle|y8VoDc3ZwLHfCoPtVw0jMLUkX=xU!19BWG@3597b zC+0W`K`u~{p_b>ow1$@&3@>#Z&y4FWFsaL%5=jSmXK`cip>lS>qxUHrvM%Dw3qg4< z;4`?V@B2FV2GTE*f~Ryp)%dTzXH?^HRCEdW_M7RS=!5lHe{irrp((!6V{k&3qt2_w zq`3*y*1+Y378t z^`YXlr`8?;%3J}yyx>M$Ns7%Nd>j(INI|-BnhJb5N?r*+atJNQb)Lm~>UjE5^F>fg z6ri)bB2L+cN=vmj9`4cVMD=Spk#FEc4hW~lPr^C)0Q4bw!qv z&P;tAPCvqSRJDU3%2R^la^2j|>6{5e$;_!0&`N<)Tqj{w>W@~`-x4>gHCozW-sb{t z)=#(te`T&?s9?3+8?{Yvz4_Qtu5p{X;ldt=4`&Zr?;~`y(#9##(Gp9=P*C)-^fBka zNVy#>cg^-VnIpDGZqHwpz{*H^V@;< zP|L=$t@02Kr-y<3Ac%ILyzz8AoyXlL#b=OM4JkE}&yvF)$`yz{MR8lKR?e$sQLpQ< ze?EoEbqCx-2Au5isEf7WhCW2kO3@Z;%LN9wqvgZ#Till@_@QY;mc{tGj))xevoA`| zNgZ1d7hYpHqi#4`X6TF2caG^d{ke_O;Nf@i8GTG8I}LWo?La#R8oq%uHw+XOkGpHK zSrAukFV5E!bU_#4=7dWv>AX!Yx8dIU;glT+v$lzvP=52scJv9qH%5z}@3E+<|dhK2Ou?Q8{q zJc=lJ(c{ivEeoO$5ZgcmLn%jM;ktf|2Z@mj@|ku7rK0v>!fodWaVTAl_v2iL+6r@fcX^b`!i$F`K&xkvG( z==cnVP)n~DT>g7>6m~?tng+t(t6T?PmPD8B0KQ*O^t;cu%T1)S`F1KUs781&=7JW_ z`||3lUQbU%H5o6Q_d9W=9M{i)(+l8({S=0MCbiQQQ8n2(FFqp&?ZH2L=ac;P#nce zs4=gh&c8*Ej~^`E4zJjB&sKb4uRSuJl#iGWVyczsg>1&ej}Gd`Fmy>odDn|Fo?JYS zuCon%&+NFu3*$N}M=f*STV8vQtb37qB@$P6Uet&Y^do$USJ>^RxlNrCqQ`Qlis8qZ zCi)d$P@QD+=Z6XMgL^&%^=w4zJO=aD0B&s%y3h>VIBU&a!rPF=Dh_v3jk+U|%3}nc zuqNcjfwtoC1t(;XO7NqB@Tk1BKcnLN#>p6Hh}x#WEw{#}v(J4VDH)_H{HP_m_s*l) z6!m!UCmg4)&Zn3-OW$@o>|hhWM{&tY{%OqH8;#1i0R}M^kNO&)?cZcbt20P7_&w2b zNvgn>bos4N65!FQFejy!aML$MV{6I0llEk~uAK3{{N|#V?k;L zN#;kQTu^mDofSDt@A2&GQ^_|&v-^-YuvN|P4Zv?Lu=s;VGe{NqG27E#3B?t08vIjP z__mj6N3<$nNyR_Fd|{2UOVO`eg>JI0Xz8Z{4+8ah3UkQ$)U}r~h}}e)VUrfhCt!~1 zQAbt9i!_6dEiau}Bgp52y!(lnue@$=RUK;5o%%_CWor2{<^?l~KBLjp<8RSZe9ZpV zDZx1`fvaZ-dgeU3cXs1+fTg^jLF&n8jRIACK-^v=ufUaefwT9L8oCK5?{liSlRW*R z^pN$Z-)5(BPkFAi2lWl&TYs;%^Um|G#7~$3&CBh1DerT0TWh*kABe8N-(h@0;R~Ob z%kgN1flOhprEUD1J8;ZD<(p-uYAj9NSOZsNM`G(}JSc9r#52$Do(?c5D_~Ey(og0p zY>#;7ah&5ibdb3&;obCi#h@Iw_Du|;-LHBr<{MrQlw=>-!7g4MV!tcFL-W$g| zJc(X)TPcOhsTsKWC~9xGR}-G5`e3it)GxzegC@Z4uAyi72~LH4T2cItACeoB(brcK zfuCq`)Vt+HE=hz5a{V*2$&TCbFJ1B7!A5|q?Zr=zjNvP!T`EJX7=*%nevR{7JFgp4`OzP_WZ7-x`pF<$n*RsUHr@h2W&k@Ez&Uh%=@MER2ktZe!LDiV zSCR|ElXk-Svz=~=te)a{0Q;l0PZ8eot)8Cv9Rft)w$$yL)V;j_%bfkMxYe6cdcH!D zJI0NEtcUq?GsD3_-)@DjI-I(16aAUzi7H>fJoX~H6hyPBgje^h6HcC8LJ#?cKm&ZM zw{arzd6Gk=di==1?1E;nQ_JOJP~JrENcBHt}44aRO-)Xd=a^$I2(Tt){?w9#D=cPn6%4dUTX^MpYWEmL~R8L#6BQEv6OHv-?-z zsM`Xv`2i2eK+(%O31654o8FcgADiguKME^VD)25Gq1(5A7gWPPni?uKiXEt3heE3VD0;ja}%)%=+ zpZx$;P~gL@X!cWN6Mc{I)=3x7+z*vv`O(pHLI2VWkoCg^-k6EoBo7@zUYPz$V2!?H z$(_XaPTsGmr9<&TW;c_qPp#=FT3_PRb-SJJTW_rVa0$)q3u#(XY?$QbcP9}a1DZ## z;@63JUlH|2nH|yp=fftZ;>oyZWrI~;?NoA~eSDZyh97t2Fm1F?55yaV|3Uw}vR=sS(s<~2JLUH4Sz#FsD;Lw~1I z+2IZNTl*)Iscz!3s82r6V&${Sp%=CmnLzjulhZz56tf}r;Bm`DMt;{*4ORR+yjG;> zsVEDhc-K2aFJ>g8TIM$g!|_BoL)jOwFR&7PBuxmD^72pLm1p7L9;dGZ`(88L35EQ} zl(hfPow`+r+m&CRWY3~Ut(ki^R)+{p$l;Ep?kE;es7YN=7^xNt|7G_QVP8jnUDPj;1}^vT_lg zWI3gY^0W5^XrYi{8Wq4?Nz9#EfC7Ax3bg=z@hwn$=P}XYA`@~7ScLJ zDyP(ja4Fw1%OcWukWQ{9`ZF^U9bzZ_Xnd~wVNxxAL7J4I9liwkSOMZU5O>N+^Wry%MEEhUNP5Lm4Gjk{>F2(_}Uq}d-a`9ui8siTq$dKl1eS?im|oB;O4iAA4%rbNvC9Vm0_>6MS$girIer2}gPMXTS)T=;XV} zB!~Ot;b)u($>6~q4HuZo)tt`LqtcsvzljR)48P}+>ds*)15abxYX0K9_W_!1%n#}`9q@*#PnTFN^UPsnpED?Qo@N@NqJ zVvI)rec{Jl%lTK(9b6T`?S+286rLQxyy!}eQI--xq+{?qtfnp{vet@_KI5aO!_(rS zHm$_m)Yf!{egbbX9-eF-^HR6Lm6<{-c&aGy63wZolW=17flC>Hhy4Iv=_WR(m^Eh9wEyGqAVA!_mQs1K#!t_PtMUh<9w z!#C73_|M@98Rtk{BSgMFq}(+=H_zHqa)gKjozX0>cpkx&lp^*nW0FlixY+V$!{AuX zc!ao%OJLVGs&DzTStA1-aDPZC5h6Ek_WVL6GfP>DM{OitvtRrdt;cTsSe^FwO4A*F z%2Unvj^2j+vc-~8Bcv4m?_O{@Tfm=LVdqDH6-p8#me4!-Ts?@RcP6ZPRyu$eGbySG zeBTMb$t0b%boeIVc)o0wLRTDQttT$z$6scE8yeUx>_m8$dn>jyPW}U z*d}AwauRU?_NI$;8qSwhxNW~djW`d2`-Qw;8x?7Q@c&6iBSfqX@J<`k`Oq7!=u@V4 ztij9o1THE9CZz_PVN0AVgYb$^#l5nGj*w{XY7pl0D^%OupvW2c>(BYK8PcV+bDL4` z%Vwrz^qY|=I1^y|r~6&k&oT47Rh+tFEwiKs(uXub;Hn70|2&3&NC%f^`Fe2b8{&a| zsQ2UVz4WU%>T@$`Wf~DZoT(GLtm?3aQB3gJ=ago$)U7~a+@y4PO9?#d59yH{z$^u~ zV{0UueIhrsG>UH)BOX`g5USaCM5k_fwD1L>?sPcs5(DmBxkzzuv%;UX^EUA%;z55v zt(ObUU5bwsv7{!vOjQ)@_PB5!dSBp5j3z^#17qISLhv!IV|u}E{0_I!Zr25_2ik(z zB{@>moz<8z90HrX1jcd~3~XtoDjaeKCO#Cy13pzPf~Ti6_5LGjjYY8CqtQ(&(E0bs zUkvR(KYP*2>5D1Xp|Z;eY*8w@JWC2-dp zsixg2d{6y`m}}M$XKa!&!&rhRd82U*-Qzh`N35BXULKS8+zzI(4?Oow>V|zxjW|t5 z?+Y_G9FA=1cu$&8L5#2_;6wi!x5HT!_WLmV?&LC)`2lt8#^QE-#LS%i)G%l5i`A+4zAID{!I4rbKU{B6OL~77P<8F6*8CM`P^70M-M*E%G2Li(LFM7O5Bd< zAgHGu&Yu3L)2@f%D6GS6IGtQP$pl}0`alzXBYC2$eS5$-r%(lQPu(hm+tdVjudrQejJu% z1PxQ8=$AQ(4Zmri^6mvE{=RR)p6{9Dx22&coz)cd)Or8Sxsy;=V zxd})0#^1~8ggzZpp-coI+BEza#T zydf1hvmf9MY0tc;b!f_mm{)d&6I%pD*>V!_H8!ILU*N1@gW)C|j3Icr^WX?55pX!M zUxS;E1uh4E3#8-J79>|i3O-0za>5_&^G?&+`6}znxP{xnOh^1bfR_q`l%Eh)!st-S z2J6$@%w-kh6Y9LbN>u5isT&Qvur;|eEm8ftFpZ!uZ)7aDWTv#f`ThtG7{p=oyH$?b@~&Ng z=X1fy#4SF8k9|yVyL(%YMhZ@-512J09?V0qel6+pNZ{SaQ;$h-%9pfSoOK!PGnS0? z(BBd?m;kF6PlSDRBNYxuGW~y;9TEhIF5v)w-hObtQv$ zCDL^zbF?IKB`^gvo;{Tk6KbUUk%Fg5#;-SpK95b@;f&z;d?+o+LJ^C{u1$UuXc>o}cSDih~uFx=~OE1jK*otSQ~_jEhP$%6xSES|b0P7EibIPYl| z{8$*h7Da=F8561n*TZmu^k`3Y$eGZ?# z#u-iB6eV(NSKfIM&lY7N9c2x@zuGI^{4YnPVJ;l;+lT|-!GE1|6tG^}e{Z6fho6o# zeszwbI}bw-j1n071jvquhS|Ll2P3-{$t(JT(1&;yK}8BTkueVPjBJ;6+czyM4TlT~MP4i=Fm(x%vM zqK7P=Dzd~MeM(YFl(>7(nAewy8BsOx#HAspZ78nS@%%pV_?ZKg2shW8?(+R`qZi={ zs;CWM=H^nHT!$Mig9D)fewx|T;CoTMqRGDPwW(-S`|-WK(n_NNwDEOhFRhy=w&<%& zX?2u1=QD|dmBE=e`Iny4brGS&GR-nXn?o;HHu(N2)Jxf5_oqY?fL6UVKlQ8+#un;js8Xf>1f)2FC{PWjK;6r5dPtudsZ%` zy^AO~m6^=*Nl%aINAxqC2ATgTkV z!V9hX%vw!mI?pE5yHxlocMkGV(8x_V@B3&P&s_dDHd=}X^Zifw_Vx>==p=sI^X#tu zXBXcq`X56);o#eP#QR;i_~LOFln_%Wy<+xRf>MEQhkrj;rY|~UGFWsZD)$5!>*?&X z{kxrs18@`<7X4>!$xB1fC0@`$Ga^upE_f+ET58FoCnR()r@XMlMgFEI?9cw;QRIiTSq_`%_De;xO421cS_T$cjpWh zM!j(RS%=a+u~2ANhnOyT3w<)mD2(5y4b|^ZV~nv7U(GH$gs+mv($gtXnEK*fc+xg_ z(uUII>ds2rCA6Yj=xtHV4k#_UBZgA>EQAN%Mb5hlc1UkWp}m!+>$SSw#_mMd>k2VN z=qghL(mPR3VW%_|Qgx>dn0F}MuM5eKyHFRdGM6`fASzHeP#QMBI`va0YQZt0L+>iJ zRQh04urU2c@51@C!38`NE?^n<fTS~Oh4Tj+2c_jbyd3xdfowpHb zWM(&T0o3AJM8Zb&vDBeI&Yc!F3&eRIw^%6sANA1Xn*MKGw){J*qXmx@0d|a5W7*A; z3%7r~+R=LekI7VKN-v}K>4}%vMaKO3)M&w7WD*lz-Fezm*abaXPLY?xPuIlV(MHvL zTj*MP%a)EtOC$L!h4Cs(;q2|FzCKDH)fqe;mr%w3%w?nL>&Zel&nPtB6!s-A)pLPM z(_-RGVtq?y@TRe$lIdzv(NtO4z!Q1R@vx94z0%(bhj4G&7$FLu_>1iO3gvDoY{WKZ@SF?e z;$4(Md9OhC;^$&RIv*xBMsPEIVV6FWr{X#3OP%%^e9|I5i4R?`A~UYeqUqg1(Tl}l z)7x7DW^R-<6KB{GM~aV;;`ud}T!1&#NExmAP_bsAPFHtQU3@FY2z=qk;T-Kbfz!e- zW{*|Cy;cL~W<4BV+YE4MLfY>+PQ+=0SD-K7A(@HgJK<|$T?|tzM&P#>s_Q*TyJg|j z?ympSCw}Am^x?noUBDeS#or3ds}rMjG|lnWRw~|;%<_F@{dEeD+d+Mk>Zg&IH{DiD z>n%uE^jAchL~=U+Zp#?KvAPbojZ{ws=~mz3iGd;NMt@*Y<_&%+rrvKtuXa&*s5d|A ztvl~?2(wpi;-Sp`kMG$OmZ7b7Ps>0LULpFt-P80L)x&zS%4xb4(p$MZ%Q zID*VN-yu0hn$3^;#Id3DtS#Xae=lm{bt{pC~rFgvdz>++~4|<#FSa0d!dM5ag>Ua$s;TWIHY|Dcn+b{ed z;iDa4xZKf4s268(t-9Txt}m@KF+`e>_SrIeE-O3X?i!NWw=iR~Et9FDnRuFusf_(_ zG_LUN08?kC(|!RRyBbY$6lquo!LZfEH?|(WLD%s=Se`+im5R|M;L_z)I~ji%{@yv z=VzEEbLlTzT`HnxC!+EUgy)$^^)wr1`mEiNNnJOby7)AtqcPGVzV5qtk8PZEX(#z# z>&c(#a4pOvW>+hn!aJHx-SOw<=t@ixUxW+Foe(}8=hISrjH`X?#AJn&zB4fBai|;> z^rlR~XiG0aU*O>(rilPh$7KuXo*iwqNksF=9sCCRCABc{kjktFHblX7<1mmWQjVL;poL-uHB> z!(7DU>1dw0nEUI_#c`j{erj!3uliZc!1{B0n=JOX)gnr}2-U3;&rsEd5Tz2h`^h*N zQ(-kEUp#zXOW3>=s^UxB(s+10_vs{aZc^F#ETJDJP(`_O#ZqAoB^dGqyg+k8zdUk8?)o|-> zD=C-DlO7rRbwGGXFAvtZM<%D9^Y`Jk~G#r?8TOZvm(*!VB&@o#kIcMs#Y z&gM6+<9B_>Z~2+O{Yv18c=*O)^#0Cf63jX=Tk8zdHSfFiR(wX$;~ma6!FUlNE6BCz z&S=jhgk-YYbh6uO-u-^w`6XicGg$vvoYy6oB$WUo(1@89U3uptaY&`mce9Be(xYgA zH}NJ(>`2MQt(V0N&U*Afbte7~qb8coH@*fA?xx)N z&fNO``Y`=7__f)f;V<=dV%E@i>;yQER)1T6g!eIozU6Fi=S9%Xy|4-uU=&BSL(SM@_+OH{ue$eI None: + self._symbols: List[ParserSymbol] = [] + + parser = DecompParser() + for filename in filenames: + parser.reset() + with open(filename, "r", encoding="utf-8") as f: + parser.read_lines(f) + + for sym in parser.iter_symbols(module): + sym.filename = filename + self._symbols.append(sym) + + def prune_invalid_addrs(self, is_valid: Callable[int, bool]) -> List[ParserSymbol]: + """Some decomp annotations might have an invalid address. + Return the list of addresses where we fail the is_valid check, + and remove those from our list of symbols.""" + invalid_symbols = [sym for sym in self._symbols if not is_valid(sym.offset)] + self._symbols = [sym for sym in self._symbols if is_valid(sym.offset)] + + return invalid_symbols + + def iter_line_functions(self) -> Iterator[ParserFunction]: + """Return lineref functions separately from nameref. Assuming the PDB matches + the state of the source code, a line reference is a guaranteed match, even if + multiple functions share the same name. (i.e. polymorphism)""" + return filter( + lambda s: isinstance(s, ParserFunction) and not s.is_nameref(), + self._symbols, + ) + + def iter_name_functions(self) -> Iterator[ParserFunction]: + return filter( + lambda s: isinstance(s, ParserFunction) and s.is_nameref(), self._symbols + ) + + def iter_vtables(self) -> Iterator[ParserVtable]: + return filter(lambda s: isinstance(s, ParserVtable), self._symbols) + + def iter_variables(self) -> Iterator[ParserVariable]: + return filter(lambda s: isinstance(s, ParserVariable), self._symbols) + + def iter_strings(self) -> Iterator[ParserString]: + return filter(lambda s: isinstance(s, ParserString), self._symbols) diff --git a/tools/isledecomp/isledecomp/parser/error.py b/tools/isledecomp/isledecomp/parser/error.py new file mode 100644 index 00000000..9ced1498 --- /dev/null +++ b/tools/isledecomp/isledecomp/parser/error.py @@ -0,0 +1,97 @@ +from enum import Enum +from typing import Optional +from dataclasses import dataclass + + +# TODO: poorly chosen name, should be AlertType or AlertCode or something +class ParserError(Enum): + # WARN: Stub function exceeds some line number threshold + UNLIKELY_STUB = 100 + + # WARN: Decomp marker is close enough to be recognized, but does not follow syntax exactly + BAD_DECOMP_MARKER = 101 + + # WARN: Multiple markers in sequence do not have distinct modules + DUPLICATE_MODULE = 102 + + # WARN: Detected a dupcliate module/offset pair in the current file + DUPLICATE_OFFSET = 103 + + # WARN: We read a line that matches the decomp marker pattern, but we are not set up + # to handle it + BOGUS_MARKER = 104 + + # WARN: New function marker appeared while we were inside a function + MISSED_END_OF_FUNCTION = 105 + + # WARN: If we find a curly brace right after the function declaration + # this is wrong but we still have enough to make a match with reccmp + MISSED_START_OF_FUNCTION = 106 + + # WARN: A blank line appeared between the end of FUNCTION markers + # and the start of the function. We can ignore it, but the line shouldn't be there + UNEXPECTED_BLANK_LINE = 107 + + # WARN: We called the finish() method for the parser but had not reached the starting + # state of SEARCH + UNEXPECTED_END_OF_FILE = 108 + + # WARN: We found a marker to be referenced by name outside of a header file. + BYNAME_FUNCTION_IN_CPP = 109 + + # WARN: A GLOBAL marker appeared over a variable without the g_ prefix + GLOBAL_MISSING_PREFIX = 110 + + # WARN: GLOBAL marker points at something other than variable declaration. + # We can't match global variables based on position, but the goal here is + # to ignore things like string literal that are not variables. + GLOBAL_NOT_VARIABLE = 111 + + # WARN: A marked static variable inside a function needs to have its + # function marked too, and in the same module. + ORPHANED_STATIC_VARIABLE = 112 + + # This code or higher is an error, not a warning + DECOMP_ERROR_START = 200 + + # ERROR: We found a marker unexpectedly + UNEXPECTED_MARKER = 200 + + # ERROR: We found a marker where we expected to find one, but it is incompatible + # with the preceding markers. + # For example, a GLOBAL cannot follow FUNCTION/STUB + INCOMPATIBLE_MARKER = 201 + + # ERROR: The line following an explicit by-name marker was not a comment + # We assume a syntax error here rather than try to use the next line + BAD_NAMEREF = 202 + + # ERROR: This function offset comes before the previous offset from the same module + # This hopefully gives some hint about which functions need to be rearranged. + FUNCTION_OUT_OF_ORDER = 203 + + # ERROR: The line following an explicit by-name marker that does _not_ expect + # a comment -- i.e. VTABLE or GLOBAL -- could not extract the name + NO_SUITABLE_NAME = 204 + + # ERROR: Two STRING markers have the same module and offset, but the strings + # they annotate are different. + WRONG_STRING = 205 + + # ERROR: This lineref FUNCTION marker is next to a function declaration or + # forward reference. The correct place for the marker is where the function + # is implemented so we can match with the PDB. + NO_IMPLEMENTATION = 206 + + +@dataclass +class ParserAlert: + code: ParserError + line_number: int + line: Optional[str] = None + + def is_warning(self) -> bool: + return self.code.value < ParserError.DECOMP_ERROR_START.value + + def is_error(self) -> bool: + return self.code.value >= ParserError.DECOMP_ERROR_START.value diff --git a/tools/isledecomp/isledecomp/parser/linter.py b/tools/isledecomp/isledecomp/parser/linter.py new file mode 100644 index 00000000..b44487df --- /dev/null +++ b/tools/isledecomp/isledecomp/parser/linter.py @@ -0,0 +1,144 @@ +from typing import List, Optional +from .parser import DecompParser +from .error import ParserAlert, ParserError +from .node import ParserSymbol, ParserString + + +def get_checkorder_filter(module): + """Return a filter function on implemented functions in the given module""" + return lambda fun: fun.module == module and not fun.lookup_by_name + + +class DecompLinter: + def __init__(self) -> None: + self.alerts: List[ParserAlert] = [] + self._parser = DecompParser() + self._filename: str = "" + self._module: Optional[str] = None + # Set of (str, int) tuples for each module/offset pair seen while scanning. + # This is _not_ reset between files and is intended to report offset reuse + # when scanning the entire directory. + self._offsets_used = set() + # Keep track of strings we have seen. Persists across files. + # Module/offset can be repeated for string markers but the strings must match. + self._strings = {} + + def reset(self, full_reset: bool = False): + self.alerts = [] + self._parser.reset() + self._filename = "" + self._module = None + + if full_reset: + self._offsets_used.clear() + self._strings = {} + + def file_is_header(self): + return self._filename.lower().endswith(".h") + + def _load_offsets_from_list(self, marker_list: List[ParserSymbol]): + """Helper for loading (module, offset) tuples while the DecompParser + has them broken up into three different lists.""" + for marker in marker_list: + is_string = isinstance(marker, ParserString) + + value = (marker.module, marker.offset) + if value in self._offsets_used: + if is_string: + if self._strings[value] != marker.name: + self.alerts.append( + ParserAlert( + code=ParserError.WRONG_STRING, + line_number=marker.line_number, + line=f"0x{marker.offset:08x}, {repr(self._strings[value])} vs. {repr(marker.name)}", + ) + ) + else: + self.alerts.append( + ParserAlert( + code=ParserError.DUPLICATE_OFFSET, + line_number=marker.line_number, + line=f"0x{marker.offset:08x}", + ) + ) + else: + self._offsets_used.add(value) + if is_string: + self._strings[value] = marker.name + + def _check_function_order(self): + """Rules: + 1. Only markers that are implemented in the file are considered. This means we + only look at markers that are cross-referenced with cvdump output by their line + number. Markers with the lookup_by_name flag set are ignored because we cannot + directly influence their order. + + 2. Order should be considered for a single module only. If we have multiple + markers for a single function (i.e. for LEGO1 functions linked statically to + ISLE) then the virtual address space will be very different. If we don't check + for one module only, we would incorrectly report that the file is out of order. + """ + + if self._module is None: + return + + checkorder_filter = get_checkorder_filter(self._module) + last_offset = None + for fun in filter(checkorder_filter, self._parser.functions): + if last_offset is not None: + if fun.offset < last_offset: + self.alerts.append( + ParserAlert( + code=ParserError.FUNCTION_OUT_OF_ORDER, + line_number=fun.line_number, + ) + ) + + last_offset = fun.offset + + def _check_offset_uniqueness(self): + self._load_offsets_from_list(self._parser.functions) + self._load_offsets_from_list(self._parser.vtables) + self._load_offsets_from_list(self._parser.variables) + self._load_offsets_from_list(self._parser.strings) + + def _check_byname_allowed(self): + if self.file_is_header(): + return + + for fun in self._parser.functions: + if fun.lookup_by_name: + self.alerts.append( + ParserAlert( + code=ParserError.BYNAME_FUNCTION_IN_CPP, + line_number=fun.line_number, + ) + ) + + def check_lines(self, lines, filename, module=None): + """`lines` is a generic iterable to allow for testing with a list of strings. + We assume lines has the entire contents of the compilation unit.""" + + self.reset(False) + self._filename = filename + self._module = module + + self._parser.read_lines(lines) + + self._parser.finish() + self.alerts = self._parser.alerts[::] + + self._check_offset_uniqueness() + + if self._module is not None: + self._check_byname_allowed() + + if not self.file_is_header(): + self._check_function_order() + + return len(self.alerts) == 0 + + def check_file(self, filename, module=None): + """Convenience method for decomplint cli tool""" + with open(filename, "r", encoding="utf-8") as f: + return self.check_lines(f, filename, module) diff --git a/tools/isledecomp/isledecomp/parser/marker.py b/tools/isledecomp/isledecomp/parser/marker.py new file mode 100644 index 00000000..8108ac46 --- /dev/null +++ b/tools/isledecomp/isledecomp/parser/marker.py @@ -0,0 +1,146 @@ +import re +from typing import Optional, Tuple +from enum import Enum + + +class MarkerCategory(Enum): + """For the purposes of grouping multiple different DecompMarkers together, + assign a rough "category" for the MarkerType values below. + It's really only the function types that have to get folded down, but + we'll do that in a structured way to permit future expansion.""" + + FUNCTION = 1 + VARIABLE = 2 + STRING = 3 + VTABLE = 4 + ADDRESS = 100 # i.e. no comparison required or possible + + +class MarkerType(Enum): + UNKNOWN = -100 + FUNCTION = 1 + STUB = 2 + SYNTHETIC = 3 + TEMPLATE = 4 + GLOBAL = 5 + VTABLE = 6 + STRING = 7 + LIBRARY = 8 + + +markerRegex = re.compile( + r"\s*//\s*(?P\w+):\s*(?P\w+)\s+(?P0x[a-f0-9]+) *(?P\S.+\S)?", + flags=re.I, +) + + +markerExactRegex = re.compile( + r"\s*// (?P[A-Z]+): (?P[A-Z0-9]+) (?P0x[a-f0-9]+)(?: (?P\S.+\S))?\n?$" +) + + +class DecompMarker: + def __init__( + self, marker_type: str, module: str, offset: int, extra: Optional[str] = None + ) -> None: + try: + self._type = MarkerType[marker_type.upper()] + except KeyError: + self._type = MarkerType.UNKNOWN + + # Convert to upper here. A lot of other analysis depends on this name + # being consistent and predictable. If the name is _not_ capitalized + # we will emit a syntax error. + self._module: str = module.upper() + self._offset: int = offset + self._extra: Optional[str] = extra + + @property + def type(self) -> MarkerType: + return self._type + + @property + def module(self) -> str: + return self._module + + @property + def offset(self) -> int: + return self._offset + + @property + def extra(self) -> Optional[str]: + return self._extra + + @property + def category(self) -> MarkerCategory: + if self.is_vtable(): + return MarkerCategory.VTABLE + + if self.is_variable(): + return MarkerCategory.VARIABLE + + if self.is_string(): + return MarkerCategory.STRING + + # TODO: worth another look if we add more types, but this covers it + if self.is_regular_function() or self.is_explicit_byname(): + return MarkerCategory.FUNCTION + + return MarkerCategory.ADDRESS + + @property + def key(self) -> Tuple[str, str, Optional[str]]: + """For use with the MarkerDict. To detect/avoid marker collision.""" + return (self.category, self.module, self.extra) + + def is_regular_function(self) -> bool: + """Regular function, meaning: not an explicit byname lookup. FUNCTION + markers can be _implicit_ byname. + FUNCTION and STUB markers are (currently) the only heterogenous marker types that + can be lumped together, although the reasons for doing so are a little vague.""" + return self._type in (MarkerType.FUNCTION, MarkerType.STUB) + + def is_explicit_byname(self) -> bool: + return self._type in ( + MarkerType.SYNTHETIC, + MarkerType.TEMPLATE, + MarkerType.LIBRARY, + ) + + def is_variable(self) -> bool: + return self._type == MarkerType.GLOBAL + + def is_synthetic(self) -> bool: + return self._type == MarkerType.SYNTHETIC + + def is_template(self) -> bool: + return self._type == MarkerType.TEMPLATE + + def is_vtable(self) -> bool: + return self._type == MarkerType.VTABLE + + def is_library(self) -> bool: + return self._type == MarkerType.LIBRARY + + def is_string(self) -> bool: + return self._type == MarkerType.STRING + + def allowed_in_func(self) -> bool: + return self._type in (MarkerType.GLOBAL, MarkerType.STRING) + + +def match_marker(line: str) -> Optional[DecompMarker]: + match = markerRegex.match(line) + if match is None: + return None + + return DecompMarker( + marker_type=match.group("type"), + module=match.group("module"), + offset=int(match.group("offset"), 16), + extra=match.group("extra"), + ) + + +def is_marker_exact(line: str) -> bool: + return markerExactRegex.match(line) is not None diff --git a/tools/isledecomp/isledecomp/parser/node.py b/tools/isledecomp/isledecomp/parser/node.py new file mode 100644 index 00000000..21e4c382 --- /dev/null +++ b/tools/isledecomp/isledecomp/parser/node.py @@ -0,0 +1,63 @@ +from typing import Optional +from dataclasses import dataclass +from .marker import MarkerType + + +@dataclass +class ParserSymbol: + """Exported decomp marker with all information (except the code filename) required to + cross-reference with cvdump data.""" + + type: MarkerType + line_number: int + module: str + offset: int + name: str + + # The parser doesn't (currently) know about the code filename, but if you + # wanted to set it here after the fact, here's the spot. + filename: Optional[str] = None + + def should_skip(self) -> bool: + """The default is to compare any symbols we have""" + return False + + def is_nameref(self) -> bool: + """All symbols default to name lookup""" + return True + + +@dataclass +class ParserFunction(ParserSymbol): + # We are able to detect the closing line of a function with some reliability. + # This isn't used for anything right now, but perhaps later it will be. + end_line: Optional[int] = None + + # All marker types are referenced by name except FUNCTION/STUB. These can also be + # referenced by name, but only if this flag is true. + lookup_by_name: bool = False + + def should_skip(self) -> bool: + return self.type == MarkerType.STUB + + def is_nameref(self) -> bool: + return ( + self.type in (MarkerType.SYNTHETIC, MarkerType.TEMPLATE, MarkerType.LIBRARY) + or self.lookup_by_name + ) + + +@dataclass +class ParserVariable(ParserSymbol): + is_static: bool = False + parent_function: Optional[int] = None + + +@dataclass +class ParserVtable(ParserSymbol): + base_class: Optional[str] = None + + +@dataclass +class ParserString(ParserSymbol): + pass diff --git a/tools/isledecomp/isledecomp/parser/parser.py b/tools/isledecomp/isledecomp/parser/parser.py new file mode 100644 index 00000000..92e41dd3 --- /dev/null +++ b/tools/isledecomp/isledecomp/parser/parser.py @@ -0,0 +1,556 @@ +# C++ file parser + +from typing import List, Iterable, Iterator, Optional +from enum import Enum +from .util import ( + get_class_name, + get_variable_name, + get_synthetic_name, + remove_trailing_comment, + get_string_contents, + sanitize_code_line, + scopeDetectRegex, +) +from .marker import ( + DecompMarker, + MarkerCategory, + match_marker, + is_marker_exact, +) +from .node import ( + ParserSymbol, + ParserFunction, + ParserVariable, + ParserVtable, + ParserString, +) +from .error import ParserAlert, ParserError + + +class ReaderState(Enum): + SEARCH = 0 + WANT_SIG = 1 + IN_FUNC = 2 + IN_TEMPLATE = 3 + WANT_CURLY = 4 + IN_GLOBAL = 5 + IN_FUNC_GLOBAL = 6 + IN_VTABLE = 7 + IN_SYNTHETIC = 8 + IN_LIBRARY = 9 + DONE = 100 + + +class MarkerDict: + def __init__(self) -> None: + self.markers: dict = {} + + def insert(self, marker: DecompMarker) -> bool: + """Return True if this insert would overwrite""" + if marker.key in self.markers: + return True + + self.markers[marker.key] = marker + return False + + def query( + self, category: MarkerCategory, module: str, extra: Optional[str] = None + ) -> Optional[DecompMarker]: + return self.markers.get((category, module, extra)) + + def iter(self) -> Iterator[DecompMarker]: + for _, marker in self.markers.items(): + yield marker + + def empty(self): + self.markers = {} + + +class CurlyManager: + """Overly simplified scope manager""" + + def __init__(self): + self._stack = [] + + def reset(self): + self._stack = [] + + def _pop(self): + """Pop stack safely""" + try: + self._stack.pop() + except IndexError: + pass + + def get_prefix(self, name: Optional[str] = None) -> str: + """Return the prefix for where we are.""" + + scopes = [t for t in self._stack if t != "{"] + if len(scopes) == 0: + return name if name is not None else "" + + if name is not None and name not in scopes: + scopes.append(name) + + return "::".join(scopes) + + def read_line(self, raw_line: str): + """Read a line of code and update the stack.""" + line = sanitize_code_line(raw_line) + if (match := scopeDetectRegex.match(line)) is not None: + if not line.endswith(";"): + self._stack.append(match.group("name")) + + change = line.count("{") - line.count("}") + if change > 0: + for _ in range(change): + self._stack.append("{") + elif change < 0: + for _ in range(-change): + self._pop() + + if len(self._stack) == 0: + return + + last = self._stack[-1] + if last != "{": + self._pop() + + +class DecompParser: + # pylint: disable=too-many-instance-attributes + # Could combine output lists into a single list to get under the limit, + # but not right now + def __init__(self) -> None: + # The lists to be populated as we parse + self._symbols: List[ParserSymbol] = [] + self.alerts: List[ParserAlert] = [] + + self.line_number: int = 0 + self.state: ReaderState = ReaderState.SEARCH + + self.last_line: str = "" + + self.curly = CurlyManager() + + # To allow for multiple markers where code is shared across different + # modules, save lists of compatible markers that appear in sequence + self.fun_markers = MarkerDict() + self.var_markers = MarkerDict() + self.tbl_markers = MarkerDict() + + # To handle functions that are entirely indented (i.e. those defined + # in class declarations), remember how many whitespace characters + # came before the opening curly brace and match that up at the end. + # This should give us the same or better accuracy for a well-formed file. + # The alternative is counting the curly braces on each line + # but that's probably too cumbersome. + self.curly_indent_stops: int = 0 + + # For non-synthetic functions, save the line number where the function begins + # (i.e. where we see the curly brace) along with the function signature. + # We will need both when we reach the end of the function. + self.function_start: int = 0 + self.function_sig: str = "" + + def reset(self): + self._symbols = [] + self.alerts = [] + + self.line_number = 0 + self.state = ReaderState.SEARCH + + self.last_line = "" + + self.fun_markers.empty() + self.var_markers.empty() + self.tbl_markers.empty() + + self.curly_indent_stops = 0 + self.function_start = 0 + self.function_sig = "" + + self.curly.reset() + + @property + def functions(self) -> List[ParserFunction]: + return [s for s in self._symbols if isinstance(s, ParserFunction)] + + @property + def vtables(self) -> List[ParserVtable]: + return [s for s in self._symbols if isinstance(s, ParserVtable)] + + @property + def variables(self) -> List[ParserVariable]: + return [s for s in self._symbols if isinstance(s, ParserVariable)] + + @property + def strings(self) -> List[ParserString]: + return [s for s in self._symbols if isinstance(s, ParserString)] + + def iter_symbols(self, module: Optional[str] = None) -> Iterator[ParserSymbol]: + for s in self._symbols: + if module is None or s.module == module: + yield s + + def _recover(self): + """We hit a syntax error and need to reset temp structures""" + self.state = ReaderState.SEARCH + self.fun_markers.empty() + self.var_markers.empty() + self.tbl_markers.empty() + + def _syntax_warning(self, code): + self.alerts.append( + ParserAlert( + line_number=self.line_number, + code=code, + line=self.last_line.strip(), + ) + ) + + def _syntax_error(self, code): + self._syntax_warning(code) + self._recover() + + def _function_starts_here(self): + self.function_start = self.line_number + + def _function_marker(self, marker: DecompMarker): + if self.fun_markers.insert(marker): + self._syntax_warning(ParserError.DUPLICATE_MODULE) + self.state = ReaderState.WANT_SIG + + def _nameref_marker(self, marker: DecompMarker): + """Functions explicitly referenced by name are set here""" + if self.fun_markers.insert(marker): + self._syntax_warning(ParserError.DUPLICATE_MODULE) + + if marker.is_template(): + self.state = ReaderState.IN_TEMPLATE + elif marker.is_synthetic(): + self.state = ReaderState.IN_SYNTHETIC + else: + self.state = ReaderState.IN_LIBRARY + + def _function_done(self, lookup_by_name: bool = False, unexpected: bool = False): + end_line = self.line_number + if unexpected: + # If we missed the end of the previous function, assume it ended + # on the previous line and that whatever we are tracking next + # begins on the current line. + end_line -= 1 + + for marker in self.fun_markers.iter(): + self._symbols.append( + ParserFunction( + type=marker.type, + line_number=self.function_start, + module=marker.module, + offset=marker.offset, + name=self.function_sig, + lookup_by_name=lookup_by_name, + end_line=end_line, + ) + ) + + self.fun_markers.empty() + self.curly_indent_stops = 0 + self.state = ReaderState.SEARCH + + def _vtable_marker(self, marker: DecompMarker): + if self.tbl_markers.insert(marker): + self._syntax_warning(ParserError.DUPLICATE_MODULE) + self.state = ReaderState.IN_VTABLE + + def _vtable_done(self, class_name: str = None): + if class_name is None: + # Best we can do + class_name = self.last_line.strip() + + for marker in self.tbl_markers.iter(): + self._symbols.append( + ParserVtable( + type=marker.type, + line_number=self.line_number, + module=marker.module, + offset=marker.offset, + name=self.curly.get_prefix(class_name), + base_class=marker.extra, + ) + ) + + self.tbl_markers.empty() + self.state = ReaderState.SEARCH + + def _variable_marker(self, marker: DecompMarker): + if self.var_markers.insert(marker): + self._syntax_warning(ParserError.DUPLICATE_MODULE) + + if self.state in (ReaderState.IN_FUNC, ReaderState.IN_FUNC_GLOBAL): + self.state = ReaderState.IN_FUNC_GLOBAL + else: + self.state = ReaderState.IN_GLOBAL + + def _variable_done( + self, variable_name: Optional[str] = None, string_value: Optional[str] = None + ): + if variable_name is None and string_value is None: + self._syntax_error(ParserError.NO_SUITABLE_NAME) + return + + for marker in self.var_markers.iter(): + if marker.is_string(): + self._symbols.append( + ParserString( + type=marker.type, + line_number=self.line_number, + module=marker.module, + offset=marker.offset, + name=string_value, + ) + ) + else: + parent_function = None + is_static = self.state == ReaderState.IN_FUNC_GLOBAL + + # If this is a static variable, we need to get the function + # where it resides so that we can match it up later with the + # mangled names of both variable and function from cvdump. + if is_static: + fun_marker = self.fun_markers.query( + MarkerCategory.FUNCTION, marker.module + ) + + if fun_marker is None: + self._syntax_warning(ParserError.ORPHANED_STATIC_VARIABLE) + continue + + parent_function = fun_marker.offset + + self._symbols.append( + ParserVariable( + type=marker.type, + line_number=self.line_number, + module=marker.module, + offset=marker.offset, + name=self.curly.get_prefix(variable_name), + is_static=is_static, + parent_function=parent_function, + ) + ) + + self.var_markers.empty() + if self.state == ReaderState.IN_FUNC_GLOBAL: + self.state = ReaderState.IN_FUNC + else: + self.state = ReaderState.SEARCH + + def _handle_marker(self, marker: DecompMarker): + # Cannot handle any markers between function sig and opening curly brace + if self.state == ReaderState.WANT_CURLY: + self._syntax_error(ParserError.UNEXPECTED_MARKER) + return + + # If we are inside a function, the only markers we accept are: + # GLOBAL, indicating a static variable + # STRING, indicating a literal string. + # Otherwise we assume that the parser missed the end of the function + # and we have moved on to something else. + # This is unlikely to occur with well-formed code, but + # we can recover easily by just ending the function here. + if self.state == ReaderState.IN_FUNC and not marker.allowed_in_func(): + self._syntax_warning(ParserError.MISSED_END_OF_FUNCTION) + self._function_done(unexpected=True) + + # TODO: How uncertain are we of detecting the end of a function + # in a clang-formatted file? For now we assume we have missed the + # end if we detect a non-GLOBAL marker while state is IN_FUNC. + # Maybe these cases should be syntax errors instead + + if marker.is_regular_function(): + if self.state in ( + ReaderState.SEARCH, + ReaderState.WANT_SIG, + ): + # We will allow multiple offsets if we have just begun + # the code block, but not after we hit the curly brace. + self._function_marker(marker) + else: + self._syntax_error(ParserError.INCOMPATIBLE_MARKER) + + elif marker.is_template(): + if self.state in (ReaderState.SEARCH, ReaderState.IN_TEMPLATE): + self._nameref_marker(marker) + else: + self._syntax_error(ParserError.INCOMPATIBLE_MARKER) + + elif marker.is_synthetic(): + if self.state in (ReaderState.SEARCH, ReaderState.IN_SYNTHETIC): + self._nameref_marker(marker) + else: + self._syntax_error(ParserError.INCOMPATIBLE_MARKER) + + elif marker.is_library(): + if self.state in (ReaderState.SEARCH, ReaderState.IN_LIBRARY): + self._nameref_marker(marker) + else: + self._syntax_error(ParserError.INCOMPATIBLE_MARKER) + + # Strings and variables are almost the same thing + elif marker.is_string() or marker.is_variable(): + if self.state in ( + ReaderState.SEARCH, + ReaderState.IN_GLOBAL, + ReaderState.IN_FUNC, + ReaderState.IN_FUNC_GLOBAL, + ): + self._variable_marker(marker) + else: + self._syntax_error(ParserError.INCOMPATIBLE_MARKER) + + elif marker.is_vtable(): + if self.state in (ReaderState.SEARCH, ReaderState.IN_VTABLE): + self._vtable_marker(marker) + else: + self._syntax_error(ParserError.INCOMPATIBLE_MARKER) + + else: + self._syntax_warning(ParserError.BOGUS_MARKER) + + def read_line(self, line: str): + if self.state == ReaderState.DONE: + return + + self.last_line = line # TODO: Useful or hack for error reporting? + self.line_number += 1 + + marker = match_marker(line) + if marker is not None: + # TODO: what's the best place for this? + # Does it belong with reading or marker handling? + if not is_marker_exact(self.last_line): + self._syntax_warning(ParserError.BAD_DECOMP_MARKER) + self._handle_marker(marker) + return + + self.curly.read_line(line) + + line_strip = line.strip() + if self.state in ( + ReaderState.IN_SYNTHETIC, + ReaderState.IN_TEMPLATE, + ReaderState.IN_LIBRARY, + ): + # Explicit nameref functions provide the function name + # on the next line (in a // comment) + name = get_synthetic_name(line) + if name is None: + self._syntax_error(ParserError.BAD_NAMEREF) + else: + self.function_sig = name + self._function_starts_here() + self._function_done(lookup_by_name=True) + + elif self.state == ReaderState.WANT_SIG: + # Ignore blanks on the way to function start or function name + if len(line_strip) == 0: + self._syntax_warning(ParserError.UNEXPECTED_BLANK_LINE) + + elif line_strip.startswith("//"): + # If we found a comment, assume implicit lookup-by-name + # function and end here. We know this is not a decomp marker + # because it would have been handled already. + self.function_sig = get_synthetic_name(line) + self._function_starts_here() + self._function_done(lookup_by_name=True) + + elif line_strip == "{": + # We missed the function signature but we can recover from this + self.function_sig = "(unknown)" + self._function_starts_here() + self._syntax_warning(ParserError.MISSED_START_OF_FUNCTION) + self.state = ReaderState.IN_FUNC + + else: + # Inline functions may end with a comment. Strip that out + # to help parsing. + self.function_sig = remove_trailing_comment(line_strip) + + # Now check to see if the opening curly bracket is on the + # same line. clang-format should prevent this (BraceWrapping) + # but it is easy to detect. + # If the entire function is on one line, handle that too. + if self.function_sig.endswith("{"): + self._function_starts_here() + self.state = ReaderState.IN_FUNC + elif self.function_sig.endswith("}") or self.function_sig.endswith( + "};" + ): + self._function_starts_here() + self._function_done() + elif self.function_sig.endswith(");"): + # Detect forward reference or declaration + self._syntax_error(ParserError.NO_IMPLEMENTATION) + else: + self.state = ReaderState.WANT_CURLY + + elif self.state == ReaderState.WANT_CURLY: + if line_strip == "{": + self.curly_indent_stops = line.index("{") + self._function_starts_here() + self.state = ReaderState.IN_FUNC + + elif self.state == ReaderState.IN_FUNC: + if line_strip.startswith("}") and line[self.curly_indent_stops] == "}": + self._function_done() + + elif self.state in (ReaderState.IN_GLOBAL, ReaderState.IN_FUNC_GLOBAL): + # TODO: Known problem that an error here will cause us to abandon a + # function we have already parsed if state == IN_FUNC_GLOBAL. + # However, we are not tolerant of _any_ syntax problems in our + # CI actions, so the solution is to just fix the invalid marker. + variable_name = None + + global_markers_queued = any( + m.is_variable() for m in self.var_markers.iter() + ) + + if len(line_strip) == 0: + self._syntax_warning(ParserError.UNEXPECTED_BLANK_LINE) + return + + if global_markers_queued: + # Not the greatest solution, but a consequence of combining GLOBAL and + # STRING markers together. If the marker precedes a return statement, it is + # valid for a STRING marker to be here, but not a GLOBAL. We need to look + # ahead and tell whether this *would* fail. + if line_strip.startswith("return"): + self._syntax_error(ParserError.GLOBAL_NOT_VARIABLE) + return + if line_strip.startswith("//"): + # If we found a comment, assume implicit lookup-by-name + # function and end here. We know this is not a decomp marker + # because it would have been handled already. + variable_name = get_synthetic_name(line) + else: + variable_name = get_variable_name(line) + + string_name = get_string_contents(line) + + self._variable_done(variable_name, string_name) + + elif self.state == ReaderState.IN_VTABLE: + vtable_class = get_class_name(line) + if vtable_class is not None: + self._vtable_done(class_name=vtable_class) + + def read_lines(self, lines: Iterable): + for line in lines: + self.read_line(line) + + def finish(self): + if self.state != ReaderState.SEARCH: + self._syntax_warning(ParserError.UNEXPECTED_END_OF_FILE) + + self.state = ReaderState.DONE diff --git a/tools/isledecomp/isledecomp/parser/util.py b/tools/isledecomp/isledecomp/parser/util.py new file mode 100644 index 00000000..fbc78e10 --- /dev/null +++ b/tools/isledecomp/isledecomp/parser/util.py @@ -0,0 +1,141 @@ +# C++ Parser utility functions and data structures +import re +from typing import Optional +from ast import literal_eval + +# The goal here is to just read whatever is on the next line, so some +# flexibility in the formatting seems OK +templateCommentRegex = re.compile(r"\s*//\s+(.*)") + +# To remove any comment (//) or block comment (/*) and its leading spaces +# from the end of a code line +trailingCommentRegex = re.compile(r"(\s*(?://|/\*).*)$") + +# Get char contents, ignore escape characters +singleQuoteRegex = re.compile(r"('(?:[^\'\\]|\\.)')") + +# Match contents of block comment on one line +blockCommentRegex = re.compile(r"(/\*.*?\*/)") + +# Match contents of single comment on one line +regularCommentRegex = re.compile(r"(//.*)") + +# Get string contents, ignore escape characters that might interfere +doubleQuoteRegex = re.compile(r"(\"(?:[^\"\\]|\\.)*\")") + +# Detect a line that would cause us to enter a new scope +scopeDetectRegex = re.compile(r"(?:class|struct|namespace) (?P\w+).*(?:{)?") + + +def get_synthetic_name(line: str) -> Optional[str]: + """Synthetic names appear on a single line comment on the line after the marker. + If that's not what we have, return None""" + template_match = templateCommentRegex.match(line) + + if template_match is not None: + return template_match.group(1) + + return None + + +def sanitize_code_line(line: str) -> str: + """Helper for scope manager. Removes sections from a code line + that would cause us to incorrectly detect curly brackets. + This is a very naive implementation and fails entirely on multi-line + strings or comments.""" + + line = singleQuoteRegex.sub("''", line) + line = doubleQuoteRegex.sub('""', line) + line = blockCommentRegex.sub("", line) + line = regularCommentRegex.sub("", line) + + return line.strip() + + +def remove_trailing_comment(line: str) -> str: + return trailingCommentRegex.sub("", line) + + +def is_blank_or_comment(line: str) -> bool: + """Helper to read ahead after the offset comment is matched. + There could be blank lines or other comments before the + function signature, and we want to skip those.""" + line_strip = line.strip() + return ( + len(line_strip) == 0 + or line_strip.startswith("//") + or line_strip.startswith("/*") + or line_strip.endswith("*/") + ) + + +template_regex = re.compile(r"<(?P[\w]+)\s*(?P\*+)?\s*>") + + +class_decl_regex = re.compile( + r"\s*(?:\/\/)?\s*(?:class|struct) ((?:\w+(?:<.+>)?(?:::)?)+)" +) + + +def template_replace(match: re.Match) -> str: + (type_name, asterisks) = match.groups() + if asterisks is None: + return f"<{type_name}>" + + return f"<{type_name} {asterisks}>" + + +def fix_template_type(class_name: str) -> str: + """For template classes, we should reformat the class name so it matches + the output from cvdump: one space between the template type and any asterisks + if it is a pointer type.""" + if "<" not in class_name: + return class_name + + return template_regex.sub(template_replace, class_name) + + +def get_class_name(line: str) -> Optional[str]: + """For VTABLE markers, extract the class name from the code line or comment + where it appears.""" + + match = class_decl_regex.match(line) + if match is not None: + return fix_template_type(match.group(1)) + + return None + + +global_regex = re.compile(r"(?P(?:\w+::)*g_\w+)") +less_strict_global_regex = re.compile(r"(?P(?:\w+::)*\w+)(?:\)\(|\[.*|\s*=.*|;)") + + +def get_variable_name(line: str) -> Optional[str]: + """Grab the name of the variable annotated with the GLOBAL marker. + Correct syntax would have the variable start with the prefix "g_" + but we will try to match regardless.""" + + if (match := global_regex.search(line)) is not None: + return match.group("name") + + if (match := less_strict_global_regex.search(line)) is not None: + return match.group("name") + + return None + + +def get_string_contents(line: str) -> Optional[str]: + """Return the first C string seen on this line. + We have to unescape the string, and a simple way to do that is to use + python's ast.literal_eval. I'm sure there are many pitfalls to doing + it this way, but hopefully the regex will ensure reasonably sane input.""" + + try: + if (match := doubleQuoteRegex.search(line)) is not None: + return literal_eval(match.group(1)) + # pylint: disable=broad-exception-caught + # No way to predict what kind of exception could occur. + except Exception: + pass + + return None diff --git a/tools/isledecomp/isledecomp/types.py b/tools/isledecomp/isledecomp/types.py new file mode 100644 index 00000000..31829c65 --- /dev/null +++ b/tools/isledecomp/isledecomp/types.py @@ -0,0 +1,13 @@ +"""Types shared by other modules""" +from enum import Enum + + +class SymbolType(Enum): + """Broadly tells us what kind of comparison is required for this symbol.""" + + FUNCTION = 1 + DATA = 2 + POINTER = 3 + STRING = 4 + VTABLE = 5 + FLOAT = 6 diff --git a/tools/isledecomp/isledecomp/utils.py b/tools/isledecomp/isledecomp/utils.py new file mode 100644 index 00000000..a8c6033b --- /dev/null +++ b/tools/isledecomp/isledecomp/utils.py @@ -0,0 +1,308 @@ +import os +import sys +from datetime import datetime +import logging +import colorama + + +def print_combined_diff(udiff, plain: bool = False, show_both: bool = False): + if udiff is None: + return + + # We don't know how long the address string will be ahead of time. + # Set this value for each address to try to line things up. + padding_size = 0 + + for slug, subgroups in udiff: + if plain: + print("---") + print("+++") + print(slug) + else: + print(f"{colorama.Fore.RED}---") + print(f"{colorama.Fore.GREEN}+++") + print(f"{colorama.Fore.BLUE}{slug}") + print(colorama.Style.RESET_ALL, end="") + + for subgroup in subgroups: + equal = subgroup.get("both") is not None + + if equal: + for orig_addr, line, recomp_addr in subgroup["both"]: + padding_size = max(padding_size, len(orig_addr)) + if show_both: + print(f"{orig_addr} / {recomp_addr} : {line}") + else: + print(f"{orig_addr} : {line}") + else: + for orig_addr, line in subgroup["orig"]: + padding_size = max(padding_size, len(orig_addr)) + addr_prefix = ( + f"{orig_addr} / {'':{padding_size}}" if show_both else orig_addr + ) + + if plain: + print(f"{addr_prefix} : -{line}") + else: + print( + f"{addr_prefix} : {colorama.Fore.RED}-{line}{colorama.Style.RESET_ALL}" + ) + + for recomp_addr, line in subgroup["recomp"]: + padding_size = max(padding_size, len(recomp_addr)) + addr_prefix = ( + f"{'':{padding_size}} / {recomp_addr}" + if show_both + else " " * padding_size + ) + + if plain: + print(f"{addr_prefix} : +{line}") + else: + print( + f"{addr_prefix} : {colorama.Fore.GREEN}+{line}{colorama.Style.RESET_ALL}" + ) + + # Newline between each diff subgroup. + print() + + +def print_diff(udiff, plain): + """Print diff in difflib.unified_diff format.""" + if udiff is None: + return False + + has_diff = False + for line in udiff: + has_diff = True + color = "" + if line.startswith("++") or line.startswith("@@") or line.startswith("--"): + # Skip unneeded parts of the diff for the brief view + continue + # Work out color if we are printing color + if not plain: + if line.startswith("+"): + color = colorama.Fore.GREEN + elif line.startswith("-"): + color = colorama.Fore.RED + print(color + line) + # Reset color if we're printing in color + if not plain: + print(colorama.Style.RESET_ALL, end="") + return has_diff + + +def get_percent_color(value: float) -> str: + """Return colorama ANSI escape character for the given decimal value.""" + if value == 1.0: + return colorama.Fore.GREEN + if value > 0.8: + return colorama.Fore.YELLOW + + return colorama.Fore.RED + + +def percent_string( + ratio: float, is_effective: bool = False, is_plain: bool = False +) -> str: + """Helper to construct a percentage string from the given ratio. + If is_effective (i.e. effective match), indicate that with the asterisk. + If is_plain, don't use colorama ANSI codes.""" + + percenttext = f"{(ratio * 100):.2f}%" + effective_star = "*" if is_effective else "" + + if is_plain: + return percenttext + effective_star + + return "".join( + [ + get_percent_color(ratio), + percenttext, + colorama.Fore.RED if is_effective else "", + effective_star, + colorama.Style.RESET_ALL, + ] + ) + + +def diff_json_display(show_both_addrs: bool = False, is_plain: bool = False): + """Generate a function that will display the diff according to + the reccmp display preferences.""" + + def formatter(orig_addr, saved, new) -> str: + old_pct = "new" + new_pct = "gone" + name = "" + recomp_addr = "n/a" + + if new is not None: + new_pct = ( + "stub" + if new.get("stub", False) + else percent_string( + new["matching"], new.get("effective", False), is_plain + ) + ) + + # Prefer the current name of this function if we have it. + # We are using the original address as the key. + # A function being renamed is not of interest here. + name = new.get("name", "") + recomp_addr = new.get("recomp", "n/a") + + if saved is not None: + old_pct = ( + "stub" + if saved.get("stub", False) + else percent_string( + saved["matching"], saved.get("effective", False), is_plain + ) + ) + + if name == "": + name = saved.get("name", "") + + if show_both_addrs: + addr_string = f"{orig_addr} / {recomp_addr:10}" + else: + addr_string = orig_addr + + # The ANSI codes from colorama counted towards string length, + # so displaying this as an ascii-like spreadsheet + # (using f-string formatting) would take some effort. + return f"{addr_string} - {name} ({old_pct} -> {new_pct})" + + return formatter + + +def diff_json( + saved_data, + new_data, + orig_file: str, + show_both_addrs: bool = False, + is_plain: bool = False, +): + """Using a saved copy of the diff summary and the current data, print a + report showing which functions/symbols have changed match percentage.""" + + # Don't try to diff a report generated for a different binary file + base_file = os.path.basename(orig_file).lower() + + if saved_data.get("file") != base_file: + logging.getLogger().error( + "Diff report for '%s' does not match current file '%s'", + saved_data.get("file"), + base_file, + ) + return + + if "timestamp" in saved_data: + now = datetime.now().replace(microsecond=0) + then = datetime.fromtimestamp(saved_data["timestamp"]).replace(microsecond=0) + + print( + " ".join( + [ + "Saved diff report generated", + then.strftime("%B %d %Y, %H:%M:%S"), + f"({str(now - then)} ago)", + ] + ) + ) + + print() + + # Convert to dict, using orig_addr as key + saved_invert = {obj["address"]: obj for obj in saved_data["data"]} + new_invert = {obj["address"]: obj for obj in new_data} + + all_addrs = set(saved_invert.keys()).union(new_invert.keys()) + + # Put all the information in one place so we can decide how each item changed. + combined = { + addr: ( + saved_invert.get(addr), + new_invert.get(addr), + ) + for addr in sorted(all_addrs) + } + + # The criteria for diff judgement is in these dict comprehensions: + # Any function not in the saved file + new_functions = { + key: (saved, new) for key, (saved, new) in combined.items() if saved is None + } + + # Any function now missing from the saved file + # or a non-stub -> stub conversion + dropped_functions = { + key: (saved, new) + for key, (saved, new) in combined.items() + if new is None + or ( + new is not None + and saved is not None + and new.get("stub", False) + and not saved.get("stub", False) + ) + } + + # TODO: move these two into functions if the assessment gets more complex + # Any function with increased match percentage + # or stub -> non-stub conversion + improved_functions = { + key: (saved, new) + for key, (saved, new) in combined.items() + if saved is not None + and new is not None + and ( + new["matching"] > saved["matching"] + or (not new.get("stub", False) and saved.get("stub", False)) + ) + } + + # Any non-stub function with decreased match percentage + degraded_functions = { + key: (saved, new) + for key, (saved, new) in combined.items() + if saved is not None + and new is not None + and new["matching"] < saved["matching"] + and not saved.get("stub") + and not new.get("stub") + } + + # Any function with former or current "effective" match + entropy_functions = { + key: (saved, new) + for key, (saved, new) in combined.items() + if saved is not None + and new is not None + and new["matching"] == 1.0 + and saved["matching"] == 1.0 + and new.get("effective", False) != saved.get("effective", False) + } + + get_diff_str = diff_json_display(show_both_addrs, is_plain) + + for diff_name, diff_dict in [ + ("New", new_functions), + ("Increased", improved_functions), + ("Decreased", degraded_functions), + ("Dropped", dropped_functions), + ("Compiler entropy", entropy_functions), + ]: + if len(diff_dict) == 0: + continue + + print(f"{diff_name} ({len(diff_dict)}):") + + for addr, (saved, new) in diff_dict.items(): + print(get_diff_str(addr, saved, new)) + + print() + + +def get_file_in_script_dir(fn): + return os.path.join(os.path.dirname(os.path.abspath(sys.argv[0])), fn) diff --git a/tools/isledecomp/setup.py b/tools/isledecomp/setup.py new file mode 100644 index 00000000..bf3e05dc --- /dev/null +++ b/tools/isledecomp/setup.py @@ -0,0 +1,11 @@ +from setuptools import setup, find_packages + +setup( + name="isledecomp", + version="0.1.0", + description="Python tools for the isledecomp project", + packages=find_packages(), + tests_require=["pytest"], + include_package_data=True, + package_data={"isledecomp.lib": ["*.exe", "*.dll"]}, +) diff --git a/tools/isledecomp/tests/__init__.py b/tools/isledecomp/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tools/isledecomp/tests/conftest.py b/tools/isledecomp/tests/conftest.py new file mode 100644 index 00000000..9f56b8a7 --- /dev/null +++ b/tools/isledecomp/tests/conftest.py @@ -0,0 +1,3 @@ +def pytest_addoption(parser): + """Allow the option to run tests against the original LEGO1.DLL.""" + parser.addoption("--lego1", action="store", help="Path to LEGO1.DLL") diff --git a/tools/isledecomp/tests/samples/basic_class.cpp b/tools/isledecomp/tests/samples/basic_class.cpp new file mode 100644 index 00000000..4316ad4a --- /dev/null +++ b/tools/isledecomp/tests/samples/basic_class.cpp @@ -0,0 +1,30 @@ +// Sample for python unit tests +// Not part of the decomp + +// A very simple class + +// VTABLE: TEST 0x1001002 +class TestClass { +public: + TestClass(); + virtual ~TestClass() override; + + virtual MxResult Tickle() override; // vtable+08 + + // FUNCTION: TEST 0x12345678 + inline const char* ClassName() const // vtable+0c + { + // 0xabcd1234 + return "TestClass"; + } + + // FUNCTION: TEST 0xdeadbeef + inline MxBool IsA(const char* name) const override // vtable+10 + { + return !strcmp(name, TestClass::ClassName()); + } + +private: + int m_hello; + int m_hiThere; +}; diff --git a/tools/isledecomp/tests/samples/basic_file.cpp b/tools/isledecomp/tests/samples/basic_file.cpp new file mode 100644 index 00000000..99930de8 --- /dev/null +++ b/tools/isledecomp/tests/samples/basic_file.cpp @@ -0,0 +1,22 @@ +// Sample for python unit tests +// Not part of the decomp + +// A very simple well-formed code file + +// FUNCTION: TEST 0x1234 +void function01() +{ + // TODO +} + +// FUNCTION: TEST 0x2345 +void function02() +{ + // TODO +} + +// FUNCTION: TEST 0x3456 +void function03() +{ + // TODO +} diff --git a/tools/isledecomp/tests/samples/global_variables.cpp b/tools/isledecomp/tests/samples/global_variables.cpp new file mode 100644 index 00000000..3be0316a --- /dev/null +++ b/tools/isledecomp/tests/samples/global_variables.cpp @@ -0,0 +1,14 @@ +// Sample for python unit tests +// Not part of the decomp + +// Global variables inside and outside of functions + +// GLOBAL: TEST 0x1000 +const char *g_message = "test"; + +// FUNCTION: TEST 0x1234 +void function01() +{ + // GLOBAL: TEST 0x5555 + static int g_hello = 123; +} diff --git a/tools/isledecomp/tests/samples/inline.cpp b/tools/isledecomp/tests/samples/inline.cpp new file mode 100644 index 00000000..8a36c89a --- /dev/null +++ b/tools/isledecomp/tests/samples/inline.cpp @@ -0,0 +1,8 @@ +// Sample for python unit tests +// Not part of the decomp + +// FUNCTION: TEST 0x10000001 +inline const char* OneLineWithComment() const { return "MxDSObject"; }; // hi there + +// FUNCTION: TEST 0x10000002 +inline const char* OneLine() const { return "MxDSObject"; }; diff --git a/tools/isledecomp/tests/samples/missing_offset.cpp b/tools/isledecomp/tests/samples/missing_offset.cpp new file mode 100644 index 00000000..3f6b3811 --- /dev/null +++ b/tools/isledecomp/tests/samples/missing_offset.cpp @@ -0,0 +1,16 @@ +// Sample for python unit tests +// Not part of the decomp + +#include + +int no_offset_comment() +{ + static int dummy = 123; + return -1; +} + +// FUNCTION: TEST 0xdeadbeef +void regular_ole_function() +{ + printf("hi there"); +} diff --git a/tools/isledecomp/tests/samples/multiple_offsets.cpp b/tools/isledecomp/tests/samples/multiple_offsets.cpp new file mode 100644 index 00000000..dc3c5bfa --- /dev/null +++ b/tools/isledecomp/tests/samples/multiple_offsets.cpp @@ -0,0 +1,25 @@ +// Sample for python unit tests +// Not part of the decomp + +// Handling multiple offset markers + +// FUNCTION: TEST 0x1234 +// FUNCTION: HELLO 0x5555 +void different_modules() +{ + // TODO +} + +// FUNCTION: TEST 0x2345 +// FUNCTION: TEST 0x1234 +void same_module() +{ + // TODO +} + +// FUNCTION: TEST 0x2002 +// FUNCTION: test 0x1001 +void same_case_insensitive() +{ + // TODO +} diff --git a/tools/isledecomp/tests/samples/oneline_function.cpp b/tools/isledecomp/tests/samples/oneline_function.cpp new file mode 100644 index 00000000..feb82314 --- /dev/null +++ b/tools/isledecomp/tests/samples/oneline_function.cpp @@ -0,0 +1,12 @@ +// Sample for python unit tests +// Not part of the decomp + +// FUNCTION: TEST 0x1234 +void short_function() { static char* msg = "oneliner"; } + +// FUNCTION: TEST 0x5555 +void function_after_one_liner() +{ + // This function comes after the previous that is on a single line. + // Do we report the offset for this one correctly? +} diff --git a/tools/isledecomp/tests/samples/out_of_order.cpp b/tools/isledecomp/tests/samples/out_of_order.cpp new file mode 100644 index 00000000..951c99e7 --- /dev/null +++ b/tools/isledecomp/tests/samples/out_of_order.cpp @@ -0,0 +1,20 @@ +// Sample for python unit tests +// Not part of the decomp + +// FUNCTION: TEST 0x1001 +void function_order01() +{ + // TODO +} + +// FUNCTION: TEST 0x1003 +void function_order03() +{ + // TODO +} + +// FUNCTION: TEST 0x1002 +void function_order02() +{ + // TODO +} diff --git a/tools/isledecomp/tests/samples/poorly_formatted.cpp b/tools/isledecomp/tests/samples/poorly_formatted.cpp new file mode 100644 index 00000000..69f365ec --- /dev/null +++ b/tools/isledecomp/tests/samples/poorly_formatted.cpp @@ -0,0 +1,23 @@ +// Sample for python unit tests +// Not part of the decomp + +// While it's reasonable to expect a well-formed file (and clang-format +// will make sure we get one), this will put the parser through its paces. + +// FUNCTION: TEST 0x1234 +void curly_with_spaces() + { + static char* msg = "hello"; + } + +// FUNCTION: TEST 0x5555 +void weird_closing_curly() +{ + int x = 123; } + +// FUNCTION: HELLO 0x5656 +void bad_indenting() { + if (0) +{ + int y = 5; +}} diff --git a/tools/isledecomp/tests/test_compare_db.py b/tools/isledecomp/tests/test_compare_db.py new file mode 100644 index 00000000..55cb75a5 --- /dev/null +++ b/tools/isledecomp/tests/test_compare_db.py @@ -0,0 +1,82 @@ +"""Testing compare database behavior, particularly matching""" +import pytest +from isledecomp.compare.db import CompareDb + + +@pytest.fixture(name="db") +def fixture_db(): + return CompareDb() + + +def test_ignore_recomp_collision(db): + """Duplicate recomp addresses are ignored""" + db.set_recomp_symbol(0x1234, None, "hello", None, 100) + db.set_recomp_symbol(0x1234, None, "alias_for_hello", None, 100) + syms = db.get_all() + assert len(syms) == 1 + + +def test_orig_collision(db): + """Don't match if the original address is not unique""" + db.set_recomp_symbol(0x1234, None, "hello", None, 100) + assert db.match_function(0x5555, "hello") is True + + # Second run on same address fails + assert db.match_function(0x5555, "hello") is False + + # Call set_pair directly without wrapper + assert db.set_pair(0x5555, 0x1234) is False + + +def test_name_match(db): + db.set_recomp_symbol(0x1234, None, "hello", None, 100) + assert db.match_function(0x5555, "hello") is True + + match = db.get_by_orig(0x5555) + assert match.name == "hello" + assert match.recomp_addr == 0x1234 + + +def test_match_decorated(db): + """Should match using decorated name even though regular name is null""" + db.set_recomp_symbol(0x1234, None, None, "?_hello", 100) + assert db.match_function(0x5555, "?_hello") is True + match = db.get_by_orig(0x5555) + assert match is not None + + +def test_duplicate_name(db): + """If recomp name is not unique, match only one row""" + db.set_recomp_symbol(0x100, None, "_Construct", None, 100) + db.set_recomp_symbol(0x200, None, "_Construct", None, 100) + db.set_recomp_symbol(0x300, None, "_Construct", None, 100) + db.match_function(0x5555, "_Construct") + matches = db.get_matches() + # We aren't testing _which_ one would be matched, just that only one _was_ matched + assert len(matches) == 1 + + +def test_static_variable_match(db): + """Set up a situation where we can match a static function variable, then match it.""" + + # We need a matched function to start with. + db.set_recomp_symbol(0x1234, None, "Isle::Tick", "?Tick@IsleApp@@QAEXH@Z", 100) + db.match_function(0x5555, "Isle::Tick") + + # Decorated variable name from PDB. + db.set_recomp_symbol( + 0x2000, None, None, "?g_startupDelay@?1??Tick@IsleApp@@QAEXH@Z@4HA", 4 + ) + + # Provide variable name and orig function address from decomp markers + assert db.match_static_variable(0xBEEF, "g_startupDelay", 0x5555) is True + + +def test_match_options_bool(db): + """Test handling of boolean match options""" + + # You don't actually need an existing orig addr for this. + assert db.get_match_options(0x1234) == {} + + db.mark_stub(0x1234) + assert "stub" in db.get_match_options(0x1234) diff --git a/tools/isledecomp/tests/test_curly.py b/tools/isledecomp/tests/test_curly.py new file mode 100644 index 00000000..8328f5e9 --- /dev/null +++ b/tools/isledecomp/tests/test_curly.py @@ -0,0 +1,73 @@ +# nyuk nyuk nyuk +import pytest +from isledecomp.parser.parser import CurlyManager +from isledecomp.parser.util import sanitize_code_line + + +@pytest.fixture(name="curly") +def fixture_curly(): + return CurlyManager() + + +def test_simple(curly): + curly.read_line("namespace Test {") + assert curly.get_prefix() == "Test" + curly.read_line("}") + assert curly.get_prefix() == "" + + +def test_oneliner(curly): + """Should not go down into a scope for a class forward reference""" + curly.read_line("class LegoEntity;") + assert curly.get_prefix() == "" + # Now make sure that we still would not consider that class name + # even after reading the opening curly brace + curly.read_line("if (true) {") + assert curly.get_prefix() == "" + + +def test_ignore_comments(curly): + curly.read_line("namespace Test {") + curly.read_line("// }") + assert curly.get_prefix() == "Test" + + +@pytest.mark.xfail(reason="todo: need a real lexer") +def test_ignore_multiline_comments(curly): + curly.read_line("namespace Test {") + curly.read_line("/*") + curly.read_line("}") + curly.read_line("*/") + assert curly.get_prefix() == "Test" + curly.read_line("}") + assert curly.get_prefix() == "" + + +def test_nested(curly): + curly.read_line("namespace Test {") + curly.read_line("namespace Foo {") + assert curly.get_prefix() == "Test::Foo" + curly.read_line("}") + assert curly.get_prefix() == "Test" + + +sanitize_cases = [ + ("", ""), + (" ", ""), + ("{", "{"), + ("// comments {", ""), + ("{ // why comment here", "{"), + ("/* comments */ {", "{"), + ('"curly in a string {"', '""'), + ('if (!strcmp("hello { there }", g_test)) {', 'if (!strcmp("", g_test)) {'), + ("'{'", "''"), + ("weird_function('\"', hello, '\"')", "weird_function('', hello, '')"), +] + + +@pytest.mark.parametrize("start, end", sanitize_cases) +def test_sanitize(start: str, end: str): + """Make sure that we can remove curly braces in places where they should + not be considered as part of the semantic structure of the file. + i.e. inside strings or chars, and inside comments""" + assert sanitize_code_line(start) == end diff --git a/tools/isledecomp/tests/test_cvdump.py b/tools/isledecomp/tests/test_cvdump.py new file mode 100644 index 00000000..3670e495 --- /dev/null +++ b/tools/isledecomp/tests/test_cvdump.py @@ -0,0 +1,59 @@ +import pytest +from isledecomp.cvdump.types import ( + scalar_type_size, + scalar_type_pointer, + scalar_type_signed, +) + +# These are all the types seen in the cvdump. +# We have char, short, int, long, long long, float, and double all represented +# in both signed and unsigned. +# We can also identify a 4 byte pointer with the T_32 prefix. +# The type T_VOID is used to designate a function's return type. +# T_NOTYPE is specified as the type of "this" for a static function in a class. + +# For reference: https://github.com/microsoft/microsoft-pdb/blob/master/include/cvinfo.h + +# fmt: off +# Fields are: type_name, size, is_signed, is_pointer +type_check_cases = ( + ("T_32PINT4", 4, False, True), + ("T_32PLONG", 4, False, True), + ("T_32PRCHAR", 4, False, True), + ("T_32PREAL32", 4, False, True), + ("T_32PUCHAR", 4, False, True), + ("T_32PUINT4", 4, False, True), + ("T_32PULONG", 4, False, True), + ("T_32PUSHORT", 4, False, True), + ("T_32PVOID", 4, False, True), + ("T_CHAR", 1, True, False), + ("T_INT4", 4, True, False), + ("T_LONG", 4, True, False), + ("T_QUAD", 8, True, False), + ("T_RCHAR", 1, True, False), + ("T_REAL32", 4, True, False), + ("T_REAL64", 8, True, False), + ("T_SHORT", 2, True, False), + ("T_UCHAR", 1, False, False), + ("T_UINT4", 4, False, False), + ("T_ULONG", 4, False, False), + ("T_UQUAD", 8, False, False), + ("T_USHORT", 2, False, False), + ("T_WCHAR", 2, False, False), +) +# fmt: on + + +@pytest.mark.parametrize("type_name, size, _, __", type_check_cases) +def test_scalar_size(type_name: str, size: int, _, __): + assert scalar_type_size(type_name) == size + + +@pytest.mark.parametrize("type_name, _, is_signed, __", type_check_cases) +def test_scalar_signed(type_name: str, _, is_signed: bool, __): + assert scalar_type_signed(type_name) == is_signed + + +@pytest.mark.parametrize("type_name, _, __, is_pointer", type_check_cases) +def test_scalar_pointer(type_name: str, _, __, is_pointer: bool): + assert scalar_type_pointer(type_name) == is_pointer diff --git a/tools/isledecomp/tests/test_cvdump_symbols.py b/tools/isledecomp/tests/test_cvdump_symbols.py new file mode 100644 index 00000000..f4ca1aff --- /dev/null +++ b/tools/isledecomp/tests/test_cvdump_symbols.py @@ -0,0 +1,38 @@ +"""Test Cvdump SYMBOLS parser, reading function stack/params""" + +from isledecomp.cvdump.symbols import CvdumpSymbolsParser + +PROC_WITH_BLOC = """ +(000638) S_GPROC32: [0001:000C6135], Cb: 00000361, Type: 0x10ED, RegistrationBook::ReadyWorld + Parent: 00000000, End: 00000760, Next: 00000000 + Debug start: 0000000C, Debug end: 0000035C + Flags: Frame Ptr Present +(00067C) S_BPREL32: [FFFFFFD0], Type: 0x10EC, this +(000690) S_BPREL32: [FFFFFFDC], Type: 0x10F5, checkmarkBuffer +(0006AC) S_BPREL32: [FFFFFFE8], Type: 0x10F6, letterBuffer +(0006C8) S_BPREL32: [FFFFFFF4], Type: T_SHORT(0011), i +(0006D8) S_BPREL32: [FFFFFFF8], Type: 0x10F8, players +(0006EC) S_BPREL32: [FFFFFFFC], Type: 0x1044, gameState +(000704) S_BLOCK32: [0001:000C624F], Cb: 000001DA, + Parent: 00000638, End: 0000072C +(00071C) S_BPREL32: [FFFFFFD8], Type: T_SHORT(0011), j +(00072C) S_END +(000730) S_BLOCK32: [0001:000C6448], Cb: 00000032, + Parent: 00000638, End: 0000075C +(000748) S_BPREL32: [FFFFFFD4], Type: 0x10FA, infoman +(00075C) S_END +(000760) S_END +""" + + +def test_sblock32(): + """S_END has double duty as marking the end of a function (S_GPROC32) + and a scope block (S_BLOCK32). Make sure we can distinguish between + the two and not end a function early.""" + parser = CvdumpSymbolsParser() + for line in PROC_WITH_BLOC.split("\n"): + parser.read_line(line) + + # Make sure we can read the proc and all its stack references + assert len(parser.symbols) == 1 + assert len(parser.symbols[0].stack_symbols) == 8 diff --git a/tools/isledecomp/tests/test_cvdump_types.py b/tools/isledecomp/tests/test_cvdump_types.py new file mode 100644 index 00000000..3bd6afa0 --- /dev/null +++ b/tools/isledecomp/tests/test_cvdump_types.py @@ -0,0 +1,705 @@ +"""Specifically testing the Cvdump TYPES parser +and type dependency tree walker.""" + +import pytest +from isledecomp.cvdump.types import ( + CvdumpTypesParser, + CvdumpKeyError, + CvdumpIntegrityError, + FieldListItem, + VirtualBaseClass, + VirtualBasePointer, +) + +TEST_LINES = """ +0x1018 : Length = 18, Leaf = 0x1201 LF_ARGLIST argument count = 3 + list[0] = 0x100D + list[1] = 0x1016 + list[2] = 0x1017 + +0x1019 : Length = 14, Leaf = 0x1008 LF_PROCEDURE + Return type = T_LONG(0012), Call type = C Near + Func attr = none + # Parms = 3, Arg list type = 0x1018 + +0x101e : Length = 26, Leaf = 0x1009 LF_MFUNCTION + Return type = T_CHAR(0010), Class type = 0x101A, This type = 0x101B, + Call type = ThisCall, Func attr = none + Parms = 2, Arg list type = 0x101d, This adjust = 0 + +0x1028 : Length = 10, Leaf = 0x1001 LF_MODIFIER + const, modifies type T_REAL32(0040) + +0x103b : Length = 14, Leaf = 0x1503 LF_ARRAY + Element type = T_REAL32(0040) + Index type = T_SHORT(0011) + length = 16 + Name = + +0x103c : Length = 14, Leaf = 0x1503 LF_ARRAY + Element type = 0x103B + Index type = T_SHORT(0011) + length = 64 + Name = + +0x10e0 : Length = 86, Leaf = 0x1203 LF_FIELDLIST + list[0] = LF_MEMBER, public, type = T_REAL32(0040), offset = 0 + member name = 'x' + list[1] = LF_MEMBER, public, type = T_REAL32(0040), offset = 0 + member name = 'dvX' + list[2] = LF_MEMBER, public, type = T_REAL32(0040), offset = 4 + member name = 'y' + list[3] = LF_MEMBER, public, type = T_REAL32(0040), offset = 4 + member name = 'dvY' + list[4] = LF_MEMBER, public, type = T_REAL32(0040), offset = 8 + member name = 'z' + list[5] = LF_MEMBER, public, type = T_REAL32(0040), offset = 8 + member name = 'dvZ' + +0x10e1 : Length = 34, Leaf = 0x1505 LF_STRUCTURE + # members = 6, field list type 0x10e0, + Derivation list type 0x0000, VT shape type 0x0000 + Size = 12, class name = _D3DVECTOR, UDT(0x000010e1) + +0x10e4 : Length = 14, Leaf = 0x1503 LF_ARRAY + Element type = T_UCHAR(0020) + Index type = T_SHORT(0011) + length = 8 + Name = + +0x10ea : Length = 14, Leaf = 0x1503 LF_ARRAY + Element type = 0x1028 + Index type = T_SHORT(0011) + length = 12 + Name = + +0x11f0 : Length = 30, Leaf = 0x1504 LF_CLASS + # members = 0, field list type 0x0000, FORWARD REF, + Derivation list type 0x0000, VT shape type 0x0000 + Size = 0, class name = MxRect32, UDT(0x00001214) + +0x11f2 : Length = 10, Leaf = 0x1001 LF_MODIFIER + const, modifies type 0x11F0 + +0x1213 : Length = 530, Leaf = 0x1203 LF_FIELDLIST + list[0] = LF_METHOD, count = 5, list = 0x1203, name = 'MxRect32' + list[1] = LF_ONEMETHOD, public, VANILLA, index = 0x1205, name = 'operator=' + list[2] = LF_ONEMETHOD, public, VANILLA, index = 0x11F5, name = 'Intersect' + list[3] = LF_ONEMETHOD, public, VANILLA, index = 0x1207, name = 'SetPoint' + list[4] = LF_ONEMETHOD, public, VANILLA, index = 0x1207, name = 'AddPoint' + list[5] = LF_ONEMETHOD, public, VANILLA, index = 0x1207, name = 'SubtractPoint' + list[6] = LF_ONEMETHOD, public, VANILLA, index = 0x11F5, name = 'UpdateBounds' + list[7] = LF_ONEMETHOD, public, VANILLA, index = 0x1209, name = 'IsValid' + list[8] = LF_ONEMETHOD, public, VANILLA, index = 0x120A, name = 'IntersectsWith' + list[9] = LF_ONEMETHOD, public, VANILLA, index = 0x120B, name = 'GetWidth' + list[10] = LF_ONEMETHOD, public, VANILLA, index = 0x120B, name = 'GetHeight' + list[11] = LF_ONEMETHOD, public, VANILLA, index = 0x120C, name = 'GetPoint' + list[12] = LF_ONEMETHOD, public, VANILLA, index = 0x120D, name = 'GetSize' + list[13] = LF_ONEMETHOD, public, VANILLA, index = 0x120B, name = 'GetLeft' + list[14] = LF_ONEMETHOD, public, VANILLA, index = 0x120B, name = 'GetTop' + list[15] = LF_ONEMETHOD, public, VANILLA, index = 0x120B, name = 'GetRight' + list[16] = LF_ONEMETHOD, public, VANILLA, index = 0x120B, name = 'GetBottom' + list[17] = LF_ONEMETHOD, public, VANILLA, index = 0x120E, name = 'SetLeft' + list[18] = LF_ONEMETHOD, public, VANILLA, index = 0x120E, name = 'SetTop' + list[19] = LF_ONEMETHOD, public, VANILLA, index = 0x120E, name = 'SetRight' + list[20] = LF_ONEMETHOD, public, VANILLA, index = 0x120E, name = 'SetBottom' + list[21] = LF_METHOD, count = 3, list = 0x1211, name = 'CopyFrom' + list[22] = LF_ONEMETHOD, private, STATIC, index = 0x1212, name = 'Min' + list[23] = LF_ONEMETHOD, private, STATIC, index = 0x1212, name = 'Max' + list[24] = LF_MEMBER, private, type = T_INT4(0074), offset = 0 + member name = 'm_left' + list[25] = LF_MEMBER, private, type = T_INT4(0074), offset = 4 + member name = 'm_top' + list[26] = LF_MEMBER, private, type = T_INT4(0074), offset = 8 + member name = 'm_right' + list[27] = LF_MEMBER, private, type = T_INT4(0074), offset = 12 + member name = 'm_bottom' + +0x1214 : Length = 30, Leaf = 0x1504 LF_CLASS + # members = 34, field list type 0x1213, CONSTRUCTOR, OVERLOAD, + Derivation list type 0x0000, VT shape type 0x0000 + Size = 16, class name = MxRect32, UDT(0x00001214) + +0x1220 : Length = 30, Leaf = 0x1504 LF_CLASS + # members = 0, field list type 0x0000, FORWARD REF, + Derivation list type 0x0000, VT shape type 0x0000 + Size = 0, class name = MxCore, UDT(0x00004060) + +0x14db : Length = 30, Leaf = 0x1504 LF_CLASS + # members = 0, field list type 0x0000, FORWARD REF, + Derivation list type 0x0000, VT shape type 0x0000 + Size = 0, class name = MxString, UDT(0x00004db6) + +0x19b0 : Length = 34, Leaf = 0x1505 LF_STRUCTURE + # members = 0, field list type 0x0000, FORWARD REF, + Derivation list type 0x0000, VT shape type 0x0000 + Size = 0, class name = ROIColorAlias, UDT(0x00002a76) + +0x19b1 : Length = 14, Leaf = 0x1503 LF_ARRAY + Element type = 0x19B0 + Index type = T_SHORT(0011) + length = 440 + Name = + +0x2339 : Length = 26, Leaf = 0x1506 LF_UNION + # members = 0, field list type 0x0000, FORWARD REF, Size = 0 ,class name = FlagBitfield, UDT(0x00002e85) + +0x2e85 : Length = 26, Leaf = 0x1506 LF_UNION + # members = 8, field list type 0x2e84, Size = 1 ,class name = FlagBitfield, UDT(0x00002e85) + +0x2a75 : Length = 98, Leaf = 0x1203 LF_FIELDLIST + list[0] = LF_MEMBER, public, type = T_32PRCHAR(0470), offset = 0 + member name = 'm_name' + list[1] = LF_MEMBER, public, type = T_INT4(0074), offset = 4 + member name = 'm_red' + list[2] = LF_MEMBER, public, type = T_INT4(0074), offset = 8 + member name = 'm_green' + list[3] = LF_MEMBER, public, type = T_INT4(0074), offset = 12 + member name = 'm_blue' + list[4] = LF_MEMBER, public, type = T_INT4(0074), offset = 16 + member name = 'm_unk0x10' + +0x2a76 : Length = 34, Leaf = 0x1505 LF_STRUCTURE + # members = 5, field list type 0x2a75, + Derivation list type 0x0000, VT shape type 0x0000 + Size = 20, class name = ROIColorAlias, UDT(0x00002a76) + +0x22d4 : Length = 154, Leaf = 0x1203 LF_FIELDLIST + list[0] = LF_VFUNCTAB, type = 0x20FC + list[1] = LF_METHOD, count = 3, list = 0x22D0, name = 'MxVariable' + list[2] = LF_ONEMETHOD, public, INTRODUCING VIRTUAL, index = 0x1F0F, + vfptr offset = 0, name = 'GetValue' + list[3] = LF_ONEMETHOD, public, INTRODUCING VIRTUAL, index = 0x1F10, + vfptr offset = 4, name = 'SetValue' + list[4] = LF_ONEMETHOD, public, INTRODUCING VIRTUAL, index = 0x1F11, + vfptr offset = 8, name = '~MxVariable' + list[5] = LF_ONEMETHOD, public, VANILLA, index = 0x22D3, name = 'GetKey' + list[6] = LF_MEMBER, protected, type = 0x14DB, offset = 4 + member name = 'm_key' + list[7] = LF_MEMBER, protected, type = 0x14DB, offset = 20 + member name = 'm_value' + +0x22d5 : Length = 34, Leaf = 0x1504 LF_CLASS + # members = 10, field list type 0x22d4, CONSTRUCTOR, + Derivation list type 0x0000, VT shape type 0x20fb + Size = 36, class name = MxVariable, UDT(0x00004041) + +0x3c45 : Length = 50, Leaf = 0x1203 LF_FIELDLIST + list[0] = LF_ENUMERATE, public, value = 1, name = 'c_read' + list[1] = LF_ENUMERATE, public, value = 2, name = 'c_write' + list[2] = LF_ENUMERATE, public, value = 4, name = 'c_text' + +0x3cc2 : Length = 38, Leaf = 0x1507 LF_ENUM + # members = 64, type = T_INT4(0074) field list type 0x3cc1 +NESTED, enum name = JukeBox::JukeBoxScript, UDT(0x00003cc2) + +0x3fab : Length = 10, Leaf = 0x1002 LF_POINTER + Pointer (NEAR32), Size: 0 + Element type : 0x3FAA + +0x405f : Length = 158, Leaf = 0x1203 LF_FIELDLIST + list[0] = LF_VFUNCTAB, type = 0x2090 + list[1] = LF_ONEMETHOD, public, VANILLA, index = 0x176A, name = 'MxCore' + list[2] = LF_ONEMETHOD, public, INTRODUCING VIRTUAL, index = 0x176A, + vfptr offset = 0, name = '~MxCore' + list[3] = LF_ONEMETHOD, public, INTRODUCING VIRTUAL, index = 0x176B, + vfptr offset = 4, name = 'Notify' + list[4] = LF_ONEMETHOD, public, INTRODUCING VIRTUAL, index = 0x2087, + vfptr offset = 8, name = 'Tickle' + list[5] = LF_ONEMETHOD, public, INTRODUCING VIRTUAL, index = 0x202F, + vfptr offset = 12, name = 'ClassName' + list[6] = LF_ONEMETHOD, public, INTRODUCING VIRTUAL, index = 0x2030, + vfptr offset = 16, name = 'IsA' + list[7] = LF_ONEMETHOD, public, VANILLA, index = 0x2091, name = 'GetId' + list[8] = LF_MEMBER, private, type = T_UINT4(0075), offset = 4 + member name = 'm_id' + +0x4060 : Length = 30, Leaf = 0x1504 LF_CLASS + # members = 9, field list type 0x405f, CONSTRUCTOR, + Derivation list type 0x0000, VT shape type 0x1266 + Size = 8, class name = MxCore, UDT(0x00004060) + +0x4262 : Length = 14, Leaf = 0x1503 LF_ARRAY + Element type = 0x3CC2 + Index type = T_SHORT(0011) + length = 24 + Name = + +0x432f : Length = 14, Leaf = 0x1503 LF_ARRAY + Element type = T_INT4(0074) + Index type = T_SHORT(0011) + length = 12 + Name = + +0x4db5 : Length = 246, Leaf = 0x1203 LF_FIELDLIST + list[0] = LF_BCLASS, public, type = 0x1220, offset = 0 + list[1] = LF_METHOD, count = 3, list = 0x14E3, name = 'MxString' + list[2] = LF_ONEMETHOD, public, VIRTUAL, index = 0x14DE, name = '~MxString' + list[3] = LF_METHOD, count = 2, list = 0x14E7, name = 'operator=' + list[4] = LF_ONEMETHOD, public, VANILLA, index = 0x14DE, name = 'ToUpperCase' + list[5] = LF_ONEMETHOD, public, VANILLA, index = 0x14DE, name = 'ToLowerCase' + list[6] = LF_ONEMETHOD, public, VANILLA, index = 0x14E8, name = 'operator+' + list[7] = LF_ONEMETHOD, public, VANILLA, index = 0x14E9, name = 'operator+=' + list[8] = LF_ONEMETHOD, public, VANILLA, index = 0x14EB, name = 'Compare' + list[9] = LF_ONEMETHOD, public, VANILLA, index = 0x14EC, name = 'GetData' + list[10] = LF_ONEMETHOD, public, VANILLA, index = 0x4DB4, name = 'GetLength' + list[11] = LF_MEMBER, private, type = T_32PRCHAR(0470), offset = 8 + member name = 'm_data' + list[12] = LF_MEMBER, private, type = T_USHORT(0021), offset = 12 + member name = 'm_length' + + +0x4dee : Length = 406, Leaf = 0x1203 LF_FIELDLIST + list[0] = LF_VBCLASS, public, direct base type = 0x15EA + virtual base ptr = 0x43E9, vbpoff = 4, vbind = 3 + list[1] = LF_IVBCLASS, public, indirect base type = 0x1183 + virtual base ptr = 0x43E9, vbpoff = 4, vbind = 1 + list[2] = LF_IVBCLASS, public, indirect base type = 0x1468 + virtual base ptr = 0x43E9, vbpoff = 4, vbind = 2 + list[3] = LF_VFUNCTAB, type = 0x2B95 + list[4] = LF_ONEMETHOD, public, VANILLA, index = 0x15C2, name = 'LegoRaceMap' + list[5] = LF_ONEMETHOD, public, VIRTUAL, index = 0x15C3, name = '~LegoRaceMap' + list[6] = LF_ONEMETHOD, public, VIRTUAL, index = 0x15C5, name = 'Notify' + list[7] = LF_ONEMETHOD, public, VIRTUAL, index = 0x15C4, name = 'ParseAction' + list[8] = LF_ONEMETHOD, public, VIRTUAL, index = 0x4DED, name = 'VTable0x70' + list[9] = LF_ONEMETHOD, public, INTRODUCING VIRTUAL, index = 0x15C2, + vfptr offset = 0, name = 'FUN_1005d4b0' + list[10] = LF_MEMBER, private, type = T_UCHAR(0020), offset = 8 + member name = 'm_parentClass2Field1' + list[11] = LF_MEMBER, private, type = T_32PVOID(0403), offset = 12 + member name = 'm_parentClass2Field2' + +0x4def : Length = 34, Leaf = 0x1504 LF_CLASS + # members = 21, field list type 0x4dee, CONSTRUCTOR, + Derivation list type 0x0000, VT shape type 0x12a0 + Size = 436, class name = LegoRaceMap, UDT(0x00004def) + +0x4db6 : Length = 30, Leaf = 0x1504 LF_CLASS + # members = 16, field list type 0x4db5, CONSTRUCTOR, OVERLOAD, + Derivation list type 0x0000, VT shape type 0x1266 + Size = 16, class name = MxString, UDT(0x00004db6) + +0x5591 : Length = 570, Leaf = 0x1203 LF_FIELDLIST + list[0] = LF_VBCLASS, public, direct base type = 0x15EA + virtual base ptr = 0x43E9, vbpoff = 4, vbind = 3 + list[1] = LF_IVBCLASS, public, indirect base type = 0x1183 + virtual base ptr = 0x43E9, vbpoff = 4, vbind = 1 + list[2] = LF_IVBCLASS, public, indirect base type = 0x1468 + virtual base ptr = 0x43E9, vbpoff = 4, vbind = 2 + list[3] = LF_VFUNCTAB, type = 0x4E11 + list[4] = LF_ONEMETHOD, public, VANILLA, index = 0x1ABD, name = 'LegoCarRaceActor' + list[5] = LF_ONEMETHOD, public, VIRTUAL, index = 0x1AE0, name = 'ClassName' + list[6] = LF_ONEMETHOD, public, VIRTUAL, index = 0x1AE1, name = 'IsA' + list[7] = LF_ONEMETHOD, public, VIRTUAL, index = 0x1ADD, name = 'VTable0x6c' + list[8] = LF_ONEMETHOD, public, VIRTUAL, index = 0x1ADB, name = 'VTable0x70' + list[9] = LF_ONEMETHOD, public, VIRTUAL, index = 0x1ADA, name = 'SwitchBoundary' + list[10] = LF_ONEMETHOD, public, VIRTUAL, index = 0x1ADC, name = 'VTable0x9c' + list[11] = LF_ONEMETHOD, public, INTRODUCING VIRTUAL, index = 0x558E, + vfptr offset = 0, name = 'FUN_10080590' + list[12] = LF_ONEMETHOD, public, INTRODUCING VIRTUAL, index = 0x1AD8, + vfptr offset = 4, name = 'FUN_10012bb0' + list[13] = LF_ONEMETHOD, public, INTRODUCING VIRTUAL, index = 0x1AD9, + vfptr offset = 8, name = 'FUN_10012bc0' + list[14] = LF_ONEMETHOD, public, INTRODUCING VIRTUAL, index = 0x1AD8, + vfptr offset = 12, name = 'FUN_10012bd0' + list[15] = LF_ONEMETHOD, public, INTRODUCING VIRTUAL, index = 0x1AD9, + vfptr offset = 16, name = 'FUN_10012be0' + list[16] = LF_ONEMETHOD, public, INTRODUCING VIRTUAL, index = 0x1AD8, + vfptr offset = 20, name = 'FUN_10012bf0' + list[17] = LF_ONEMETHOD, public, INTRODUCING VIRTUAL, index = 0x1AD9, + vfptr offset = 24, name = 'FUN_10012c00' + list[18] = LF_ONEMETHOD, public, INTRODUCING VIRTUAL, index = 0x1ABD, + vfptr offset = 28, name = 'VTable0x1c' + list[19] = LF_MEMBER, protected, type = T_REAL32(0040), offset = 8 + member name = 'm_parentClass1Field1' + list[25] = LF_ONEMETHOD, public, VIRTUAL, (compgenx), index = 0x15D1, name = '~LegoCarRaceActor' + +0x5592 : Length = 38, Leaf = 0x1504 LF_CLASS + # members = 26, field list type 0x5591, CONSTRUCTOR, + Derivation list type 0x0000, VT shape type 0x34c7 + Size = 416, class name = LegoCarRaceActor, UDT(0x00005592) + +0x5593 : Length = 638, Leaf = 0x1203 LF_FIELDLIST + list[0] = LF_BCLASS, public, type = 0x5592, offset = 0 + list[1] = LF_BCLASS, public, type = 0x4DEF, offset = 32 + list[2] = LF_IVBCLASS, public, indirect base type = 0x1183 + virtual base ptr = 0x43E9, vbpoff = 4, vbind = 1 + list[3] = LF_IVBCLASS, public, indirect base type = 0x1468 + virtual base ptr = 0x43E9, vbpoff = 4, vbind = 2 + list[4] = LF_IVBCLASS, public, indirect base type = 0x15EA + virtual base ptr = 0x43E9, vbpoff = 4, vbind = 3 + list[5] = LF_ONEMETHOD, public, VANILLA, index = 0x15CD, name = 'LegoRaceCar' + list[6] = LF_ONEMETHOD, public, VIRTUAL, index = 0x15CE, name = '~LegoRaceCar' + list[7] = LF_ONEMETHOD, public, VIRTUAL, index = 0x15D2, name = 'Notify' + list[8] = LF_ONEMETHOD, public, VIRTUAL, index = 0x15E8, name = 'ClassName' + list[9] = LF_ONEMETHOD, public, VIRTUAL, index = 0x15E9, name = 'IsA' + list[10] = LF_ONEMETHOD, public, VIRTUAL, index = 0x15D5, name = 'ParseAction' + list[11] = LF_ONEMETHOD, public, VIRTUAL, index = 0x15D3, name = 'SetWorldSpeed' + list[12] = LF_ONEMETHOD, public, VIRTUAL, index = 0x15DF, name = 'VTable0x6c' + list[13] = LF_ONEMETHOD, public, VIRTUAL, index = 0x15D3, name = 'VTable0x70' + list[14] = LF_ONEMETHOD, public, VIRTUAL, index = 0x15DC, name = 'VTable0x94' + list[15] = LF_ONEMETHOD, public, VIRTUAL, index = 0x15E5, name = 'SwitchBoundary' + list[16] = LF_ONEMETHOD, public, VIRTUAL, index = 0x15DD, name = 'VTable0x9c' + list[17] = LF_ONEMETHOD, public, INTRODUCING VIRTUAL, index = 0x15D4, + vfptr offset = 32, name = 'SetMaxLinearVelocity' + list[18] = LF_ONEMETHOD, public, INTRODUCING VIRTUAL, index = 0x15D4, + vfptr offset = 36, name = 'FUN_10012ff0' + list[19] = LF_ONEMETHOD, public, INTRODUCING VIRTUAL, index = 0x5588, + vfptr offset = 40, name = 'HandleSkeletonKicks' + list[20] = LF_MEMBER, private, type = T_UCHAR(0020), offset = 84 + member name = 'm_childClassField' + +0x5594 : Length = 34, Leaf = 0x1504 LF_CLASS + # members = 30, field list type 0x5593, CONSTRUCTOR, + Derivation list type 0x0000, VT shape type 0x2d1e + Size = 512, class name = LegoRaceCar, UDT(0x000055bb) +""" + + +@pytest.fixture(name="parser") +def types_parser_fixture(): + parser = CvdumpTypesParser() + for line in TEST_LINES.split("\n"): + parser.read_line(line) + + return parser + + +def test_basic_parsing(parser: CvdumpTypesParser): + obj = parser.keys["0x4db6"] + assert obj["type"] == "LF_CLASS" + assert obj["name"] == "MxString" + assert obj["udt"] == "0x4db6" + + assert len(parser.keys["0x4db5"]["members"]) == 2 + + +def test_scalar_types(parser: CvdumpTypesParser): + """Full tests on the scalar_* methods are in another file. + Here we are just testing the passthrough of the "T_" types.""" + assert parser.get("T_CHAR").name is None + assert parser.get("T_CHAR").size == 1 + + assert parser.get("T_32PVOID").name is None + assert parser.get("T_32PVOID").size == 4 + + +def test_resolve_forward_ref(parser: CvdumpTypesParser): + # Non-forward ref + assert parser.get("0x22d5").name == "MxVariable" + # Forward ref + assert parser.get("0x14db").name == "MxString" + assert parser.get("0x14db").size == 16 + + +def test_members(parser: CvdumpTypesParser): + """Return the list of items to compare for a given complex type. + If the class has a superclass, add those members too.""" + # MxCore field list + mxcore_members = parser.get_scalars("0x405f") + assert mxcore_members == [ + (0, "vftable", "T_32PVOID"), + (4, "m_id", "T_UINT4"), + ] + + # MxCore class id. Should be the same members + assert mxcore_members == parser.get_scalars("0x4060") + + # MxString field list. Should add inherited members from MxCore + assert parser.get_scalars("0x4db5") == [ + (0, "vftable", "T_32PVOID"), + (4, "m_id", "T_UINT4"), + (8, "m_data", "T_32PRCHAR"), + (12, "m_length", "T_USHORT"), + ] + + # LegoRaceCar with multiple superclasses + assert parser.get("0x5594").members == [ + FieldListItem(offset=0, name="vftable", type="T_32PVOID"), + FieldListItem(offset=0, name="vftable", type="T_32PVOID"), + FieldListItem(offset=8, name="m_parentClass1Field1", type="T_REAL32"), + FieldListItem(offset=8, name="m_parentClass2Field1", type="T_UCHAR"), + FieldListItem(offset=12, name="m_parentClass2Field2", type="T_32PVOID"), + FieldListItem(offset=84, name="m_childClassField", type="T_UCHAR"), + ] + + +def test_virtual_base_classes(parser: CvdumpTypesParser): + """Make sure that virtual base classes are parsed correctly.""" + + lego_car_race_actor = parser.keys.get("0x5591") + assert lego_car_race_actor is not None + assert lego_car_race_actor["vbase"] == VirtualBasePointer( + vboffset=4, + bases=[ + VirtualBaseClass(type="0x1183", index=1, direct=False), + VirtualBaseClass(type="0x1468", index=2, direct=False), + VirtualBaseClass(type="0x15EA", index=3, direct=True), + ], + ) + + +def test_members_recursive(parser: CvdumpTypesParser): + """Make sure that we unwrap the dependency tree correctly.""" + # MxVariable field list + assert parser.get_scalars("0x22d4") == [ + (0, "vftable", "T_32PVOID"), + (4, "m_key.vftable", "T_32PVOID"), + (8, "m_key.m_id", "T_UINT4"), + (12, "m_key.m_data", "T_32PRCHAR"), + (16, "m_key.m_length", "T_USHORT"), # with padding + (20, "m_value.vftable", "T_32PVOID"), + (24, "m_value.m_id", "T_UINT4"), + (28, "m_value.m_data", "T_32PRCHAR"), + (32, "m_value.m_length", "T_USHORT"), # with padding + ] + + +def test_struct(parser: CvdumpTypesParser): + """Basic test for converting type into struct.unpack format string.""" + # MxCore: vftable and uint32. The vftable pointer is read as uint32. + assert parser.get_format_string("0x4060") == "::`vftable'"), + ( + "??_7?$MxPtrList@VLegoPathController@@@@6B@", + "MxPtrList::`vftable'", + ), + ("??_7Renderer@Tgl@@6B@", "Tgl::Renderer::`vftable'"), + ("??_7LegoExtraActor@@6B0@@", "LegoExtraActor::`vftable'{for `LegoExtraActor'}"), + ( + "??_7LegoExtraActor@@6BLegoAnimActor@@@", + "LegoExtraActor::`vftable'{for `LegoAnimActor'}", + ), + ( + "??_7LegoAnimActor@@6B?$LegoContainer@PAM@@@", + "LegoAnimActor::`vftable'{for `LegoContainer'}", + ), +] + + +@pytest.mark.parametrize("symbol, class_name", vtable_cases) +def test_vtable(symbol, class_name): + assert demangle_vtable(symbol) == class_name + + +def test_vtordisp(): + """Make sure we can accurately detect an adjuster thunk symbol""" + assert get_vtordisp_name("") is None + assert get_vtordisp_name("?ClassName@LegoExtraActor@@UBEPBDXZ") is None + assert ( + get_vtordisp_name("?ClassName@LegoExtraActor@@$4PPPPPPPM@A@BEPBDXZ") is not None + ) + + # A function called vtordisp + assert get_vtordisp_name("?vtordisp@LegoExtraActor@@UBEPBDXZ") is None diff --git a/tools/isledecomp/tests/test_instgen.py b/tools/isledecomp/tests/test_instgen.py new file mode 100644 index 00000000..060d46d9 --- /dev/null +++ b/tools/isledecomp/tests/test_instgen.py @@ -0,0 +1,212 @@ +from isledecomp.compare.asm.instgen import InstructGen, SectionType + + +def test_ret(): + """Make sure we can handle a function with one instruction.""" + ig = InstructGen(b"\xc3", 0) + assert len(ig.sections) == 1 + + +SCORE_NOTIFY = ( + b"\x53\x56\x57\x8b\xd9\x33\xff\x8b\x74\x24\x10\x56\xe8\xbf\xe1\x01" + b"\x00\x80\xbb\xf6\x00\x00\x00\x00\x0f\x84\x9c\x00\x00\x00\x8b\x4e" + b"\x04\x49\x83\xf9\x17\x0f\x87\x8f\x00\x00\x00\x33\xc0\x8a\x81\xec" + b"\x14\x00\x10\xff\x24\x85\xd4\x14\x00\x10\x8b\xcb\xbf\x01\x00\x00" + b"\x00\xe8\x7a\x05\x00\x00\x8b\xc7\x5f\x5e\x5b\xc2\x04\x00\x56\x8b" + b"\xcb\xe8\xaa\x00\x00\x00\x8b\xf8\x8b\xc7\x5f\x5e\x5b\xc2\x04\x00" + b"\x80\x7e\x18\x20\x75\x07\x8b\xcb\xe8\xc3\xfe\xff\xff\xbf\x01\x00" + b"\x00\x00\x8b\xc7\x5f\x5e\x5b\xc2\x04\x00\x56\x8b\xcb\xe8\x3e\x02" + b"\x00\x00\x8b\xf8\x8b\xc7\x5f\x5e\x5b\xc2\x04\x00\x6a\x09\xa1\x4c" + b"\x45\x0f\x10\x6a\x07\x50\xe8\x35\x45\x01\x00\x83\xc4\x0c\x8b\x83" + b"\xf8\x00\x00\x00\x85\xc0\x74\x0d\x50\xe8\xa2\x42\x01\x00\x8b\xc8" + b"\xe8\x9b\x9b\x03\x00\xbf\x01\x00\x00\x00\x8b\xc7\x5f\x5e\x5b\xc2" + b"\x04\x00\x8b\xff\x4a\x14\x00\x10\x5e\x14\x00\x10\x70\x14\x00\x10" + b"\x8a\x14\x00\x10\x9c\x14\x00\x10\xca\x14\x00\x10\x00\x01\x05\x05" + b"\x05\x05\x02\x05\x05\x05\x05\x05\x05\x05\x05\x05\x03\x05\x05\x05" + b"\x05\x05\x05\x04\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc" +) + + +def test_score_notify(): + """Score::Notify function from 0x10001410 in LEGO1. + Good representative function for jump table (at 0x100014d4) + and switch data (at 0x100014ec).""" + ig = InstructGen(SCORE_NOTIFY, 0x10001410) + + # Did we get everything? + assert len(ig.sections) == 3 + types_only = tuple(s.type for s in ig.sections) + assert types_only == (SectionType.CODE, SectionType.ADDR_TAB, SectionType.DATA_TAB) + + # CODE section stopped at correct place? + instructions = ig.sections[0].contents + assert instructions[-1].address == 0x100014D2 + # n.b. 0x100014d2 is the dummy instruction `mov edi, edi` + # Ghidra does more thorough analysis and ignores this. + # The last real instruction should be at 0x100014cf. Not a big deal + # to include this because it is not junk data. + + # 6 switch addresses + assert len(ig.sections[1].contents) == 6 + + # TODO: The data table at the end includes all of the 0xCC padding bytes. + + +SMACK_CASE = ( + # LEGO1: 0x100cdc43 (modified so jump table points at +0x1016) + b"\x2e\xff\x24\x8d\x16\x10\x00\x00" + # LEGO1: 0x100cdb62 (instructions before and after jump table) + b"\x8b\xf8\xeb\x1a\x87\xdb\x87\xc9\x87\xdb\x87\xc9\x87\xdb\x50\xdc" + b"\x0c\x10\xd0\xe2\x0c\x10\xb0\xe8\x0c\x10\x50\xe9\x0c\x10\xa0\x10" + b"\x27\x10\x10\x3c\x11\x77\x17\x8a\xc8" +) + + +def test_smack_case(): + """Case where we have code / jump table / code. + Need to properly separate code sections, eliminate junk instructions + and continue disassembling at the proper address following the data.""" + ig = InstructGen(SMACK_CASE, 0x1000) + assert len(ig.sections) == 3 + assert ig.sections[0].type == ig.sections[2].type == SectionType.CODE + + # Make sure we captured the instruction immediately after + assert ig.sections[2].contents[0].mnemonic == "mov" + + +# BETA10 0x1004c9cc +BETA_FUNC = ( + b"\x55\x8b\xec\x83\xec\x08\x53\x56\x57\x89\x4d\xfc\x8b\x45\xfc\x33" + b"\xc9\x8a\x88\x19\x02\x00\x00\x89\x4d\xf8\xe9\x1e\x00\x00\x00\xe9" + b"\x41\x00\x00\x00\xe9\x3c\x00\x00\x00\xe9\x37\x00\x00\x00\xe9\x32" + b"\x00\x00\x00\xe9\x2d\x00\x00\x00\xe9\x28\x00\x00\x00\x83\x7d\xf8" + b"\x04\x0f\x87\x1e\x00\x00\x00\x8b\x45\xf8\xff\x24\x85\x1d\xca\x04" + b"\x10\xeb\xc9\x04\x10\xf0\xc9\x04\x10\xf5\xc9\x04\x10\xfa\xc9\x04" + b"\x10\xff\xc9\x04\x10\xb0\x01\xe9\x00\x00\x00\x00\x5f\x5e\x5b\xc9" + b"\xc2\x04\x00" +) + + +def test_beta_case(): + """Complete (and short) function with CODE / ADDR / CODE""" + ig = InstructGen(BETA_FUNC, 0x1004C9CC) + # The JMP into the jump table immediately precedes the jump table. + # We have to detect this and switch sections correctly or we will only + # get 1 section. + assert len(ig.sections) == 3 + assert ig.sections[0].type == ig.sections[2].type == SectionType.CODE + + # Make sure we captured the instruction immediately after + assert ig.sections[2].contents[0].mnemonic == "mov" + + +# LEGO1 0x1000fb50 +# TODO: The test data here is longer than it needs to be. +THUNK_TEST = ( + b"\x2b\x49\xfc\xe9\x08\x00\x00\x00\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc" + b"\x56\x8b\xf1\xe8\xd8\xc5\x00\x00\x8b\xce\xe8\xb1\xdc\x01\x00\xf6" + b"\x44\x24\x08\x01\x74\x0c\x8d\x46\xe0\x50\xe8\xe1\x66\x07\x00\x83" + b"\xc4\x04\x8d\x46\xe0\x5e\xc2\x04\x00\xcc\xcc\xcc\xcc\xcc\xcc\xcc" + b"\x2b\x49\xfc\xe9\x08\x00\x00\x00\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc" + b"\xb8\x7c\x05\x0f\x10\xc3\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc" + b"\x2b\x49\xfc\xe9\x08\x00\x00\x00\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc" + b"\x8b\x54" + # The problem is here: the last two bytes are the start of the next + # function 0x1000fbc0. This is not enough data to read an instruction. +) + + +def test_thunk_case(): + """Adjuster thunk incorrectly annotated. + We are reading way more bytes than we should for this function.""" + ig = InstructGen(THUNK_TEST, 0x1000FB50) + # No switch cases here, so the only section is code. + # This caused an infinite loop during testing so the goal is just to finish. + assert len(ig.sections) == 1 + + # TODO: We might detect the 0xCC padding bytes and cut off the function. + # If we did that, we would correctly read only 2 instructions. + # assert len(ig.sections[0].contents) == 2 + + +# LEGO1 0x1006f080, Infocenter::HandleEndAction +HANDLE_END_ACTION = ( + b"\x53\x56\x57\x8b\xf1\x8b\x5c\x24\x10\x8b\x0d\x84\x45\x0f\x10\x8b" + b"\x7b\x0c\x8b\x47\x20\x39\x01\x75\x29\x81\x7f\x1c\xf3\x01\x00\x00" + b"\x75\x20\xe8\x59\x66\xfa\xff\x6a\x00\x8b\x40\x18\x6a\x00\x6a\x10" + b"\x50\xff\x15\x38\xb5\x10\x10\xb8\x01\x00\x00\x00\x5f\x5e\x5b\xc2" + b"\x04\x00\x39\x46\x0c\x0f\x85\xa2\x00\x00\x00\x8b\x47\x1c\x83\xf8" + b"\x28\x74\x18\x83\xf8\x29\x74\x13\x83\xf8\x2a\x74\x0e\x83\xf8\x2b" + b"\x74\x09\x83\xf8\x2c\x0f\x85\x82\x00\x00\x00\x66\x8b\x86\xd4\x01" + b"\x00\x00\x66\x85\xc0\x74\x09\x66\x48\x66\x89\x86\xd4\x01\x00\x00" + b"\x66\x83\xbe\xd4\x01\x00\x00\x00\x75\x63\x6a\x0b\xe8\xff\x67\xfa" + b"\xff\x66\x8b\x86\xfc\x00\x00\x00\x83\xc4\x04\x50\xe8\x3f\x66\xfa" + b"\xff\x8b\xc8\xe8\x58\xa6\xfc\xff\x0f\xbf\x86\xfc\x00\x00\x00\x48" + b"\x83\xf8\x04\x77\x2f\xff\x24\x85\x78\xf4\x06\x10\x68\x1d\x02\x00" + b"\x00\xeb\x1a\x68\x1e\x02\x00\x00\xeb\x13\x68\x1f\x02\x00\x00\xeb" + b"\x0c\x68\x20\x02\x00\x00\xeb\x05\x68\x21\x02\x00\x00\x8b\xce\xe8" + b"\x9c\x21\x00\x00\x6a\x01\x8b\xce\xe8\x53\x1c\x00\x00\x8d\x8e\x0c" + b"\x01\x00\x00\x53\x8b\x01\xff\x50\x04\x85\xc0\x0f\x85\xef\x02\x00" + b"\x00\x8b\x56\x0c\x8b\x4f\x20\x3b\xd1\x74\x0e\x8b\x1d\x74\x45\x0f" + b"\x10\x39\x0b\x0f\x85\xd7\x02\x00\x00\x81\x7f\x1c\x02\x02\x00\x00" + b"\x75\x1a\x6a\x00\x52\x6a\x10\xe8\xa4\x65\xfa\xff\x8b\xc8\xe8\x0d" + b"\xa2\xfb\xff\x66\xc7\x86\xd6\x01\x00\x00\x00\x00\x8b\x96\x00\x01" + b"\x00\x00\x8d\x42\x74\x8b\x18\x83\xfb\x0c\x0f\x87\x9b\x02\x00\x00" + b"\x33\xc9\x8a\x8b\xac\xf4\x06\x10\xff\x24\x8d\x8c\xf4\x06\x10\x8b" + b"\x86\x08\x01\x00\x00\x83\xf8\x05\x77\x07\xff\x24\x85\xbc\xf4\x06" + b"\x10\x8b\xce\xe8\xb8\x1a\x00\x00\x8b\x86\x00\x01\x00\x00\x68\xf4" + b"\x01\x00\x00\x8b\xce\xc7\x40\x74\x0b\x00\x00\x00\xe8\xef\x20\x00" + b"\x00\x8b\x86\x00\x01\x00\x00\xc7\x86\x08\x01\x00\x00\xff\xff\xff" + b"\xff\x83\x78\x78\x00\x0f\x85\x40\x02\x00\x00\xb8\x01\x00\x00\x00" + b"\x5f\x66\xc7\x86\xd2\x01\x00\x00\x01\x00\x5e\x5b\xc2\x04\x00\x6a" + b"\x00\x8b\xce\x6a\x01\xe8\xd6\x19\x00\x00\xb8\x01\x00\x00\x00\x5f" + b"\x5e\x5b\xc2\x04\x00\x6a\x01\x8b\xce\x6a\x02\xe8\xc0\x19\x00\x00" + b"\xb8\x01\x00\x00\x00\x5f\x5e\x5b\xc2\x04\x00\x8b\xce\xe8\x3e\x1a" + b"\x00\x00\x8b\x86\x00\x01\x00\x00\x68\x1c\x02\x00\x00\x8b\xce\xc7" + b"\x40\x74\x0b\x00\x00\x00\xe8\x75\x20\x00\x00\xb8\x01\x00\x00\x00" + b"\x5f\xc7\x86\x08\x01\x00\x00\xff\xff\xff\xff\x5e\x5b\xc2\x04\x00" + b"\x8b\xce\xe8\x09\x1a\x00\x00\x8b\x86\x00\x01\x00\x00\x68\x1b\x02" + b"\x00\x00\x8b\xce\xc7\x40\x74\x0b\x00\x00\x00\xe8\x40\x20\x00\x00" + b"\xb8\x01\x00\x00\x00\x5f\xc7\x86\x08\x01\x00\x00\xff\xff\xff\xff" + b"\x5e\x5b\xc2\x04\x00\xc7\x00\x0b\x00\x00\x00\x8b\x86\x08\x01\x00" + b"\x00\x83\xf8\x04\x74\x0c\x83\xf8\x05\x74\x0e\x68\xf4\x01\x00\x00" + b"\xeb\x0c\x68\x1c\x02\x00\x00\xeb\x05\x68\x1b\x02\x00\x00\x8b\xce" + b"\xe8\xfb\x1f\x00\x00\xb8\x01\x00\x00\x00\x5f\xc7\x86\x08\x01\x00" + b"\x00\xff\xff\xff\xff\x5e\x5b\xc2\x04\x00\x6a\x00\xa1\xa0\x76\x0f" + b"\x10\x50\xe8\x39\x65\xfa\xff\x83\xc4\x08\xa1\xa4\x76\x0f\x10\x6a" + b"\x00\x50\xe8\x29\x65\xfa\xff\x83\xc4\x08\xe8\xf1\x63\xfa\xff\x8b" + b"\xc8\xe8\x6a\x02\x01\x00\xb8\x01\x00\x00\x00\x5f\x5e\x5b\xc2\x04" + b"\x00\x8b\x47\x1c\x83\xf8\x46\x74\x09\x83\xf8\x47\x0f\x85\x09\x01" + b"\x00\x00\x6a\x00\x6a\x00\x6a\x32\x6a\x03\xe8\x91\x65\xfa\xff\x8b" + b"\xc8\xe8\xfa\xc7\xfd\xff\x8b\x86\x00\x01\x00\x00\x5f\x5e\x5b\xc7" + b"\x40\x74\x0e\x00\x00\x00\xb8\x01\x00\x00\x00\xc2\x04\x00\x8b\x47" + b"\x1c\x39\x86\xf8\x00\x00\x00\x0f\x85\xce\x00\x00\x00\xe8\xbe\x63" + b"\xfa\xff\x83\x78\x10\x02\x74\x19\x66\x8b\x86\xfc\x00\x00\x00\x66" + b"\x85\xc0\x74\x0d\x50\xe8\xa6\x63\xfa\xff\x8b\xc8\xe8\xbf\xa3\xfc" + b"\xff\x6a\x00\x6a\x00\x6a\x32\x6a\x03\xe8\x32\x65\xfa\xff\x8b\xc8" + b"\xe8\x9b\xc7\xfd\xff\x8b\x86\x00\x01\x00\x00\x5f\x5e\x5b\xc7\x40" + b"\x74\x0e\x00\x00\x00\xb8\x01\x00\x00\x00\xc2\x04\x00\x83\x7a\x78" + b"\x00\x75\x32\x8b\x86\xf8\x00\x00\x00\x83\xf8\x28\x74\x27\x83\xf8" + b"\x29\x74\x22\x83\xf8\x2a\x74\x1d\x83\xf8\x2b\x74\x18\x83\xf8\x2c" + b"\x74\x13\x66\xc7\x86\xd0\x01\x00\x00\x01\x00\x6a\x0b\xe8\xee\x64" + b"\xfa\xff\x83\xc4\x04\x8b\x86\x00\x01\x00\x00\x6a\x01\x68\xdc\x44" + b"\x0f\x10\xc7\x40\x74\x02\x00\x00\x00\xe8\x22\x64\xfa\xff\x83\xc4" + b"\x08\xb8\x01\x00\x00\x00\x5f\x5e\x5b\xc2\x04\x00\x8b\x47\x1c\x39" + b"\x86\xf8\x00\x00\x00\x75\x14\x6a\x00\x6a\x00\x6a\x32\x6a\x03\xe8" + b"\x9c\x64\xfa\xff\x8b\xc8\xe8\x05\xc7\xfd\xff\xb8\x01\x00\x00\x00" + b"\x5f\x5e\x5b\xc2\x04\x00\x8b\xff\x3c\xf1\x06\x10\x43\xf1\x06\x10" + b"\x4a\xf1\x06\x10\x51\xf1\x06\x10\x58\xf1\x06\x10\xdf\xf1\x06\x10" + b"\xd5\xf2\x06\x10\x1a\xf3\x06\x10\x51\xf3\x06\x10\x8e\xf3\x06\x10" + b"\xed\xf3\x06\x10\x4c\xf4\x06\x10\x6b\xf4\x06\x10\x00\x01\x02\x07" + b"\x03\x04\x07\x07\x07\x07\x07\x05\x06\x8d\x49\x00\x3f\xf2\x06\x10" + b"\x55\xf2\x06\x10\xf1\xf1\x06\x10\xf1\xf1\x06\x10\x6b\xf2\x06\x10" + b"\xa0\xf2\x06\x10\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc" +) + + +def test_action_case(): + """3 switches: 3 jump tables, 1 data table""" + ig = InstructGen(HANDLE_END_ACTION, 0x1006F080) + # Two of the jump tables (0x1006f478 with 5, 0x1006f48c with 8) + # are contiguous. + assert len(ig.sections) == 5 diff --git a/tools/isledecomp/tests/test_islebin.py b/tools/isledecomp/tests/test_islebin.py new file mode 100644 index 00000000..14fb85b4 --- /dev/null +++ b/tools/isledecomp/tests/test_islebin.py @@ -0,0 +1,152 @@ +"""Tests for the Bin (or IsleBin) module that: +1. Parses relevant data from the PE header and other structures. +2. Provides an interface to read from the DLL or EXE using a virtual address. +These are some basic smoke tests.""" + +import hashlib +from typing import Tuple +import pytest +from isledecomp.bin import ( + Bin as IsleBin, + SectionNotFoundError, + InvalidVirtualAddressError, +) + + +# LEGO1.DLL: v1.1 English, September +LEGO1_SHA256 = "14645225bbe81212e9bc1919cd8a692b81b8622abb6561280d99b0fc4151ce17" + + +@pytest.fixture(name="binfile", scope="session") +def fixture_binfile(pytestconfig) -> IsleBin: + filename = pytestconfig.getoption("--lego1") + + # Skip this if we have not provided the path to LEGO1.dll. + if filename is None: + pytest.skip(allow_module_level=True, reason="No path to LEGO1") + + with open(filename, "rb") as f: + digest = hashlib.sha256(f.read()).hexdigest() + if digest != LEGO1_SHA256: + pytest.fail(reason="Did not match expected LEGO1.DLL") + + with IsleBin(filename, find_str=True) as islebin: + yield islebin + + +def test_basic(binfile: IsleBin): + assert binfile.entry == 0x1008C860 + assert len(binfile.sections) == 6 + + with pytest.raises(SectionNotFoundError): + binfile.get_section_by_name(".hello") + + +SECTION_INFO = ( + (".text", 0x10001000, 0xD2A66, 0xD2C00), + (".rdata", 0x100D4000, 0x1B5B6, 0x1B600), + (".data", 0x100F0000, 0x1A734, 0x12C00), + (".idata", 0x1010B000, 0x1006, 0x1200), + (".rsrc", 0x1010D000, 0x21D8, 0x2200), + (".reloc", 0x10110000, 0x10C58, 0x10E00), +) + + +@pytest.mark.parametrize("name, v_addr, v_size, raw_size", SECTION_INFO) +def test_sections(name: str, v_addr: int, v_size: int, raw_size: int, binfile: IsleBin): + section = binfile.get_section_by_name(name) + assert section.virtual_address == v_addr + assert section.virtual_size == v_size + assert section.size_of_raw_data == raw_size + + +DOUBLE_PI_BYTES = b"\x18\x2d\x44\x54\xfb\x21\x09\x40" + +# Now that's a lot of pi +PI_ADDRESSES = ( + 0x100D4000, + 0x100D4700, + 0x100D7180, + 0x100DB8F0, + 0x100DC030, +) + + +@pytest.mark.parametrize("addr", PI_ADDRESSES) +def test_read_pi(addr: int, binfile: IsleBin): + assert binfile.read(addr, 8) == DOUBLE_PI_BYTES + + +def test_unusual_reads(binfile: IsleBin): + """Reads that return an error or some specific value based on context""" + # Reading an address earlier than the imagebase + with pytest.raises(InvalidVirtualAddressError): + binfile.read(0, 1) + + # Really big address + with pytest.raises(InvalidVirtualAddressError): + binfile.read(0xFFFFFFFF, 1) + + # Uninitialized part of .data + assert binfile.read(0x1010A600, 4) is None + + # Past the end of virtual size in .text + assert binfile.read(0x100D3A70, 4) == b"\x00\x00\x00\x00" + + +STRING_ADDRESSES = ( + (0x100DB588, b"November"), + (0x100F0130, b"Helicopter"), + (0x100F0144, b"HelicopterState"), + (0x100F0BE4, b"valerie"), + (0x100F4080, b"TARGET"), +) + + +@pytest.mark.parametrize("addr, string", STRING_ADDRESSES) +def test_strings(addr: int, string: bytes, binfile: IsleBin): + """Test string read utility function and the string search feature""" + assert binfile.read_string(addr) == string + assert binfile.find_string(string) == addr + + +def test_relocation(binfile: IsleBin): + # n.b. This is not the number of *relocations* read from .reloc. + # It is the set of unique addresses in the binary that get relocated. + assert len(binfile.get_relocated_addresses()) == 14066 + + # Score::Score is referenced only by CALL instructions. No need to relocate. + assert binfile.is_relocated_addr(0x10001000) is False + + # MxEntity::SetEntityId is in the vtable and must be relocated. + assert binfile.is_relocated_addr(0x10001070) is True + + +# Not sanitizing dll name case. Do we care? +IMPORT_REFS = ( + ("KERNEL32.dll", "CreateMutexA", 0x1010B3D0), + ("WINMM.dll", "midiOutPrepareHeader", 0x1010B550), +) + + +@pytest.mark.parametrize("import_ref", IMPORT_REFS) +def test_imports(import_ref: Tuple[str, str, int], binfile: IsleBin): + assert import_ref in binfile.imports + + +# Location of the JMP instruction and the import address. +THUNKS = ( + (0x100D3728, 0x1010B32C), # DirectDrawCreate + (0x10098F9E, 0x1010B3D4), # RtlUnwind +) + + +@pytest.mark.parametrize("thunk_ref", THUNKS) +def test_thunks(thunk_ref: Tuple[int, int], binfile: IsleBin): + assert thunk_ref in binfile.thunks + + +def test_exports(binfile: IsleBin): + assert len(binfile.exports) == 130 + assert (0x1003BFB0, b"??0LegoBackgroundColor@@QAE@PBD0@Z") in binfile.exports + assert (0x10091EE0, b"_DllMain@12") in binfile.exports diff --git a/tools/isledecomp/tests/test_linter.py b/tools/isledecomp/tests/test_linter.py new file mode 100644 index 00000000..95d19515 --- /dev/null +++ b/tools/isledecomp/tests/test_linter.py @@ -0,0 +1,144 @@ +import pytest +from isledecomp.parser import DecompLinter +from isledecomp.parser.error import ParserError + + +@pytest.fixture(name="linter") +def fixture_linter(): + return DecompLinter() + + +def test_simple_in_order(linter): + lines = [ + "// FUNCTION: TEST 0x1000", + "void function1() {}", + "// FUNCTION: TEST 0x2000", + "void function2() {}", + "// FUNCTION: TEST 0x3000", + "void function3() {}", + ] + assert linter.check_lines(lines, "test.cpp", "TEST") is True + + +def test_simple_not_in_order(linter): + lines = [ + "// FUNCTION: TEST 0x1000", + "void function1() {}", + "// FUNCTION: TEST 0x3000", + "void function3() {}", + "// FUNCTION: TEST 0x2000", + "void function2() {}", + ] + assert linter.check_lines(lines, "test.cpp", "TEST") is False + assert len(linter.alerts) == 1 + + assert linter.alerts[0].code == ParserError.FUNCTION_OUT_OF_ORDER + # N.B. Line number given is the start of the function, not the marker + assert linter.alerts[0].line_number == 6 + + +def test_byname_ignored(linter): + """Should ignore lookup-by-name markers when checking order.""" + lines = [ + "// FUNCTION: TEST 0x1000", + "void function1() {}", + "// FUNCTION: TEST 0x3000", + "// MyClass::MyMethod", + "// FUNCTION: TEST 0x2000", + "void function2() {}", + ] + # This will fail because byname lookup does not belong in the cpp file + assert linter.check_lines(lines, "test.cpp", "TEST") is False + # but it should not fail for function order. + assert all( + alert.code != ParserError.FUNCTION_OUT_OF_ORDER for alert in linter.alerts + ) + + +def test_module_isolation(linter): + """Should check the order of markers from a single module only.""" + lines = [ + "// FUNCTION: ALPHA 0x0001", + "// FUNCTION: TEST 0x1000", + "void function1() {}", + "// FUNCTION: ALPHA 0x0002", + "// FUNCTION: TEST 0x2000", + "void function2() {}", + "// FUNCTION: ALPHA 0x0003", + "// FUNCTION: TEST 0x3000", + "void function3() {}", + ] + + assert linter.check_lines(lines, "test.cpp", "TEST") is True + linter.reset(True) + assert linter.check_lines(lines, "test.cpp", "ALPHA") is True + + +def test_byname_headers_only(linter): + """Markers that ar referenced by name with cvdump belong in header files only.""" + lines = [ + "// FUNCTION: TEST 0x1000", + "// MyClass::~MyClass", + ] + + assert linter.check_lines(lines, "test.h", "TEST") is True + linter.reset(True) + assert linter.check_lines(lines, "test.cpp", "TEST") is False + assert linter.alerts[0].code == ParserError.BYNAME_FUNCTION_IN_CPP + + +def test_duplicate_offsets(linter): + """The linter will retain module/offset pairs found until we do a full reset.""" + lines = [ + "// FUNCTION: TEST 0x1000", + "// FUNCTION: HELLO 0x1000", + "// MyClass::~MyClass", + ] + + # Should not fail for duplicate offset 0x1000 because the modules are unique. + assert linter.check_lines(lines, "test.h", "TEST") is True + + # Simulate a failure by reading the same file twice. + assert linter.check_lines(lines, "test.h", "TEST") is False + + # Two errors because offsets from both modules are duplicated + assert len(linter.alerts) == 2 + assert all(a.code == ParserError.DUPLICATE_OFFSET for a in linter.alerts) + + # Partial reset will retain the list of seen offsets. + linter.reset(False) + assert linter.check_lines(lines, "test.h", "TEST") is False + + # Full reset will forget seen offsets. + linter.reset(True) + assert linter.check_lines(lines, "test.h", "TEST") is True + + +def test_duplicate_strings(linter): + """Duplicate string markers are okay if the string value is the same.""" + string_lines = [ + "// STRING: TEST 0x1000", + 'return "hello world";', + ] + + # No problem to use this marker twice. + assert linter.check_lines(string_lines, "test.h", "TEST") is True + assert linter.check_lines(string_lines, "test.h", "TEST") is True + + different_string = [ + "// STRING: TEST 0x1000", + 'return "hi there";', + ] + + # Same address but the string is different + assert linter.check_lines(different_string, "greeting.h", "TEST") is False + assert len(linter.alerts) == 1 + assert linter.alerts[0].code == ParserError.WRONG_STRING + + same_addr_reused = [ + "// GLOBAL:TEXT 0x1000", + "int g_test = 123;", + ] + + # This will fail like any other offset reuse. + assert linter.check_lines(same_addr_reused, "other.h", "TEST") is False diff --git a/tools/isledecomp/tests/test_parser.py b/tools/isledecomp/tests/test_parser.py new file mode 100644 index 00000000..c7905627 --- /dev/null +++ b/tools/isledecomp/tests/test_parser.py @@ -0,0 +1,773 @@ +import pytest +from isledecomp.parser.parser import ( + ReaderState, + DecompParser, +) +from isledecomp.parser.error import ParserError + + +@pytest.fixture(name="parser") +def fixture_parser(): + return DecompParser() + + +def test_missing_sig(parser): + """In the hopefully rare scenario that the function signature and marker + are swapped, we still have enough to match witch reccmp""" + parser.read_lines( + [ + "void my_function()", + "// FUNCTION: TEST 0x1234", + "{", + "}", + ] + ) + assert parser.state == ReaderState.SEARCH + assert len(parser.functions) == 1 + assert parser.functions[0].line_number == 3 + + assert len(parser.alerts) == 1 + assert parser.alerts[0].code == ParserError.MISSED_START_OF_FUNCTION + + +def test_not_exact_syntax(parser): + """Alert to inexact syntax right here in the parser instead of kicking it downstream. + Doing this means we don't have to save the actual text.""" + parser.read_line("// function: test 0x1234") + assert len(parser.alerts) == 1 + assert parser.alerts[0].code == ParserError.BAD_DECOMP_MARKER + + +def test_invalid_marker(parser): + """We matched a decomp marker, but it's not one we care about""" + parser.read_line("// BANANA: TEST 0x1234") + assert parser.state == ReaderState.SEARCH + + assert len(parser.alerts) == 1 + assert parser.alerts[0].code == ParserError.BOGUS_MARKER + + +def test_incompatible_marker(parser): + """The marker we just read cannot be handled in the current parser state""" + parser.read_lines( + [ + "// FUNCTION: TEST 0x1234", + "// GLOBAL: TEST 0x5000", + ] + ) + assert parser.state == ReaderState.SEARCH + assert len(parser.alerts) == 1 + assert parser.alerts[0].code == ParserError.INCOMPATIBLE_MARKER + + +def test_variable(parser): + """Should identify a global variable""" + parser.read_lines( + [ + "// GLOBAL: HELLO 0x1234", + "int g_value = 5;", + ] + ) + assert len(parser.variables) == 1 + + +def test_synthetic_plus_marker(parser): + """Marker tracking preempts synthetic name detection. + Should fail with error and not log the synthetic""" + parser.read_lines( + [ + "// SYNTHETIC: HEY 0x555", + "// FUNCTION: HOWDY 0x1234", + ] + ) + assert len(parser.functions) == 0 + assert len(parser.alerts) == 1 + assert parser.alerts[0].code == ParserError.INCOMPATIBLE_MARKER + + +def test_different_markers_different_module(parser): + """Does it make any sense for a function to be a stub in one module, + but not in another? I don't know. But it's no problem for us.""" + parser.read_lines( + [ + "// FUNCTION: HOWDY 0x1234", + "// STUB: SUP 0x5555", + "void interesting_function() {", + "}", + ] + ) + + assert len(parser.alerts) == 0 + assert len(parser.functions) == 2 + + +def test_different_markers_same_module(parser): + """Now, if something is a regular function but then a stub, + what do we say about that?""" + parser.read_lines( + [ + "// FUNCTION: HOWDY 0x1234", + "// STUB: HOWDY 0x5555", + "void interesting_function() {", + "}", + ] + ) + + # Use first marker declaration, don't replace + assert len(parser.functions) == 1 + assert parser.functions[0].should_skip() is False + + # Should alert to this + assert len(parser.alerts) == 1 + assert parser.alerts[0].code == ParserError.DUPLICATE_MODULE + + +def test_unexpected_synthetic(parser): + """FUNCTION then SYNTHETIC should fail to report either one""" + parser.read_lines( + [ + "// FUNCTION: HOWDY 0x1234", + "// SYNTHETIC: HOWDY 0x5555", + "void interesting_function() {", + "}", + ] + ) + + assert parser.state == ReaderState.SEARCH + assert len(parser.functions) == 0 + assert len(parser.alerts) == 1 + assert parser.alerts[0].code == ParserError.INCOMPATIBLE_MARKER + + +@pytest.mark.skip(reason="not implemented yet") +def test_duplicate_offset(parser): + """Repeating the same module/offset in the same file is probably a typo""" + parser.read_lines( + [ + "// GLOBAL: HELLO 0x1234", + "int x = 1;", + "// GLOBAL: HELLO 0x1234", + "int y = 2;", + ] + ) + + assert len(parser.alerts) == 1 + assert parser.alerts[0].code == ParserError.DUPLICATE_OFFSET + + +def test_multiple_variables(parser): + """Theoretically the same global variable can appear in multiple modules""" + parser.read_lines( + [ + "// GLOBAL: HELLO 0x1234", + "// GLOBAL: WUZZUP 0x555", + "const char *g_greeting;", + ] + ) + assert len(parser.alerts) == 0 + assert len(parser.variables) == 2 + + +def test_multiple_variables_same_module(parser): + """Should not overwrite offset""" + parser.read_lines( + [ + "// GLOBAL: HELLO 0x1234", + "// GLOBAL: HELLO 0x555", + "const char *g_greeting;", + ] + ) + assert len(parser.alerts) == 1 + assert parser.alerts[0].code == ParserError.DUPLICATE_MODULE + assert len(parser.variables) == 1 + assert parser.variables[0].offset == 0x1234 + + +def test_multiple_vtables(parser): + parser.read_lines( + [ + "// VTABLE: HELLO 0x1234", + "// VTABLE: TEST 0x5432", + "class MxString : public MxCore {", + ] + ) + assert len(parser.alerts) == 0 + assert len(parser.vtables) == 2 + assert parser.vtables[0].name == "MxString" + + +def test_multiple_vtables_same_module(parser): + """Should not overwrite offset""" + parser.read_lines( + [ + "// VTABLE: HELLO 0x1234", + "// VTABLE: HELLO 0x5432", + "class MxString : public MxCore {", + ] + ) + assert len(parser.alerts) == 1 + assert parser.alerts[0].code == ParserError.DUPLICATE_MODULE + assert len(parser.vtables) == 1 + assert parser.vtables[0].offset == 0x1234 + + +def test_synthetic(parser): + parser.read_lines( + [ + "// SYNTHETIC: TEST 0x1234", + "// TestClass::TestMethod", + ] + ) + assert len(parser.functions) == 1 + assert parser.functions[0].lookup_by_name is True + assert parser.functions[0].name == "TestClass::TestMethod" + + +def test_synthetic_same_module(parser): + parser.read_lines( + [ + "// SYNTHETIC: TEST 0x1234", + "// SYNTHETIC: TEST 0x555", + "// TestClass::TestMethod", + ] + ) + assert len(parser.alerts) == 1 + assert parser.alerts[0].code == ParserError.DUPLICATE_MODULE + assert len(parser.functions) == 1 + assert parser.functions[0].offset == 0x1234 + + +def test_synthetic_no_comment(parser): + """Synthetic marker followed by a code line (i.e. non-comment)""" + parser.read_lines( + [ + "// SYNTHETIC: TEST 0x1234", + "int x = 123;", + ] + ) + assert len(parser.functions) == 0 + assert len(parser.alerts) == 1 + assert parser.alerts[0].code == ParserError.BAD_NAMEREF + assert parser.state == ReaderState.SEARCH + + +def test_single_line_function(parser): + parser.read_lines( + [ + "// FUNCTION: TEST 0x1234", + "int hello() { return 1234; }", + ] + ) + assert len(parser.functions) == 1 + assert parser.functions[0].line_number == 2 + assert parser.functions[0].end_line == 2 + + +def test_indented_function(parser): + """Track the number of whitespace characters when we begin the function + and check that against each closing curly brace we read. + Should not report a syntax warning if the function is indented""" + parser.read_lines( + [ + " // FUNCTION: TEST 0x1234", + " void indented()", + " {", + " // TODO", + " }", + " // FUNCTION: NEXT 0x555", + ] + ) + assert len(parser.alerts) == 0 + + +@pytest.mark.xfail(reason="todo") +def test_indented_no_curly_hint(parser): + """Same as above, but opening curly brace is on the same line. + Without the hint of how many whitespace characters to check, can we + still identify the end of the function?""" + parser.read_lines( + [ + " // FUNCTION: TEST 0x1234", + " void indented() {", + " }", + " // FUNCTION: NEXT 0x555", + ] + ) + assert len(parser.alerts) == 0 + + +def test_implicit_lookup_by_name(parser): + """FUNCTION (or STUB) offsets must directly precede the function signature. + If we detect a comment instead, we assume that this is a lookup-by-name + function and end here.""" + parser.read_lines( + [ + "// FUNCTION: TEST 0x1234", + "// TestClass::TestMethod()", + ] + ) + assert parser.state == ReaderState.SEARCH + assert len(parser.functions) == 1 + assert parser.functions[0].lookup_by_name is True + assert parser.functions[0].name == "TestClass::TestMethod()" + + +def test_function_with_spaces(parser): + """There should not be any spaces between the end of FUNCTION markers + and the start or name of the function. If it's a blank line, we can safely + ignore but should alert to this.""" + parser.read_lines( + [ + "// FUNCTION: TEST 0x1234", + " ", + "inline void test_function() { };", + ] + ) + assert len(parser.functions) == 1 + assert len(parser.alerts) == 1 + assert parser.alerts[0].code == ParserError.UNEXPECTED_BLANK_LINE + + +def test_function_with_spaces_implicit(parser): + """Same as above, but for implicit lookup-by-name""" + parser.read_lines( + [ + "// FUNCTION: TEST 0x1234", + " ", + "// Implicit::Method", + ] + ) + assert len(parser.functions) == 1 + assert len(parser.alerts) == 1 + assert parser.alerts[0].code == ParserError.UNEXPECTED_BLANK_LINE + + +@pytest.mark.xfail(reason="will assume implicit lookup-by-name function") +def test_function_is_commented(parser): + """In an ideal world, we would recognize that there is no code here. + Some editors (or users) might comment the function on each line like this + but hopefully it is rare.""" + parser.read_lines( + [ + "// FUNCTION: TEST 0x1234", + "// int my_function()", + "// {", + "// return 5;", + "// }", + ] + ) + + assert len(parser.functions) == 0 + + +def test_unexpected_eof(parser): + """If a decomp marker finds its way to the last line of the file, + report that we could not get anything from it.""" + parser.read_lines( + [ + "// FUNCTION: TEST 0x1234", + "// Cls::Method", + "// FUNCTION: TEST 0x5555", + ] + ) + parser.finish() + + assert len(parser.functions) == 1 + assert len(parser.alerts) == 1 + assert parser.alerts[0].code == ParserError.UNEXPECTED_END_OF_FILE + + +@pytest.mark.xfail(reason="no longer applies") +def test_global_variable_prefix(parser): + """Global and static variables should have the g_ prefix.""" + parser.read_lines( + [ + "// GLOBAL: TEST 0x1234", + 'const char* g_msg = "hello";', + ] + ) + assert len(parser.variables) == 1 + assert len(parser.alerts) == 0 + + parser.read_lines( + [ + "// GLOBAL: TEXT 0x5555", + "int test = 5;", + ] + ) + assert len(parser.alerts) == 1 + assert parser.alerts[0].code == ParserError.GLOBAL_MISSING_PREFIX + # In spite of that, we should still grab the variable name. + assert parser.variables[1].name == "test" + + +def test_global_nomatch(parser): + """We do our best to grab the variable name, even without the g_ prefix + but this (by design) will not match everything.""" + + parser.read_lines( + [ + "// GLOBAL: TEST 0x1234", + "FunctionCall();", + ] + ) + assert len(parser.variables) == 0 + assert len(parser.alerts) == 1 + assert parser.alerts[0].code == ParserError.NO_SUITABLE_NAME + + +def test_static_variable(parser): + """We can detect whether a variable is a static function variable + based on the parser's state when we detect it. + Checking for the word `static` alone is not a good test. + Static class variables are filed as S_GDATA32, same as regular globals.""" + + parser.read_lines( + [ + "// GLOBAL: TEST 0x1234", + "int g_test = 1234;", + ] + ) + assert len(parser.variables) == 1 + assert parser.variables[0].is_static is False + + parser.read_lines( + [ + "// FUNCTION: TEST 0x5555", + "void test_function() {", + "// GLOBAL: TEST 0x8888", + "static int g_internal = 0;", + "}", + ] + ) + assert len(parser.variables) == 2 + assert parser.variables[1].is_static is True + + +def test_reject_global_return(parser): + """Previously we had annotated strings with the GLOBAL marker. + For example: if a function returned a string. We now want these to be + annotated with the STRING marker.""" + + parser.read_lines( + [ + "// FUNCTION: TEST 0x5555", + "void test_function() {", + " // GLOBAL: TEST 0x8888", + ' return "test";', + "}", + ] + ) + assert len(parser.variables) == 0 + assert len(parser.alerts) == 1 + assert parser.alerts[0].code == ParserError.GLOBAL_NOT_VARIABLE + + +def test_global_string(parser): + """We now allow GLOBAL and STRING markers for the same item.""" + + parser.read_lines( + [ + "// GLOBAL: TEST 0x1234", + "// STRING: TEXT 0x5555", + 'char* g_test = "hello";', + ] + ) + assert len(parser.variables) == 1 + assert len(parser.strings) == 1 + assert len(parser.alerts) == 0 + + assert parser.variables[0].name == "g_test" + assert parser.strings[0].name == "hello" + + +def test_comment_variables(parser): + """Match on hidden variables from libraries.""" + + parser.read_lines( + [ + "// GLOBAL: TEST 0x1234", + "// g_test", + ] + ) + assert len(parser.variables) == 1 + assert parser.variables[0].name == "g_test" + + +def test_flexible_variable_prefix(parser): + """Don't alert to library variables that lack the g_ prefix. + This is out of our control.""" + + parser.read_lines( + [ + "// GLOBAL: TEST 0x1234", + "// some_other_variable", + ] + ) + assert len(parser.variables) == 1 + assert len(parser.alerts) == 0 + assert parser.variables[0].name == "some_other_variable" + + +def test_string_ignore_g_prefix(parser): + """String annotations above a regular variable should not alert to + the missing g_ prefix. This is only required for GLOBAL markers.""" + + parser.read_lines( + [ + "// STRING: TEST 0x1234", + 'const char* value = "";', + ] + ) + assert len(parser.strings) == 1 + assert len(parser.alerts) == 0 + + +def test_class_variable(parser): + """We should accurately name static variables that are class members.""" + + parser.read_lines( + [ + "class Test {", + "protected:", + " // GLOBAL: TEST 0x1234", + " static int g_test;", + "};", + ] + ) + + assert len(parser.variables) == 1 + assert parser.variables[0].name == "Test::g_test" + + +def test_namespace_variable(parser): + """We should identify a namespace surrounding any global variables""" + + parser.read_lines( + [ + "namespace Test {", + "// GLOBAL: TEST 0x1234", + "int g_test = 1234;", + "}", + "// GLOBAL: TEST 0x5555", + "int g_second = 2;", + ] + ) + + assert len(parser.variables) == 2 + assert parser.variables[0].name == "Test::g_test" + assert parser.variables[1].name == "g_second" + + +def test_namespace_vtable(parser): + parser.read_lines( + [ + "namespace Tgl {", + "// VTABLE: TEST 0x1234", + "class Renderer {", + "};", + "}", + "// VTABLE: TEST 0x5555", + "class Hello { };", + ] + ) + + assert len(parser.vtables) == 2 + assert parser.vtables[0].name == "Tgl::Renderer" + assert parser.vtables[1].name == "Hello" + + +@pytest.mark.xfail(reason="no longer applies") +def test_global_prefix_namespace(parser): + """Should correctly identify namespaces before checking for the g_ prefix""" + + parser.read_lines( + [ + "class Test {", + " // GLOBAL: TEST 0x1234", + " static int g_count = 0;", + " // GLOBAL: TEST 0x5555", + " static int count = 0;", + "};", + ] + ) + + assert len(parser.variables) == 2 + assert parser.variables[0].name == "Test::g_count" + assert parser.variables[1].name == "Test::count" + + assert len(parser.alerts) == 1 + assert parser.alerts[0].code == ParserError.GLOBAL_MISSING_PREFIX + + +def test_nested_namespace(parser): + parser.read_lines( + [ + "namespace Tgl {", + "class Renderer {", + " // GLOBAL: TEST 0x1234", + " static int g_count = 0;", + "};", + "};", + ] + ) + + assert len(parser.variables) == 1 + assert parser.variables[0].name == "Tgl::Renderer::g_count" + + +def test_match_qualified_variable(parser): + """If a variable belongs to a scope and we use a fully qualified reference + below a GLOBAL marker, make sure we capture the full name.""" + + parser.read_lines( + [ + "// GLOBAL: TEST 0x1234", + "int MxTest::g_count = 0;", + ] + ) + + assert len(parser.variables) == 1 + assert parser.variables[0].name == "MxTest::g_count" + assert len(parser.alerts) == 0 + + +def test_static_variable_parent(parser): + """Report the address of the parent function that contains a static variable.""" + + parser.read_lines( + [ + "// FUNCTION: TEST 0x1234", + "void test()", + "{", + " // GLOBAL: TEST 0x5555", + " static int g_count = 0;", + "}", + ] + ) + + assert len(parser.variables) == 1 + assert parser.variables[0].is_static is True + assert parser.variables[0].parent_function == 0x1234 + + +@pytest.mark.xfail( + reason="""Without the FUNCTION marker we don't know that we are inside a function, + so we do not identify this variable as static.""" +) +def test_static_variable_no_parent(parser): + """If the function that contains a static variable is not marked, we + cannot match it with cvdump so we should skip it and report an error.""" + + parser.read_lines( + [ + "void test()", + "{", + " // GLOBAL: TEST 0x5555", + " static int g_count = 0;", + "}", + ] + ) + + # No way to match this variable so don't report it + assert len(parser.variables) == 0 + assert len(parser.alerts) == 1 + assert parser.alerts[0].code == ParserError.ORPHANED_STATIC_VARIABLE + + +def test_static_variable_incomplete_coverage(parser): + """If the function that contains a static variable is marked, but + not for each module used for the variable itself, this is an error.""" + + parser.read_lines( + [ + "// FUNCTION: HELLO 0x1234", + "void test()", + "{", + " // GLOBAL: HELLO 0x5555", + " // GLOBAL: TEST 0x5555", + " static int g_count = 0;", + "}", + ] + ) + + # Match for HELLO module + assert len(parser.variables) == 1 + + # Failed for TEST module + assert len(parser.alerts) == 1 + assert parser.alerts[0].code == ParserError.ORPHANED_STATIC_VARIABLE + + +def test_header_function_declaration(parser): + """This is either a forward reference or a declaration in a header file. + Meaning: The implementation is not here. This is not the correct place + for the FUNCTION marker and it will probably not match anything.""" + + parser.read_lines( + [ + "// FUNCTION: HELLO 0x1234", + "void sample_function(int);", + ] + ) + + assert len(parser.alerts) == 1 + assert parser.alerts[0].code == ParserError.NO_IMPLEMENTATION + + +def test_extra(parser): + """Allow a fourth field in the decomp annotation. Its use will vary + depending on the marker type. Currently this is only used to identify + a vtable with virtual inheritance.""" + + # Intentionally using non-vtable markers here. + # We might want to emit a parser warning for unnecessary extra info. + parser.read_lines( + [ + "// GLOBAL: TEST 0x5555 Haha", + "int g_variable = 0;", + "// FUNCTION: TEST 0x1234 Something", + "void Test() { g_variable++; }", + "// LIBRARY: TEST 0x8080 Printf", + "// _printf", + ] + ) + + # We don't use this information (yet) but this is all fine. + assert len(parser.alerts) == 0 + + +def test_virtual_inheritance(parser): + """Indicate the base class for a vtable where the class uses + virtual inheritance.""" + parser.read_lines( + [ + "// VTABLE: HELLO 0x1234", + "// VTABLE: HELLO 0x1238 Greetings", + "// VTABLE: HELLO 0x123c Howdy", + "class HiThere : public virtual Greetings {", + "};", + ] + ) + + assert len(parser.alerts) == 0 + assert len(parser.vtables) == 3 + assert parser.vtables[0].base_class is None + assert parser.vtables[1].base_class == "Greetings" + assert parser.vtables[2].base_class == "Howdy" + assert all(v.name == "HiThere" for v in parser.vtables) + + +def test_namespace_in_comment(parser): + parser.read_lines( + [ + "// VTABLE: HELLO 0x1234", + "// class Tgl::Object", + "// VTABLE: HELLO 0x5555", + "// class TglImpl::RendererImpl", + ] + ) + + assert len(parser.vtables) == 2 + assert parser.vtables[0].name == "Tgl::Object" + assert parser.vtables[1].name == "TglImpl::RendererImpl" diff --git a/tools/isledecomp/tests/test_parser_samples.py b/tools/isledecomp/tests/test_parser_samples.py new file mode 100644 index 00000000..e74fda0e --- /dev/null +++ b/tools/isledecomp/tests/test_parser_samples.py @@ -0,0 +1,141 @@ +import os +from typing import List, TextIO +import pytest +from isledecomp.parser import DecompParser +from isledecomp.parser.node import ParserSymbol + +SAMPLE_DIR = os.path.join(os.path.dirname(__file__), "samples") + + +def sample_file(filename: str) -> TextIO: + """Wrapper for opening the samples from the directory that does not + depend on the cwd where we run the test""" + full_path = os.path.join(SAMPLE_DIR, filename) + return open(full_path, "r", encoding="utf-8") + + +def code_blocks_are_sorted(blocks: List[ParserSymbol]) -> bool: + """Helper to make this more idiomatic""" + just_offsets = [block.offset for block in blocks] + return just_offsets == sorted(just_offsets) + + +@pytest.fixture(name="parser") +def fixture_parser(): + return DecompParser() + + +# Tests are below # + + +def test_sanity(parser): + """Read a very basic file""" + with sample_file("basic_file.cpp") as f: + parser.read_lines(f) + + assert len(parser.functions) == 3 + assert code_blocks_are_sorted(parser.functions) is True + # n.b. The parser returns line numbers as 1-based + # Function starts when we see the opening curly brace + assert parser.functions[0].line_number == 8 + assert parser.functions[0].end_line == 10 + + +def test_oneline(parser): + """(Assuming clang-format permits this) This sample has a function + on a single line. This will test the end-of-function detection""" + with sample_file("oneline_function.cpp") as f: + parser.read_lines(f) + + assert len(parser.functions) == 2 + assert parser.functions[0].line_number == 5 + assert parser.functions[0].end_line == 5 + + +def test_missing_offset(parser): + """What if the function doesn't have an offset comment?""" + with sample_file("missing_offset.cpp") as f: + parser.read_lines(f) + + # TODO: For now, the function without the offset will just be ignored. + # Would be the same outcome if the comment was present but mangled and + # we failed to match it. We should detect these cases in the future. + assert len(parser.functions) == 1 + + +def test_jumbled_case(parser): + """The parser just reports what it sees. It is the responsibility of + the downstream tools to do something about a jumbled file. + Just verify that we are reading it correctly.""" + with sample_file("out_of_order.cpp") as f: + parser.read_lines(f) + + assert len(parser.functions) == 3 + assert code_blocks_are_sorted(parser.functions) is False + + +def test_bad_file(parser): + with sample_file("poorly_formatted.cpp") as f: + parser.read_lines(f) + + assert len(parser.functions) == 3 + + +def test_indented(parser): + """Offsets for functions inside of a class will probably be indented.""" + with sample_file("basic_class.cpp") as f: + parser.read_lines(f) + + # TODO: We don't properly detect the end of these functions + # because the closing brace is indented. However... knowing where each + # function ends is less important (for now) than capturing + # all the functions that are there. + + assert len(parser.functions) == 2 + assert parser.functions[0].offset == int("0x12345678", 16) + assert parser.functions[0].line_number == 16 + # assert parser.functions[0].end_line == 19 + + assert parser.functions[1].offset == int("0xdeadbeef", 16) + assert parser.functions[1].line_number == 23 + # assert parser.functions[1].end_line == 25 + + +def test_inline(parser): + with sample_file("inline.cpp") as f: + parser.read_lines(f) + + assert len(parser.functions) == 2 + for fun in parser.functions: + assert fun.line_number is not None + assert fun.line_number == fun.end_line + + +def test_multiple_offsets(parser): + """If multiple offset marks appear before for a code block, take them + all but ensure module name (case-insensitive) is distinct. + Use first module occurrence in case of duplicates.""" + with sample_file("multiple_offsets.cpp") as f: + parser.read_lines(f) + + assert len(parser.functions) == 4 + assert parser.functions[0].module == "TEST" + assert parser.functions[0].line_number == 9 + + assert parser.functions[1].module == "HELLO" + assert parser.functions[1].line_number == 9 + + # Duplicate modules are ignored + assert parser.functions[2].line_number == 16 + assert parser.functions[2].offset == 0x2345 + + assert parser.functions[3].module == "TEST" + assert parser.functions[3].offset == 0x2002 + + +def test_variables(parser): + with sample_file("global_variables.cpp") as f: + parser.read_lines(f) + + assert len(parser.functions) == 1 + assert len(parser.variables) == 2 diff --git a/tools/isledecomp/tests/test_parser_statechange.py b/tools/isledecomp/tests/test_parser_statechange.py new file mode 100644 index 00000000..be37e3c8 --- /dev/null +++ b/tools/isledecomp/tests/test_parser_statechange.py @@ -0,0 +1,141 @@ +from typing import Optional +import pytest +from isledecomp.parser.parser import ( + ReaderState as _rs, + DecompParser, +) +from isledecomp.parser.error import ParserError as _pe + +# fmt: off +state_change_marker_cases = [ + (_rs.SEARCH, "FUNCTION", _rs.WANT_SIG, None), + (_rs.SEARCH, "GLOBAL", _rs.IN_GLOBAL, None), + (_rs.SEARCH, "STUB", _rs.WANT_SIG, None), + (_rs.SEARCH, "SYNTHETIC", _rs.IN_SYNTHETIC, None), + (_rs.SEARCH, "TEMPLATE", _rs.IN_TEMPLATE, None), + (_rs.SEARCH, "VTABLE", _rs.IN_VTABLE, None), + (_rs.SEARCH, "LIBRARY", _rs.IN_LIBRARY, None), + (_rs.SEARCH, "STRING", _rs.IN_GLOBAL, None), + + (_rs.WANT_SIG, "FUNCTION", _rs.WANT_SIG, None), + (_rs.WANT_SIG, "GLOBAL", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.WANT_SIG, "STUB", _rs.WANT_SIG, None), + (_rs.WANT_SIG, "SYNTHETIC", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.WANT_SIG, "TEMPLATE", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.WANT_SIG, "VTABLE", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.WANT_SIG, "LIBRARY", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.WANT_SIG, "STRING", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + + (_rs.IN_FUNC, "FUNCTION", _rs.WANT_SIG, _pe.MISSED_END_OF_FUNCTION), + (_rs.IN_FUNC, "GLOBAL", _rs.IN_FUNC_GLOBAL, None), + (_rs.IN_FUNC, "STUB", _rs.WANT_SIG, _pe.MISSED_END_OF_FUNCTION), + (_rs.IN_FUNC, "SYNTHETIC", _rs.IN_SYNTHETIC, _pe.MISSED_END_OF_FUNCTION), + (_rs.IN_FUNC, "TEMPLATE", _rs.IN_TEMPLATE, _pe.MISSED_END_OF_FUNCTION), + (_rs.IN_FUNC, "VTABLE", _rs.IN_VTABLE, _pe.MISSED_END_OF_FUNCTION), + (_rs.IN_FUNC, "LIBRARY", _rs.IN_LIBRARY, _pe.MISSED_END_OF_FUNCTION), + (_rs.IN_FUNC, "STRING", _rs.IN_FUNC_GLOBAL, None), + + (_rs.IN_TEMPLATE, "FUNCTION", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_TEMPLATE, "GLOBAL", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_TEMPLATE, "STUB", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_TEMPLATE, "SYNTHETIC", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_TEMPLATE, "TEMPLATE", _rs.IN_TEMPLATE, None), + (_rs.IN_TEMPLATE, "VTABLE", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_TEMPLATE, "LIBRARY", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_TEMPLATE, "STRING", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + + (_rs.WANT_CURLY, "FUNCTION", _rs.SEARCH, _pe.UNEXPECTED_MARKER), + (_rs.WANT_CURLY, "GLOBAL", _rs.SEARCH, _pe.UNEXPECTED_MARKER), + (_rs.WANT_CURLY, "STUB", _rs.SEARCH, _pe.UNEXPECTED_MARKER), + (_rs.WANT_CURLY, "SYNTHETIC", _rs.SEARCH, _pe.UNEXPECTED_MARKER), + (_rs.WANT_CURLY, "TEMPLATE", _rs.SEARCH, _pe.UNEXPECTED_MARKER), + (_rs.WANT_CURLY, "VTABLE", _rs.SEARCH, _pe.UNEXPECTED_MARKER), + (_rs.WANT_CURLY, "LIBRARY", _rs.SEARCH, _pe.UNEXPECTED_MARKER), + (_rs.WANT_CURLY, "STRING", _rs.SEARCH, _pe.UNEXPECTED_MARKER), + + (_rs.IN_GLOBAL, "FUNCTION", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_GLOBAL, "GLOBAL", _rs.IN_GLOBAL, None), + (_rs.IN_GLOBAL, "STUB", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_GLOBAL, "SYNTHETIC", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_GLOBAL, "TEMPLATE", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_GLOBAL, "VTABLE", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_GLOBAL, "LIBRARY", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_GLOBAL, "STRING", _rs.IN_GLOBAL, None), + + (_rs.IN_FUNC_GLOBAL, "FUNCTION", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_FUNC_GLOBAL, "GLOBAL", _rs.IN_FUNC_GLOBAL, None), + (_rs.IN_FUNC_GLOBAL, "STUB", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_FUNC_GLOBAL, "SYNTHETIC", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_FUNC_GLOBAL, "TEMPLATE", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_FUNC_GLOBAL, "VTABLE", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_FUNC_GLOBAL, "LIBRARY", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_FUNC_GLOBAL, "STRING", _rs.IN_FUNC_GLOBAL, None), + + (_rs.IN_VTABLE, "FUNCTION", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_VTABLE, "GLOBAL", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_VTABLE, "STUB", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_VTABLE, "SYNTHETIC", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_VTABLE, "TEMPLATE", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_VTABLE, "VTABLE", _rs.IN_VTABLE, None), + (_rs.IN_VTABLE, "LIBRARY", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_VTABLE, "STRING", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + + (_rs.IN_SYNTHETIC, "FUNCTION", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_SYNTHETIC, "GLOBAL", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_SYNTHETIC, "STUB", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_SYNTHETIC, "SYNTHETIC", _rs.IN_SYNTHETIC, None), + (_rs.IN_SYNTHETIC, "TEMPLATE", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_SYNTHETIC, "VTABLE", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_SYNTHETIC, "LIBRARY", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_SYNTHETIC, "STRING", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + + (_rs.IN_LIBRARY, "FUNCTION", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_LIBRARY, "GLOBAL", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_LIBRARY, "STUB", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_LIBRARY, "SYNTHETIC", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_LIBRARY, "TEMPLATE", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_LIBRARY, "VTABLE", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), + (_rs.IN_LIBRARY, "LIBRARY", _rs.IN_LIBRARY, None), + (_rs.IN_LIBRARY, "STRING", _rs.SEARCH, _pe.INCOMPATIBLE_MARKER), +] +# fmt: on + + +@pytest.mark.parametrize( + "state, marker_type, new_state, expected_error", state_change_marker_cases +) +def test_state_change_by_marker( + state: _rs, marker_type: str, new_state: _rs, expected_error: Optional[_pe] +): + p = DecompParser() + p.state = state + mock_line = f"// {marker_type}: TEST 0x1234" + p.read_line(mock_line) + assert p.state == new_state + + if expected_error is not None: + assert len(p.alerts) > 0 + assert p.alerts[0].code == expected_error + + +# Reading any of these lines should have no effect in ReaderState.SEARCH +search_lines_no_effect = [ + "", + "\t", + " ", + "int x = 0;", + "// Comment", + "/*", + "*/", + "/* Block comment */", + "{", + "}", +] + + +@pytest.mark.parametrize("line", search_lines_no_effect) +def test_state_search_line(line: str): + p = DecompParser() + p.read_line(line) + assert p.state == _rs.SEARCH + assert len(p.alerts) == 0 diff --git a/tools/isledecomp/tests/test_parser_util.py b/tools/isledecomp/tests/test_parser_util.py new file mode 100644 index 00000000..e60f505c --- /dev/null +++ b/tools/isledecomp/tests/test_parser_util.py @@ -0,0 +1,209 @@ +import pytest +from isledecomp.parser.parser import MarkerDict +from isledecomp.parser.marker import ( + DecompMarker, + MarkerType, + match_marker, + is_marker_exact, +) +from isledecomp.parser.util import ( + is_blank_or_comment, + get_class_name, + get_variable_name, + get_string_contents, +) + + +blank_or_comment_param = [ + (True, ""), + (True, "\t"), + (True, " "), + (False, "\tint abc=123;"), + (True, "// OFFSET: LEGO1 0xdeadbeef"), + (True, " /* Block comment beginning"), + (True, "Block comment ending */ "), + # TODO: does clang-format have anything to say about these cases? + (False, "x++; // Comment folows"), + (False, "x++; /* Block comment begins"), +] + + +@pytest.mark.parametrize("expected, line", blank_or_comment_param) +def test_is_blank_or_comment(line: str, expected: bool): + assert is_blank_or_comment(line) is expected + + +marker_samples = [ + # (can_parse: bool, exact_match: bool, line: str) + (True, True, "// FUNCTION: LEGO1 0xdeadbeef"), + (True, True, "// FUNCTION: ISLE 0x12345678"), + # No trailing spaces allowed + (True, False, "// FUNCTION: LEGO1 0xdeadbeef "), + # Must have exactly one space between elements + (True, False, "//FUNCTION: ISLE 0xdeadbeef"), + (True, False, "// FUNCTION:ISLE 0xdeadbeef"), + (True, False, "// FUNCTION: ISLE 0xdeadbeef"), + (True, False, "// FUNCTION: ISLE 0xdeadbeef"), + (True, False, "// FUNCTION: ISLE 0xdeadbeef"), + # Must have 0x prefix for hex number to match at all + (False, False, "// FUNCTION: ISLE deadbeef"), + # Offset, module name, and STUB must be uppercase + (True, False, "// function: ISLE 0xdeadbeef"), + (True, False, "// function: isle 0xdeadbeef"), + # Hex string must be lowercase + (True, False, "// FUNCTION: ISLE 0xDEADBEEF"), + # TODO: How flexible should we be with matching the module name? + (True, True, "// FUNCTION: OMNI 0x12345678"), + (True, True, "// FUNCTION: LEG01 0x12345678"), + (True, False, "// FUNCTION: hello 0x12345678"), + # Not close enough to match + (False, False, "// FUNCTION: ISLE0x12345678"), + (False, False, "// FUNCTION: 0x12345678"), + (False, False, "// LEGO1: 0x12345678"), + # Hex string shorter than 8 characters + (True, True, "// FUNCTION: LEGO1 0x1234"), + # TODO: These match but shouldn't. + # (False, False, '// FUNCTION: LEGO1 0'), + # (False, False, '// FUNCTION: LEGO1 0x'), + # Extra field + (True, True, "// VTABLE: HELLO 0x1234 Extra"), + # Extra with spaces + (True, True, "// VTABLE: HELLO 0x1234 Whatever"), + # Extra, no space (if the first non-hex character is not in [a-f]) + (True, False, "// VTABLE: HELLO 0x1234Hello"), + # Extra, many spaces + (True, False, "// VTABLE: HELLO 0x1234 Hello"), +] + + +@pytest.mark.parametrize("match, _, line", marker_samples) +def test_marker_match(line: str, match: bool, _): + did_match = match_marker(line) is not None + assert did_match is match + + +@pytest.mark.parametrize("_, exact, line", marker_samples) +def test_marker_exact(line: str, exact: bool, _): + assert is_marker_exact(line) is exact + + +def test_marker_dict_simple(): + d = MarkerDict() + d.insert(DecompMarker("FUNCTION", "TEST", 0x1234)) + markers = list(d.iter()) + assert len(markers) == 1 + + +def test_marker_dict_ofs_replace(): + d = MarkerDict() + d.insert(DecompMarker("FUNCTION", "TEST", 0x1234)) + d.insert(DecompMarker("FUNCTION", "TEST", 0x555)) + markers = list(d.iter()) + assert len(markers) == 1 + assert markers[0].offset == 0x1234 + + +def test_marker_dict_type_replace(): + d = MarkerDict() + d.insert(DecompMarker("FUNCTION", "TEST", 0x1234)) + d.insert(DecompMarker("STUB", "TEST", 0x1234)) + markers = list(d.iter()) + assert len(markers) == 1 + assert markers[0].type == MarkerType.FUNCTION + + +class_name_match_cases = [ + ("struct MxString {", "MxString"), + ("class MxString {", "MxString"), + ("// class MxString", "MxString"), + ("class MxString : public MxCore {", "MxString"), + ("class MxPtrList", "MxPtrList"), + # If it is possible to match the symbol MxList::`vftable' + # we should get the correct class name if possible. If the template type is a pointer, + # the asterisk and class name are separated by one space. + ("// class MxList", "MxList"), + ("// class MxList", "MxList"), + ("// class MxList", "MxList"), + # I don't know if this would ever come up, but sure, why not? + ("// class MxList", "MxList"), + ("// class Many::Name::Spaces", "Many::Name::Spaces"), +] + + +@pytest.mark.parametrize("line, class_name", class_name_match_cases) +def test_get_class_name(line: str, class_name: str): + assert get_class_name(line) == class_name + + +class_name_no_match_cases = [ + "MxString { ", + "clas MxString", + "// MxPtrList::`scalar deleting destructor'", +] + + +@pytest.mark.parametrize("line", class_name_no_match_cases) +def test_get_class_name_none(line: str): + assert get_class_name(line) is None + + +variable_name_cases = [ + # with prefix for easy access + ("char* g_test;", "g_test"), + ("g_test;", "g_test"), + ("void (*g_test)(int);", "g_test"), + ("char g_test[50];", "g_test"), + ("char g_test[50] = {1234,", "g_test"), + ("int g_test = 500;", "g_test"), + # no prefix + ("char* hello;", "hello"), + ("hello;", "hello"), + ("void (*hello)(int);", "hello"), + ("char hello[50];", "hello"), + ("char hello[50] = {1234,", "hello"), + ("int hello = 500;", "hello"), +] + + +@pytest.mark.parametrize("line,name", variable_name_cases) +def test_get_variable_name(line: str, name: str): + assert get_variable_name(line) == name + + +string_match_cases = [ + ('return "hello world";', "hello world"), + ('"hello\\\\"', "hello\\"), + ('"hello \\"world\\""', 'hello "world"'), + ('"hello\\nworld"', "hello\nworld"), + # Only match first string if there are multiple options + ('Method("hello", "world");', "hello"), +] + + +@pytest.mark.parametrize("line, string", string_match_cases) +def test_get_string_contents(line: str, string: str): + assert get_string_contents(line) == string + + +def test_marker_extra_spaces(): + """The extra field can contain spaces""" + marker = match_marker("// VTABLE: TEST 0x1234 S p a c e s") + assert marker.extra == "S p a c e s" + + # Trailing spaces removed + marker = match_marker("// VTABLE: TEST 0x8888 spaces ") + assert marker.extra == "spaces" + + # Trailing newline removed if present + marker = match_marker("// VTABLE: TEST 0x5555 newline\n") + assert marker.extra == "newline" + + +def test_marker_trailing_spaces(): + """Should ignore trailing spaces. (Invalid extra field) + Offset field not truncated, extra field set to None.""" + + marker = match_marker("// VTABLE: TEST 0x1234 ") + assert marker is not None + assert marker.offset == 0x1234 + assert marker.extra is None diff --git a/tools/isledecomp/tests/test_path_resolver_nt.py b/tools/isledecomp/tests/test_path_resolver_nt.py new file mode 100644 index 00000000..93ddfd17 --- /dev/null +++ b/tools/isledecomp/tests/test_path_resolver_nt.py @@ -0,0 +1,32 @@ +from os import name as os_name +import pytest +from isledecomp.dir import PathResolver + + +if os_name != "nt": + pytest.skip(reason="Skip Windows-only tests", allow_module_level=True) + + +@pytest.fixture(name="resolver") +def fixture_resolver_win(): + yield PathResolver("C:\\isle") + + +def test_identity(resolver): + assert resolver.resolve_cvdump("C:\\isle\\test.h") == "C:\\isle\\test.h" + + +def test_outside_basedir(resolver): + assert resolver.resolve_cvdump("C:\\lego\\test.h") == "C:\\lego\\test.h" + + +def test_relative(resolver): + assert resolver.resolve_cvdump(".\\test.h") == "C:\\isle\\test.h" + assert resolver.resolve_cvdump("..\\test.h") == "C:\\test.h" + + +def test_intermediate_relative(resolver): + """These paths may not register as `relative` paths, but we want to + produce a single absolute path for each.""" + assert resolver.resolve_cvdump("C:\\isle\\test\\..\\test.h") == "C:\\isle\\test.h" + assert resolver.resolve_cvdump(".\\subdir\\..\\test.h") == "C:\\isle\\test.h" diff --git a/tools/isledecomp/tests/test_path_resolver_posix.py b/tools/isledecomp/tests/test_path_resolver_posix.py new file mode 100644 index 00000000..af0c89e5 --- /dev/null +++ b/tools/isledecomp/tests/test_path_resolver_posix.py @@ -0,0 +1,69 @@ +from os import name as os_name +from unittest.mock import patch +import pytest +from isledecomp.dir import PathResolver + + +if os_name == "nt": + pytest.skip(reason="Skip Posix-only tests", allow_module_level=True) + + +@pytest.fixture(name="resolver") +def fixture_resolver_posix(): + # Skip the call to winepath by using a patch, although this is not strictly necessary. + with patch("isledecomp.dir.winepath_unix_to_win", return_value="Z:\\usr\\isle"): + yield PathResolver("/usr/isle") + + +@patch("isledecomp.dir.winepath_win_to_unix") +def test_identity(winepath_mock, resolver): + """Test with an absolute Wine path where a path swap is possible.""" + # In this and upcoming tests, patch is_file so we always assume there is + # a file at the given unix path. We want to test the conversion logic only. + with patch("pathlib.Path.is_file", return_value=True): + assert resolver.resolve_cvdump("Z:\\usr\\isle\\test.h") == "/usr/isle/test.h" + winepath_mock.assert_not_called() + + # Without the patch, this should call the winepath_mock, but we have + # memoized the value from the previous run. + assert resolver.resolve_cvdump("Z:\\usr\\isle\\test.h") == "/usr/isle/test.h" + winepath_mock.assert_not_called() + + +@patch("isledecomp.dir.winepath_win_to_unix") +def test_file_does_not_exist(winepath_mock, resolver): + """These test files (probably) don't exist, so we always assume + the path swap failed and defer to winepath.""" + resolver.resolve_cvdump("Z:\\usr\\isle\\test.h") + winepath_mock.assert_called_once_with("Z:\\usr\\isle\\test.h") + + +@patch("isledecomp.dir.winepath_win_to_unix") +def test_outside_basedir(winepath_mock, resolver): + """Test an absolute path where we cannot do a path swap.""" + with patch("pathlib.Path.is_file", return_value=True): + resolver.resolve_cvdump("Z:\\lego\\test.h") + winepath_mock.assert_called_once_with("Z:\\lego\\test.h") + + +@patch("isledecomp.dir.winepath_win_to_unix") +def test_relative(winepath_mock, resolver): + """Test relative paths inside and outside of the base dir.""" + with patch("pathlib.Path.is_file", return_value=True): + assert resolver.resolve_cvdump("./test.h") == "/usr/isle/test.h" + + # This works because we will resolve "/usr/isle/test/../test.h" + assert resolver.resolve_cvdump("../test.h") == "/usr/test.h" + winepath_mock.assert_not_called() + + +@patch("isledecomp.dir.winepath_win_to_unix") +def test_intermediate_relative(winepath_mock, resolver): + """We can resolve intermediate backdirs if they are relative to the basedir.""" + with patch("pathlib.Path.is_file", return_value=True): + assert ( + resolver.resolve_cvdump("Z:\\usr\\isle\\test\\..\\test.h") + == "/usr/isle/test.h" + ) + assert resolver.resolve_cvdump(".\\subdir\\..\\test.h") == "/usr/isle/test.h" + winepath_mock.assert_not_called() diff --git a/tools/isledecomp/tests/test_sanitize.py b/tools/isledecomp/tests/test_sanitize.py new file mode 100644 index 00000000..deb3c825 --- /dev/null +++ b/tools/isledecomp/tests/test_sanitize.py @@ -0,0 +1,296 @@ +from typing import Optional +import pytest +from isledecomp.compare.asm.parse import DisasmLiteInst, ParseAsm + + +def mock_inst(mnemonic: str, op_str: str) -> DisasmLiteInst: + """Mock up the named tuple DisasmLite from just a mnemonic and op_str. + To be used for tests on sanitize that do not require the instruction address + or size. i.e. any non-jump instruction.""" + return DisasmLiteInst(0, 0, mnemonic, op_str) + + +identity_cases = [ + ("", ""), + ("sti", ""), + ("push", "ebx"), + ("ret", ""), + ("ret", "4"), + ("mov", "eax, 0x1234"), +] + + +@pytest.mark.parametrize("mnemonic, op_str", identity_cases) +def test_identity(mnemonic, op_str): + """Confirm that nothing is substituted.""" + p = ParseAsm() + inst = mock_inst(mnemonic, op_str) + result = p.sanitize(inst) + assert result == (mnemonic, op_str) + + +ptr_replace_cases = [ + ("byte ptr [0x5555]", "byte ptr []"), + ("word ptr [0x5555]", "word ptr []"), + ("dword ptr [0x5555]", "dword ptr []"), + ("qword ptr [0x5555]", "qword ptr []"), + ("eax, dword ptr [0x5555]", "eax, dword ptr []"), + ("dword ptr [0x5555], eax", "dword ptr [], eax"), + ("dword ptr [0x5555], 0", "dword ptr [], 0"), + ("dword ptr [0x5555], 8", "dword ptr [], 8"), + # Same value, assumed to be an addr in the first appearance + # because it is designated as 'ptr', but we have not provided the + # relocation table lookup method so we do not replace the second appearance. + ("dword ptr [0x5555], 0x5555", "dword ptr [], 0x5555"), +] + + +@pytest.mark.parametrize("start, end", ptr_replace_cases) +def test_ptr_replace(start, end): + """Anything in square brackets (with the 'ptr' prefix) will always be replaced.""" + p = ParseAsm() + inst = mock_inst("", start) + (_, op_str) = p.sanitize(inst) + assert op_str == end + + +call_replace_cases = [ + ("ebx", "ebx"), + ("0x1234", ""), + ("dword ptr [0x1234]", "dword ptr []"), + ("dword ptr [ecx + 0x10]", "dword ptr [ecx + 0x10]"), +] + + +@pytest.mark.parametrize("start, end", call_replace_cases) +def test_call_replace(start, end): + """Call with hex operand is always replaced. + Otherwise, ptr replacement rules apply, but skip `this` calls.""" + p = ParseAsm() + inst = mock_inst("call", start) + (_, op_str) = p.sanitize(inst) + assert op_str == end + + +def test_jump_displacement(): + """Display jump displacement (offset from end of jump instruction) + instead of destination address.""" + p = ParseAsm() + inst = DisasmLiteInst(0x1000, 2, "je", "0x1000") + (_, op_str) = p.sanitize(inst) + assert op_str == "-0x2" + + +def test_jmp_table(): + """To ignore cases where it would be inappropriate to replace pointer + displacement (i.e. the vast majority of them) we require the address + to be relocated. This excludes any address less than the imagebase.""" + p = ParseAsm() + inst = mock_inst("jmp", "dword ptr [eax*4 + 0x5555]") + (_, op_str) = p.sanitize(inst) + # i.e. no change + assert op_str == "dword ptr [eax*4 + 0x5555]" + + def relocate_lookup(addr: int) -> bool: + return addr == 0x5555 + + # Now add the relocation lookup + p = ParseAsm(relocate_lookup=relocate_lookup) + (_, op_str) = p.sanitize(inst) + # Should replace it now + assert op_str == "dword ptr [eax*4 + ]" + + +name_replace_cases = [ + ("byte ptr [0x5555]", "byte ptr [_substitute_]"), + ("word ptr [0x5555]", "word ptr [_substitute_]"), + ("dword ptr [0x5555]", "dword ptr [_substitute_]"), + ("qword ptr [0x5555]", "qword ptr [_substitute_]"), +] + + +@pytest.mark.parametrize("start, end", name_replace_cases) +def test_name_replace(start, end): + """Make sure the name lookup function is called if present""" + + def substitute(_: int, __: bool) -> str: + return "_substitute_" + + p = ParseAsm(name_lookup=substitute) + inst = mock_inst("mov", start) + (_, op_str) = p.sanitize(inst) + assert op_str == end + + +def test_replacement_cache(): + p = ParseAsm() + inst = mock_inst("inc", "dword ptr [0x1234]") + + (_, op_str) = p.sanitize(inst) + assert op_str == "dword ptr []" + + (_, op_str) = p.sanitize(inst) + assert op_str == "dword ptr []" + + +def test_replacement_numbering(): + """If we can use the name lookup for the first address but not the second, + the second replacement should be not .""" + + def substitute_1234(addr: int, _: bool) -> Optional[str]: + return "_substitute_" if addr == 0x1234 else None + + p = ParseAsm(name_lookup=substitute_1234) + + (_, op_str) = p.sanitize(mock_inst("inc", "dword ptr [0x1234]")) + assert op_str == "dword ptr [_substitute_]" + + (_, op_str) = p.sanitize(mock_inst("inc", "dword ptr [0x5555]")) + assert op_str == "dword ptr []" + + +def test_relocate_lookup(): + """Immediate values would be relocated if they are actually addresses. + So we can use the relocation table to check whether a given value is an + address or just some number.""" + + def relocate_lookup(addr: int) -> bool: + return addr == 0x1234 + + p = ParseAsm(relocate_lookup=relocate_lookup) + (_, op_str) = p.sanitize(mock_inst("mov", "eax, 0x1234")) + assert op_str == "eax, " + + (_, op_str) = p.sanitize(mock_inst("mov", "eax, 0x5555")) + assert op_str == "eax, 0x5555" + + +def test_jump_to_function(): + """A jmp instruction can lead us directly to a function. This can be found + in the unwind section at the end of a function. However: we do not want to + assume this is the case for all jumps. Only replace the jump with a name + if we can find it using our lookup.""" + + def substitute_1234(addr: int, _: bool) -> Optional[str]: + return "_substitute_" if addr == 0x1234 else None + + p = ParseAsm(name_lookup=substitute_1234) + inst = DisasmLiteInst(0x1000, 2, "jmp", "0x1234") + (_, op_str) = p.sanitize(inst) + assert op_str == "_substitute_" + + # Should not replace this jump. + # 0x1000 (start addr) + # + 2 (size of jump instruction) + # + 0x5555 (displacement, the value we want) + # = 0x6557 + inst = DisasmLiteInst(0x1000, 2, "jmp", "0x6557") + (_, op_str) = p.sanitize(inst) + assert op_str == "0x5555" + + +@pytest.mark.skip(reason="changed implementation") +def test_float_replacement(): + """Floating point constants often appear as pointers to data. + A good example is ViewROI::IntrinsicImportance and the subclass override + LegoROI::IntrinsicImportance. Both return 0.5, but this is done via the + FLD instruction and a dword value at 0x100dbdec. In this case it is more + valuable to just read the constant value rather than use a placeholder. + The float constants don't appear to be deduplicated (like strings are) + because there is another 0.5 at 0x100d40b0.""" + + def bin_lookup(addr: int, _: int) -> Optional[bytes]: + return b"\xdb\x0f\x49\x40" if addr == 0x1234 else None + + p = ParseAsm(bin_lookup=bin_lookup) + inst = DisasmLiteInst(0x1000, 6, "fld", "dword ptr [0x1234]") + (_, op_str) = p.sanitize(inst) + # Single-precision float. struct.unpack(" Optional[str]: + return "g_myFloatVariable" if addr == 0x1234 else None + + p = ParseAsm(name_lookup=name_lookup) + inst = DisasmLiteInst(0x1000, 6, "fld", "dword ptr [0x1234]") + (_, op_str) = p.sanitize(inst) + assert op_str == "dword ptr [g_myFloatVariable]" + + +def test_pointer_compare(): + """A loop on an array could get optimized into comparing on the address + that immediately follows the array. This may or may not be a valid address + and it may or may not be annotated. To avoid a situation where an + erroneous address value would get replaced with a placeholder and silently + pass the comparison check, we will only replace an immediate value on the + CMP instruction if it is a known address.""" + + # 0x1234 and 0x5555 are relocated and so are considered to be addresses. + def relocate_lookup(addr: int) -> bool: + return addr in (0x1234, 0x5555) + + # Only 0x5555 is a "known" address + def name_lookup(addr: int, _: bool) -> Optional[str]: + return "hello" if addr == 0x5555 else None + + p = ParseAsm(relocate_lookup=relocate_lookup, name_lookup=name_lookup) + + # Will always replace on MOV instruction + (_, op_str) = p.sanitize(mock_inst("mov", "eax, 0x1234")) + assert op_str == "eax, " + (_, op_str) = p.sanitize(mock_inst("mov", "eax, 0x5555")) + assert op_str == "eax, hello" + + # n.b. We have already cached the replacement for 0x1234, but the + # special handling for CMP should skip the cache and not use it. + + # Do not replace here + (_, op_str) = p.sanitize(mock_inst("cmp", "eax, 0x1234")) + assert op_str == "eax, 0x1234" + # Should replace here + (_, op_str) = p.sanitize(mock_inst("cmp", "eax, 0x5555")) + assert op_str == "eax, hello" + + +def test_absolute_indirect(): + """The instruction `call dword ptr [0x1234]` means we call the function + whose address is at 0x1234. (i.e. absolute indirect addressing mode) + It is probably more useful to show the name of the function itself if + we have it, but there are some circumstances where we want to replace + with the pointer's name (i.e. an import function).""" + + def name_lookup(addr: int, _: bool) -> Optional[str]: + return { + 0x1234: "Hello", + 0x4321: "xyz", + 0x5555: "Test", + }.get(addr) + + def bin_lookup(addr: int, _: int) -> Optional[bytes]: + return ( + { + 0x1234: b"\x55\x55\x00\x00", + 0x4321: b"\x99\x99\x00\x00", + } + ).get(addr) + + p = ParseAsm(name_lookup=name_lookup, bin_lookup=bin_lookup) + + # If we know the indirect address (0x5555) + # Arrow to indicate this is an indirect replacement + (_, op_str) = p.sanitize(mock_inst("call", "dword ptr [0x1234]")) + assert op_str == "dword ptr [->Test]" + + # If we do not know the indirect address (0x9999) + (_, op_str) = p.sanitize(mock_inst("call", "dword ptr [0x4321]")) + assert op_str == "dword ptr [xyz]" + + # If we can't read the indirect address + (_, op_str) = p.sanitize(mock_inst("call", "dword ptr [0x5555]")) + assert op_str == "dword ptr [Test]" diff --git a/tools/reccmp/config.png b/tools/reccmp/config.png new file mode 100644 index 0000000000000000000000000000000000000000..1f2050ad37fcf5401d5bca86171b5da2efab4fd5 GIT binary patch literal 1432 zcmeAS@N?(olHy`uVBq!ia0y~yU}^wi7G|KxzsFYufRsYAN02WALzNl>LqiJ#!!Mvv z!wUw6QUeBtR|yOZRx=nF#0%!^3bX-Ahz9tCxc>jozyQJwAPgjc@c;kkKdyBHd5lTk z?k;SJX*+6x9QG1VUsv`QOl+dE#>SSxNem1uF`h1tAr-gYUO3n*Z7AUCxO9W22J6xX zB6I4s_UUb~;`zoo>u1s4;>kJJ-j)T$%U_DDV_;-rsc2-iFRs0ei! z?d&XY1{o3Is?Too+c}(ricaE5c%%6s{Ds)A{R=nUPh=)5tQ;EbtG>C-M2l+l5XBYP z6>IDl{+8DI4NOlcNrg!Le{3IYHa{hU%XIu^9!R!zde5Lkf!(Xg_Vs>wkfTY;R79i@ zV5kw1J;fPV4cHCXs0P3B|DS8)tZ{Yb8eq|*TH+c}l9E`GYL#4+3Zxi}42(>44UBXR z%tDL|t&B{qjEuDn46FW(*QA`1`W6kC7HRY#U+Wk1?YM# ZtxOFemZ-aRmIL)Lc)I$ztaD0e0sz^hIHLdn literal 0 HcmV?d00001 diff --git a/tools/reccmp/isle.png b/tools/reccmp/isle.png new file mode 100644 index 0000000000000000000000000000000000000000..cfa26a234f1eeb4d65808b0097e809eb5bfd6ba7 GIT binary patch literal 5448 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 literal 0 HcmV?d00001 diff --git a/tools/reccmp/lego1.png b/tools/reccmp/lego1.png new file mode 100644 index 0000000000000000000000000000000000000000..f76a54da16876d4bbb51cbff06e8a9c93df60aa6 GIT binary patch literal 5615 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 literal 0 HcmV?d00001 diff --git a/tools/reccmp/reccmp.js b/tools/reccmp/reccmp.js new file mode 100644 index 00000000..4a8e6595 --- /dev/null +++ b/tools/reccmp/reccmp.js @@ -0,0 +1,867 @@ +// reccmp.js +/* global data */ + +// Unwrap array of functions into a dictionary with address as the key. +const dataDict = Object.fromEntries(data.map(row => [row.address, row])); + +function getDataByAddr(addr) { + return dataDict[addr]; +} + +// +// Pure functions +// + +function formatAsm(entries, addrOption) { + const output = []; + + const createTh = (text) => { + const th = document.createElement('th'); + th.innerText = text; + return th; + }; + + const createTd = (text, className = '') => { + const td = document.createElement('td'); + td.innerText = text; + td.className = className; + return td; + }; + + entries.forEach(obj => { + // These won't all be present. You get "both" for an equal node + // and orig/recomp for a diff. + const { both = [], orig = [], recomp = [] } = obj; + + output.push(...both.map(([addr, line, recompAddr]) => { + const tr = document.createElement('tr'); + tr.appendChild(createTh(addr)); + tr.appendChild(createTh(recompAddr)); + tr.appendChild(createTd(line)); + return tr; + })); + + output.push(...orig.map(([addr, line]) => { + const tr = document.createElement('tr'); + tr.appendChild(createTh(addr)); + tr.appendChild(createTh('')); + tr.appendChild(createTd(`-${line}`, 'diffneg')); + return tr; + })); + + output.push(...recomp.map(([addr, line]) => { + const tr = document.createElement('tr'); + tr.appendChild(createTh('')); + tr.appendChild(createTh(addr)); + tr.appendChild(createTd(`+${line}`, 'diffpos')); + return tr; + })); + }); + + return output; +} + +// Special internal values to ensure this sort order for matching column: +// 1. Stub +// 2. Any match percentage [0.0, 1.0) +// 3. Effective match +// 4. Actual 100% match +function matchingColAdjustment(row) { + if ('stub' in row) { + return -1; + } + + if ('effective' in row) { + return 1.0; + } + + if (row.matching === 1.0) { + return 1000; + } + + return row.matching; +} + +function getCppClass(str) { + const idx = str.indexOf('::'); + if (idx !== -1) { + return str.slice(0, idx); + } + + return str; +} + +// Clamp string length to specified length and pad with ellipsis +function stringTruncate(str, maxlen = 20) { + str = getCppClass(str); + if (str.length > maxlen) { + return `${str.slice(0, maxlen)}...`; + } + + return str; +} + +function getMatchPercentText(row) { + if ('stub' in row) { + return 'stub'; + } + + if ('effective' in row) { + return '100.00%*'; + } + + return (row.matching * 100).toFixed(2) + '%'; +} + +function countDiffs(row) { + const { diff = '' } = row; + if (diff === '') { + return ''; + } + + const diffs = diff.map(([slug, subgroups]) => subgroups).flat(); + const diffLength = diffs.filter(d => !('both' in d)).length; + const diffWord = diffLength === 1 ? 'diff' : 'diffs'; + return diffLength === 0 ? '' : `${diffLength} ${diffWord}`; +} + +// Helper for this set/remove attribute block +function setBooleanAttribute(element, attribute, value) { + if (value) { + element.setAttribute(attribute, ''); + } else { + element.removeAttribute(attribute); + } +} + +function copyToClipboard(value) { + navigator.clipboard.writeText(value); +} + +const PAGE_SIZE = 200; + +// +// Global state +// + +class ListingState { + constructor() { + this._query = ''; + this._sortCol = 'address'; + this._filterType = 1; + this._sortDesc = false; + this._hidePerfect = false; + this._hideStub = false; + this._showRecomp = false; + this._expanded = {}; + this._page = 0; + + this._listeners = []; + + this._results = []; + this.updateResults(); + } + + addListener(fn) { + this._listeners.push(fn); + } + + callListeners() { + for (const fn of this._listeners) { + fn(); + } + } + + isExpanded(addr) { + return addr in this._expanded; + } + + toggleExpanded(addr) { + this.setExpanded(addr, !this.isExpanded(addr)); + } + + setExpanded(addr, value) { + if (value) { + this._expanded[addr] = true; + } else { + delete this._expanded[addr]; + } + } + + updateResults() { + const filterFn = this.rowFilterFn.bind(this); + const sortFn = this.rowSortFn.bind(this); + + this._results = data.filter(filterFn).sort(sortFn); + + // Set _page directly to avoid double call to listeners. + this._page = this.pageClamp(this.page); + this.callListeners(); + } + + pageSlice() { + return this._results.slice(this.page * PAGE_SIZE, (this.page + 1) * PAGE_SIZE); + } + + resultsCount() { + return this._results.length; + } + + pageCount() { + return Math.ceil(this._results.length / PAGE_SIZE); + } + + maxPage() { + return Math.max(0, this.pageCount() - 1); + } + + // A list showing the range of each page based on the sort column and direction. + pageHeadings() { + if (this._results.length === 0) { + return []; + } + + const headings = []; + + for (let i = 0; i < this.pageCount(); i++) { + const startIdx = i * PAGE_SIZE; + const endIdx = Math.min(this._results.length, ((i + 1) * PAGE_SIZE)) - 1; + + let start = this._results[startIdx][this.sortCol]; + let end = this._results[endIdx][this.sortCol]; + + if (this.sortCol === 'matching') { + start = getMatchPercentText(this._results[startIdx]); + end = getMatchPercentText(this._results[endIdx]); + } + + headings.push([i, stringTruncate(start), stringTruncate(end)]); + } + + return headings; + } + + rowFilterFn(row) { + // Destructuring sets defaults for optional values from this object. + const { + effective = false, + stub = false, + diff = '', + name, + address, + matching + } = row; + + if (this.hidePerfect && (effective || matching >= 1)) { + return false; + } + + if (this.hideStub && stub) { + return false; + } + + if (this.query === '') { + return true; + } + + // Name/addr search + if (this.filterType === 1) { + return ( + address.includes(this.query) || + name.toLowerCase().includes(this.query) + ); + } + + // no diff for review. + if (diff === '') { + return false; + } + + // special matcher for combined diff + const anyLineMatch = ([addr, line]) => line.toLowerCase().trim().includes(this.query); + + // Flatten all diff groups for the search + const diffs = diff.map(([slug, subgroups]) => subgroups).flat(); + for (const subgroup of diffs) { + const { both = [], orig = [], recomp = [] } = subgroup; + + // If search includes context + if (this.filterType === 2 && both.some(anyLineMatch)) { + return true; + } + + if (orig.some(anyLineMatch) || recomp.some(anyLineMatch)) { + return true; + } + } + + return false; + } + + rowSortFn(rowA, rowB) { + const valA = this.sortCol === 'matching' + ? matchingColAdjustment(rowA) + : rowA[this.sortCol]; + + const valB = this.sortCol === 'matching' + ? matchingColAdjustment(rowB) + : rowB[this.sortCol]; + + if (valA > valB) { + return this.sortDesc ? -1 : 1; + } else if (valA < valB) { + return this.sortDesc ? 1 : -1; + } + + return 0; + } + + pageClamp(page) { + return Math.max(0, Math.min(page, this.maxPage())); + } + + get page() { + return this._page; + } + + set page(page) { + this._page = this.pageClamp(page); + this.callListeners(); + } + + get filterType() { + return parseInt(this._filterType); + } + + set filterType(value) { + value = parseInt(value); + if (value >= 1 && value <= 3) { + this._filterType = value; + } + this.updateResults(); + } + + get query() { + return this._query; + } + + set query(value) { + // Normalize search string + this._query = value.toLowerCase().trim(); + this.updateResults(); + } + + get showRecomp() { + return this._showRecomp; + } + + set showRecomp(value) { + // Don't sort by the recomp column we are about to hide + if (!value && this.sortCol === 'recomp') { + this._sortCol = 'address'; + } + + this._showRecomp = value; + this.callListeners(); + } + + get sortCol() { + return this._sortCol; + } + + set sortCol(column) { + if (column === this._sortCol) { + this._sortDesc = !this._sortDesc; + } else { + this._sortCol = column; + } + + this.updateResults(); + } + + get sortDesc() { + return this._sortDesc; + } + + set sortDesc(value) { + this._sortDesc = value; + this.updateResults(); + } + + get hidePerfect() { + return this._hidePerfect; + } + + set hidePerfect(value) { + this._hidePerfect = value; + this.updateResults(); + } + + get hideStub() { + return this._hideStub; + } + + set hideStub(value) { + this._hideStub = value; + this.updateResults(); + } +} + +const appState = new ListingState(); + +// +// Custom elements +// + +// Sets sort indicator arrow based on element attributes. +class SortIndicator extends window.HTMLElement { + static observedAttributes = ['data-sort']; + + attributeChangedCallback(name, oldValue, newValue) { + if (newValue === null) { + // Reserve space for blank indicator so column width stays the same + this.innerHTML = ' '; + } else { + this.innerHTML = newValue === 'asc' ? '▲' : '▼'; + } + } +} + +class FuncRow extends window.HTMLElement { + connectedCallback() { + if (this.shadowRoot !== null) { + return; + } + + const template = document.querySelector('template#funcrow-template').content; + const shadow = this.attachShadow({ mode: 'open' }); + shadow.appendChild(template.cloneNode(true)); + shadow.querySelector(':host > div[data-col="name"]').addEventListener('click', evt => { + this.dispatchEvent(new Event('name-click')); + }); + } + + get address() { + return this.getAttribute('data-address'); + } +} + +class NoDiffMessage extends window.HTMLElement { + connectedCallback() { + if (this.shadowRoot !== null) { + return; + } + + const template = document.querySelector('template#nodiff-template').content; + const shadow = this.attachShadow({ mode: 'open' }); + shadow.appendChild(template.cloneNode(true)); + } +} + +class CanCopy extends window.HTMLElement { + connectedCallback() { + if (this.shadowRoot !== null) { + return; + } + + const template = document.querySelector('template#can-copy-template').content; + const shadow = this.attachShadow({ mode: 'open' }); + shadow.appendChild(template.cloneNode(true)); + + const el = shadow.querySelector('slot').assignedNodes()[0]; + el.addEventListener('mouseout', evt => { this.copied = false; }); + el.addEventListener('click', evt => { + copyToClipboard(evt.target.textContent); + this.copied = true; + }); + } + + get copied() { + return this.getAttribute('copied'); + } + + set copied(value) { + if (value) { + setTimeout(() => { this.copied = false; }, 2000); + } + setBooleanAttribute(this, 'copied', value); + } +} + +// Displays asm diff for the given @data-address value. +class DiffRow extends window.HTMLElement { + connectedCallback() { + if (this.shadowRoot !== null) { + return; + } + + const template = document.querySelector('template#diffrow-template').content; + const shadow = this.attachShadow({ mode: 'open' }); + shadow.appendChild(template.cloneNode(true)); + } + + get address() { + return this.getAttribute('data-address'); + } + + set address(value) { + this.setAttribute('data-address', value); + } +} + +class DiffDisplayOptions extends window.HTMLElement { + static observedAttributes = ['data-option']; + + connectedCallback() { + if (this.shadowRoot !== null) { + return; + } + + const shadow = this.attachShadow({ mode: 'open' }); + shadow.innerHTML = ` + +