From 664cea45c7593ad646dd06cca72ff5fd34efc32d Mon Sep 17 00:00:00 2001 From: Soren Jorvang Date: Wed, 2 Jun 2010 18:00:22 +0000 Subject: [PATCH] Meta: Using Unix tools to operate on a tree containing filename with spaces in them is really annoying, so rename the handful of instances where there were spaces. Host.cpp has never been used. Games tend to lookup the following directories that we don't yet have anything to put in, so prepopulate them in Data/User/Wii: title/00010001 title/00010002 title/00010003 title/00010004 title/00010005 title/00010006 title/00010007 meta shared2/title Set eol-style native on a number of text files which didn't already have it. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5572 8ced0084-cf51-0410-be5f-012b33b47a6e --- .../Config/{IR Pointer.ini => IrPointer.ini} | 0 Externals/Bochs_disasm/Bochs_disasm.vcproj | 734 +- Externals/Bochs_disasm/opcodes.inl | 2460 +- Externals/LZO/LZO.vcproj | 624 +- Externals/Lua/Lua.vcproj | 1006 +- .../MemcardManager.sln} | 62 +- .../MemcardManager.vcproj} | 1080 +- .../SConscript | 6 +- .../SConstruct | 2 +- .../{Memcard Manager => MemcardManager}/build | 0 .../{Memcard Manager => MemcardManager}/clean | 0 Externals/MemcardManager/src/MCMdebug.cpp | 519 + Externals/MemcardManager/src/MCMdebug.h | 111 + Externals/MemcardManager/src/MCMmain.h | 17 + Externals/MemcardManager/src/mcmMain.cpp | 51 + .../SFML/build/vc2008/sfml-network.vcproj | 790 +- Externals/SOIL/SOIL.h | 836 +- Externals/SOIL/SOIL.vcproj | 636 +- Externals/WiiUseSrc/wiiuse.vcproj | 1068 +- Externals/wxWidgets/build/msw/wx_adv.vcproj | 3496 +- Externals/wxWidgets/build/msw/wx_aui.vcproj | 1616 +- Externals/wxWidgets/build/msw/wx_base.vcproj | 9166 ++--- Externals/wxWidgets/build/msw/wx_core.vcproj | 28942 ++++++++-------- Externals/zlib/zlib.vcproj | 778 +- Installer/Installer_win32.nsi | 484 +- Installer/Installer_x64.nsi | 504 +- Installer/Licence.txt | 2 +- Readme.txt | 142 +- Source/Core/AudioCommon/AudioCommon.vcproj | 982 +- Source/Core/Common/Common.vcproj | 1852 +- Source/Core/Core/Core.vcproj | 3016 +- Source/Core/Core/Src/Host.cpp | 2 - Source/Core/Core/Src/SConscript | 1 - Source/Core/DSPCore/DSPCore.vcproj | 1184 +- .../DebuggerUICommon/DebuggerUICommon.vcproj | 874 +- Source/Core/DebuggerWX/DebuggerWX.vcproj | 1770 +- Source/Core/DiscIO/DiscIO.vcproj | 2614 +- Source/Core/DolphinWX/DolphinWX.vcproj | 2424 +- Source/Core/DolphinWX/DolphinWX.vcproj.user | 100 +- Source/Core/InputCommon/InputCommon.vcproj | 1076 +- Source/Core/VideoCommon/OpenCL.rules | 36 +- Source/Core/VideoCommon/VideoCommon.vcproj | 1552 +- Source/DSPSpy/DSPSpy.vcproj | 504 +- Source/DSPSpy/Makefile | 318 +- Source/DSPSpy/gba.txt | 1216 +- Source/DSPSpy/tests/dr_test.ds | 628 +- Source/DSPSpy/tests/dsp_base.inc | 550 +- Source/DSPSpy/tests/dsp_test.ds | 42 +- Source/DSPSpy/tests/ir_test.ds | 638 +- Source/DSPSpy/tests/ld_test.ds | 494 +- Source/DSPSpy/tests/mul_test.ds | 500 +- Source/DSPSpy/tests/unk_regs_test.ds | 98 +- Source/DSPTool/DSPTool.vcproj | 1044 +- Source/Dolphin.sln | 1270 +- Source/Dolphin.xcodeproj/project.pbxproj | 4 - .../InputPluginCommon.vcproj | 900 +- .../Plugin_DSP_HLE/Plugin_DSP_HLE.vcproj | 1640 +- .../Plugin_DSP_LLE/Plugin_DSP_LLE.vcproj | 1746 +- .../Plugin_GCPadNew/Plugin_GCPadNew.vcproj | 1064 +- .../Plugin_VideoDX9/Plugin_VideoDX9.vcproj | 2848 +- .../Plugin_VideoOGL/Plugin_VideoOGL.vcproj | 2014 +- .../Plugin_VideoSoftware.vcproj | 1360 +- .../Plugin_Wiimote/Plugin_Wiimote.vcproj | 1374 +- Source/Plugins/Plugin_Wiimote/Src/Config.cpp | 6 +- Source/Plugins/Plugin_Wiimote/Src/Rumble.cpp | 810 +- .../Plugin_WiimoteNew.vcproj | 1222 +- .../Plugin_nJoy_SDL/Plugin_nJoy_SDL.vcproj | 1162 +- .../Plugin_nJoy_SDL/Src/GUI/ConfigBox.cpp | 2026 +- .../Src/GUI/Images/controller.xpm | 1132 +- .../Plugin_nJoy_SDL/Src/GUI/Images/njoy.xpm | 8056 ++--- Source/Plugins/Plugin_nJoy_SDL/Src/Rumble.cpp | 760 +- Source/Plugins/Plugin_nJoy_SDL/readme.txt | 230 +- Source/TestSuite/ARAM/ARAM.vcproj | 110 +- Source/TestSuite/ARAM/Makefile | 260 +- Source/TestSuite/AX/AX.vcproj | 110 +- Source/TestSuite/AX/Makefile | 260 +- Source/TestSuite/EXI/EXI.vcproj | 152 +- Source/TestSuite/EXI/Makefile | 262 +- Source/TestSuite/FPU/FPU.vcproj | 356 +- Source/TestSuite/FPU/Makefile | 270 +- Source/TestSuite/GX/GX.vcproj | 110 +- Source/TestSuite/GX/Makefile | 262 +- Source/TestSuite/PAD/Makefile | 262 +- Source/TestSuite/PAD/PAD.vcproj | 110 +- Source/TestSuite/RTC/Makefile | 260 +- Source/TestSuite/RTC/RTC.vcproj | 110 +- Source/TestSuite/SI/Makefile | 260 +- Source/TestSuite/SI/SI.vcproj | 110 +- Source/TestSuite/WPAD/WPAD.vcproj | 110 +- Source/TestSuite/WRTC/WRTC.vcproj | 110 +- Source/TestSuite/WSD/WSD.vcproj | 110 +- Source/UnitTests/UnitTests.vcproj | 714 +- docs/ActionReplay/CodeTypesGuide.txt | 606 +- docs/ActionReplay/GCNCodeTypes.txt | 1910 +- docs/DSP/DSP_InterC/DSP_InterC/DSP_InterC.cpp | 104 +- .../DSP_InterC/DSP_InterC/DSP_InterC.vcproj | 498 +- docs/DSP/DSP_InterC/DSP_InterC/ReadMe.txt | 66 +- docs/DSP/{GC DSP.pdf => GC_DSP.pdf} | Bin docs/DSP/Zelda.txt | 90 +- docs/DSP/prefix_replace.py | 88 +- docs/DSP/unlockmemcard.ds | 300 +- docs/DSP/zeldaNotes.txt | 66 +- 102 files changed, 58499 insertions(+), 57808 deletions(-) rename Data/User/Config/{IR Pointer.ini => IrPointer.ini} (100%) rename Externals/{Memcard Manager/Memcard Manager.sln => MemcardManager/MemcardManager.sln} (93%) rename Externals/{Memcard Manager/Memcard Manager.vcproj => MemcardManager/MemcardManager.vcproj} (96%) rename Externals/{Memcard Manager => MemcardManager}/SConscript (81%) rename Externals/{Memcard Manager => MemcardManager}/SConstruct (95%) rename Externals/{Memcard Manager => MemcardManager}/build (100%) rename Externals/{Memcard Manager => MemcardManager}/clean (100%) create mode 100644 Externals/MemcardManager/src/MCMdebug.cpp create mode 100644 Externals/MemcardManager/src/MCMdebug.h create mode 100644 Externals/MemcardManager/src/MCMmain.h create mode 100644 Externals/MemcardManager/src/mcmMain.cpp delete mode 100644 Source/Core/Core/Src/Host.cpp rename docs/DSP/{GC DSP.pdf => GC_DSP.pdf} (100%) diff --git a/Data/User/Config/IR Pointer.ini b/Data/User/Config/IrPointer.ini similarity index 100% rename from Data/User/Config/IR Pointer.ini rename to Data/User/Config/IrPointer.ini diff --git a/Externals/Bochs_disasm/Bochs_disasm.vcproj b/Externals/Bochs_disasm/Bochs_disasm.vcproj index 1288b5b00b..ea70c75150 100644 --- a/Externals/Bochs_disasm/Bochs_disasm.vcproj +++ b/Externals/Bochs_disasm/Bochs_disasm.vcproj @@ -1,367 +1,367 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Externals/Bochs_disasm/opcodes.inl b/Externals/Bochs_disasm/opcodes.inl index a06968361f..fbb1b7be54 100644 --- a/Externals/Bochs_disasm/opcodes.inl +++ b/Externals/Bochs_disasm/opcodes.inl @@ -1,1230 +1,1230 @@ -Ia_aaa = { "aaa", "aaa", XX, XX, XX }, -Ia_aad = { "aad", "aad", Ib, XX, XX }, -Ia_aam = { "aam", "aam", Ib, XX, XX }, -Ia_aas = { "aas", "aas", XX, XX, XX }, -Ia_adcb_AL_Ib = { "adc", "adcb", AL, Ib, XX }, -Ia_adcb_Eb_Gb = { "adc", "adcb", Eb, Gb, XX }, -Ia_adcb_Eb_Ib = { "adc", "adcb", Eb, Ib, XX }, -Ia_adcb_Gb_Eb = { "adc", "adcb", Gb, Eb, XX }, -Ia_adcl_EAX_Id = { "adc", "adcl", EAX, Id, XX }, -Ia_adcl_Ed_Gd = { "adc", "adcl", Ed, Gd, XX }, -Ia_adcl_Ed_Id = { "adc", "adcl", Ed, Id, XX }, -Ia_adcl_Ed_sIb = { "adc", "adcl", Ed, sIbd, XX }, -Ia_adcl_Gd_Ed = { "adc", "adcl", Gd, Ed, XX }, -Ia_adcq_Eq_Gq = { "adc", "adcq", Eq, Gq, XX }, -Ia_adcq_Eq_sIb = { "adc", "adcq", Eq, sIbq, XX }, -Ia_adcq_Eq_sId = { "adc", "adcq", Eq, Iq, XX }, -Ia_adcq_Gq_Eq = { "adc", "adcq", Gq, Eq, XX }, -Ia_adcq_RAX_sId = { "adc", "adcq", RAX, sIdq, XX }, -Ia_adcw_AX_Iw = { "adc", "adcw", AX, Iw, XX }, -Ia_adcw_Ew_Gw = { "adc", "adcw", Ew, Gw, XX }, -Ia_adcw_Ew_Iw = { "adc", "adcw", Ew, Iw, XX }, -Ia_adcw_Ew_sIb = { "adc", "adcw", Ew, sIbw, XX }, -Ia_adcw_Gw_Ew = { "adc", "adcw", Gw, Ew, XX }, -Ia_addb_AL_Ib = { "add", "addb", AL, Ib, XX }, -Ia_addb_Eb_Gb = { "add", "addb", Eb, Gb, XX }, -Ia_addb_Eb_Ib = { "add", "addb", Eb, Ib, XX }, -Ia_addb_Gb_Eb = { "add", "addb", Gb, Eb, XX }, -Ia_addl_EAX_Id = { "add", "addl", EAX, Id, XX }, -Ia_addl_Ed_Gd = { "add", "addl", Ed, Gd, XX }, -Ia_addl_Ed_Id = { "add", "addl", Ed, Id, XX }, -Ia_addl_Ed_sIb = { "add", "addl", Ed, sIbd, XX }, -Ia_addl_Gd_Ed = { "add", "addl", Gd, Ed, XX }, -Ia_addpd_Vpd_Wpd = { "addpd", "addpd", Vpd, Wpd, XX }, -Ia_addps_Vps_Wps = { "addps", "addps", Vps, Wps, XX }, -Ia_addq_Eq_Gq = { "add", "addq", Eq, Gq, XX }, -Ia_addq_Eq_sIb = { "add", "addq", Eq, sIbq, XX }, -Ia_addq_Eq_sId = { "add", "addq", Eq, sIdq, XX }, -Ia_addq_Gq_Eq = { "add", "addq", Gq, Eq, XX }, -Ia_addq_RAX_sId = { "add", "addq", RAX, sIdq, XX }, -Ia_addsd_Vsd_Wsd = { "addsd", "addsd", Vsd, Wsd, XX }, -Ia_addss_Vss_Wss = { "addss", "addss", Vss, Wss, XX }, -Ia_addsubpd_Vpd_Wpd = { "addsubpd", "addsubpd", Vpd, Wpd, XX }, -Ia_addsubps_Vps_Wps = { "addsubps", "addsubps", Vps, Wps, XX }, -Ia_addw_AX_Iw = { "add", "addw", AX, Iw, XX }, -Ia_addw_Ew_Gw = { "add", "addw", Ew, Gw, XX }, -Ia_addw_Ew_Iw = { "add", "addw", Ew, Iw, XX }, -Ia_addw_Ew_sIb = { "add", "addw", Ew, sIbw, XX }, -Ia_addw_Gw_Ew = { "add", "addw", Gw, Ew, XX }, -Ia_andb_AL_Ib = { "and", "andb", AL, Ib, XX }, -Ia_andb_Eb_Gb = { "and", "andb", Eb, Gb, XX }, -Ia_andb_Eb_Ib = { "and", "andb", Eb, Ib, XX }, -Ia_andb_Gb_Eb = { "and", "andb", Gb, Eb, XX }, -Ia_andl_EAX_Id = { "and", "andl", EAX, Id, XX }, -Ia_andl_Ed_Gd = { "and", "andl", Ed, Gd, XX }, -Ia_andl_Ed_Id = { "and", "andl", Ed, Id, XX }, -Ia_andl_Ed_sIb = { "and", "andl", Ed, sIbd, XX }, -Ia_andl_Gd_Ed = { "and", "andl", Gd, Ed, XX }, -Ia_andnpd_Vpd_Wpd = { "andnpd", "andnpd", Vpd, Wpd, XX }, -Ia_andnps_Vps_Wps = { "andnps", "andnps", Vps, Wps, XX }, -Ia_andpd_Vpd_Wpd = { "andpd", "andpd", Vpd, Wpd, XX }, -Ia_andps_Vps_Wps = { "andps", "andps", Vps, Wps, XX }, -Ia_andq_Eq_Gq = { "and", "andq", Eq, Gq, XX }, -Ia_andq_Eq_sIb = { "and", "andq", Eq, sIbq, XX }, -Ia_andq_Eq_sId = { "and", "andq", Eq, sIdq, XX }, -Ia_andq_Gq_Eq = { "and", "andq", Gq, Eq, XX }, -Ia_andq_RAX_sId = { "and", "andq", RAX, sIdq, XX }, -Ia_andw_AX_Iw = { "and", "andw", AX, Iw, XX }, -Ia_andw_Ew_Gw = { "and", "andw", Ew, Gw, XX }, -Ia_andw_Ew_Iw = { "and", "andw", Ew, Iw, XX }, -Ia_andw_Ew_sIb = { "and", "andw", Ew, sIbw, XX }, -Ia_andw_Gw_Ew = { "and", "andw", Gw, Ew, XX }, -Ia_arpl_Ew_Rw = { "arpl", "arpl", Ew, Rw, XX }, -Ia_boundl_Gd_Ma = { "bound", "boundl", Gd, Ma, XX }, -Ia_boundw_Gw_Ma = { "bound", "boundw", Gw, Ma, XX }, -Ia_bsfl_Gd_Ed = { "bsf", "bsfl", Gd, Ed, XX }, -Ia_bsfq_Gq_Eq = { "bsf", "bsfq", Gq, Eq, XX }, -Ia_bsfw_Gw_Ew = { "bsf", "bsfw", Gw, Ew, XX }, -Ia_bsrl_Gd_Ed = { "bsr", "bsrl", Gd, Ed, XX }, -Ia_bsrq_Gq_Eq = { "bsr", "bsrq", Gq, Eq, XX }, -Ia_bsrw_Gw_Ew = { "bsr", "bsrw", Gw, Ew, XX }, -Ia_bswapl_ERX = { "bswap", "bswapl", ERX, XX, XX }, -Ia_bswapq_RRX = { "bswap", "bswapq", RRX, XX, XX }, -Ia_btcl_Ed_Gd = { "btc", "btcl", Ed, Gd, XX }, -Ia_btcl_Ed_Ib = { "btc", "btcl", Ed, Ib, XX }, -Ia_btcq_Eq_Gq = { "btc", "btcq", Eq, Gq, XX }, -Ia_btcq_Eq_Ib = { "btc", "btcq", Eq, Ib, XX }, -Ia_btcw_Ew_Gw = { "btc", "btcw", Ew, Gw, XX }, -Ia_btcw_Ew_Ib = { "btc", "btcw", Ew, Ib, XX }, -Ia_btl_Ed_Gd = { "bt", "btl", Ed, Gd, XX }, -Ia_btl_Ed_Ib = { "bt", "btl", Ed, Ib, XX }, -Ia_btq_Eq_Gq = { "bt", "btq", Eq, Gq, XX }, -Ia_btq_Eq_Ib = { "bt", "btq", Eq, Ib, XX }, -Ia_btrl_Ed_Gd = { "btr", "btrl", Ed, Gd, XX }, -Ia_btrl_Ed_Ib = { "btr", "btrl", Ed, Ib, XX }, -Ia_btrq_Eq_Gq = { "btr", "btrq", Eq, Gq, XX }, -Ia_btrq_Eq_Ib = { "btr", "btrq", Eq, Ib, XX }, -Ia_btrw_Ew_Gw = { "btr", "btrw", Ew, Gw, XX }, -Ia_btrw_Ew_Ib = { "btr", "btrw", Ew, Ib, XX }, -Ia_btsl_Ed_Gd = { "bts", "btsl", Ed, Gd, XX }, -Ia_btsl_Ed_Ib = { "bts", "btsl", Ed, Ib, XX }, -Ia_btsq_Eq_Gq = { "bts", "btsq", Eq, Gq, XX }, -Ia_btsq_Eq_Ib = { "bts", "btsq", Eq, Ib, XX }, -Ia_btsw_Ew_Gw = { "bts", "btsw", Ew, Gw, XX }, -Ia_btsw_Ew_Ib = { "bts", "btsw", Ew, Ib, XX }, -Ia_btw_Ew_Gw = { "bt", "btw", Ew, Gw, XX }, -Ia_btw_Ew_Ib = { "bt", "btw", Ew, Ib, XX }, -Ia_call_Ed = { "call", "call", Ed, XX, XX }, -Ia_call_Eq = { "call", "call", Eq, XX, XX }, -Ia_call_Ew = { "call", "call", Ew, XX, XX }, -Ia_call_Jd = { "call", "call", Jd, XX, XX }, -Ia_call_Jw = { "call", "call", Jw, XX, XX }, -Ia_cbw = { "cbw", "cbtw", XX, XX, XX }, -Ia_cdq = { "cdq", "cltd", XX, XX, XX }, -Ia_cdqe = { "cdqe", "cltq", XX, XX, XX }, -Ia_cflush = { "cflush", "cflush", Mb, XX, XX }, -Ia_clc = { "clc", "clc", XX, XX, XX }, -Ia_cld = { "cld", "cld", XX, XX, XX }, -Ia_cli = { "cli", "cli", XX, XX, XX }, -Ia_clts = { "clts", "clts", XX, XX, XX }, -Ia_cmc = { "cmc", "cmc", XX, XX, XX }, -Ia_cmoval_Gd_Ed = { "cmova", "cmoval", Gd, Ed, XX }, -Ia_cmovaq_Gq_Eq = { "cmova", "cmovaq", Gq, Eq, XX }, -Ia_cmovaw_Gw_Ew = { "cmova", "cmovaw", Gw, Ew, XX }, -Ia_cmovcl_Gd_Ed = { "cmovc", "cmovcl", Gd, Ed, XX }, -Ia_cmovcq_Gq_Eq = { "cmovc", "cmovcq", Gq, Eq, XX }, -Ia_cmovcw_Gw_Ew = { "cmovc", "cmovcw", Gw, Ew, XX }, -Ia_cmovgl_Gd_Ed = { "cmovg", "cmovgl", Gd, Ed, XX }, -Ia_cmovgq_Gq_Eq = { "cmovg", "cmovgq", Gq, Eq, XX }, -Ia_cmovgw_Gw_Ew = { "cmovg", "cmovgw", Gw, Ew, XX }, -Ia_cmovll_Gd_Ed = { "cmovl", "cmovll", Gd, Ed, XX }, -Ia_cmovlq_Gq_Eq = { "cmovl", "cmovlq", Gq, Eq, XX }, -Ia_cmovlw_Gw_Ew = { "cmovl", "cmovlw", Gw, Ew, XX }, -Ia_cmovnal_Gd_Ed = { "cmovna", "cmovnal", Gd, Ed, XX }, -Ia_cmovnaq_Gq_Eq = { "cmovna", "cmovnaq", Gq, Eq, XX }, -Ia_cmovnaw_Gw_Ew = { "cmovna", "cmovnaw", Gw, Ew, XX }, -Ia_cmovncl_Gd_Ed = { "cmovnc", "cmovncl", Gd, Ed, XX }, -Ia_cmovncq_Gq_Eq = { "cmovnc", "cmovncq", Gq, Eq, XX }, -Ia_cmovncw_Gw_Ew = { "cmovnc", "cmovncw", Gw, Ew, XX }, -Ia_cmovngl_Gd_Ed = { "cmovng", "cmovngl", Gd, Ed, XX }, -Ia_cmovngq_Gq_Eq = { "cmovng", "cmovngq", Gq, Eq, XX }, -Ia_cmovngw_Gw_Ew = { "cmovng", "cmovngw", Gw, Ew, XX }, -Ia_cmovnll_Gd_Ed = { "cmovnl", "cmovnll", Gd, Ed, XX }, -Ia_cmovnlq_Gq_Eq = { "cmovnl", "cmovnlq", Gq, Eq, XX }, -Ia_cmovnlw_Gw_Ew = { "cmovnl", "cmovnlw", Gw, Ew, XX }, -Ia_cmovnol_Gd_Ed = { "cmovno", "cmovnol", Gd, Ed, XX }, -Ia_cmovnoq_Gq_Eq = { "cmovno", "cmovnoq", Gq, Eq, XX }, -Ia_cmovnow_Gw_Ew = { "cmovno", "cmovnow", Gw, Ew, XX }, -Ia_cmovnpl_Gd_Ed = { "cmovnp", "cmovnpl", Gd, Ed, XX }, -Ia_cmovnpq_Gq_Eq = { "cmovnp", "cmovnpq", Gq, Eq, XX }, -Ia_cmovnpw_Gw_Ew = { "cmovnp", "cmovnpw", Gw, Ew, XX }, -Ia_cmovnsl_Gd_Ed = { "cmovns", "cmovnsl", Gd, Ed, XX }, -Ia_cmovnsq_Gq_Eq = { "cmovns", "cmovnsq", Gq, Eq, XX }, -Ia_cmovnsw_Gw_Ew = { "cmovns", "cmovnsw", Gw, Ew, XX }, -Ia_cmovnzl_Gd_Ed = { "cmovnz", "cmovnzl", Gd, Ed, XX }, -Ia_cmovnzq_Gq_Eq = { "cmovnz", "cmovnzq", Gq, Eq, XX }, -Ia_cmovnzw_Gw_Ew = { "cmovnz", "cmovnzw", Gw, Ew, XX }, -Ia_cmovol_Gd_Ed = { "cmovo", "cmovol", Gd, Ed, XX }, -Ia_cmovoq_Gq_Eq = { "cmovo", "cmovoq", Gq, Eq, XX }, -Ia_cmovow_Gw_Ew = { "cmovo", "cmovow", Gw, Ew, XX }, -Ia_cmovpl_Gd_Ed = { "cmovp", "cmovpl", Gd, Ed, XX }, -Ia_cmovpq_Gq_Eq = { "cmovp", "cmovpq", Gq, Eq, XX }, -Ia_cmovpw_Gw_Ew = { "cmovp", "cmovpw", Gw, Ew, XX }, -Ia_cmovsl_Gd_Ed = { "cmovs", "cmovsl", Gd, Ed, XX }, -Ia_cmovsq_Gq_Eq = { "cmovs", "cmovsq", Gq, Eq, XX }, -Ia_cmovsw_Gw_Ew = { "cmovs", "cmovsw", Gw, Ew, XX }, -Ia_cmovzl_Gd_Ed = { "cmovz", "cmovzl", Gd, Ed, XX }, -Ia_cmovzq_Gq_Eq = { "cmovz", "cmovzq", Gq, Eq, XX }, -Ia_cmovzw_Gw_Ew = { "cmovz", "cmovzw", Gw, Ew, XX }, -Ia_cmpb_AL_Ib = { "cmp", "cmpb", AL, Ib, XX }, -Ia_cmpb_Eb_Gb = { "cmp", "cmpb", Eb, Gb, XX }, -Ia_cmpb_Eb_Ib = { "cmp", "cmpb", Eb, Ib, XX }, -Ia_cmpb_Gb_Eb = { "cmp", "cmpb", Gb, Eb, XX }, -Ia_cmpl_EAX_Id = { "cmp", "cmpl", EAX, Id, XX }, -Ia_cmpl_Ed_Gd = { "cmp", "cmpl", Ed, Gd, XX }, -Ia_cmpl_Ed_Id = { "cmp", "cmpl", Ed, Id, XX }, -Ia_cmpl_Ed_sIb = { "cmp", "cmpl", Ed, sIbd, XX }, -Ia_cmpl_Gd_Ed = { "cmp", "cmpl", Gd, Ed, XX }, -Ia_cmppd_Vpd_Wpd_Ib = { "cmppd", "cmppd", Vpd, Wpd, Ib }, -Ia_cmpps_Vps_Wps_Ib = { "cmpps", "cmpps", Vps, Wps, Ib }, -Ia_cmpq_Eq_Gq = { "cmp", "cmpq", Eq, Gq, XX }, -Ia_cmpq_Eq_sIb = { "cmp", "cmpq", Eq, sIbq, XX }, -Ia_cmpq_Eq_sId = { "cmp", "cmpq", Eq, sIdq, XX }, -Ia_cmpq_Gq_Eq = { "cmp", "cmpq", Gq, Eq, XX }, -Ia_cmpq_RAX_sId = { "cmp", "cmpq", RAX, sIdq, XX }, -Ia_cmpsb_Yb_Xb = { "cmpsb", "cmpsb", Yb, Xb, XX }, -Ia_cmpsd_Vsd_Wsd_Ib = { "cmpsd", "cmpsd", Vsd, Wsd, Ib }, -Ia_cmpsl_Yd_Xd = { "cmpsd", "cmpsl", Yd, Xd, XX }, -Ia_cmpsq_Yq_Xq = { "cmpsq", "cmpsq", Yq, Xq, XX }, -Ia_cmpss_Vss_Wss_Ib = { "cmpss", "cmpss", Vss, Wss, Ib }, -Ia_cmpsw_Yw_Xw = { "cmpsw", "cmpsw", Yw, Xw, XX }, -Ia_cmpw_AX_Iw = { "cmp", "cmpw", AX, Iw, XX }, -Ia_cmpw_Ew_Gw = { "cmp", "cmpw", Ew, Gw, XX }, -Ia_cmpw_Ew_Iw = { "cmp", "cmpw", Ew, Iw, XX }, -Ia_cmpw_Ew_sIb = { "cmp", "cmpw", Ew, sIbw, XX }, -Ia_cmpw_Gw_Ew = { "cmp", "cmpw", Gw, Ew, XX }, -Ia_cmpxchg16b = { "cmpxchg16b", "cmpxchg16b", Mdq, XX, XX }, -Ia_cmpxchg8b = { "cmpxchg8b", "cmpxchg8b", Mq, XX, XX }, -Ia_cmpxchgb_Eb_Gb = { "cmpxchg", "cmpxchgb", Eb, Gb, XX }, -Ia_cmpxchgl_Ed_Gd = { "cmpxchg", "cmpxchgl", Ed, Gd, XX }, -Ia_cmpxchgq_Eq_Gq = { "cmpxchg", "cmpxchgq", Eq, Gq, XX }, -Ia_cmpxchgw_Ew_Gw = { "cmpxchg", "cmpxchgw", Ew, Gw, XX }, -Ia_comisd_Vsd_Wsd = { "comisd", "comisd", Vsd, Wsd, XX }, -Ia_comiss_Vss_Wss = { "comiss", "comiss", Vss, Wss, XX }, -Ia_cpuid = { "cpuid", "cpuid", XX, XX, XX }, -Ia_cqo = { "cqo", "cqto", XX, XX, XX }, -Ia_cvtdq2pd_Vpd_Wq = { "cvtdq2pd", "cvtdq2pd", Vpd, Wq, XX }, -Ia_cvtdq2ps_Vps_Wdq = { "cvtdq2ps", "cvtdq2ps", Vps, Wdq, XX }, -Ia_cvtpd2dq_Vq_Wpd = { "cvtpd2dq", "cvtpd2dq", Vq, Wpd, XX }, -Ia_cvtpd2pi_Pq_Wpd = { "cvtpd2pi", "cvtpd2pi", Pq, Wpd, XX }, -Ia_cvtpd2ps_Vps_Wpd = { "cvtpd2ps", "cvtpd2ps", Vps, Wpd, XX }, -Ia_cvtpi2pd_Vpd_Qq = { "cvtpi2pd", "cvtpi2pd", Vpd, Qq, XX }, -Ia_cvtpi2ps_Vps_Qq = { "cvtpi2ps", "cvtpi2ps", Vps, Qq, XX }, -Ia_cvtps2dq_Vdq_Wps = { "cvtps2dq", "cvtps2dq", Vdq, Wps, XX }, -Ia_cvtps2pd_Vpd_Wps = { "cvtps2pd", "cvtps2pd", Vpd, Wps, XX }, -Ia_cvtps2pi_Pq_Wps = { "cvtps2pi", "cvtps2pi", Pq, Wps, XX }, -Ia_cvtsd2si_Gd_Wsd = { "cvtsd2si", "cvtsd2si", Gd, Wsd, XX }, -Ia_cvtsd2si_Gq_Wsd = { "cvtsd2si", "cvtsd2si", Gq, Wsd, XX }, -Ia_cvtsd2ss_Vss_Wsd = { "cvtsd2ss", "cvtsd2ss", Vss, Wsd, XX }, -Ia_cvtsi2sd_Vsd_Ed = { "cvtsi2sd", "cvtsi2sd", Vsd, Ed, XX }, -Ia_cvtsi2sd_Vsd_Eq = { "cvtsi2sd", "cvtsi2sd", Vsd, Eq, XX }, -Ia_cvtsi2ss_Vss_Ed = { "cvtsi2ss", "cvtsi2ss", Vss, Ed, XX }, -Ia_cvtsi2ss_Vss_Eq = { "cvtsi2ss", "cvtsi2ss", Vss, Eq, XX }, -Ia_cvtss2sd_Vsd_Wss = { "cvtss2sd", "cvtss2sd", Vsd, Wss, XX }, -Ia_cvtss2si_Gd_Wss = { "cvtss2si", "cvtss2si", Gd, Wss, XX }, -Ia_cvtss2si_Gq_Wss = { "cvtss2si", "cvtss2si", Gq, Wss, XX }, -Ia_cvttpd2dq_Vq_Wpd = { "cvttpd2dq", "cvttpd2dq", Vq, Wpd, XX }, -Ia_cvttpd2pi_Pq_Wpd = { "cvttpd2pi", "cvttpd2pi", Pq, Wpd, XX }, -Ia_cvttps2dq_Vdq_Wps = { "cvttps2dq", "cvttps2dq", Vdq, Wps, XX }, -Ia_cvttps2pi_Pq_Wps = { "cvttps2pi", "cvttps2pi", Pq, Wps, XX }, -Ia_cvttsd2si_Gd_Wsd = { "cvttsd2si", "cvttsd2si", Gd, Wsd, XX }, -Ia_cvttsd2si_Gq_Wsd = { "cvttsd2si", "cvttsd2si", Gq, Wsd, XX }, -Ia_cvttss2si_Gd_Wss = { "cvttss2si", "cvttss2si", Gd, Wss, XX }, -Ia_cvttss2si_Gq_Wss = { "cvttss2si", "cvttss2si", Gq, Wss, XX }, -Ia_cwd = { "cwd", "cwtd", XX, XX, XX }, -Ia_cwde = { "cwde", "cwtl", XX, XX, XX }, -Ia_daa = { "daa", "daa", XX, XX, XX }, -Ia_das = { "das", "das", XX, XX, XX }, -Ia_decb_Eb = { "dec", "decb", Eb, XX, XX }, -Ia_decl_Ed = { "dec", "decl", Ed, XX, XX }, -Ia_decl_ERX = { "dec", "decl", ERX, XX, XX }, -Ia_decq_Eq = { "dec", "decq", Eq, XX, XX }, -Ia_decw_Ew = { "dec", "decw", Ew, XX, XX }, -Ia_decw_RX = { "dec", "decw", RX, XX, XX }, -Ia_divb_AL_Eb = { "div", "divb", AL, Eb, XX }, -Ia_divl_EAX_Ed = { "div", "divl", EAX, Ed, XX }, -Ia_divpd_Vpd_Wpd = { "divpd", "divpd", Vpd, Wpd, XX }, -Ia_divps_Vps_Wps = { "divps", "divps", Vps, Wps, XX }, -Ia_divq_RAX_Eq = { "div", "divq", RAX, Eq, XX }, -Ia_divsd_Vsd_Wsd = { "divsd", "divsd", Vsd, Wsd, XX }, -Ia_divss_Vss_Wss = { "divss", "divss", Vss, Wss, XX }, -Ia_divw_AX_Ew = { "div", "divw", AX, Ew, XX }, -Ia_emms = { "emms", "emms", XX, XX, XX }, -Ia_enter = { "enter", "enter", IwIb, XX, XX }, -Ia_error = { "(error)", "(error)", XX, XX, XX }, -Ia_f2xm1 = { "f2xm1", "f2xm1", XX, XX, XX }, -Ia_fabs = { "fabs", "fabs", XX, XX, XX }, -Ia_fadd_ST0_STi = { "fadd", "fadd", ST0, STi, XX }, -Ia_fadd_STi_ST0 = { "fadd", "fadd", STi, ST0, XX }, -Ia_faddl_Mq = { "fadd", "faddl", Mq, XX, XX }, -Ia_faddp_STi_ST0 = { "faddp", "faddp", STi, ST0, XX }, -Ia_fadds_Md = { "fadd", "fadds", Md, XX, XX }, -Ia_fbldt_Mt = { "fbld", "fbldt", Mt, XX, XX }, -Ia_fbstpt_Mt = { "fbstp", "fbstpt", Mt, XX, XX }, -Ia_fchs = { "fchs", "fchs", XX, XX, XX }, -Ia_fcmovb_ST0_STi = { "fcmovb", "fcmovb", ST0, STi, XX }, -Ia_fcmovbe_ST0_STi = { "fcmovbe", "fcmovbe", ST0, STi, XX }, -Ia_fcmove_ST0_STi = { "fcmove", "fcmove", ST0, STi, XX }, -Ia_fcmovnb_ST0_STi = { "fcmovnb", "fcmovnb", ST0, STi, XX }, -Ia_fcmovnbe_ST0_STi = { "fcmovnbe", "fcmovnbe", ST0, STi, XX }, -Ia_fcmovne_ST0_STi = { "fcmovne", "fcmovne", ST0, STi, XX }, -Ia_fcmovnu_ST0_STi = { "fcmovnu", "fcmovnu", ST0, STi, XX }, -Ia_fcmovu_ST0_STi = { "fcmovu", "fcmovu", ST0, STi, XX }, -Ia_fcom_STi = { "fcom", "fcom", STi, XX, XX }, -Ia_fcomi_ST0_STi = { "fcomi", "fcomi", ST0, STi, XX }, -Ia_fcomip_ST0_STi = { "fcomip", "fcomip", ST0, STi, XX }, -Ia_fcoml_Mq = { "fcom", "fcoml", Mq, XX, XX }, -Ia_fcomp_STi = { "fcomp", "fcomp", STi, XX, XX }, -Ia_fcompl_Mq = { "fcomp", "fcompl", Mq, XX, XX }, -Ia_fcompp = { "fcompp", "fcompp", XX, XX, XX }, -Ia_fcomps_Md = { "fcomp", "fcomps", Md, XX, XX }, -Ia_fcoms_Md = { "fcom", "fcoms", Md, XX, XX }, -Ia_fcos = { "fcos", "fcos", XX, XX, XX }, -Ia_fdecstp = { "fdecstp", "fdecstp", XX, XX, XX }, -Ia_fdisi = { "fdisi (287 legacy)", "fdisi (287 legacy)", XX, XX, XX }, -Ia_fdiv_ST0_STi = { "fdiv", "fdiv", ST0, STi, XX }, -Ia_fdiv_STi_ST0 = { "fdiv", "fdiv", STi, ST0, XX }, -Ia_fdivl_Mq = { "fdiv", "fdivl", Mq, XX, XX }, -Ia_fdivp_STi_ST0 = { "fdivp", "fdivp", STi, ST0, XX }, -Ia_fdivr_ST0_STi = { "fdivr", "fdivr", ST0, STi, XX }, -Ia_fdivr_STi_ST0 = { "fdivr", "fdivr", STi, ST0, XX }, -Ia_fdivrl_Mq = { "fdivr", "fdivrl", Mq, XX, XX }, -Ia_fdivrp_STi_ST0 = { "fdivrp", "fdivrp", STi, ST0, XX }, -Ia_fdivrs_Md = { "fdivr", "fdivrs", Md, XX, XX }, -Ia_fdivs_Md = { "fdiv", "fdivs", Md, XX, XX }, -Ia_femms = { "femms", "femms", XX, XX, XX }, -Ia_feni = { "feni (287 legacy)", "feni(287 legacy)", XX, XX, XX }, -Ia_ffree_STi = { "ffree", "ffree", STi, XX, XX }, -Ia_ffreep_STi = { "ffreep", "ffreep", STi, XX, XX }, -Ia_fiaddl_Md = { "fiadd", "fiaddl", Md, XX, XX }, -Ia_fiadds_Mw = { "fiadd", "fiadds", Mw, XX, XX }, -Ia_ficoml_Md = { "ficom", "ficoml", Md, XX, XX }, -Ia_ficompl_Md = { "ficomp", "ficompl", Md, XX, XX }, -Ia_ficomps_Mw = { "ficomp", "ficomps", Mw, XX, XX }, -Ia_ficoms_Mw = { "ficom", "ficoms", Mw, XX, XX }, -Ia_fidivl_Md = { "fidiv", "fidivl", Md, XX, XX }, -Ia_fidivrl_Md = { "fidivr", "fidivrl", Md, XX, XX }, -Ia_fidivrs_Mw = { "fidivr", "fidivrs", Mw, XX, XX }, -Ia_fidivs_Mw = { "fidiv", "fidivs", Mw, XX, XX }, -Ia_fildl_Md = { "fild", "fildl", Md, XX, XX }, -Ia_fildq_Mq = { "fild", "fildq", Mq, XX, XX }, -Ia_filds_Mw = { "fild", "filds", Mw, XX, XX }, -Ia_fimull_Md = { "fimul", "fimull", Md, XX, XX }, -Ia_fimuls_Mw = { "fimul", "fimuls", Mw, XX, XX }, -Ia_fincstp = { "fincstp", "fincstp", XX, XX, XX }, -Ia_fistl_Md = { "fist", "fistl", Md, XX, XX }, -Ia_fistpl_Md = { "fistp", "fistpl", Md, XX, XX }, -Ia_fistpq_Mq = { "fistp", "fistpq", Mq, XX, XX }, -Ia_fistps_Mw = { "fistp", "fistps", Mw, XX, XX }, -Ia_fists_Mw = { "fist", "fists", Mw, XX, XX }, -Ia_fisttpl_Md = { "fisttp", "fisttpl", Md, XX, XX }, -Ia_fisttpq_Mq = { "fisttp", "fisttpq", Mq, XX, XX }, -Ia_fisttps_Mw = { "fisttp", "fisttps", Mw, XX, XX }, -Ia_fisubl_Md = { "fisub", "fisubl", Md, XX, XX }, -Ia_fisubrl_Md = { "fisubr", "fisubrl", Md, XX, XX }, -Ia_fisubrs_Mw = { "fisubr", "fisubrs", Mw, XX, XX }, -Ia_fisubs_Mw = { "fisub", "fisubs", Mw, XX, XX }, -Ia_fld_STi = { "fld", "fld", STi, XX, XX }, -Ia_fld1 = { "fld1", "fld1", XX, XX, XX }, -Ia_fldcw = { "fldcw", "fldcw", Ew, XX, XX }, -Ia_fldenv = { "fldenv", "fldenv", Mx, XX, XX }, -Ia_fldl_Mq = { "fld", "fldl", Mq, XX, XX }, -Ia_fldl2e = { "fldl2e", "fldl2e", XX, XX, XX }, -Ia_fldl2t = { "fldl2t", "fldl2t", XX, XX, XX }, -Ia_fldlg2 = { "fldlg2", "fldlg2", XX, XX, XX }, -Ia_fldln2 = { "fldln2", "fldln2", XX, XX, XX }, -Ia_fldpi = { "fldpi", "fldpi", XX, XX, XX }, -Ia_flds_Md = { "fld", "flds", Md, XX, XX }, -Ia_fldt_Mt = { "fld", "fldt", Mt, XX, XX }, -Ia_fldz = { "fldz", "fldz", XX, XX, XX }, -Ia_fmul_ST0_STi = { "fmul", "fmul", ST0, STi, XX }, -Ia_fmul_STi_ST0 = { "fmul", "fmul", STi, ST0, XX }, -Ia_fmull_Mq = { "fmul", "fmull", Mq, XX, XX }, -Ia_fmulp_STi_ST0 = { "fmulp", "fmulp", STi, ST0, XX }, -Ia_fmuls_Md = { "fmul", "fmuls", Md, XX, XX }, -Ia_fnclex = { "fnclex", "fnclex", XX, XX, XX }, -Ia_fninit = { "fninit", "fninit", XX, XX, XX }, -Ia_fnop = { "fnop", "fnop", XX, XX, XX }, -Ia_fnsave = { "fnsave", "fnsave", Mx, XX, XX }, -Ia_fnstcw = { "fnstcw", "fnstcw", Mw, XX, XX }, -Ia_fnstenv = { "fnstenv", "fnstenv", Mx, XX, XX }, -Ia_fnstsw = { "fnstsw", "fnstsw", Mw, XX, XX }, -Ia_fnstsw_AX = { "fnstsw", "fnstsw", AX, XX, XX }, -Ia_fpatan = { "fpatan", "fpatan", XX, XX, XX }, -Ia_fprem = { "fprem", "fprem", XX, XX, XX }, -Ia_fprem1 = { "fprem1", "fprem1", XX, XX, XX }, -Ia_fptan = { "fptan", "fptan", XX, XX, XX }, -Ia_frndint = { "frndint", "frndint", XX, XX, XX }, -Ia_frstor = { "frstor", "frstor", Mx, XX, XX }, -Ia_fscale = { "fscale", "fscale", XX, XX, XX }, -Ia_fsetpm = { "fsetpm (287 legacy)", "fsetpm (287 legacy)", XX, XX, XX }, -Ia_fsin = { "fsin", "fsin", XX, XX, XX }, -Ia_fsincos = { "fsincos", "fsincos", XX, XX, XX }, -Ia_fsqrt = { "fsqrt", "fsqrt", XX, XX, XX }, -Ia_fst_STi = { "fst", "fst", STi, XX, XX }, -Ia_fstl_Mq = { "fst", "fstl", Mq, XX, XX }, -Ia_fstp_STi = { "fstp", "fstp", STi, XX, XX }, -Ia_fstpl_Mq = { "fstp", "fstpl", Mq, XX, XX }, -Ia_fstps_Md = { "fstp", "fstps", Md, XX, XX }, -Ia_fstpt_Mt = { "fstp", "fstpt", Mt, XX, XX }, -Ia_fsts_Md = { "fst", "fsts", Md, XX, XX }, -Ia_fsub_ST0_STi = { "fsub", "fsub", ST0, STi, XX }, -Ia_fsub_STi_ST0 = { "fsub", "fsub", STi, ST0, XX }, -Ia_fsubl_Mq = { "fsub", "fsubl", Mq, XX, XX }, -Ia_fsubp_STi_ST0 = { "fsubp", "fsubp", STi, ST0, XX }, -Ia_fsubr_ST0_STi = { "fsubr", "fsubr", ST0, STi, XX }, -Ia_fsubr_STi_ST0 = { "fsubr", "fsubr", STi, ST0, XX }, -Ia_fsubrl_Mq = { "fsubr", "fsubrl", Mq, XX, XX }, -Ia_fsubrp_STi_ST0 = { "fsubrp", "fsubrp", STi, ST0, XX }, -Ia_fsubrs_Md = { "fsubr", "fsubrs", Md, XX, XX }, -Ia_fsubs_Md = { "fsub", "fsubs", Md, XX, XX }, -Ia_ftst = { "ftst", "ftst", XX, XX, XX }, -Ia_fucom_STi = { "fucom", "fucom", STi, XX, XX }, -Ia_fucomi_ST0_STi = { "fucomi", "fucomi", ST0, STi, XX }, -Ia_fucomip_ST0_STi = { "fucomip", "fucomip", ST0, STi, XX }, -Ia_fucomp_STi = { "fucomp", "fucomp", STi, XX, XX }, -Ia_fucompp = { "fucompp", "fucompp", XX, XX, XX }, -Ia_fwait = { "fwait", "fwait", XX, XX, XX }, -Ia_fxam = { "fxam", "fxam", XX, XX, XX }, -Ia_fxch = { "fxch", "fxch", STi, XX, XX }, -Ia_fxrstor = { "fxrstor", "fxrstor", Mx, XX, XX }, -Ia_fxsave = { "fxsave", "fxsave", Mx, XX, XX }, -Ia_fxtract = { "fxtract", "fxtract", XX, XX, XX }, -Ia_fyl2x = { "fyl2x", "fyl2x", XX, XX, XX }, -Ia_fyl2xp1 = { "fyl2xp1", "fyl2xp1", XX, XX, XX }, -Ia_haddpd_Vpd_Wpd = { "haddpd", "haddpd", Vpd, Wpd, XX }, -Ia_haddps_Vps_Wps = { "haddps", "haddps", Vps, Wps, XX }, -Ia_hlt = { "hlt", "hlt", XX, XX, XX }, -Ia_hsubpd_Vpd_Wpd = { "hsubpd", "hsubpd", Vpd, Wpd, XX }, -Ia_hsubps_Vps_Wps = { "hsubps", "hsubps", Vps, Wps, XX }, -Ia_idivb_AL_Eb = { "idiv", "idivb", AL, Eb, XX }, -Ia_idivl_EAX_Ed = { "idiv", "idivl", EAX, Ed, XX }, -Ia_idivq_RAX_Eq = { "idiv", "idivq", RAX, Eq, XX }, -Ia_idivw_AX_Ew = { "idiv", "idivw", AX, Ew, XX }, -Ia_imulb_AL_Eb = { "imul", "imulb", AL, Eb, XX }, -Ia_imull_EAX_Ed = { "imul", "imull", EAX, Ed, XX }, -Ia_imull_Gd_Ed = { "imul", "imull", Gd, Ed, XX }, -Ia_imull_Gd_Ed_Id = { "imul", "imull", Gd, Ed, Id }, -Ia_imull_Gd_Ed_sIb = { "imul", "imull", Gd, Ed, sIbd }, -Ia_imulq_Gq_Eq = { "imul", "imulq", Gq, Eq, XX }, -Ia_imulq_Gq_Eq_sIb = { "imul", "imulq", Gq, Eq, sIbq }, -Ia_imulq_Gq_Eq_sId = { "imul", "imulq", Gq, Eq, sIdq }, -Ia_imulq_RAX_Eq = { "imul", "imulq", RAX, Eq, XX }, -Ia_imulw_AX_Ew = { "imul", "imulw", AX, Ew, XX }, -Ia_imulw_Gw_Ew = { "imul", "imulw", Gw, Ew, XX }, -Ia_imulw_Gw_Ew_Iw = { "imul", "imulw", Gw, Ew, Iw }, -Ia_imulw_Gw_Ew_sIb = { "imul", "imulw", Gw, Ew, sIbw }, -Ia_inb_AL_DX = { "in", "inb", AL, DX, XX }, -Ia_inb_AL_Ib = { "in", "inb", AL, Ib, XX }, -Ia_incb_Eb = { "inc", "incb", Eb, XX, XX }, -Ia_incl_Ed = { "inc", "incl", Ed, XX, XX }, -Ia_incl_ERX = { "inc", "incl", ERX, XX, XX }, -Ia_incq_Eq = { "inc", "incq", Eq, XX, XX }, -Ia_incw_Ew = { "inc", "incw", Ew, XX, XX }, -Ia_incw_RX = { "inc", "incw", RX, XX, XX }, -Ia_inl_EAX_DX = { "in", "inl", EAX, DX, XX }, -Ia_inl_EAX_Ib = { "in", "inl", EAX, Ib, XX }, -Ia_insb_Yb_DX = { "insb", "insb", Yb, DX, XX }, -Ia_insl_Yd_DX = { "insd", "insl", Yd, DX, XX }, -Ia_insw_Yw_DX = { "insw", "insw", Yw, DX, XX }, -Ia_int_Ib = { "int", "int", Ib, XX, XX }, -Ia_int1 = { "int1", "int1", XX, XX, XX }, -Ia_int3 = { "int3", "int3", XX, XX, XX }, -Ia_into = { "into", "into", XX, XX, XX }, -Ia_Invalid = { "(invalid)", "(invalid)", XX, XX, XX }, -Ia_invd = { "invd", "invd", XX, XX, XX }, -Ia_invlpg = { "invlpg", "invlpg", Mx, XX, XX }, -Ia_inw_AX_DX = { "in", "inw", AX, DX, XX }, -Ia_inw_AX_Ib = { "in", "inw", AX, Ib, XX }, -Ia_iretl = { "iretd", "iretd", XX, XX, XX }, -Ia_iretq = { "iretq", "iretq", XX, XX, XX }, -Ia_iretw = { "iret", "iretw", XX, XX, XX }, -Ia_jb_Jb = { "jb", "jb", Jb, XX, XX }, -Ia_jb_Jd = { "jb", "jb", Jd, XX, XX }, -Ia_jb_Jw = { "jb", "jb", Jw, XX, XX }, -Ia_jbe_Jb = { "jbe", "jbe", Jb, XX, XX }, -Ia_jbe_Jd = { "jbe", "jbe", Jd, XX, XX }, -Ia_jbe_Jw = { "jbe", "jbe", Jw, XX, XX }, -Ia_jcxz_Jb = { "jcxz", "jcxz", Jb, XX, XX }, -Ia_jecxz_Jb = { "jecxz", "jecxz", Jb, XX, XX }, -Ia_jl_Jb = { "jl", "jl", Jb, XX, XX }, -Ia_jl_Jd = { "jl", "jl", Jd, XX, XX }, -Ia_jl_Jw = { "jl", "jl", Jw, XX, XX }, -Ia_jle_Jb = { "jle", "jle", Jb, XX, XX }, -Ia_jle_Jd = { "jle", "jle", Jd, XX, XX }, -Ia_jle_Jw = { "jle", "jle", Jw, XX, XX }, -Ia_jmp_Ed = { "jmp", "jmp", Ed, XX, XX }, -Ia_jmp_Eq = { "jmp", "jmp", Eq, XX, XX }, -Ia_jmp_Ew = { "jmp", "jmp", Ew, XX, XX }, -Ia_jmp_Jb = { "jmp", "jmp", Jb, XX, XX }, -Ia_jmp_Jd = { "jmp", "jmp", Jd, XX, XX }, -Ia_jmp_Jw = { "jmp", "jmp", Jw, XX, XX }, -Ia_jnb_Jb = { "jnb", "jnb", Jb, XX, XX }, -Ia_jnb_Jd = { "jnb", "jnb", Jd, XX, XX }, -Ia_jnb_Jw = { "jnb", "jnb", Jw, XX, XX }, -Ia_jnbe_Jb = { "jnbe", "jnbe", Jb, XX, XX }, -Ia_jnbe_Jd = { "jnbe", "jnbe", Jd, XX, XX }, -Ia_jnbe_Jw = { "jnbe", "jnbe", Jw, XX, XX }, -Ia_jnl_Jb = { "jnl", "jnl", Jb, XX, XX }, -Ia_jnl_Jd = { "jnl", "jnl", Jd, XX, XX }, -Ia_jnl_Jw = { "jnl", "jnl", Jw, XX, XX }, -Ia_jnle_Jb = { "jnle", "jnle", Jb, XX, XX }, -Ia_jnle_Jd = { "jnle", "jnle", Jd, XX, XX }, -Ia_jnle_Jw = { "jnle", "jnle", Jw, XX, XX }, -Ia_jno_Jb = { "jno", "jno", Jb, XX, XX }, -Ia_jno_Jd = { "jno", "jno", Jd, XX, XX }, -Ia_jno_Jw = { "jno", "jno", Jw, XX, XX }, -Ia_jnp_Jb = { "jnp", "jnp", Jb, XX, XX }, -Ia_jnp_Jd = { "jnp", "jnp", Jd, XX, XX }, -Ia_jnp_Jw = { "jnp", "jnp", Jw, XX, XX }, -Ia_jns_Jb = { "jns", "jns", Jb, XX, XX }, -Ia_jns_Jd = { "jns", "jns", Jd, XX, XX }, -Ia_jns_Jw = { "jns", "jns", Jw, XX, XX }, -Ia_jnz_Jb = { "jnz", "jnz", Jb, XX, XX }, -Ia_jnz_Jd = { "jnz", "jnz", Jd, XX, XX }, -Ia_jnz_Jw = { "jnz", "jnz", Jw, XX, XX }, -Ia_jo_Jb = { "jo", "jo", Jb, XX, XX }, -Ia_jo_Jd = { "jo", "jo", Jd, XX, XX }, -Ia_jo_Jw = { "jo", "jo", Jw, XX, XX }, -Ia_jp_Jb = { "jp", "jp", Jb, XX, XX }, -Ia_jp_Jd = { "jp", "jp", Jd, XX, XX }, -Ia_jp_Jw = { "jp", "jp", Jw, XX, XX }, -Ia_jrcxz_Jb = { "jrcxz", "jrcxz", Jb, XX, XX }, -Ia_js_Jb = { "js", "js", Jb, XX, XX }, -Ia_js_Jd = { "js", "js", Jd, XX, XX }, -Ia_js_Jw = { "js", "js", Jw, XX, XX }, -Ia_jz_Jb = { "jz", "jz", Jb, XX, XX }, -Ia_jz_Jd = { "jz", "jz", Jd, XX, XX }, -Ia_jz_Jw = { "jz", "jz", Jw, XX, XX }, -Ia_lahf = { "lahf", "lahf", XX, XX, XX }, -Ia_larl_Gd_Ew = { "lar", "larl", Gd, Ew, XX }, -Ia_larq_Gq_Ew = { "lar", "larq", Gq, Ew, XX }, -Ia_larw_Gw_Ew = { "lar", "larw", Gw, Ew, XX }, -Ia_lcall_Apd = { "call far", "lcall", Apd, XX, XX }, -Ia_lcall_Apw = { "call far", "lcall", Apw, XX, XX }, -Ia_lcall_Mp = { "call far", "lcall", Mp, XX, XX }, -Ia_lddqu_Vdq_Mdq = { "lddqu", "lddqu", Vdq, Mdq, XX }, -Ia_ldmxcsr = { "ldmxcsr", "ldmxcsr", Md, XX, XX }, -Ia_ldsl_Gd_Mp = { "lds", "ldsl", Gd, Mp, XX }, -Ia_ldsw_Gw_Mp = { "lds", "ldsw", Gw, Mp, XX }, -Ia_leal_Gd_Md = { "lea", "leal", Gd, Md, XX }, -Ia_leaq_Gq_Mq = { "lea", "leaq", Gq, Mq, XX }, -Ia_leave = { "leave", "leave", XX, XX, XX }, -Ia_leaw_Gw_Mw = { "lea", "leaw", Gw, Mw, XX }, -Ia_lesl_Gd_Mp = { "les", "lesl", Gd, Mp, XX }, -Ia_lesw_Gw_Mp = { "les", "lesw", Gw, Mp, XX }, -Ia_lfence = { "lfence", "lfence", XX, XX, XX }, -Ia_lfsl_Gd_Mp = { "lfs", "lfsl", Gd, Mp, XX }, -Ia_lfsq_Gq_Mp = { "lfs", "lfsq", Gq, Mp, XX }, -Ia_lfsw_Gw_Mp = { "lfs", "lfsw", Gw, Mp, XX }, -Ia_lgdt = { "lgdt", "lgdt", Ms, XX, XX }, -Ia_lgsl_Gd_Mp = { "lgs", "lgsl", Gd, Mp, XX }, -Ia_lgsq_Gq_Mp = { "lgs", "lgsq", Gq, Mp, XX }, -Ia_lgsw_Gw_Mp = { "lgs", "lgsw", Gw, Mp, XX }, -Ia_lidt = { "lidt", "lidt", Ms, XX, XX }, -Ia_ljmp_Apd = { "jmp far", "ljmp", Apd, XX, XX }, -Ia_ljmp_Apw = { "jmp far", "ljmp", Apw, XX, XX }, -Ia_ljmp_Mp = { "jmp far", "ljmp", Mp, XX, XX }, -Ia_lldt = { "lldt", "lldt", Ew, XX, XX }, -Ia_lmsw_Ew = { "lmsw", "lmsw", Ew, XX, XX }, -Ia_lodsb_AL_Xb = { "lodsb", "lodsb", AL, Xb, XX }, -Ia_lodsl_EAX_Xd = { "lodsd", "lodsl", EAX, Xd, XX }, -Ia_lodsq_RAX_Xq = { "lodsq", "lodsq", RAX, Xq, XX }, -Ia_lodsw_AX_Xw = { "lodsw", "lodsw", AX, Xw, XX }, -Ia_loop_Jb = { "loop", "loop", Jb, XX, XX }, -Ia_loope_Jb = { "loope", "loope", Jb, XX, XX }, -Ia_loopne_Jb = { "loopne", "loopne", Jb, XX, XX }, -Ia_lret = { "retf", "lret", XX, XX, XX }, -Ia_lret_Iw = { "retf", "lret", Iw, XX, XX }, -Ia_lsll_Gd_Ew = { "lsl", "lsll", Gd, Ew, XX }, -Ia_lslq_Gq_Ew = { "lsl", "lslq", Gq, Ew, XX }, -Ia_lslw_Gw_Ew = { "lsl", "lslw", Gw, Ew, XX }, -Ia_lssl_Gd_Mp = { "lss", "lssl", Gd, Mp, XX }, -Ia_lssq_Gq_Mp = { "lss", "lssq", Gq, Mp, XX }, -Ia_lssw_Gw_Mp = { "lss", "lssw", Gw, Mp, XX }, -Ia_ltr = { "ltr", "ltr", Ew, XX, XX }, -Ia_maskmovdqu_Vdq_Udq = { "maskmovdqu", "maskmovdqu", Vdq, Udq, XX }, -Ia_maskmovq_Pq_Nq = { "maskmovq", "maskmovq", Pq, Nq, XX }, -Ia_maxpd_Vpd_Wpd = { "maxpd", "maxpd", Vpd, Wpd, XX }, -Ia_maxps_Vps_Wps = { "maxps", "maxps", Vps, Wps, XX }, -Ia_maxsd_Vsd_Wsd = { "maxsd", "maxsd", Vsd, Wsd, XX }, -Ia_maxss_Vss_Wss = { "maxss", "maxss", Vss, Wss, XX }, -Ia_mfence = { "mfence", "mfence", XX, XX, XX }, -Ia_minpd_Vpd_Wpd = { "minpd", "minpd", Vpd, Wpd, XX }, -Ia_minps_Vps_Wps = { "minps", "minps", Vps, Wps, XX }, -Ia_minsd_Vsd_Wsd = { "minsd", "minsd", Vsd, Wsd, XX }, -Ia_minss_Vss_Wss = { "minss", "minss", Vss, Wss, XX }, -Ia_monitor = { "monitor", "monitor", XX, XX, XX }, -Ia_movapd_Vpd_Wpd = { "movapd", "movapd", Vpd, Wpd, XX }, -Ia_movapd_Wpd_Vpd = { "movapd", "movapd", Wpd, Vpd, XX }, -Ia_movaps_Vps_Wps = { "movaps", "movaps", Vps, Wps, XX }, -Ia_movaps_Wps_Vps = { "movaps", "movaps", Wps, Vps, XX }, -Ia_movb_AL_Ob = { "mov", "movb", AL, Ob, XX }, -Ia_movb_Eb_Gb = { "mov", "movb", Eb, Gb, XX }, -Ia_movb_Eb_Ib = { "mov", "movb", Eb, Ib, XX }, -Ia_movb_Gb_Eb = { "mov", "movb", Gb, Eb, XX }, -Ia_movb_Ob_AL = { "mov", "movb", Ob, AL, XX }, -Ia_movb_R8_Ib = { "mov", "movb", R8, Ib, XX }, -Ia_movd_Ed_Pq = { "movd", "movd", Ed, Pq, XX }, -Ia_movd_Ed_Vd = { "movd", "movd", Ed, Vdq, XX }, -Ia_movd_Pq_Ed = { "movd", "movd", Pq, Ed, XX }, -Ia_movd_Vdq_Ed = { "movd", "movd", Vdq, Ed, XX }, -Ia_movddup_Vdq_Wq = { "movddup", "movddup", Vdq, Wq, XX }, -Ia_movdq2q_Pq_Vq = { "movdq2q", "movdq2q", Pq, Vq, XX }, -Ia_movdqa_Vdq_Wdq = { "movdqa", "movdqa", Vdq, Wdq, XX }, -Ia_movdqa_Wdq_Vdq = { "movdqa", "movdqa", Wdq, Vdq, XX }, -Ia_movdqu_Vdq_Wdq = { "movdqu", "movdqu", Vdq, Wdq, XX }, -Ia_movdqu_Wdq_Vdq = { "movdqu", "movdqu", Wdq, Vdq, XX }, -Ia_movhlpd_Vpd_Uq = { "movhlpd", "movhlpd", Vpd, Udq, XX }, -Ia_movhlps_Vps_Uq = { "movhlps", "movhlps", Vps, Udq, XX }, -Ia_movhpd_Mq_Vpd = { "movhpd", "movhpd", Mq, Vpd, XX }, -Ia_movhpd_Vpd_Mq = { "movhpd", "movhpd", Vpd, Mq, XX }, -Ia_movhps_Mq_Vps = { "movhps", "movhps", Mq, Vps, XX }, -Ia_movhps_Vps_Mq = { "movhps", "movhps", Vps, Mq, XX }, -Ia_movl_Cd_Rd = { "mov", "movl", Cd, Rd, XX }, -Ia_movl_Dd_Rd = { "mov", "movl", Dd, Rd, XX }, -Ia_movl_EAX_Od = { "mov", "movl", EAX, Od, XX }, -Ia_movl_Ed_Gd = { "mov", "movl", Ed, Gd, XX }, -Ia_movl_Ed_Id = { "mov", "movl", Ed, Id, XX }, -Ia_movl_ERX_Id = { "mov", "movl", ERX, Id, XX }, -Ia_movl_Gd_Ed = { "mov", "movl", Gd, Ed, XX }, -Ia_movl_Od_EAX = { "mov", "movl", Od, EAX, XX }, -Ia_movl_Rd_Cd = { "mov", "movl", Rd, Cd, XX }, -Ia_movl_Rd_Dd = { "mov", "movl", Rd, Dd, XX }, -Ia_movl_Rd_Td = { "mov", "movl", Rd, Td, XX }, -Ia_movl_Td_Rd = { "mov", "movl", Td, Rd, XX }, -Ia_movlhpd_Vpd_Uq = { "movlhpd", "movlhpd", Vpd, Udq, XX }, -Ia_movlhps_Vps_Uq = { "movlhps", "movlhps", Vps, Udq, XX }, -Ia_movlpd_Mq_Vpd = { "movlpd", "movlpd", Mq, Vpd, XX }, -Ia_movlpd_Vpd_Mq = { "movlpd", "movlpd", Vpd, Mq, XX }, -Ia_movlps_Mq_Vps = { "movlps", "movlps", Mq, Vps, XX }, -Ia_movlps_Vps_Mq = { "movlps", "movlps", Vps, Mq, XX }, -Ia_movmskpd_Gd_Vpd = { "movmskpd", "movmskpd", Gd, Vpd, XX }, -Ia_movmskps_Gd_Vps = { "movmskps", "movmskps", Gd, Vps, XX }, -Ia_movntdq_Mdq_Vdq = { "movntdq", "movntdq", Mdq, Vdq, XX }, -Ia_movnti_Md_Gd = { "movnti", "movnti", Md, Gd, XX }, -Ia_movntiq_Mq_Gq = { "movntiq", "movntiq", Mq, Gq, XX }, -Ia_movntpd_Mpd_Vpd = { "movntpd", "movntpd", Mpd, Vpd, XX }, -Ia_movntps_Mps_Vps = { "movntps", "movntps", Mps, Vps, XX }, -Ia_movntq_Mq_Pq = { "movntq", "movntq", Mq, Pq, XX }, -Ia_movq_Cq_Rq = { "mov", "movq", Cq, Rq, XX }, -Ia_movq_Dq_Rq = { "mov", "movq", Dq, Rq, XX }, -Ia_movq_Eq_Gq = { "mov", "movq", Eq, Gq, XX }, -Ia_movq_Eq_Pq = { "movq", "movq", Eq, Pq, XX }, -Ia_movq_Eq_sId = { "mov", "movq", Eq, sIdq, XX }, -Ia_movq_Eq_Vq = { "movq", "movq", Eq, Vq, XX }, -Ia_movq_Gq_Eq = { "mov", "movq", Gq, Eq, XX }, -Ia_movq_Oq_RAX = { "mov", "movq", Oq, RAX, XX }, -Ia_movq_Pq_Eq = { "movq", "movq", Pq, Eq, XX }, -Ia_movq_Pq_Qq = { "movq", "movq", Pq, Qq, XX }, -Ia_movq_Qq_Pq = { "movq", "movq", Qq, Pq, XX }, -Ia_movq_RAX_Oq = { "mov", "movq", RAX, Oq, XX }, -Ia_movq_Rq_Cq = { "mov", "movq", Rq, Cq, XX }, -Ia_movq_Rq_Dq = { "mov", "movq", Rq, Dq, XX }, -Ia_movq_RRX_Iq = { "mov", "movq", RRX, Iq, XX }, -Ia_movq_Vdq_Eq = { "movq", "movq", Vdq, Eq, XX }, -Ia_movq_Vq_Wq = { "movq", "movq", Vq, Wq, XX }, -Ia_movq_Wq_Vq = { "movq", "movq", Wq, Vq, XX }, -Ia_movq2dq_Vdq_Qq = { "movq2dq", "movq2dq", Vdq, Qq, XX }, -Ia_movsb_Yb_Xb = { "movsb", "movsb", Yb, Xb, XX }, -Ia_movsbl_Gd_Eb = { "movsx", "movsbl", Gd, Eb, XX }, -Ia_movsbq_Gq_Eb = { "movsx", "movsbq", Gq, Eb, XX }, -Ia_movsbw_Gw_Eb = { "movsx", "movsbw", Gw, Eb, XX }, -Ia_movsd_Vsd_Wsd = { "movsd", "movsd", Vsd, Wsd, XX }, -Ia_movsd_Wsd_Vsd = { "movsd", "movsd", Wsd, Vsd, XX }, -Ia_movshdup_Vdq_Wdq = { "movshdup", "movshdup", Vdq, Wdq, XX }, -Ia_movsl_Yd_Xd = { "movsd", "movsl", Yd, Xd, XX }, -Ia_movsldup_Vdq_Wdq = { "movsldup", "movsldup", Vdq, Wdq, XX }, -Ia_movslq_Gq_Ed = { "movsxd", "movslq", Gq, Ed, XX }, -Ia_movsq_Yq_Xq = { "movsq", "movsq", Yq, Xq, XX }, -Ia_movss_Vss_Wss = { "movss", "movss", Vss, Wss, XX }, -Ia_movss_Wss_Vss = { "movss", "movss", Wss, Vss, XX }, -Ia_movsw_Yw_Xw = { "movsw", "movsw", Yw, Xw, XX }, -Ia_movswl_Gd_Ew = { "movsx", "movswl", Gd, Ew, XX }, -Ia_movswq_Gq_Ew = { "movsx", "movswq", Gq, Ew, XX }, -Ia_movupd_Vpd_Wpd = { "movupd", "movupd", Vpd, Wpd, XX }, -Ia_movupd_Wpd_Vpd = { "movupd", "movupd", Wpd, Vpd, XX }, -Ia_movups_Vps_Wps = { "movups", "movups", Vps, Wps, XX }, -Ia_movups_Wps_Vps = { "movups", "movups", Wps, Vps, XX }, -Ia_movw_AX_Ow = { "mov", "movw", AX, Ow, XX }, -Ia_movw_Ew_Gw = { "mov", "movw", Ew, Gw, XX }, -Ia_movw_Ew_Iw = { "mov", "movw", Ew, Iw, XX }, -Ia_movw_Ew_Sw = { "mov", "movw", Ew, Sw, XX }, -Ia_movw_Gw_Ew = { "mov", "movw", Gw, Ew, XX }, -Ia_movw_Ow_AX = { "mov", "movw", Ow, AX, XX }, -Ia_movw_RX_Iw = { "mov", "movw", RX, Iw, XX }, -Ia_movw_Sw_Ew = { "mov", "movw", Sw, Ew, XX }, -Ia_movzbl_Gd_Eb = { "movzx", "movzbl", Gd, Eb, XX }, -Ia_movzbq_Gq_Eb = { "movzx", "movzbq", Gq, Eb, XX }, -Ia_movzbw_Gw_Eb = { "movzx", "movzbw", Gw, Eb, XX }, -Ia_movzwl_Gd_Ew = { "movzx", "movzwl", Gd, Ew, XX }, -Ia_movzwq_Gq_Ew = { "movzx", "movzwq", Gq, Ew, XX }, -Ia_mulb_AL_Eb = { "mul", "mulb", AL, Eb, XX }, -Ia_mull_EAX_Ed = { "mul", "mull", EAX, Ed, XX }, -Ia_mulpd_Vpd_Wpd = { "mulpd", "mulpd", Vpd, Wpd, XX }, -Ia_mulps_Vps_Wps = { "mulps", "mulps", Vps, Wps, XX }, -Ia_mulq_RAX_Eq = { "mul", "mulq", RAX, Eq, XX }, -Ia_mulsd_Vsd_Wsd = { "mulsd", "mulsd", Vsd, Wsd, XX }, -Ia_mulss_Vss_Wss = { "mulss", "mulss", Vss, Wss, XX }, -Ia_multibyte_nop = { "multibyte nop", "multibyte nop", XX, XX, XX }, -Ia_mulw_AX_Ew = { "mul", "mulw", AX, Ew, XX }, -Ia_mwait = { "mwait", "mwait", XX, XX, XX }, -Ia_negb_Eb = { "neg", "negb", Eb, XX, XX }, -Ia_negl_Ed = { "neg", "negl", Ed, XX, XX }, -Ia_negq_Eq = { "neg", "negq", Eq, XX, XX }, -Ia_negw_Ew = { "neg", "negw", Ew, XX, XX }, -Ia_nop = { "nop", "nop", XX, XX, XX }, -Ia_notb_Eb = { "not", "notb", Eb, XX, XX }, -Ia_notl_Ed = { "not", "notl", Ed, XX, XX }, -Ia_notq_Eq = { "not", "notq", Eq, XX, XX }, -Ia_notw_Ew = { "not", "notw", Ew, XX, XX }, -Ia_orb_AL_Ib = { "or", "orb", AL, Ib, XX }, -Ia_orb_Eb_Gb = { "or", "orb", Eb, Gb, XX }, -Ia_orb_Eb_Ib = { "or", "orb", Eb, Ib, XX }, -Ia_orb_Gb_Eb = { "or", "orb", Gb, Eb, XX }, -Ia_orl_EAX_Id = { "or", "orl", EAX, Id, XX }, -Ia_orl_Ed_Gd = { "or", "orl", Ed, Gd, XX }, -Ia_orl_Ed_Id = { "or", "orl", Ed, Id, XX }, -Ia_orl_Ed_sIb = { "or", "orl", Ed, sIbd, XX }, -Ia_orl_Gd_Ed = { "or", "orl", Gd, Ed, XX }, -Ia_orpd_Vpd_Wpd = { "orpd", "orpd", Vpd, Wpd, XX }, -Ia_orps_Vps_Wps = { "orps", "orps", Vps, Wps, XX }, -Ia_orq_Eq_Gq = { "or", "orq", Eq, Gq, XX }, -Ia_orq_Eq_sIb = { "or", "orq", Eq, sIbq, XX }, -Ia_orq_Eq_sId = { "or", "orq", Eq, sIdq, XX }, -Ia_orq_Gq_Eq = { "or", "orq", Gq, Eq, XX }, -Ia_orq_RAX_sId = { "or", "orq", RAX, sIdq, XX }, -Ia_orw_AX_Iw = { "or", "orw", AX, Iw, XX }, -Ia_orw_Ew_Gw = { "or", "orw", Ew, Gw, XX }, -Ia_orw_Ew_Iw = { "or", "orw", Ew, Iw, XX }, -Ia_orw_Ew_sIb = { "or", "orw", Ew, sIbw, XX }, -Ia_orw_Gw_Ew = { "or", "orw", Gw, Ew, XX }, -Ia_outb_DX_AL = { "out", "outb", DX, AL, XX }, -Ia_outb_Ib_AL = { "out", "outb", Ib, AL, XX }, -Ia_outl_DX_EAX = { "out", "outl", DX, EAX, XX }, -Ia_outl_Ib_EAX = { "out", "outl", Ib, EAX, XX }, -Ia_outsb_DX_Xb = { "outsb", "outsb", DX, Xb, XX }, -Ia_outsl_DX_Xd = { "outsd", "outsl", DX, Xd, XX }, -Ia_outsw_DX_Xw = { "outsw", "outsw", DX, Xw, XX }, -Ia_outw_DX_AX = { "out", "outw", DX, AX, XX }, -Ia_outw_Ib_AX = { "out", "outw", Ib, AX, XX }, -Ia_pabsb_Pq_Qq = { "pabsb", "pabsb", Pq, Qq, XX }, -Ia_pabsb_Vdq_Wdq = { "pabsb", "pabsb", Vdq, Wdq, XX }, -Ia_pabsd_Pq_Qq = { "pabsd", "pabsd", Pq, Qq, XX }, -Ia_pabsd_Vdq_Wdq = { "pabsd", "pabsd", Vdq, Wdq, XX }, -Ia_pabsw_Pq_Qq = { "pabsw", "pabsw", Pq, Qq, XX }, -Ia_pabsw_Vdq_Wdq = { "pabsw", "pabsw", Vdq, Wdq, XX }, -Ia_packssdw_Pq_Qq = { "packssdw", "packssdw", Pq, Qq, XX }, -Ia_packssdw_Vdq_Wdq = { "packssdw", "packssdw", Vdq, Wdq, XX }, -Ia_packsswb_Pq_Qq = { "packsswb", "packsswb", Pq, Qq, XX }, -Ia_packsswb_Vdq_Wq = { "packsswb", "packsswb", Vdq, Wq, XX }, -Ia_packuswb_Pq_Qq = { "packuswb", "packuswb", Pq, Qq, XX }, -Ia_packuswb_Vdq_Wdq = { "packuswb", "packuswb", Vdq, Wdq, XX }, -Ia_paddb_Pq_Qq = { "paddb", "paddb", Pq, Qq, XX }, -Ia_paddb_Vdq_Wdq = { "paddb", "paddb", Vdq, Wdq, XX }, -Ia_paddd_Pq_Qq = { "paddd", "paddd", Pq, Qq, XX }, -Ia_paddd_Vdq_Wdq = { "paddd", "paddd", Vdq, Wdq, XX }, -Ia_paddq_Pq_Qq = { "paddq", "paddq", Pq, Qq, XX }, -Ia_paddq_Vdq_Wdq = { "paddq", "paddq", Vdq, Wdq, XX }, -Ia_paddsb_Pq_Qq = { "paddsb", "paddsb", Pq, Qq, XX }, -Ia_paddsb_Vdq_Wdq = { "paddsb", "paddsb", Vdq, Wdq, XX }, -Ia_paddsw_Pq_Qq = { "paddsw", "paddsw", Pq, Qq, XX }, -Ia_paddsw_Vdq_Wdq = { "paddsw", "paddsw", Vdq, Wdq, XX }, -Ia_paddusb_Pq_Qq = { "paddusb", "paddusb", Pq, Qq, XX }, -Ia_paddusb_Vdq_Wdq = { "paddusb", "paddusb", Vdq, Wdq, XX }, -Ia_paddusw_Pq_Qq = { "paddusw", "paddusw", Pq, Qq, XX }, -Ia_paddusw_Vdq_Wdq = { "paddusw", "paddusw", Vdq, Wdq, XX }, -Ia_paddw_Pq_Qq = { "paddw", "paddw", Pq, Qq, XX }, -Ia_paddw_Vdq_Wdq = { "paddw", "paddw", Vdq, Wdq, XX }, -Ia_palignr_Pq_Qq_Ib = { "palignr", "palignr", Pq, Qq, Ib }, -Ia_palignr_Vdq_Wdq_Ib = { "palignr", "palignr", Vdq, Wdq, Ib }, -Ia_pand_Pq_Qq = { "pand", "pand", Pq, Qq, XX }, -Ia_pand_Vdq_Wdq = { "pand", "pand", Vdq, Wdq, XX }, -Ia_pandn_Pq_Qq = { "pandn", "pandn", Pq, Qq, XX }, -Ia_pandn_Vdq_Wdq = { "pandn", "pandn", Vdq, Wdq, XX }, -Ia_pause = { "pause", "pause", XX, XX, XX }, -Ia_pavgb_Pq_Qq = { "pavgb", "pavgb", Pq, Qq, XX }, -Ia_pavgb_Vdq_Wdq = { "pavgb", "pavgb", Vdq, Wdq, XX }, -Ia_pavgw_Pq_Qq = { "pavgw", "pavgw", Pq, Qq, XX }, -Ia_pavgw_Vdq_Wdq = { "pavgw", "pavgw", Vdq, Wdq, XX }, -Ia_pcmpeqb_Pq_Qq = { "pcmpeqb", "pcmpeqb", Pq, Qq, XX }, -Ia_pcmpeqb_Vdq_Wdq = { "pcmpeqb", "pcmpeqb", Vdq, Wdq, XX }, -Ia_pcmpeqd_Pq_Qq = { "pcmpeqd", "pcmpeqd", Pq, Qq, XX }, -Ia_pcmpeqd_Vdq_Wdq = { "pcmpeqd", "pcmpeqd", Vdq, Wdq, XX }, -Ia_pcmpeqw_Pq_Qq = { "pcmpeqw", "pcmpeqw", Pq, Qq, XX }, -Ia_pcmpeqw_Vdq_Wdq = { "pcmpeqw", "pcmpeqw", Vdq, Wdq, XX }, -Ia_pcmpgtb_Pq_Qq = { "pcmpgtb", "pcmpgtb", Pq, Qq, XX }, -Ia_pcmpgtb_Vdq_Wq = { "pcmpgtb", "pcmpgtb", Vdq, Wq, XX }, -Ia_pcmpgtd_Pq_Qq = { "pcmpgtd", "pcmpgtd", Pq, Qq, XX }, -Ia_pcmpgtd_Vdq_Wdq = { "pcmpgtd", "pcmpgtd", Vdq, Wdq, XX }, -Ia_pcmpgtw_Pq_Qq = { "pcmpgtw", "pcmpgtw", Pq, Qq, XX }, -Ia_pcmpgtw_Vdq_Wq = { "pcmpgtw", "pcmpgtw", Vdq, Wq, XX }, -Ia_pextrw_Gd_Nq_Ib = { "pextrw", "pextrw", Gd, Nq, Ib }, -Ia_pextrw_Gd_Udq_Ib = { "pextrw", "pextrw", Gd, Udq, Ib }, -Ia_pf2id_Pq_Qq = { "pf2id", "pf2id", Pq, Qq, XX }, -Ia_pf2iw_Pq_Qq = { "pf2iw", "pf2iw", Pq, Qq, XX }, -Ia_pfacc_Pq_Qq = { "pfacc", "pfacc", Pq, Qq, XX }, -Ia_pfadd_Pq_Qq = { "pfadd", "pfadd", Pq, Qq, XX }, -Ia_pfcmpeq_Pq_Qq = { "pfcmpeq", "pfcmpeq", Pq, Qq, XX }, -Ia_pfcmpge_Pq_Qq = { "pfcmpge", "pfcmpge", Pq, Qq, XX }, -Ia_pfcmpgt_Pq_Qq = { "pfcmpgt", "pfcmpgt", Pq, Qq, XX }, -Ia_pfmax_Pq_Qq = { "pfmax", "pfmax", Pq, Qq, XX }, -Ia_pfmin_Pq_Qq = { "pfmin", "pfmin", Pq, Qq, XX }, -Ia_pfmul_Pq_Qq = { "pfmul", "pfmul", Pq, Qq, XX }, -Ia_pfnacc_Pq_Qq = { "pfnacc", "pfnacc", Pq, Qq, XX }, -Ia_pfpnacc_Pq_Qq = { "pfpnacc", "pfpnacc", Pq, Qq, XX }, -Ia_pfrcp_Pq_Qq = { "pfrcp", "pfrcp", Pq, Qq, XX }, -Ia_pfrcpit1_Pq_Qq = { "pfrcpit1", "pfrcpit1", Pq, Qq, XX }, -Ia_pfrcpit2_Pq_Qq = { "pfrcpit2", "pfrcpit2", Pq, Qq, XX }, -Ia_pfrsqit1_Pq_Qq = { "pfrsqit1", "pfrsqit1", Pq, Qq, XX }, -Ia_pfrsqrt_Pq_Qq = { "pfrsqrt", "pfrsqrt", Pq, Qq, XX }, -Ia_pfsub_Pq_Qq = { "pfsub", "pfsub", Pq, Qq, XX }, -Ia_pfsubr_Pq_Qq = { "pfsubr", "pfsubr", Pq, Qq, XX }, -Ia_phaddd_Pq_Qq = { "phaddd", "phaddd", Pq, Qq, XX }, -Ia_phaddd_Vdq_Wdq = { "phaddd", "phaddd", Vdq, Wdq, XX }, -Ia_phaddsw_Pq_Qq = { "phaddsw", "phaddsw", Pq, Qq, XX }, -Ia_phaddsw_Vdq_Wdq = { "phaddsw", "phaddsw", Vdq, Wdq, XX }, -Ia_phaddw_Pq_Qq = { "phaddw", "phaddw", Pq, Qq, XX }, -Ia_phaddw_Vdq_Wdq = { "phaddw", "phaddw", Vdq, Wdq, XX }, -Ia_phsubd_Pq_Qq = { "phsubd", "phsubd", Pq, Qq, XX }, -Ia_phsubd_Vdq_Wdq = { "phsubd", "phsubd", Vdq, Wdq, XX }, -Ia_phsubsw_Pq_Qq = { "phsubsw", "phsubsw", Pq, Qq, XX }, -Ia_phsubsw_Vdq_Wdq = { "phsubsw", "phsubsw", Vdq, Wdq, XX }, -Ia_phsubw_Pq_Qq = { "phsubw", "phsubw", Pq, Qq, XX }, -Ia_phsubw_Vdq_Wdq = { "phsubw", "phsubw", Vdq, Wdq, XX }, -Ia_pi2fd_Pq_Qq = { "pi2fd", "pi2fd", Pq, Qq, XX }, -Ia_pi2fw_Pq_Qq = { "pi2fw", "pi2fw", Pq, Qq, XX }, -Ia_pinsrw_Pq_Ed_Ib = { "pinsrw", "pinsrw", Pq, Ed, Ib }, -Ia_pinsrw_Vdq_Ed_Ib = { "pinsrw", "pinsrw", Vdq, Ed, Ib }, -Ia_pmaddubsw_Pq_Qq = { "pmaddubsw", "pmaddubsw", Pq, Qq, XX }, -Ia_pmaddubsw_Vdq_Wdq = { "pmaddubsw", "pmaddubsw", Vdq, Wdq, XX }, -Ia_pmaddwd_Pq_Qq = { "pmaddwd", "pmaddwd", Pq, Qq, XX }, -Ia_pmaddwd_Vdq_Wdq = { "pmaddwd", "pmaddwd", Vdq, Wdq, XX }, -Ia_pmaxub_Pq_Qq = { "pmaxub", "pmaxub", Pq, Qq, XX }, -Ia_pmaxub_Vdq_Wdq = { "pmaxub", "pmaxub", Vdq, Wdq, XX }, -Ia_pmaxuw_Pq_Qq = { "pmaxuw", "pmaxuw", Pq, Qq, XX }, -Ia_pmaxuw_Vdq_Wdq = { "pmaxuw", "pmaxuw", Vdq, Wdq, XX }, -Ia_pminsw_Pq_Qq = { "pminsw", "pminsw", Pq, Qq, XX }, -Ia_pminsw_Vdq_Wdq = { "pminsw", "pminsw", Vdq, Wdq, XX }, -Ia_pminub_Pq_Qq = { "pminub", "pminub", Pq, Qq, XX }, -Ia_pminub_Vdq_Wdq = { "pminub", "pminub", Vdq, Wdq, XX }, -Ia_pmovmskb_Gd_Nq = { "pmovmskb", "pmovmskb", Gd, Nq, XX }, -Ia_pmovmskb_Gd_Udq = { "pmovmskb", "pmovmskb", Gd, Udq, XX }, -Ia_pmulhrsw_Pq_Qq = { "pmulhrsw", "pmulhrsw", Pq, Qq, XX }, -Ia_pmulhrsw_Vdq_Wdq = { "pmulhrsw", "pmulhrsw", Vdq, Wdq, XX }, -Ia_pmulhrw_Pq_Qq = { "pmulhrw", "pmulhrw", Pq, Qq, XX }, -Ia_pmulhuw_Pq_Qq = { "pmulhuw", "pmulhuw", Pq, Qq, XX }, -Ia_pmulhuw_Vdq_Wdq = { "pmulhuw", "pmulhuw", Vdq, Wdq, XX }, -Ia_pmulhw_Pq_Qq = { "pmulhw", "pmulhw", Pq, Qq, XX }, -Ia_pmulhw_Vdq_Wdq = { "pmulhw", "pmulhw", Vdq, Wdq, XX }, -Ia_pmullw_Pq_Qq = { "pmullw", "pmullw", Pq, Qq, XX }, -Ia_pmullw_Vdq_Wdq = { "pmullw", "pmullw", Vdq, Wdq, XX }, -Ia_pmuludq_Pq_Qq = { "pmuludq", "pmuludq", Pq, Qq, XX }, -Ia_pmuludq_Vdq_Wdq = { "pmuludq", "pmuludq", Vdq, Wdq, XX }, -Ia_popal = { "popad", "popal", XX, XX, XX }, -Ia_popaw = { "popa", "popa", XX, XX, XX }, -Ia_popfl = { "popfd", "popfl", XX, XX, XX }, -Ia_popfq = { "popfq", "popfq", XX, XX, XX }, -Ia_popfw = { "popf", "popf", XX, XX, XX }, -Ia_popl_DS = { "pop", "popl", DS, XX, XX }, -Ia_popl_Ed = { "pop", "popl", Ed, XX, XX }, -Ia_popl_ERX = { "pop", "popl", ERX, XX, XX }, -Ia_popl_ES = { "pop", "popl", ES, XX, XX }, -Ia_popl_FS = { "pop", "popl", FS, XX, XX }, -Ia_popl_GS = { "pop", "popl", GS, XX, XX }, -Ia_popl_SS = { "pop", "popl", SS, XX, XX }, -Ia_popq_Eq = { "pop", "popq", Eq, XX, XX }, -Ia_popq_FS = { "pop", "popq", FS, XX, XX }, -Ia_popq_GS = { "pop", "popq", GS, XX, XX }, -Ia_popq_RRX = { "pop", "popq", RRX, XX, XX }, -Ia_popw_DS = { "pop", "popw", DS, XX, XX }, -Ia_popw_ES = { "pop", "popw", ES, XX, XX }, -Ia_popw_Ew = { "pop", "popw", Ew, XX, XX }, -Ia_popw_FS = { "pop", "popw", FS, XX, XX }, -Ia_popw_GS = { "pop", "popw", GS, XX, XX }, -Ia_popw_RX = { "pop", "popw", RX, XX, XX }, -Ia_popw_SS = { "pop", "popw", SS, XX, XX }, -Ia_por_Pq_Qq = { "por", "por", Pq, Qq, XX }, -Ia_por_Vdq_Wdq = { "por", "por", Vdq, Wdq, XX }, -Ia_prefetch = { "prefetch (3dnow!)", "prefetch (3dnow!)", Mb, XX, XX }, -Ia_prefetchnta = { "prefetchnta", "prefetchnta", Mb, XX, XX }, -Ia_prefetcht0 = { "prefetcht0", "prefetcht0", Mb, XX, XX }, -Ia_prefetcht1 = { "prefetcht1", "prefetcht1", Mb, XX, XX }, -Ia_prefetcht2 = { "prefetcht2", "prefetcht2", Mb, XX, XX }, -Ia_prefix_asize = { "asize", "asize", XX, XX, XX }, -Ia_prefix_cs = { "cs", "cs", XX, XX, XX }, -Ia_prefix_ds = { "ds", "ds", XX, XX, XX }, -Ia_prefix_es = { "es", "es", XX, XX, XX }, -Ia_prefix_fs = { "fs", "fs", XX, XX, XX }, -Ia_prefix_gs = { "gs", "gs", XX, XX, XX }, -Ia_prefix_lock = { "lock", "lock", XX, XX, XX }, -Ia_prefix_osize = { "osize", "osize", XX, XX, XX }, -Ia_prefix_rep = { "rep", "rep", XX, XX, XX }, -Ia_prefix_repne = { "repne", "repne", XX, XX, XX }, -Ia_prefix_rex = { "rex", "rex", XX, XX, XX }, -Ia_prefix_ss = { "ss", "ss", XX, XX, XX }, -Ia_psadbw_Pq_Qq = { "psadbw", "psadbw", Pq, Qq, XX }, -Ia_psadbw_Vdq_Wdq = { "psadbw", "psadbw", Vdq, Wdq, XX }, -Ia_pshufb_Pq_Qq = { "pshufb", "pshufb", Pq, Qq, XX }, -Ia_pshufb_Vdq_Wdq = { "pshufb", "pshufb", Vdq, Wdq, XX }, -Ia_pshufd_Vdq_Wdq_Ib = { "pshufd", "pshufd", Vdq, Wdq, Ib }, -Ia_pshufhw_Vq_Wq_Ib = { "pshufhw", "pshufhw", Vq, Wq, Ib }, -Ia_pshuflw_Vq_Wq_Ib = { "pshuflw", "pshuflw", Vq, Wq, Ib }, -Ia_pshufw_Pq_Qq_Ib = { "pshufw", "pshufw", Pq, Qq, Ib }, -Ia_psignb_Pq_Qq = { "psignb", "psignb", Pq, Qq, XX }, -Ia_psignb_Vdq_Wdq = { "psignb", "psignb", Vdq, Wdq, XX }, -Ia_psignd_Pq_Qq = { "psignd", "psignd", Pq, Qq, XX }, -Ia_psignd_Vdq_Wdq = { "psignd", "psignd", Vdq, Wdq, XX }, -Ia_psignw_Pq_Qq = { "psignw", "psignw", Pq, Qq, XX }, -Ia_psignw_Vdq_Wdq = { "psignw", "psignw", Vdq, Wdq, XX }, -Ia_pslld_Nq_Ib = { "pslld", "pslld", Nq, Ib, XX }, -Ia_pslld_Pq_Qq = { "pslld", "pslld", Pq, Qq, XX }, -Ia_pslld_Udq_Ib = { "pslld", "pslld", Udq, Ib, XX }, -Ia_pslld_Vdq_Wdq = { "pslld", "pslld", Vdq, Wdq, XX }, -Ia_pslldq_Udq_Ib = { "pslldq", "pslldq", Udq, Ib, XX }, -Ia_psllq_Nq_Ib = { "psllq", "psllq", Nq, Ib, XX }, -Ia_psllq_Pq_Qq = { "psllq", "psllq", Pq, Qq, XX }, -Ia_psllq_Udq_Ib = { "psllq", "psllq", Udq, Ib, XX }, -Ia_psllq_Vdq_Wdq = { "psllq", "psllq", Vdq, Wdq, XX }, -Ia_psllw_Nq_Ib = { "psllw", "psllw", Nq, Ib, XX }, -Ia_psllw_Pq_Qq = { "psllw", "psllw", Pq, Qq, XX }, -Ia_psllw_Udq_Ib = { "psllw", "psllw", Udq, Ib, XX }, -Ia_psllw_Vdq_Wdq = { "psllw", "psllw", Vdq, Wdq, XX }, -Ia_psrad_Nq_Ib = { "psrad", "psrad", Nq, Ib, XX }, -Ia_psrad_Pq_Qq = { "psrad", "psrad", Pq, Qq, XX }, -Ia_psrad_Udq_Ib = { "psrad", "psrad", Udq, Ib, XX }, -Ia_psrad_Vdq_Wdq = { "psrad", "psrad", Vdq, Wdq, XX }, -Ia_psraw_Nq_Ib = { "psraw", "psraw", Nq, Ib, XX }, -Ia_psraw_Pq_Qq = { "psraw", "psraw", Pq, Qq, XX }, -Ia_psraw_Udq_Ib = { "psraw", "psraw", Udq, Ib, XX }, -Ia_psraw_Vdq_Wdq = { "psraw", "psraw", Vdq, Wdq, XX }, -Ia_psrld_Nq_Ib = { "psrld", "psrld", Nq, Ib, XX }, -Ia_psrld_Pq_Qq = { "psrld", "psrld", Pq, Qq, XX }, -Ia_psrld_Udq_Ib = { "psrld", "psrld", Udq, Ib, XX }, -Ia_psrld_Vdq_Wdq = { "psrld", "psrld", Vdq, Wdq, XX }, -Ia_psrldq_Udq_Ib = { "psrldq", "psrldq", Udq, Ib, XX }, -Ia_psrlq_Nq_Ib = { "psrlq", "psrlq", Nq, Ib, XX }, -Ia_psrlq_Pq_Qq = { "psrlq", "psrlq", Pq, Qq, XX }, -Ia_psrlq_Udq_Ib = { "psrlq", "psrlq", Udq, Ib, XX }, -Ia_psrlq_Vdq_Wdq = { "psrlq", "psrlq", Vdq, Wdq, XX }, -Ia_psrlw_Nq_Ib = { "psrlw", "psrlw", Nq, Ib, XX }, -Ia_psrlw_Pq_Qq = { "psrlw", "psrlw", Pq, Qq, XX }, -Ia_psrlw_Udq_Ib = { "psrlw", "psrlw", Udq, Ib, XX }, -Ia_psrlw_Vdq_Wdq = { "psrlw", "psrlw", Vdq, Wdq, XX }, -Ia_psubb_Pq_Qq = { "psubb", "psubb", Pq, Qq, XX }, -Ia_psubb_Vdq_Wdq = { "psubb", "psubb", Vdq, Wdq, XX }, -Ia_psubd_Pq_Qq = { "psubd", "psubd", Pq, Qq, XX }, -Ia_psubd_Vdq_Wdq = { "psubd", "psubd", Vdq, Wdq, XX }, -Ia_psubq_Pq_Qq = { "psubq", "psubq", Pq, Qq, XX }, -Ia_psubq_Vdq_Wdq = { "psubq", "psubq", Vdq, Wdq, XX }, -Ia_psubsb_Pq_Qq = { "psubsb", "psubsb", Pq, Qq, XX }, -Ia_psubsb_Vdq_Wdq = { "psubsb", "psubsb", Vdq, Wdq, XX }, -Ia_psubsw_Pq_Qq = { "psubsw", "psubsw", Pq, Qq, XX }, -Ia_psubsw_Vdq_Wdq = { "psubsw", "psubsw", Vdq, Wdq, XX }, -Ia_psubusb_Pq_Qq = { "psubusb", "psubusb", Pq, Qq, XX }, -Ia_psubusb_Vdq_Wdq = { "psubusb", "psubusb", Vdq, Wdq, XX }, -Ia_psubusw_Pq_Qq = { "psubusw", "psubusw", Pq, Qq, XX }, -Ia_psubusw_Vdq_Wdq = { "psubusw", "psubusw", Vdq, Wdq, XX }, -Ia_psubw_Pq_Qq = { "psubw", "psubw", Pq, Qq, XX }, -Ia_psubw_Vdq_Wdq = { "psubw", "psubw", Vdq, Wdq, XX }, -Ia_pswapd_Pq_Qq = { "pswapd", "pswapd", Pq, Qq, XX }, -Ia_punpckhbw_Pq_Qq = { "punpckhbw", "punpckhbw", Pq, Qq, XX }, -Ia_punpckhbw_Vdq_Wq = { "punpckhbw", "punpckhbw", Vdq, Wq, XX }, -Ia_punpckhdq_Pq_Qq = { "punpckhdq", "punpckhdq", Pq, Qq, XX }, -Ia_punpckhdq_Vdq_Wq = { "punpckhdq", "punpckhdq", Vdq, Wq, XX }, -Ia_punpckhqdq_Vdq_Wq = { "punpckhqdq", "punpckhqdq", Vdq, Wq, XX }, -Ia_punpckhwd_Pq_Qq = { "punpckhwd", "punpckhwd", Pq, Qq, XX }, -Ia_punpckhwd_Vdq_Wq = { "punpckhwd", "punpckhwd", Vdq, Wq, XX }, -Ia_punpcklbw_Pq_Qd = { "punpcklbw", "punpcklbw", Pq, Qd, XX }, -Ia_punpcklbw_Vdq_Wq = { "punpcklbw", "punpcklbw", Vdq, Wq, XX }, -Ia_punpckldq_Pq_Qd = { "punpckldq", "punpckldq", Pq, Qd, XX }, -Ia_punpckldq_Vdq_Wq = { "punpckldq", "punpckldq", Vdq, Wq, XX }, -Ia_punpcklqdq_Vdq_Wq = { "punpcklqdq", "punpcklqdq", Vdq, Wq, XX }, -Ia_punpcklwd_Pq_Qd = { "punpcklwd", "punpcklwd", Pq, Qd, XX }, -Ia_punpcklwd_Vdq_Wq = { "punpcklwd", "punpcklwd", Vdq, Wq, XX }, -Ia_pushal = { "pushad", "pushal", XX, XX, XX }, -Ia_pushaw = { "pusha", "pusha", XX, XX, XX }, -Ia_pushfl = { "pushfd", "pushfl", XX, XX, XX }, -Ia_pushfq = { "pushfq", "pushfq", XX, XX, XX }, -Ia_pushfw = { "pushf", "pushf", XX, XX, XX }, -Ia_pushl_CS = { "push", "pushl", CS, XX, XX }, -Ia_pushl_DS = { "push", "pushl", DS, XX, XX }, -Ia_pushl_Ed = { "push", "pushl", Ed, XX, XX }, -Ia_pushl_ERX = { "push", "pushl", ERX, XX, XX }, -Ia_pushl_ES = { "push", "pushl", ES, XX, XX }, -Ia_pushl_FS = { "push", "pushl", FS, XX, XX }, -Ia_pushl_GS = { "push", "pushl", GS, XX, XX }, -Ia_pushl_Id = { "push", "pushl", Id, XX, XX }, -Ia_pushl_sIb = { "push", "pushl", sIbd, XX, XX }, -Ia_pushl_SS = { "push", "pushl", SS, XX, XX }, -Ia_pushq_Eq = { "push", "pushq", Eq, XX, XX }, -Ia_pushq_FS = { "push", "pushq", FS, XX, XX }, -Ia_pushq_GS = { "push", "pushq", GS, XX, XX }, -Ia_pushq_RRX = { "push", "pushq", RRX, XX, XX }, -Ia_pushq_sIb = { "push", "pushq", sIbq, XX, XX }, -Ia_pushq_sId = { "push", "pushq", sIdq, XX, XX }, -Ia_pushw_CS = { "push", "pushw", CS, XX, XX }, -Ia_pushw_DS = { "push", "pushw", DS, XX, XX }, -Ia_pushw_ES = { "push", "pushw", ES, XX, XX }, -Ia_pushw_Ew = { "push", "pushw", Ew, XX, XX }, -Ia_pushw_FS = { "push", "pushw", FS, XX, XX }, -Ia_pushw_GS = { "push", "pushw", GS, XX, XX }, -Ia_pushw_Iw = { "push", "pushw", Iw, XX, XX }, -Ia_pushw_RX = { "push", "pushw", RX, XX, XX }, -Ia_pushw_sIb = { "push", "pushw", sIbw, XX, XX }, -Ia_pushw_SS = { "push", "pushw", SS, XX, XX }, -Ia_pxor_Pq_Qq = { "pxor", "pxor", Pq, Qq, XX }, -Ia_pxor_Vdq_Wdq = { "pxor", "pxor", Vdq, Wdq, XX }, -Ia_rclb_Eb_CL = { "rcl", "rclb", Eb, CL, XX }, -Ia_rclb_Eb_I1 = { "rcl", "rclb", Eb, I1, XX }, -Ia_rclb_Eb_Ib = { "rcl", "rclb", Eb, Ib, XX }, -Ia_rcll_Ed_CL = { "rcl", "rcll", Ed, CL, XX }, -Ia_rcll_Ed_I1 = { "rcl", "rcll", Ed, I1, XX }, -Ia_rcll_Ed_Ib = { "rcl", "rcll", Ed, Ib, XX }, -Ia_rclq_Eq_CL = { "rcl", "rclq", Eq, CL, XX }, -Ia_rclq_Eq_I1 = { "rcl", "rclq", Eq, I1, XX }, -Ia_rclq_Eq_Ib = { "rcl", "rclq", Eq, Ib, XX }, -Ia_rclw_Ew_CL = { "rcl", "rclw", Ew, CL, XX }, -Ia_rclw_Ew_I1 = { "rcl", "rclw", Ew, I1, XX }, -Ia_rclw_Ew_Ib = { "rcl", "rclw", Ew, Ib, XX }, -Ia_rcpps_Vps_Wps = { "rcpps", "rcpps", Vps, Wps, XX }, -Ia_rcpss_Vss_Wss = { "rcpss", "rcpss", Vss, Wss, XX }, -Ia_rcrb_Eb_CL = { "rcr", "rcrb", Eb, CL, XX }, -Ia_rcrb_Eb_I1 = { "rcr", "rcrb", Eb, I1, XX }, -Ia_rcrb_Eb_Ib = { "rcr", "rcrb", Eb, Ib, XX }, -Ia_rcrl_Ed_CL = { "rcr", "rcrl", Ed, CL, XX }, -Ia_rcrl_Ed_I1 = { "rcr", "rcrl", Ed, I1, XX }, -Ia_rcrl_Ed_Ib = { "rcr", "rcrl", Ed, Ib, XX }, -Ia_rcrq_Eq_CL = { "rcr", "rcrq", Eq, CL, XX }, -Ia_rcrq_Eq_I1 = { "rcr", "rcrq", Eq, I1, XX }, -Ia_rcrq_Eq_Ib = { "rcr", "rcrq", Eq, Ib, XX }, -Ia_rcrw_Ew_CL = { "rcr", "rcrw", Ew, CL, XX }, -Ia_rcrw_Ew_I1 = { "rcr", "rcrw", Ew, I1, XX }, -Ia_rcrw_Ew_Ib = { "rcr", "rcrw", Ew, Ib, XX }, -Ia_rdmsr = { "rdmsr", "rdmsr", XX, XX, XX }, -Ia_rdpmc = { "rdpmc", "rdpmc", XX, XX, XX }, -Ia_rdtsc = { "rdtsc", "rdtsc", XX, XX, XX }, -Ia_rdtscp = { "rdtscp", "rdtscp", XX, XX, XX }, -Ia_ret = { "ret", "ret", XX, XX, XX }, -Ia_ret_Iw = { "ret", "ret", Iw, XX, XX }, -Ia_rolb_Eb_CL = { "rol", "rolb", Eb, CL, XX }, -Ia_rolb_Eb_I1 = { "rol", "rolb", Eb, I1, XX }, -Ia_rolb_Eb_Ib = { "rol", "rolb", Eb, Ib, XX }, -Ia_roll_Ed_CL = { "rol", "roll", Ed, CL, XX }, -Ia_roll_Ed_I1 = { "rol", "roll", Ed, I1, XX }, -Ia_roll_Ed_Ib = { "rol", "roll", Ed, Ib, XX }, -Ia_rolq_Eq_CL = { "rol", "rolq", Eq, CL, XX }, -Ia_rolq_Eq_I1 = { "rol", "rolq", Eq, I1, XX }, -Ia_rolq_Eq_Ib = { "rol", "rolq", Eq, Ib, XX }, -Ia_rolw_Ew_CL = { "rol", "rolw", Ew, CL, XX }, -Ia_rolw_Ew_I1 = { "rol", "rolw", Ew, I1, XX }, -Ia_rolw_Ew_Ib = { "rol", "rolw", Ew, Ib, XX }, -Ia_rorb_Eb_CL = { "ror", "rorb", Eb, CL, XX }, -Ia_rorb_Eb_I1 = { "ror", "rorb", Eb, I1, XX }, -Ia_rorb_Eb_Ib = { "ror", "rorb", Eb, Ib, XX }, -Ia_rorl_Ed_CL = { "ror", "rorl", Ed, CL, XX }, -Ia_rorl_Ed_I1 = { "ror", "rorl", Ed, I1, XX }, -Ia_rorl_Ed_Ib = { "ror", "rorl", Ed, Ib, XX }, -Ia_rorq_Eq_CL = { "ror", "rorq", Eq, CL, XX }, -Ia_rorq_Eq_I1 = { "ror", "rorq", Eq, I1, XX }, -Ia_rorq_Eq_Ib = { "ror", "rorq", Eq, Ib, XX }, -Ia_rorw_Ew_CL = { "ror", "rorw", Ew, CL, XX }, -Ia_rorw_Ew_I1 = { "ror", "rorw", Ew, I1, XX }, -Ia_rorw_Ew_Ib = { "ror", "rorw", Ew, Ib, XX }, -Ia_rsm = { "rsm", "rsm", XX, XX, XX }, -Ia_rsqrtps_Vps_Wps = { "rsqrtps", "rsqrtps", Vps, Wps, XX }, -Ia_rsqrtss_Vss_Wss = { "rsqrtss", "rsqrtss", Vss, Wss, XX }, -Ia_sahf = { "sahf", "sahf", XX, XX, XX }, -Ia_salc = { "salc", "salc", XX, XX, XX }, -Ia_sarb_Eb_CL = { "sar", "sarb", Eb, CL, XX }, -Ia_sarb_Eb_I1 = { "sar", "sarb", Eb, I1, XX }, -Ia_sarb_Eb_Ib = { "sar", "sarb", Eb, Ib, XX }, -Ia_sarl_Ed_CL = { "sar", "sarl", Ed, CL, XX }, -Ia_sarl_Ed_I1 = { "sar", "sarl", Ed, I1, XX }, -Ia_sarl_Ed_Ib = { "sar", "sarl", Ed, Ib, XX }, -Ia_sarq_Eq_CL = { "sar", "sarq", Eq, CL, XX }, -Ia_sarq_Eq_I1 = { "sar", "sarq", Eq, I1, XX }, -Ia_sarq_Eq_Ib = { "sar", "sarq", Eq, Ib, XX }, -Ia_sarw_Ew_CL = { "sar", "sarw", Ew, CL, XX }, -Ia_sarw_Ew_I1 = { "sar", "sarw", Ew, I1, XX }, -Ia_sarw_Ew_Ib = { "sar", "sarw", Ew, Ib, XX }, -Ia_sbbb_AL_Ib = { "sbb", "sbbb", AL, Ib, XX }, -Ia_sbbb_Eb_Gb = { "sbb", "sbbb", Eb, Gb, XX }, -Ia_sbbb_Eb_Ib = { "sbb", "sbbb", Eb, Ib, XX }, -Ia_sbbb_Gb_Eb = { "sbb", "sbbb", Gb, Eb, XX }, -Ia_sbbl_EAX_Id = { "sbb", "sbbl", EAX, Id, XX }, -Ia_sbbl_Ed_Gd = { "sbb", "sbbl", Ed, Gd, XX }, -Ia_sbbl_Ed_Id = { "sbb", "sbbl", Ed, Id, XX }, -Ia_sbbl_Ed_sIb = { "sbb", "sbbl", Ed, sIbd, XX }, -Ia_sbbl_Gd_Ed = { "sbb", "sbbl", Gd, Ed, XX }, -Ia_sbbq_Eq_Gq = { "sbb", "sbbq", Eq, Gq, XX }, -Ia_sbbq_Eq_sIb = { "sbb", "sbbq", Eq, sIbq, XX }, -Ia_sbbq_Eq_sId = { "sbb", "sbbq", Eq, sIdq, XX }, -Ia_sbbq_Gq_Eq = { "sbb", "sbbq", Gq, Eq, XX }, -Ia_sbbq_RAX_sId = { "sbb", "sbbq", RAX, sIdq, XX }, -Ia_sbbw_AX_Iw = { "sbb", "sbbw", AX, Iw, XX }, -Ia_sbbw_Ew_Gw = { "sbb", "sbbw", Ew, Gw, XX }, -Ia_sbbw_Ew_Iw = { "sbb", "sbbw", Ew, Iw, XX }, -Ia_sbbw_Ew_sIb = { "sbb", "sbbw", Ew, sIbw, XX }, -Ia_sbbw_Gw_Ew = { "sbb", "sbbw", Gw, Ew, XX }, -Ia_scasb_Yb_AL = { "scasb", "scasb", Yb, AL, XX }, -Ia_scasl_Yd_EAX = { "scasd", "scasl", Yd, EAX, XX }, -Ia_scasq_Yq_RAX = { "scasq", "scasq", Yq, RAX, XX }, -Ia_scasw_Yw_AX = { "scasw", "scasw", Yw, AX, XX }, -Ia_setb_Eb = { "setb", "setb", Eb, XX, XX }, -Ia_setbe_Eb = { "setbe", "setbe", Eb, XX, XX }, -Ia_setl_Eb = { "setl", "setl", Eb, XX, XX }, -Ia_setle_Eb = { "setle", "setle", Eb, XX, XX }, -Ia_setnb_Eb = { "setnb", "setnb", Eb, XX, XX }, -Ia_setnbe_Eb = { "setnbe", "setnbe", Eb, XX, XX }, -Ia_setnl_Eb = { "setnl", "setnl", Eb, XX, XX }, -Ia_setnle_Eb = { "setnle", "setnle", Eb, XX, XX }, -Ia_setno_Eb = { "setno", "setno", Eb, XX, XX }, -Ia_setnp_Eb = { "setnp", "setnp", Eb, XX, XX }, -Ia_setns_Eb = { "setns", "setns", Eb, XX, XX }, -Ia_setnz_Eb = { "setnz", "setnz", Eb, XX, XX }, -Ia_seto_Eb = { "seto", "seto", Eb, XX, XX }, -Ia_setp_Eb = { "setp", "setp", Eb, XX, XX }, -Ia_sets_Eb = { "sets", "sets", Eb, XX, XX }, -Ia_setz_Eb = { "setz", "setz", Eb, XX, XX }, -Ia_sfence = { "sfence", "sfence", XX, XX, XX }, -Ia_sgdt = { "sgdt", "sgdt", Ms, XX, XX }, -Ia_shlb_Eb_CL = { "shl", "shlb", Eb, CL, XX }, -Ia_shlb_Eb_I1 = { "shl", "shlb", Eb, I1, XX }, -Ia_shlb_Eb_Ib = { "shl", "shlb", Eb, Ib, XX }, -Ia_shldl_Ed_Gd_CL = { "shld", "shldl", Ed, Gd, CL }, -Ia_shldl_Ed_Gd_Ib = { "shld", "shldl", Ed, Gd, Ib }, -Ia_shldq_Eq_Gq_CL = { "shld", "shldq", Eq, Gq, CL }, -Ia_shldq_Eq_Gq_Ib = { "shld", "shldq", Eq, Gq, Ib }, -Ia_shldw_Ew_Gw_CL = { "shld", "shldw", Ew, Gw, CL }, -Ia_shldw_Ew_Gw_Ib = { "shld", "shldw", Ew, Gw, Ib }, -Ia_shll_Ed_CL = { "shl", "shll", Ed, CL, XX }, -Ia_shll_Ed_I1 = { "shl", "shll", Ed, I1, XX }, -Ia_shll_Ed_Ib = { "shl", "shll", Ed, Ib, XX }, -Ia_shlq_Eq_CL = { "shl", "shlq", Eq, CL, XX }, -Ia_shlq_Eq_I1 = { "shl", "shlq", Eq, I1, XX }, -Ia_shlq_Eq_Ib = { "shl", "shlq", Eq, Ib, XX }, -Ia_shlw_Ew_CL = { "shl", "shlw", Ew, CL, XX }, -Ia_shlw_Ew_I1 = { "shl", "shlw", Ew, I1, XX }, -Ia_shlw_Ew_Ib = { "shl", "shlw", Ew, Ib, XX }, -Ia_shrb_Eb_CL = { "shr", "shrb", Eb, CL, XX }, -Ia_shrb_Eb_I1 = { "shr", "shrb", Eb, I1, XX }, -Ia_shrb_Eb_Ib = { "shr", "shrb", Eb, Ib, XX }, -Ia_shrdl_Ed_Gd_CL = { "shrd", "shrdl", Ed, Gd, CL }, -Ia_shrdl_Ed_Gd_Ib = { "shrd", "shrdl", Ed, Gd, Ib }, -Ia_shrdq_Eq_Gq_CL = { "shrd", "shrdq", Eq, Gq, CL }, -Ia_shrdq_Eq_Gq_Ib = { "shrd", "shrdq", Eq, Gq, Ib }, -Ia_shrdw_Ew_Gw_CL = { "shrd", "shrdw", Ew, Gw, CL }, -Ia_shrdw_Ew_Gw_Ib = { "shrd", "shrdw", Ew, Gw, Ib }, -Ia_shrl_Ed_CL = { "shr", "shrl", Ed, CL, XX }, -Ia_shrl_Ed_I1 = { "shr", "shrl", Ed, I1, XX }, -Ia_shrl_Ed_Ib = { "shr", "shrl", Ed, Ib, XX }, -Ia_shrq_Eq_CL = { "shr", "shrq", Eq, CL, XX }, -Ia_shrq_Eq_I1 = { "shr", "shrq", Eq, I1, XX }, -Ia_shrq_Eq_Ib = { "shr", "shrq", Eq, Ib, XX }, -Ia_shrw_Ew_CL = { "shr", "shrw", Ew, CL, XX }, -Ia_shrw_Ew_I1 = { "shr", "shrw", Ew, I1, XX }, -Ia_shrw_Ew_Ib = { "shr", "shrw", Ew, Ib, XX }, -Ia_shufpd_Vpd_Wpd_Ib = { "shufpd", "shufpd", Vpd, Wpd, Ib }, -Ia_shufps_Vps_Wps_Ib = { "shufps", "shufps", Vps, Wps, Ib }, -Ia_sidt = { "sidt", "sidt", Ms, XX, XX }, -Ia_sldt = { "sldt", "sldt", Ew, XX, XX }, -Ia_smsw_Ew = { "smsw", "smsw", Ew, XX, XX }, -Ia_sqrtpd_Vpd_Wpd = { "sqrtpd", "sqrtpd", Vpd, Wpd, XX }, -Ia_sqrtps_Vps_Wps = { "sqrtps", "sqrtps", Vps, Wps, XX }, -Ia_sqrtsd_Vsd_Wsd = { "sqrtsd", "sqrtsd", Vsd, Wsd, XX }, -Ia_sqrtss_Vss_Wss = { "sqrtss", "sqrtss", Vss, Wss, XX }, -Ia_stc = { "stc", "stc", XX, XX, XX }, -Ia_std = { "std", "std", XX, XX, XX }, -Ia_sti = { "sti", "sti", XX, XX, XX }, -Ia_stmxcsr = { "stmxcsr", "stmxcsr", Md, XX, XX }, -Ia_stosb_Yb_AL = { "stosb", "stosb", Yb, AL, XX }, -Ia_stosl_Yd_EAX = { "stosd", "stosl", Yd, EAX, XX }, -Ia_stosq_Yq_RAX = { "stosq", "stosq", Yq, RAX, XX }, -Ia_stosw_Yw_AX = { "stosw", "stosw", Yw, AX, XX }, -Ia_str = { "str", "str", Ew, XX, XX }, -Ia_subb_AL_Ib = { "sub", "subb", AL, Ib, XX }, -Ia_subb_Eb_Gb = { "sub", "subb", Eb, Gb, XX }, -Ia_subb_Eb_Ib = { "sub", "subb", Eb, Ib, XX }, -Ia_subb_Gb_Eb = { "sub", "subb", Gb, Eb, XX }, -Ia_subl_EAX_Id = { "sub", "subl", EAX, Id, XX }, -Ia_subl_Ed_Gd = { "sub", "subl", Ed, Gd, XX }, -Ia_subl_Ed_Id = { "sub", "subl", Ed, Id, XX }, -Ia_subl_Ed_sIb = { "sub", "subl", Ed, sIbd, XX }, -Ia_subl_Gd_Ed = { "sub", "subl", Gd, Ed, XX }, -Ia_subpd_Vpd_Wpd = { "subpd", "subpd", Vpd, Wpd, XX }, -Ia_subps_Vps_Wps = { "subps", "subps", Vps, Wps, XX }, -Ia_subq_Eq_Gq = { "sub", "subq", Eq, Gq, XX }, -Ia_subq_Eq_sIb = { "sub", "subq", Eq, sIbq, XX }, -Ia_subq_Eq_sId = { "sub", "subq", Eq, sIdq, XX }, -Ia_subq_Gq_Eq = { "sub", "subq", Gq, Eq, XX }, -Ia_subq_RAX_sId = { "sub", "subq", RAX, sIdq, XX }, -Ia_subsd_Vsd_Wsd = { "subsd", "subsd", Vsd, Wsd, XX }, -Ia_subss_Vss_Wss = { "subss", "subss", Vss, Wss, XX }, -Ia_subw_AX_Iw = { "sub", "subw", AX, Iw, XX }, -Ia_subw_Ew_Gw = { "sub", "subw", Ew, Gw, XX }, -Ia_subw_Ew_Iw = { "sub", "subw", Ew, Iw, XX }, -Ia_subw_Ew_sIb = { "sub", "subw", Ew, sIbw, XX }, -Ia_subw_Gw_Ew = { "sub", "subw", Gw, Ew, XX }, -Ia_swapgs = { "swapgs", "swapgs", XX, XX, XX }, -Ia_syscall = { "syscall", "syscall", XX, XX, XX }, -Ia_sysenter = { "sysenter", "sysenter", XX, XX, XX }, -Ia_sysexit = { "sysexit", "sysexit", XX, XX, XX }, -Ia_sysret = { "sysret", "sysret", XX, XX, XX }, -Ia_testb_AL_Ib = { "test", "testb", AL, Ib, XX }, -Ia_testb_Eb_Gb = { "test", "testb", Eb, Gb, XX }, -Ia_testb_Eb_Ib = { "test", "testb", Eb, Ib, XX }, -Ia_testl_EAX_Id = { "test", "testl", EAX, Id, XX }, -Ia_testl_Ed_Gd = { "test", "testl", Ed, Gd, XX }, -Ia_testl_Ed_Id = { "test", "testl", Ed, Id, XX }, -Ia_testq_Eq_Gq = { "test", "testq", Eq, Gq, XX }, -Ia_testq_Eq_sId = { "test", "testq", Eq, sIdq, XX }, -Ia_testq_RAX_sId = { "test", "testq", RAX, sIdq, XX }, -Ia_testw_AX_Iw = { "test", "testw", AX, Iw, XX }, -Ia_testw_Ew_Gw = { "test", "testw", Ew, Gw, XX }, -Ia_testw_Ew_Iw = { "test", "testw", Ew, Iw, XX }, -Ia_ucomisd_Vsd_Wss = { "ucomisd", "ucomisd", Vsd, Wsd, XX }, -Ia_ucomiss_Vss_Wss = { "ucomiss", "ucomiss", Vss, Wss, XX }, -Ia_ud2a = { "ud2a", "ud2a", XX, XX, XX }, -Ia_ud2b = { "ud2b", "ud2b", XX, XX, XX }, -Ia_unpckhpd_Vpd_Wdq = { "unpckhpd", "unpckhpd", Vpd, Wdq, XX }, -Ia_unpckhps_Vps_Wdq = { "unpckhps", "unpckhps", Vps, Wdq, XX }, -Ia_unpcklpd_Vpd_Wq = { "unpcklpd", "unpcklpd", Vpd, Wq, XX }, -Ia_unpcklps_Vps_Wq = { "unpcklps", "unpcklps", Vps, Wq, XX }, -Ia_verr = { "verr", "verr", Ew, XX, XX }, -Ia_verw = { "verw", "verw", Ew, XX, XX }, -Ia_wbinvd = { "wbinvd", "wbinvd", XX, XX, XX }, -Ia_wrmsr = { "wrmsr", "wrmsr", XX, XX, XX }, -Ia_xaddb_Eb_Gb = { "xadd", "xaddb", Eb, Gb, XX }, -Ia_xaddl_Ed_Gd = { "xadd", "xaddl", Ed, Gd, XX }, -Ia_xaddq_Eq_Gq = { "xadd", "xaddq", Eq, Gq, XX }, -Ia_xaddw_Ew_Gw = { "xadd", "xaddw", Ew, Gw, XX }, -Ia_xchgb_Eb_Gb = { "xchg", "xchgb", Eb, Gb, XX }, -Ia_xchgl_Ed_Gd = { "xchg", "xchgl", Ed, Gd, XX }, -Ia_xchgl_ERX_EAX = { "xchg", "xchgl", ERX, EAX, XX }, -Ia_xchgq_Eq_Gq = { "xchg", "xchgq", Eq, Gq, XX }, -Ia_xchgq_RRX_RAX = { "xchg", "xchgq", RRX, RAX, XX }, -Ia_xchgw_Ew_Gw = { "xchg", "xchgw", Ew, Gw, XX }, -Ia_xchgw_RX_AX = { "xchg", "xchgw", RX, AX, XX }, -Ia_xlat = { "xlat", "xlat", XX, XX, XX }, -Ia_xorb_AL_Ib = { "xor", "xorb", AL, Ib, XX }, -Ia_xorb_Eb_Gb = { "xor", "xorb", Eb, Gb, XX }, -Ia_xorb_Eb_Ib = { "xor", "xorb", Eb, Ib, XX }, -Ia_xorb_Gb_Eb = { "xor", "xorb", Gb, Eb, XX }, -Ia_xorl_EAX_Id = { "xor", "xorl", EAX, Id, XX }, -Ia_xorl_Ed_Gd = { "xor", "xorl", Ed, Gd, XX }, -Ia_xorl_Ed_Id = { "xor", "xorl", Ed, Id, XX }, -Ia_xorl_Ed_sIb = { "xor", "xorl", Ed, sIbd, XX }, -Ia_xorl_Gd_Ed = { "xor", "xorl", Gd, Ed, XX }, -Ia_xorpd_Vpd_Wpd = { "xorpd", "xorpd", Vpd, Wpd, XX }, -Ia_xorps_Vps_Wps = { "xorps", "xorps", Vps, Wps, XX }, -Ia_xorq_Eq_Gq = { "xor", "xorq", Eq, Gq, XX }, -Ia_xorq_Eq_sIb = { "xor", "xorq", Eq, sIbq, XX }, -Ia_xorq_Eq_sId = { "xor", "xorq", Eq, sIdq, XX }, -Ia_xorq_Gq_Eq = { "xor", "xorq", Gq, Eq, XX }, -Ia_xorq_RAX_sId = { "xor", "xorq", RAX, sIdq, XX }, -Ia_xorw_AX_Iw = { "xor", "xorw", AX, Iw, XX }, -Ia_xorw_Ew_Gw = { "xor", "xorw", Ew, Gw, XX }, -Ia_xorw_Ew_Iw = { "xor", "xorw", Ew, Iw, XX }, -Ia_xorw_Ew_sIb = { "xor", "xorw", Ew, sIbw, XX }, -Ia_xorw_Gw_Ew = { "xor", "xorw", Gw, Ew, XX }; +Ia_aaa = { "aaa", "aaa", XX, XX, XX }, +Ia_aad = { "aad", "aad", Ib, XX, XX }, +Ia_aam = { "aam", "aam", Ib, XX, XX }, +Ia_aas = { "aas", "aas", XX, XX, XX }, +Ia_adcb_AL_Ib = { "adc", "adcb", AL, Ib, XX }, +Ia_adcb_Eb_Gb = { "adc", "adcb", Eb, Gb, XX }, +Ia_adcb_Eb_Ib = { "adc", "adcb", Eb, Ib, XX }, +Ia_adcb_Gb_Eb = { "adc", "adcb", Gb, Eb, XX }, +Ia_adcl_EAX_Id = { "adc", "adcl", EAX, Id, XX }, +Ia_adcl_Ed_Gd = { "adc", "adcl", Ed, Gd, XX }, +Ia_adcl_Ed_Id = { "adc", "adcl", Ed, Id, XX }, +Ia_adcl_Ed_sIb = { "adc", "adcl", Ed, sIbd, XX }, +Ia_adcl_Gd_Ed = { "adc", "adcl", Gd, Ed, XX }, +Ia_adcq_Eq_Gq = { "adc", "adcq", Eq, Gq, XX }, +Ia_adcq_Eq_sIb = { "adc", "adcq", Eq, sIbq, XX }, +Ia_adcq_Eq_sId = { "adc", "adcq", Eq, Iq, XX }, +Ia_adcq_Gq_Eq = { "adc", "adcq", Gq, Eq, XX }, +Ia_adcq_RAX_sId = { "adc", "adcq", RAX, sIdq, XX }, +Ia_adcw_AX_Iw = { "adc", "adcw", AX, Iw, XX }, +Ia_adcw_Ew_Gw = { "adc", "adcw", Ew, Gw, XX }, +Ia_adcw_Ew_Iw = { "adc", "adcw", Ew, Iw, XX }, +Ia_adcw_Ew_sIb = { "adc", "adcw", Ew, sIbw, XX }, +Ia_adcw_Gw_Ew = { "adc", "adcw", Gw, Ew, XX }, +Ia_addb_AL_Ib = { "add", "addb", AL, Ib, XX }, +Ia_addb_Eb_Gb = { "add", "addb", Eb, Gb, XX }, +Ia_addb_Eb_Ib = { "add", "addb", Eb, Ib, XX }, +Ia_addb_Gb_Eb = { "add", "addb", Gb, Eb, XX }, +Ia_addl_EAX_Id = { "add", "addl", EAX, Id, XX }, +Ia_addl_Ed_Gd = { "add", "addl", Ed, Gd, XX }, +Ia_addl_Ed_Id = { "add", "addl", Ed, Id, XX }, +Ia_addl_Ed_sIb = { "add", "addl", Ed, sIbd, XX }, +Ia_addl_Gd_Ed = { "add", "addl", Gd, Ed, XX }, +Ia_addpd_Vpd_Wpd = { "addpd", "addpd", Vpd, Wpd, XX }, +Ia_addps_Vps_Wps = { "addps", "addps", Vps, Wps, XX }, +Ia_addq_Eq_Gq = { "add", "addq", Eq, Gq, XX }, +Ia_addq_Eq_sIb = { "add", "addq", Eq, sIbq, XX }, +Ia_addq_Eq_sId = { "add", "addq", Eq, sIdq, XX }, +Ia_addq_Gq_Eq = { "add", "addq", Gq, Eq, XX }, +Ia_addq_RAX_sId = { "add", "addq", RAX, sIdq, XX }, +Ia_addsd_Vsd_Wsd = { "addsd", "addsd", Vsd, Wsd, XX }, +Ia_addss_Vss_Wss = { "addss", "addss", Vss, Wss, XX }, +Ia_addsubpd_Vpd_Wpd = { "addsubpd", "addsubpd", Vpd, Wpd, XX }, +Ia_addsubps_Vps_Wps = { "addsubps", "addsubps", Vps, Wps, XX }, +Ia_addw_AX_Iw = { "add", "addw", AX, Iw, XX }, +Ia_addw_Ew_Gw = { "add", "addw", Ew, Gw, XX }, +Ia_addw_Ew_Iw = { "add", "addw", Ew, Iw, XX }, +Ia_addw_Ew_sIb = { "add", "addw", Ew, sIbw, XX }, +Ia_addw_Gw_Ew = { "add", "addw", Gw, Ew, XX }, +Ia_andb_AL_Ib = { "and", "andb", AL, Ib, XX }, +Ia_andb_Eb_Gb = { "and", "andb", Eb, Gb, XX }, +Ia_andb_Eb_Ib = { "and", "andb", Eb, Ib, XX }, +Ia_andb_Gb_Eb = { "and", "andb", Gb, Eb, XX }, +Ia_andl_EAX_Id = { "and", "andl", EAX, Id, XX }, +Ia_andl_Ed_Gd = { "and", "andl", Ed, Gd, XX }, +Ia_andl_Ed_Id = { "and", "andl", Ed, Id, XX }, +Ia_andl_Ed_sIb = { "and", "andl", Ed, sIbd, XX }, +Ia_andl_Gd_Ed = { "and", "andl", Gd, Ed, XX }, +Ia_andnpd_Vpd_Wpd = { "andnpd", "andnpd", Vpd, Wpd, XX }, +Ia_andnps_Vps_Wps = { "andnps", "andnps", Vps, Wps, XX }, +Ia_andpd_Vpd_Wpd = { "andpd", "andpd", Vpd, Wpd, XX }, +Ia_andps_Vps_Wps = { "andps", "andps", Vps, Wps, XX }, +Ia_andq_Eq_Gq = { "and", "andq", Eq, Gq, XX }, +Ia_andq_Eq_sIb = { "and", "andq", Eq, sIbq, XX }, +Ia_andq_Eq_sId = { "and", "andq", Eq, sIdq, XX }, +Ia_andq_Gq_Eq = { "and", "andq", Gq, Eq, XX }, +Ia_andq_RAX_sId = { "and", "andq", RAX, sIdq, XX }, +Ia_andw_AX_Iw = { "and", "andw", AX, Iw, XX }, +Ia_andw_Ew_Gw = { "and", "andw", Ew, Gw, XX }, +Ia_andw_Ew_Iw = { "and", "andw", Ew, Iw, XX }, +Ia_andw_Ew_sIb = { "and", "andw", Ew, sIbw, XX }, +Ia_andw_Gw_Ew = { "and", "andw", Gw, Ew, XX }, +Ia_arpl_Ew_Rw = { "arpl", "arpl", Ew, Rw, XX }, +Ia_boundl_Gd_Ma = { "bound", "boundl", Gd, Ma, XX }, +Ia_boundw_Gw_Ma = { "bound", "boundw", Gw, Ma, XX }, +Ia_bsfl_Gd_Ed = { "bsf", "bsfl", Gd, Ed, XX }, +Ia_bsfq_Gq_Eq = { "bsf", "bsfq", Gq, Eq, XX }, +Ia_bsfw_Gw_Ew = { "bsf", "bsfw", Gw, Ew, XX }, +Ia_bsrl_Gd_Ed = { "bsr", "bsrl", Gd, Ed, XX }, +Ia_bsrq_Gq_Eq = { "bsr", "bsrq", Gq, Eq, XX }, +Ia_bsrw_Gw_Ew = { "bsr", "bsrw", Gw, Ew, XX }, +Ia_bswapl_ERX = { "bswap", "bswapl", ERX, XX, XX }, +Ia_bswapq_RRX = { "bswap", "bswapq", RRX, XX, XX }, +Ia_btcl_Ed_Gd = { "btc", "btcl", Ed, Gd, XX }, +Ia_btcl_Ed_Ib = { "btc", "btcl", Ed, Ib, XX }, +Ia_btcq_Eq_Gq = { "btc", "btcq", Eq, Gq, XX }, +Ia_btcq_Eq_Ib = { "btc", "btcq", Eq, Ib, XX }, +Ia_btcw_Ew_Gw = { "btc", "btcw", Ew, Gw, XX }, +Ia_btcw_Ew_Ib = { "btc", "btcw", Ew, Ib, XX }, +Ia_btl_Ed_Gd = { "bt", "btl", Ed, Gd, XX }, +Ia_btl_Ed_Ib = { "bt", "btl", Ed, Ib, XX }, +Ia_btq_Eq_Gq = { "bt", "btq", Eq, Gq, XX }, +Ia_btq_Eq_Ib = { "bt", "btq", Eq, Ib, XX }, +Ia_btrl_Ed_Gd = { "btr", "btrl", Ed, Gd, XX }, +Ia_btrl_Ed_Ib = { "btr", "btrl", Ed, Ib, XX }, +Ia_btrq_Eq_Gq = { "btr", "btrq", Eq, Gq, XX }, +Ia_btrq_Eq_Ib = { "btr", "btrq", Eq, Ib, XX }, +Ia_btrw_Ew_Gw = { "btr", "btrw", Ew, Gw, XX }, +Ia_btrw_Ew_Ib = { "btr", "btrw", Ew, Ib, XX }, +Ia_btsl_Ed_Gd = { "bts", "btsl", Ed, Gd, XX }, +Ia_btsl_Ed_Ib = { "bts", "btsl", Ed, Ib, XX }, +Ia_btsq_Eq_Gq = { "bts", "btsq", Eq, Gq, XX }, +Ia_btsq_Eq_Ib = { "bts", "btsq", Eq, Ib, XX }, +Ia_btsw_Ew_Gw = { "bts", "btsw", Ew, Gw, XX }, +Ia_btsw_Ew_Ib = { "bts", "btsw", Ew, Ib, XX }, +Ia_btw_Ew_Gw = { "bt", "btw", Ew, Gw, XX }, +Ia_btw_Ew_Ib = { "bt", "btw", Ew, Ib, XX }, +Ia_call_Ed = { "call", "call", Ed, XX, XX }, +Ia_call_Eq = { "call", "call", Eq, XX, XX }, +Ia_call_Ew = { "call", "call", Ew, XX, XX }, +Ia_call_Jd = { "call", "call", Jd, XX, XX }, +Ia_call_Jw = { "call", "call", Jw, XX, XX }, +Ia_cbw = { "cbw", "cbtw", XX, XX, XX }, +Ia_cdq = { "cdq", "cltd", XX, XX, XX }, +Ia_cdqe = { "cdqe", "cltq", XX, XX, XX }, +Ia_cflush = { "cflush", "cflush", Mb, XX, XX }, +Ia_clc = { "clc", "clc", XX, XX, XX }, +Ia_cld = { "cld", "cld", XX, XX, XX }, +Ia_cli = { "cli", "cli", XX, XX, XX }, +Ia_clts = { "clts", "clts", XX, XX, XX }, +Ia_cmc = { "cmc", "cmc", XX, XX, XX }, +Ia_cmoval_Gd_Ed = { "cmova", "cmoval", Gd, Ed, XX }, +Ia_cmovaq_Gq_Eq = { "cmova", "cmovaq", Gq, Eq, XX }, +Ia_cmovaw_Gw_Ew = { "cmova", "cmovaw", Gw, Ew, XX }, +Ia_cmovcl_Gd_Ed = { "cmovc", "cmovcl", Gd, Ed, XX }, +Ia_cmovcq_Gq_Eq = { "cmovc", "cmovcq", Gq, Eq, XX }, +Ia_cmovcw_Gw_Ew = { "cmovc", "cmovcw", Gw, Ew, XX }, +Ia_cmovgl_Gd_Ed = { "cmovg", "cmovgl", Gd, Ed, XX }, +Ia_cmovgq_Gq_Eq = { "cmovg", "cmovgq", Gq, Eq, XX }, +Ia_cmovgw_Gw_Ew = { "cmovg", "cmovgw", Gw, Ew, XX }, +Ia_cmovll_Gd_Ed = { "cmovl", "cmovll", Gd, Ed, XX }, +Ia_cmovlq_Gq_Eq = { "cmovl", "cmovlq", Gq, Eq, XX }, +Ia_cmovlw_Gw_Ew = { "cmovl", "cmovlw", Gw, Ew, XX }, +Ia_cmovnal_Gd_Ed = { "cmovna", "cmovnal", Gd, Ed, XX }, +Ia_cmovnaq_Gq_Eq = { "cmovna", "cmovnaq", Gq, Eq, XX }, +Ia_cmovnaw_Gw_Ew = { "cmovna", "cmovnaw", Gw, Ew, XX }, +Ia_cmovncl_Gd_Ed = { "cmovnc", "cmovncl", Gd, Ed, XX }, +Ia_cmovncq_Gq_Eq = { "cmovnc", "cmovncq", Gq, Eq, XX }, +Ia_cmovncw_Gw_Ew = { "cmovnc", "cmovncw", Gw, Ew, XX }, +Ia_cmovngl_Gd_Ed = { "cmovng", "cmovngl", Gd, Ed, XX }, +Ia_cmovngq_Gq_Eq = { "cmovng", "cmovngq", Gq, Eq, XX }, +Ia_cmovngw_Gw_Ew = { "cmovng", "cmovngw", Gw, Ew, XX }, +Ia_cmovnll_Gd_Ed = { "cmovnl", "cmovnll", Gd, Ed, XX }, +Ia_cmovnlq_Gq_Eq = { "cmovnl", "cmovnlq", Gq, Eq, XX }, +Ia_cmovnlw_Gw_Ew = { "cmovnl", "cmovnlw", Gw, Ew, XX }, +Ia_cmovnol_Gd_Ed = { "cmovno", "cmovnol", Gd, Ed, XX }, +Ia_cmovnoq_Gq_Eq = { "cmovno", "cmovnoq", Gq, Eq, XX }, +Ia_cmovnow_Gw_Ew = { "cmovno", "cmovnow", Gw, Ew, XX }, +Ia_cmovnpl_Gd_Ed = { "cmovnp", "cmovnpl", Gd, Ed, XX }, +Ia_cmovnpq_Gq_Eq = { "cmovnp", "cmovnpq", Gq, Eq, XX }, +Ia_cmovnpw_Gw_Ew = { "cmovnp", "cmovnpw", Gw, Ew, XX }, +Ia_cmovnsl_Gd_Ed = { "cmovns", "cmovnsl", Gd, Ed, XX }, +Ia_cmovnsq_Gq_Eq = { "cmovns", "cmovnsq", Gq, Eq, XX }, +Ia_cmovnsw_Gw_Ew = { "cmovns", "cmovnsw", Gw, Ew, XX }, +Ia_cmovnzl_Gd_Ed = { "cmovnz", "cmovnzl", Gd, Ed, XX }, +Ia_cmovnzq_Gq_Eq = { "cmovnz", "cmovnzq", Gq, Eq, XX }, +Ia_cmovnzw_Gw_Ew = { "cmovnz", "cmovnzw", Gw, Ew, XX }, +Ia_cmovol_Gd_Ed = { "cmovo", "cmovol", Gd, Ed, XX }, +Ia_cmovoq_Gq_Eq = { "cmovo", "cmovoq", Gq, Eq, XX }, +Ia_cmovow_Gw_Ew = { "cmovo", "cmovow", Gw, Ew, XX }, +Ia_cmovpl_Gd_Ed = { "cmovp", "cmovpl", Gd, Ed, XX }, +Ia_cmovpq_Gq_Eq = { "cmovp", "cmovpq", Gq, Eq, XX }, +Ia_cmovpw_Gw_Ew = { "cmovp", "cmovpw", Gw, Ew, XX }, +Ia_cmovsl_Gd_Ed = { "cmovs", "cmovsl", Gd, Ed, XX }, +Ia_cmovsq_Gq_Eq = { "cmovs", "cmovsq", Gq, Eq, XX }, +Ia_cmovsw_Gw_Ew = { "cmovs", "cmovsw", Gw, Ew, XX }, +Ia_cmovzl_Gd_Ed = { "cmovz", "cmovzl", Gd, Ed, XX }, +Ia_cmovzq_Gq_Eq = { "cmovz", "cmovzq", Gq, Eq, XX }, +Ia_cmovzw_Gw_Ew = { "cmovz", "cmovzw", Gw, Ew, XX }, +Ia_cmpb_AL_Ib = { "cmp", "cmpb", AL, Ib, XX }, +Ia_cmpb_Eb_Gb = { "cmp", "cmpb", Eb, Gb, XX }, +Ia_cmpb_Eb_Ib = { "cmp", "cmpb", Eb, Ib, XX }, +Ia_cmpb_Gb_Eb = { "cmp", "cmpb", Gb, Eb, XX }, +Ia_cmpl_EAX_Id = { "cmp", "cmpl", EAX, Id, XX }, +Ia_cmpl_Ed_Gd = { "cmp", "cmpl", Ed, Gd, XX }, +Ia_cmpl_Ed_Id = { "cmp", "cmpl", Ed, Id, XX }, +Ia_cmpl_Ed_sIb = { "cmp", "cmpl", Ed, sIbd, XX }, +Ia_cmpl_Gd_Ed = { "cmp", "cmpl", Gd, Ed, XX }, +Ia_cmppd_Vpd_Wpd_Ib = { "cmppd", "cmppd", Vpd, Wpd, Ib }, +Ia_cmpps_Vps_Wps_Ib = { "cmpps", "cmpps", Vps, Wps, Ib }, +Ia_cmpq_Eq_Gq = { "cmp", "cmpq", Eq, Gq, XX }, +Ia_cmpq_Eq_sIb = { "cmp", "cmpq", Eq, sIbq, XX }, +Ia_cmpq_Eq_sId = { "cmp", "cmpq", Eq, sIdq, XX }, +Ia_cmpq_Gq_Eq = { "cmp", "cmpq", Gq, Eq, XX }, +Ia_cmpq_RAX_sId = { "cmp", "cmpq", RAX, sIdq, XX }, +Ia_cmpsb_Yb_Xb = { "cmpsb", "cmpsb", Yb, Xb, XX }, +Ia_cmpsd_Vsd_Wsd_Ib = { "cmpsd", "cmpsd", Vsd, Wsd, Ib }, +Ia_cmpsl_Yd_Xd = { "cmpsd", "cmpsl", Yd, Xd, XX }, +Ia_cmpsq_Yq_Xq = { "cmpsq", "cmpsq", Yq, Xq, XX }, +Ia_cmpss_Vss_Wss_Ib = { "cmpss", "cmpss", Vss, Wss, Ib }, +Ia_cmpsw_Yw_Xw = { "cmpsw", "cmpsw", Yw, Xw, XX }, +Ia_cmpw_AX_Iw = { "cmp", "cmpw", AX, Iw, XX }, +Ia_cmpw_Ew_Gw = { "cmp", "cmpw", Ew, Gw, XX }, +Ia_cmpw_Ew_Iw = { "cmp", "cmpw", Ew, Iw, XX }, +Ia_cmpw_Ew_sIb = { "cmp", "cmpw", Ew, sIbw, XX }, +Ia_cmpw_Gw_Ew = { "cmp", "cmpw", Gw, Ew, XX }, +Ia_cmpxchg16b = { "cmpxchg16b", "cmpxchg16b", Mdq, XX, XX }, +Ia_cmpxchg8b = { "cmpxchg8b", "cmpxchg8b", Mq, XX, XX }, +Ia_cmpxchgb_Eb_Gb = { "cmpxchg", "cmpxchgb", Eb, Gb, XX }, +Ia_cmpxchgl_Ed_Gd = { "cmpxchg", "cmpxchgl", Ed, Gd, XX }, +Ia_cmpxchgq_Eq_Gq = { "cmpxchg", "cmpxchgq", Eq, Gq, XX }, +Ia_cmpxchgw_Ew_Gw = { "cmpxchg", "cmpxchgw", Ew, Gw, XX }, +Ia_comisd_Vsd_Wsd = { "comisd", "comisd", Vsd, Wsd, XX }, +Ia_comiss_Vss_Wss = { "comiss", "comiss", Vss, Wss, XX }, +Ia_cpuid = { "cpuid", "cpuid", XX, XX, XX }, +Ia_cqo = { "cqo", "cqto", XX, XX, XX }, +Ia_cvtdq2pd_Vpd_Wq = { "cvtdq2pd", "cvtdq2pd", Vpd, Wq, XX }, +Ia_cvtdq2ps_Vps_Wdq = { "cvtdq2ps", "cvtdq2ps", Vps, Wdq, XX }, +Ia_cvtpd2dq_Vq_Wpd = { "cvtpd2dq", "cvtpd2dq", Vq, Wpd, XX }, +Ia_cvtpd2pi_Pq_Wpd = { "cvtpd2pi", "cvtpd2pi", Pq, Wpd, XX }, +Ia_cvtpd2ps_Vps_Wpd = { "cvtpd2ps", "cvtpd2ps", Vps, Wpd, XX }, +Ia_cvtpi2pd_Vpd_Qq = { "cvtpi2pd", "cvtpi2pd", Vpd, Qq, XX }, +Ia_cvtpi2ps_Vps_Qq = { "cvtpi2ps", "cvtpi2ps", Vps, Qq, XX }, +Ia_cvtps2dq_Vdq_Wps = { "cvtps2dq", "cvtps2dq", Vdq, Wps, XX }, +Ia_cvtps2pd_Vpd_Wps = { "cvtps2pd", "cvtps2pd", Vpd, Wps, XX }, +Ia_cvtps2pi_Pq_Wps = { "cvtps2pi", "cvtps2pi", Pq, Wps, XX }, +Ia_cvtsd2si_Gd_Wsd = { "cvtsd2si", "cvtsd2si", Gd, Wsd, XX }, +Ia_cvtsd2si_Gq_Wsd = { "cvtsd2si", "cvtsd2si", Gq, Wsd, XX }, +Ia_cvtsd2ss_Vss_Wsd = { "cvtsd2ss", "cvtsd2ss", Vss, Wsd, XX }, +Ia_cvtsi2sd_Vsd_Ed = { "cvtsi2sd", "cvtsi2sd", Vsd, Ed, XX }, +Ia_cvtsi2sd_Vsd_Eq = { "cvtsi2sd", "cvtsi2sd", Vsd, Eq, XX }, +Ia_cvtsi2ss_Vss_Ed = { "cvtsi2ss", "cvtsi2ss", Vss, Ed, XX }, +Ia_cvtsi2ss_Vss_Eq = { "cvtsi2ss", "cvtsi2ss", Vss, Eq, XX }, +Ia_cvtss2sd_Vsd_Wss = { "cvtss2sd", "cvtss2sd", Vsd, Wss, XX }, +Ia_cvtss2si_Gd_Wss = { "cvtss2si", "cvtss2si", Gd, Wss, XX }, +Ia_cvtss2si_Gq_Wss = { "cvtss2si", "cvtss2si", Gq, Wss, XX }, +Ia_cvttpd2dq_Vq_Wpd = { "cvttpd2dq", "cvttpd2dq", Vq, Wpd, XX }, +Ia_cvttpd2pi_Pq_Wpd = { "cvttpd2pi", "cvttpd2pi", Pq, Wpd, XX }, +Ia_cvttps2dq_Vdq_Wps = { "cvttps2dq", "cvttps2dq", Vdq, Wps, XX }, +Ia_cvttps2pi_Pq_Wps = { "cvttps2pi", "cvttps2pi", Pq, Wps, XX }, +Ia_cvttsd2si_Gd_Wsd = { "cvttsd2si", "cvttsd2si", Gd, Wsd, XX }, +Ia_cvttsd2si_Gq_Wsd = { "cvttsd2si", "cvttsd2si", Gq, Wsd, XX }, +Ia_cvttss2si_Gd_Wss = { "cvttss2si", "cvttss2si", Gd, Wss, XX }, +Ia_cvttss2si_Gq_Wss = { "cvttss2si", "cvttss2si", Gq, Wss, XX }, +Ia_cwd = { "cwd", "cwtd", XX, XX, XX }, +Ia_cwde = { "cwde", "cwtl", XX, XX, XX }, +Ia_daa = { "daa", "daa", XX, XX, XX }, +Ia_das = { "das", "das", XX, XX, XX }, +Ia_decb_Eb = { "dec", "decb", Eb, XX, XX }, +Ia_decl_Ed = { "dec", "decl", Ed, XX, XX }, +Ia_decl_ERX = { "dec", "decl", ERX, XX, XX }, +Ia_decq_Eq = { "dec", "decq", Eq, XX, XX }, +Ia_decw_Ew = { "dec", "decw", Ew, XX, XX }, +Ia_decw_RX = { "dec", "decw", RX, XX, XX }, +Ia_divb_AL_Eb = { "div", "divb", AL, Eb, XX }, +Ia_divl_EAX_Ed = { "div", "divl", EAX, Ed, XX }, +Ia_divpd_Vpd_Wpd = { "divpd", "divpd", Vpd, Wpd, XX }, +Ia_divps_Vps_Wps = { "divps", "divps", Vps, Wps, XX }, +Ia_divq_RAX_Eq = { "div", "divq", RAX, Eq, XX }, +Ia_divsd_Vsd_Wsd = { "divsd", "divsd", Vsd, Wsd, XX }, +Ia_divss_Vss_Wss = { "divss", "divss", Vss, Wss, XX }, +Ia_divw_AX_Ew = { "div", "divw", AX, Ew, XX }, +Ia_emms = { "emms", "emms", XX, XX, XX }, +Ia_enter = { "enter", "enter", IwIb, XX, XX }, +Ia_error = { "(error)", "(error)", XX, XX, XX }, +Ia_f2xm1 = { "f2xm1", "f2xm1", XX, XX, XX }, +Ia_fabs = { "fabs", "fabs", XX, XX, XX }, +Ia_fadd_ST0_STi = { "fadd", "fadd", ST0, STi, XX }, +Ia_fadd_STi_ST0 = { "fadd", "fadd", STi, ST0, XX }, +Ia_faddl_Mq = { "fadd", "faddl", Mq, XX, XX }, +Ia_faddp_STi_ST0 = { "faddp", "faddp", STi, ST0, XX }, +Ia_fadds_Md = { "fadd", "fadds", Md, XX, XX }, +Ia_fbldt_Mt = { "fbld", "fbldt", Mt, XX, XX }, +Ia_fbstpt_Mt = { "fbstp", "fbstpt", Mt, XX, XX }, +Ia_fchs = { "fchs", "fchs", XX, XX, XX }, +Ia_fcmovb_ST0_STi = { "fcmovb", "fcmovb", ST0, STi, XX }, +Ia_fcmovbe_ST0_STi = { "fcmovbe", "fcmovbe", ST0, STi, XX }, +Ia_fcmove_ST0_STi = { "fcmove", "fcmove", ST0, STi, XX }, +Ia_fcmovnb_ST0_STi = { "fcmovnb", "fcmovnb", ST0, STi, XX }, +Ia_fcmovnbe_ST0_STi = { "fcmovnbe", "fcmovnbe", ST0, STi, XX }, +Ia_fcmovne_ST0_STi = { "fcmovne", "fcmovne", ST0, STi, XX }, +Ia_fcmovnu_ST0_STi = { "fcmovnu", "fcmovnu", ST0, STi, XX }, +Ia_fcmovu_ST0_STi = { "fcmovu", "fcmovu", ST0, STi, XX }, +Ia_fcom_STi = { "fcom", "fcom", STi, XX, XX }, +Ia_fcomi_ST0_STi = { "fcomi", "fcomi", ST0, STi, XX }, +Ia_fcomip_ST0_STi = { "fcomip", "fcomip", ST0, STi, XX }, +Ia_fcoml_Mq = { "fcom", "fcoml", Mq, XX, XX }, +Ia_fcomp_STi = { "fcomp", "fcomp", STi, XX, XX }, +Ia_fcompl_Mq = { "fcomp", "fcompl", Mq, XX, XX }, +Ia_fcompp = { "fcompp", "fcompp", XX, XX, XX }, +Ia_fcomps_Md = { "fcomp", "fcomps", Md, XX, XX }, +Ia_fcoms_Md = { "fcom", "fcoms", Md, XX, XX }, +Ia_fcos = { "fcos", "fcos", XX, XX, XX }, +Ia_fdecstp = { "fdecstp", "fdecstp", XX, XX, XX }, +Ia_fdisi = { "fdisi (287 legacy)", "fdisi (287 legacy)", XX, XX, XX }, +Ia_fdiv_ST0_STi = { "fdiv", "fdiv", ST0, STi, XX }, +Ia_fdiv_STi_ST0 = { "fdiv", "fdiv", STi, ST0, XX }, +Ia_fdivl_Mq = { "fdiv", "fdivl", Mq, XX, XX }, +Ia_fdivp_STi_ST0 = { "fdivp", "fdivp", STi, ST0, XX }, +Ia_fdivr_ST0_STi = { "fdivr", "fdivr", ST0, STi, XX }, +Ia_fdivr_STi_ST0 = { "fdivr", "fdivr", STi, ST0, XX }, +Ia_fdivrl_Mq = { "fdivr", "fdivrl", Mq, XX, XX }, +Ia_fdivrp_STi_ST0 = { "fdivrp", "fdivrp", STi, ST0, XX }, +Ia_fdivrs_Md = { "fdivr", "fdivrs", Md, XX, XX }, +Ia_fdivs_Md = { "fdiv", "fdivs", Md, XX, XX }, +Ia_femms = { "femms", "femms", XX, XX, XX }, +Ia_feni = { "feni (287 legacy)", "feni(287 legacy)", XX, XX, XX }, +Ia_ffree_STi = { "ffree", "ffree", STi, XX, XX }, +Ia_ffreep_STi = { "ffreep", "ffreep", STi, XX, XX }, +Ia_fiaddl_Md = { "fiadd", "fiaddl", Md, XX, XX }, +Ia_fiadds_Mw = { "fiadd", "fiadds", Mw, XX, XX }, +Ia_ficoml_Md = { "ficom", "ficoml", Md, XX, XX }, +Ia_ficompl_Md = { "ficomp", "ficompl", Md, XX, XX }, +Ia_ficomps_Mw = { "ficomp", "ficomps", Mw, XX, XX }, +Ia_ficoms_Mw = { "ficom", "ficoms", Mw, XX, XX }, +Ia_fidivl_Md = { "fidiv", "fidivl", Md, XX, XX }, +Ia_fidivrl_Md = { "fidivr", "fidivrl", Md, XX, XX }, +Ia_fidivrs_Mw = { "fidivr", "fidivrs", Mw, XX, XX }, +Ia_fidivs_Mw = { "fidiv", "fidivs", Mw, XX, XX }, +Ia_fildl_Md = { "fild", "fildl", Md, XX, XX }, +Ia_fildq_Mq = { "fild", "fildq", Mq, XX, XX }, +Ia_filds_Mw = { "fild", "filds", Mw, XX, XX }, +Ia_fimull_Md = { "fimul", "fimull", Md, XX, XX }, +Ia_fimuls_Mw = { "fimul", "fimuls", Mw, XX, XX }, +Ia_fincstp = { "fincstp", "fincstp", XX, XX, XX }, +Ia_fistl_Md = { "fist", "fistl", Md, XX, XX }, +Ia_fistpl_Md = { "fistp", "fistpl", Md, XX, XX }, +Ia_fistpq_Mq = { "fistp", "fistpq", Mq, XX, XX }, +Ia_fistps_Mw = { "fistp", "fistps", Mw, XX, XX }, +Ia_fists_Mw = { "fist", "fists", Mw, XX, XX }, +Ia_fisttpl_Md = { "fisttp", "fisttpl", Md, XX, XX }, +Ia_fisttpq_Mq = { "fisttp", "fisttpq", Mq, XX, XX }, +Ia_fisttps_Mw = { "fisttp", "fisttps", Mw, XX, XX }, +Ia_fisubl_Md = { "fisub", "fisubl", Md, XX, XX }, +Ia_fisubrl_Md = { "fisubr", "fisubrl", Md, XX, XX }, +Ia_fisubrs_Mw = { "fisubr", "fisubrs", Mw, XX, XX }, +Ia_fisubs_Mw = { "fisub", "fisubs", Mw, XX, XX }, +Ia_fld_STi = { "fld", "fld", STi, XX, XX }, +Ia_fld1 = { "fld1", "fld1", XX, XX, XX }, +Ia_fldcw = { "fldcw", "fldcw", Ew, XX, XX }, +Ia_fldenv = { "fldenv", "fldenv", Mx, XX, XX }, +Ia_fldl_Mq = { "fld", "fldl", Mq, XX, XX }, +Ia_fldl2e = { "fldl2e", "fldl2e", XX, XX, XX }, +Ia_fldl2t = { "fldl2t", "fldl2t", XX, XX, XX }, +Ia_fldlg2 = { "fldlg2", "fldlg2", XX, XX, XX }, +Ia_fldln2 = { "fldln2", "fldln2", XX, XX, XX }, +Ia_fldpi = { "fldpi", "fldpi", XX, XX, XX }, +Ia_flds_Md = { "fld", "flds", Md, XX, XX }, +Ia_fldt_Mt = { "fld", "fldt", Mt, XX, XX }, +Ia_fldz = { "fldz", "fldz", XX, XX, XX }, +Ia_fmul_ST0_STi = { "fmul", "fmul", ST0, STi, XX }, +Ia_fmul_STi_ST0 = { "fmul", "fmul", STi, ST0, XX }, +Ia_fmull_Mq = { "fmul", "fmull", Mq, XX, XX }, +Ia_fmulp_STi_ST0 = { "fmulp", "fmulp", STi, ST0, XX }, +Ia_fmuls_Md = { "fmul", "fmuls", Md, XX, XX }, +Ia_fnclex = { "fnclex", "fnclex", XX, XX, XX }, +Ia_fninit = { "fninit", "fninit", XX, XX, XX }, +Ia_fnop = { "fnop", "fnop", XX, XX, XX }, +Ia_fnsave = { "fnsave", "fnsave", Mx, XX, XX }, +Ia_fnstcw = { "fnstcw", "fnstcw", Mw, XX, XX }, +Ia_fnstenv = { "fnstenv", "fnstenv", Mx, XX, XX }, +Ia_fnstsw = { "fnstsw", "fnstsw", Mw, XX, XX }, +Ia_fnstsw_AX = { "fnstsw", "fnstsw", AX, XX, XX }, +Ia_fpatan = { "fpatan", "fpatan", XX, XX, XX }, +Ia_fprem = { "fprem", "fprem", XX, XX, XX }, +Ia_fprem1 = { "fprem1", "fprem1", XX, XX, XX }, +Ia_fptan = { "fptan", "fptan", XX, XX, XX }, +Ia_frndint = { "frndint", "frndint", XX, XX, XX }, +Ia_frstor = { "frstor", "frstor", Mx, XX, XX }, +Ia_fscale = { "fscale", "fscale", XX, XX, XX }, +Ia_fsetpm = { "fsetpm (287 legacy)", "fsetpm (287 legacy)", XX, XX, XX }, +Ia_fsin = { "fsin", "fsin", XX, XX, XX }, +Ia_fsincos = { "fsincos", "fsincos", XX, XX, XX }, +Ia_fsqrt = { "fsqrt", "fsqrt", XX, XX, XX }, +Ia_fst_STi = { "fst", "fst", STi, XX, XX }, +Ia_fstl_Mq = { "fst", "fstl", Mq, XX, XX }, +Ia_fstp_STi = { "fstp", "fstp", STi, XX, XX }, +Ia_fstpl_Mq = { "fstp", "fstpl", Mq, XX, XX }, +Ia_fstps_Md = { "fstp", "fstps", Md, XX, XX }, +Ia_fstpt_Mt = { "fstp", "fstpt", Mt, XX, XX }, +Ia_fsts_Md = { "fst", "fsts", Md, XX, XX }, +Ia_fsub_ST0_STi = { "fsub", "fsub", ST0, STi, XX }, +Ia_fsub_STi_ST0 = { "fsub", "fsub", STi, ST0, XX }, +Ia_fsubl_Mq = { "fsub", "fsubl", Mq, XX, XX }, +Ia_fsubp_STi_ST0 = { "fsubp", "fsubp", STi, ST0, XX }, +Ia_fsubr_ST0_STi = { "fsubr", "fsubr", ST0, STi, XX }, +Ia_fsubr_STi_ST0 = { "fsubr", "fsubr", STi, ST0, XX }, +Ia_fsubrl_Mq = { "fsubr", "fsubrl", Mq, XX, XX }, +Ia_fsubrp_STi_ST0 = { "fsubrp", "fsubrp", STi, ST0, XX }, +Ia_fsubrs_Md = { "fsubr", "fsubrs", Md, XX, XX }, +Ia_fsubs_Md = { "fsub", "fsubs", Md, XX, XX }, +Ia_ftst = { "ftst", "ftst", XX, XX, XX }, +Ia_fucom_STi = { "fucom", "fucom", STi, XX, XX }, +Ia_fucomi_ST0_STi = { "fucomi", "fucomi", ST0, STi, XX }, +Ia_fucomip_ST0_STi = { "fucomip", "fucomip", ST0, STi, XX }, +Ia_fucomp_STi = { "fucomp", "fucomp", STi, XX, XX }, +Ia_fucompp = { "fucompp", "fucompp", XX, XX, XX }, +Ia_fwait = { "fwait", "fwait", XX, XX, XX }, +Ia_fxam = { "fxam", "fxam", XX, XX, XX }, +Ia_fxch = { "fxch", "fxch", STi, XX, XX }, +Ia_fxrstor = { "fxrstor", "fxrstor", Mx, XX, XX }, +Ia_fxsave = { "fxsave", "fxsave", Mx, XX, XX }, +Ia_fxtract = { "fxtract", "fxtract", XX, XX, XX }, +Ia_fyl2x = { "fyl2x", "fyl2x", XX, XX, XX }, +Ia_fyl2xp1 = { "fyl2xp1", "fyl2xp1", XX, XX, XX }, +Ia_haddpd_Vpd_Wpd = { "haddpd", "haddpd", Vpd, Wpd, XX }, +Ia_haddps_Vps_Wps = { "haddps", "haddps", Vps, Wps, XX }, +Ia_hlt = { "hlt", "hlt", XX, XX, XX }, +Ia_hsubpd_Vpd_Wpd = { "hsubpd", "hsubpd", Vpd, Wpd, XX }, +Ia_hsubps_Vps_Wps = { "hsubps", "hsubps", Vps, Wps, XX }, +Ia_idivb_AL_Eb = { "idiv", "idivb", AL, Eb, XX }, +Ia_idivl_EAX_Ed = { "idiv", "idivl", EAX, Ed, XX }, +Ia_idivq_RAX_Eq = { "idiv", "idivq", RAX, Eq, XX }, +Ia_idivw_AX_Ew = { "idiv", "idivw", AX, Ew, XX }, +Ia_imulb_AL_Eb = { "imul", "imulb", AL, Eb, XX }, +Ia_imull_EAX_Ed = { "imul", "imull", EAX, Ed, XX }, +Ia_imull_Gd_Ed = { "imul", "imull", Gd, Ed, XX }, +Ia_imull_Gd_Ed_Id = { "imul", "imull", Gd, Ed, Id }, +Ia_imull_Gd_Ed_sIb = { "imul", "imull", Gd, Ed, sIbd }, +Ia_imulq_Gq_Eq = { "imul", "imulq", Gq, Eq, XX }, +Ia_imulq_Gq_Eq_sIb = { "imul", "imulq", Gq, Eq, sIbq }, +Ia_imulq_Gq_Eq_sId = { "imul", "imulq", Gq, Eq, sIdq }, +Ia_imulq_RAX_Eq = { "imul", "imulq", RAX, Eq, XX }, +Ia_imulw_AX_Ew = { "imul", "imulw", AX, Ew, XX }, +Ia_imulw_Gw_Ew = { "imul", "imulw", Gw, Ew, XX }, +Ia_imulw_Gw_Ew_Iw = { "imul", "imulw", Gw, Ew, Iw }, +Ia_imulw_Gw_Ew_sIb = { "imul", "imulw", Gw, Ew, sIbw }, +Ia_inb_AL_DX = { "in", "inb", AL, DX, XX }, +Ia_inb_AL_Ib = { "in", "inb", AL, Ib, XX }, +Ia_incb_Eb = { "inc", "incb", Eb, XX, XX }, +Ia_incl_Ed = { "inc", "incl", Ed, XX, XX }, +Ia_incl_ERX = { "inc", "incl", ERX, XX, XX }, +Ia_incq_Eq = { "inc", "incq", Eq, XX, XX }, +Ia_incw_Ew = { "inc", "incw", Ew, XX, XX }, +Ia_incw_RX = { "inc", "incw", RX, XX, XX }, +Ia_inl_EAX_DX = { "in", "inl", EAX, DX, XX }, +Ia_inl_EAX_Ib = { "in", "inl", EAX, Ib, XX }, +Ia_insb_Yb_DX = { "insb", "insb", Yb, DX, XX }, +Ia_insl_Yd_DX = { "insd", "insl", Yd, DX, XX }, +Ia_insw_Yw_DX = { "insw", "insw", Yw, DX, XX }, +Ia_int_Ib = { "int", "int", Ib, XX, XX }, +Ia_int1 = { "int1", "int1", XX, XX, XX }, +Ia_int3 = { "int3", "int3", XX, XX, XX }, +Ia_into = { "into", "into", XX, XX, XX }, +Ia_Invalid = { "(invalid)", "(invalid)", XX, XX, XX }, +Ia_invd = { "invd", "invd", XX, XX, XX }, +Ia_invlpg = { "invlpg", "invlpg", Mx, XX, XX }, +Ia_inw_AX_DX = { "in", "inw", AX, DX, XX }, +Ia_inw_AX_Ib = { "in", "inw", AX, Ib, XX }, +Ia_iretl = { "iretd", "iretd", XX, XX, XX }, +Ia_iretq = { "iretq", "iretq", XX, XX, XX }, +Ia_iretw = { "iret", "iretw", XX, XX, XX }, +Ia_jb_Jb = { "jb", "jb", Jb, XX, XX }, +Ia_jb_Jd = { "jb", "jb", Jd, XX, XX }, +Ia_jb_Jw = { "jb", "jb", Jw, XX, XX }, +Ia_jbe_Jb = { "jbe", "jbe", Jb, XX, XX }, +Ia_jbe_Jd = { "jbe", "jbe", Jd, XX, XX }, +Ia_jbe_Jw = { "jbe", "jbe", Jw, XX, XX }, +Ia_jcxz_Jb = { "jcxz", "jcxz", Jb, XX, XX }, +Ia_jecxz_Jb = { "jecxz", "jecxz", Jb, XX, XX }, +Ia_jl_Jb = { "jl", "jl", Jb, XX, XX }, +Ia_jl_Jd = { "jl", "jl", Jd, XX, XX }, +Ia_jl_Jw = { "jl", "jl", Jw, XX, XX }, +Ia_jle_Jb = { "jle", "jle", Jb, XX, XX }, +Ia_jle_Jd = { "jle", "jle", Jd, XX, XX }, +Ia_jle_Jw = { "jle", "jle", Jw, XX, XX }, +Ia_jmp_Ed = { "jmp", "jmp", Ed, XX, XX }, +Ia_jmp_Eq = { "jmp", "jmp", Eq, XX, XX }, +Ia_jmp_Ew = { "jmp", "jmp", Ew, XX, XX }, +Ia_jmp_Jb = { "jmp", "jmp", Jb, XX, XX }, +Ia_jmp_Jd = { "jmp", "jmp", Jd, XX, XX }, +Ia_jmp_Jw = { "jmp", "jmp", Jw, XX, XX }, +Ia_jnb_Jb = { "jnb", "jnb", Jb, XX, XX }, +Ia_jnb_Jd = { "jnb", "jnb", Jd, XX, XX }, +Ia_jnb_Jw = { "jnb", "jnb", Jw, XX, XX }, +Ia_jnbe_Jb = { "jnbe", "jnbe", Jb, XX, XX }, +Ia_jnbe_Jd = { "jnbe", "jnbe", Jd, XX, XX }, +Ia_jnbe_Jw = { "jnbe", "jnbe", Jw, XX, XX }, +Ia_jnl_Jb = { "jnl", "jnl", Jb, XX, XX }, +Ia_jnl_Jd = { "jnl", "jnl", Jd, XX, XX }, +Ia_jnl_Jw = { "jnl", "jnl", Jw, XX, XX }, +Ia_jnle_Jb = { "jnle", "jnle", Jb, XX, XX }, +Ia_jnle_Jd = { "jnle", "jnle", Jd, XX, XX }, +Ia_jnle_Jw = { "jnle", "jnle", Jw, XX, XX }, +Ia_jno_Jb = { "jno", "jno", Jb, XX, XX }, +Ia_jno_Jd = { "jno", "jno", Jd, XX, XX }, +Ia_jno_Jw = { "jno", "jno", Jw, XX, XX }, +Ia_jnp_Jb = { "jnp", "jnp", Jb, XX, XX }, +Ia_jnp_Jd = { "jnp", "jnp", Jd, XX, XX }, +Ia_jnp_Jw = { "jnp", "jnp", Jw, XX, XX }, +Ia_jns_Jb = { "jns", "jns", Jb, XX, XX }, +Ia_jns_Jd = { "jns", "jns", Jd, XX, XX }, +Ia_jns_Jw = { "jns", "jns", Jw, XX, XX }, +Ia_jnz_Jb = { "jnz", "jnz", Jb, XX, XX }, +Ia_jnz_Jd = { "jnz", "jnz", Jd, XX, XX }, +Ia_jnz_Jw = { "jnz", "jnz", Jw, XX, XX }, +Ia_jo_Jb = { "jo", "jo", Jb, XX, XX }, +Ia_jo_Jd = { "jo", "jo", Jd, XX, XX }, +Ia_jo_Jw = { "jo", "jo", Jw, XX, XX }, +Ia_jp_Jb = { "jp", "jp", Jb, XX, XX }, +Ia_jp_Jd = { "jp", "jp", Jd, XX, XX }, +Ia_jp_Jw = { "jp", "jp", Jw, XX, XX }, +Ia_jrcxz_Jb = { "jrcxz", "jrcxz", Jb, XX, XX }, +Ia_js_Jb = { "js", "js", Jb, XX, XX }, +Ia_js_Jd = { "js", "js", Jd, XX, XX }, +Ia_js_Jw = { "js", "js", Jw, XX, XX }, +Ia_jz_Jb = { "jz", "jz", Jb, XX, XX }, +Ia_jz_Jd = { "jz", "jz", Jd, XX, XX }, +Ia_jz_Jw = { "jz", "jz", Jw, XX, XX }, +Ia_lahf = { "lahf", "lahf", XX, XX, XX }, +Ia_larl_Gd_Ew = { "lar", "larl", Gd, Ew, XX }, +Ia_larq_Gq_Ew = { "lar", "larq", Gq, Ew, XX }, +Ia_larw_Gw_Ew = { "lar", "larw", Gw, Ew, XX }, +Ia_lcall_Apd = { "call far", "lcall", Apd, XX, XX }, +Ia_lcall_Apw = { "call far", "lcall", Apw, XX, XX }, +Ia_lcall_Mp = { "call far", "lcall", Mp, XX, XX }, +Ia_lddqu_Vdq_Mdq = { "lddqu", "lddqu", Vdq, Mdq, XX }, +Ia_ldmxcsr = { "ldmxcsr", "ldmxcsr", Md, XX, XX }, +Ia_ldsl_Gd_Mp = { "lds", "ldsl", Gd, Mp, XX }, +Ia_ldsw_Gw_Mp = { "lds", "ldsw", Gw, Mp, XX }, +Ia_leal_Gd_Md = { "lea", "leal", Gd, Md, XX }, +Ia_leaq_Gq_Mq = { "lea", "leaq", Gq, Mq, XX }, +Ia_leave = { "leave", "leave", XX, XX, XX }, +Ia_leaw_Gw_Mw = { "lea", "leaw", Gw, Mw, XX }, +Ia_lesl_Gd_Mp = { "les", "lesl", Gd, Mp, XX }, +Ia_lesw_Gw_Mp = { "les", "lesw", Gw, Mp, XX }, +Ia_lfence = { "lfence", "lfence", XX, XX, XX }, +Ia_lfsl_Gd_Mp = { "lfs", "lfsl", Gd, Mp, XX }, +Ia_lfsq_Gq_Mp = { "lfs", "lfsq", Gq, Mp, XX }, +Ia_lfsw_Gw_Mp = { "lfs", "lfsw", Gw, Mp, XX }, +Ia_lgdt = { "lgdt", "lgdt", Ms, XX, XX }, +Ia_lgsl_Gd_Mp = { "lgs", "lgsl", Gd, Mp, XX }, +Ia_lgsq_Gq_Mp = { "lgs", "lgsq", Gq, Mp, XX }, +Ia_lgsw_Gw_Mp = { "lgs", "lgsw", Gw, Mp, XX }, +Ia_lidt = { "lidt", "lidt", Ms, XX, XX }, +Ia_ljmp_Apd = { "jmp far", "ljmp", Apd, XX, XX }, +Ia_ljmp_Apw = { "jmp far", "ljmp", Apw, XX, XX }, +Ia_ljmp_Mp = { "jmp far", "ljmp", Mp, XX, XX }, +Ia_lldt = { "lldt", "lldt", Ew, XX, XX }, +Ia_lmsw_Ew = { "lmsw", "lmsw", Ew, XX, XX }, +Ia_lodsb_AL_Xb = { "lodsb", "lodsb", AL, Xb, XX }, +Ia_lodsl_EAX_Xd = { "lodsd", "lodsl", EAX, Xd, XX }, +Ia_lodsq_RAX_Xq = { "lodsq", "lodsq", RAX, Xq, XX }, +Ia_lodsw_AX_Xw = { "lodsw", "lodsw", AX, Xw, XX }, +Ia_loop_Jb = { "loop", "loop", Jb, XX, XX }, +Ia_loope_Jb = { "loope", "loope", Jb, XX, XX }, +Ia_loopne_Jb = { "loopne", "loopne", Jb, XX, XX }, +Ia_lret = { "retf", "lret", XX, XX, XX }, +Ia_lret_Iw = { "retf", "lret", Iw, XX, XX }, +Ia_lsll_Gd_Ew = { "lsl", "lsll", Gd, Ew, XX }, +Ia_lslq_Gq_Ew = { "lsl", "lslq", Gq, Ew, XX }, +Ia_lslw_Gw_Ew = { "lsl", "lslw", Gw, Ew, XX }, +Ia_lssl_Gd_Mp = { "lss", "lssl", Gd, Mp, XX }, +Ia_lssq_Gq_Mp = { "lss", "lssq", Gq, Mp, XX }, +Ia_lssw_Gw_Mp = { "lss", "lssw", Gw, Mp, XX }, +Ia_ltr = { "ltr", "ltr", Ew, XX, XX }, +Ia_maskmovdqu_Vdq_Udq = { "maskmovdqu", "maskmovdqu", Vdq, Udq, XX }, +Ia_maskmovq_Pq_Nq = { "maskmovq", "maskmovq", Pq, Nq, XX }, +Ia_maxpd_Vpd_Wpd = { "maxpd", "maxpd", Vpd, Wpd, XX }, +Ia_maxps_Vps_Wps = { "maxps", "maxps", Vps, Wps, XX }, +Ia_maxsd_Vsd_Wsd = { "maxsd", "maxsd", Vsd, Wsd, XX }, +Ia_maxss_Vss_Wss = { "maxss", "maxss", Vss, Wss, XX }, +Ia_mfence = { "mfence", "mfence", XX, XX, XX }, +Ia_minpd_Vpd_Wpd = { "minpd", "minpd", Vpd, Wpd, XX }, +Ia_minps_Vps_Wps = { "minps", "minps", Vps, Wps, XX }, +Ia_minsd_Vsd_Wsd = { "minsd", "minsd", Vsd, Wsd, XX }, +Ia_minss_Vss_Wss = { "minss", "minss", Vss, Wss, XX }, +Ia_monitor = { "monitor", "monitor", XX, XX, XX }, +Ia_movapd_Vpd_Wpd = { "movapd", "movapd", Vpd, Wpd, XX }, +Ia_movapd_Wpd_Vpd = { "movapd", "movapd", Wpd, Vpd, XX }, +Ia_movaps_Vps_Wps = { "movaps", "movaps", Vps, Wps, XX }, +Ia_movaps_Wps_Vps = { "movaps", "movaps", Wps, Vps, XX }, +Ia_movb_AL_Ob = { "mov", "movb", AL, Ob, XX }, +Ia_movb_Eb_Gb = { "mov", "movb", Eb, Gb, XX }, +Ia_movb_Eb_Ib = { "mov", "movb", Eb, Ib, XX }, +Ia_movb_Gb_Eb = { "mov", "movb", Gb, Eb, XX }, +Ia_movb_Ob_AL = { "mov", "movb", Ob, AL, XX }, +Ia_movb_R8_Ib = { "mov", "movb", R8, Ib, XX }, +Ia_movd_Ed_Pq = { "movd", "movd", Ed, Pq, XX }, +Ia_movd_Ed_Vd = { "movd", "movd", Ed, Vdq, XX }, +Ia_movd_Pq_Ed = { "movd", "movd", Pq, Ed, XX }, +Ia_movd_Vdq_Ed = { "movd", "movd", Vdq, Ed, XX }, +Ia_movddup_Vdq_Wq = { "movddup", "movddup", Vdq, Wq, XX }, +Ia_movdq2q_Pq_Vq = { "movdq2q", "movdq2q", Pq, Vq, XX }, +Ia_movdqa_Vdq_Wdq = { "movdqa", "movdqa", Vdq, Wdq, XX }, +Ia_movdqa_Wdq_Vdq = { "movdqa", "movdqa", Wdq, Vdq, XX }, +Ia_movdqu_Vdq_Wdq = { "movdqu", "movdqu", Vdq, Wdq, XX }, +Ia_movdqu_Wdq_Vdq = { "movdqu", "movdqu", Wdq, Vdq, XX }, +Ia_movhlpd_Vpd_Uq = { "movhlpd", "movhlpd", Vpd, Udq, XX }, +Ia_movhlps_Vps_Uq = { "movhlps", "movhlps", Vps, Udq, XX }, +Ia_movhpd_Mq_Vpd = { "movhpd", "movhpd", Mq, Vpd, XX }, +Ia_movhpd_Vpd_Mq = { "movhpd", "movhpd", Vpd, Mq, XX }, +Ia_movhps_Mq_Vps = { "movhps", "movhps", Mq, Vps, XX }, +Ia_movhps_Vps_Mq = { "movhps", "movhps", Vps, Mq, XX }, +Ia_movl_Cd_Rd = { "mov", "movl", Cd, Rd, XX }, +Ia_movl_Dd_Rd = { "mov", "movl", Dd, Rd, XX }, +Ia_movl_EAX_Od = { "mov", "movl", EAX, Od, XX }, +Ia_movl_Ed_Gd = { "mov", "movl", Ed, Gd, XX }, +Ia_movl_Ed_Id = { "mov", "movl", Ed, Id, XX }, +Ia_movl_ERX_Id = { "mov", "movl", ERX, Id, XX }, +Ia_movl_Gd_Ed = { "mov", "movl", Gd, Ed, XX }, +Ia_movl_Od_EAX = { "mov", "movl", Od, EAX, XX }, +Ia_movl_Rd_Cd = { "mov", "movl", Rd, Cd, XX }, +Ia_movl_Rd_Dd = { "mov", "movl", Rd, Dd, XX }, +Ia_movl_Rd_Td = { "mov", "movl", Rd, Td, XX }, +Ia_movl_Td_Rd = { "mov", "movl", Td, Rd, XX }, +Ia_movlhpd_Vpd_Uq = { "movlhpd", "movlhpd", Vpd, Udq, XX }, +Ia_movlhps_Vps_Uq = { "movlhps", "movlhps", Vps, Udq, XX }, +Ia_movlpd_Mq_Vpd = { "movlpd", "movlpd", Mq, Vpd, XX }, +Ia_movlpd_Vpd_Mq = { "movlpd", "movlpd", Vpd, Mq, XX }, +Ia_movlps_Mq_Vps = { "movlps", "movlps", Mq, Vps, XX }, +Ia_movlps_Vps_Mq = { "movlps", "movlps", Vps, Mq, XX }, +Ia_movmskpd_Gd_Vpd = { "movmskpd", "movmskpd", Gd, Vpd, XX }, +Ia_movmskps_Gd_Vps = { "movmskps", "movmskps", Gd, Vps, XX }, +Ia_movntdq_Mdq_Vdq = { "movntdq", "movntdq", Mdq, Vdq, XX }, +Ia_movnti_Md_Gd = { "movnti", "movnti", Md, Gd, XX }, +Ia_movntiq_Mq_Gq = { "movntiq", "movntiq", Mq, Gq, XX }, +Ia_movntpd_Mpd_Vpd = { "movntpd", "movntpd", Mpd, Vpd, XX }, +Ia_movntps_Mps_Vps = { "movntps", "movntps", Mps, Vps, XX }, +Ia_movntq_Mq_Pq = { "movntq", "movntq", Mq, Pq, XX }, +Ia_movq_Cq_Rq = { "mov", "movq", Cq, Rq, XX }, +Ia_movq_Dq_Rq = { "mov", "movq", Dq, Rq, XX }, +Ia_movq_Eq_Gq = { "mov", "movq", Eq, Gq, XX }, +Ia_movq_Eq_Pq = { "movq", "movq", Eq, Pq, XX }, +Ia_movq_Eq_sId = { "mov", "movq", Eq, sIdq, XX }, +Ia_movq_Eq_Vq = { "movq", "movq", Eq, Vq, XX }, +Ia_movq_Gq_Eq = { "mov", "movq", Gq, Eq, XX }, +Ia_movq_Oq_RAX = { "mov", "movq", Oq, RAX, XX }, +Ia_movq_Pq_Eq = { "movq", "movq", Pq, Eq, XX }, +Ia_movq_Pq_Qq = { "movq", "movq", Pq, Qq, XX }, +Ia_movq_Qq_Pq = { "movq", "movq", Qq, Pq, XX }, +Ia_movq_RAX_Oq = { "mov", "movq", RAX, Oq, XX }, +Ia_movq_Rq_Cq = { "mov", "movq", Rq, Cq, XX }, +Ia_movq_Rq_Dq = { "mov", "movq", Rq, Dq, XX }, +Ia_movq_RRX_Iq = { "mov", "movq", RRX, Iq, XX }, +Ia_movq_Vdq_Eq = { "movq", "movq", Vdq, Eq, XX }, +Ia_movq_Vq_Wq = { "movq", "movq", Vq, Wq, XX }, +Ia_movq_Wq_Vq = { "movq", "movq", Wq, Vq, XX }, +Ia_movq2dq_Vdq_Qq = { "movq2dq", "movq2dq", Vdq, Qq, XX }, +Ia_movsb_Yb_Xb = { "movsb", "movsb", Yb, Xb, XX }, +Ia_movsbl_Gd_Eb = { "movsx", "movsbl", Gd, Eb, XX }, +Ia_movsbq_Gq_Eb = { "movsx", "movsbq", Gq, Eb, XX }, +Ia_movsbw_Gw_Eb = { "movsx", "movsbw", Gw, Eb, XX }, +Ia_movsd_Vsd_Wsd = { "movsd", "movsd", Vsd, Wsd, XX }, +Ia_movsd_Wsd_Vsd = { "movsd", "movsd", Wsd, Vsd, XX }, +Ia_movshdup_Vdq_Wdq = { "movshdup", "movshdup", Vdq, Wdq, XX }, +Ia_movsl_Yd_Xd = { "movsd", "movsl", Yd, Xd, XX }, +Ia_movsldup_Vdq_Wdq = { "movsldup", "movsldup", Vdq, Wdq, XX }, +Ia_movslq_Gq_Ed = { "movsxd", "movslq", Gq, Ed, XX }, +Ia_movsq_Yq_Xq = { "movsq", "movsq", Yq, Xq, XX }, +Ia_movss_Vss_Wss = { "movss", "movss", Vss, Wss, XX }, +Ia_movss_Wss_Vss = { "movss", "movss", Wss, Vss, XX }, +Ia_movsw_Yw_Xw = { "movsw", "movsw", Yw, Xw, XX }, +Ia_movswl_Gd_Ew = { "movsx", "movswl", Gd, Ew, XX }, +Ia_movswq_Gq_Ew = { "movsx", "movswq", Gq, Ew, XX }, +Ia_movupd_Vpd_Wpd = { "movupd", "movupd", Vpd, Wpd, XX }, +Ia_movupd_Wpd_Vpd = { "movupd", "movupd", Wpd, Vpd, XX }, +Ia_movups_Vps_Wps = { "movups", "movups", Vps, Wps, XX }, +Ia_movups_Wps_Vps = { "movups", "movups", Wps, Vps, XX }, +Ia_movw_AX_Ow = { "mov", "movw", AX, Ow, XX }, +Ia_movw_Ew_Gw = { "mov", "movw", Ew, Gw, XX }, +Ia_movw_Ew_Iw = { "mov", "movw", Ew, Iw, XX }, +Ia_movw_Ew_Sw = { "mov", "movw", Ew, Sw, XX }, +Ia_movw_Gw_Ew = { "mov", "movw", Gw, Ew, XX }, +Ia_movw_Ow_AX = { "mov", "movw", Ow, AX, XX }, +Ia_movw_RX_Iw = { "mov", "movw", RX, Iw, XX }, +Ia_movw_Sw_Ew = { "mov", "movw", Sw, Ew, XX }, +Ia_movzbl_Gd_Eb = { "movzx", "movzbl", Gd, Eb, XX }, +Ia_movzbq_Gq_Eb = { "movzx", "movzbq", Gq, Eb, XX }, +Ia_movzbw_Gw_Eb = { "movzx", "movzbw", Gw, Eb, XX }, +Ia_movzwl_Gd_Ew = { "movzx", "movzwl", Gd, Ew, XX }, +Ia_movzwq_Gq_Ew = { "movzx", "movzwq", Gq, Ew, XX }, +Ia_mulb_AL_Eb = { "mul", "mulb", AL, Eb, XX }, +Ia_mull_EAX_Ed = { "mul", "mull", EAX, Ed, XX }, +Ia_mulpd_Vpd_Wpd = { "mulpd", "mulpd", Vpd, Wpd, XX }, +Ia_mulps_Vps_Wps = { "mulps", "mulps", Vps, Wps, XX }, +Ia_mulq_RAX_Eq = { "mul", "mulq", RAX, Eq, XX }, +Ia_mulsd_Vsd_Wsd = { "mulsd", "mulsd", Vsd, Wsd, XX }, +Ia_mulss_Vss_Wss = { "mulss", "mulss", Vss, Wss, XX }, +Ia_multibyte_nop = { "multibyte nop", "multibyte nop", XX, XX, XX }, +Ia_mulw_AX_Ew = { "mul", "mulw", AX, Ew, XX }, +Ia_mwait = { "mwait", "mwait", XX, XX, XX }, +Ia_negb_Eb = { "neg", "negb", Eb, XX, XX }, +Ia_negl_Ed = { "neg", "negl", Ed, XX, XX }, +Ia_negq_Eq = { "neg", "negq", Eq, XX, XX }, +Ia_negw_Ew = { "neg", "negw", Ew, XX, XX }, +Ia_nop = { "nop", "nop", XX, XX, XX }, +Ia_notb_Eb = { "not", "notb", Eb, XX, XX }, +Ia_notl_Ed = { "not", "notl", Ed, XX, XX }, +Ia_notq_Eq = { "not", "notq", Eq, XX, XX }, +Ia_notw_Ew = { "not", "notw", Ew, XX, XX }, +Ia_orb_AL_Ib = { "or", "orb", AL, Ib, XX }, +Ia_orb_Eb_Gb = { "or", "orb", Eb, Gb, XX }, +Ia_orb_Eb_Ib = { "or", "orb", Eb, Ib, XX }, +Ia_orb_Gb_Eb = { "or", "orb", Gb, Eb, XX }, +Ia_orl_EAX_Id = { "or", "orl", EAX, Id, XX }, +Ia_orl_Ed_Gd = { "or", "orl", Ed, Gd, XX }, +Ia_orl_Ed_Id = { "or", "orl", Ed, Id, XX }, +Ia_orl_Ed_sIb = { "or", "orl", Ed, sIbd, XX }, +Ia_orl_Gd_Ed = { "or", "orl", Gd, Ed, XX }, +Ia_orpd_Vpd_Wpd = { "orpd", "orpd", Vpd, Wpd, XX }, +Ia_orps_Vps_Wps = { "orps", "orps", Vps, Wps, XX }, +Ia_orq_Eq_Gq = { "or", "orq", Eq, Gq, XX }, +Ia_orq_Eq_sIb = { "or", "orq", Eq, sIbq, XX }, +Ia_orq_Eq_sId = { "or", "orq", Eq, sIdq, XX }, +Ia_orq_Gq_Eq = { "or", "orq", Gq, Eq, XX }, +Ia_orq_RAX_sId = { "or", "orq", RAX, sIdq, XX }, +Ia_orw_AX_Iw = { "or", "orw", AX, Iw, XX }, +Ia_orw_Ew_Gw = { "or", "orw", Ew, Gw, XX }, +Ia_orw_Ew_Iw = { "or", "orw", Ew, Iw, XX }, +Ia_orw_Ew_sIb = { "or", "orw", Ew, sIbw, XX }, +Ia_orw_Gw_Ew = { "or", "orw", Gw, Ew, XX }, +Ia_outb_DX_AL = { "out", "outb", DX, AL, XX }, +Ia_outb_Ib_AL = { "out", "outb", Ib, AL, XX }, +Ia_outl_DX_EAX = { "out", "outl", DX, EAX, XX }, +Ia_outl_Ib_EAX = { "out", "outl", Ib, EAX, XX }, +Ia_outsb_DX_Xb = { "outsb", "outsb", DX, Xb, XX }, +Ia_outsl_DX_Xd = { "outsd", "outsl", DX, Xd, XX }, +Ia_outsw_DX_Xw = { "outsw", "outsw", DX, Xw, XX }, +Ia_outw_DX_AX = { "out", "outw", DX, AX, XX }, +Ia_outw_Ib_AX = { "out", "outw", Ib, AX, XX }, +Ia_pabsb_Pq_Qq = { "pabsb", "pabsb", Pq, Qq, XX }, +Ia_pabsb_Vdq_Wdq = { "pabsb", "pabsb", Vdq, Wdq, XX }, +Ia_pabsd_Pq_Qq = { "pabsd", "pabsd", Pq, Qq, XX }, +Ia_pabsd_Vdq_Wdq = { "pabsd", "pabsd", Vdq, Wdq, XX }, +Ia_pabsw_Pq_Qq = { "pabsw", "pabsw", Pq, Qq, XX }, +Ia_pabsw_Vdq_Wdq = { "pabsw", "pabsw", Vdq, Wdq, XX }, +Ia_packssdw_Pq_Qq = { "packssdw", "packssdw", Pq, Qq, XX }, +Ia_packssdw_Vdq_Wdq = { "packssdw", "packssdw", Vdq, Wdq, XX }, +Ia_packsswb_Pq_Qq = { "packsswb", "packsswb", Pq, Qq, XX }, +Ia_packsswb_Vdq_Wq = { "packsswb", "packsswb", Vdq, Wq, XX }, +Ia_packuswb_Pq_Qq = { "packuswb", "packuswb", Pq, Qq, XX }, +Ia_packuswb_Vdq_Wdq = { "packuswb", "packuswb", Vdq, Wdq, XX }, +Ia_paddb_Pq_Qq = { "paddb", "paddb", Pq, Qq, XX }, +Ia_paddb_Vdq_Wdq = { "paddb", "paddb", Vdq, Wdq, XX }, +Ia_paddd_Pq_Qq = { "paddd", "paddd", Pq, Qq, XX }, +Ia_paddd_Vdq_Wdq = { "paddd", "paddd", Vdq, Wdq, XX }, +Ia_paddq_Pq_Qq = { "paddq", "paddq", Pq, Qq, XX }, +Ia_paddq_Vdq_Wdq = { "paddq", "paddq", Vdq, Wdq, XX }, +Ia_paddsb_Pq_Qq = { "paddsb", "paddsb", Pq, Qq, XX }, +Ia_paddsb_Vdq_Wdq = { "paddsb", "paddsb", Vdq, Wdq, XX }, +Ia_paddsw_Pq_Qq = { "paddsw", "paddsw", Pq, Qq, XX }, +Ia_paddsw_Vdq_Wdq = { "paddsw", "paddsw", Vdq, Wdq, XX }, +Ia_paddusb_Pq_Qq = { "paddusb", "paddusb", Pq, Qq, XX }, +Ia_paddusb_Vdq_Wdq = { "paddusb", "paddusb", Vdq, Wdq, XX }, +Ia_paddusw_Pq_Qq = { "paddusw", "paddusw", Pq, Qq, XX }, +Ia_paddusw_Vdq_Wdq = { "paddusw", "paddusw", Vdq, Wdq, XX }, +Ia_paddw_Pq_Qq = { "paddw", "paddw", Pq, Qq, XX }, +Ia_paddw_Vdq_Wdq = { "paddw", "paddw", Vdq, Wdq, XX }, +Ia_palignr_Pq_Qq_Ib = { "palignr", "palignr", Pq, Qq, Ib }, +Ia_palignr_Vdq_Wdq_Ib = { "palignr", "palignr", Vdq, Wdq, Ib }, +Ia_pand_Pq_Qq = { "pand", "pand", Pq, Qq, XX }, +Ia_pand_Vdq_Wdq = { "pand", "pand", Vdq, Wdq, XX }, +Ia_pandn_Pq_Qq = { "pandn", "pandn", Pq, Qq, XX }, +Ia_pandn_Vdq_Wdq = { "pandn", "pandn", Vdq, Wdq, XX }, +Ia_pause = { "pause", "pause", XX, XX, XX }, +Ia_pavgb_Pq_Qq = { "pavgb", "pavgb", Pq, Qq, XX }, +Ia_pavgb_Vdq_Wdq = { "pavgb", "pavgb", Vdq, Wdq, XX }, +Ia_pavgw_Pq_Qq = { "pavgw", "pavgw", Pq, Qq, XX }, +Ia_pavgw_Vdq_Wdq = { "pavgw", "pavgw", Vdq, Wdq, XX }, +Ia_pcmpeqb_Pq_Qq = { "pcmpeqb", "pcmpeqb", Pq, Qq, XX }, +Ia_pcmpeqb_Vdq_Wdq = { "pcmpeqb", "pcmpeqb", Vdq, Wdq, XX }, +Ia_pcmpeqd_Pq_Qq = { "pcmpeqd", "pcmpeqd", Pq, Qq, XX }, +Ia_pcmpeqd_Vdq_Wdq = { "pcmpeqd", "pcmpeqd", Vdq, Wdq, XX }, +Ia_pcmpeqw_Pq_Qq = { "pcmpeqw", "pcmpeqw", Pq, Qq, XX }, +Ia_pcmpeqw_Vdq_Wdq = { "pcmpeqw", "pcmpeqw", Vdq, Wdq, XX }, +Ia_pcmpgtb_Pq_Qq = { "pcmpgtb", "pcmpgtb", Pq, Qq, XX }, +Ia_pcmpgtb_Vdq_Wq = { "pcmpgtb", "pcmpgtb", Vdq, Wq, XX }, +Ia_pcmpgtd_Pq_Qq = { "pcmpgtd", "pcmpgtd", Pq, Qq, XX }, +Ia_pcmpgtd_Vdq_Wdq = { "pcmpgtd", "pcmpgtd", Vdq, Wdq, XX }, +Ia_pcmpgtw_Pq_Qq = { "pcmpgtw", "pcmpgtw", Pq, Qq, XX }, +Ia_pcmpgtw_Vdq_Wq = { "pcmpgtw", "pcmpgtw", Vdq, Wq, XX }, +Ia_pextrw_Gd_Nq_Ib = { "pextrw", "pextrw", Gd, Nq, Ib }, +Ia_pextrw_Gd_Udq_Ib = { "pextrw", "pextrw", Gd, Udq, Ib }, +Ia_pf2id_Pq_Qq = { "pf2id", "pf2id", Pq, Qq, XX }, +Ia_pf2iw_Pq_Qq = { "pf2iw", "pf2iw", Pq, Qq, XX }, +Ia_pfacc_Pq_Qq = { "pfacc", "pfacc", Pq, Qq, XX }, +Ia_pfadd_Pq_Qq = { "pfadd", "pfadd", Pq, Qq, XX }, +Ia_pfcmpeq_Pq_Qq = { "pfcmpeq", "pfcmpeq", Pq, Qq, XX }, +Ia_pfcmpge_Pq_Qq = { "pfcmpge", "pfcmpge", Pq, Qq, XX }, +Ia_pfcmpgt_Pq_Qq = { "pfcmpgt", "pfcmpgt", Pq, Qq, XX }, +Ia_pfmax_Pq_Qq = { "pfmax", "pfmax", Pq, Qq, XX }, +Ia_pfmin_Pq_Qq = { "pfmin", "pfmin", Pq, Qq, XX }, +Ia_pfmul_Pq_Qq = { "pfmul", "pfmul", Pq, Qq, XX }, +Ia_pfnacc_Pq_Qq = { "pfnacc", "pfnacc", Pq, Qq, XX }, +Ia_pfpnacc_Pq_Qq = { "pfpnacc", "pfpnacc", Pq, Qq, XX }, +Ia_pfrcp_Pq_Qq = { "pfrcp", "pfrcp", Pq, Qq, XX }, +Ia_pfrcpit1_Pq_Qq = { "pfrcpit1", "pfrcpit1", Pq, Qq, XX }, +Ia_pfrcpit2_Pq_Qq = { "pfrcpit2", "pfrcpit2", Pq, Qq, XX }, +Ia_pfrsqit1_Pq_Qq = { "pfrsqit1", "pfrsqit1", Pq, Qq, XX }, +Ia_pfrsqrt_Pq_Qq = { "pfrsqrt", "pfrsqrt", Pq, Qq, XX }, +Ia_pfsub_Pq_Qq = { "pfsub", "pfsub", Pq, Qq, XX }, +Ia_pfsubr_Pq_Qq = { "pfsubr", "pfsubr", Pq, Qq, XX }, +Ia_phaddd_Pq_Qq = { "phaddd", "phaddd", Pq, Qq, XX }, +Ia_phaddd_Vdq_Wdq = { "phaddd", "phaddd", Vdq, Wdq, XX }, +Ia_phaddsw_Pq_Qq = { "phaddsw", "phaddsw", Pq, Qq, XX }, +Ia_phaddsw_Vdq_Wdq = { "phaddsw", "phaddsw", Vdq, Wdq, XX }, +Ia_phaddw_Pq_Qq = { "phaddw", "phaddw", Pq, Qq, XX }, +Ia_phaddw_Vdq_Wdq = { "phaddw", "phaddw", Vdq, Wdq, XX }, +Ia_phsubd_Pq_Qq = { "phsubd", "phsubd", Pq, Qq, XX }, +Ia_phsubd_Vdq_Wdq = { "phsubd", "phsubd", Vdq, Wdq, XX }, +Ia_phsubsw_Pq_Qq = { "phsubsw", "phsubsw", Pq, Qq, XX }, +Ia_phsubsw_Vdq_Wdq = { "phsubsw", "phsubsw", Vdq, Wdq, XX }, +Ia_phsubw_Pq_Qq = { "phsubw", "phsubw", Pq, Qq, XX }, +Ia_phsubw_Vdq_Wdq = { "phsubw", "phsubw", Vdq, Wdq, XX }, +Ia_pi2fd_Pq_Qq = { "pi2fd", "pi2fd", Pq, Qq, XX }, +Ia_pi2fw_Pq_Qq = { "pi2fw", "pi2fw", Pq, Qq, XX }, +Ia_pinsrw_Pq_Ed_Ib = { "pinsrw", "pinsrw", Pq, Ed, Ib }, +Ia_pinsrw_Vdq_Ed_Ib = { "pinsrw", "pinsrw", Vdq, Ed, Ib }, +Ia_pmaddubsw_Pq_Qq = { "pmaddubsw", "pmaddubsw", Pq, Qq, XX }, +Ia_pmaddubsw_Vdq_Wdq = { "pmaddubsw", "pmaddubsw", Vdq, Wdq, XX }, +Ia_pmaddwd_Pq_Qq = { "pmaddwd", "pmaddwd", Pq, Qq, XX }, +Ia_pmaddwd_Vdq_Wdq = { "pmaddwd", "pmaddwd", Vdq, Wdq, XX }, +Ia_pmaxub_Pq_Qq = { "pmaxub", "pmaxub", Pq, Qq, XX }, +Ia_pmaxub_Vdq_Wdq = { "pmaxub", "pmaxub", Vdq, Wdq, XX }, +Ia_pmaxuw_Pq_Qq = { "pmaxuw", "pmaxuw", Pq, Qq, XX }, +Ia_pmaxuw_Vdq_Wdq = { "pmaxuw", "pmaxuw", Vdq, Wdq, XX }, +Ia_pminsw_Pq_Qq = { "pminsw", "pminsw", Pq, Qq, XX }, +Ia_pminsw_Vdq_Wdq = { "pminsw", "pminsw", Vdq, Wdq, XX }, +Ia_pminub_Pq_Qq = { "pminub", "pminub", Pq, Qq, XX }, +Ia_pminub_Vdq_Wdq = { "pminub", "pminub", Vdq, Wdq, XX }, +Ia_pmovmskb_Gd_Nq = { "pmovmskb", "pmovmskb", Gd, Nq, XX }, +Ia_pmovmskb_Gd_Udq = { "pmovmskb", "pmovmskb", Gd, Udq, XX }, +Ia_pmulhrsw_Pq_Qq = { "pmulhrsw", "pmulhrsw", Pq, Qq, XX }, +Ia_pmulhrsw_Vdq_Wdq = { "pmulhrsw", "pmulhrsw", Vdq, Wdq, XX }, +Ia_pmulhrw_Pq_Qq = { "pmulhrw", "pmulhrw", Pq, Qq, XX }, +Ia_pmulhuw_Pq_Qq = { "pmulhuw", "pmulhuw", Pq, Qq, XX }, +Ia_pmulhuw_Vdq_Wdq = { "pmulhuw", "pmulhuw", Vdq, Wdq, XX }, +Ia_pmulhw_Pq_Qq = { "pmulhw", "pmulhw", Pq, Qq, XX }, +Ia_pmulhw_Vdq_Wdq = { "pmulhw", "pmulhw", Vdq, Wdq, XX }, +Ia_pmullw_Pq_Qq = { "pmullw", "pmullw", Pq, Qq, XX }, +Ia_pmullw_Vdq_Wdq = { "pmullw", "pmullw", Vdq, Wdq, XX }, +Ia_pmuludq_Pq_Qq = { "pmuludq", "pmuludq", Pq, Qq, XX }, +Ia_pmuludq_Vdq_Wdq = { "pmuludq", "pmuludq", Vdq, Wdq, XX }, +Ia_popal = { "popad", "popal", XX, XX, XX }, +Ia_popaw = { "popa", "popa", XX, XX, XX }, +Ia_popfl = { "popfd", "popfl", XX, XX, XX }, +Ia_popfq = { "popfq", "popfq", XX, XX, XX }, +Ia_popfw = { "popf", "popf", XX, XX, XX }, +Ia_popl_DS = { "pop", "popl", DS, XX, XX }, +Ia_popl_Ed = { "pop", "popl", Ed, XX, XX }, +Ia_popl_ERX = { "pop", "popl", ERX, XX, XX }, +Ia_popl_ES = { "pop", "popl", ES, XX, XX }, +Ia_popl_FS = { "pop", "popl", FS, XX, XX }, +Ia_popl_GS = { "pop", "popl", GS, XX, XX }, +Ia_popl_SS = { "pop", "popl", SS, XX, XX }, +Ia_popq_Eq = { "pop", "popq", Eq, XX, XX }, +Ia_popq_FS = { "pop", "popq", FS, XX, XX }, +Ia_popq_GS = { "pop", "popq", GS, XX, XX }, +Ia_popq_RRX = { "pop", "popq", RRX, XX, XX }, +Ia_popw_DS = { "pop", "popw", DS, XX, XX }, +Ia_popw_ES = { "pop", "popw", ES, XX, XX }, +Ia_popw_Ew = { "pop", "popw", Ew, XX, XX }, +Ia_popw_FS = { "pop", "popw", FS, XX, XX }, +Ia_popw_GS = { "pop", "popw", GS, XX, XX }, +Ia_popw_RX = { "pop", "popw", RX, XX, XX }, +Ia_popw_SS = { "pop", "popw", SS, XX, XX }, +Ia_por_Pq_Qq = { "por", "por", Pq, Qq, XX }, +Ia_por_Vdq_Wdq = { "por", "por", Vdq, Wdq, XX }, +Ia_prefetch = { "prefetch (3dnow!)", "prefetch (3dnow!)", Mb, XX, XX }, +Ia_prefetchnta = { "prefetchnta", "prefetchnta", Mb, XX, XX }, +Ia_prefetcht0 = { "prefetcht0", "prefetcht0", Mb, XX, XX }, +Ia_prefetcht1 = { "prefetcht1", "prefetcht1", Mb, XX, XX }, +Ia_prefetcht2 = { "prefetcht2", "prefetcht2", Mb, XX, XX }, +Ia_prefix_asize = { "asize", "asize", XX, XX, XX }, +Ia_prefix_cs = { "cs", "cs", XX, XX, XX }, +Ia_prefix_ds = { "ds", "ds", XX, XX, XX }, +Ia_prefix_es = { "es", "es", XX, XX, XX }, +Ia_prefix_fs = { "fs", "fs", XX, XX, XX }, +Ia_prefix_gs = { "gs", "gs", XX, XX, XX }, +Ia_prefix_lock = { "lock", "lock", XX, XX, XX }, +Ia_prefix_osize = { "osize", "osize", XX, XX, XX }, +Ia_prefix_rep = { "rep", "rep", XX, XX, XX }, +Ia_prefix_repne = { "repne", "repne", XX, XX, XX }, +Ia_prefix_rex = { "rex", "rex", XX, XX, XX }, +Ia_prefix_ss = { "ss", "ss", XX, XX, XX }, +Ia_psadbw_Pq_Qq = { "psadbw", "psadbw", Pq, Qq, XX }, +Ia_psadbw_Vdq_Wdq = { "psadbw", "psadbw", Vdq, Wdq, XX }, +Ia_pshufb_Pq_Qq = { "pshufb", "pshufb", Pq, Qq, XX }, +Ia_pshufb_Vdq_Wdq = { "pshufb", "pshufb", Vdq, Wdq, XX }, +Ia_pshufd_Vdq_Wdq_Ib = { "pshufd", "pshufd", Vdq, Wdq, Ib }, +Ia_pshufhw_Vq_Wq_Ib = { "pshufhw", "pshufhw", Vq, Wq, Ib }, +Ia_pshuflw_Vq_Wq_Ib = { "pshuflw", "pshuflw", Vq, Wq, Ib }, +Ia_pshufw_Pq_Qq_Ib = { "pshufw", "pshufw", Pq, Qq, Ib }, +Ia_psignb_Pq_Qq = { "psignb", "psignb", Pq, Qq, XX }, +Ia_psignb_Vdq_Wdq = { "psignb", "psignb", Vdq, Wdq, XX }, +Ia_psignd_Pq_Qq = { "psignd", "psignd", Pq, Qq, XX }, +Ia_psignd_Vdq_Wdq = { "psignd", "psignd", Vdq, Wdq, XX }, +Ia_psignw_Pq_Qq = { "psignw", "psignw", Pq, Qq, XX }, +Ia_psignw_Vdq_Wdq = { "psignw", "psignw", Vdq, Wdq, XX }, +Ia_pslld_Nq_Ib = { "pslld", "pslld", Nq, Ib, XX }, +Ia_pslld_Pq_Qq = { "pslld", "pslld", Pq, Qq, XX }, +Ia_pslld_Udq_Ib = { "pslld", "pslld", Udq, Ib, XX }, +Ia_pslld_Vdq_Wdq = { "pslld", "pslld", Vdq, Wdq, XX }, +Ia_pslldq_Udq_Ib = { "pslldq", "pslldq", Udq, Ib, XX }, +Ia_psllq_Nq_Ib = { "psllq", "psllq", Nq, Ib, XX }, +Ia_psllq_Pq_Qq = { "psllq", "psllq", Pq, Qq, XX }, +Ia_psllq_Udq_Ib = { "psllq", "psllq", Udq, Ib, XX }, +Ia_psllq_Vdq_Wdq = { "psllq", "psllq", Vdq, Wdq, XX }, +Ia_psllw_Nq_Ib = { "psllw", "psllw", Nq, Ib, XX }, +Ia_psllw_Pq_Qq = { "psllw", "psllw", Pq, Qq, XX }, +Ia_psllw_Udq_Ib = { "psllw", "psllw", Udq, Ib, XX }, +Ia_psllw_Vdq_Wdq = { "psllw", "psllw", Vdq, Wdq, XX }, +Ia_psrad_Nq_Ib = { "psrad", "psrad", Nq, Ib, XX }, +Ia_psrad_Pq_Qq = { "psrad", "psrad", Pq, Qq, XX }, +Ia_psrad_Udq_Ib = { "psrad", "psrad", Udq, Ib, XX }, +Ia_psrad_Vdq_Wdq = { "psrad", "psrad", Vdq, Wdq, XX }, +Ia_psraw_Nq_Ib = { "psraw", "psraw", Nq, Ib, XX }, +Ia_psraw_Pq_Qq = { "psraw", "psraw", Pq, Qq, XX }, +Ia_psraw_Udq_Ib = { "psraw", "psraw", Udq, Ib, XX }, +Ia_psraw_Vdq_Wdq = { "psraw", "psraw", Vdq, Wdq, XX }, +Ia_psrld_Nq_Ib = { "psrld", "psrld", Nq, Ib, XX }, +Ia_psrld_Pq_Qq = { "psrld", "psrld", Pq, Qq, XX }, +Ia_psrld_Udq_Ib = { "psrld", "psrld", Udq, Ib, XX }, +Ia_psrld_Vdq_Wdq = { "psrld", "psrld", Vdq, Wdq, XX }, +Ia_psrldq_Udq_Ib = { "psrldq", "psrldq", Udq, Ib, XX }, +Ia_psrlq_Nq_Ib = { "psrlq", "psrlq", Nq, Ib, XX }, +Ia_psrlq_Pq_Qq = { "psrlq", "psrlq", Pq, Qq, XX }, +Ia_psrlq_Udq_Ib = { "psrlq", "psrlq", Udq, Ib, XX }, +Ia_psrlq_Vdq_Wdq = { "psrlq", "psrlq", Vdq, Wdq, XX }, +Ia_psrlw_Nq_Ib = { "psrlw", "psrlw", Nq, Ib, XX }, +Ia_psrlw_Pq_Qq = { "psrlw", "psrlw", Pq, Qq, XX }, +Ia_psrlw_Udq_Ib = { "psrlw", "psrlw", Udq, Ib, XX }, +Ia_psrlw_Vdq_Wdq = { "psrlw", "psrlw", Vdq, Wdq, XX }, +Ia_psubb_Pq_Qq = { "psubb", "psubb", Pq, Qq, XX }, +Ia_psubb_Vdq_Wdq = { "psubb", "psubb", Vdq, Wdq, XX }, +Ia_psubd_Pq_Qq = { "psubd", "psubd", Pq, Qq, XX }, +Ia_psubd_Vdq_Wdq = { "psubd", "psubd", Vdq, Wdq, XX }, +Ia_psubq_Pq_Qq = { "psubq", "psubq", Pq, Qq, XX }, +Ia_psubq_Vdq_Wdq = { "psubq", "psubq", Vdq, Wdq, XX }, +Ia_psubsb_Pq_Qq = { "psubsb", "psubsb", Pq, Qq, XX }, +Ia_psubsb_Vdq_Wdq = { "psubsb", "psubsb", Vdq, Wdq, XX }, +Ia_psubsw_Pq_Qq = { "psubsw", "psubsw", Pq, Qq, XX }, +Ia_psubsw_Vdq_Wdq = { "psubsw", "psubsw", Vdq, Wdq, XX }, +Ia_psubusb_Pq_Qq = { "psubusb", "psubusb", Pq, Qq, XX }, +Ia_psubusb_Vdq_Wdq = { "psubusb", "psubusb", Vdq, Wdq, XX }, +Ia_psubusw_Pq_Qq = { "psubusw", "psubusw", Pq, Qq, XX }, +Ia_psubusw_Vdq_Wdq = { "psubusw", "psubusw", Vdq, Wdq, XX }, +Ia_psubw_Pq_Qq = { "psubw", "psubw", Pq, Qq, XX }, +Ia_psubw_Vdq_Wdq = { "psubw", "psubw", Vdq, Wdq, XX }, +Ia_pswapd_Pq_Qq = { "pswapd", "pswapd", Pq, Qq, XX }, +Ia_punpckhbw_Pq_Qq = { "punpckhbw", "punpckhbw", Pq, Qq, XX }, +Ia_punpckhbw_Vdq_Wq = { "punpckhbw", "punpckhbw", Vdq, Wq, XX }, +Ia_punpckhdq_Pq_Qq = { "punpckhdq", "punpckhdq", Pq, Qq, XX }, +Ia_punpckhdq_Vdq_Wq = { "punpckhdq", "punpckhdq", Vdq, Wq, XX }, +Ia_punpckhqdq_Vdq_Wq = { "punpckhqdq", "punpckhqdq", Vdq, Wq, XX }, +Ia_punpckhwd_Pq_Qq = { "punpckhwd", "punpckhwd", Pq, Qq, XX }, +Ia_punpckhwd_Vdq_Wq = { "punpckhwd", "punpckhwd", Vdq, Wq, XX }, +Ia_punpcklbw_Pq_Qd = { "punpcklbw", "punpcklbw", Pq, Qd, XX }, +Ia_punpcklbw_Vdq_Wq = { "punpcklbw", "punpcklbw", Vdq, Wq, XX }, +Ia_punpckldq_Pq_Qd = { "punpckldq", "punpckldq", Pq, Qd, XX }, +Ia_punpckldq_Vdq_Wq = { "punpckldq", "punpckldq", Vdq, Wq, XX }, +Ia_punpcklqdq_Vdq_Wq = { "punpcklqdq", "punpcklqdq", Vdq, Wq, XX }, +Ia_punpcklwd_Pq_Qd = { "punpcklwd", "punpcklwd", Pq, Qd, XX }, +Ia_punpcklwd_Vdq_Wq = { "punpcklwd", "punpcklwd", Vdq, Wq, XX }, +Ia_pushal = { "pushad", "pushal", XX, XX, XX }, +Ia_pushaw = { "pusha", "pusha", XX, XX, XX }, +Ia_pushfl = { "pushfd", "pushfl", XX, XX, XX }, +Ia_pushfq = { "pushfq", "pushfq", XX, XX, XX }, +Ia_pushfw = { "pushf", "pushf", XX, XX, XX }, +Ia_pushl_CS = { "push", "pushl", CS, XX, XX }, +Ia_pushl_DS = { "push", "pushl", DS, XX, XX }, +Ia_pushl_Ed = { "push", "pushl", Ed, XX, XX }, +Ia_pushl_ERX = { "push", "pushl", ERX, XX, XX }, +Ia_pushl_ES = { "push", "pushl", ES, XX, XX }, +Ia_pushl_FS = { "push", "pushl", FS, XX, XX }, +Ia_pushl_GS = { "push", "pushl", GS, XX, XX }, +Ia_pushl_Id = { "push", "pushl", Id, XX, XX }, +Ia_pushl_sIb = { "push", "pushl", sIbd, XX, XX }, +Ia_pushl_SS = { "push", "pushl", SS, XX, XX }, +Ia_pushq_Eq = { "push", "pushq", Eq, XX, XX }, +Ia_pushq_FS = { "push", "pushq", FS, XX, XX }, +Ia_pushq_GS = { "push", "pushq", GS, XX, XX }, +Ia_pushq_RRX = { "push", "pushq", RRX, XX, XX }, +Ia_pushq_sIb = { "push", "pushq", sIbq, XX, XX }, +Ia_pushq_sId = { "push", "pushq", sIdq, XX, XX }, +Ia_pushw_CS = { "push", "pushw", CS, XX, XX }, +Ia_pushw_DS = { "push", "pushw", DS, XX, XX }, +Ia_pushw_ES = { "push", "pushw", ES, XX, XX }, +Ia_pushw_Ew = { "push", "pushw", Ew, XX, XX }, +Ia_pushw_FS = { "push", "pushw", FS, XX, XX }, +Ia_pushw_GS = { "push", "pushw", GS, XX, XX }, +Ia_pushw_Iw = { "push", "pushw", Iw, XX, XX }, +Ia_pushw_RX = { "push", "pushw", RX, XX, XX }, +Ia_pushw_sIb = { "push", "pushw", sIbw, XX, XX }, +Ia_pushw_SS = { "push", "pushw", SS, XX, XX }, +Ia_pxor_Pq_Qq = { "pxor", "pxor", Pq, Qq, XX }, +Ia_pxor_Vdq_Wdq = { "pxor", "pxor", Vdq, Wdq, XX }, +Ia_rclb_Eb_CL = { "rcl", "rclb", Eb, CL, XX }, +Ia_rclb_Eb_I1 = { "rcl", "rclb", Eb, I1, XX }, +Ia_rclb_Eb_Ib = { "rcl", "rclb", Eb, Ib, XX }, +Ia_rcll_Ed_CL = { "rcl", "rcll", Ed, CL, XX }, +Ia_rcll_Ed_I1 = { "rcl", "rcll", Ed, I1, XX }, +Ia_rcll_Ed_Ib = { "rcl", "rcll", Ed, Ib, XX }, +Ia_rclq_Eq_CL = { "rcl", "rclq", Eq, CL, XX }, +Ia_rclq_Eq_I1 = { "rcl", "rclq", Eq, I1, XX }, +Ia_rclq_Eq_Ib = { "rcl", "rclq", Eq, Ib, XX }, +Ia_rclw_Ew_CL = { "rcl", "rclw", Ew, CL, XX }, +Ia_rclw_Ew_I1 = { "rcl", "rclw", Ew, I1, XX }, +Ia_rclw_Ew_Ib = { "rcl", "rclw", Ew, Ib, XX }, +Ia_rcpps_Vps_Wps = { "rcpps", "rcpps", Vps, Wps, XX }, +Ia_rcpss_Vss_Wss = { "rcpss", "rcpss", Vss, Wss, XX }, +Ia_rcrb_Eb_CL = { "rcr", "rcrb", Eb, CL, XX }, +Ia_rcrb_Eb_I1 = { "rcr", "rcrb", Eb, I1, XX }, +Ia_rcrb_Eb_Ib = { "rcr", "rcrb", Eb, Ib, XX }, +Ia_rcrl_Ed_CL = { "rcr", "rcrl", Ed, CL, XX }, +Ia_rcrl_Ed_I1 = { "rcr", "rcrl", Ed, I1, XX }, +Ia_rcrl_Ed_Ib = { "rcr", "rcrl", Ed, Ib, XX }, +Ia_rcrq_Eq_CL = { "rcr", "rcrq", Eq, CL, XX }, +Ia_rcrq_Eq_I1 = { "rcr", "rcrq", Eq, I1, XX }, +Ia_rcrq_Eq_Ib = { "rcr", "rcrq", Eq, Ib, XX }, +Ia_rcrw_Ew_CL = { "rcr", "rcrw", Ew, CL, XX }, +Ia_rcrw_Ew_I1 = { "rcr", "rcrw", Ew, I1, XX }, +Ia_rcrw_Ew_Ib = { "rcr", "rcrw", Ew, Ib, XX }, +Ia_rdmsr = { "rdmsr", "rdmsr", XX, XX, XX }, +Ia_rdpmc = { "rdpmc", "rdpmc", XX, XX, XX }, +Ia_rdtsc = { "rdtsc", "rdtsc", XX, XX, XX }, +Ia_rdtscp = { "rdtscp", "rdtscp", XX, XX, XX }, +Ia_ret = { "ret", "ret", XX, XX, XX }, +Ia_ret_Iw = { "ret", "ret", Iw, XX, XX }, +Ia_rolb_Eb_CL = { "rol", "rolb", Eb, CL, XX }, +Ia_rolb_Eb_I1 = { "rol", "rolb", Eb, I1, XX }, +Ia_rolb_Eb_Ib = { "rol", "rolb", Eb, Ib, XX }, +Ia_roll_Ed_CL = { "rol", "roll", Ed, CL, XX }, +Ia_roll_Ed_I1 = { "rol", "roll", Ed, I1, XX }, +Ia_roll_Ed_Ib = { "rol", "roll", Ed, Ib, XX }, +Ia_rolq_Eq_CL = { "rol", "rolq", Eq, CL, XX }, +Ia_rolq_Eq_I1 = { "rol", "rolq", Eq, I1, XX }, +Ia_rolq_Eq_Ib = { "rol", "rolq", Eq, Ib, XX }, +Ia_rolw_Ew_CL = { "rol", "rolw", Ew, CL, XX }, +Ia_rolw_Ew_I1 = { "rol", "rolw", Ew, I1, XX }, +Ia_rolw_Ew_Ib = { "rol", "rolw", Ew, Ib, XX }, +Ia_rorb_Eb_CL = { "ror", "rorb", Eb, CL, XX }, +Ia_rorb_Eb_I1 = { "ror", "rorb", Eb, I1, XX }, +Ia_rorb_Eb_Ib = { "ror", "rorb", Eb, Ib, XX }, +Ia_rorl_Ed_CL = { "ror", "rorl", Ed, CL, XX }, +Ia_rorl_Ed_I1 = { "ror", "rorl", Ed, I1, XX }, +Ia_rorl_Ed_Ib = { "ror", "rorl", Ed, Ib, XX }, +Ia_rorq_Eq_CL = { "ror", "rorq", Eq, CL, XX }, +Ia_rorq_Eq_I1 = { "ror", "rorq", Eq, I1, XX }, +Ia_rorq_Eq_Ib = { "ror", "rorq", Eq, Ib, XX }, +Ia_rorw_Ew_CL = { "ror", "rorw", Ew, CL, XX }, +Ia_rorw_Ew_I1 = { "ror", "rorw", Ew, I1, XX }, +Ia_rorw_Ew_Ib = { "ror", "rorw", Ew, Ib, XX }, +Ia_rsm = { "rsm", "rsm", XX, XX, XX }, +Ia_rsqrtps_Vps_Wps = { "rsqrtps", "rsqrtps", Vps, Wps, XX }, +Ia_rsqrtss_Vss_Wss = { "rsqrtss", "rsqrtss", Vss, Wss, XX }, +Ia_sahf = { "sahf", "sahf", XX, XX, XX }, +Ia_salc = { "salc", "salc", XX, XX, XX }, +Ia_sarb_Eb_CL = { "sar", "sarb", Eb, CL, XX }, +Ia_sarb_Eb_I1 = { "sar", "sarb", Eb, I1, XX }, +Ia_sarb_Eb_Ib = { "sar", "sarb", Eb, Ib, XX }, +Ia_sarl_Ed_CL = { "sar", "sarl", Ed, CL, XX }, +Ia_sarl_Ed_I1 = { "sar", "sarl", Ed, I1, XX }, +Ia_sarl_Ed_Ib = { "sar", "sarl", Ed, Ib, XX }, +Ia_sarq_Eq_CL = { "sar", "sarq", Eq, CL, XX }, +Ia_sarq_Eq_I1 = { "sar", "sarq", Eq, I1, XX }, +Ia_sarq_Eq_Ib = { "sar", "sarq", Eq, Ib, XX }, +Ia_sarw_Ew_CL = { "sar", "sarw", Ew, CL, XX }, +Ia_sarw_Ew_I1 = { "sar", "sarw", Ew, I1, XX }, +Ia_sarw_Ew_Ib = { "sar", "sarw", Ew, Ib, XX }, +Ia_sbbb_AL_Ib = { "sbb", "sbbb", AL, Ib, XX }, +Ia_sbbb_Eb_Gb = { "sbb", "sbbb", Eb, Gb, XX }, +Ia_sbbb_Eb_Ib = { "sbb", "sbbb", Eb, Ib, XX }, +Ia_sbbb_Gb_Eb = { "sbb", "sbbb", Gb, Eb, XX }, +Ia_sbbl_EAX_Id = { "sbb", "sbbl", EAX, Id, XX }, +Ia_sbbl_Ed_Gd = { "sbb", "sbbl", Ed, Gd, XX }, +Ia_sbbl_Ed_Id = { "sbb", "sbbl", Ed, Id, XX }, +Ia_sbbl_Ed_sIb = { "sbb", "sbbl", Ed, sIbd, XX }, +Ia_sbbl_Gd_Ed = { "sbb", "sbbl", Gd, Ed, XX }, +Ia_sbbq_Eq_Gq = { "sbb", "sbbq", Eq, Gq, XX }, +Ia_sbbq_Eq_sIb = { "sbb", "sbbq", Eq, sIbq, XX }, +Ia_sbbq_Eq_sId = { "sbb", "sbbq", Eq, sIdq, XX }, +Ia_sbbq_Gq_Eq = { "sbb", "sbbq", Gq, Eq, XX }, +Ia_sbbq_RAX_sId = { "sbb", "sbbq", RAX, sIdq, XX }, +Ia_sbbw_AX_Iw = { "sbb", "sbbw", AX, Iw, XX }, +Ia_sbbw_Ew_Gw = { "sbb", "sbbw", Ew, Gw, XX }, +Ia_sbbw_Ew_Iw = { "sbb", "sbbw", Ew, Iw, XX }, +Ia_sbbw_Ew_sIb = { "sbb", "sbbw", Ew, sIbw, XX }, +Ia_sbbw_Gw_Ew = { "sbb", "sbbw", Gw, Ew, XX }, +Ia_scasb_Yb_AL = { "scasb", "scasb", Yb, AL, XX }, +Ia_scasl_Yd_EAX = { "scasd", "scasl", Yd, EAX, XX }, +Ia_scasq_Yq_RAX = { "scasq", "scasq", Yq, RAX, XX }, +Ia_scasw_Yw_AX = { "scasw", "scasw", Yw, AX, XX }, +Ia_setb_Eb = { "setb", "setb", Eb, XX, XX }, +Ia_setbe_Eb = { "setbe", "setbe", Eb, XX, XX }, +Ia_setl_Eb = { "setl", "setl", Eb, XX, XX }, +Ia_setle_Eb = { "setle", "setle", Eb, XX, XX }, +Ia_setnb_Eb = { "setnb", "setnb", Eb, XX, XX }, +Ia_setnbe_Eb = { "setnbe", "setnbe", Eb, XX, XX }, +Ia_setnl_Eb = { "setnl", "setnl", Eb, XX, XX }, +Ia_setnle_Eb = { "setnle", "setnle", Eb, XX, XX }, +Ia_setno_Eb = { "setno", "setno", Eb, XX, XX }, +Ia_setnp_Eb = { "setnp", "setnp", Eb, XX, XX }, +Ia_setns_Eb = { "setns", "setns", Eb, XX, XX }, +Ia_setnz_Eb = { "setnz", "setnz", Eb, XX, XX }, +Ia_seto_Eb = { "seto", "seto", Eb, XX, XX }, +Ia_setp_Eb = { "setp", "setp", Eb, XX, XX }, +Ia_sets_Eb = { "sets", "sets", Eb, XX, XX }, +Ia_setz_Eb = { "setz", "setz", Eb, XX, XX }, +Ia_sfence = { "sfence", "sfence", XX, XX, XX }, +Ia_sgdt = { "sgdt", "sgdt", Ms, XX, XX }, +Ia_shlb_Eb_CL = { "shl", "shlb", Eb, CL, XX }, +Ia_shlb_Eb_I1 = { "shl", "shlb", Eb, I1, XX }, +Ia_shlb_Eb_Ib = { "shl", "shlb", Eb, Ib, XX }, +Ia_shldl_Ed_Gd_CL = { "shld", "shldl", Ed, Gd, CL }, +Ia_shldl_Ed_Gd_Ib = { "shld", "shldl", Ed, Gd, Ib }, +Ia_shldq_Eq_Gq_CL = { "shld", "shldq", Eq, Gq, CL }, +Ia_shldq_Eq_Gq_Ib = { "shld", "shldq", Eq, Gq, Ib }, +Ia_shldw_Ew_Gw_CL = { "shld", "shldw", Ew, Gw, CL }, +Ia_shldw_Ew_Gw_Ib = { "shld", "shldw", Ew, Gw, Ib }, +Ia_shll_Ed_CL = { "shl", "shll", Ed, CL, XX }, +Ia_shll_Ed_I1 = { "shl", "shll", Ed, I1, XX }, +Ia_shll_Ed_Ib = { "shl", "shll", Ed, Ib, XX }, +Ia_shlq_Eq_CL = { "shl", "shlq", Eq, CL, XX }, +Ia_shlq_Eq_I1 = { "shl", "shlq", Eq, I1, XX }, +Ia_shlq_Eq_Ib = { "shl", "shlq", Eq, Ib, XX }, +Ia_shlw_Ew_CL = { "shl", "shlw", Ew, CL, XX }, +Ia_shlw_Ew_I1 = { "shl", "shlw", Ew, I1, XX }, +Ia_shlw_Ew_Ib = { "shl", "shlw", Ew, Ib, XX }, +Ia_shrb_Eb_CL = { "shr", "shrb", Eb, CL, XX }, +Ia_shrb_Eb_I1 = { "shr", "shrb", Eb, I1, XX }, +Ia_shrb_Eb_Ib = { "shr", "shrb", Eb, Ib, XX }, +Ia_shrdl_Ed_Gd_CL = { "shrd", "shrdl", Ed, Gd, CL }, +Ia_shrdl_Ed_Gd_Ib = { "shrd", "shrdl", Ed, Gd, Ib }, +Ia_shrdq_Eq_Gq_CL = { "shrd", "shrdq", Eq, Gq, CL }, +Ia_shrdq_Eq_Gq_Ib = { "shrd", "shrdq", Eq, Gq, Ib }, +Ia_shrdw_Ew_Gw_CL = { "shrd", "shrdw", Ew, Gw, CL }, +Ia_shrdw_Ew_Gw_Ib = { "shrd", "shrdw", Ew, Gw, Ib }, +Ia_shrl_Ed_CL = { "shr", "shrl", Ed, CL, XX }, +Ia_shrl_Ed_I1 = { "shr", "shrl", Ed, I1, XX }, +Ia_shrl_Ed_Ib = { "shr", "shrl", Ed, Ib, XX }, +Ia_shrq_Eq_CL = { "shr", "shrq", Eq, CL, XX }, +Ia_shrq_Eq_I1 = { "shr", "shrq", Eq, I1, XX }, +Ia_shrq_Eq_Ib = { "shr", "shrq", Eq, Ib, XX }, +Ia_shrw_Ew_CL = { "shr", "shrw", Ew, CL, XX }, +Ia_shrw_Ew_I1 = { "shr", "shrw", Ew, I1, XX }, +Ia_shrw_Ew_Ib = { "shr", "shrw", Ew, Ib, XX }, +Ia_shufpd_Vpd_Wpd_Ib = { "shufpd", "shufpd", Vpd, Wpd, Ib }, +Ia_shufps_Vps_Wps_Ib = { "shufps", "shufps", Vps, Wps, Ib }, +Ia_sidt = { "sidt", "sidt", Ms, XX, XX }, +Ia_sldt = { "sldt", "sldt", Ew, XX, XX }, +Ia_smsw_Ew = { "smsw", "smsw", Ew, XX, XX }, +Ia_sqrtpd_Vpd_Wpd = { "sqrtpd", "sqrtpd", Vpd, Wpd, XX }, +Ia_sqrtps_Vps_Wps = { "sqrtps", "sqrtps", Vps, Wps, XX }, +Ia_sqrtsd_Vsd_Wsd = { "sqrtsd", "sqrtsd", Vsd, Wsd, XX }, +Ia_sqrtss_Vss_Wss = { "sqrtss", "sqrtss", Vss, Wss, XX }, +Ia_stc = { "stc", "stc", XX, XX, XX }, +Ia_std = { "std", "std", XX, XX, XX }, +Ia_sti = { "sti", "sti", XX, XX, XX }, +Ia_stmxcsr = { "stmxcsr", "stmxcsr", Md, XX, XX }, +Ia_stosb_Yb_AL = { "stosb", "stosb", Yb, AL, XX }, +Ia_stosl_Yd_EAX = { "stosd", "stosl", Yd, EAX, XX }, +Ia_stosq_Yq_RAX = { "stosq", "stosq", Yq, RAX, XX }, +Ia_stosw_Yw_AX = { "stosw", "stosw", Yw, AX, XX }, +Ia_str = { "str", "str", Ew, XX, XX }, +Ia_subb_AL_Ib = { "sub", "subb", AL, Ib, XX }, +Ia_subb_Eb_Gb = { "sub", "subb", Eb, Gb, XX }, +Ia_subb_Eb_Ib = { "sub", "subb", Eb, Ib, XX }, +Ia_subb_Gb_Eb = { "sub", "subb", Gb, Eb, XX }, +Ia_subl_EAX_Id = { "sub", "subl", EAX, Id, XX }, +Ia_subl_Ed_Gd = { "sub", "subl", Ed, Gd, XX }, +Ia_subl_Ed_Id = { "sub", "subl", Ed, Id, XX }, +Ia_subl_Ed_sIb = { "sub", "subl", Ed, sIbd, XX }, +Ia_subl_Gd_Ed = { "sub", "subl", Gd, Ed, XX }, +Ia_subpd_Vpd_Wpd = { "subpd", "subpd", Vpd, Wpd, XX }, +Ia_subps_Vps_Wps = { "subps", "subps", Vps, Wps, XX }, +Ia_subq_Eq_Gq = { "sub", "subq", Eq, Gq, XX }, +Ia_subq_Eq_sIb = { "sub", "subq", Eq, sIbq, XX }, +Ia_subq_Eq_sId = { "sub", "subq", Eq, sIdq, XX }, +Ia_subq_Gq_Eq = { "sub", "subq", Gq, Eq, XX }, +Ia_subq_RAX_sId = { "sub", "subq", RAX, sIdq, XX }, +Ia_subsd_Vsd_Wsd = { "subsd", "subsd", Vsd, Wsd, XX }, +Ia_subss_Vss_Wss = { "subss", "subss", Vss, Wss, XX }, +Ia_subw_AX_Iw = { "sub", "subw", AX, Iw, XX }, +Ia_subw_Ew_Gw = { "sub", "subw", Ew, Gw, XX }, +Ia_subw_Ew_Iw = { "sub", "subw", Ew, Iw, XX }, +Ia_subw_Ew_sIb = { "sub", "subw", Ew, sIbw, XX }, +Ia_subw_Gw_Ew = { "sub", "subw", Gw, Ew, XX }, +Ia_swapgs = { "swapgs", "swapgs", XX, XX, XX }, +Ia_syscall = { "syscall", "syscall", XX, XX, XX }, +Ia_sysenter = { "sysenter", "sysenter", XX, XX, XX }, +Ia_sysexit = { "sysexit", "sysexit", XX, XX, XX }, +Ia_sysret = { "sysret", "sysret", XX, XX, XX }, +Ia_testb_AL_Ib = { "test", "testb", AL, Ib, XX }, +Ia_testb_Eb_Gb = { "test", "testb", Eb, Gb, XX }, +Ia_testb_Eb_Ib = { "test", "testb", Eb, Ib, XX }, +Ia_testl_EAX_Id = { "test", "testl", EAX, Id, XX }, +Ia_testl_Ed_Gd = { "test", "testl", Ed, Gd, XX }, +Ia_testl_Ed_Id = { "test", "testl", Ed, Id, XX }, +Ia_testq_Eq_Gq = { "test", "testq", Eq, Gq, XX }, +Ia_testq_Eq_sId = { "test", "testq", Eq, sIdq, XX }, +Ia_testq_RAX_sId = { "test", "testq", RAX, sIdq, XX }, +Ia_testw_AX_Iw = { "test", "testw", AX, Iw, XX }, +Ia_testw_Ew_Gw = { "test", "testw", Ew, Gw, XX }, +Ia_testw_Ew_Iw = { "test", "testw", Ew, Iw, XX }, +Ia_ucomisd_Vsd_Wss = { "ucomisd", "ucomisd", Vsd, Wsd, XX }, +Ia_ucomiss_Vss_Wss = { "ucomiss", "ucomiss", Vss, Wss, XX }, +Ia_ud2a = { "ud2a", "ud2a", XX, XX, XX }, +Ia_ud2b = { "ud2b", "ud2b", XX, XX, XX }, +Ia_unpckhpd_Vpd_Wdq = { "unpckhpd", "unpckhpd", Vpd, Wdq, XX }, +Ia_unpckhps_Vps_Wdq = { "unpckhps", "unpckhps", Vps, Wdq, XX }, +Ia_unpcklpd_Vpd_Wq = { "unpcklpd", "unpcklpd", Vpd, Wq, XX }, +Ia_unpcklps_Vps_Wq = { "unpcklps", "unpcklps", Vps, Wq, XX }, +Ia_verr = { "verr", "verr", Ew, XX, XX }, +Ia_verw = { "verw", "verw", Ew, XX, XX }, +Ia_wbinvd = { "wbinvd", "wbinvd", XX, XX, XX }, +Ia_wrmsr = { "wrmsr", "wrmsr", XX, XX, XX }, +Ia_xaddb_Eb_Gb = { "xadd", "xaddb", Eb, Gb, XX }, +Ia_xaddl_Ed_Gd = { "xadd", "xaddl", Ed, Gd, XX }, +Ia_xaddq_Eq_Gq = { "xadd", "xaddq", Eq, Gq, XX }, +Ia_xaddw_Ew_Gw = { "xadd", "xaddw", Ew, Gw, XX }, +Ia_xchgb_Eb_Gb = { "xchg", "xchgb", Eb, Gb, XX }, +Ia_xchgl_Ed_Gd = { "xchg", "xchgl", Ed, Gd, XX }, +Ia_xchgl_ERX_EAX = { "xchg", "xchgl", ERX, EAX, XX }, +Ia_xchgq_Eq_Gq = { "xchg", "xchgq", Eq, Gq, XX }, +Ia_xchgq_RRX_RAX = { "xchg", "xchgq", RRX, RAX, XX }, +Ia_xchgw_Ew_Gw = { "xchg", "xchgw", Ew, Gw, XX }, +Ia_xchgw_RX_AX = { "xchg", "xchgw", RX, AX, XX }, +Ia_xlat = { "xlat", "xlat", XX, XX, XX }, +Ia_xorb_AL_Ib = { "xor", "xorb", AL, Ib, XX }, +Ia_xorb_Eb_Gb = { "xor", "xorb", Eb, Gb, XX }, +Ia_xorb_Eb_Ib = { "xor", "xorb", Eb, Ib, XX }, +Ia_xorb_Gb_Eb = { "xor", "xorb", Gb, Eb, XX }, +Ia_xorl_EAX_Id = { "xor", "xorl", EAX, Id, XX }, +Ia_xorl_Ed_Gd = { "xor", "xorl", Ed, Gd, XX }, +Ia_xorl_Ed_Id = { "xor", "xorl", Ed, Id, XX }, +Ia_xorl_Ed_sIb = { "xor", "xorl", Ed, sIbd, XX }, +Ia_xorl_Gd_Ed = { "xor", "xorl", Gd, Ed, XX }, +Ia_xorpd_Vpd_Wpd = { "xorpd", "xorpd", Vpd, Wpd, XX }, +Ia_xorps_Vps_Wps = { "xorps", "xorps", Vps, Wps, XX }, +Ia_xorq_Eq_Gq = { "xor", "xorq", Eq, Gq, XX }, +Ia_xorq_Eq_sIb = { "xor", "xorq", Eq, sIbq, XX }, +Ia_xorq_Eq_sId = { "xor", "xorq", Eq, sIdq, XX }, +Ia_xorq_Gq_Eq = { "xor", "xorq", Gq, Eq, XX }, +Ia_xorq_RAX_sId = { "xor", "xorq", RAX, sIdq, XX }, +Ia_xorw_AX_Iw = { "xor", "xorw", AX, Iw, XX }, +Ia_xorw_Ew_Gw = { "xor", "xorw", Ew, Gw, XX }, +Ia_xorw_Ew_Iw = { "xor", "xorw", Ew, Iw, XX }, +Ia_xorw_Ew_sIb = { "xor", "xorw", Ew, sIbw, XX }, +Ia_xorw_Gw_Ew = { "xor", "xorw", Gw, Ew, XX }; diff --git a/Externals/LZO/LZO.vcproj b/Externals/LZO/LZO.vcproj index 3b42bdb9e8..d8375eb89a 100644 --- a/Externals/LZO/LZO.vcproj +++ b/Externals/LZO/LZO.vcproj @@ -1,312 +1,312 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Externals/Lua/Lua.vcproj b/Externals/Lua/Lua.vcproj index fe18e3111d..7f6b9132a9 100644 --- a/Externals/Lua/Lua.vcproj +++ b/Externals/Lua/Lua.vcproj @@ -1,503 +1,503 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Externals/Memcard Manager/Memcard Manager.sln b/Externals/MemcardManager/MemcardManager.sln similarity index 93% rename from Externals/Memcard Manager/Memcard Manager.sln rename to Externals/MemcardManager/MemcardManager.sln index 47ebf646de..9720a6ec54 100644 --- a/Externals/Memcard Manager/Memcard Manager.sln +++ b/Externals/MemcardManager/MemcardManager.sln @@ -1,31 +1,31 @@ -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MemCardManager", "Memcard Manager.vcproj", "{413653C3-59A4-4E3A-ABB0-56558B323DFE}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {413653C3-59A4-4E3A-ABB0-56558B323DFE}.Debug|Win32.ActiveCfg = Debug|Win32 - {413653C3-59A4-4E3A-ABB0-56558B323DFE}.Debug|Win32.Build.0 = Debug|Win32 - {413653C3-59A4-4E3A-ABB0-56558B323DFE}.Debug|x64.ActiveCfg = Debug|x64 - {413653C3-59A4-4E3A-ABB0-56558B323DFE}.Debug|x64.Build.0 = Debug|x64 - {413653C3-59A4-4E3A-ABB0-56558B323DFE}.Release|Win32.ActiveCfg = Release|Win32 - {413653C3-59A4-4E3A-ABB0-56558B323DFE}.Release|Win32.Build.0 = Release|Win32 - {413653C3-59A4-4E3A-ABB0-56558B323DFE}.Release|x64.ActiveCfg = Release|x64 - {413653C3-59A4-4E3A-ABB0-56558B323DFE}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - AMDCaProjectFile = D:\Dev\Dolphin\trunk\Source\CodeAnalyst\Dolphin.caw - EndGlobalSection - GlobalSection(DPCodeReviewSolutionGUID) = preSolution - DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} - EndGlobalSection -EndGlobal +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MemCardManager", "MemcardManager.vcproj", "{413653C3-59A4-4E3A-ABB0-56558B323DFE}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {413653C3-59A4-4E3A-ABB0-56558B323DFE}.Debug|Win32.ActiveCfg = Debug|Win32 + {413653C3-59A4-4E3A-ABB0-56558B323DFE}.Debug|Win32.Build.0 = Debug|Win32 + {413653C3-59A4-4E3A-ABB0-56558B323DFE}.Debug|x64.ActiveCfg = Debug|x64 + {413653C3-59A4-4E3A-ABB0-56558B323DFE}.Debug|x64.Build.0 = Debug|x64 + {413653C3-59A4-4E3A-ABB0-56558B323DFE}.Release|Win32.ActiveCfg = Release|Win32 + {413653C3-59A4-4E3A-ABB0-56558B323DFE}.Release|Win32.Build.0 = Release|Win32 + {413653C3-59A4-4E3A-ABB0-56558B323DFE}.Release|x64.ActiveCfg = Release|x64 + {413653C3-59A4-4E3A-ABB0-56558B323DFE}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + AMDCaProjectFile = D:\Dev\Dolphin\trunk\Source\CodeAnalyst\Dolphin.caw + EndGlobalSection + GlobalSection(DPCodeReviewSolutionGUID) = preSolution + DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} + EndGlobalSection +EndGlobal diff --git a/Externals/Memcard Manager/Memcard Manager.vcproj b/Externals/MemcardManager/MemcardManager.vcproj similarity index 96% rename from Externals/Memcard Manager/Memcard Manager.vcproj rename to Externals/MemcardManager/MemcardManager.vcproj index 155ab28f44..2c573a8ccd 100644 --- a/Externals/Memcard Manager/Memcard Manager.vcproj +++ b/Externals/MemcardManager/MemcardManager.vcproj @@ -1,540 +1,540 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Externals/Memcard Manager/SConscript b/Externals/MemcardManager/SConscript similarity index 81% rename from Externals/Memcard Manager/SConscript rename to Externals/MemcardManager/SConscript index 2ec9b748ea..63e175a14b 100644 --- a/Externals/Memcard Manager/SConscript +++ b/Externals/MemcardManager/SConscript @@ -13,8 +13,8 @@ libs = [ if wxenv['HAVE_WX']: files += [ - 'Externals/Memcard Manager/src/mcmMain.cpp', - 'Externals/Memcard Manager/src/MCMdebug.cpp', + 'Externals/MemcardManager/src/mcmMain.cpp', + 'Externals/MemcardManager/src/MCMdebug.cpp', 'Source/Core/DolphinWX/Src/MemcardManager.cpp', 'Source/Core/DolphinWX/Src/MemoryCards/GCMemcard.cpp', 'Source/Core/DolphinWX/Src/WxUtils.cpp', @@ -48,7 +48,7 @@ else: -exeGUI = env['binary_dir'] + 'Memcard Manager' +exeGUI = env['binary_dir'] + 'MemcardManager' #objects = [ wxenv.Object(srcFile) for srcFile in files ] diff --git a/Externals/Memcard Manager/SConstruct b/Externals/MemcardManager/SConstruct similarity index 95% rename from Externals/Memcard Manager/SConstruct rename to Externals/MemcardManager/SConstruct index 93a997f78a..221ccee3ab 100644 --- a/Externals/Memcard Manager/SConstruct +++ b/Externals/MemcardManager/SConstruct @@ -47,7 +47,7 @@ include_paths = [ basedir + 'Source/Core/Common/Src', basedir + 'Source/PluginSpecs', basedir + 'Source/Core/DolphinWX/Src', - basedir + 'Externals/Memcard Manager/src', + basedir + 'Externals/MemcardManager/src', ] dirs = [ diff --git a/Externals/Memcard Manager/build b/Externals/MemcardManager/build similarity index 100% rename from Externals/Memcard Manager/build rename to Externals/MemcardManager/build diff --git a/Externals/Memcard Manager/clean b/Externals/MemcardManager/clean similarity index 100% rename from Externals/Memcard Manager/clean rename to Externals/MemcardManager/clean diff --git a/Externals/MemcardManager/src/MCMdebug.cpp b/Externals/MemcardManager/src/MCMdebug.cpp new file mode 100644 index 0000000000..a1d65003b3 --- /dev/null +++ b/Externals/MemcardManager/src/MCMdebug.cpp @@ -0,0 +1,519 @@ +#include "MemcardManager.h" +#include "MCMdebug.h" + +BEGIN_EVENT_TABLE(CMemcardManagerDebug, wxWindow) + EVT_CLOSE(CMemcardManagerDebug::OnClose) +END_EVENT_TABLE() + +CMemcardManagerDebug::CMemcardManagerDebug(wxFrame* parent, const wxPoint& pos, const wxSize& size) : + wxFrame(parent, wxID_ANY, _T("Memcard Debug Window"), pos, size, MEMCARD_MANAGER_STYLE) +{ + // Create the GUI controls + Init_ChildControls(); + + // Setup Window + SetBackgroundColour(m_Notebook_MCMD->GetBackgroundColour()); + SetSize(size); + SetPosition(pos); + + Layout(); + Show(); +} + + +void CMemcardManagerDebug::updatePanels(GCMemcard **memCard,int card) +{ + memoryCard = memCard; + updateHDRtab(card); + updateDIRtab(card); + updateDIRBtab(card); + updateBATtab(card); + updateBATBtab(card); +} + +void CMemcardManagerDebug::Init_ChildControls() +{ + // Main Notebook + m_Notebook_MCMD = new wxNotebook(this, ID_NOTEBOOK_MAIN, wxDefaultPosition, wxDefaultSize); + + m_Tab_HDR = new wxPanel(m_Notebook_MCMD, ID_TAB_HDR, wxDefaultPosition, wxDefaultSize); + m_Tab_DIR = new wxPanel(m_Notebook_MCMD, ID_TAB_DIR, wxDefaultPosition, wxDefaultSize); + m_Tab_DIR_b = new wxPanel(m_Notebook_MCMD, ID_TAB_DIR_B, wxDefaultPosition, wxDefaultSize); + m_Tab_BAT = new wxPanel(m_Notebook_MCMD, ID_TAB_BAT, wxDefaultPosition, wxDefaultSize); + m_Tab_BAT_b = new wxPanel(m_Notebook_MCMD, ID_TAB_BAT_B, wxDefaultPosition, wxDefaultSize); + + Init_HDR(); + Init_DIR(); + Init_DIR_b(); + Init_BAT(); + Init_BAT_b(); + + // Add Tabs to Notebook + m_Notebook_MCMD->AddPage(m_Tab_HDR, _T("HDR")); + m_Notebook_MCMD->AddPage(m_Tab_DIR, _T("DIR")); + m_Notebook_MCMD->AddPage(m_Tab_DIR_b, _T("DIR_b")); + m_Notebook_MCMD->AddPage(m_Tab_BAT, _T("Bat")); + m_Notebook_MCMD->AddPage(m_Tab_BAT_b, _T("Bat_b")); + + wxBoxSizer* sMain = new wxBoxSizer(wxVERTICAL); + sMain->Add(m_Notebook_MCMD, 1, wxEXPAND|wxALL, 5); + SetSizer(sMain); + Layout(); + Fit(); +} +void CMemcardManagerDebug::OnClose(wxCloseEvent& WXUNUSED (event)) +{ + Hide(); +} + +void CMemcardManagerDebug::Init_HDR() +{ + wxBoxSizer *sMain; + wxStaticBoxSizer *sHDR[2]; + + sMain = new wxBoxSizer(wxHORIZONTAL); + sHDR[0] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_HDR, wxT("MEMCARD:A")); + sHDR[1] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_HDR, wxT("MEMCARD:B")); + + wxGridBagSizer * sOtPaths[2]; + + wxStaticText *st[2][11]; + + for(int i = SLOT_A; i <=SLOT_B;i++) + { + sOtPaths[i] = new wxGridBagSizer(0, 0); + sOtPaths[i]->AddGrowableCol(1); + st[i][0]= new wxStaticText(m_Tab_HDR, 0, wxT("Ser\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][1]= new wxStaticText(m_Tab_HDR, 0, wxT("fmtTime\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][2]= new wxStaticText(m_Tab_HDR, 0, wxT("SRAMBIAS\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][3]= new wxStaticText(m_Tab_HDR, 0, wxT("SRAMLANG\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][4]= new wxStaticText(m_Tab_HDR, 0, wxT("Unk2\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][5]= new wxStaticText(m_Tab_HDR, 0, wxT("deviceID\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][6]= new wxStaticText(m_Tab_HDR, 0, wxT("Size\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][7]= new wxStaticText(m_Tab_HDR, 0, wxT("Encoding\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][8]= new wxStaticText(m_Tab_HDR, 0, wxT("UpdateCounter\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][9]= new wxStaticText(m_Tab_HDR, 0, wxT("CheckSum1\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][10]= new wxStaticText(m_Tab_HDR, 0, wxT("CheckSum2\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + + t_HDR_ser[i] = new wxStaticText(m_Tab_HDR, 0, wxT("XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX"), + wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_HDR_fmtTime[i] = new wxStaticText(m_Tab_HDR, 0, wxT("XXXXXXXX, XXXXXXXX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_HDR_SRAMBIAS[i] = new wxStaticText(m_Tab_HDR, 0, wxT("XX, XX, XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_HDR_SRAMLANG[i] = new wxStaticText(m_Tab_HDR, 0, wxT("XX, XX, XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_HDR_Unk2[i] = new wxStaticText(m_Tab_HDR, 0, wxT("XX, XX, XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_HDR_devID[i] = new wxStaticText(m_Tab_HDR, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_HDR_Size[i] = new wxStaticText(m_Tab_HDR, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_HDR_Encoding[i] = new wxStaticText(m_Tab_HDR, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_HDR_UpdateCounter[i] = new wxStaticText(m_Tab_HDR, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_HDR_CheckSum1[i] = new wxStaticText(m_Tab_HDR, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_HDR_CheckSum2[i] = new wxStaticText(m_Tab_HDR, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + + sOtPaths[i]->Add(st[i][0], wxGBPosition(0, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_HDR_ser[i], wxGBPosition(0, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][1], wxGBPosition(1, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_HDR_fmtTime[i], wxGBPosition(1, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][2], wxGBPosition(2, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_HDR_SRAMBIAS[i], wxGBPosition(2, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][3], wxGBPosition(3, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_HDR_SRAMLANG[i], wxGBPosition(3, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][4], wxGBPosition(4, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_HDR_Unk2[i], wxGBPosition(4, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][5], wxGBPosition(5, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_HDR_devID[i], wxGBPosition(5, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][6], wxGBPosition(6, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_HDR_Size[i], wxGBPosition(6, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][7], wxGBPosition(7, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_HDR_Encoding[i], wxGBPosition(7, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][8], wxGBPosition(8, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_HDR_UpdateCounter[i], wxGBPosition(8, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][9], wxGBPosition(9, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_HDR_CheckSum1[i], wxGBPosition(9, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][10], wxGBPosition(10, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_HDR_CheckSum2[i], wxGBPosition(10, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sHDR[i]->Add(sOtPaths[i], 0, wxEXPAND|wxALL, 5); + sMain->Add(sHDR[i], 0, wxEXPAND|wxALL, 1); + } + m_Tab_HDR->SetSizer(sMain); + m_Tab_HDR->Layout(); +} + +void CMemcardManagerDebug::updateHDRtab(int card) +{ + wxString wx_ser, + wx_fmtTime, + wx_SRAMBIAS, + wx_SRAMLANG, + wx_Unk2, + wx_devID, + wx_Size, + wx_Encoding, + wx_UpdateCounter, + wx_CheckSum1, + wx_CheckSum2; + + wx_ser.Printf(wxT("%02X, %02X, %02X, %02X, %02X, %02X, %02X, %02X, %02X, %02X, %02X, %02X"), + memoryCard[card]->hdr.serial[0],memoryCard[card]->hdr.serial[1], + memoryCard[card]->hdr.serial[2],memoryCard[card]->hdr.serial[3], + memoryCard[card]->hdr.serial[4],memoryCard[card]->hdr.serial[5], + memoryCard[card]->hdr.serial[6],memoryCard[card]->hdr.serial[7], + memoryCard[card]->hdr.serial[8],memoryCard[card]->hdr.serial[9], + memoryCard[card]->hdr.serial[10],memoryCard[card]->hdr.serial[11]); + + wx_fmtTime.Printf(wxT("%08X, %08X"), + Common::swap32(memoryCard[card]->hdr.fmtTime.high),Common::swap32(memoryCard[card]->hdr.fmtTime.low)); + + wx_SRAMBIAS.Printf(wxT("%02X, %02X, %02X, %02X"), + memoryCard[card]->hdr.SramBias[0],memoryCard[card]->hdr.SramBias[1], + memoryCard[card]->hdr.SramBias[2],memoryCard[card]->hdr.SramBias[3]); + + wx_SRAMLANG.Printf(wxT("%02X, %02X, %02X, %02X"), + memoryCard[card]->hdr.SramLang[0], memoryCard[card]->hdr.SramLang[1], + memoryCard[card]->hdr.SramLang[2],memoryCard[card]->hdr.SramLang[3]); + + wx_Unk2.Printf(wxT("%02X, %02X, %02X, %02X"), + memoryCard[card]->hdr.Unk2[0],memoryCard[card]->hdr.Unk2[1], + memoryCard[card]->hdr.Unk2[2],memoryCard[card]->hdr.Unk2[3]); + + wx_devID.Printf(wxT("%02X, %02X"), + memoryCard[card]->hdr.deviceID[0],memoryCard[card]->hdr.deviceID[1]); + + wx_Size.Printf(wxT("%02X, %02X"), + memoryCard[card]->hdr.SizeMb[0],memoryCard[card]->hdr.SizeMb[1]); + + wx_Encoding.Printf( wxT("%02X, %02X"), + memoryCard[card]->hdr.Encoding[0],memoryCard[card]->hdr.Encoding[1]); + + wx_UpdateCounter.Printf(wxT("%02X, %02X"), + memoryCard[card]->hdr.UpdateCounter[0],memoryCard[card]->hdr.UpdateCounter[1]); + + wx_CheckSum1.Printf(wxT("%02X, %02X"), + memoryCard[card]->hdr.CheckSum1[0],memoryCard[card]->hdr.CheckSum1[1]); + + wx_CheckSum2.Printf(wxT("%02X, %02X"), + memoryCard[card]->hdr.CheckSum2[0],memoryCard[card]->hdr.CheckSum2[1]); + + + t_HDR_ser[card]->SetLabel(wx_ser); + t_HDR_fmtTime[card]->SetLabel(wx_fmtTime); + t_HDR_SRAMBIAS[card]->SetLabel(wx_SRAMBIAS); + t_HDR_SRAMLANG[card]->SetLabel(wx_SRAMLANG); + t_HDR_Unk2[card]->SetLabel(wx_Unk2); + t_HDR_devID[card]->SetLabel(wx_devID); + t_HDR_Size[card]->SetLabel(wx_Size); + t_HDR_Encoding[card]->SetLabel(wx_Encoding); + t_HDR_UpdateCounter[card]->SetLabel(wx_UpdateCounter); + t_HDR_CheckSum1[card]->SetLabel(wx_CheckSum1); + t_HDR_CheckSum2[card]->SetLabel(wx_CheckSum2); +} + + + +void CMemcardManagerDebug::Init_DIR() +{ + wxBoxSizer *sMain; + wxStaticBoxSizer *sDIR[2]; + sMain = new wxBoxSizer(wxHORIZONTAL); + sDIR[0] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_DIR, wxT("MEMCARD:A")); + sDIR[1] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_DIR, wxT("MEMCARD:B")); + + wxGridBagSizer * sOtPaths[3]; + + wxStaticText *st[2][9]; + for(int i = SLOT_A; i <=SLOT_B;i++) + { + sOtPaths[i] = new wxGridBagSizer(0, 0); + sOtPaths[i]->AddGrowableCol(1); + st[i][0]= new wxStaticText(m_Tab_DIR, 0, wxT("UpdateCounter\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][1]= new wxStaticText(m_Tab_DIR, 0, wxT("CheckSum1\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][2]= new wxStaticText(m_Tab_DIR, 0, wxT("CheckSum2\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + + t_DIR_UpdateCounter[i] = new wxStaticText(m_Tab_DIR, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_DIR_CheckSum1[i] = new wxStaticText(m_Tab_DIR, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_DIR_CheckSum2[i] = new wxStaticText(m_Tab_DIR, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + + sOtPaths[i]->Add(st[i][0], wxGBPosition(0, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_DIR_UpdateCounter[i], wxGBPosition(0, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][1], wxGBPosition(1, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_DIR_CheckSum1[i], wxGBPosition(1, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][2], wxGBPosition(2, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_DIR_CheckSum2[i], wxGBPosition(2, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + + sDIR[i]->Add(sOtPaths[i], 0, wxEXPAND|wxALL, 5); + sMain->Add(sDIR[i], 0, wxEXPAND|wxALL, 1); + } + + m_Tab_DIR->SetSizer(sMain); + m_Tab_DIR->Layout(); +} + + +void CMemcardManagerDebug::updateDIRtab(int card) +{ + wxString wx_UpdateCounter, + wx_CheckSum1, + wx_CheckSum2; + + wx_UpdateCounter.Printf(wxT("%02X, %02X"), + memoryCard[card]->dir.UpdateCounter[0],memoryCard[card]->dir.UpdateCounter[1]); + + wx_CheckSum1.Printf(wxT("%02X, %02X"), + memoryCard[card]->dir.CheckSum1[0],memoryCard[card]->dir.CheckSum1[1]); + + wx_CheckSum2.Printf(wxT("%02X, %02X"), + memoryCard[card]->dir.CheckSum2[0],memoryCard[card]->dir.CheckSum2[1]); + + t_DIR_UpdateCounter[card]->SetLabel(wx_UpdateCounter); + t_DIR_CheckSum1[card]->SetLabel(wx_CheckSum1); + t_DIR_CheckSum2[card]->SetLabel(wx_CheckSum2); +} + + +void CMemcardManagerDebug::Init_DIR_b() +{ + wxBoxSizer *sMain; + wxStaticBoxSizer *sDIR_b[2]; + sMain = new wxBoxSizer(wxHORIZONTAL); + sDIR_b[0] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_DIR_b, wxT("MEMCARD:A")); + sDIR_b[1] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_DIR_b, wxT("MEMCARD:B")); + + wxGridBagSizer * sOtPaths[3]; + + wxStaticText *st[2][9]; + for(int i = SLOT_A; i <=SLOT_B;i++) + { + sOtPaths[i] = new wxGridBagSizer(0, 0); + sOtPaths[i]->AddGrowableCol(1); + st[i][0]= new wxStaticText(m_Tab_DIR_b, 0, wxT("UpdateCounter\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][1]= new wxStaticText(m_Tab_DIR_b, 0, wxT("CheckSum1\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][2]= new wxStaticText(m_Tab_DIR_b, 0, wxT("CheckSum2\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + + t_DIR_b_UpdateCounter[i] = new wxStaticText(m_Tab_DIR_b, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_DIR_b_CheckSum1[i] = new wxStaticText(m_Tab_DIR_b, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_DIR_b_CheckSum2[i] = new wxStaticText(m_Tab_DIR_b, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + + sOtPaths[i]->Add(st[i][0], wxGBPosition(0, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_DIR_b_UpdateCounter[i], wxGBPosition(0, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][1], wxGBPosition(1, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_DIR_b_CheckSum1[i], wxGBPosition(1, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][2], wxGBPosition(2, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_DIR_b_CheckSum2[i], wxGBPosition(2, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sDIR_b[i]->Add(sOtPaths[i], 0, wxEXPAND|wxALL, 5); + sMain->Add(sDIR_b[i], 0, wxEXPAND|wxALL, 1); + } + m_Tab_DIR_b->SetSizer(sMain); + m_Tab_DIR_b->Layout(); +} + +void CMemcardManagerDebug::updateDIRBtab(int card) +{ + wxString wx_UpdateCounter, + wx_CheckSum1, + wx_CheckSum2; + + wx_UpdateCounter.Printf(wxT("%02X, %02X"), + memoryCard[card]->dir_backup.UpdateCounter[0],memoryCard[card]->dir_backup.UpdateCounter[1]); + wx_CheckSum1.Printf(wxT("%02X, %02X"), + memoryCard[card]->dir_backup.CheckSum1[0],memoryCard[card]->dir_backup.CheckSum1[1]); + wx_CheckSum2.Printf(wxT("%02X, %02X"), + memoryCard[card]->dir_backup.CheckSum2[0],memoryCard[card]->dir_backup.CheckSum2[1]); + + t_DIR_b_UpdateCounter[card]->SetLabel(wx_UpdateCounter); + t_DIR_b_CheckSum1[card]->SetLabel(wx_CheckSum1); + t_DIR_b_CheckSum2[card]->SetLabel(wx_CheckSum2); +} + +void CMemcardManagerDebug::Init_BAT() +{ + wxBoxSizer *sMain; + wxStaticBoxSizer *sBAT[4]; + sMain = new wxBoxSizer(wxHORIZONTAL); + sBAT[0] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_BAT, wxT("MEMCARD:A")); + sBAT[1] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_BAT, wxT("MEMCARD:B")); + sBAT[2] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_BAT, wxT("MEMCARD:A MAP")); + sBAT[3] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_BAT, wxT("MEMCARD:B MAP")); + wxGridBagSizer * sOtPaths[4]; + + wxStaticText *st[2][9]; + for(int i = SLOT_A; i <=SLOT_B;i++) + { + sOtPaths[i] = new wxGridBagSizer(0, 0); + sOtPaths[i]->AddGrowableCol(1); + st[i][0]= new wxStaticText(m_Tab_BAT, 0, wxT("CheckSum1\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][1]= new wxStaticText(m_Tab_BAT, 0, wxT("CheckSum2\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][2]= new wxStaticText(m_Tab_BAT, 0, wxT("UpdateCounter\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][3]= new wxStaticText(m_Tab_BAT, 0, wxT("FreeBlocks\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][4]= new wxStaticText(m_Tab_BAT, 0, wxT("LastAllocated\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + + t_BAT_CheckSum1[i] = new wxStaticText(m_Tab_BAT, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_BAT_CheckSum2[i] = new wxStaticText(m_Tab_BAT, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_BAT_UpdateCounter[i] = new wxStaticText(m_Tab_BAT, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_BAT_FreeBlocks[i] = new wxStaticText(m_Tab_BAT, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_BAT_LastAllocated[i] = new wxStaticText(m_Tab_BAT, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + + + + sOtPaths[i]->Add(st[i][0], wxGBPosition(0, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_BAT_CheckSum1[i], wxGBPosition(0, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][1], wxGBPosition(1, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_BAT_CheckSum2[i], wxGBPosition(1, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][2], wxGBPosition(2, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_BAT_UpdateCounter[i], wxGBPosition(2, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][3], wxGBPosition(3, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_BAT_FreeBlocks[i], wxGBPosition(3, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][4], wxGBPosition(4, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_BAT_LastAllocated[i], wxGBPosition(4, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + + sBAT[i]->Add(sOtPaths[i], 0, wxEXPAND|wxALL, 5); + sMain->Add(sBAT[i], 0, wxEXPAND|wxALL, 1); + } + + for (int k=2;k<=3;k++) //256 + { + sOtPaths[k] = new wxGridBagSizer(0, 0); + sOtPaths[k]->AddGrowableCol(1); + + for(int j=0;j<256;j++) + { + t_BAT_map[j][k%2] = new wxStaticText(m_Tab_BAT, 0, wxT("XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + sOtPaths[k]->Add(t_BAT_map[j][k%2], wxGBPosition(j, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + + } + + sBAT[k]->Add(sOtPaths[k], 0, wxEXPAND|wxALL, 5); + sMain->Add(sBAT[k], 0, wxEXPAND|wxALL, 1); + } + + m_Tab_BAT->SetSizer(sMain); + m_Tab_BAT->Layout(); +} + +void CMemcardManagerDebug::updateBATtab(int card) +{ + wxString wx_UpdateCounter, + wx_CheckSum1, + wx_CheckSum2, + wx_FreeBlocks, + wx_LastAllocated; + + wx_CheckSum1.Printf(wxT("%02X, %02X"), memoryCard[card]->bat.CheckSum1[0],memoryCard[card]->bat.CheckSum1[1]); + wx_CheckSum2.Printf(wxT("%02X, %02X"), memoryCard[card]->bat.CheckSum2[0],memoryCard[card]->bat.CheckSum2[1]); + wx_UpdateCounter.Printf(wxT("%02X, %02X"), memoryCard[card]->bat.UpdateCounter[0],memoryCard[card]->bat.UpdateCounter[1]); + wx_FreeBlocks.Printf(wxT("%02X, %02X"), memoryCard[card]->bat.FreeBlocks[0],memoryCard[card]->bat.FreeBlocks[1]); + wx_LastAllocated.Printf(wxT("%d"), memoryCard[card]->bat.LastAllocated[0] << 8 | memoryCard[card]->bat.LastAllocated[1]); + + t_BAT_CheckSum1[card]->SetLabel(wx_CheckSum1); + t_BAT_CheckSum2[card]->SetLabel(wx_CheckSum2); + t_BAT_UpdateCounter[card]->SetLabel(wx_UpdateCounter); + t_BAT_FreeBlocks[card]->SetLabel(wx_FreeBlocks); + t_BAT_LastAllocated[card]->SetLabel(wx_LastAllocated); + + wxString wx_map[256]; + int pagesMax = 2048; + pagesMax = (1) * 13*8; + for(int j=0;j<2048 && j < pagesMax ;j+=8) + { + wx_map[j/8].Printf(wxT("%d, %d, %d, %d, %d, %d, %d, %d"), + (memoryCard[card]->bat.Map[j] == 0xFFFF)? -1 : Common::swap16(memoryCard[card]->bat.Map[j]), + (memoryCard[card]->bat.Map[j+1] == 0xFFFF)? -1 : Common::swap16(memoryCard[card]->bat.Map[j+1]), + (memoryCard[card]->bat.Map[j+2] == 0xFFFF)? -1 : Common::swap16(memoryCard[card]->bat.Map[j+2]), + (memoryCard[card]->bat.Map[j+3] == 0xFFFF)? -1 : Common::swap16(memoryCard[card]->bat.Map[j+3]), + (memoryCard[card]->bat.Map[j+4] == 0xFFFF)? -1 : Common::swap16(memoryCard[card]->bat.Map[j+4]), + (memoryCard[card]->bat.Map[j+5] == 0xFFFF)? -1 : Common::swap16(memoryCard[card]->bat.Map[j+5]), + (memoryCard[card]->bat.Map[j+6] == 0xFFFF)? -1 : Common::swap16(memoryCard[card]->bat.Map[j+6]), + (memoryCard[card]->bat.Map[j+7] == 0xFFFF)? -1 : Common::swap16(memoryCard[card]->bat.Map[j+7])); + t_BAT_map[j/8][card]->SetLabel(wx_map[j/8]); + } +} + +void CMemcardManagerDebug::Init_BAT_b() +{ + wxBoxSizer *sMain; + wxStaticBoxSizer *sBAT_b[2]; + sMain = new wxBoxSizer(wxHORIZONTAL); + sBAT_b[0] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_BAT_b, wxT("MEMCARD:A")); + sBAT_b[1] = new wxStaticBoxSizer(wxVERTICAL, m_Tab_BAT_b, wxT("MEMCARD:B")); + + wxGridBagSizer * sOtPaths[3]; + wxStaticText *st[2][9]; + + for(int i = SLOT_A; i <=SLOT_B;i++) + { + sOtPaths[i] = new wxGridBagSizer(0, 0); + sOtPaths[i]->AddGrowableCol(1); + st[i][0]= new wxStaticText(m_Tab_BAT_b, 0, wxT("CheckSum1\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][1]= new wxStaticText(m_Tab_BAT_b, 0, wxT("CheckSum2\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][2]= new wxStaticText(m_Tab_BAT_b, 0, wxT("UpdateCounter\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][3]= new wxStaticText(m_Tab_BAT_b, 0, wxT("FreeBlocks\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + st[i][4]= new wxStaticText(m_Tab_BAT_b, 0, wxT("LastAllocated\t\t"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + + t_BAT_b_CheckSum1[i] = new wxStaticText(m_Tab_BAT_b, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_BAT_b_CheckSum2[i] = new wxStaticText(m_Tab_BAT_b, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_BAT_b_UpdateCounter[i] = new wxStaticText(m_Tab_BAT_b, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_BAT_b_FreeBlocks[i] = new wxStaticText(m_Tab_BAT_b, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + t_BAT_b_LastAllocated[i] = new wxStaticText(m_Tab_BAT_b, 0, wxT("XX, XX"), wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); + + sOtPaths[i]->Add(st[i][0], wxGBPosition(0, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_BAT_b_CheckSum1[i], wxGBPosition(0, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][1], wxGBPosition(1, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_BAT_b_CheckSum2[i], wxGBPosition(1, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][2], wxGBPosition(2, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_BAT_b_UpdateCounter[i], wxGBPosition(2, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][3], wxGBPosition(3, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_BAT_b_FreeBlocks[i], wxGBPosition(3, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sOtPaths[i]->Add(st[i][4], wxGBPosition(4, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sOtPaths[i]->Add(t_BAT_b_LastAllocated[i], wxGBPosition(4, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 5); + + sBAT_b[i]->Add(sOtPaths[i], 0, wxEXPAND|wxALL, 5); + sMain->Add(sBAT_b[i], 0, wxEXPAND|wxALL, 1); + } + + m_Tab_BAT_b->SetSizer(sMain); + m_Tab_BAT_b->Layout(); +} + +void CMemcardManagerDebug::updateBATBtab(int card) +{ + wxString wx_UpdateCounter, + wx_CheckSum1, + wx_CheckSum2, + wx_FreeBlocks, + wx_LastAllocated; + + wx_CheckSum1.Printf(wxT("%02X, %02X"), memoryCard[card]->bat_backup.CheckSum1[0],memoryCard[card]->bat_backup.CheckSum1[1]); + wx_CheckSum2.Printf(wxT("%02X, %02X"), memoryCard[card]->bat_backup.CheckSum2[0],memoryCard[card]->bat_backup.CheckSum2[1]); + wx_UpdateCounter.Printf(wxT("%02X, %02X"), memoryCard[card]->bat_backup.UpdateCounter[0],memoryCard[card]->bat_backup.UpdateCounter[1]); + wx_FreeBlocks.Printf(wxT("%02X, %02X"), memoryCard[card]->bat_backup.FreeBlocks[0],memoryCard[card]->bat_backup.FreeBlocks[1]); + wx_LastAllocated.Printf(wxT("%02X, %02X"), memoryCard[card]->bat_backup.LastAllocated[0],memoryCard[card]->bat_backup.LastAllocated[1]); + + t_BAT_b_CheckSum1[card]->SetLabel(wx_CheckSum1); + t_BAT_b_CheckSum2[card]->SetLabel(wx_CheckSum2); + t_BAT_b_UpdateCounter[card]->SetLabel(wx_UpdateCounter); + t_BAT_b_FreeBlocks[card]->SetLabel(wx_FreeBlocks); + t_BAT_b_LastAllocated[card]->SetLabel(wx_LastAllocated); +} diff --git a/Externals/MemcardManager/src/MCMdebug.h b/Externals/MemcardManager/src/MCMdebug.h new file mode 100644 index 0000000000..e4c8e858c8 --- /dev/null +++ b/Externals/MemcardManager/src/MCMdebug.h @@ -0,0 +1,111 @@ +// Copyright (C) 2003 Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef __MCM_H__ +#define __MCM_H__ + +#include "MemcardManager.h" +#include +#include + + +class CMemcardManagerDebug : public wxFrame +{ + public: + + CMemcardManagerDebug(wxFrame* parent, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize); + virtual ~CMemcardManagerDebug(){}; + void updatePanels(GCMemcard ** memCard,int card); + + private: + enum + { + ID_NOTEBOOK_MAIN, + ID_TAB_HDR, + ID_TAB_DIR, + ID_TAB_DIR_B, + ID_TAB_BAT, + ID_TAB_BAT_B, + }; + + + + GCMemcard **memoryCard; + + wxNotebook *m_Notebook_MCMD; + + wxPanel *m_Tab_HDR, + *m_Tab_DIR, + *m_Tab_DIR_b, + *m_Tab_BAT, + *m_Tab_BAT_b; + + wxBoxSizer *sMain, + *sDebug, + *sDebug2; + + wxStaticText *t_HDR_ser[2], + *t_HDR_fmtTime[2], + *t_HDR_SRAMBIAS[2], + *t_HDR_SRAMLANG[2], + *t_HDR_Unk2[2], + *t_HDR_devID[2], + *t_HDR_Size[2], + *t_HDR_Encoding[2], + *t_HDR_UpdateCounter[2], + *t_HDR_CheckSum1[2], + *t_HDR_CheckSum2[2], + + *t_DIR_UpdateCounter[2], + *t_DIR_CheckSum1[2], + *t_DIR_CheckSum2[2], + + *t_DIR_b_UpdateCounter[2], + *t_DIR_b_CheckSum1[2], + *t_DIR_b_CheckSum2[2], + + *t_BAT_CheckSum1[2], + *t_BAT_CheckSum2[2], + *t_BAT_UpdateCounter[2], + *t_BAT_FreeBlocks[2], + *t_BAT_LastAllocated[2], + *t_BAT_map[256][2], + + *t_BAT_b_CheckSum1[2], + *t_BAT_b_CheckSum2[2], + *t_BAT_b_UpdateCounter[2], + *t_BAT_b_FreeBlocks[2], + *t_BAT_b_LastAllocated[2]; + + DECLARE_EVENT_TABLE(); + void Init_ChildControls(); + void OnClose(wxCloseEvent& event); + + void Init_HDR(); + void Init_DIR(); + void Init_DIR_b(); + void Init_BAT(); + void Init_BAT_b(); + void updateHDRtab(int card); + void updateDIRtab(int card); + void updateDIRBtab(int card); + void updateBATtab(int card); + void updateBATBtab(int card); + +}; + +#endif diff --git a/Externals/MemcardManager/src/MCMmain.h b/Externals/MemcardManager/src/MCMmain.h new file mode 100644 index 0000000000..149ee695c6 --- /dev/null +++ b/Externals/MemcardManager/src/MCMmain.h @@ -0,0 +1,17 @@ +#ifndef _MCM__ +#define _MCM__ + +void __Log(int logNumber, const char* text, ...){logNumber; text;} +void __Logv(int log, int v, const char *format, ...){log; v; format;} + +#include "MemcardManager.h" +#include "Timer.h" + +class MCMApp + : public wxApp +{ + public: + bool OnInit(); + +}; +#endif diff --git a/Externals/MemcardManager/src/mcmMain.cpp b/Externals/MemcardManager/src/mcmMain.cpp new file mode 100644 index 0000000000..eddc182f18 --- /dev/null +++ b/Externals/MemcardManager/src/mcmMain.cpp @@ -0,0 +1,51 @@ +// Copyright (C) 2003 Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ +#include "MCMmain.h" + +IMPLEMENT_APP(MCMApp) + +CMemcardManager *main_frame; + +#if defined HAVE_WX && HAVE_WX +bool wxMsgAlert(const char* caption, const char* text, bool yes_no, int Style) +{ + return wxYES == wxMessageBox(wxString::FromAscii(text), + wxString::FromAscii(caption), + (yes_no)?wxYES_NO:wxOK); +} +#endif + +bool MCMApp::OnInit() +{ + // Register message box handler + #if defined(HAVE_WX) && HAVE_WX + RegisterMsgAlertHandler(&wxMsgAlert); + #endif + + main_frame = new CMemcardManager((wxFrame*) NULL, wxID_ANY, wxString::FromAscii("Memcard Manager"), + wxPoint(100, 100), wxSize(800, 600)); + main_frame->Show(); + SetTopWindow(main_frame); + return true; +} + +u32 CEXIIPL::GetGCTime() +{ + const u32 cJanuary2000 = 0x386D42C0; // Seconds between 1.1.1970 and 1.1.2000 + u64 ltime = Common::Timer::GetLocalTimeSinceJan1970(); + return ((u32)ltime - cJanuary2000); +} diff --git a/Externals/SFML/build/vc2008/sfml-network.vcproj b/Externals/SFML/build/vc2008/sfml-network.vcproj index 7715a38fc8..4744218216 100644 --- a/Externals/SFML/build/vc2008/sfml-network.vcproj +++ b/Externals/SFML/build/vc2008/sfml-network.vcproj @@ -1,395 +1,395 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Externals/SOIL/SOIL.h b/Externals/SOIL/SOIL.h index 715667184f..9033c201d1 100644 --- a/Externals/SOIL/SOIL.h +++ b/Externals/SOIL/SOIL.h @@ -1,418 +1,418 @@ -/** - @mainpage SOIL - - Jonathan Dummer - 2007-07-26-10.36 - - Simple OpenGL Image Library - - A tiny c library for uploading images as - textures into OpenGL. Also saving and - loading of images is supported. - - I'm using Sean's Tool Box image loader as a base: - http://www.nothings.org/ - - I'm upgrading it to load TGA and DDS files, and a direct - path for loading DDS files straight into OpenGL textures, - when applicable. - - Image Formats: - - BMP load & save - - TGA load & save - - DDS load & save - - PNG load - - JPG load - - OpenGL Texture Features: - - resample to power-of-two sizes - - MIPmap generation - - compressed texture S3TC formats (if supported) - - can pre-multiply alpha for you, for better compositing - - can flip image about the y-axis (except pre-compressed DDS files) - - Thanks to: - * Sean Barret - for the awesome stb_image - * Dan Venkitachalam - for finding some non-compliant DDS files, and patching some explicit casts - * everybody at gamedev.net -**/ - -#ifndef HEADER_SIMPLE_OPENGL_IMAGE_LIBRARY -#define HEADER_SIMPLE_OPENGL_IMAGE_LIBRARY - -#ifdef __cplusplus -extern "C" { -#endif - -/** - The format of images that may be loaded (force_channels). - SOIL_LOAD_AUTO leaves the image in whatever format it was found. - SOIL_LOAD_L forces the image to load as Luminous (greyscale) - SOIL_LOAD_LA forces the image to load as Luminous with Alpha - SOIL_LOAD_RGB forces the image to load as Red Green Blue - SOIL_LOAD_RGBA forces the image to load as Red Green Blue Alpha -**/ -enum -{ - SOIL_LOAD_AUTO = 0, - SOIL_LOAD_L = 1, - SOIL_LOAD_LA = 2, - SOIL_LOAD_RGB = 3, - SOIL_LOAD_RGBA = 4 -}; - -/** - Passed in as reuse_texture_ID, will cause SOIL to - register a new texture ID using glGenTextures(). - If the value passed into reuse_texture_ID > 0 then - SOIL will just re-use that texture ID (great for - reloading image assets in-game!) -**/ -enum -{ - SOIL_CREATE_NEW_ID = 0 -}; - -/** - flags you can pass into SOIL_load_OGL_texture() - and SOIL_create_OGL_texture(). - (note that if SOIL_FLAG_DDS_LOAD_DIRECT is used - the rest of the flags with the exception of - SOIL_FLAG_TEXTURE_REPEATS will be ignored while - loading already-compressed DDS files.) - - SOIL_FLAG_POWER_OF_TWO: force the image to be POT - SOIL_FLAG_MIPMAPS: generate mipmaps for the texture - SOIL_FLAG_TEXTURE_REPEATS: otherwise will clamp - SOIL_FLAG_MULTIPLY_ALPHA: for using (GL_ONE,GL_ONE_MINUS_SRC_ALPHA) blending - SOIL_FLAG_INVERT_Y: flip the image vertically - SOIL_FLAG_COMPRESS_TO_DXT: if the card can display them, will convert RGB to DXT1, RGBA to DXT5 - SOIL_FLAG_DDS_LOAD_DIRECT: will load DDS files directly without _ANY_ additional processing - SOIL_FLAG_NTSC_SAFE_RGB: clamps RGB components to the range [16,235] - SOIL_FLAG_CoCg_Y: Google YCoCg; RGB=>CoYCg, RGBA=>CoCgAY - SOIL_FLAG_TEXTURE_RECTANGE: uses ARB_texture_rectangle ; pixel indexed & no repeat or MIPmaps or cubemaps -**/ -enum -{ - SOIL_FLAG_POWER_OF_TWO = 1, - SOIL_FLAG_MIPMAPS = 2, - SOIL_FLAG_TEXTURE_REPEATS = 4, - SOIL_FLAG_MULTIPLY_ALPHA = 8, - SOIL_FLAG_INVERT_Y = 16, - SOIL_FLAG_COMPRESS_TO_DXT = 32, - SOIL_FLAG_DDS_LOAD_DIRECT = 64, - SOIL_FLAG_NTSC_SAFE_RGB = 128, - SOIL_FLAG_CoCg_Y = 256, - SOIL_FLAG_TEXTURE_RECTANGLE = 512 -}; - -/** - The types of images that may be saved. - (TGA supports uncompressed RGB / RGBA) - (BMP supports uncompressed RGB) - (DDS supports DXT1 and DXT5) -**/ -enum -{ - SOIL_SAVE_TYPE_TGA = 0, - SOIL_SAVE_TYPE_BMP = 1, - SOIL_SAVE_TYPE_DDS = 2 -}; - -/** - Defines the order of faces in a DDS cubemap. - I recommend that you use the same order in single - image cubemap files, so they will be interchangeable - with DDS cubemaps when using SOIL. -**/ -#define SOIL_DDS_CUBEMAP_FACE_ORDER "EWUDNS" - -/** - The types of internal fake HDR representations - - SOIL_HDR_RGBE: RGB * pow( 2.0, A - 128.0 ) - SOIL_HDR_RGBdivA: RGB / A - SOIL_HDR_RGBdivA2: RGB / (A*A) -**/ -enum -{ - SOIL_HDR_RGBE = 0, - SOIL_HDR_RGBdivA = 1, - SOIL_HDR_RGBdivA2 = 2 -}; - -/** - Loads an image from disk into an OpenGL texture. - \param filename the name of the file to upload as a texture - \param force_channels 0-image format, 1-luminous, 2-luminous/alpha, 3-RGB, 4-RGBA - \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) - \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT | SOIL_FLAG_DDS_LOAD_DIRECT - \return 0-failed, otherwise returns the OpenGL texture handle -**/ -unsigned int SOIL_load_OGL_texture - ( - const char *filename, - int force_channels, - unsigned int reuse_texture_ID, - unsigned int flags - ); - -/** - Loads 6 images from disk into an OpenGL cubemap texture. - \param x_pos_file the name of the file to upload as the +x cube face - \param x_neg_file the name of the file to upload as the -x cube face - \param y_pos_file the name of the file to upload as the +y cube face - \param y_neg_file the name of the file to upload as the -y cube face - \param z_pos_file the name of the file to upload as the +z cube face - \param z_neg_file the name of the file to upload as the -z cube face - \param force_channels 0-image format, 1-luminous, 2-luminous/alpha, 3-RGB, 4-RGBA - \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) - \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT | SOIL_FLAG_DDS_LOAD_DIRECT - \return 0-failed, otherwise returns the OpenGL texture handle -**/ -unsigned int SOIL_load_OGL_cubemap - ( - const char *x_pos_file, - const char *x_neg_file, - const char *y_pos_file, - const char *y_neg_file, - const char *z_pos_file, - const char *z_neg_file, - int force_channels, - unsigned int reuse_texture_ID, - unsigned int flags - ); - -/** - Loads 1 image from disk and splits it into an OpenGL cubemap texture. - \param filename the name of the file to upload as a texture - \param face_order the order of the faces in the file, any combination of NSWEUD, for North, South, Up, etc. - \param force_channels 0-image format, 1-luminous, 2-luminous/alpha, 3-RGB, 4-RGBA - \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) - \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT | SOIL_FLAG_DDS_LOAD_DIRECT - \return 0-failed, otherwise returns the OpenGL texture handle -**/ -unsigned int SOIL_load_OGL_single_cubemap - ( - const char *filename, - const char face_order[6], - int force_channels, - unsigned int reuse_texture_ID, - unsigned int flags - ); - -/** - Loads an HDR image from disk into an OpenGL texture. - \param filename the name of the file to upload as a texture - \param fake_HDR_format SOIL_HDR_RGBE, SOIL_HDR_RGBdivA, SOIL_HDR_RGBdivA2 - \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) - \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT - \return 0-failed, otherwise returns the OpenGL texture handle -**/ -unsigned int SOIL_load_OGL_HDR_texture - ( - const char *filename, - int fake_HDR_format, - int rescale_to_max, - unsigned int reuse_texture_ID, - unsigned int flags - ); - -/** - Loads an image from RAM into an OpenGL texture. - \param buffer the image data in RAM just as if it were still in a file - \param buffer_length the size of the buffer in bytes - \param force_channels 0-image format, 1-luminous, 2-luminous/alpha, 3-RGB, 4-RGBA - \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) - \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT | SOIL_FLAG_DDS_LOAD_DIRECT - \return 0-failed, otherwise returns the OpenGL texture handle -**/ -unsigned int SOIL_load_OGL_texture_from_memory - ( - const unsigned char *const buffer, - int buffer_length, - int force_channels, - unsigned int reuse_texture_ID, - unsigned int flags - ); - -/** - Loads 6 images from memory into an OpenGL cubemap texture. - \param x_pos_buffer the image data in RAM to upload as the +x cube face - \param x_pos_buffer_length the size of the above buffer - \param x_neg_buffer the image data in RAM to upload as the +x cube face - \param x_neg_buffer_length the size of the above buffer - \param y_pos_buffer the image data in RAM to upload as the +x cube face - \param y_pos_buffer_length the size of the above buffer - \param y_neg_buffer the image data in RAM to upload as the +x cube face - \param y_neg_buffer_length the size of the above buffer - \param z_pos_buffer the image data in RAM to upload as the +x cube face - \param z_pos_buffer_length the size of the above buffer - \param z_neg_buffer the image data in RAM to upload as the +x cube face - \param z_neg_buffer_length the size of the above buffer - \param force_channels 0-image format, 1-luminous, 2-luminous/alpha, 3-RGB, 4-RGBA - \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) - \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT | SOIL_FLAG_DDS_LOAD_DIRECT - \return 0-failed, otherwise returns the OpenGL texture handle -**/ -unsigned int SOIL_load_OGL_cubemap_from_memory - ( - const unsigned char *const x_pos_buffer, - int x_pos_buffer_length, - const unsigned char *const x_neg_buffer, - int x_neg_buffer_length, - const unsigned char *const y_pos_buffer, - int y_pos_buffer_length, - const unsigned char *const y_neg_buffer, - int y_neg_buffer_length, - const unsigned char *const z_pos_buffer, - int z_pos_buffer_length, - const unsigned char *const z_neg_buffer, - int z_neg_buffer_length, - int force_channels, - unsigned int reuse_texture_ID, - unsigned int flags - ); - -/** - Loads 1 image from RAM and splits it into an OpenGL cubemap texture. - \param buffer the image data in RAM just as if it were still in a file - \param buffer_length the size of the buffer in bytes - \param face_order the order of the faces in the file, any combination of NSWEUD, for North, South, Up, etc. - \param force_channels 0-image format, 1-luminous, 2-luminous/alpha, 3-RGB, 4-RGBA - \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) - \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT | SOIL_FLAG_DDS_LOAD_DIRECT - \return 0-failed, otherwise returns the OpenGL texture handle -**/ -unsigned int SOIL_load_OGL_single_cubemap_from_memory - ( - const unsigned char *const buffer, - int buffer_length, - const char face_order[6], - int force_channels, - unsigned int reuse_texture_ID, - unsigned int flags - ); - -/** - Creates a 2D OpenGL texture from raw image data. Note that the raw data is - _NOT_ freed after the upload (so the user can load various versions). - \param data the raw data to be uploaded as an OpenGL texture - \param width the width of the image in pixels - \param height the height of the image in pixels - \param channels the number of channels: 1-luminous, 2-luminous/alpha, 3-RGB, 4-RGBA - \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) - \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT - \return 0-failed, otherwise returns the OpenGL texture handle -**/ -unsigned int SOIL_create_OGL_texture - ( - const unsigned char *const data, - int width, int height, int channels, - unsigned int reuse_texture_ID, - unsigned int flags - ); - -/** - Creates an OpenGL cubemap texture by splitting up 1 image into 6 parts. - \param data the raw data to be uploaded as an OpenGL texture - \param width the width of the image in pixels - \param height the height of the image in pixels - \param channels the number of channels: 1-luminous, 2-luminous/alpha, 3-RGB, 4-RGBA - \param face_order the order of the faces in the file, and combination of NSWEUD, for North, South, Up, etc. - \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) - \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT | SOIL_FLAG_DDS_LOAD_DIRECT - \return 0-failed, otherwise returns the OpenGL texture handle -**/ -unsigned int SOIL_create_OGL_single_cubemap - ( - const unsigned char *const data, - int width, int height, int channels, - const char face_order[6], - unsigned int reuse_texture_ID, - unsigned int flags - ); - -/** - Captures the OpenGL window (RGB) and saves it to disk - \return 0 if it failed, otherwise returns 1 -**/ -int SOIL_save_screenshot - ( - const char *filename, - int image_type, - int x, int y, - int width, int height - ); - -/** - Loads an image from disk into an array of unsigned chars. - Note that *channels return the original channel count of the - image. If force_channels was other than SOIL_LOAD_AUTO, - the resulting image has force_channels, but *channels may be - different (if the original image had a different channel - count). - \return 0 if failed, otherwise returns 1 -**/ -unsigned char* SOIL_load_image - ( - const char *filename, - int *width, int *height, int *channels, - int force_channels - ); - -/** - Loads an image from memory into an array of unsigned chars. - Note that *channels return the original channel count of the - image. If force_channels was other than SOIL_LOAD_AUTO, - the resulting image has force_channels, but *channels may be - different (if the original image had a different channel - count). - \return 0 if failed, otherwise returns 1 -**/ -unsigned char* SOIL_load_image_from_memory - ( - const unsigned char *const buffer, - int buffer_length, - int *width, int *height, int *channels, - int force_channels - ); - -/** - Saves an image from an array of unsigned chars (RGBA) to disk - \return 0 if failed, otherwise returns 1 -**/ -int SOIL_save_image - ( - const char *filename, - int image_type, - int width, int height, int channels, - const unsigned char *const data - ); - -/** - Frees the image data (note, this is just C's "free()"...this function is - present mostly so C++ programmers don't forget to use "free()" and call - "delete []" instead [8^) -**/ -void SOIL_free_image_data - ( - unsigned char *img_data - ); - -/** - This function resturn a pointer to a string describing the last thing - that happened inside SOIL. It can be used to determine why an image - failed to load. -**/ -const char* SOIL_last_result - ( - void - ); - - -#ifdef __cplusplus -} -#endif - -#endif /* HEADER_SIMPLE_OPENGL_IMAGE_LIBRARY */ +/** + @mainpage SOIL + + Jonathan Dummer + 2007-07-26-10.36 + + Simple OpenGL Image Library + + A tiny c library for uploading images as + textures into OpenGL. Also saving and + loading of images is supported. + + I'm using Sean's Tool Box image loader as a base: + http://www.nothings.org/ + + I'm upgrading it to load TGA and DDS files, and a direct + path for loading DDS files straight into OpenGL textures, + when applicable. + + Image Formats: + - BMP load & save + - TGA load & save + - DDS load & save + - PNG load + - JPG load + + OpenGL Texture Features: + - resample to power-of-two sizes + - MIPmap generation + - compressed texture S3TC formats (if supported) + - can pre-multiply alpha for you, for better compositing + - can flip image about the y-axis (except pre-compressed DDS files) + + Thanks to: + * Sean Barret - for the awesome stb_image + * Dan Venkitachalam - for finding some non-compliant DDS files, and patching some explicit casts + * everybody at gamedev.net +**/ + +#ifndef HEADER_SIMPLE_OPENGL_IMAGE_LIBRARY +#define HEADER_SIMPLE_OPENGL_IMAGE_LIBRARY + +#ifdef __cplusplus +extern "C" { +#endif + +/** + The format of images that may be loaded (force_channels). + SOIL_LOAD_AUTO leaves the image in whatever format it was found. + SOIL_LOAD_L forces the image to load as Luminous (greyscale) + SOIL_LOAD_LA forces the image to load as Luminous with Alpha + SOIL_LOAD_RGB forces the image to load as Red Green Blue + SOIL_LOAD_RGBA forces the image to load as Red Green Blue Alpha +**/ +enum +{ + SOIL_LOAD_AUTO = 0, + SOIL_LOAD_L = 1, + SOIL_LOAD_LA = 2, + SOIL_LOAD_RGB = 3, + SOIL_LOAD_RGBA = 4 +}; + +/** + Passed in as reuse_texture_ID, will cause SOIL to + register a new texture ID using glGenTextures(). + If the value passed into reuse_texture_ID > 0 then + SOIL will just re-use that texture ID (great for + reloading image assets in-game!) +**/ +enum +{ + SOIL_CREATE_NEW_ID = 0 +}; + +/** + flags you can pass into SOIL_load_OGL_texture() + and SOIL_create_OGL_texture(). + (note that if SOIL_FLAG_DDS_LOAD_DIRECT is used + the rest of the flags with the exception of + SOIL_FLAG_TEXTURE_REPEATS will be ignored while + loading already-compressed DDS files.) + + SOIL_FLAG_POWER_OF_TWO: force the image to be POT + SOIL_FLAG_MIPMAPS: generate mipmaps for the texture + SOIL_FLAG_TEXTURE_REPEATS: otherwise will clamp + SOIL_FLAG_MULTIPLY_ALPHA: for using (GL_ONE,GL_ONE_MINUS_SRC_ALPHA) blending + SOIL_FLAG_INVERT_Y: flip the image vertically + SOIL_FLAG_COMPRESS_TO_DXT: if the card can display them, will convert RGB to DXT1, RGBA to DXT5 + SOIL_FLAG_DDS_LOAD_DIRECT: will load DDS files directly without _ANY_ additional processing + SOIL_FLAG_NTSC_SAFE_RGB: clamps RGB components to the range [16,235] + SOIL_FLAG_CoCg_Y: Google YCoCg; RGB=>CoYCg, RGBA=>CoCgAY + SOIL_FLAG_TEXTURE_RECTANGE: uses ARB_texture_rectangle ; pixel indexed & no repeat or MIPmaps or cubemaps +**/ +enum +{ + SOIL_FLAG_POWER_OF_TWO = 1, + SOIL_FLAG_MIPMAPS = 2, + SOIL_FLAG_TEXTURE_REPEATS = 4, + SOIL_FLAG_MULTIPLY_ALPHA = 8, + SOIL_FLAG_INVERT_Y = 16, + SOIL_FLAG_COMPRESS_TO_DXT = 32, + SOIL_FLAG_DDS_LOAD_DIRECT = 64, + SOIL_FLAG_NTSC_SAFE_RGB = 128, + SOIL_FLAG_CoCg_Y = 256, + SOIL_FLAG_TEXTURE_RECTANGLE = 512 +}; + +/** + The types of images that may be saved. + (TGA supports uncompressed RGB / RGBA) + (BMP supports uncompressed RGB) + (DDS supports DXT1 and DXT5) +**/ +enum +{ + SOIL_SAVE_TYPE_TGA = 0, + SOIL_SAVE_TYPE_BMP = 1, + SOIL_SAVE_TYPE_DDS = 2 +}; + +/** + Defines the order of faces in a DDS cubemap. + I recommend that you use the same order in single + image cubemap files, so they will be interchangeable + with DDS cubemaps when using SOIL. +**/ +#define SOIL_DDS_CUBEMAP_FACE_ORDER "EWUDNS" + +/** + The types of internal fake HDR representations + + SOIL_HDR_RGBE: RGB * pow( 2.0, A - 128.0 ) + SOIL_HDR_RGBdivA: RGB / A + SOIL_HDR_RGBdivA2: RGB / (A*A) +**/ +enum +{ + SOIL_HDR_RGBE = 0, + SOIL_HDR_RGBdivA = 1, + SOIL_HDR_RGBdivA2 = 2 +}; + +/** + Loads an image from disk into an OpenGL texture. + \param filename the name of the file to upload as a texture + \param force_channels 0-image format, 1-luminous, 2-luminous/alpha, 3-RGB, 4-RGBA + \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) + \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT | SOIL_FLAG_DDS_LOAD_DIRECT + \return 0-failed, otherwise returns the OpenGL texture handle +**/ +unsigned int SOIL_load_OGL_texture + ( + const char *filename, + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ); + +/** + Loads 6 images from disk into an OpenGL cubemap texture. + \param x_pos_file the name of the file to upload as the +x cube face + \param x_neg_file the name of the file to upload as the -x cube face + \param y_pos_file the name of the file to upload as the +y cube face + \param y_neg_file the name of the file to upload as the -y cube face + \param z_pos_file the name of the file to upload as the +z cube face + \param z_neg_file the name of the file to upload as the -z cube face + \param force_channels 0-image format, 1-luminous, 2-luminous/alpha, 3-RGB, 4-RGBA + \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) + \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT | SOIL_FLAG_DDS_LOAD_DIRECT + \return 0-failed, otherwise returns the OpenGL texture handle +**/ +unsigned int SOIL_load_OGL_cubemap + ( + const char *x_pos_file, + const char *x_neg_file, + const char *y_pos_file, + const char *y_neg_file, + const char *z_pos_file, + const char *z_neg_file, + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ); + +/** + Loads 1 image from disk and splits it into an OpenGL cubemap texture. + \param filename the name of the file to upload as a texture + \param face_order the order of the faces in the file, any combination of NSWEUD, for North, South, Up, etc. + \param force_channels 0-image format, 1-luminous, 2-luminous/alpha, 3-RGB, 4-RGBA + \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) + \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT | SOIL_FLAG_DDS_LOAD_DIRECT + \return 0-failed, otherwise returns the OpenGL texture handle +**/ +unsigned int SOIL_load_OGL_single_cubemap + ( + const char *filename, + const char face_order[6], + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ); + +/** + Loads an HDR image from disk into an OpenGL texture. + \param filename the name of the file to upload as a texture + \param fake_HDR_format SOIL_HDR_RGBE, SOIL_HDR_RGBdivA, SOIL_HDR_RGBdivA2 + \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) + \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT + \return 0-failed, otherwise returns the OpenGL texture handle +**/ +unsigned int SOIL_load_OGL_HDR_texture + ( + const char *filename, + int fake_HDR_format, + int rescale_to_max, + unsigned int reuse_texture_ID, + unsigned int flags + ); + +/** + Loads an image from RAM into an OpenGL texture. + \param buffer the image data in RAM just as if it were still in a file + \param buffer_length the size of the buffer in bytes + \param force_channels 0-image format, 1-luminous, 2-luminous/alpha, 3-RGB, 4-RGBA + \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) + \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT | SOIL_FLAG_DDS_LOAD_DIRECT + \return 0-failed, otherwise returns the OpenGL texture handle +**/ +unsigned int SOIL_load_OGL_texture_from_memory + ( + const unsigned char *const buffer, + int buffer_length, + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ); + +/** + Loads 6 images from memory into an OpenGL cubemap texture. + \param x_pos_buffer the image data in RAM to upload as the +x cube face + \param x_pos_buffer_length the size of the above buffer + \param x_neg_buffer the image data in RAM to upload as the +x cube face + \param x_neg_buffer_length the size of the above buffer + \param y_pos_buffer the image data in RAM to upload as the +x cube face + \param y_pos_buffer_length the size of the above buffer + \param y_neg_buffer the image data in RAM to upload as the +x cube face + \param y_neg_buffer_length the size of the above buffer + \param z_pos_buffer the image data in RAM to upload as the +x cube face + \param z_pos_buffer_length the size of the above buffer + \param z_neg_buffer the image data in RAM to upload as the +x cube face + \param z_neg_buffer_length the size of the above buffer + \param force_channels 0-image format, 1-luminous, 2-luminous/alpha, 3-RGB, 4-RGBA + \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) + \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT | SOIL_FLAG_DDS_LOAD_DIRECT + \return 0-failed, otherwise returns the OpenGL texture handle +**/ +unsigned int SOIL_load_OGL_cubemap_from_memory + ( + const unsigned char *const x_pos_buffer, + int x_pos_buffer_length, + const unsigned char *const x_neg_buffer, + int x_neg_buffer_length, + const unsigned char *const y_pos_buffer, + int y_pos_buffer_length, + const unsigned char *const y_neg_buffer, + int y_neg_buffer_length, + const unsigned char *const z_pos_buffer, + int z_pos_buffer_length, + const unsigned char *const z_neg_buffer, + int z_neg_buffer_length, + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ); + +/** + Loads 1 image from RAM and splits it into an OpenGL cubemap texture. + \param buffer the image data in RAM just as if it were still in a file + \param buffer_length the size of the buffer in bytes + \param face_order the order of the faces in the file, any combination of NSWEUD, for North, South, Up, etc. + \param force_channels 0-image format, 1-luminous, 2-luminous/alpha, 3-RGB, 4-RGBA + \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) + \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT | SOIL_FLAG_DDS_LOAD_DIRECT + \return 0-failed, otherwise returns the OpenGL texture handle +**/ +unsigned int SOIL_load_OGL_single_cubemap_from_memory + ( + const unsigned char *const buffer, + int buffer_length, + const char face_order[6], + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ); + +/** + Creates a 2D OpenGL texture from raw image data. Note that the raw data is + _NOT_ freed after the upload (so the user can load various versions). + \param data the raw data to be uploaded as an OpenGL texture + \param width the width of the image in pixels + \param height the height of the image in pixels + \param channels the number of channels: 1-luminous, 2-luminous/alpha, 3-RGB, 4-RGBA + \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) + \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT + \return 0-failed, otherwise returns the OpenGL texture handle +**/ +unsigned int SOIL_create_OGL_texture + ( + const unsigned char *const data, + int width, int height, int channels, + unsigned int reuse_texture_ID, + unsigned int flags + ); + +/** + Creates an OpenGL cubemap texture by splitting up 1 image into 6 parts. + \param data the raw data to be uploaded as an OpenGL texture + \param width the width of the image in pixels + \param height the height of the image in pixels + \param channels the number of channels: 1-luminous, 2-luminous/alpha, 3-RGB, 4-RGBA + \param face_order the order of the faces in the file, and combination of NSWEUD, for North, South, Up, etc. + \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) + \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT | SOIL_FLAG_DDS_LOAD_DIRECT + \return 0-failed, otherwise returns the OpenGL texture handle +**/ +unsigned int SOIL_create_OGL_single_cubemap + ( + const unsigned char *const data, + int width, int height, int channels, + const char face_order[6], + unsigned int reuse_texture_ID, + unsigned int flags + ); + +/** + Captures the OpenGL window (RGB) and saves it to disk + \return 0 if it failed, otherwise returns 1 +**/ +int SOIL_save_screenshot + ( + const char *filename, + int image_type, + int x, int y, + int width, int height + ); + +/** + Loads an image from disk into an array of unsigned chars. + Note that *channels return the original channel count of the + image. If force_channels was other than SOIL_LOAD_AUTO, + the resulting image has force_channels, but *channels may be + different (if the original image had a different channel + count). + \return 0 if failed, otherwise returns 1 +**/ +unsigned char* SOIL_load_image + ( + const char *filename, + int *width, int *height, int *channels, + int force_channels + ); + +/** + Loads an image from memory into an array of unsigned chars. + Note that *channels return the original channel count of the + image. If force_channels was other than SOIL_LOAD_AUTO, + the resulting image has force_channels, but *channels may be + different (if the original image had a different channel + count). + \return 0 if failed, otherwise returns 1 +**/ +unsigned char* SOIL_load_image_from_memory + ( + const unsigned char *const buffer, + int buffer_length, + int *width, int *height, int *channels, + int force_channels + ); + +/** + Saves an image from an array of unsigned chars (RGBA) to disk + \return 0 if failed, otherwise returns 1 +**/ +int SOIL_save_image + ( + const char *filename, + int image_type, + int width, int height, int channels, + const unsigned char *const data + ); + +/** + Frees the image data (note, this is just C's "free()"...this function is + present mostly so C++ programmers don't forget to use "free()" and call + "delete []" instead [8^) +**/ +void SOIL_free_image_data + ( + unsigned char *img_data + ); + +/** + This function resturn a pointer to a string describing the last thing + that happened inside SOIL. It can be used to determine why an image + failed to load. +**/ +const char* SOIL_last_result + ( + void + ); + + +#ifdef __cplusplus +} +#endif + +#endif /* HEADER_SIMPLE_OPENGL_IMAGE_LIBRARY */ diff --git a/Externals/SOIL/SOIL.vcproj b/Externals/SOIL/SOIL.vcproj index 1272ff90b7..ad0102107e 100644 --- a/Externals/SOIL/SOIL.vcproj +++ b/Externals/SOIL/SOIL.vcproj @@ -1,318 +1,318 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Externals/WiiUseSrc/wiiuse.vcproj b/Externals/WiiUseSrc/wiiuse.vcproj index 369a261e30..a4a1a41d7a 100644 --- a/Externals/WiiUseSrc/wiiuse.vcproj +++ b/Externals/WiiUseSrc/wiiuse.vcproj @@ -1,534 +1,534 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Externals/wxWidgets/build/msw/wx_adv.vcproj b/Externals/wxWidgets/build/msw/wx_adv.vcproj index eac0c62c26..1843d1fd7b 100644 --- a/Externals/wxWidgets/build/msw/wx_adv.vcproj +++ b/Externals/wxWidgets/build/msw/wx_adv.vcproj @@ -1,1748 +1,1748 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Externals/wxWidgets/build/msw/wx_aui.vcproj b/Externals/wxWidgets/build/msw/wx_aui.vcproj index ef43c32af8..5fc52b0f14 100644 --- a/Externals/wxWidgets/build/msw/wx_aui.vcproj +++ b/Externals/wxWidgets/build/msw/wx_aui.vcproj @@ -1,808 +1,808 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Externals/wxWidgets/build/msw/wx_base.vcproj b/Externals/wxWidgets/build/msw/wx_base.vcproj index 8ecb4de899..a9ad22b52b 100644 --- a/Externals/wxWidgets/build/msw/wx_base.vcproj +++ b/Externals/wxWidgets/build/msw/wx_base.vcproj @@ -1,4583 +1,4583 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Externals/wxWidgets/build/msw/wx_core.vcproj b/Externals/wxWidgets/build/msw/wx_core.vcproj index 1645e808b8..c2ce607157 100644 --- a/Externals/wxWidgets/build/msw/wx_core.vcproj +++ b/Externals/wxWidgets/build/msw/wx_core.vcproj @@ -1,14471 +1,14471 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Externals/zlib/zlib.vcproj b/Externals/zlib/zlib.vcproj index 9871fa8c19..3950750c08 100644 --- a/Externals/zlib/zlib.vcproj +++ b/Externals/zlib/zlib.vcproj @@ -1,389 +1,389 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Installer/Installer_win32.nsi b/Installer/Installer_win32.nsi index cc446fa2cc..5b16c60517 100644 --- a/Installer/Installer_win32.nsi +++ b/Installer/Installer_win32.nsi @@ -1,243 +1,243 @@ -!system "GetSVNRev.exe" ; ATTENTION: This MUST be run before this script -!include "svnrev.txt" ; !defines PRODUCT_VERSION -!define BASE_DIR "..\Binary\win32" - -; HM NIS Edit Wizard helper defines -!define PRODUCT_NAME "Dolphin" -!define PRODUCT_PUBLISHER "Dolphin Team" -!define PRODUCT_WEB_SITE "http://www.dolphin-emu.com" -!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\Dolphin.exe" -!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" -!define PRODUCT_UNINST_ROOT_KEY "HKLM" - -SetCompressor lzma - -; MUI 1.67 compatible ------ -!include "MUI.nsh" - -; MUI Settings -!define MUI_ABORTWARNING -!define MUI_ICON "Dolphin.ico" -!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico" - -; Language Selection Dialog Settings -!define MUI_LANGDLL_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}" -!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}" -!define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language" - -; License page -!insertmacro MUI_PAGE_LICENSE "Licence.txt" -; Components page -!insertmacro MUI_PAGE_COMPONENTS -; Directory page -!insertmacro MUI_PAGE_DIRECTORY -; Instfiles page -!insertmacro MUI_PAGE_INSTFILES -; Finish page -; We launch the desktop shortcut to set the working dir -!define MUI_FINISHPAGE_RUN -!define MUI_FINISHPAGE_RUN_TEXT "Start $(^Name)" -!define MUI_FINISHPAGE_RUN_FUNCTION "LaunchDolphin" -!insertmacro MUI_PAGE_FINISH - -; Uninstaller pages -!insertmacro MUI_UNPAGE_INSTFILES - -; Language files -!insertmacro MUI_LANGUAGE "Afrikaans" -!insertmacro MUI_LANGUAGE "Albanian" -!insertmacro MUI_LANGUAGE "Arabic" -!insertmacro MUI_LANGUAGE "Basque" -!insertmacro MUI_LANGUAGE "Belarusian" -!insertmacro MUI_LANGUAGE "Bosnian" -!insertmacro MUI_LANGUAGE "Breton" -!insertmacro MUI_LANGUAGE "Bulgarian" -!insertmacro MUI_LANGUAGE "Catalan" -!insertmacro MUI_LANGUAGE "Croatian" -!insertmacro MUI_LANGUAGE "Czech" -!insertmacro MUI_LANGUAGE "Danish" -!insertmacro MUI_LANGUAGE "Dutch" -!insertmacro MUI_LANGUAGE "English" -!insertmacro MUI_LANGUAGE "Estonian" -!insertmacro MUI_LANGUAGE "Farsi" -!insertmacro MUI_LANGUAGE "Finnish" -!insertmacro MUI_LANGUAGE "French" -!insertmacro MUI_LANGUAGE "Galician" -!insertmacro MUI_LANGUAGE "German" -!insertmacro MUI_LANGUAGE "Greek" -!insertmacro MUI_LANGUAGE "Hebrew" -!insertmacro MUI_LANGUAGE "Hungarian" -!insertmacro MUI_LANGUAGE "Icelandic" -!insertmacro MUI_LANGUAGE "Indonesian" -!insertmacro MUI_LANGUAGE "Irish" -!insertmacro MUI_LANGUAGE "Italian" -!insertmacro MUI_LANGUAGE "Japanese" -!insertmacro MUI_LANGUAGE "Korean" -!insertmacro MUI_LANGUAGE "Kurdish" -!insertmacro MUI_LANGUAGE "Latvian" -!insertmacro MUI_LANGUAGE "Lithuanian" -!insertmacro MUI_LANGUAGE "Luxembourgish" -!insertmacro MUI_LANGUAGE "Macedonian" -!insertmacro MUI_LANGUAGE "Malay" -!insertmacro MUI_LANGUAGE "Mongolian" -!insertmacro MUI_LANGUAGE "Norwegian" -!insertmacro MUI_LANGUAGE "NorwegianNynorsk" -!insertmacro MUI_LANGUAGE "Polish" -!insertmacro MUI_LANGUAGE "Portuguese" -!insertmacro MUI_LANGUAGE "PortugueseBR" -!insertmacro MUI_LANGUAGE "Romanian" -!insertmacro MUI_LANGUAGE "Russian" -!insertmacro MUI_LANGUAGE "Serbian" -!insertmacro MUI_LANGUAGE "SerbianLatin" -!insertmacro MUI_LANGUAGE "SimpChinese" -!insertmacro MUI_LANGUAGE "Slovak" -!insertmacro MUI_LANGUAGE "Slovenian" -!insertmacro MUI_LANGUAGE "Spanish" -!insertmacro MUI_LANGUAGE "SpanishInternational" -!insertmacro MUI_LANGUAGE "Swedish" -!insertmacro MUI_LANGUAGE "Thai" -!insertmacro MUI_LANGUAGE "TradChinese" -!insertmacro MUI_LANGUAGE "Turkish" -!insertmacro MUI_LANGUAGE "Ukrainian" -!insertmacro MUI_LANGUAGE "Uzbek" -!insertmacro MUI_LANGUAGE "Welsh" - -; Reserve files -!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS - -; MUI end ------ - -Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" -!define UN_NAME "Uninstall $(^Name)" -OutFile "Dolphin_Installer_win32.exe" -InstallDir "$PROGRAMFILES\$(^Name)" -InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" "" -ShowInstDetails show -ShowUnInstDetails show - -Function .onInit - !insertmacro MUI_LANGDLL_DISPLAY -FunctionEnd - -Section "Base" SEC01 - SetShellVarContext all - ; Dolphin exe and dlls - ; TODO: cg is only for OGL, SDL is only for nJoy - ; TODO: Make a nice subsection-ized display - SetOutPath "$INSTDIR" - SetOverwrite ifnewer - File "${BASE_DIR}\Dolphin.exe" - File "..\Externals\Cg\cg.dll" - File "..\Externals\Cg\cgGL.dll" - ; File "..\Externals\Cg\cgD3D9.dll" - File "..\Externals\WiiUse\Win32\wiiuse.dll" - File "..\Externals\SDL\win32\SDL.dll" - File "..\Externals\OpenAL\win32\OpenAL32.dll" - File "..\Externals\OpenAL\win32\wrap_oal.dll" - ; This needs to be done after Dolphin.exe is copied - CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}" - CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Dolphin.lnk" "$INSTDIR\Dolphin.exe" - CreateShortCut "$DESKTOP\Dolphin.lnk" "$INSTDIR\Dolphin.exe" - - ; Plugins - SetOutPath "$INSTDIR\Plugins" - SetOverwrite ifnewer - File "${BASE_DIR}\Plugins\Plugin_DSP_HLE.dll" - File "${BASE_DIR}\Plugins\Plugin_DSP_LLE.dll" - File "${BASE_DIR}\Plugins\Plugin_nJoy_SDL.dll" - File "${BASE_DIR}\Plugins\Plugin_nJoy_SDL_Test.dll" - File "${BASE_DIR}\Plugins\Plugin_PadSimple.dll" - File "${BASE_DIR}\Plugins\Plugin_VideoDX9.dll" - File "${BASE_DIR}\Plugins\Plugin_VideoOGL.dll" - File "${BASE_DIR}\Plugins\Plugin_Wiimote.dll" - File "${BASE_DIR}\Plugins\Plugin_VideoSW.dll" - - ; GC/Wii static settings - SetOutPath "$INSTDIR\Sys\GC" - SetOverwrite ifnewer - File "..\Data\Sys\GC\font_ansi.bin" - File "..\Data\Sys\GC\font_sjis.bin" - SetOutPath "$INSTDIR\Sys\Wii" - SetOverwrite ifnewer - File "..\Data\Sys\Wii\setting-eur.txt" - File "..\Data\Sys\Wii\setting-jpn.txt" - File "..\Data\Sys\Wii\setting-usa.txt" - - ; GC/Wii User settings - SetOutPath "$INSTDIR\User\GC" - SetOutPath "$INSTDIR\User\Wii\shared2\sys" - SetOverwrite ifnewer - File "..\Data\User\Wii\shared2\sys\readme.txt" - File "..\Data\User\Wii\shared2\sys\SYSCONF" - - ; GameConfigs - SetOutPath "$INSTDIR\User\GameConfig" - SetOverwrite ifnewer - File "..\Data\User\GameConfig\*.*" -SectionEnd - -Section -AdditionalIcons - CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${UN_NAME}.lnk" "$INSTDIR\uninst.exe" -SectionEnd - -Section -Post - WriteUninstaller "$INSTDIR\uninst.exe" - WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\Dolphin.exe" - WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" - WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe" - WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\Dolphin.exe" - WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" - WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}" - WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}" -SectionEnd - -; Section descriptions -!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN - !insertmacro MUI_DESCRIPTION_TEXT ${SEC01} "It is recommended that you install all of the included files." -!insertmacro MUI_FUNCTION_DESCRIPTION_END - - -Function un.onUninstSuccess - HideWindow - MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) was uninstalled successfully.$\r$\n\ - ATTENTION: You must manually delete$\r$\n$INSTDIR" -FunctionEnd - -Function un.onInit -!insertmacro MUI_UNGETLANGUAGE - MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you sure you want to remove $(^Name)?" IDYES +2 - Abort -FunctionEnd - -Section Uninstall - SetShellVarContext all - ; Only uninstall what we put there; all $INSTDIR\User is left as is - Delete "$INSTDIR\uninst.exe" - Delete "$INSTDIR\*.dll" - Delete "$INSTDIR\Plugins\*.dll" - Delete "$INSTDIR\Sys\Wii\setting-usa.txt" - Delete "$INSTDIR\Sys\Wii\setting-jpn.txt" - Delete "$INSTDIR\Sys\Wii\setting-eur.txt" - Delete "$INSTDIR\Sys\GC\font_sjis.bin" - Delete "$INSTDIR\Sys\GC\font_ansi.bin" - Delete "$INSTDIR\Dolphin.exe" - - Delete "$SMPROGRAMS\${PRODUCT_NAME}\${UN_NAME}.lnk" - Delete "$DESKTOP\Dolphin.lnk" - Delete "$SMPROGRAMS\${PRODUCT_NAME}\Dolphin.lnk" - - RMDir "$SMPROGRAMS\${PRODUCT_NAME}" - RMDir "$INSTDIR\Sys\GC" - RMDir "$INSTDIR\Sys\Wii" - RMDir "$INSTDIR\Sys" - RMDir "$INSTDIR\Plugins" - RMDir "$INSTDIR" - - DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" - DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}" - SetAutoClose true -SectionEnd - -Function LaunchDolphin - ExecShell "" "$DESKTOP\Dolphin.lnk" +!system "GetSVNRev.exe" ; ATTENTION: This MUST be run before this script +!include "svnrev.txt" ; !defines PRODUCT_VERSION +!define BASE_DIR "..\Binary\win32" + +; HM NIS Edit Wizard helper defines +!define PRODUCT_NAME "Dolphin" +!define PRODUCT_PUBLISHER "Dolphin Team" +!define PRODUCT_WEB_SITE "http://www.dolphin-emu.com" +!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\Dolphin.exe" +!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" +!define PRODUCT_UNINST_ROOT_KEY "HKLM" + +SetCompressor lzma + +; MUI 1.67 compatible ------ +!include "MUI.nsh" + +; MUI Settings +!define MUI_ABORTWARNING +!define MUI_ICON "Dolphin.ico" +!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico" + +; Language Selection Dialog Settings +!define MUI_LANGDLL_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}" +!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}" +!define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language" + +; License page +!insertmacro MUI_PAGE_LICENSE "Licence.txt" +; Components page +!insertmacro MUI_PAGE_COMPONENTS +; Directory page +!insertmacro MUI_PAGE_DIRECTORY +; Instfiles page +!insertmacro MUI_PAGE_INSTFILES +; Finish page +; We launch the desktop shortcut to set the working dir +!define MUI_FINISHPAGE_RUN +!define MUI_FINISHPAGE_RUN_TEXT "Start $(^Name)" +!define MUI_FINISHPAGE_RUN_FUNCTION "LaunchDolphin" +!insertmacro MUI_PAGE_FINISH + +; Uninstaller pages +!insertmacro MUI_UNPAGE_INSTFILES + +; Language files +!insertmacro MUI_LANGUAGE "Afrikaans" +!insertmacro MUI_LANGUAGE "Albanian" +!insertmacro MUI_LANGUAGE "Arabic" +!insertmacro MUI_LANGUAGE "Basque" +!insertmacro MUI_LANGUAGE "Belarusian" +!insertmacro MUI_LANGUAGE "Bosnian" +!insertmacro MUI_LANGUAGE "Breton" +!insertmacro MUI_LANGUAGE "Bulgarian" +!insertmacro MUI_LANGUAGE "Catalan" +!insertmacro MUI_LANGUAGE "Croatian" +!insertmacro MUI_LANGUAGE "Czech" +!insertmacro MUI_LANGUAGE "Danish" +!insertmacro MUI_LANGUAGE "Dutch" +!insertmacro MUI_LANGUAGE "English" +!insertmacro MUI_LANGUAGE "Estonian" +!insertmacro MUI_LANGUAGE "Farsi" +!insertmacro MUI_LANGUAGE "Finnish" +!insertmacro MUI_LANGUAGE "French" +!insertmacro MUI_LANGUAGE "Galician" +!insertmacro MUI_LANGUAGE "German" +!insertmacro MUI_LANGUAGE "Greek" +!insertmacro MUI_LANGUAGE "Hebrew" +!insertmacro MUI_LANGUAGE "Hungarian" +!insertmacro MUI_LANGUAGE "Icelandic" +!insertmacro MUI_LANGUAGE "Indonesian" +!insertmacro MUI_LANGUAGE "Irish" +!insertmacro MUI_LANGUAGE "Italian" +!insertmacro MUI_LANGUAGE "Japanese" +!insertmacro MUI_LANGUAGE "Korean" +!insertmacro MUI_LANGUAGE "Kurdish" +!insertmacro MUI_LANGUAGE "Latvian" +!insertmacro MUI_LANGUAGE "Lithuanian" +!insertmacro MUI_LANGUAGE "Luxembourgish" +!insertmacro MUI_LANGUAGE "Macedonian" +!insertmacro MUI_LANGUAGE "Malay" +!insertmacro MUI_LANGUAGE "Mongolian" +!insertmacro MUI_LANGUAGE "Norwegian" +!insertmacro MUI_LANGUAGE "NorwegianNynorsk" +!insertmacro MUI_LANGUAGE "Polish" +!insertmacro MUI_LANGUAGE "Portuguese" +!insertmacro MUI_LANGUAGE "PortugueseBR" +!insertmacro MUI_LANGUAGE "Romanian" +!insertmacro MUI_LANGUAGE "Russian" +!insertmacro MUI_LANGUAGE "Serbian" +!insertmacro MUI_LANGUAGE "SerbianLatin" +!insertmacro MUI_LANGUAGE "SimpChinese" +!insertmacro MUI_LANGUAGE "Slovak" +!insertmacro MUI_LANGUAGE "Slovenian" +!insertmacro MUI_LANGUAGE "Spanish" +!insertmacro MUI_LANGUAGE "SpanishInternational" +!insertmacro MUI_LANGUAGE "Swedish" +!insertmacro MUI_LANGUAGE "Thai" +!insertmacro MUI_LANGUAGE "TradChinese" +!insertmacro MUI_LANGUAGE "Turkish" +!insertmacro MUI_LANGUAGE "Ukrainian" +!insertmacro MUI_LANGUAGE "Uzbek" +!insertmacro MUI_LANGUAGE "Welsh" + +; Reserve files +!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS + +; MUI end ------ + +Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" +!define UN_NAME "Uninstall $(^Name)" +OutFile "Dolphin_Installer_win32.exe" +InstallDir "$PROGRAMFILES\$(^Name)" +InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" "" +ShowInstDetails show +ShowUnInstDetails show + +Function .onInit + !insertmacro MUI_LANGDLL_DISPLAY +FunctionEnd + +Section "Base" SEC01 + SetShellVarContext all + ; Dolphin exe and dlls + ; TODO: cg is only for OGL, SDL is only for nJoy + ; TODO: Make a nice subsection-ized display + SetOutPath "$INSTDIR" + SetOverwrite ifnewer + File "${BASE_DIR}\Dolphin.exe" + File "..\Externals\Cg\cg.dll" + File "..\Externals\Cg\cgGL.dll" + ; File "..\Externals\Cg\cgD3D9.dll" + File "..\Externals\WiiUse\Win32\wiiuse.dll" + File "..\Externals\SDL\win32\SDL.dll" + File "..\Externals\OpenAL\win32\OpenAL32.dll" + File "..\Externals\OpenAL\win32\wrap_oal.dll" + ; This needs to be done after Dolphin.exe is copied + CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}" + CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Dolphin.lnk" "$INSTDIR\Dolphin.exe" + CreateShortCut "$DESKTOP\Dolphin.lnk" "$INSTDIR\Dolphin.exe" + + ; Plugins + SetOutPath "$INSTDIR\Plugins" + SetOverwrite ifnewer + File "${BASE_DIR}\Plugins\Plugin_DSP_HLE.dll" + File "${BASE_DIR}\Plugins\Plugin_DSP_LLE.dll" + File "${BASE_DIR}\Plugins\Plugin_nJoy_SDL.dll" + File "${BASE_DIR}\Plugins\Plugin_nJoy_SDL_Test.dll" + File "${BASE_DIR}\Plugins\Plugin_PadSimple.dll" + File "${BASE_DIR}\Plugins\Plugin_VideoDX9.dll" + File "${BASE_DIR}\Plugins\Plugin_VideoOGL.dll" + File "${BASE_DIR}\Plugins\Plugin_Wiimote.dll" + File "${BASE_DIR}\Plugins\Plugin_VideoSW.dll" + + ; GC/Wii static settings + SetOutPath "$INSTDIR\Sys\GC" + SetOverwrite ifnewer + File "..\Data\Sys\GC\font_ansi.bin" + File "..\Data\Sys\GC\font_sjis.bin" + SetOutPath "$INSTDIR\Sys\Wii" + SetOverwrite ifnewer + File "..\Data\Sys\Wii\setting-eur.txt" + File "..\Data\Sys\Wii\setting-jpn.txt" + File "..\Data\Sys\Wii\setting-usa.txt" + + ; GC/Wii User settings + SetOutPath "$INSTDIR\User\GC" + SetOutPath "$INSTDIR\User\Wii\shared2\sys" + SetOverwrite ifnewer + File "..\Data\User\Wii\shared2\sys\readme.txt" + File "..\Data\User\Wii\shared2\sys\SYSCONF" + + ; GameConfigs + SetOutPath "$INSTDIR\User\GameConfig" + SetOverwrite ifnewer + File "..\Data\User\GameConfig\*.*" +SectionEnd + +Section -AdditionalIcons + CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${UN_NAME}.lnk" "$INSTDIR\uninst.exe" +SectionEnd + +Section -Post + WriteUninstaller "$INSTDIR\uninst.exe" + WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\Dolphin.exe" + WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" + WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe" + WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\Dolphin.exe" + WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" + WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}" + WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}" +SectionEnd + +; Section descriptions +!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN + !insertmacro MUI_DESCRIPTION_TEXT ${SEC01} "It is recommended that you install all of the included files." +!insertmacro MUI_FUNCTION_DESCRIPTION_END + + +Function un.onUninstSuccess + HideWindow + MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) was uninstalled successfully.$\r$\n\ + ATTENTION: You must manually delete$\r$\n$INSTDIR" +FunctionEnd + +Function un.onInit +!insertmacro MUI_UNGETLANGUAGE + MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you sure you want to remove $(^Name)?" IDYES +2 + Abort +FunctionEnd + +Section Uninstall + SetShellVarContext all + ; Only uninstall what we put there; all $INSTDIR\User is left as is + Delete "$INSTDIR\uninst.exe" + Delete "$INSTDIR\*.dll" + Delete "$INSTDIR\Plugins\*.dll" + Delete "$INSTDIR\Sys\Wii\setting-usa.txt" + Delete "$INSTDIR\Sys\Wii\setting-jpn.txt" + Delete "$INSTDIR\Sys\Wii\setting-eur.txt" + Delete "$INSTDIR\Sys\GC\font_sjis.bin" + Delete "$INSTDIR\Sys\GC\font_ansi.bin" + Delete "$INSTDIR\Dolphin.exe" + + Delete "$SMPROGRAMS\${PRODUCT_NAME}\${UN_NAME}.lnk" + Delete "$DESKTOP\Dolphin.lnk" + Delete "$SMPROGRAMS\${PRODUCT_NAME}\Dolphin.lnk" + + RMDir "$SMPROGRAMS\${PRODUCT_NAME}" + RMDir "$INSTDIR\Sys\GC" + RMDir "$INSTDIR\Sys\Wii" + RMDir "$INSTDIR\Sys" + RMDir "$INSTDIR\Plugins" + RMDir "$INSTDIR" + + DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" + DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}" + SetAutoClose true +SectionEnd + +Function LaunchDolphin + ExecShell "" "$DESKTOP\Dolphin.lnk" FunctionEnd \ No newline at end of file diff --git a/Installer/Installer_x64.nsi b/Installer/Installer_x64.nsi index ee3d710e79..f5c8648fe1 100644 --- a/Installer/Installer_x64.nsi +++ b/Installer/Installer_x64.nsi @@ -1,253 +1,253 @@ -!system "GetSVNRev.exe" ; ATTENTION: This MUST be run before this script -!include "svnrev.txt" ; !defines PRODUCT_VERSION -!define BASE_DIR "..\Binary\x64" - -; HM NIS Edit Wizard helper defines -!define PRODUCT_NAME "Dolphin x64" -!define PRODUCT_PUBLISHER "Dolphin Team" -!define PRODUCT_WEB_SITE "http://www.dolphin-emu.com" -!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\Dolphin.exe" -!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" -!define PRODUCT_UNINST_ROOT_KEY "HKLM" - -SetCompressor lzma - -; MUI 1.67 compatible ------ -!include "MUI.nsh" - -; MUI Settings -!define MUI_ABORTWARNING -!define MUI_ICON "Dolphin.ico" -!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico" - -; Language Selection Dialog Settings -!define MUI_LANGDLL_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}" -!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}" -!define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language" - -; License page -!insertmacro MUI_PAGE_LICENSE "Licence.txt" -; Components page -!insertmacro MUI_PAGE_COMPONENTS -; Directory page -!insertmacro MUI_PAGE_DIRECTORY -; Instfiles page -!insertmacro MUI_PAGE_INSTFILES -; Finish page -; We launch the desktop shortcut to set the working dir -!define MUI_FINISHPAGE_RUN -!define MUI_FINISHPAGE_RUN_TEXT "Start $(^Name)" -!define MUI_FINISHPAGE_RUN_FUNCTION "LaunchDolphin" -!insertmacro MUI_PAGE_FINISH - -; Uninstaller pages -!insertmacro MUI_UNPAGE_INSTFILES - -; Language files -!insertmacro MUI_LANGUAGE "Afrikaans" -!insertmacro MUI_LANGUAGE "Albanian" -!insertmacro MUI_LANGUAGE "Arabic" -!insertmacro MUI_LANGUAGE "Basque" -!insertmacro MUI_LANGUAGE "Belarusian" -!insertmacro MUI_LANGUAGE "Bosnian" -!insertmacro MUI_LANGUAGE "Breton" -!insertmacro MUI_LANGUAGE "Bulgarian" -!insertmacro MUI_LANGUAGE "Catalan" -!insertmacro MUI_LANGUAGE "Croatian" -!insertmacro MUI_LANGUAGE "Czech" -!insertmacro MUI_LANGUAGE "Danish" -!insertmacro MUI_LANGUAGE "Dutch" -!insertmacro MUI_LANGUAGE "English" -!insertmacro MUI_LANGUAGE "Estonian" -!insertmacro MUI_LANGUAGE "Farsi" -!insertmacro MUI_LANGUAGE "Finnish" -!insertmacro MUI_LANGUAGE "French" -!insertmacro MUI_LANGUAGE "Galician" -!insertmacro MUI_LANGUAGE "German" -!insertmacro MUI_LANGUAGE "Greek" -!insertmacro MUI_LANGUAGE "Hebrew" -!insertmacro MUI_LANGUAGE "Hungarian" -!insertmacro MUI_LANGUAGE "Icelandic" -!insertmacro MUI_LANGUAGE "Indonesian" -!insertmacro MUI_LANGUAGE "Irish" -!insertmacro MUI_LANGUAGE "Italian" -!insertmacro MUI_LANGUAGE "Japanese" -!insertmacro MUI_LANGUAGE "Korean" -!insertmacro MUI_LANGUAGE "Kurdish" -!insertmacro MUI_LANGUAGE "Latvian" -!insertmacro MUI_LANGUAGE "Lithuanian" -!insertmacro MUI_LANGUAGE "Luxembourgish" -!insertmacro MUI_LANGUAGE "Macedonian" -!insertmacro MUI_LANGUAGE "Malay" -!insertmacro MUI_LANGUAGE "Mongolian" -!insertmacro MUI_LANGUAGE "Norwegian" -!insertmacro MUI_LANGUAGE "NorwegianNynorsk" -!insertmacro MUI_LANGUAGE "Polish" -!insertmacro MUI_LANGUAGE "Portuguese" -!insertmacro MUI_LANGUAGE "PortugueseBR" -!insertmacro MUI_LANGUAGE "Romanian" -!insertmacro MUI_LANGUAGE "Russian" -!insertmacro MUI_LANGUAGE "Serbian" -!insertmacro MUI_LANGUAGE "SerbianLatin" -!insertmacro MUI_LANGUAGE "SimpChinese" -!insertmacro MUI_LANGUAGE "Slovak" -!insertmacro MUI_LANGUAGE "Slovenian" -!insertmacro MUI_LANGUAGE "Spanish" -!insertmacro MUI_LANGUAGE "SpanishInternational" -!insertmacro MUI_LANGUAGE "Swedish" -!insertmacro MUI_LANGUAGE "Thai" -!insertmacro MUI_LANGUAGE "TradChinese" -!insertmacro MUI_LANGUAGE "Turkish" -!insertmacro MUI_LANGUAGE "Ukrainian" -!insertmacro MUI_LANGUAGE "Uzbek" -!insertmacro MUI_LANGUAGE "Welsh" - -; Reserve files -!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS - -; MUI end ------ - -Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" -!define UN_NAME "Uninstall $(^Name)" -OutFile "Dolphin_Installer_x64.exe" -InstallDir "$PROGRAMFILES64\$(^Name)" -InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" "" -ShowInstDetails show -ShowUnInstDetails show - -Function .onInit - !include "x64.nsh" - ; This checks if nsis is running under wow64 (since nsis is only 32bit) - ; hopefully this will be dependable in the future too... - ${If} ${RunningX64} - !insertmacro MUI_LANGDLL_DISPLAY - SetRegView 64 - ${Else} - MessageBox MB_OK|MB_ICONSTOP "You cannot run this version of Dolphin on your OS.$\r$\n\ - Please use a 64-bit OS or download a 32-bit version of Dolphin." - Quit - ${EndIf} -FunctionEnd - -Section "Complete" SEC01 - SetShellVarContext all - ; Dolphin exe and dlls - ; TODO: cg is only for OGL, SDL is only for nJoy - ; TODO: Make a nice subsection-ized display - SetOutPath "$INSTDIR" - SetOverwrite ifnewer - File "${BASE_DIR}\Dolphin.exe" - File "..\Externals\Cg64\cg.dll" - File "..\Externals\Cg64\cgGL.dll" - ; File "..\Externals\Cg64\cgD3D9.dll" - File "..\Externals\WiiUse\X64\wiiuse.dll" - File "..\Externals\SDL\x64\SDL.dll" - File "..\Externals\OpenAL\win64\OpenAL32.dll" - File "..\Externals\OpenAL\win64\wrap_oal.dll" - ; This needs to be done after Dolphin.exe is copied - CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}" - CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Dolphin x64.lnk" "$INSTDIR\Dolphin.exe" - CreateShortCut "$DESKTOP\Dolphin x64.lnk" "$INSTDIR\Dolphin.exe" - - ; Plugins - SetOutPath "$INSTDIR\Plugins" - SetOverwrite ifnewer - File "${BASE_DIR}\Plugins\Plugin_DSP_HLE.dll" - File "${BASE_DIR}\Plugins\Plugin_DSP_LLE.dll" - File "${BASE_DIR}\Plugins\Plugin_nJoy_SDL.dll" - File "${BASE_DIR}\Plugins\Plugin_nJoy_SDL_Test.dll" - File "${BASE_DIR}\Plugins\Plugin_PadSimple.dll" - File "${BASE_DIR}\Plugins\Plugin_VideoDX9.dll" - File "${BASE_DIR}\Plugins\Plugin_VideoOGL.dll" - File "${BASE_DIR}\Plugins\Plugin_Wiimote.dll" - File "${BASE_DIR}\Plugins\Plugin_VideoSW.dll" - - ; GC/Wii static settings - SetOutPath "$INSTDIR\Sys\GC" - SetOverwrite ifnewer - File "..\Data\Sys\GC\font_ansi.bin" - File "..\Data\Sys\GC\font_sjis.bin" - SetOutPath "$INSTDIR\Sys\Wii" - SetOverwrite ifnewer - File "..\Data\Sys\Wii\setting-eur.txt" - File "..\Data\Sys\Wii\setting-jpn.txt" - File "..\Data\Sys\Wii\setting-usa.txt" - - ; GC/Wii User settings - SetOutPath "$INSTDIR\User\GC" - SetOutPath "$INSTDIR\User\Wii\shared2\sys" - SetOverwrite ifnewer - File "..\Data\User\Wii\shared2\sys\readme.txt" - File "..\Data\User\Wii\shared2\sys\SYSCONF" - - ; GameConfigs - SetOutPath "$INSTDIR\User\GameConfig" - SetOverwrite ifnewer - File "..\Data\User\GameConfig\*.*" -SectionEnd - -Section -AdditionalIcons - CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${UN_NAME}.lnk" "$INSTDIR\uninst.exe" -SectionEnd - -Section -Post - WriteUninstaller "$INSTDIR\uninst.exe" - WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\Dolphin.exe" - WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" - WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe" - WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\Dolphin.exe" - WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" - WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}" - WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}" -SectionEnd - -; Section descriptions -!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN - !insertmacro MUI_DESCRIPTION_TEXT ${SEC01} "It is recommended that you install all of the included files." -!insertmacro MUI_FUNCTION_DESCRIPTION_END - - -Function un.onUninstSuccess - HideWindow - MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) was uninstalled successfully.$\r$\n\ - ATTENTION: You must manually delete$\r$\n$INSTDIR" -FunctionEnd - -Function un.onInit -!insertmacro MUI_UNGETLANGUAGE - MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you sure you want to remove $(^Name)?" IDYES +2 - Abort -FunctionEnd - -Section Uninstall - SetShellVarContext all - ; Only uninstall what we put there; all $INSTDIR\User is left as is - Delete "$INSTDIR\uninst.exe" - Delete "$INSTDIR\*.dll" - Delete "$INSTDIR\Plugins\*.dll" - Delete "$INSTDIR\Sys\Wii\setting-usa.txt" - Delete "$INSTDIR\Sys\Wii\setting-jpn.txt" - Delete "$INSTDIR\Sys\Wii\setting-eur.txt" - Delete "$INSTDIR\Sys\GC\font_sjis.bin" - Delete "$INSTDIR\Sys\GC\font_ansi.bin" - Delete "$INSTDIR\Dolphin.exe" - - Delete "$SMPROGRAMS\${PRODUCT_NAME}\${UN_NAME}.lnk" - Delete "$DESKTOP\Dolphin x64.lnk" - Delete "$SMPROGRAMS\${PRODUCT_NAME}\Dolphin x64.lnk" - - RMDir "$SMPROGRAMS\${PRODUCT_NAME}" - RMDir "$INSTDIR\Sys\GC" - RMDir "$INSTDIR\Sys\Wii" - RMDir "$INSTDIR\Sys" - RMDir "$INSTDIR\Plugins" - RMDir "$INSTDIR" - - DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" - DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}" - SetAutoClose true -SectionEnd - -Function LaunchDolphin - ExecShell "" "$DESKTOP\Dolphin x64.lnk" +!system "GetSVNRev.exe" ; ATTENTION: This MUST be run before this script +!include "svnrev.txt" ; !defines PRODUCT_VERSION +!define BASE_DIR "..\Binary\x64" + +; HM NIS Edit Wizard helper defines +!define PRODUCT_NAME "Dolphin x64" +!define PRODUCT_PUBLISHER "Dolphin Team" +!define PRODUCT_WEB_SITE "http://www.dolphin-emu.com" +!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\Dolphin.exe" +!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" +!define PRODUCT_UNINST_ROOT_KEY "HKLM" + +SetCompressor lzma + +; MUI 1.67 compatible ------ +!include "MUI.nsh" + +; MUI Settings +!define MUI_ABORTWARNING +!define MUI_ICON "Dolphin.ico" +!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico" + +; Language Selection Dialog Settings +!define MUI_LANGDLL_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}" +!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}" +!define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language" + +; License page +!insertmacro MUI_PAGE_LICENSE "Licence.txt" +; Components page +!insertmacro MUI_PAGE_COMPONENTS +; Directory page +!insertmacro MUI_PAGE_DIRECTORY +; Instfiles page +!insertmacro MUI_PAGE_INSTFILES +; Finish page +; We launch the desktop shortcut to set the working dir +!define MUI_FINISHPAGE_RUN +!define MUI_FINISHPAGE_RUN_TEXT "Start $(^Name)" +!define MUI_FINISHPAGE_RUN_FUNCTION "LaunchDolphin" +!insertmacro MUI_PAGE_FINISH + +; Uninstaller pages +!insertmacro MUI_UNPAGE_INSTFILES + +; Language files +!insertmacro MUI_LANGUAGE "Afrikaans" +!insertmacro MUI_LANGUAGE "Albanian" +!insertmacro MUI_LANGUAGE "Arabic" +!insertmacro MUI_LANGUAGE "Basque" +!insertmacro MUI_LANGUAGE "Belarusian" +!insertmacro MUI_LANGUAGE "Bosnian" +!insertmacro MUI_LANGUAGE "Breton" +!insertmacro MUI_LANGUAGE "Bulgarian" +!insertmacro MUI_LANGUAGE "Catalan" +!insertmacro MUI_LANGUAGE "Croatian" +!insertmacro MUI_LANGUAGE "Czech" +!insertmacro MUI_LANGUAGE "Danish" +!insertmacro MUI_LANGUAGE "Dutch" +!insertmacro MUI_LANGUAGE "English" +!insertmacro MUI_LANGUAGE "Estonian" +!insertmacro MUI_LANGUAGE "Farsi" +!insertmacro MUI_LANGUAGE "Finnish" +!insertmacro MUI_LANGUAGE "French" +!insertmacro MUI_LANGUAGE "Galician" +!insertmacro MUI_LANGUAGE "German" +!insertmacro MUI_LANGUAGE "Greek" +!insertmacro MUI_LANGUAGE "Hebrew" +!insertmacro MUI_LANGUAGE "Hungarian" +!insertmacro MUI_LANGUAGE "Icelandic" +!insertmacro MUI_LANGUAGE "Indonesian" +!insertmacro MUI_LANGUAGE "Irish" +!insertmacro MUI_LANGUAGE "Italian" +!insertmacro MUI_LANGUAGE "Japanese" +!insertmacro MUI_LANGUAGE "Korean" +!insertmacro MUI_LANGUAGE "Kurdish" +!insertmacro MUI_LANGUAGE "Latvian" +!insertmacro MUI_LANGUAGE "Lithuanian" +!insertmacro MUI_LANGUAGE "Luxembourgish" +!insertmacro MUI_LANGUAGE "Macedonian" +!insertmacro MUI_LANGUAGE "Malay" +!insertmacro MUI_LANGUAGE "Mongolian" +!insertmacro MUI_LANGUAGE "Norwegian" +!insertmacro MUI_LANGUAGE "NorwegianNynorsk" +!insertmacro MUI_LANGUAGE "Polish" +!insertmacro MUI_LANGUAGE "Portuguese" +!insertmacro MUI_LANGUAGE "PortugueseBR" +!insertmacro MUI_LANGUAGE "Romanian" +!insertmacro MUI_LANGUAGE "Russian" +!insertmacro MUI_LANGUAGE "Serbian" +!insertmacro MUI_LANGUAGE "SerbianLatin" +!insertmacro MUI_LANGUAGE "SimpChinese" +!insertmacro MUI_LANGUAGE "Slovak" +!insertmacro MUI_LANGUAGE "Slovenian" +!insertmacro MUI_LANGUAGE "Spanish" +!insertmacro MUI_LANGUAGE "SpanishInternational" +!insertmacro MUI_LANGUAGE "Swedish" +!insertmacro MUI_LANGUAGE "Thai" +!insertmacro MUI_LANGUAGE "TradChinese" +!insertmacro MUI_LANGUAGE "Turkish" +!insertmacro MUI_LANGUAGE "Ukrainian" +!insertmacro MUI_LANGUAGE "Uzbek" +!insertmacro MUI_LANGUAGE "Welsh" + +; Reserve files +!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS + +; MUI end ------ + +Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" +!define UN_NAME "Uninstall $(^Name)" +OutFile "Dolphin_Installer_x64.exe" +InstallDir "$PROGRAMFILES64\$(^Name)" +InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" "" +ShowInstDetails show +ShowUnInstDetails show + +Function .onInit + !include "x64.nsh" + ; This checks if nsis is running under wow64 (since nsis is only 32bit) + ; hopefully this will be dependable in the future too... + ${If} ${RunningX64} + !insertmacro MUI_LANGDLL_DISPLAY + SetRegView 64 + ${Else} + MessageBox MB_OK|MB_ICONSTOP "You cannot run this version of Dolphin on your OS.$\r$\n\ + Please use a 64-bit OS or download a 32-bit version of Dolphin." + Quit + ${EndIf} +FunctionEnd + +Section "Complete" SEC01 + SetShellVarContext all + ; Dolphin exe and dlls + ; TODO: cg is only for OGL, SDL is only for nJoy + ; TODO: Make a nice subsection-ized display + SetOutPath "$INSTDIR" + SetOverwrite ifnewer + File "${BASE_DIR}\Dolphin.exe" + File "..\Externals\Cg64\cg.dll" + File "..\Externals\Cg64\cgGL.dll" + ; File "..\Externals\Cg64\cgD3D9.dll" + File "..\Externals\WiiUse\X64\wiiuse.dll" + File "..\Externals\SDL\x64\SDL.dll" + File "..\Externals\OpenAL\win64\OpenAL32.dll" + File "..\Externals\OpenAL\win64\wrap_oal.dll" + ; This needs to be done after Dolphin.exe is copied + CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}" + CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Dolphin x64.lnk" "$INSTDIR\Dolphin.exe" + CreateShortCut "$DESKTOP\Dolphin x64.lnk" "$INSTDIR\Dolphin.exe" + + ; Plugins + SetOutPath "$INSTDIR\Plugins" + SetOverwrite ifnewer + File "${BASE_DIR}\Plugins\Plugin_DSP_HLE.dll" + File "${BASE_DIR}\Plugins\Plugin_DSP_LLE.dll" + File "${BASE_DIR}\Plugins\Plugin_nJoy_SDL.dll" + File "${BASE_DIR}\Plugins\Plugin_nJoy_SDL_Test.dll" + File "${BASE_DIR}\Plugins\Plugin_PadSimple.dll" + File "${BASE_DIR}\Plugins\Plugin_VideoDX9.dll" + File "${BASE_DIR}\Plugins\Plugin_VideoOGL.dll" + File "${BASE_DIR}\Plugins\Plugin_Wiimote.dll" + File "${BASE_DIR}\Plugins\Plugin_VideoSW.dll" + + ; GC/Wii static settings + SetOutPath "$INSTDIR\Sys\GC" + SetOverwrite ifnewer + File "..\Data\Sys\GC\font_ansi.bin" + File "..\Data\Sys\GC\font_sjis.bin" + SetOutPath "$INSTDIR\Sys\Wii" + SetOverwrite ifnewer + File "..\Data\Sys\Wii\setting-eur.txt" + File "..\Data\Sys\Wii\setting-jpn.txt" + File "..\Data\Sys\Wii\setting-usa.txt" + + ; GC/Wii User settings + SetOutPath "$INSTDIR\User\GC" + SetOutPath "$INSTDIR\User\Wii\shared2\sys" + SetOverwrite ifnewer + File "..\Data\User\Wii\shared2\sys\readme.txt" + File "..\Data\User\Wii\shared2\sys\SYSCONF" + + ; GameConfigs + SetOutPath "$INSTDIR\User\GameConfig" + SetOverwrite ifnewer + File "..\Data\User\GameConfig\*.*" +SectionEnd + +Section -AdditionalIcons + CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${UN_NAME}.lnk" "$INSTDIR\uninst.exe" +SectionEnd + +Section -Post + WriteUninstaller "$INSTDIR\uninst.exe" + WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\Dolphin.exe" + WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" + WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe" + WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\Dolphin.exe" + WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" + WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}" + WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}" +SectionEnd + +; Section descriptions +!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN + !insertmacro MUI_DESCRIPTION_TEXT ${SEC01} "It is recommended that you install all of the included files." +!insertmacro MUI_FUNCTION_DESCRIPTION_END + + +Function un.onUninstSuccess + HideWindow + MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) was uninstalled successfully.$\r$\n\ + ATTENTION: You must manually delete$\r$\n$INSTDIR" +FunctionEnd + +Function un.onInit +!insertmacro MUI_UNGETLANGUAGE + MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you sure you want to remove $(^Name)?" IDYES +2 + Abort +FunctionEnd + +Section Uninstall + SetShellVarContext all + ; Only uninstall what we put there; all $INSTDIR\User is left as is + Delete "$INSTDIR\uninst.exe" + Delete "$INSTDIR\*.dll" + Delete "$INSTDIR\Plugins\*.dll" + Delete "$INSTDIR\Sys\Wii\setting-usa.txt" + Delete "$INSTDIR\Sys\Wii\setting-jpn.txt" + Delete "$INSTDIR\Sys\Wii\setting-eur.txt" + Delete "$INSTDIR\Sys\GC\font_sjis.bin" + Delete "$INSTDIR\Sys\GC\font_ansi.bin" + Delete "$INSTDIR\Dolphin.exe" + + Delete "$SMPROGRAMS\${PRODUCT_NAME}\${UN_NAME}.lnk" + Delete "$DESKTOP\Dolphin x64.lnk" + Delete "$SMPROGRAMS\${PRODUCT_NAME}\Dolphin x64.lnk" + + RMDir "$SMPROGRAMS\${PRODUCT_NAME}" + RMDir "$INSTDIR\Sys\GC" + RMDir "$INSTDIR\Sys\Wii" + RMDir "$INSTDIR\Sys" + RMDir "$INSTDIR\Plugins" + RMDir "$INSTDIR" + + DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" + DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}" + SetAutoClose true +SectionEnd + +Function LaunchDolphin + ExecShell "" "$DESKTOP\Dolphin x64.lnk" FunctionEnd \ No newline at end of file diff --git a/Installer/Licence.txt b/Installer/Licence.txt index 9f1d228968..e7764ee587 100644 --- a/Installer/Licence.txt +++ b/Installer/Licence.txt @@ -1 +1 @@ -This package is provided "as is" and without warranty. Any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall the authors be liable to any party for any direct, indirect, incidental, special, exemplary, or consequential damages arising in any way out of the use of this package. +This package is provided "as is" and without warranty. Any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall the authors be liable to any party for any direct, indirect, incidental, special, exemplary, or consequential damages arising in any way out of the use of this package. diff --git a/Readme.txt b/Readme.txt index 4f7eee91e3..7530766608 100644 --- a/Readme.txt +++ b/Readme.txt @@ -1,71 +1,71 @@ -Dolphin-emu - The Gamecube / Wii Emulator -========================================== -Homesite: http://dolphin-emu.com/ -Project Site: http://code.google.com/p/dolphin-emu - -About: Dolphin-emu is a emulator for Gamecube, Wii, Triforce that lets you run Wii/GCN/Tri games on your Windows/Linux/MacOSX PC system - -Open Source Release under GPL 2 - -Project Leaders: F|RES, ector - -Team members: http://code.google.com/p/dolphin-emu/people/ - - -Please read the FAQ before use: http://code.google.com/p/dolphin-emu/wiki/Facts_And_Questions - -System Requirements: -* OS: Microsoft Windows (2000/XP/Vista or higher) or Linux or Apple Mac OS X. -* Processor: Fast CPU with SSE2 supported (recommended at least 2Ghz). Dual Core for speed boost. -* Graphics: Any graphics card that supports Direct3D 9 or OpenGL 2.1. - -[Command line usage] -Usage: Dolphin [-h] [-d] [-l] [-e ] [-V ] [-A ] [-P ] [-W ] - -h, --help Show this help message - -d, --debugger Opens the debugger - -l, --logger Opens The Logger - -e, --elf= Loads an elf file - -V, --video_plugin= Specify a video plugin - -A, --audio_plugin= Specify an audio plugin - -P, --pad_plugin= Specify a pad plugin - -W, --wiimote_plugin= Specify a wiimote plugin - -[Libraries] -Cg: Cg Shading API (http://developer.nvidia.com/object/cg_toolkit.html) -WiiUse: Wiimote Bluetooth API (http://www.wiiuse.net/) -SDL: Simple DirectMedia Layer API (http://www.libsdl.org/) -*.pdb = Program Debug Database (use these symbols with a program debugger) - -[DSP Plugins] -Plugin_DSP_HLE: High Level DSP Emulation -Plugin_DSP_LLE: Low Level DSP Emulation - -[Video Plugins] -Plugin_VideoDX9: Render with Direct3D 9 -Plugin_VideoOGL: Render with OpenGL + Cg Shader Language - -[Gamecube Controller Plugins] -Plugin_GCPad: Use keyboard or joypads - -[Wiimote Plugins] -Plugin_Wiimote: Use native wiimote or keyboard - -[Sys Files] -totaldb.dsy: Database of symbols (for devs only) -font_ansi.bin/font_sjis.bin: font dumps -setting-usa/jpn/usa.txt: config files for Wii - -[Support Folders] -Cache: used to cache the ISO list -Config: emulator configuration files -Dump: anything dumped from dolphin will go here -GC: Gamecube memory cards -GameConfig: holds the INI game config files -Load: high resolution textures -Logs: logs go here -Maps: symbol tables go here (dev only) -OpenCL: OpenCL code -ScreenShots: screenshots are saved here -Shaders: post-processing shaders -StateSaves: save states are stored here -Wii: Wii saves and config is stored here +Dolphin-emu - The Gamecube / Wii Emulator +========================================== +Homesite: http://dolphin-emu.com/ +Project Site: http://code.google.com/p/dolphin-emu + +About: Dolphin-emu is a emulator for Gamecube, Wii, Triforce that lets you run Wii/GCN/Tri games on your Windows/Linux/MacOSX PC system + +Open Source Release under GPL 2 + +Project Leaders: F|RES, ector + +Team members: http://code.google.com/p/dolphin-emu/people/ + + +Please read the FAQ before use: http://code.google.com/p/dolphin-emu/wiki/Facts_And_Questions + +System Requirements: +* OS: Microsoft Windows (2000/XP/Vista or higher) or Linux or Apple Mac OS X. +* Processor: Fast CPU with SSE2 supported (recommended at least 2Ghz). Dual Core for speed boost. +* Graphics: Any graphics card that supports Direct3D 9 or OpenGL 2.1. + +[Command line usage] +Usage: Dolphin [-h] [-d] [-l] [-e ] [-V ] [-A ] [-P ] [-W ] + -h, --help Show this help message + -d, --debugger Opens the debugger + -l, --logger Opens The Logger + -e, --elf= Loads an elf file + -V, --video_plugin= Specify a video plugin + -A, --audio_plugin= Specify an audio plugin + -P, --pad_plugin= Specify a pad plugin + -W, --wiimote_plugin= Specify a wiimote plugin + +[Libraries] +Cg: Cg Shading API (http://developer.nvidia.com/object/cg_toolkit.html) +WiiUse: Wiimote Bluetooth API (http://www.wiiuse.net/) +SDL: Simple DirectMedia Layer API (http://www.libsdl.org/) +*.pdb = Program Debug Database (use these symbols with a program debugger) + +[DSP Plugins] +Plugin_DSP_HLE: High Level DSP Emulation +Plugin_DSP_LLE: Low Level DSP Emulation + +[Video Plugins] +Plugin_VideoDX9: Render with Direct3D 9 +Plugin_VideoOGL: Render with OpenGL + Cg Shader Language + +[Gamecube Controller Plugins] +Plugin_GCPad: Use keyboard or joypads + +[Wiimote Plugins] +Plugin_Wiimote: Use native wiimote or keyboard + +[Sys Files] +totaldb.dsy: Database of symbols (for devs only) +font_ansi.bin/font_sjis.bin: font dumps +setting-usa/jpn/usa.txt: config files for Wii + +[Support Folders] +Cache: used to cache the ISO list +Config: emulator configuration files +Dump: anything dumped from dolphin will go here +GC: Gamecube memory cards +GameConfig: holds the INI game config files +Load: high resolution textures +Logs: logs go here +Maps: symbol tables go here (dev only) +OpenCL: OpenCL code +ScreenShots: screenshots are saved here +Shaders: post-processing shaders +StateSaves: save states are stored here +Wii: Wii saves and config is stored here diff --git a/Source/Core/AudioCommon/AudioCommon.vcproj b/Source/Core/AudioCommon/AudioCommon.vcproj index 13b53d2156..cc57b31168 100644 --- a/Source/Core/AudioCommon/AudioCommon.vcproj +++ b/Source/Core/AudioCommon/AudioCommon.vcproj @@ -1,491 +1,491 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Core/Common/Common.vcproj b/Source/Core/Common/Common.vcproj index c70e543245..d10537c069 100644 --- a/Source/Core/Common/Common.vcproj +++ b/Source/Core/Common/Common.vcproj @@ -1,926 +1,926 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Core/Core/Core.vcproj b/Source/Core/Core/Core.vcproj index 5a18054a09..4c890cf6a4 100644 --- a/Source/Core/Core/Core.vcproj +++ b/Source/Core/Core/Core.vcproj @@ -1,1508 +1,1508 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Core/Core/Src/Host.cpp b/Source/Core/Core/Src/Host.cpp deleted file mode 100644 index b9b91d7fac..0000000000 --- a/Source/Core/Core/Src/Host.cpp +++ /dev/null @@ -1,2 +0,0 @@ -#include "Host.h" - diff --git a/Source/Core/Core/Src/SConscript b/Source/Core/Core/Src/SConscript index 8b5ee229f7..d90a40efc7 100644 --- a/Source/Core/Core/Src/SConscript +++ b/Source/Core/Core/Src/SConscript @@ -12,7 +12,6 @@ files = ["ActionReplay.cpp", "CoreRerecording.cpp", "CoreTiming.cpp", "OnFrame.cpp", - "Host.cpp", "MemTools.cpp", "PatchEngine.cpp", "PluginManager.cpp", diff --git a/Source/Core/DSPCore/DSPCore.vcproj b/Source/Core/DSPCore/DSPCore.vcproj index 058b8788b2..b21a5760eb 100644 --- a/Source/Core/DSPCore/DSPCore.vcproj +++ b/Source/Core/DSPCore/DSPCore.vcproj @@ -1,592 +1,592 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Core/DebuggerUICommon/DebuggerUICommon.vcproj b/Source/Core/DebuggerUICommon/DebuggerUICommon.vcproj index 4c16810cae..2777ab849a 100644 --- a/Source/Core/DebuggerUICommon/DebuggerUICommon.vcproj +++ b/Source/Core/DebuggerUICommon/DebuggerUICommon.vcproj @@ -1,437 +1,437 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Core/DebuggerWX/DebuggerWX.vcproj b/Source/Core/DebuggerWX/DebuggerWX.vcproj index 5e66b12a98..d5d445025e 100644 --- a/Source/Core/DebuggerWX/DebuggerWX.vcproj +++ b/Source/Core/DebuggerWX/DebuggerWX.vcproj @@ -1,885 +1,885 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Core/DiscIO/DiscIO.vcproj b/Source/Core/DiscIO/DiscIO.vcproj index 05524669e0..299e0c9175 100644 --- a/Source/Core/DiscIO/DiscIO.vcproj +++ b/Source/Core/DiscIO/DiscIO.vcproj @@ -1,1307 +1,1307 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Core/DolphinWX/DolphinWX.vcproj b/Source/Core/DolphinWX/DolphinWX.vcproj index d8ebfe24d5..d6a8f228a8 100644 --- a/Source/Core/DolphinWX/DolphinWX.vcproj +++ b/Source/Core/DolphinWX/DolphinWX.vcproj @@ -1,1212 +1,1212 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Core/DolphinWX/DolphinWX.vcproj.user b/Source/Core/DolphinWX/DolphinWX.vcproj.user index 06d346fb6e..21153892fa 100644 --- a/Source/Core/DolphinWX/DolphinWX.vcproj.user +++ b/Source/Core/DolphinWX/DolphinWX.vcproj.user @@ -1,50 +1,50 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Core/InputCommon/InputCommon.vcproj b/Source/Core/InputCommon/InputCommon.vcproj index 07a107b4ed..eaa33a78ca 100644 --- a/Source/Core/InputCommon/InputCommon.vcproj +++ b/Source/Core/InputCommon/InputCommon.vcproj @@ -1,538 +1,538 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Core/VideoCommon/OpenCL.rules b/Source/Core/VideoCommon/OpenCL.rules index b788a176ca..cf695455ef 100644 --- a/Source/Core/VideoCommon/OpenCL.rules +++ b/Source/Core/VideoCommon/OpenCL.rules @@ -1,18 +1,18 @@ - - - - - - - - - + + + + + + + + + diff --git a/Source/Core/VideoCommon/VideoCommon.vcproj b/Source/Core/VideoCommon/VideoCommon.vcproj index ddb334f928..afe0adb365 100644 --- a/Source/Core/VideoCommon/VideoCommon.vcproj +++ b/Source/Core/VideoCommon/VideoCommon.vcproj @@ -1,776 +1,776 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/DSPSpy/DSPSpy.vcproj b/Source/DSPSpy/DSPSpy.vcproj index 8206a2316d..af38eb5a73 100644 --- a/Source/DSPSpy/DSPSpy.vcproj +++ b/Source/DSPSpy/DSPSpy.vcproj @@ -1,252 +1,252 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/DSPSpy/Makefile b/Source/DSPSpy/Makefile index 80f5f6f844..ec0fcc297e 100644 --- a/Source/DSPSpy/Makefile +++ b/Source/DSPSpy/Makefile @@ -1,159 +1,159 @@ -#--------------------------------------------------------------------------------- -# Clear the implicit built in rules -#--------------------------------------------------------------------------------- -.SUFFIXES: -#--------------------------------------------------------------------------------- -ifeq ($(strip $(DEVKITPPC)),) -$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") -endif - -#--------------------------------------------------------------------------------- -# build for wii by default, make HW_TYPE=gamecube will do what it sounds like -# NOTE: gamecube build may require use of dollz3 before running, if sending over BBA -#--------------------------------------------------------------------------------- -HW_TYPE = wii - -include $(DEVKITPPC)/$(HW_TYPE)_rules - -#--------------------------------------------------------------------------------- -# TARGET is the name of the output -# BUILD is the directory where object files & intermediate files will be placed -# SOURCES is a list of directories containing source code -# INCLUDES is a list of directories containing extra header files -#--------------------------------------------------------------------------------- -TARGET := $(notdir $(CURDIR))_$(HW_TYPE) -BUILD := build -SOURCES := . emu -RESOURCES := ../resources -DATA := data -INCLUDES := include ../Core/Common/Src . - -#--------------------------------------------------------------------------------- -# options for code generation -#--------------------------------------------------------------------------------- - -CFLAGS = -save-temps -O2 -Wall --no-strict-aliasing $(MACHDEP) $(INCLUDE) -CXXFLAGS = $(CFLAGS) - -LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map - -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -ifeq ($(HW_TYPE), gamecube) -LIBS := -lfat -lasnd -lmodplay -lz -ldb -logc -lm -else -LIBS := -lfat -lasnd -lmodplay -lwiiuse -lbte -lz -logc -lm -endif - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS := - -#--------------------------------------------------------------------------------- -# no real need to edit anything past this point unless you need to add additional -# rules for different file extensions -#--------------------------------------------------------------------------------- -ifneq ($(BUILD),$(notdir $(CURDIR))) -#--------------------------------------------------------------------------------- - -export OUTPUT := $(CURDIR)/$(TARGET) - -export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) $(foreach dir,$(RESOURCES),$(CURDIR)/$(dir))\ - $(foreach dir,$(DATA),$(CURDIR)/$(dir)) - -export DEPSDIR := $(CURDIR)/$(BUILD) - -#--------------------------------------------------------------------------------- -# automatically build a list of object files for our project -#--------------------------------------------------------------------------------- -CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) -CFILES += $(foreach dir,$(RESOURCES),$(notdir $(wildcard $(dir)/*.c))) -CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) -sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) -SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) - - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) - export LD := $(CC) -else - export LD := $(CXX) -endif - -export OFILES := $(addsuffix .o,$(BINFILES)) \ - $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ - $(sFILES:.s=.o) $(SFILES:.S=.o) - -#--------------------------------------------------------------------------------- -# build a list of include paths -#--------------------------------------------------------------------------------- -export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ - $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ - -I$(CURDIR)/$(BUILD) \ - -I$(LIBOGC_INC) - -#--------------------------------------------------------------------------------- -# build a list of library paths -#--------------------------------------------------------------------------------- -export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ - -L$(LIBOGC_LIB) - -export OUTPUT := $(CURDIR)/$(TARGET) -.PHONY: $(BUILD) clean - -#--------------------------------------------------------------------------------- -$(BUILD): - @[ -d $@ ] || mkdir -p $@ - @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -#--------------------------------------------------------------------------------- -clean: - @echo clean ... - @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol -#--------------------------------------------------------------------------------- -run: -ifeq ($(HW_TYPE), gamecube) - PSOload $(OUTPUT).dol -else - wiiload $(OUTPUT).dol -endif - -#--------------------------------------------------------------------------------- -else - -DEPENDS := $(OFILES:.o=.d) - -#%.biz: %.ds -# gcdsptool -c $< -o $@ - -#%.h: %.biz -# raw2c $< $@ - -#--------------------------------------------------------------------------------- -# main targets -#--------------------------------------------------------------------------------- -$(OUTPUT).dol: $(OUTPUT).elf -$(OUTPUT).elf: $(OFILES) - - -#--------------------------------------------------------------------------------- -# This rule links in binary data with the .bin extension -#--------------------------------------------------------------------------------- -#%.bin.o : %.bin -#--------------------------------------------------------------------------------- -# @echo $(notdir $<) -# $(bin2o) - - - --include $(DEPENDS) - -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- +#--------------------------------------------------------------------------------- +# Clear the implicit built in rules +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- +ifeq ($(strip $(DEVKITPPC)),) +$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") +endif + +#--------------------------------------------------------------------------------- +# build for wii by default, make HW_TYPE=gamecube will do what it sounds like +# NOTE: gamecube build may require use of dollz3 before running, if sending over BBA +#--------------------------------------------------------------------------------- +HW_TYPE = wii + +include $(DEVKITPPC)/$(HW_TYPE)_rules + +#--------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# INCLUDES is a list of directories containing extra header files +#--------------------------------------------------------------------------------- +TARGET := $(notdir $(CURDIR))_$(HW_TYPE) +BUILD := build +SOURCES := . emu +RESOURCES := ../resources +DATA := data +INCLUDES := include ../Core/Common/Src . + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- + +CFLAGS = -save-temps -O2 -Wall --no-strict-aliasing $(MACHDEP) $(INCLUDE) +CXXFLAGS = $(CFLAGS) + +LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map + +#--------------------------------------------------------------------------------- +# any extra libraries we wish to link with the project +#--------------------------------------------------------------------------------- +ifeq ($(HW_TYPE), gamecube) +LIBS := -lfat -lasnd -lmodplay -lz -ldb -logc -lm +else +LIBS := -lfat -lasnd -lmodplay -lwiiuse -lbte -lz -logc -lm +endif + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- + +export OUTPUT := $(CURDIR)/$(TARGET) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) $(foreach dir,$(RESOURCES),$(CURDIR)/$(dir))\ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) + +export DEPSDIR := $(CURDIR)/$(BUILD) + +#--------------------------------------------------------------------------------- +# automatically build a list of object files for our project +#--------------------------------------------------------------------------------- +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CFILES += $(foreach dir,$(RESOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) + export LD := $(CC) +else + export LD := $(CXX) +endif + +export OFILES := $(addsuffix .o,$(BINFILES)) \ + $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ + $(sFILES:.s=.o) $(SFILES:.S=.o) + +#--------------------------------------------------------------------------------- +# build a list of include paths +#--------------------------------------------------------------------------------- +export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) \ + -I$(LIBOGC_INC) + +#--------------------------------------------------------------------------------- +# build a list of library paths +#--------------------------------------------------------------------------------- +export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ + -L$(LIBOGC_LIB) + +export OUTPUT := $(CURDIR)/$(TARGET) +.PHONY: $(BUILD) clean + +#--------------------------------------------------------------------------------- +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol +#--------------------------------------------------------------------------------- +run: +ifeq ($(HW_TYPE), gamecube) + PSOload $(OUTPUT).dol +else + wiiload $(OUTPUT).dol +endif + +#--------------------------------------------------------------------------------- +else + +DEPENDS := $(OFILES:.o=.d) + +#%.biz: %.ds +# gcdsptool -c $< -o $@ + +#%.h: %.biz +# raw2c $< $@ + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +$(OUTPUT).dol: $(OUTPUT).elf +$(OUTPUT).elf: $(OFILES) + + +#--------------------------------------------------------------------------------- +# This rule links in binary data with the .bin extension +#--------------------------------------------------------------------------------- +#%.bin.o : %.bin +#--------------------------------------------------------------------------------- +# @echo $(notdir $<) +# $(bin2o) + + + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- diff --git a/Source/DSPSpy/gba.txt b/Source/DSPSpy/gba.txt index a134626f56..ebf62fe2f5 100644 --- a/Source/DSPSpy/gba.txt +++ b/Source/DSPSpy/gba.txt @@ -1,608 +1,608 @@ -incdir "tests" -include "dsp_base.inc" - -; We'll let dsp_base.inc catch exceptions -;nop -;nop -;nop -;nop -;nop -;nop -;nop -;nop -;nop -;nop -;nop -;nop -;nop -;halt -;rti -;halt - -sbset #0x06 -sbclr #0x03 -sbclr #0x04 -sbset #0x05 -lri $CR, #0x00ff -lri $WR0, #0xffff -lri $WR1, #0xffff -lri $WR2, #0xffff -lri $WR3, #0xffff -set40 -m0 -clr15 - -;step 1: context setup -call send_back_40 - -call 0x807e ; loop until dsp->cpu mailbox is empty -si @DMBH, #0xdcd1 -si @DMBL, #0x0000 ; sendmail 0xdcd10000 -si @DIRQ, #0x0001 - -; wait for cpu mail == 0xabbaxxxx -wait_cpu_init: -call 0x8078 -lrs $AC0.L, @CMBL -cmpi $AC0.M, #0xabba -jnz wait_cpu_init - -; Next mail has the mram addr of the data to fetch -set16 -call 0x8078 -lrs $AX0.L, @CMBL -andi $AC0.M, #0x0fff -mrr $AX0.H, $AC0.M -lri $AX1.H, #0x0000 ; DSP-dram addr -lri $AX1.L, #0x0020 ; length (32 bytes = 16 words, word 9 and 10 are addr where result should DMA'd to in main mem) -lri $IX3, #0x0000 ; there will be no ucode/iram upload -lri $AR0, #do_main ; return addr after dram upload -jmp 0x80bc ; DRAM upload !! -; $AX0.H-$AX0.L - CPU(PPC) addr = mail & 0x0fffffff -; upload data from mainmem to dsp dram and jump to 0x41 after that - -; ucode addr 0x0041 -do_main: -;step 2: got data from cpu, before going into BigCrazyFunction -call send_back - -call BigCrazyFunction ; <<------------- main crap is here!!!!!!!!! -call 0x807e ; loop until dsp->cpu mailbox is empty - -si @DMBH, #0xdcd1 -si @DMBL, #0x0003 ; sendmail 0xdcd10003 (aka... calc is over, result is in main mem now) -si @DIRQ, #0x0001 -set40 - -; wait for cpu to tell us what to do after calc'ing -wait_cpu_end: -call 0x8078 -cmpi $AC0.M, #0xcdd1 -jnz wait_cpu_end - -lrs $AC0.M, @CMBL -cmpi $AC0.M, #0x0001 -jz PrepareBootUcode ; if cpu->dsp mail was 0xcdd10001 -> 005e_PrepareBootUcode() - -cmpi $AC0.M, #0x0002 -jz 0x8000 ; if cpu->dsp mail was 0xcdd10002 -> dsp reset ( jmp to irom(0x8000)) - -; THIS IS CUSTOM CODE -cmpi $AC0.M, #0xbabe -jz end_of_test ; wait for dsp to be reset by cpu - -jmp wait_cpu_end ; wait for next mail from cpu -halt - - -PrepareBootUcode: -set16 -call 0x8078 -lrs $AC0.L, @CMBL -call 0x8078 -lrs $AC0.L, @CMBL -call 0x8078 -lrs $AC0.L, @CMBL -call 0x8078 -lr $IX1, @CMBL -andi $AC0.M, #0x0fff -mrr $IX0, $AC0.M -call 0x8078 -lr $IX3, @CMBL -call 0x8078 -lr $IX2, @CMBL -call 0x8078 -lr $AR0, @CMBL -call 0x8078 -lrs $AX0.L, @CMBL -andi $AC0.M, #0x0fff -mrr $AX0.H, $AC0.M -call 0x8078 -lrs $AX1.L, @CMBL -call 0x8078 -lrs $AX1.H, @CMBL -sbclr #0x05 -sbclr #0x06 -jmp 0x80b5 ; BootUcode() -halt - - -; does some crazy stuff with data at dram @0x3/0x5/0x6/0x7 with help of some values from drom :) -; result is @0x22,@0x23 and written back to main memory to dmem-0x08:dmem-0x09 -BigCrazyFunction: -; { -clr $ACC0 -lri $AR1, #0x0010 -loopi #0x20 - srri @$AR1, $AC0.M -call send_back ;3 -lr $AC1.M, @0x1456 -call send_back -andi $AC1.M, #0xffd0 -call send_back -clrp'mv : $AX1.L, $AC1.M ; assembler doesn't like .m here -call send_back -lri $AR0, #0x0000 -call send_back -lri $IX2, #0x0000 -call send_back -lri $AR2, #0x001f -call send_back -lr $AC0.M, @0x15f6 -call send_back -lsl $ACC0, #8 -call send_back -lr $AC1.M, @0x1766 -call send_back -andi $AC1.M, #0x00ff -call send_back -mrr $AX0.H, $AC1.M -call send_back -call 0x88e5 -call send_back -mrr $AX0.L, $AC0.L -call send_back -clr'mv $ACC0 : $AX1.H, $AC0.M ; assembler doesn't like .m here -call send_back -lrri $AC0.M, @$AR0 -call send_back -lsr $ACC0, #-8 -call send_back -mrr $AC1.M, $AC0.L -call send_back -mrr $AX0.H, $AC0.M -call send_back -call 0x8809 -call send_back -call 0x8723 -call send_back -dar $AR2 -call send_back -clr'dr $ACC0 : $AR2 -call send_back -lr $AC0.M, @0x166c -call send_back -lsl $ACC0, #4 -call send_back -andi $AC0.M, #0xff00 -call send_back -lr $AC1.M, @0x1231 -call send_back -lsr $ACC1, #-8 -call send_back -andi $AC1.M, #0x00ff -call send_back -mrr $AX0.H, $AC1.M -call send_back -call 0x88e5 -call send_back -mrr $AX0.L, $AC0.L -call send_back -clr'mv $ACC0 : $AX1.H, $AC0.M ; assembler doesn't like .m here -call send_back -lrri $AC0.M, @$AR0 -call send_back -lsr $ACC0, #-8 -call send_back -mrr $AC1.M, $AC0.L -call send_back -mrr $AX0.H, $AC0.M -call send_back -call 0x8809 -call send_back -call 0x8723 -call send_back -clr $ACC0 -call send_back -clr $ACC1 -call send_back -lr $AC1.H, @0x0005 -call send_back -asr16 $ACC1 -call send_back -cmp -call send_back ;46 -jz Unk_00e5 -call send_back ;47 -jl Unk_00f3 -call send_back ;48 - -; if ( > ) { -; length 12 -lri $AR2, #0x0010 -call send_back -lri $IX2, #0x0001 -call send_back -lr $AC0.H, @0x171b -call send_back -asr16 $ACC0 -call send_back -neg $ACC1 -call send_back -add $ACC1, $ACC0 -call send_back -lsl $ACC1, #1 -call send_back -mrr $AX0.H, $AC1.M -call send_back -lr $AC1.M, @0x0003 -call send_back -lsl $ACC1, #4 -call send_back -call 0x8809 -call send_back -jmp Unk_0102 -call send_back ;60 - -; } else if ( == 0) { -; length 8 -Unk_00e5: -lri $AR2, #0x0011 -call send_back -lr $AC1.M, @0x0003 -call send_back -lsl $ACC1, #1 -call send_back -mrr $AX0.H, $AC1.M -call send_back -lr $AC0.M, @0x1043 -call send_back -andi $AC0.M, #0xfff0 -call send_back -call 0x88e5 -call send_back ;53 -jmp Unk_0102 - -; } else if ( < ) { -; length 10 -Unk_00f3: -lri $AR2, #0x0010 -call send_back -lri $IX2, #0x0001 -call send_back -lr $AC0.H, @0x1285 -call send_back -asr16 $ACC0 -call send_back -add $ACC1, $ACC0 -call send_back -lsl $ACC1, #1 -call send_back -lr $AC0.M, @0x0003 -call send_back -lsl $ACC0, #4 -call send_back -mrr $AX0.H, $AC0.M -call send_back -call 0x8809 -call send_back ;57 -; } - -Unk_0102: -lri $AR3, #0x0013 -call send_back ; either step 60, 53, 57 -srri @$AR3, $AC0.M -call send_back -clr's $ACC1 : @$AR3, $AC0.L -call send_back -lri $AR3, #0x0013 -call send_back -lr $AC1.M, @0x0007 -call send_back -lr $AC0.M, @0x11b8 -call send_back -andi $AC0.M, #0xfff0 ;66 -call send_back -mrr $AX0.H, $AC0.M -call send_back - -;call 0x81f4 -mulxac'mv $AX0.H, $AX1.L, $ACC1 : $AX1.H, $AC0.M -call send_back -asr16'ir $ACC1 : $AR1 -call send_back ;66 -srri @$AR3, $AC1.M -call send_back -clr's $ACC0 : @$AR3, $AC1.L - -call send_back -lsl16 $ACC1 -call send_back - -;call 0x8458 ;66 -mulxac'mv $AX0.H, $AX1.L, $ACC1 : $AX1.H, $AC0.M -call send_back -asr16 $ACC1 -call send_back -srri @$AR3, $AC1.M -call send_back -clr's $ACC0 : @$AR3, $AC1.L -call send_back - - -call send_back -set40 -call send_back_40 -lri $AR2, #0x0015 -call send_back_40 -lr $AC0.M, @0x0006 -call send_back_40 -lr $AX0.H, @0x165b -call send_back_40 -call 0x88e5 -call send_back_40 -asr $ACC0, #-3 -call send_back_40 -lsl $ACC0, #3 -call send_back_40 -srri @$AR2, $AC0.M -call send_back_40 -srri @$AR2, $AC0.L -call send_back_40 -lri $AR2, #0x0016 -call send_back_40 -lr $AC0.M, @0x1723 -call send_back_40 -asr $ACC0, #-12 -call send_back_40 -lr $AX0.H, @0x166b -call send_back_40 -call 0x88e5 -call send_back_40 -tst $ACC0 -call send_back_40 -jge Unk_012e -call send_back_40 - -clr $ACC0 -call send_back_40 - -Unk_012e: -asr $ACC0, #-3 -call send_back_40 -set16 -;step 4 -call send_back -lr $AC1.M, @0x1491 -call send_back -andi $AC1.M, #0xd0f0 -call send_back -mrr $IX1, $AC1.M -call send_back -lr $AC1.M, @0x1468 -call send_back -lr $AC1.H, @0x11fc -call send_back -lsr $ACC1, #-4 -call send_back -mrr $IX2, $AC1.M -call send_back -lr $AC1.H, @0x11b8 -call send_back -asr16 $ACC1 -call send_back -lsl $ACC0, #24 -call send_back -lsr $ACC0, #-8 -call send_back -mrr $AX0.H, $AC0.M -call send_back -mrr $AC1.M, $AC0.M -call send_back -mrr $AX1.H, $IX1 -call send_back -andr $AC0.M, $AX1.H -call send_back -lsl $ACC0, #2 -call send_back -mrr $AX1.H, $IX2 -call send_back -andr $AC1.M, $AX1.H -call send_back -lsl $ACC1, #1 -call send_back -add $ACC0, $ACC1 -call send_back -lsl $ACC1, #24 -call send_back -asr16 $ACC1 -call send_back -andr $AC1.M, $AX0.H -call send_back -add $ACC0, $ACC1 -call send_back -lr $AC1.M, @0x0012 -call send_back -orc $AC1.M, $AC0.M -call send_back -sr @0x0012, $AC1.M -call send_back -lsr $ACC0, #-16 -call send_back -lr $AC1.M, @0x0011 -call send_back -orc $AC1.M, $AC0.M -call send_back -sr @0x0011, $AC1.M -call send_back -mrr $AC1.L, $IX1 -call send_back -lsl $ACC1, #1 -call send_back -mrr $AC1.M, $IX2 -call send_back -lsl16 $ACC1 -call send_back -asr $ACC1, #-8 -call send_back -lsr16 $ACC1 -call send_back -mrr $AX0.H, $AC1.M -call send_back -mrr $AX1.H, $AC1.L -call send_back -clr $ACC0 -call send_back -lr $AC0.M, @0x0011 -call send_back -andr $AC0.M, $AX0.H -call send_back -clr $ACC1 -call send_back -lr $AC1.M, @0x0012 -call send_back -andr $AC1.M, $AX0.H -call send_back -add $ACC0, $ACC1 -call send_back -lr $AC1.M, @0x0012 -call send_back -lsr $ACC1, #-8 -call send_back -add $ACC0, $ACC1 -call send_back - -call send_back -clr $ACC1 -call send_back -mrr $AC1.M, $AC0.M -call send_back -lsl $ACC1, #8 -call send_back -orr $AC1.M, $AX1.H -call send_back -lr $AC0.M, @0x0011 -call send_back -orc $AC0.M, $AC1.M -call send_back -lr $AC1.M, @0x0012 -call send_back -orr $AC1.M, $AX1.H -call send_back -mrr $IX1, $AC1.M -call send_back -lr $AX0.H, @0x15f1 -call send_back -andr $AC1.M, $AX0.H -call send_back -jz else_0192 -call send_back -; if () { - - lr $AC1.M, @0x10e2 -call send_back - lsl $ACC1, #8 -call send_back - mrr $AX0.H, $AC1.M -call send_back - lr $AC1.M, @0x103b -call send_back - decm $AC1.M -call send_back - orr $AC1.M, $AX0.H -call send_back - xorc $AC0.M, $AC1.M -call send_back - sr @0x0022, $AC0.M -call send_back - lr $AC0.L, @0x1229 -call send_back - lr $AC1.L, @0x11f8 -call send_back - sub $ACC0, $ACC1 -call send_back - lsl16 $ACC0 -call send_back - mrr $AC1.M, $IX1 -call send_back - xorc $AC0.M, $AC1.M -call send_back - jmp Unk_01a5 -call send_back - -; } else { -else_0192: - lr $AC1.M, @0x10ca -call send_back - lsl $ACC1, #8 -call send_back - mrr $AX0.H, $AC1.M -call send_back - lr $AC1.M, @0x1043 -call send_back - incm $AC1.M -call send_back - orr $AC1.M, $AX0.H -call send_back - xorc $AC0.M, $AC1.M -call send_back - sr @0x0022, $AC0.M -call send_back - lr $AC0.L, @0x1259 -call send_back - lr $AC1.L, @0x16fe -call send_back - add $ACC0, $ACC1 -call send_back - lsl16 $ACC0 -call send_back - mrr $AC1.M, $IX1 -call send_back - xorc $AC0.M, $AC1.M -call send_back -; } - -Unk_01a5: -; this is where result is written to main memory -; dsp mem 0x20-0x23 (8 bytes) are written back (DMA limitation), -; but only values @22 and @23 were modified (result is 32bit) -sr @0x0023, $AC0.M -call send_back -lr $AX0.H, @0x0008 ; cpu addr high -call send_back -lr $AX0.L, @0x0009 ; cpu addr low -call send_back -lri $AX1.H, #0x0020 ; dsp addr -call send_back -lri $AX1.L, #0x0008 ; length -call send_back -lri $IX3, #0x0000 ; there will be no iram dma -call send_back -call 0x808b ; dram->cpu <<<--- important!! -call send_back -ret -; } - -; Free some space for the TROJAN CODEZ -;nop -;nop -;nop -;nop -;nop -;nop -;nop -;nop -;nop -;nop -;nop -;nop +incdir "tests" +include "dsp_base.inc" + +; We'll let dsp_base.inc catch exceptions +;nop +;nop +;nop +;nop +;nop +;nop +;nop +;nop +;nop +;nop +;nop +;nop +;nop +;halt +;rti +;halt + +sbset #0x06 +sbclr #0x03 +sbclr #0x04 +sbset #0x05 +lri $CR, #0x00ff +lri $WR0, #0xffff +lri $WR1, #0xffff +lri $WR2, #0xffff +lri $WR3, #0xffff +set40 +m0 +clr15 + +;step 1: context setup +call send_back_40 + +call 0x807e ; loop until dsp->cpu mailbox is empty +si @DMBH, #0xdcd1 +si @DMBL, #0x0000 ; sendmail 0xdcd10000 +si @DIRQ, #0x0001 + +; wait for cpu mail == 0xabbaxxxx +wait_cpu_init: +call 0x8078 +lrs $AC0.L, @CMBL +cmpi $AC0.M, #0xabba +jnz wait_cpu_init + +; Next mail has the mram addr of the data to fetch +set16 +call 0x8078 +lrs $AX0.L, @CMBL +andi $AC0.M, #0x0fff +mrr $AX0.H, $AC0.M +lri $AX1.H, #0x0000 ; DSP-dram addr +lri $AX1.L, #0x0020 ; length (32 bytes = 16 words, word 9 and 10 are addr where result should DMA'd to in main mem) +lri $IX3, #0x0000 ; there will be no ucode/iram upload +lri $AR0, #do_main ; return addr after dram upload +jmp 0x80bc ; DRAM upload !! +; $AX0.H-$AX0.L - CPU(PPC) addr = mail & 0x0fffffff +; upload data from mainmem to dsp dram and jump to 0x41 after that + +; ucode addr 0x0041 +do_main: +;step 2: got data from cpu, before going into BigCrazyFunction +call send_back + +call BigCrazyFunction ; <<------------- main crap is here!!!!!!!!! +call 0x807e ; loop until dsp->cpu mailbox is empty + +si @DMBH, #0xdcd1 +si @DMBL, #0x0003 ; sendmail 0xdcd10003 (aka... calc is over, result is in main mem now) +si @DIRQ, #0x0001 +set40 + +; wait for cpu to tell us what to do after calc'ing +wait_cpu_end: +call 0x8078 +cmpi $AC0.M, #0xcdd1 +jnz wait_cpu_end + +lrs $AC0.M, @CMBL +cmpi $AC0.M, #0x0001 +jz PrepareBootUcode ; if cpu->dsp mail was 0xcdd10001 -> 005e_PrepareBootUcode() + +cmpi $AC0.M, #0x0002 +jz 0x8000 ; if cpu->dsp mail was 0xcdd10002 -> dsp reset ( jmp to irom(0x8000)) + +; THIS IS CUSTOM CODE +cmpi $AC0.M, #0xbabe +jz end_of_test ; wait for dsp to be reset by cpu + +jmp wait_cpu_end ; wait for next mail from cpu +halt + + +PrepareBootUcode: +set16 +call 0x8078 +lrs $AC0.L, @CMBL +call 0x8078 +lrs $AC0.L, @CMBL +call 0x8078 +lrs $AC0.L, @CMBL +call 0x8078 +lr $IX1, @CMBL +andi $AC0.M, #0x0fff +mrr $IX0, $AC0.M +call 0x8078 +lr $IX3, @CMBL +call 0x8078 +lr $IX2, @CMBL +call 0x8078 +lr $AR0, @CMBL +call 0x8078 +lrs $AX0.L, @CMBL +andi $AC0.M, #0x0fff +mrr $AX0.H, $AC0.M +call 0x8078 +lrs $AX1.L, @CMBL +call 0x8078 +lrs $AX1.H, @CMBL +sbclr #0x05 +sbclr #0x06 +jmp 0x80b5 ; BootUcode() +halt + + +; does some crazy stuff with data at dram @0x3/0x5/0x6/0x7 with help of some values from drom :) +; result is @0x22,@0x23 and written back to main memory to dmem-0x08:dmem-0x09 +BigCrazyFunction: +; { +clr $ACC0 +lri $AR1, #0x0010 +loopi #0x20 + srri @$AR1, $AC0.M +call send_back ;3 +lr $AC1.M, @0x1456 +call send_back +andi $AC1.M, #0xffd0 +call send_back +clrp'mv : $AX1.L, $AC1.M ; assembler doesn't like .m here +call send_back +lri $AR0, #0x0000 +call send_back +lri $IX2, #0x0000 +call send_back +lri $AR2, #0x001f +call send_back +lr $AC0.M, @0x15f6 +call send_back +lsl $ACC0, #8 +call send_back +lr $AC1.M, @0x1766 +call send_back +andi $AC1.M, #0x00ff +call send_back +mrr $AX0.H, $AC1.M +call send_back +call 0x88e5 +call send_back +mrr $AX0.L, $AC0.L +call send_back +clr'mv $ACC0 : $AX1.H, $AC0.M ; assembler doesn't like .m here +call send_back +lrri $AC0.M, @$AR0 +call send_back +lsr $ACC0, #-8 +call send_back +mrr $AC1.M, $AC0.L +call send_back +mrr $AX0.H, $AC0.M +call send_back +call 0x8809 +call send_back +call 0x8723 +call send_back +dar $AR2 +call send_back +clr'dr $ACC0 : $AR2 +call send_back +lr $AC0.M, @0x166c +call send_back +lsl $ACC0, #4 +call send_back +andi $AC0.M, #0xff00 +call send_back +lr $AC1.M, @0x1231 +call send_back +lsr $ACC1, #-8 +call send_back +andi $AC1.M, #0x00ff +call send_back +mrr $AX0.H, $AC1.M +call send_back +call 0x88e5 +call send_back +mrr $AX0.L, $AC0.L +call send_back +clr'mv $ACC0 : $AX1.H, $AC0.M ; assembler doesn't like .m here +call send_back +lrri $AC0.M, @$AR0 +call send_back +lsr $ACC0, #-8 +call send_back +mrr $AC1.M, $AC0.L +call send_back +mrr $AX0.H, $AC0.M +call send_back +call 0x8809 +call send_back +call 0x8723 +call send_back +clr $ACC0 +call send_back +clr $ACC1 +call send_back +lr $AC1.H, @0x0005 +call send_back +asr16 $ACC1 +call send_back +cmp +call send_back ;46 +jz Unk_00e5 +call send_back ;47 +jl Unk_00f3 +call send_back ;48 + +; if ( > ) { +; length 12 +lri $AR2, #0x0010 +call send_back +lri $IX2, #0x0001 +call send_back +lr $AC0.H, @0x171b +call send_back +asr16 $ACC0 +call send_back +neg $ACC1 +call send_back +add $ACC1, $ACC0 +call send_back +lsl $ACC1, #1 +call send_back +mrr $AX0.H, $AC1.M +call send_back +lr $AC1.M, @0x0003 +call send_back +lsl $ACC1, #4 +call send_back +call 0x8809 +call send_back +jmp Unk_0102 +call send_back ;60 + +; } else if ( == 0) { +; length 8 +Unk_00e5: +lri $AR2, #0x0011 +call send_back +lr $AC1.M, @0x0003 +call send_back +lsl $ACC1, #1 +call send_back +mrr $AX0.H, $AC1.M +call send_back +lr $AC0.M, @0x1043 +call send_back +andi $AC0.M, #0xfff0 +call send_back +call 0x88e5 +call send_back ;53 +jmp Unk_0102 + +; } else if ( < ) { +; length 10 +Unk_00f3: +lri $AR2, #0x0010 +call send_back +lri $IX2, #0x0001 +call send_back +lr $AC0.H, @0x1285 +call send_back +asr16 $ACC0 +call send_back +add $ACC1, $ACC0 +call send_back +lsl $ACC1, #1 +call send_back +lr $AC0.M, @0x0003 +call send_back +lsl $ACC0, #4 +call send_back +mrr $AX0.H, $AC0.M +call send_back +call 0x8809 +call send_back ;57 +; } + +Unk_0102: +lri $AR3, #0x0013 +call send_back ; either step 60, 53, 57 +srri @$AR3, $AC0.M +call send_back +clr's $ACC1 : @$AR3, $AC0.L +call send_back +lri $AR3, #0x0013 +call send_back +lr $AC1.M, @0x0007 +call send_back +lr $AC0.M, @0x11b8 +call send_back +andi $AC0.M, #0xfff0 ;66 +call send_back +mrr $AX0.H, $AC0.M +call send_back + +;call 0x81f4 +mulxac'mv $AX0.H, $AX1.L, $ACC1 : $AX1.H, $AC0.M +call send_back +asr16'ir $ACC1 : $AR1 +call send_back ;66 +srri @$AR3, $AC1.M +call send_back +clr's $ACC0 : @$AR3, $AC1.L + +call send_back +lsl16 $ACC1 +call send_back + +;call 0x8458 ;66 +mulxac'mv $AX0.H, $AX1.L, $ACC1 : $AX1.H, $AC0.M +call send_back +asr16 $ACC1 +call send_back +srri @$AR3, $AC1.M +call send_back +clr's $ACC0 : @$AR3, $AC1.L +call send_back + + +call send_back +set40 +call send_back_40 +lri $AR2, #0x0015 +call send_back_40 +lr $AC0.M, @0x0006 +call send_back_40 +lr $AX0.H, @0x165b +call send_back_40 +call 0x88e5 +call send_back_40 +asr $ACC0, #-3 +call send_back_40 +lsl $ACC0, #3 +call send_back_40 +srri @$AR2, $AC0.M +call send_back_40 +srri @$AR2, $AC0.L +call send_back_40 +lri $AR2, #0x0016 +call send_back_40 +lr $AC0.M, @0x1723 +call send_back_40 +asr $ACC0, #-12 +call send_back_40 +lr $AX0.H, @0x166b +call send_back_40 +call 0x88e5 +call send_back_40 +tst $ACC0 +call send_back_40 +jge Unk_012e +call send_back_40 + +clr $ACC0 +call send_back_40 + +Unk_012e: +asr $ACC0, #-3 +call send_back_40 +set16 +;step 4 +call send_back +lr $AC1.M, @0x1491 +call send_back +andi $AC1.M, #0xd0f0 +call send_back +mrr $IX1, $AC1.M +call send_back +lr $AC1.M, @0x1468 +call send_back +lr $AC1.H, @0x11fc +call send_back +lsr $ACC1, #-4 +call send_back +mrr $IX2, $AC1.M +call send_back +lr $AC1.H, @0x11b8 +call send_back +asr16 $ACC1 +call send_back +lsl $ACC0, #24 +call send_back +lsr $ACC0, #-8 +call send_back +mrr $AX0.H, $AC0.M +call send_back +mrr $AC1.M, $AC0.M +call send_back +mrr $AX1.H, $IX1 +call send_back +andr $AC0.M, $AX1.H +call send_back +lsl $ACC0, #2 +call send_back +mrr $AX1.H, $IX2 +call send_back +andr $AC1.M, $AX1.H +call send_back +lsl $ACC1, #1 +call send_back +add $ACC0, $ACC1 +call send_back +lsl $ACC1, #24 +call send_back +asr16 $ACC1 +call send_back +andr $AC1.M, $AX0.H +call send_back +add $ACC0, $ACC1 +call send_back +lr $AC1.M, @0x0012 +call send_back +orc $AC1.M, $AC0.M +call send_back +sr @0x0012, $AC1.M +call send_back +lsr $ACC0, #-16 +call send_back +lr $AC1.M, @0x0011 +call send_back +orc $AC1.M, $AC0.M +call send_back +sr @0x0011, $AC1.M +call send_back +mrr $AC1.L, $IX1 +call send_back +lsl $ACC1, #1 +call send_back +mrr $AC1.M, $IX2 +call send_back +lsl16 $ACC1 +call send_back +asr $ACC1, #-8 +call send_back +lsr16 $ACC1 +call send_back +mrr $AX0.H, $AC1.M +call send_back +mrr $AX1.H, $AC1.L +call send_back +clr $ACC0 +call send_back +lr $AC0.M, @0x0011 +call send_back +andr $AC0.M, $AX0.H +call send_back +clr $ACC1 +call send_back +lr $AC1.M, @0x0012 +call send_back +andr $AC1.M, $AX0.H +call send_back +add $ACC0, $ACC1 +call send_back +lr $AC1.M, @0x0012 +call send_back +lsr $ACC1, #-8 +call send_back +add $ACC0, $ACC1 +call send_back + +call send_back +clr $ACC1 +call send_back +mrr $AC1.M, $AC0.M +call send_back +lsl $ACC1, #8 +call send_back +orr $AC1.M, $AX1.H +call send_back +lr $AC0.M, @0x0011 +call send_back +orc $AC0.M, $AC1.M +call send_back +lr $AC1.M, @0x0012 +call send_back +orr $AC1.M, $AX1.H +call send_back +mrr $IX1, $AC1.M +call send_back +lr $AX0.H, @0x15f1 +call send_back +andr $AC1.M, $AX0.H +call send_back +jz else_0192 +call send_back +; if () { + + lr $AC1.M, @0x10e2 +call send_back + lsl $ACC1, #8 +call send_back + mrr $AX0.H, $AC1.M +call send_back + lr $AC1.M, @0x103b +call send_back + decm $AC1.M +call send_back + orr $AC1.M, $AX0.H +call send_back + xorc $AC0.M, $AC1.M +call send_back + sr @0x0022, $AC0.M +call send_back + lr $AC0.L, @0x1229 +call send_back + lr $AC1.L, @0x11f8 +call send_back + sub $ACC0, $ACC1 +call send_back + lsl16 $ACC0 +call send_back + mrr $AC1.M, $IX1 +call send_back + xorc $AC0.M, $AC1.M +call send_back + jmp Unk_01a5 +call send_back + +; } else { +else_0192: + lr $AC1.M, @0x10ca +call send_back + lsl $ACC1, #8 +call send_back + mrr $AX0.H, $AC1.M +call send_back + lr $AC1.M, @0x1043 +call send_back + incm $AC1.M +call send_back + orr $AC1.M, $AX0.H +call send_back + xorc $AC0.M, $AC1.M +call send_back + sr @0x0022, $AC0.M +call send_back + lr $AC0.L, @0x1259 +call send_back + lr $AC1.L, @0x16fe +call send_back + add $ACC0, $ACC1 +call send_back + lsl16 $ACC0 +call send_back + mrr $AC1.M, $IX1 +call send_back + xorc $AC0.M, $AC1.M +call send_back +; } + +Unk_01a5: +; this is where result is written to main memory +; dsp mem 0x20-0x23 (8 bytes) are written back (DMA limitation), +; but only values @22 and @23 were modified (result is 32bit) +sr @0x0023, $AC0.M +call send_back +lr $AX0.H, @0x0008 ; cpu addr high +call send_back +lr $AX0.L, @0x0009 ; cpu addr low +call send_back +lri $AX1.H, #0x0020 ; dsp addr +call send_back +lri $AX1.L, #0x0008 ; length +call send_back +lri $IX3, #0x0000 ; there will be no iram dma +call send_back +call 0x808b ; dram->cpu <<<--- important!! +call send_back +ret +; } + +; Free some space for the TROJAN CODEZ +;nop +;nop +;nop +;nop +;nop +;nop +;nop +;nop +;nop +;nop +;nop +;nop diff --git a/Source/DSPSpy/tests/dr_test.ds b/Source/DSPSpy/tests/dr_test.ds index 63dd252eca..1085c74cdc 100644 --- a/Source/DSPSpy/tests/dr_test.ds +++ b/Source/DSPSpy/tests/dr_test.ds @@ -1,314 +1,314 @@ -; This test checks the effect of the index looping registers (R8-R11) -incdir "tests" -include "dsp_base.inc" - -; Tests done using AR1 = 0x0010, IX1 = 0. WR1 (wrap 1) means WR1. -; WR1 = 0 -; 10, 10, 10, 10, -; WR1 = 1 -; 10, 11, 10, 11, -; WR1 = 2 -; 10, 12, 11, 13, 12, 11, 13, 12, 11, 13, 12, 11 -; WR1 = 3 -; 10, 13, 12, 11, 10, 13, 12... -; WR1 = 4 -; 10, 14, 13, 17, 16, 15, 14, 13, 17, 16, 15, 14, 13, ... -; WR1 = 5 -; 10, 15, 14, 13, 12, 17, 16, 15, 14, 13, 12, 17, -; WR1 = 6 -; 10, 16, 15, 14, 13, 12, 11, 17, 16, 15, 14, 13 -; WR1 = 7 -; 10, 17, 16, 15, .. normal -; WR1 = 8 -; 10, 18, 17, 1f, 1e, 1d, 1c, 1b, 1a, 19, 18, 17, 1f, 1e, ..... - - -; I really don't know how the above could possibly be efficiently implemented in hardware. -; And thus it's tricky to implement in software too :p - -; test using indexing register 1 - 0 is used in send_back -lri $AR1, #16 -lri $IX1, #32 -lri $WR1, #0 - -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 - -lri $AR1, #16 -lri $WR1, #1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 - -lri $AR1, #16 -lri $WR1, #2 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 - -lri $AR1, #16 -lri $WR1, #3 - -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 - -lri $AR1, #16 -lri $WR1, #4 - -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 - -lri $AR1, #16 -lri $WR1, #5 - -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 - -lri $AR1, #16 -lri $WR1, #6 - -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 - -lri $AR1, #16 -lri $WR1, #7 - -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 - -lri $AR1, #16 -lri $WR1, #8 - -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 -nx'dr : $AR1 -call send_back ; 1 - - -lri $WR1, #0xFFFF - -; We're done, DO NOT DELETE THIS LINE -jmp end_of_test +; This test checks the effect of the index looping registers (R8-R11) +incdir "tests" +include "dsp_base.inc" + +; Tests done using AR1 = 0x0010, IX1 = 0. WR1 (wrap 1) means WR1. +; WR1 = 0 +; 10, 10, 10, 10, +; WR1 = 1 +; 10, 11, 10, 11, +; WR1 = 2 +; 10, 12, 11, 13, 12, 11, 13, 12, 11, 13, 12, 11 +; WR1 = 3 +; 10, 13, 12, 11, 10, 13, 12... +; WR1 = 4 +; 10, 14, 13, 17, 16, 15, 14, 13, 17, 16, 15, 14, 13, ... +; WR1 = 5 +; 10, 15, 14, 13, 12, 17, 16, 15, 14, 13, 12, 17, +; WR1 = 6 +; 10, 16, 15, 14, 13, 12, 11, 17, 16, 15, 14, 13 +; WR1 = 7 +; 10, 17, 16, 15, .. normal +; WR1 = 8 +; 10, 18, 17, 1f, 1e, 1d, 1c, 1b, 1a, 19, 18, 17, 1f, 1e, ..... + + +; I really don't know how the above could possibly be efficiently implemented in hardware. +; And thus it's tricky to implement in software too :p + +; test using indexing register 1 - 0 is used in send_back +lri $AR1, #16 +lri $IX1, #32 +lri $WR1, #0 + +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 + +lri $AR1, #16 +lri $WR1, #1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 + +lri $AR1, #16 +lri $WR1, #2 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 + +lri $AR1, #16 +lri $WR1, #3 + +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 + +lri $AR1, #16 +lri $WR1, #4 + +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 + +lri $AR1, #16 +lri $WR1, #5 + +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 + +lri $AR1, #16 +lri $WR1, #6 + +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 + +lri $AR1, #16 +lri $WR1, #7 + +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 + +lri $AR1, #16 +lri $WR1, #8 + +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 +nx'dr : $AR1 +call send_back ; 1 + + +lri $WR1, #0xFFFF + +; We're done, DO NOT DELETE THIS LINE +jmp end_of_test diff --git a/Source/DSPSpy/tests/dsp_base.inc b/Source/DSPSpy/tests/dsp_base.inc index 3190667989..e875a9b5b9 100644 --- a/Source/DSPSpy/tests/dsp_base.inc +++ b/Source/DSPSpy/tests/dsp_base.inc @@ -1,275 +1,275 @@ -; This is the trojan program we send to the DSP from DSPSpy to figure it out. -REGS_BASE: equ 0x0f80 -MEM_HI: equ 0x0f7E -MEM_LO: equ 0x0f7F - - -; Interrupt vectors 8 vectors, 2 opcodes each - jmp irq0 - jmp irq1 - jmp irq2 - jmp irq3 - jmp irq4 - jmp irq5 - jmp irq6 - jmp irq7 - -; Main code (and normal entrypoint) at 0x10 - sbset #0x02 - sbset #0x03 - sbclr #0x04 - sbset #0x05 - sbset #0x06 - - s16 - lri $CR, #0x00ff - - clr $acc1 - clr $acc0 - -; get address of memory dump and copy it to DRAM - call 0x807e - si @DMBH, #0x8888 - si @DMBL, #0xdead - si @DIRQ, #0x0001 - - call 0x8078 - andi $ac0.m, #0x7fff - lrs $ac1.m, @CMBL - - sr @MEM_HI, $ac0.m - sr @MEM_LO, $ac1.m - - lri $ax0.l, #0 - lri $ax1.l, #0 ;(DSP_CR_IMEM | DSP_CR_TO_CPU) - lri $ax0.h, #0x2000 - lr $ac0.l, @MEM_HI - lr $ac0.m, @MEM_LO - call do_dma - - -; get address of registers and DMA them to ram - call 0x807e - si @DMBH, #0x8888 - si @DMBL, #0xbeef - si @DIRQ, #0x0001 - - call 0x8078 - andi $ac0.m, #0x7fff - lrs $ac1.m, @CMBL - - sr @MEM_HI, $ac0.m - sr @MEM_LO, $ac1.m - - lri $ax0.l, #REGS_BASE - lri $ax1.l, #0 ;(DSP_CR_IMEM | DSP_CR_TO_CPU) - lri $ax0.h, #0x80 - lr $ac0.l, @MEM_HI - lr $ac0.m, @MEM_LO - call do_dma - -; Read in all the registers from RAM - lri $ar0, #REGS_BASE+1 - lrri $ar1, @$ar0 - lrri $ar2, @$ar0 - lrri $ar3, @$ar0 - lrri $ix0, @$ar0 - lrri $ix1, @$ar0 - lrri $ix2, @$ar0 - lrri $ix3, @$ar0 - lrri $wr0, @$ar0 - lrri $wr1, @$ar0 - lrri $wr2, @$ar0 - lrri $wr3, @$ar0 - lrri $st0, @$ar0 - lrri $st1, @$ar0 - lrri $st2, @$ar0 - lrri $st3, @$ar0 - lrri $ac0.h, @$ar0 - lrri $ac1.h, @$ar0 - lrri $cr, @$ar0 - lrri $sr, @$ar0 - lrri $prod.l, @$ar0 - lrri $prod.m1, @$ar0 - lrri $prod.h, @$ar0 - lrri $prod.m2, @$ar0 - lrri $ax0.l, @$ar0 - lrri $ax1.l, @$ar0 - lrri $ax0.h, @$ar0 - lrri $ax1.h, @$ar0 - lrri $ac0.l, @$ar0 - lrri $ac1.l, @$ar0 - lrri $ac0.m, @$ar0 - lrri $ac1.m, @$ar0 - lr $ar0, @REGS_BASE - - jmp start_of_test - -; This is where we jump when we're done testing, see above. -; We just fall into a loop, playing dead until someone resets the DSP. -end_of_test: - jmp end_of_test - -; Utility function to do DMA. -do_dma: - sr @DSMAH, $ac0.l - sr @DSMAL, $ac0.m - sr @DSPA, $ax0.l - sr @DSCR, $ax1.l - sr @DSBL, $ax0.h ; This kicks off the DMA. - call 0x863d ; Wait for DMA to complete by watching a bit in DSCR. - ret - -; IRQ handlers. Just send back exception# and die -irq0: - lri $ac0.m, #0x0000 - jmp irq -irq1: - lri $ac0.m, #0x0001 - jmp irq -irq2: - lri $ac0.m, #0x0002 - jmp irq -irq3: - lri $ac0.m, #0x0003 - jmp irq -irq4: - lri $ac0.m, #0x0004 - jmp irq -irq5: - lri $ac0.m, #0x0005 - jmp irq -irq6: - lri $ac0.m, #0x0006 - jmp irq -irq7: - lri $ac0.m, #0x0007 - -irq: - lrs $ac1.m, @DMBH - andcf $ac1.m, #0x8000 - jlz irq - si @DMBH, #0x8bad - ;sr @DMBL, $wr3 ; ??? - sr @DMBL, $ac0.m ; Exception number - si @DIRQ, #0x0001 - halt ; Through some magic this allows us to properly ack the exception in dspspy - ;rti ; allow dumping of ucodes which cause exceptions...probably not safe at all - -; DMA:s the current state of the registers back to the PowerPC. To do this, -; it must write the contents of all regs to DRAM. -; Unfortunately, this loop uses ar0 so it's best to use AR1 and friends for testing -; when messing with indexing. -send_back: - ; make state safe. - set16 - ; store registers to reg table - sr @REGS_BASE, $ar0 - lri $ar0, #(REGS_BASE + 1) - srri @$ar0, $ar1 - srri @$ar0, $ar2 - srri @$ar0, $ar3 - srri @$ar0, $ix0 - srri @$ar0, $ix1 - srri @$ar0, $ix2 - srri @$ar0, $ix3 - srri @$ar0, $wr0 - srri @$ar0, $wr1 - srri @$ar0, $wr2 - srri @$ar0, $wr3 - srri @$ar0, $st0 - srri @$ar0, $st1 - srri @$ar0, $st2 - srri @$ar0, $st3 - srri @$ar0, $ac0.h - srri @$ar0, $ac1.h - srri @$ar0, $cr - srri @$ar0, $sr - srri @$ar0, $prod.l - srri @$ar0, $prod.m1 - srri @$ar0, $prod.h - srri @$ar0, $prod.m2 - srri @$ar0, $ax0.l - srri @$ar0, $ax1.l - srri @$ar0, $ax0.h - srri @$ar0, $ax1.h - srri @$ar0, $ac0.l - srri @$ar0, $ac1.l - srri @$ar0, $ac0.m - srri @$ar0, $ac1.m - -; Regs are stored. Prepare DMA. - lri $ax0.l, #0x0000 - lri $ax1.l, #1 ;(DSP_CR_IMEM | DSP_CR_TO_CPU) - lri $ax0.h, #0x200 - lr $ac0.l, @MEM_HI - lr $ac0.m, @MEM_LO - -; Now, why are we looping here? - lri $ar1, #8+8 - bloop $ar1, dma_copy - call do_dma - addi $ac0.m, #0x200 - mrr $ac1.m, $ax0.l - addi $ac1.m, #0x100 -dma_copy: - mrr $ax0.l, $ac1.m - -; Wait for the CPU to send us a mail. - call 0x807e - si @DMBH, #0x8888 - si @DMBL, #0xfeeb - si @DIRQ, #0x0001 - -; wait for the CPU to recieve our response before we execute the next op - call 0x8078 - andi $ac0.m, #0x7fff - lrs $ac1.m, @CMBL - -; Restore all regs again so we're ready to execute another op. - lri $ar0, #REGS_BASE+1 - lrri $ar1, @$ar0 - lrri $ar2, @$ar0 - lrri $ar3, @$ar0 - lrri $ix0, @$ar0 - lrri $ix1, @$ar0 - lrri $ix2, @$ar0 - lrri $ix3, @$ar0 - lrri $wr0, @$ar0 - lrri $wr1, @$ar0 - lrri $wr2, @$ar0 - lrri $wr3, @$ar0 - lrri $st0, @$ar0 - lrri $st1, @$ar0 - lrri $st2, @$ar0 - lrri $st3, @$ar0 - lrri $ac0.h, @$ar0 - lrri $ac1.h, @$ar0 - lrri $cr, @$ar0 - lrri $sr, @$ar0 - lrri $prod.l, @$ar0 - lrri $prod.m1, @$ar0 - lrri $prod.h, @$ar0 - lrri $prod.m2, @$ar0 - lrri $ax0.l, @$ar0 - lrri $ax1.l, @$ar0 - lrri $ax0.h, @$ar0 - lrri $ax1.h, @$ar0 - lrri $ac0.l, @$ar0 - lrri $ac1.l, @$ar0 - lrri $ac0.m, @$ar0 - lrri $ac1.m, @$ar0 - lr $ar0, @REGS_BASE - - ret ; from send_back - -; If you are in set40 mode, use this instead of send_back if you want to stay -; in set40 mode. -send_back_40: - set16 - call send_back - set40 - ret - -; Obviously this must be included directly before your test code -start_of_test: +; This is the trojan program we send to the DSP from DSPSpy to figure it out. +REGS_BASE: equ 0x0f80 +MEM_HI: equ 0x0f7E +MEM_LO: equ 0x0f7F + + +; Interrupt vectors 8 vectors, 2 opcodes each + jmp irq0 + jmp irq1 + jmp irq2 + jmp irq3 + jmp irq4 + jmp irq5 + jmp irq6 + jmp irq7 + +; Main code (and normal entrypoint) at 0x10 + sbset #0x02 + sbset #0x03 + sbclr #0x04 + sbset #0x05 + sbset #0x06 + + s16 + lri $CR, #0x00ff + + clr $acc1 + clr $acc0 + +; get address of memory dump and copy it to DRAM + call 0x807e + si @DMBH, #0x8888 + si @DMBL, #0xdead + si @DIRQ, #0x0001 + + call 0x8078 + andi $ac0.m, #0x7fff + lrs $ac1.m, @CMBL + + sr @MEM_HI, $ac0.m + sr @MEM_LO, $ac1.m + + lri $ax0.l, #0 + lri $ax1.l, #0 ;(DSP_CR_IMEM | DSP_CR_TO_CPU) + lri $ax0.h, #0x2000 + lr $ac0.l, @MEM_HI + lr $ac0.m, @MEM_LO + call do_dma + + +; get address of registers and DMA them to ram + call 0x807e + si @DMBH, #0x8888 + si @DMBL, #0xbeef + si @DIRQ, #0x0001 + + call 0x8078 + andi $ac0.m, #0x7fff + lrs $ac1.m, @CMBL + + sr @MEM_HI, $ac0.m + sr @MEM_LO, $ac1.m + + lri $ax0.l, #REGS_BASE + lri $ax1.l, #0 ;(DSP_CR_IMEM | DSP_CR_TO_CPU) + lri $ax0.h, #0x80 + lr $ac0.l, @MEM_HI + lr $ac0.m, @MEM_LO + call do_dma + +; Read in all the registers from RAM + lri $ar0, #REGS_BASE+1 + lrri $ar1, @$ar0 + lrri $ar2, @$ar0 + lrri $ar3, @$ar0 + lrri $ix0, @$ar0 + lrri $ix1, @$ar0 + lrri $ix2, @$ar0 + lrri $ix3, @$ar0 + lrri $wr0, @$ar0 + lrri $wr1, @$ar0 + lrri $wr2, @$ar0 + lrri $wr3, @$ar0 + lrri $st0, @$ar0 + lrri $st1, @$ar0 + lrri $st2, @$ar0 + lrri $st3, @$ar0 + lrri $ac0.h, @$ar0 + lrri $ac1.h, @$ar0 + lrri $cr, @$ar0 + lrri $sr, @$ar0 + lrri $prod.l, @$ar0 + lrri $prod.m1, @$ar0 + lrri $prod.h, @$ar0 + lrri $prod.m2, @$ar0 + lrri $ax0.l, @$ar0 + lrri $ax1.l, @$ar0 + lrri $ax0.h, @$ar0 + lrri $ax1.h, @$ar0 + lrri $ac0.l, @$ar0 + lrri $ac1.l, @$ar0 + lrri $ac0.m, @$ar0 + lrri $ac1.m, @$ar0 + lr $ar0, @REGS_BASE + + jmp start_of_test + +; This is where we jump when we're done testing, see above. +; We just fall into a loop, playing dead until someone resets the DSP. +end_of_test: + jmp end_of_test + +; Utility function to do DMA. +do_dma: + sr @DSMAH, $ac0.l + sr @DSMAL, $ac0.m + sr @DSPA, $ax0.l + sr @DSCR, $ax1.l + sr @DSBL, $ax0.h ; This kicks off the DMA. + call 0x863d ; Wait for DMA to complete by watching a bit in DSCR. + ret + +; IRQ handlers. Just send back exception# and die +irq0: + lri $ac0.m, #0x0000 + jmp irq +irq1: + lri $ac0.m, #0x0001 + jmp irq +irq2: + lri $ac0.m, #0x0002 + jmp irq +irq3: + lri $ac0.m, #0x0003 + jmp irq +irq4: + lri $ac0.m, #0x0004 + jmp irq +irq5: + lri $ac0.m, #0x0005 + jmp irq +irq6: + lri $ac0.m, #0x0006 + jmp irq +irq7: + lri $ac0.m, #0x0007 + +irq: + lrs $ac1.m, @DMBH + andcf $ac1.m, #0x8000 + jlz irq + si @DMBH, #0x8bad + ;sr @DMBL, $wr3 ; ??? + sr @DMBL, $ac0.m ; Exception number + si @DIRQ, #0x0001 + halt ; Through some magic this allows us to properly ack the exception in dspspy + ;rti ; allow dumping of ucodes which cause exceptions...probably not safe at all + +; DMA:s the current state of the registers back to the PowerPC. To do this, +; it must write the contents of all regs to DRAM. +; Unfortunately, this loop uses ar0 so it's best to use AR1 and friends for testing +; when messing with indexing. +send_back: + ; make state safe. + set16 + ; store registers to reg table + sr @REGS_BASE, $ar0 + lri $ar0, #(REGS_BASE + 1) + srri @$ar0, $ar1 + srri @$ar0, $ar2 + srri @$ar0, $ar3 + srri @$ar0, $ix0 + srri @$ar0, $ix1 + srri @$ar0, $ix2 + srri @$ar0, $ix3 + srri @$ar0, $wr0 + srri @$ar0, $wr1 + srri @$ar0, $wr2 + srri @$ar0, $wr3 + srri @$ar0, $st0 + srri @$ar0, $st1 + srri @$ar0, $st2 + srri @$ar0, $st3 + srri @$ar0, $ac0.h + srri @$ar0, $ac1.h + srri @$ar0, $cr + srri @$ar0, $sr + srri @$ar0, $prod.l + srri @$ar0, $prod.m1 + srri @$ar0, $prod.h + srri @$ar0, $prod.m2 + srri @$ar0, $ax0.l + srri @$ar0, $ax1.l + srri @$ar0, $ax0.h + srri @$ar0, $ax1.h + srri @$ar0, $ac0.l + srri @$ar0, $ac1.l + srri @$ar0, $ac0.m + srri @$ar0, $ac1.m + +; Regs are stored. Prepare DMA. + lri $ax0.l, #0x0000 + lri $ax1.l, #1 ;(DSP_CR_IMEM | DSP_CR_TO_CPU) + lri $ax0.h, #0x200 + lr $ac0.l, @MEM_HI + lr $ac0.m, @MEM_LO + +; Now, why are we looping here? + lri $ar1, #8+8 + bloop $ar1, dma_copy + call do_dma + addi $ac0.m, #0x200 + mrr $ac1.m, $ax0.l + addi $ac1.m, #0x100 +dma_copy: + mrr $ax0.l, $ac1.m + +; Wait for the CPU to send us a mail. + call 0x807e + si @DMBH, #0x8888 + si @DMBL, #0xfeeb + si @DIRQ, #0x0001 + +; wait for the CPU to recieve our response before we execute the next op + call 0x8078 + andi $ac0.m, #0x7fff + lrs $ac1.m, @CMBL + +; Restore all regs again so we're ready to execute another op. + lri $ar0, #REGS_BASE+1 + lrri $ar1, @$ar0 + lrri $ar2, @$ar0 + lrri $ar3, @$ar0 + lrri $ix0, @$ar0 + lrri $ix1, @$ar0 + lrri $ix2, @$ar0 + lrri $ix3, @$ar0 + lrri $wr0, @$ar0 + lrri $wr1, @$ar0 + lrri $wr2, @$ar0 + lrri $wr3, @$ar0 + lrri $st0, @$ar0 + lrri $st1, @$ar0 + lrri $st2, @$ar0 + lrri $st3, @$ar0 + lrri $ac0.h, @$ar0 + lrri $ac1.h, @$ar0 + lrri $cr, @$ar0 + lrri $sr, @$ar0 + lrri $prod.l, @$ar0 + lrri $prod.m1, @$ar0 + lrri $prod.h, @$ar0 + lrri $prod.m2, @$ar0 + lrri $ax0.l, @$ar0 + lrri $ax1.l, @$ar0 + lrri $ax0.h, @$ar0 + lrri $ax1.h, @$ar0 + lrri $ac0.l, @$ar0 + lrri $ac1.l, @$ar0 + lrri $ac0.m, @$ar0 + lrri $ac1.m, @$ar0 + lr $ar0, @REGS_BASE + + ret ; from send_back + +; If you are in set40 mode, use this instead of send_back if you want to stay +; in set40 mode. +send_back_40: + set16 + call send_back + set40 + ret + +; Obviously this must be included directly before your test code +start_of_test: diff --git a/Source/DSPSpy/tests/dsp_test.ds b/Source/DSPSpy/tests/dsp_test.ds index 3e08e75f72..818f681567 100644 --- a/Source/DSPSpy/tests/dsp_test.ds +++ b/Source/DSPSpy/tests/dsp_test.ds @@ -1,21 +1,21 @@ -incdir "tests" -include "dsp_base.inc" - -; Right here we are at a specific predetermined state. -; Ideal environment to try instructions. - -; We can call send_back at any time to send data back to the PowerPC. - -; Calling set40 here seemed to crash the dsp tester in strange ways -; until I added set16 in send_back. Seems clear that it affects something important. - - lri $AC0.M, #0x1000 - call send_back - - set40 - lri $AC0.M, #0x1000 - set16 - call send_back - -; We're done, DO NOT DELETE THIS LINE - jmp end_of_test +incdir "tests" +include "dsp_base.inc" + +; Right here we are at a specific predetermined state. +; Ideal environment to try instructions. + +; We can call send_back at any time to send data back to the PowerPC. + +; Calling set40 here seemed to crash the dsp tester in strange ways +; until I added set16 in send_back. Seems clear that it affects something important. + + lri $AC0.M, #0x1000 + call send_back + + set40 + lri $AC0.M, #0x1000 + set16 + call send_back + +; We're done, DO NOT DELETE THIS LINE + jmp end_of_test diff --git a/Source/DSPSpy/tests/ir_test.ds b/Source/DSPSpy/tests/ir_test.ds index 422de885a7..b9a80b3c96 100644 --- a/Source/DSPSpy/tests/ir_test.ds +++ b/Source/DSPSpy/tests/ir_test.ds @@ -1,319 +1,319 @@ -; This test checks the effect of the index looping registers (R8-R11) -incdir "tests" -include "dsp_base.inc" - -; First theories, fitting tests with nice masks in the loop registers -; IR THEORY: if ((ar & lp) == lp) ar &= ~lp; -; DR THEORY: if ((ar & lp) == 0) ar |= lp; -; These were proven FALSE though by the following: - -; Tests done using AR1 = 0x0010, IX1 = 0 -; WR1 = 0 -; 10, 11, 11, 11, 11...... -; WR1 = 1 -; 10, 11, 10, 11, 10...... -; WR1 = 2 -; 10, 11, 12, 13, 11, 12, 13, 11, 12, 13 ...... -; WR1 = 3 -; 10, 11, 12, 13, 10, 11, 12, 13, 10, 11, 12, 13....... -; WR1 = 4 -; 10, 11, 12, 13, 14, 15, 16, 17, 13, 14, 15, 16, 17, 13, 14, 15 ...... -; WR1 = 5 -; 10, 11, 12, 13, 14, 15, 16, 17, 12, 13, 14, 15 ... -; WR1 = 6 -; 10, 11, 12, 13, 14, 15, 16, 17, 11, 12, 13, 14... -; WR1 = 7 -; 10, 11, 12, 13, 14, 15, 16, 17, 10, 11, .... -; WR1 = 8 -; 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 1a, 1b, 1c, 1d, 1e, 1f, 17, 18, 19, 1a, 1b..... - - -; I really don't know how the above could possibly be efficiently implemented in hardware. -; And thus it's tricky to implement in software too :p - -; test using indexing register 1 - 0 is used in send_back -lri $AR1, #16 -lri $IX1, #32 -lri $WR1, #0 - -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 - -lri $AR1, #16 -lri $WR1, #1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 - -lri $AR1, #16 -lri $WR1, #2 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 - -lri $AR1, #16 -lri $WR1, #3 - -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 - -lri $AR1, #16 -lri $WR1, #4 - -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 - -lri $AR1, #16 -lri $WR1, #5 - -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 - -lri $AR1, #16 -lri $WR1, #6 - -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 - -lri $AR1, #16 -lri $WR1, #7 - -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 - -lri $AR1, #16 -lri $WR1, #8 - -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 -nx'ir : $AR1 -call send_back ; 1 - - -lri $WR1, #0xFFFF - -; We're done, DO NOT DELETE THIS LINE -jmp end_of_test +; This test checks the effect of the index looping registers (R8-R11) +incdir "tests" +include "dsp_base.inc" + +; First theories, fitting tests with nice masks in the loop registers +; IR THEORY: if ((ar & lp) == lp) ar &= ~lp; +; DR THEORY: if ((ar & lp) == 0) ar |= lp; +; These were proven FALSE though by the following: + +; Tests done using AR1 = 0x0010, IX1 = 0 +; WR1 = 0 +; 10, 11, 11, 11, 11...... +; WR1 = 1 +; 10, 11, 10, 11, 10...... +; WR1 = 2 +; 10, 11, 12, 13, 11, 12, 13, 11, 12, 13 ...... +; WR1 = 3 +; 10, 11, 12, 13, 10, 11, 12, 13, 10, 11, 12, 13....... +; WR1 = 4 +; 10, 11, 12, 13, 14, 15, 16, 17, 13, 14, 15, 16, 17, 13, 14, 15 ...... +; WR1 = 5 +; 10, 11, 12, 13, 14, 15, 16, 17, 12, 13, 14, 15 ... +; WR1 = 6 +; 10, 11, 12, 13, 14, 15, 16, 17, 11, 12, 13, 14... +; WR1 = 7 +; 10, 11, 12, 13, 14, 15, 16, 17, 10, 11, .... +; WR1 = 8 +; 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 1a, 1b, 1c, 1d, 1e, 1f, 17, 18, 19, 1a, 1b..... + + +; I really don't know how the above could possibly be efficiently implemented in hardware. +; And thus it's tricky to implement in software too :p + +; test using indexing register 1 - 0 is used in send_back +lri $AR1, #16 +lri $IX1, #32 +lri $WR1, #0 + +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 + +lri $AR1, #16 +lri $WR1, #1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 + +lri $AR1, #16 +lri $WR1, #2 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 + +lri $AR1, #16 +lri $WR1, #3 + +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 + +lri $AR1, #16 +lri $WR1, #4 + +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 + +lri $AR1, #16 +lri $WR1, #5 + +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 + +lri $AR1, #16 +lri $WR1, #6 + +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 + +lri $AR1, #16 +lri $WR1, #7 + +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 + +lri $AR1, #16 +lri $WR1, #8 + +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 +nx'ir : $AR1 +call send_back ; 1 + + +lri $WR1, #0xFFFF + +; We're done, DO NOT DELETE THIS LINE +jmp end_of_test diff --git a/Source/DSPSpy/tests/ld_test.ds b/Source/DSPSpy/tests/ld_test.ds index d4e74ce7b6..0154677d6a 100644 --- a/Source/DSPSpy/tests/ld_test.ds +++ b/Source/DSPSpy/tests/ld_test.ds @@ -1,247 +1,247 @@ -; This test verifies LD -incdir "tests" -include "dsp_base.inc" - -lri $AR0, #0x001c -lri $AR1, #0x001d -lri $AR2, #0x001e -lri $AR3, #0x001f -lri $AX0.H, #0x111 -lri $AX1.H, #0x111 -lri $AX0.L, #0x77 -lri $AX1.L, #0x22 - -nx'ld : $AX0.L, $AX1.L, @$AR3 -call send_back ; 1 - -lri $AR0, #0x001c -lri $AR1, #0x001d -lri $AR2, #0x001e -lri $AR3, #0x001f -lri $AX0.H, #0x111 -lri $AX1.H, #0x111 -lri $AX0.L, #0x23 -lri $AX1.L, #0x64 - -nx'ld : $AX0.L, $AX1.L, @$AR2 -call send_back ; 2 - -lri $AR0, #0x001c -lri $AR1, #0x001d -lri $AR2, #0x001e -lri $AR3, #0x001f -lri $AX0.H, #0x111 -lri $AX1.H, #0x111 -lri $AX0.L, #0x43 -lri $AX1.L, #0x53 - -nx'ld : $AX0.L, $AX1.L, @$AR1 -call send_back ; 3 - -lri $AR0, #0x001c -lri $AR1, #0x001d -lri $AR2, #0x001e -lri $AR3, #0x001f -lri $AX0.H, #0x111 -lri $AX1.H, #0x111 -lri $AX0.L, #0xd3 -lri $AX1.L, #0x13 - -nx'ld : $AX0.L, $AX1.L, @$AR0 -call send_back ; 4 - -lri $AR0, #0x001c -lri $AR1, #0x001d -lri $AR2, #0x001e -lri $AR3, #0x001f -lri $AX0.H, #0x111 -lri $AX1.H, #0x111 -lri $AX0.L, #0x77 -lri $AX1.L, #0x22 - - -nx'ld : $AX1.L, $AX1.H, @$AR3 -call send_back ; 5 - -lri $AR0, #0x001c -lri $AR1, #0x001d -lri $AR2, #0x001e -lri $AR3, #0x001f -lri $AX0.H, #0x111 -lri $AX1.H, #0x111 -lri $AX0.L, #0x23 -lri $AX1.L, #0x64 - -nx'ld : $AX1.L, $AX1.H, @$AR2 -call send_back ; 6 - -lri $AR0, #0x001c -lri $AR1, #0x001d -lri $AR2, #0x001e -lri $AR3, #0x001f -lri $AX0.H, #0x111 -lri $AX1.H, #0x111 -lri $AX0.L, #0x43 -lri $AX1.L, #0x53 - -nx'ld : $AX1.L, $AX1.H, @$AR1 -call send_back ; 7 - -lri $AR0, #0x001c -lri $AR1, #0x001d -lri $AR2, #0x001e -lri $AR3, #0x001f -lri $AX0.H, #0x111 -lri $AX1.H, #0x111 -lri $AX0.L, #0xd3 -lri $AX1.L, #0x13 - -nx'ld : $AX1.L, $AX1.H, @$AR0 -call send_back ; 8 - -lri $AR0, #0x001c -lri $AR1, #0x001d -lri $AR2, #0x001e -lri $AR3, #0x001f -lri $AX0.H, #0x111 -lri $AX1.H, #0x111 -lri $AX0.L, #0x77 -lri $AX1.L, #0x22 - -nx'ldn : $AX0.L, $AX1.L, @$AR3 -call send_back ; 9 - -lri $AR0, #0x001c -lri $AR1, #0x001d -lri $AR2, #0x001e -lri $AR3, #0x001f -lri $AX0.H, #0x111 -lri $AX1.H, #0x111 -lri $AX0.L, #0x23 -lri $AX1.L, #0x64 - -nx'ldn : $AX0.L, $AX1.L, @$AR2 -call send_back ; 10 - -lri $AR0, #0x001c -lri $AR1, #0x001d -lri $AR2, #0x001e -lri $AR3, #0x001f -lri $AX0.H, #0x111 -lri $AX1.H, #0x111 -lri $AX0.L, #0x43 -lri $AX1.L, #0x53 - -nx'ldn : $AX0.L, $AX1.L, @$AR1 -call send_back ; 11 - -lri $AR0, #0x001c -lri $AR1, #0x001d -lri $AR2, #0x001e -lri $AR3, #0x001f -lri $AX0.H, #0x111 -lri $AX1.H, #0x111 -lri $AX0.L, #0xd3 -lri $AX1.L, #0x13 - -nx'ldn : $AX0.L, $AX1.L, @$AR0 -call send_back ; 12 - -lri $AR0, #0x001c -lri $AR1, #0x001d -lri $AR2, #0x001e -lri $AR3, #0x001f -lri $AX0.H, #0x111 -lri $AX1.H, #0x111 -lri $AX0.L, #0x77 -lri $AX1.L, #0x22 - -nx'ldm : $AX0.L, $AX1.L, @$AR3 -call send_back ; 13 - -lri $AR0, #0x001c -lri $AR1, #0x001d -lri $AR2, #0x001e -lri $AR3, #0x001f -lri $AX0.H, #0x111 -lri $AX1.H, #0x111 -lri $AX0.L, #0x23 -lri $AX1.L, #0x64 - -nx'ldm : $AX0.L, $AX1.L, @$AR2 -call send_back ; 14 - -lri $AR0, #0x001c -lri $AR1, #0x001d -lri $AR2, #0x001e -lri $AR3, #0x001f -lri $AX0.H, #0x111 -lri $AX1.H, #0x111 -lri $AX0.L, #0x43 -lri $AX1.L, #0x53 - -nx'ldm : $AX0.L, $AX1.L, @$AR1 -call send_back ; 15 - -lri $AR0, #0x001c -lri $AR1, #0x001d -lri $AR2, #0x001e -lri $AR3, #0x001f -lri $AX0.H, #0x111 -lri $AX1.H, #0x111 -lri $AX0.L, #0xd3 -lri $AX1.L, #0x13 - -nx'ldm : $AX0.L, $AX1.L, @$AR0 -call send_back ; 16 - -lri $AR0, #0x001c -lri $AR1, #0x001d -lri $AR2, #0x001e -lri $AR3, #0x001f -lri $AX0.H, #0x111 -lri $AX1.H, #0x111 -lri $AX0.L, #0x77 -lri $AX1.L, #0x22 - -nx'ldnm : $AX0.L, $AX1.L, @$AR3 -call send_back ; 17 - -lri $AR0, #0x001c -lri $AR1, #0x001d -lri $AR2, #0x001e -lri $AR3, #0x001f -lri $AX0.H, #0x111 -lri $AX1.H, #0x111 -lri $AX0.L, #0x23 -lri $AX1.L, #0x64 - -nx'ldnm : $AX0.L, $AX1.L, @$AR2 -call send_back ; 18 - -lri $AR0, #0x001c -lri $AR1, #0x001d -lri $AR2, #0x001e -lri $AR3, #0x001f -lri $AX0.H, #0x111 -lri $AX1.H, #0x111 -lri $AX0.L, #0x43 -lri $AX1.L, #0x53 - -nx'ldnm : $AX0.L, $AX1.L, @$AR1 -call send_back ; 19 - -lri $AR0, #0x001c -lri $AR1, #0x001d -lri $AR2, #0x001e -lri $AR3, #0x001f -lri $AX0.H, #0x111 -lri $AX1.H, #0x111 -lri $AX0.L, #0xd3 -lri $AX1.L, #0x13 - -nx'ldnm : $AX0.L, $AX1.L, @$AR0 -call send_back ; 20 - - - +; This test verifies LD +incdir "tests" +include "dsp_base.inc" + +lri $AR0, #0x001c +lri $AR1, #0x001d +lri $AR2, #0x001e +lri $AR3, #0x001f +lri $AX0.H, #0x111 +lri $AX1.H, #0x111 +lri $AX0.L, #0x77 +lri $AX1.L, #0x22 + +nx'ld : $AX0.L, $AX1.L, @$AR3 +call send_back ; 1 + +lri $AR0, #0x001c +lri $AR1, #0x001d +lri $AR2, #0x001e +lri $AR3, #0x001f +lri $AX0.H, #0x111 +lri $AX1.H, #0x111 +lri $AX0.L, #0x23 +lri $AX1.L, #0x64 + +nx'ld : $AX0.L, $AX1.L, @$AR2 +call send_back ; 2 + +lri $AR0, #0x001c +lri $AR1, #0x001d +lri $AR2, #0x001e +lri $AR3, #0x001f +lri $AX0.H, #0x111 +lri $AX1.H, #0x111 +lri $AX0.L, #0x43 +lri $AX1.L, #0x53 + +nx'ld : $AX0.L, $AX1.L, @$AR1 +call send_back ; 3 + +lri $AR0, #0x001c +lri $AR1, #0x001d +lri $AR2, #0x001e +lri $AR3, #0x001f +lri $AX0.H, #0x111 +lri $AX1.H, #0x111 +lri $AX0.L, #0xd3 +lri $AX1.L, #0x13 + +nx'ld : $AX0.L, $AX1.L, @$AR0 +call send_back ; 4 + +lri $AR0, #0x001c +lri $AR1, #0x001d +lri $AR2, #0x001e +lri $AR3, #0x001f +lri $AX0.H, #0x111 +lri $AX1.H, #0x111 +lri $AX0.L, #0x77 +lri $AX1.L, #0x22 + + +nx'ld : $AX1.L, $AX1.H, @$AR3 +call send_back ; 5 + +lri $AR0, #0x001c +lri $AR1, #0x001d +lri $AR2, #0x001e +lri $AR3, #0x001f +lri $AX0.H, #0x111 +lri $AX1.H, #0x111 +lri $AX0.L, #0x23 +lri $AX1.L, #0x64 + +nx'ld : $AX1.L, $AX1.H, @$AR2 +call send_back ; 6 + +lri $AR0, #0x001c +lri $AR1, #0x001d +lri $AR2, #0x001e +lri $AR3, #0x001f +lri $AX0.H, #0x111 +lri $AX1.H, #0x111 +lri $AX0.L, #0x43 +lri $AX1.L, #0x53 + +nx'ld : $AX1.L, $AX1.H, @$AR1 +call send_back ; 7 + +lri $AR0, #0x001c +lri $AR1, #0x001d +lri $AR2, #0x001e +lri $AR3, #0x001f +lri $AX0.H, #0x111 +lri $AX1.H, #0x111 +lri $AX0.L, #0xd3 +lri $AX1.L, #0x13 + +nx'ld : $AX1.L, $AX1.H, @$AR0 +call send_back ; 8 + +lri $AR0, #0x001c +lri $AR1, #0x001d +lri $AR2, #0x001e +lri $AR3, #0x001f +lri $AX0.H, #0x111 +lri $AX1.H, #0x111 +lri $AX0.L, #0x77 +lri $AX1.L, #0x22 + +nx'ldn : $AX0.L, $AX1.L, @$AR3 +call send_back ; 9 + +lri $AR0, #0x001c +lri $AR1, #0x001d +lri $AR2, #0x001e +lri $AR3, #0x001f +lri $AX0.H, #0x111 +lri $AX1.H, #0x111 +lri $AX0.L, #0x23 +lri $AX1.L, #0x64 + +nx'ldn : $AX0.L, $AX1.L, @$AR2 +call send_back ; 10 + +lri $AR0, #0x001c +lri $AR1, #0x001d +lri $AR2, #0x001e +lri $AR3, #0x001f +lri $AX0.H, #0x111 +lri $AX1.H, #0x111 +lri $AX0.L, #0x43 +lri $AX1.L, #0x53 + +nx'ldn : $AX0.L, $AX1.L, @$AR1 +call send_back ; 11 + +lri $AR0, #0x001c +lri $AR1, #0x001d +lri $AR2, #0x001e +lri $AR3, #0x001f +lri $AX0.H, #0x111 +lri $AX1.H, #0x111 +lri $AX0.L, #0xd3 +lri $AX1.L, #0x13 + +nx'ldn : $AX0.L, $AX1.L, @$AR0 +call send_back ; 12 + +lri $AR0, #0x001c +lri $AR1, #0x001d +lri $AR2, #0x001e +lri $AR3, #0x001f +lri $AX0.H, #0x111 +lri $AX1.H, #0x111 +lri $AX0.L, #0x77 +lri $AX1.L, #0x22 + +nx'ldm : $AX0.L, $AX1.L, @$AR3 +call send_back ; 13 + +lri $AR0, #0x001c +lri $AR1, #0x001d +lri $AR2, #0x001e +lri $AR3, #0x001f +lri $AX0.H, #0x111 +lri $AX1.H, #0x111 +lri $AX0.L, #0x23 +lri $AX1.L, #0x64 + +nx'ldm : $AX0.L, $AX1.L, @$AR2 +call send_back ; 14 + +lri $AR0, #0x001c +lri $AR1, #0x001d +lri $AR2, #0x001e +lri $AR3, #0x001f +lri $AX0.H, #0x111 +lri $AX1.H, #0x111 +lri $AX0.L, #0x43 +lri $AX1.L, #0x53 + +nx'ldm : $AX0.L, $AX1.L, @$AR1 +call send_back ; 15 + +lri $AR0, #0x001c +lri $AR1, #0x001d +lri $AR2, #0x001e +lri $AR3, #0x001f +lri $AX0.H, #0x111 +lri $AX1.H, #0x111 +lri $AX0.L, #0xd3 +lri $AX1.L, #0x13 + +nx'ldm : $AX0.L, $AX1.L, @$AR0 +call send_back ; 16 + +lri $AR0, #0x001c +lri $AR1, #0x001d +lri $AR2, #0x001e +lri $AR3, #0x001f +lri $AX0.H, #0x111 +lri $AX1.H, #0x111 +lri $AX0.L, #0x77 +lri $AX1.L, #0x22 + +nx'ldnm : $AX0.L, $AX1.L, @$AR3 +call send_back ; 17 + +lri $AR0, #0x001c +lri $AR1, #0x001d +lri $AR2, #0x001e +lri $AR3, #0x001f +lri $AX0.H, #0x111 +lri $AX1.H, #0x111 +lri $AX0.L, #0x23 +lri $AX1.L, #0x64 + +nx'ldnm : $AX0.L, $AX1.L, @$AR2 +call send_back ; 18 + +lri $AR0, #0x001c +lri $AR1, #0x001d +lri $AR2, #0x001e +lri $AR3, #0x001f +lri $AX0.H, #0x111 +lri $AX1.H, #0x111 +lri $AX0.L, #0x43 +lri $AX1.L, #0x53 + +nx'ldnm : $AX0.L, $AX1.L, @$AR1 +call send_back ; 19 + +lri $AR0, #0x001c +lri $AR1, #0x001d +lri $AR2, #0x001e +lri $AR3, #0x001f +lri $AX0.H, #0x111 +lri $AX1.H, #0x111 +lri $AX0.L, #0xd3 +lri $AX1.L, #0x13 + +nx'ldnm : $AX0.L, $AX1.L, @$AR0 +call send_back ; 20 + + + diff --git a/Source/DSPSpy/tests/mul_test.ds b/Source/DSPSpy/tests/mul_test.ds index df5ccec654..3ec2e83f64 100644 --- a/Source/DSPSpy/tests/mul_test.ds +++ b/Source/DSPSpy/tests/mul_test.ds @@ -1,250 +1,250 @@ -; This test checks the effect of SET15 on multiplications. -incdir "tests" -include "dsp_base.inc" - -; Results is in capitails like this: UNSIGNED - -CLR15 - -; Test MULXMVZ - SET15 -CLR $ACC0 -CLRP -LRI $AX0.L, #0xFFFF -LRI $AX1.H, #0x100 -MULXMVZ $AX0.L, $AX1.H, $ACC0 ; SIGNED -MOVP $ACC0 -call send_back - -CLR $ACC0 -CLRP -SET15 -LRI $AX0.L, #0xFFFF -LRI $AX1.H, #0x100 -MULXMVZ $AX0.L, $AX1.H, $ACC0 ; UNSIGNED -MOVP $ACC0 -call send_back -CLR15 - -; Test MULXMV - SET15 -CLR $ACC0 -CLRP -LRI $AX0.L, #0xFFFF -LRI $AX1.H, #0x100 -MULXMV $AX0.L, $AX1.H, $ACC0 ; SIGNED -MOVP $ACC0 -call send_back - -CLR $ACC0 -CLRP -SET15 -LRI $AX0.L, #0xFFFF -LRI $AX1.H, #0x100 -MULXMV $AX0.L, $AX1.H, $ACC0 ; UNSIGNED -MOVP $ACC0 -call send_back -CLR15 - -; Test MULXAC - SET15 -CLR $ACC0 -CLRP -LRI $AX0.L, #0xFFFF -LRI $AX1.H, #0x100 -MULXAC $AX0.L, $AX1.H, $ACC0 ; SIGNED -MOVP $ACC0 -call send_back - -CLR $ACC0 -CLRP -SET15 -LRI $AX0.L, #0xFFFF -LRI $AX1.H, #0x100 -MULXAC $AX0.L, $AX1.H, $ACC0 ; UNSIGNED -MOVP $ACC0 -call send_back -CLR15 - -; Test MULX - SET15 -CLR $ACC0 -CLRP -LRI $AX0.L, #0xFFFF -LRI $AX1.H, #0x100 -MULX $AX0.L, $AX1.H ; SIGNED -MOVP $ACC0 -call send_back - -CLR $ACC0 -CLRP -SET15 -LRI $AX0.L, #0xFFFF -LRI $AX1.H, #0x100 -MULX $AX0.L, $AX1.H ; UNSIGNED -MOVP $ACC0 -call send_back -CLR15 - - -; Test MADDX - SET15 -CLR $ACC0 -CLRP -LRI $AX0.L, #0xFFFF -LRI $AX1.L, #0x100 -MADDX $AX0.L, $AX1.L ; SIGNED -MOVP $ACC0 -call send_back - -CLR $ACC0 -CLRP -SET15 -LRI $AX0.L, #0xFFFF -LRI $AX1.L, #0x100 -MADDX $AX0.L, $AX1.L ; SIGNED (!) -MOVP $ACC0 -call send_back -CLR15 - - -; Test MULC - SET15 -CLR $ACC0 -CLRP -LRI $AC0.M, #0xFFFF -LRI $AX0.H, #0x100 -MULC $AC0.M, $AX0.H ; SIGNED -MOVP $ACC0 -call send_back - -CLR $ACC0 -CLRP -SET15 -LRI $AC0.M, #0xFFFF -LRI $AX0.H, #0x100 -MULC $AC0.M, $AX0.H ; SIGNED (!) -MOVP $ACC0 -call send_back -CLR15 - - -; Test MULCAC - SET15 -CLR $ACC0 -CLRP -LRI $AC0.M, #0xFFFF -LRI $AX0.H, #0x100 -MULCAC $AC0.M, $AX0.H, $ACC0 ; SIGNED -MOVP $ACC0 -call send_back - -CLR $ACC0 -CLRP -SET15 -LRI $AC0.M, #0xFFFF -LRI $AX0.H, #0x100 -MULCAC $AC0.M, $AX0.H, $ACC0 ; SIGNED (!) -MOVP $ACC0 -call send_back -CLR15 - - -; Test MUL - SET15 -CLR $ACC0 -CLRP -LRI $AX0.L, #0xFFFF -LRI $AX0.H, #0x100 -MUL $AX0.L, $AX0.H ; SIGNED -MOVP $ACC0 -call send_back - -CLR $ACC0 -SET15 -LRI $AX0.L, #0xFFFF -LRI $AX0.H, #0x100 -MUL $AX0.L, $AX0.H ; SIGNED (!) -MOVP $ACC0 -call send_back -CLR15 - - -; Test MULAC - SET15 -CLR $ACC0 -CLRP -LRI $AX0.L, #0xFFFF -LRI $AX0.H, #0x100 -MULAC $AX0.L, $AX0.H, $ACC0 ; SIGNED -MOVP $ACC0 -call send_back - -CLR $ACC0 -SET15 -LRI $AX0.L, #0xFFFF -LRI $AX0.H, #0x100 -MULAC $AX0.L, $AX0.H, $ACC0 ; SIGNED (!) -MOVP $ACC0 -call send_back -CLR15 - - - - - -; We're done, DO NOT DELETE THIS LINE -jmp end_of_test - -; test accelerator - -; TODO: DSPSpy puts a 16-bit ramp at 0x10000000 -LRIS $AC1.M, #0x0a ; 16-bit PCM audio -;SRS @SampleFormat, $AC1.M -; Start accelerator position -LRI $AC1.M, #0x0100 -SRS @ACCAH, $AC1.M -LRI $AC1.M, #0x1000 -SRS @ACCAH, $AC1.M -; Current accelerator position -LRI $AC1.M, #0x0100 -SRS @ACCAH, $AC1.M -LRI $AC1.M, #0x1000 -SRS @ACCAH, $AC1.M -; End accelerator position -LRI $AC1.M, #0x0100 -SRS @ACCAH, $AC1.M -LRI $AC1.M, #0x2000 -SRS @ACCAH, $AC1.M - -; Now to the interesting parameter - gain. -LRI $AC1.M, #0xFFFF -SRS @GAIN, $AC1.M - -; Let's now load a sample through the accelerator. -LRS $AC1.M, @ARAM -call send_back - -jmp end_of_test - -; test addpaxz -call send_back - -clrp -lri $AX0.L, #0x1111 -lri $AX0.H, #0x2222 -call send_back - -clrp -addpaxz $ACC0, $AX0.H - -call send_back - -clrp -set40 -addpaxz $ACC0, $AX0.H -set16 - -call send_back - -clrp -set15 -addpaxz $ACC0, $AX0.H -clr15 - -call send_back - - -jmp end_of_test - +; This test checks the effect of SET15 on multiplications. +incdir "tests" +include "dsp_base.inc" + +; Results is in capitails like this: UNSIGNED + +CLR15 + +; Test MULXMVZ - SET15 +CLR $ACC0 +CLRP +LRI $AX0.L, #0xFFFF +LRI $AX1.H, #0x100 +MULXMVZ $AX0.L, $AX1.H, $ACC0 ; SIGNED +MOVP $ACC0 +call send_back + +CLR $ACC0 +CLRP +SET15 +LRI $AX0.L, #0xFFFF +LRI $AX1.H, #0x100 +MULXMVZ $AX0.L, $AX1.H, $ACC0 ; UNSIGNED +MOVP $ACC0 +call send_back +CLR15 + +; Test MULXMV - SET15 +CLR $ACC0 +CLRP +LRI $AX0.L, #0xFFFF +LRI $AX1.H, #0x100 +MULXMV $AX0.L, $AX1.H, $ACC0 ; SIGNED +MOVP $ACC0 +call send_back + +CLR $ACC0 +CLRP +SET15 +LRI $AX0.L, #0xFFFF +LRI $AX1.H, #0x100 +MULXMV $AX0.L, $AX1.H, $ACC0 ; UNSIGNED +MOVP $ACC0 +call send_back +CLR15 + +; Test MULXAC - SET15 +CLR $ACC0 +CLRP +LRI $AX0.L, #0xFFFF +LRI $AX1.H, #0x100 +MULXAC $AX0.L, $AX1.H, $ACC0 ; SIGNED +MOVP $ACC0 +call send_back + +CLR $ACC0 +CLRP +SET15 +LRI $AX0.L, #0xFFFF +LRI $AX1.H, #0x100 +MULXAC $AX0.L, $AX1.H, $ACC0 ; UNSIGNED +MOVP $ACC0 +call send_back +CLR15 + +; Test MULX - SET15 +CLR $ACC0 +CLRP +LRI $AX0.L, #0xFFFF +LRI $AX1.H, #0x100 +MULX $AX0.L, $AX1.H ; SIGNED +MOVP $ACC0 +call send_back + +CLR $ACC0 +CLRP +SET15 +LRI $AX0.L, #0xFFFF +LRI $AX1.H, #0x100 +MULX $AX0.L, $AX1.H ; UNSIGNED +MOVP $ACC0 +call send_back +CLR15 + + +; Test MADDX - SET15 +CLR $ACC0 +CLRP +LRI $AX0.L, #0xFFFF +LRI $AX1.L, #0x100 +MADDX $AX0.L, $AX1.L ; SIGNED +MOVP $ACC0 +call send_back + +CLR $ACC0 +CLRP +SET15 +LRI $AX0.L, #0xFFFF +LRI $AX1.L, #0x100 +MADDX $AX0.L, $AX1.L ; SIGNED (!) +MOVP $ACC0 +call send_back +CLR15 + + +; Test MULC - SET15 +CLR $ACC0 +CLRP +LRI $AC0.M, #0xFFFF +LRI $AX0.H, #0x100 +MULC $AC0.M, $AX0.H ; SIGNED +MOVP $ACC0 +call send_back + +CLR $ACC0 +CLRP +SET15 +LRI $AC0.M, #0xFFFF +LRI $AX0.H, #0x100 +MULC $AC0.M, $AX0.H ; SIGNED (!) +MOVP $ACC0 +call send_back +CLR15 + + +; Test MULCAC - SET15 +CLR $ACC0 +CLRP +LRI $AC0.M, #0xFFFF +LRI $AX0.H, #0x100 +MULCAC $AC0.M, $AX0.H, $ACC0 ; SIGNED +MOVP $ACC0 +call send_back + +CLR $ACC0 +CLRP +SET15 +LRI $AC0.M, #0xFFFF +LRI $AX0.H, #0x100 +MULCAC $AC0.M, $AX0.H, $ACC0 ; SIGNED (!) +MOVP $ACC0 +call send_back +CLR15 + + +; Test MUL - SET15 +CLR $ACC0 +CLRP +LRI $AX0.L, #0xFFFF +LRI $AX0.H, #0x100 +MUL $AX0.L, $AX0.H ; SIGNED +MOVP $ACC0 +call send_back + +CLR $ACC0 +SET15 +LRI $AX0.L, #0xFFFF +LRI $AX0.H, #0x100 +MUL $AX0.L, $AX0.H ; SIGNED (!) +MOVP $ACC0 +call send_back +CLR15 + + +; Test MULAC - SET15 +CLR $ACC0 +CLRP +LRI $AX0.L, #0xFFFF +LRI $AX0.H, #0x100 +MULAC $AX0.L, $AX0.H, $ACC0 ; SIGNED +MOVP $ACC0 +call send_back + +CLR $ACC0 +SET15 +LRI $AX0.L, #0xFFFF +LRI $AX0.H, #0x100 +MULAC $AX0.L, $AX0.H, $ACC0 ; SIGNED (!) +MOVP $ACC0 +call send_back +CLR15 + + + + + +; We're done, DO NOT DELETE THIS LINE +jmp end_of_test + +; test accelerator + +; TODO: DSPSpy puts a 16-bit ramp at 0x10000000 +LRIS $AC1.M, #0x0a ; 16-bit PCM audio +;SRS @SampleFormat, $AC1.M +; Start accelerator position +LRI $AC1.M, #0x0100 +SRS @ACCAH, $AC1.M +LRI $AC1.M, #0x1000 +SRS @ACCAH, $AC1.M +; Current accelerator position +LRI $AC1.M, #0x0100 +SRS @ACCAH, $AC1.M +LRI $AC1.M, #0x1000 +SRS @ACCAH, $AC1.M +; End accelerator position +LRI $AC1.M, #0x0100 +SRS @ACCAH, $AC1.M +LRI $AC1.M, #0x2000 +SRS @ACCAH, $AC1.M + +; Now to the interesting parameter - gain. +LRI $AC1.M, #0xFFFF +SRS @GAIN, $AC1.M + +; Let's now load a sample through the accelerator. +LRS $AC1.M, @ARAM +call send_back + +jmp end_of_test + +; test addpaxz +call send_back + +clrp +lri $AX0.L, #0x1111 +lri $AX0.H, #0x2222 +call send_back + +clrp +addpaxz $ACC0, $AX0.H + +call send_back + +clrp +set40 +addpaxz $ACC0, $AX0.H +set16 + +call send_back + +clrp +set15 +addpaxz $ACC0, $AX0.H +clr15 + +call send_back + + +jmp end_of_test + diff --git a/Source/DSPSpy/tests/unk_regs_test.ds b/Source/DSPSpy/tests/unk_regs_test.ds index 2baa0b7656..54f4fa5a74 100644 --- a/Source/DSPSpy/tests/unk_regs_test.ds +++ b/Source/DSPSpy/tests/unk_regs_test.ds @@ -1,49 +1,49 @@ -incdir "tests" -include "dsp_base.inc" - -; Reads regs from 0xFF80 to 0xFF8D and sends them back - - lr $AC0.M, @0xff80 - call send_back - - lr $AC0.M, @0xff81 - call send_back - - lr $AC0.M, @0xff82 - call send_back - - lr $AC0.M, @0xff83 - call send_back - - lr $AC0.M, @0xff84 - call send_back - - lr $AC0.M, @0xff85 - call send_back - - lr $AC0.M, @0xff86 - call send_back - - lr $AC0.M, @0xff87 - call send_back - - lr $AC0.M, @0xff88 - call send_back - - lr $AC0.M, @0xff89 - call send_back - - lr $AC0.M, @0xff8A - call send_back - - lr $AC0.M, @0xff8B - call send_back - - lr $AC0.M, @0xff8C - call send_back - - lr $AC0.M, @0xff8D - call send_back - -; We're done, DO NOT DELETE THIS LINE - jmp end_of_test +incdir "tests" +include "dsp_base.inc" + +; Reads regs from 0xFF80 to 0xFF8D and sends them back + + lr $AC0.M, @0xff80 + call send_back + + lr $AC0.M, @0xff81 + call send_back + + lr $AC0.M, @0xff82 + call send_back + + lr $AC0.M, @0xff83 + call send_back + + lr $AC0.M, @0xff84 + call send_back + + lr $AC0.M, @0xff85 + call send_back + + lr $AC0.M, @0xff86 + call send_back + + lr $AC0.M, @0xff87 + call send_back + + lr $AC0.M, @0xff88 + call send_back + + lr $AC0.M, @0xff89 + call send_back + + lr $AC0.M, @0xff8A + call send_back + + lr $AC0.M, @0xff8B + call send_back + + lr $AC0.M, @0xff8C + call send_back + + lr $AC0.M, @0xff8D + call send_back + +; We're done, DO NOT DELETE THIS LINE + jmp end_of_test diff --git a/Source/DSPTool/DSPTool.vcproj b/Source/DSPTool/DSPTool.vcproj index 1800cdbc5b..ccbf621419 100644 --- a/Source/DSPTool/DSPTool.vcproj +++ b/Source/DSPTool/DSPTool.vcproj @@ -1,522 +1,522 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Dolphin.sln b/Source/Dolphin.sln index 7aabf8edc9..66bd93866b 100644 --- a/Source/Dolphin.sln +++ b/Source/Dolphin.sln @@ -1,635 +1,635 @@ -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Core", "Core\Core\Core.vcproj", "{F0B874CB-4476-4199-9315-8343D05AE684}" - ProjectSection(ProjectDependencies) = postProject - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} = {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} - {DA4CA030-A741-4DDC-9DA8-B2F351F0F158} = {DA4CA030-A741-4DDC-9DA8-B2F351F0F158} - {33546D62-7F34-4EA6-A88E-D538B36E16BF} = {33546D62-7F34-4EA6-A88E-D538B36E16BF} - {3E03C179-8251-46E4-81F4-466F114BAC63} = {3E03C179-8251-46E4-81F4-466F114BAC63} - {823DDC98-42D5-4A38-88CF-9DC06C788AE4} = {823DDC98-42D5-4A38-88CF-9DC06C788AE4} - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} = {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C} = {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_VideoDX9", "Plugins\Plugin_VideoDX9\Plugin_VideoDX9.vcproj", "{636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}" - ProjectSection(ProjectDependencies) = postProject - {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} - {3E03C179-8251-46E4-81F4-466F114BAC63} = {3E03C179-8251-46E4-81F4-466F114BAC63} - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} = {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Bochs_disasm", "..\Externals\Bochs_disasm\Bochs_disasm.vcproj", "{29C2ABC1-ADA5-42CD-A5FC-96022D52A510}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "..\Externals\zlib\zlib.vcproj", "{3E03C179-8251-46E4-81F4-466F114BAC63}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DiscIO", "Core\DiscIO\DiscIO.vcproj", "{B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}" - ProjectSection(ProjectDependencies) = postProject - {3E03C179-8251-46E4-81F4-466F114BAC63} = {3E03C179-8251-46E4-81F4-466F114BAC63} - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_VideoOGL", "Plugins\Plugin_VideoOGL\Plugin_VideoOGL.vcproj", "{CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}" - ProjectSection(ProjectDependencies) = postProject - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} = {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} - {05C75041-D67D-4903-A362-8395A7B35C75} = {05C75041-D67D-4903-A362-8395A7B35C75} - {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} - {3E03C179-8251-46E4-81F4-466F114BAC63} = {3E03C179-8251-46E4-81F4-466F114BAC63} - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} = {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Common", "Core\Common\Common.vcproj", "{C573CAF7-EE6A-458E-8049-16C0BF34C2E9}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Dolphin", "Core\DolphinWX\DolphinWX.vcproj", "{A72606EF-C5C1-4954-90AD-F0F93A8D97D9}" - ProjectSection(ProjectDependencies) = postProject - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} = {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} - {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160} = {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160} - {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8} = {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8} - {8D612734-FAA5-4B8A-804F-4DEA2367D495} = {8D612734-FAA5-4B8A-804F-4DEA2367D495} - {05C75041-D67D-4903-A362-8395A7B35C75} = {05C75041-D67D-4903-A362-8395A7B35C75} - {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18} = {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18} - {33546D62-7F34-4EA6-A88E-D538B36E16BF} = {33546D62-7F34-4EA6-A88E-D538B36E16BF} - {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} - {3E03C179-8251-46E4-81F4-466F114BAC63} = {3E03C179-8251-46E4-81F4-466F114BAC63} - {823DDC98-42D5-4A38-88CF-9DC06C788AE4} = {823DDC98-42D5-4A38-88CF-9DC06C788AE4} - {3D8156A9-64D1-4C8E-ADBE-1B319030E4A4} = {3D8156A9-64D1-4C8E-ADBE-1B319030E4A4} - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} = {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} = {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77} = {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77} - {F0B874CB-4476-4199-9315-8343D05AE684} = {F0B874CB-4476-4199-9315-8343D05AE684} - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} - {9FF603F8-B3BB-4144-9688-B2B802FA0F16} = {9FF603F8-B3BB-4144-9688-B2B802FA0F16} - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C} = {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Debugger", "Core\DebuggerWX\DebuggerWX.vcproj", "{4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}" - ProjectSection(ProjectDependencies) = postProject - {F81AE75C-3D17-4D8C-A201-82FA5351C123} = {F81AE75C-3D17-4D8C-A201-82FA5351C123} - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} = {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} - {F0B874CB-4476-4199-9315-8343D05AE684} = {F0B874CB-4476-4199-9315-8343D05AE684} - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VideoCommon", "Core\VideoCommon\VideoCommon.vcproj", "{E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}" - ProjectSection(ProjectDependencies) = postProject - {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4} = {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4} - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_DSP_HLE", "Plugins\Plugin_DSP_HLE\Plugin_DSP_HLE.vcproj", "{D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}" - ProjectSection(ProjectDependencies) = postProject - {05C75041-D67D-4903-A362-8395A7B35C75} = {05C75041-D67D-4903-A362-8395A7B35C75} - {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6} = {FBAFB369-07EB-4460-9CAD-08BE5789DAB6} - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LZO", "..\Externals\LZO\LZO.vcproj", "{33546D62-7F34-4EA6-A88E-D538B36E16BF}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_Wiimote", "Plugins\Plugin_Wiimote\Plugin_Wiimote.vcproj", "{8D612734-FAA5-4B8A-804F-4DEA2367D495}" - ProjectSection(ProjectDependencies) = postProject - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} = {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} - {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InputCommon", "Core\InputCommon\InputCommon.vcproj", "{C7E5D50A-2916-464B-86A7-E10B3CC88ADA}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AudioCommon", "Core\AudioCommon\AudioCommon.vcproj", "{FBAFB369-07EB-4460-9CAD-08BE5789DAB6}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_DSP_LLE", "Plugins\Plugin_DSP_LLE\Plugin_DSP_LLE.vcproj", "{3D8156A9-64D1-4C8E-ADBE-1B319030E4A4}" - ProjectSection(ProjectDependencies) = postProject - {05C75041-D67D-4903-A362-8395A7B35C75} = {05C75041-D67D-4903-A362-8395A7B35C75} - {F81AE75C-3D17-4D8C-A201-82FA5351C123} = {F81AE75C-3D17-4D8C-A201-82FA5351C123} - {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6} = {FBAFB369-07EB-4460-9CAD-08BE5789DAB6} - {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED} = {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED} - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DSPCore", "Core\DSPCore\DSPCore.vcproj", "{838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED}" - ProjectSection(ProjectDependencies) = postProject - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DSPTool", "DSPTool\DSPTool.vcproj", "{1970D175-3DE8-4738-942A-4D98D1CDBF64}" - ProjectSection(ProjectDependencies) = postProject - {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED} = {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED} - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DSPSpy", "DSPSpy\DSPSpy.vcproj", "{3877AA3E-9CC0-4ADF-8E71-272EE4443478}" - ProjectSection(ProjectDependencies) = postProject - {1970D175-3DE8-4738-942A-4D98D1CDBF64} = {1970D175-3DE8-4738-942A-4D98D1CDBF64} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SOIL", "..\Externals\SOIL\SOIL.vcproj", "{C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SFML_Network", "..\Externals\SFML\build\vc2008\sfml-network.vcproj", "{823DDC98-42D5-4A38-88CF-9DC06C788AE4}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UnitTests", "UnitTests\UnitTests.vcproj", "{40C636FA-B5BF-4D67-ABC8-376B524A7551}" - ProjectSection(ProjectDependencies) = postProject - {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} - {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED} = {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED} - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} - {F0B874CB-4476-4199-9315-8343D05AE684} = {F0B874CB-4476-4199-9315-8343D05AE684} - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DebuggerUICommon", "Core\DebuggerUICommon\DebuggerUICommon.vcproj", "{F81AE75C-3D17-4D8C-A201-82FA5351C123}" - ProjectSection(ProjectDependencies) = postProject - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Lua", "..\Externals\Lua\Lua.vcproj", "{DA4CA030-A741-4DDC-9DA8-B2F351F0F158}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxAdv28", "..\Externals\wxWidgets\build\msw\wx_adv.vcproj", "{0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}" - ProjectSection(ProjectDependencies) = postProject - {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxAui", "..\Externals\wxWidgets\build\msw\wx_aui.vcproj", "{05C75041-D67D-4903-A362-8395A7B35C75}" - ProjectSection(ProjectDependencies) = postProject - {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxBase28", "..\Externals\wxWidgets\build\msw\wx_base.vcproj", "{1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}" - ProjectSection(ProjectDependencies) = postProject - {3E03C179-8251-46E4-81F4-466F114BAC63} = {3E03C179-8251-46E4-81F4-466F114BAC63} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxCore28", "..\Externals\wxWidgets\build\msw\wx_core.vcproj", "{11F55366-12EC-4C44-A8CB-1D4E315D61ED}" - ProjectSection(ProjectDependencies) = postProject - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_VideoSoftware", "Plugins\Plugin_VideoSoftware\Plugin_VideoSoftware.vcproj", "{66A4E7BD-E2E8-4373-9B75-8750EB5AE683}" - ProjectSection(ProjectDependencies) = postProject - {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} = {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_GCPad", "Plugins\Plugin_GCPad\Plugin_GCPad.vcproj", "{9FF603F8-B3BB-4144-9688-B2B802FA0F16}" - ProjectSection(ProjectDependencies) = postProject - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} = {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} - {05C75041-D67D-4903-A362-8395A7B35C75} = {05C75041-D67D-4903-A362-8395A7B35C75} - {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_GCPadNew", "Plugins\Plugin_GCPadNew\Plugin_GCPadNew.vcproj", "{1C3A7A91-A97F-4C7C-B45D-26F2242904D7}" - ProjectSection(ProjectDependencies) = postProject - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} = {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} - {05C75041-D67D-4903-A362-8395A7B35C75} = {05C75041-D67D-4903-A362-8395A7B35C75} - {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} - {660BB3F7-ED8F-4027-A460-8E4EDA8189BE} = {660BB3F7-ED8F-4027-A460-8E4EDA8189BE} - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_WiimoteNew", "Plugins\Plugin_WiimoteNew\Plugin_WiimoteNew.vcproj", "{BB6CE47B-C676-44BB-AE93-2CF59B8C8BD4}" - ProjectSection(ProjectDependencies) = postProject - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} = {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} - {05C75041-D67D-4903-A362-8395A7B35C75} = {05C75041-D67D-4903-A362-8395A7B35C75} - {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} - {660BB3F7-ED8F-4027-A460-8E4EDA8189BE} = {660BB3F7-ED8F-4027-A460-8E4EDA8189BE} - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InputPluginCommon", "Plugins\InputPluginCommon\InputPluginCommon.vcproj", "{660BB3F7-ED8F-4027-A460-8E4EDA8189BE}" - ProjectSection(ProjectDependencies) = postProject - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} = {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} - {05C75041-D67D-4903-A362-8395A7B35C75} = {05C75041-D67D-4903-A362-8395A7B35C75} - {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - DebugFast|Win32 = DebugFast|Win32 - DebugFast|x64 = DebugFast|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {F0B874CB-4476-4199-9315-8343D05AE684}.Debug|Win32.ActiveCfg = Debug|Win32 - {F0B874CB-4476-4199-9315-8343D05AE684}.Debug|Win32.Build.0 = Debug|Win32 - {F0B874CB-4476-4199-9315-8343D05AE684}.Debug|x64.ActiveCfg = Debug|x64 - {F0B874CB-4476-4199-9315-8343D05AE684}.Debug|x64.Build.0 = Debug|x64 - {F0B874CB-4476-4199-9315-8343D05AE684}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {F0B874CB-4476-4199-9315-8343D05AE684}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {F0B874CB-4476-4199-9315-8343D05AE684}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {F0B874CB-4476-4199-9315-8343D05AE684}.DebugFast|x64.Build.0 = DebugFast|x64 - {F0B874CB-4476-4199-9315-8343D05AE684}.Release|Win32.ActiveCfg = Release|Win32 - {F0B874CB-4476-4199-9315-8343D05AE684}.Release|Win32.Build.0 = Release|Win32 - {F0B874CB-4476-4199-9315-8343D05AE684}.Release|x64.ActiveCfg = Release|x64 - {F0B874CB-4476-4199-9315-8343D05AE684}.Release|x64.Build.0 = Release|x64 - {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Debug|Win32.ActiveCfg = Debug|Win32 - {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Debug|Win32.Build.0 = Debug|Win32 - {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Debug|x64.ActiveCfg = Debug|x64 - {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Debug|x64.Build.0 = Debug|x64 - {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.DebugFast|x64.Build.0 = DebugFast|x64 - {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Release|Win32.ActiveCfg = Release|Win32 - {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Release|Win32.Build.0 = Release|Win32 - {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Release|x64.ActiveCfg = Release|x64 - {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Release|x64.Build.0 = Release|x64 - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Debug|Win32.ActiveCfg = Debug|Win32 - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Debug|Win32.Build.0 = Debug|Win32 - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Debug|x64.ActiveCfg = Debug|x64 - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Debug|x64.Build.0 = Debug|x64 - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.DebugFast|Win32.ActiveCfg = Release|Win32 - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.DebugFast|Win32.Build.0 = Release|Win32 - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.DebugFast|x64.ActiveCfg = Release|x64 - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.DebugFast|x64.Build.0 = Release|x64 - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Release|Win32.ActiveCfg = Release|Win32 - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Release|Win32.Build.0 = Release|Win32 - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Release|x64.ActiveCfg = Release|x64 - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Release|x64.Build.0 = Release|x64 - {3E03C179-8251-46E4-81F4-466F114BAC63}.Debug|Win32.ActiveCfg = Debug|Win32 - {3E03C179-8251-46E4-81F4-466F114BAC63}.Debug|Win32.Build.0 = Debug|Win32 - {3E03C179-8251-46E4-81F4-466F114BAC63}.Debug|x64.ActiveCfg = Debug|x64 - {3E03C179-8251-46E4-81F4-466F114BAC63}.Debug|x64.Build.0 = Debug|x64 - {3E03C179-8251-46E4-81F4-466F114BAC63}.DebugFast|Win32.ActiveCfg = Release|Win32 - {3E03C179-8251-46E4-81F4-466F114BAC63}.DebugFast|Win32.Build.0 = Release|Win32 - {3E03C179-8251-46E4-81F4-466F114BAC63}.DebugFast|x64.ActiveCfg = Release|x64 - {3E03C179-8251-46E4-81F4-466F114BAC63}.DebugFast|x64.Build.0 = Release|x64 - {3E03C179-8251-46E4-81F4-466F114BAC63}.Release|Win32.ActiveCfg = Release|Win32 - {3E03C179-8251-46E4-81F4-466F114BAC63}.Release|Win32.Build.0 = Release|Win32 - {3E03C179-8251-46E4-81F4-466F114BAC63}.Release|x64.ActiveCfg = Release|x64 - {3E03C179-8251-46E4-81F4-466F114BAC63}.Release|x64.Build.0 = Release|x64 - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Debug|Win32.ActiveCfg = Debug|Win32 - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Debug|Win32.Build.0 = Debug|Win32 - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Debug|x64.ActiveCfg = Debug|x64 - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Debug|x64.Build.0 = Debug|x64 - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.DebugFast|x64.Build.0 = DebugFast|x64 - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Release|Win32.ActiveCfg = Release|Win32 - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Release|Win32.Build.0 = Release|Win32 - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Release|x64.ActiveCfg = Release|x64 - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Release|x64.Build.0 = Release|x64 - {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Debug|Win32.ActiveCfg = Debug|Win32 - {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Debug|Win32.Build.0 = Debug|Win32 - {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Debug|x64.ActiveCfg = Debug|x64 - {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Debug|x64.Build.0 = Debug|x64 - {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.DebugFast|x64.Build.0 = DebugFast|x64 - {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Release|Win32.ActiveCfg = Release|Win32 - {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Release|Win32.Build.0 = Release|Win32 - {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Release|x64.ActiveCfg = Release|x64 - {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Release|x64.Build.0 = Release|x64 - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Debug|Win32.ActiveCfg = Debug|Win32 - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Debug|Win32.Build.0 = Debug|Win32 - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Debug|x64.ActiveCfg = Debug|x64 - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Debug|x64.Build.0 = Debug|x64 - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.DebugFast|x64.Build.0 = DebugFast|x64 - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Release|Win32.ActiveCfg = Release|Win32 - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Release|Win32.Build.0 = Release|Win32 - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Release|x64.ActiveCfg = Release|x64 - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Release|x64.Build.0 = Release|x64 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Debug|Win32.ActiveCfg = Debug|Win32 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Debug|Win32.Build.0 = Debug|Win32 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Debug|x64.ActiveCfg = Debug|x64 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Debug|x64.Build.0 = Debug|x64 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.DebugFast|x64.Build.0 = DebugFast|x64 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Release|Win32.ActiveCfg = Release|Win32 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Release|Win32.Build.0 = Release|Win32 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Release|x64.ActiveCfg = Release|x64 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Release|x64.Build.0 = Release|x64 - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Debug|Win32.ActiveCfg = Debug|Win32 - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Debug|Win32.Build.0 = Debug|Win32 - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Debug|x64.ActiveCfg = Debug|x64 - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Debug|x64.Build.0 = Debug|x64 - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.DebugFast|x64.Build.0 = DebugFast|x64 - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Release|Win32.ActiveCfg = Release|Win32 - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Release|Win32.Build.0 = Release|Win32 - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Release|x64.ActiveCfg = Release|x64 - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Release|x64.Build.0 = Release|x64 - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Debug|Win32.ActiveCfg = Debug|Win32 - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Debug|Win32.Build.0 = Debug|Win32 - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Debug|x64.ActiveCfg = Debug|x64 - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Debug|x64.Build.0 = Debug|x64 - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.DebugFast|x64.Build.0 = DebugFast|x64 - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Release|Win32.ActiveCfg = Release|Win32 - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Release|Win32.Build.0 = Release|Win32 - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Release|x64.ActiveCfg = Release|x64 - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Release|x64.Build.0 = Release|x64 - {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.Debug|Win32.ActiveCfg = Debug|Win32 - {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.Debug|Win32.Build.0 = Debug|Win32 - {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.Debug|x64.ActiveCfg = Debug|x64 - {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.Debug|x64.Build.0 = Debug|x64 - {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.DebugFast|x64.Build.0 = DebugFast|x64 - {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.Release|Win32.ActiveCfg = Release|Win32 - {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.Release|Win32.Build.0 = Release|Win32 - {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.Release|x64.ActiveCfg = Release|x64 - {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.Release|x64.Build.0 = Release|x64 - {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Debug|Win32.ActiveCfg = Debug|Win32 - {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Debug|Win32.Build.0 = Debug|Win32 - {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Debug|x64.ActiveCfg = Debug|x64 - {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Debug|x64.Build.0 = Debug|x64 - {33546D62-7F34-4EA6-A88E-D538B36E16BF}.DebugFast|Win32.ActiveCfg = Release|Win32 - {33546D62-7F34-4EA6-A88E-D538B36E16BF}.DebugFast|Win32.Build.0 = Release|Win32 - {33546D62-7F34-4EA6-A88E-D538B36E16BF}.DebugFast|x64.ActiveCfg = Release|x64 - {33546D62-7F34-4EA6-A88E-D538B36E16BF}.DebugFast|x64.Build.0 = Release|x64 - {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Release|Win32.ActiveCfg = Release|Win32 - {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Release|Win32.Build.0 = Release|Win32 - {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Release|x64.ActiveCfg = Release|x64 - {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Release|x64.Build.0 = Release|x64 - {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Debug|Win32.ActiveCfg = Debug|Win32 - {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Debug|Win32.Build.0 = Debug|Win32 - {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Debug|x64.ActiveCfg = Debug|x64 - {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Debug|x64.Build.0 = Debug|x64 - {8D612734-FAA5-4B8A-804F-4DEA2367D495}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {8D612734-FAA5-4B8A-804F-4DEA2367D495}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {8D612734-FAA5-4B8A-804F-4DEA2367D495}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {8D612734-FAA5-4B8A-804F-4DEA2367D495}.DebugFast|x64.Build.0 = DebugFast|x64 - {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release|Win32.ActiveCfg = Release|Win32 - {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release|Win32.Build.0 = Release|Win32 - {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release|x64.ActiveCfg = Release|x64 - {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release|x64.Build.0 = Release|x64 - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.Debug|Win32.ActiveCfg = Debug|Win32 - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.Debug|Win32.Build.0 = Debug|Win32 - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.Debug|x64.ActiveCfg = Debug|x64 - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.Debug|x64.Build.0 = Debug|x64 - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.DebugFast|x64.Build.0 = DebugFast|x64 - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.Release|Win32.ActiveCfg = Release|Win32 - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.Release|Win32.Build.0 = Release|Win32 - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.Release|x64.ActiveCfg = Release|x64 - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.Release|x64.Build.0 = Release|x64 - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.Debug|Win32.ActiveCfg = Debug|Win32 - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.Debug|Win32.Build.0 = Debug|Win32 - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.Debug|x64.ActiveCfg = Debug|x64 - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.Debug|x64.Build.0 = Debug|x64 - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.DebugFast|x64.Build.0 = DebugFast|x64 - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.Release|Win32.ActiveCfg = Release|Win32 - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.Release|Win32.Build.0 = Release|Win32 - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.Release|x64.ActiveCfg = Release|x64 - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.Release|x64.Build.0 = Release|x64 - {3D8156A9-64D1-4C8E-ADBE-1B319030E4A4}.Debug|Win32.ActiveCfg = Debug|Win32 - {3D8156A9-64D1-4C8E-ADBE-1B319030E4A4}.Debug|Win32.Build.0 = Debug|Win32 - {3D8156A9-64D1-4C8E-ADBE-1B319030E4A4}.Debug|x64.ActiveCfg = Debug|x64 - {3D8156A9-64D1-4C8E-ADBE-1B319030E4A4}.Debug|x64.Build.0 = Debug|x64 - {3D8156A9-64D1-4C8E-ADBE-1B319030E4A4}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {3D8156A9-64D1-4C8E-ADBE-1B319030E4A4}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {3D8156A9-64D1-4C8E-ADBE-1B319030E4A4}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {3D8156A9-64D1-4C8E-ADBE-1B319030E4A4}.DebugFast|x64.Build.0 = DebugFast|x64 - {3D8156A9-64D1-4C8E-ADBE-1B319030E4A4}.Release|Win32.ActiveCfg = Release|Win32 - {3D8156A9-64D1-4C8E-ADBE-1B319030E4A4}.Release|Win32.Build.0 = Release|Win32 - {3D8156A9-64D1-4C8E-ADBE-1B319030E4A4}.Release|x64.ActiveCfg = Release|x64 - {3D8156A9-64D1-4C8E-ADBE-1B319030E4A4}.Release|x64.Build.0 = Release|x64 - {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED}.Debug|Win32.ActiveCfg = Debug|Win32 - {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED}.Debug|Win32.Build.0 = Debug|Win32 - {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED}.Debug|x64.ActiveCfg = Debug|x64 - {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED}.Debug|x64.Build.0 = Debug|x64 - {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED}.DebugFast|x64.Build.0 = DebugFast|x64 - {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED}.Release|Win32.ActiveCfg = Release|Win32 - {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED}.Release|Win32.Build.0 = Release|Win32 - {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED}.Release|x64.ActiveCfg = Release|x64 - {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED}.Release|x64.Build.0 = Release|x64 - {1970D175-3DE8-4738-942A-4D98D1CDBF64}.Debug|Win32.ActiveCfg = Debug|Win32 - {1970D175-3DE8-4738-942A-4D98D1CDBF64}.Debug|Win32.Build.0 = Debug|Win32 - {1970D175-3DE8-4738-942A-4D98D1CDBF64}.Debug|x64.ActiveCfg = Debug|x64 - {1970D175-3DE8-4738-942A-4D98D1CDBF64}.Debug|x64.Build.0 = Debug|x64 - {1970D175-3DE8-4738-942A-4D98D1CDBF64}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {1970D175-3DE8-4738-942A-4D98D1CDBF64}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {1970D175-3DE8-4738-942A-4D98D1CDBF64}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {1970D175-3DE8-4738-942A-4D98D1CDBF64}.DebugFast|x64.Build.0 = DebugFast|x64 - {1970D175-3DE8-4738-942A-4D98D1CDBF64}.Release|Win32.ActiveCfg = Release|Win32 - {1970D175-3DE8-4738-942A-4D98D1CDBF64}.Release|x64.ActiveCfg = Release|x64 - {1970D175-3DE8-4738-942A-4D98D1CDBF64}.Release|x64.Build.0 = Release|x64 - {3877AA3E-9CC0-4ADF-8E71-272EE4443478}.Debug|Win32.ActiveCfg = Wii|Win32 - {3877AA3E-9CC0-4ADF-8E71-272EE4443478}.Debug|x64.ActiveCfg = Wii|x64 - {3877AA3E-9CC0-4ADF-8E71-272EE4443478}.DebugFast|Win32.ActiveCfg = Wii|Win32 - {3877AA3E-9CC0-4ADF-8E71-272EE4443478}.DebugFast|x64.ActiveCfg = Wii|x64 - {3877AA3E-9CC0-4ADF-8E71-272EE4443478}.Release|Win32.ActiveCfg = Wii|Win32 - {3877AA3E-9CC0-4ADF-8E71-272EE4443478}.Release|x64.ActiveCfg = Wii|x64 - {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.Debug|Win32.ActiveCfg = Debug|Win32 - {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.Debug|Win32.Build.0 = Debug|Win32 - {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.Debug|x64.ActiveCfg = Debug|x64 - {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.Debug|x64.Build.0 = Debug|x64 - {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.DebugFast|Win32.ActiveCfg = Release|Win32 - {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.DebugFast|Win32.Build.0 = Release|Win32 - {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.DebugFast|x64.ActiveCfg = Release|x64 - {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.DebugFast|x64.Build.0 = Release|x64 - {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.Release|Win32.ActiveCfg = Release|Win32 - {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.Release|Win32.Build.0 = Release|Win32 - {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.Release|x64.ActiveCfg = Release|x64 - {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.Release|x64.Build.0 = Release|x64 - {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.Debug|Win32.ActiveCfg = Debug|Win32 - {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.Debug|Win32.Build.0 = Debug|Win32 - {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.Debug|x64.ActiveCfg = Debug|x64 - {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.Debug|x64.Build.0 = Debug|x64 - {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.DebugFast|Win32.ActiveCfg = Release|Win32 - {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.DebugFast|Win32.Build.0 = Release|Win32 - {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.DebugFast|x64.ActiveCfg = Release|x64 - {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.DebugFast|x64.Build.0 = Release|x64 - {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.Release|Win32.ActiveCfg = Release|Win32 - {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.Release|Win32.Build.0 = Release|Win32 - {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.Release|x64.ActiveCfg = Release|x64 - {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.Release|x64.Build.0 = Release|x64 - {40C636FA-B5BF-4D67-ABC8-376B524A7551}.Debug|Win32.ActiveCfg = Debug|Win32 - {40C636FA-B5BF-4D67-ABC8-376B524A7551}.Debug|x64.ActiveCfg = Debug|x64 - {40C636FA-B5BF-4D67-ABC8-376B524A7551}.DebugFast|Win32.ActiveCfg = Release|Win32 - {40C636FA-B5BF-4D67-ABC8-376B524A7551}.DebugFast|Win32.Build.0 = Release|Win32 - {40C636FA-B5BF-4D67-ABC8-376B524A7551}.DebugFast|x64.ActiveCfg = Release|x64 - {40C636FA-B5BF-4D67-ABC8-376B524A7551}.DebugFast|x64.Build.0 = Release|x64 - {40C636FA-B5BF-4D67-ABC8-376B524A7551}.Release|Win32.ActiveCfg = Release|Win32 - {40C636FA-B5BF-4D67-ABC8-376B524A7551}.Release|x64.ActiveCfg = Release|x64 - {40C636FA-B5BF-4D67-ABC8-376B524A7551}.Release|x64.Build.0 = Release|x64 - {F81AE75C-3D17-4D8C-A201-82FA5351C123}.Debug|Win32.ActiveCfg = Debug|Win32 - {F81AE75C-3D17-4D8C-A201-82FA5351C123}.Debug|Win32.Build.0 = Debug|Win32 - {F81AE75C-3D17-4D8C-A201-82FA5351C123}.Debug|x64.ActiveCfg = Debug|x64 - {F81AE75C-3D17-4D8C-A201-82FA5351C123}.Debug|x64.Build.0 = Debug|x64 - {F81AE75C-3D17-4D8C-A201-82FA5351C123}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {F81AE75C-3D17-4D8C-A201-82FA5351C123}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {F81AE75C-3D17-4D8C-A201-82FA5351C123}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {F81AE75C-3D17-4D8C-A201-82FA5351C123}.DebugFast|x64.Build.0 = DebugFast|x64 - {F81AE75C-3D17-4D8C-A201-82FA5351C123}.Release|Win32.ActiveCfg = Release|Win32 - {F81AE75C-3D17-4D8C-A201-82FA5351C123}.Release|Win32.Build.0 = Release|Win32 - {F81AE75C-3D17-4D8C-A201-82FA5351C123}.Release|x64.ActiveCfg = Release|x64 - {F81AE75C-3D17-4D8C-A201-82FA5351C123}.Release|x64.Build.0 = Release|x64 - {DA4CA030-A741-4DDC-9DA8-B2F351F0F158}.Debug|Win32.ActiveCfg = Debug|Win32 - {DA4CA030-A741-4DDC-9DA8-B2F351F0F158}.Debug|Win32.Build.0 = Debug|Win32 - {DA4CA030-A741-4DDC-9DA8-B2F351F0F158}.Debug|x64.ActiveCfg = Debug|x64 - {DA4CA030-A741-4DDC-9DA8-B2F351F0F158}.Debug|x64.Build.0 = Debug|x64 - {DA4CA030-A741-4DDC-9DA8-B2F351F0F158}.DebugFast|Win32.ActiveCfg = Release|Win32 - {DA4CA030-A741-4DDC-9DA8-B2F351F0F158}.DebugFast|Win32.Build.0 = Release|Win32 - {DA4CA030-A741-4DDC-9DA8-B2F351F0F158}.DebugFast|x64.ActiveCfg = Release|x64 - {DA4CA030-A741-4DDC-9DA8-B2F351F0F158}.DebugFast|x64.Build.0 = Release|x64 - {DA4CA030-A741-4DDC-9DA8-B2F351F0F158}.Release|Win32.ActiveCfg = Release|Win32 - {DA4CA030-A741-4DDC-9DA8-B2F351F0F158}.Release|Win32.Build.0 = Release|Win32 - {DA4CA030-A741-4DDC-9DA8-B2F351F0F158}.Release|x64.ActiveCfg = Release|x64 - {DA4CA030-A741-4DDC-9DA8-B2F351F0F158}.Release|x64.Build.0 = Release|x64 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug|Win32.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug|Win32.Build.0 = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug|x64.ActiveCfg = Debug|x64 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug|x64.Build.0 = Debug|x64 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.DebugFast|Win32.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.DebugFast|Win32.Build.0 = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.DebugFast|x64.ActiveCfg = Release|x64 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.DebugFast|x64.Build.0 = Release|x64 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release|Win32.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release|Win32.Build.0 = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release|x64.ActiveCfg = Release|x64 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release|x64.Build.0 = Release|x64 - {05C75041-D67D-4903-A362-8395A7B35C75}.Debug|Win32.ActiveCfg = Debug|Win32 - {05C75041-D67D-4903-A362-8395A7B35C75}.Debug|Win32.Build.0 = Debug|Win32 - {05C75041-D67D-4903-A362-8395A7B35C75}.Debug|x64.ActiveCfg = Debug|x64 - {05C75041-D67D-4903-A362-8395A7B35C75}.Debug|x64.Build.0 = Debug|x64 - {05C75041-D67D-4903-A362-8395A7B35C75}.DebugFast|Win32.ActiveCfg = Release|Win32 - {05C75041-D67D-4903-A362-8395A7B35C75}.DebugFast|Win32.Build.0 = Release|Win32 - {05C75041-D67D-4903-A362-8395A7B35C75}.DebugFast|x64.ActiveCfg = Release|x64 - {05C75041-D67D-4903-A362-8395A7B35C75}.DebugFast|x64.Build.0 = Release|x64 - {05C75041-D67D-4903-A362-8395A7B35C75}.Release|Win32.ActiveCfg = Release|Win32 - {05C75041-D67D-4903-A362-8395A7B35C75}.Release|Win32.Build.0 = Release|Win32 - {05C75041-D67D-4903-A362-8395A7B35C75}.Release|x64.ActiveCfg = Release|x64 - {05C75041-D67D-4903-A362-8395A7B35C75}.Release|x64.Build.0 = Release|x64 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Debug|Win32.ActiveCfg = Debug|Win32 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Debug|Win32.Build.0 = Debug|Win32 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Debug|x64.ActiveCfg = Debug|x64 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Debug|x64.Build.0 = Debug|x64 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.DebugFast|Win32.ActiveCfg = Release|Win32 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.DebugFast|Win32.Build.0 = Release|Win32 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.DebugFast|x64.ActiveCfg = Release|x64 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.DebugFast|x64.Build.0 = Release|x64 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Release|Win32.ActiveCfg = Release|Win32 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Release|Win32.Build.0 = Release|Win32 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Release|x64.ActiveCfg = Release|x64 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Release|x64.Build.0 = Release|x64 - {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.Debug|Win32.ActiveCfg = Debug|Win32 - {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.Debug|Win32.Build.0 = Debug|Win32 - {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.Debug|x64.ActiveCfg = Debug|x64 - {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.Debug|x64.Build.0 = Debug|x64 - {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.DebugFast|Win32.ActiveCfg = Release|Win32 - {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.DebugFast|Win32.Build.0 = Release|Win32 - {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.DebugFast|x64.ActiveCfg = Release|x64 - {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.DebugFast|x64.Build.0 = Release|x64 - {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.Release|Win32.ActiveCfg = Release|Win32 - {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.Release|Win32.Build.0 = Release|Win32 - {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.Release|x64.ActiveCfg = Release|x64 - {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.Release|x64.Build.0 = Release|x64 - {66A4E7BD-E2E8-4373-9B75-8750EB5AE683}.Debug|Win32.ActiveCfg = Debug|Win32 - {66A4E7BD-E2E8-4373-9B75-8750EB5AE683}.Debug|Win32.Build.0 = Debug|Win32 - {66A4E7BD-E2E8-4373-9B75-8750EB5AE683}.Debug|x64.ActiveCfg = Debug|x64 - {66A4E7BD-E2E8-4373-9B75-8750EB5AE683}.Debug|x64.Build.0 = Debug|x64 - {66A4E7BD-E2E8-4373-9B75-8750EB5AE683}.DebugFast|Win32.ActiveCfg = Release|Win32 - {66A4E7BD-E2E8-4373-9B75-8750EB5AE683}.DebugFast|Win32.Build.0 = Release|Win32 - {66A4E7BD-E2E8-4373-9B75-8750EB5AE683}.DebugFast|x64.ActiveCfg = Release|x64 - {66A4E7BD-E2E8-4373-9B75-8750EB5AE683}.DebugFast|x64.Build.0 = Release|x64 - {66A4E7BD-E2E8-4373-9B75-8750EB5AE683}.Release|Win32.ActiveCfg = Release|Win32 - {66A4E7BD-E2E8-4373-9B75-8750EB5AE683}.Release|Win32.Build.0 = Release|Win32 - {66A4E7BD-E2E8-4373-9B75-8750EB5AE683}.Release|x64.ActiveCfg = Release|x64 - {66A4E7BD-E2E8-4373-9B75-8750EB5AE683}.Release|x64.Build.0 = Release|x64 - {9FF603F8-B3BB-4144-9688-B2B802FA0F16}.Debug|Win32.ActiveCfg = Debug|Win32 - {9FF603F8-B3BB-4144-9688-B2B802FA0F16}.Debug|Win32.Build.0 = Debug|Win32 - {9FF603F8-B3BB-4144-9688-B2B802FA0F16}.Debug|x64.ActiveCfg = Debug|x64 - {9FF603F8-B3BB-4144-9688-B2B802FA0F16}.Debug|x64.Build.0 = Debug|x64 - {9FF603F8-B3BB-4144-9688-B2B802FA0F16}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {9FF603F8-B3BB-4144-9688-B2B802FA0F16}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {9FF603F8-B3BB-4144-9688-B2B802FA0F16}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {9FF603F8-B3BB-4144-9688-B2B802FA0F16}.DebugFast|x64.Build.0 = DebugFast|x64 - {9FF603F8-B3BB-4144-9688-B2B802FA0F16}.Release|Win32.ActiveCfg = Release|Win32 - {9FF603F8-B3BB-4144-9688-B2B802FA0F16}.Release|Win32.Build.0 = Release|Win32 - {9FF603F8-B3BB-4144-9688-B2B802FA0F16}.Release|x64.ActiveCfg = Release|x64 - {9FF603F8-B3BB-4144-9688-B2B802FA0F16}.Release|x64.Build.0 = Release|x64 - {1C3A7A91-A97F-4C7C-B45D-26F2242904D7}.Debug|Win32.ActiveCfg = Debug|Win32 - {1C3A7A91-A97F-4C7C-B45D-26F2242904D7}.Debug|Win32.Build.0 = Debug|Win32 - {1C3A7A91-A97F-4C7C-B45D-26F2242904D7}.Debug|x64.ActiveCfg = Debug|x64 - {1C3A7A91-A97F-4C7C-B45D-26F2242904D7}.Debug|x64.Build.0 = Debug|x64 - {1C3A7A91-A97F-4C7C-B45D-26F2242904D7}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {1C3A7A91-A97F-4C7C-B45D-26F2242904D7}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {1C3A7A91-A97F-4C7C-B45D-26F2242904D7}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {1C3A7A91-A97F-4C7C-B45D-26F2242904D7}.DebugFast|x64.Build.0 = DebugFast|x64 - {1C3A7A91-A97F-4C7C-B45D-26F2242904D7}.Release|Win32.ActiveCfg = Release|Win32 - {1C3A7A91-A97F-4C7C-B45D-26F2242904D7}.Release|Win32.Build.0 = Release|Win32 - {1C3A7A91-A97F-4C7C-B45D-26F2242904D7}.Release|x64.ActiveCfg = Release|x64 - {1C3A7A91-A97F-4C7C-B45D-26F2242904D7}.Release|x64.Build.0 = Release|x64 - {BB6CE47B-C676-44BB-AE93-2CF59B8C8BD4}.Debug|Win32.ActiveCfg = Debug|Win32 - {BB6CE47B-C676-44BB-AE93-2CF59B8C8BD4}.Debug|Win32.Build.0 = Debug|Win32 - {BB6CE47B-C676-44BB-AE93-2CF59B8C8BD4}.Debug|x64.ActiveCfg = Debug|x64 - {BB6CE47B-C676-44BB-AE93-2CF59B8C8BD4}.Debug|x64.Build.0 = Debug|x64 - {BB6CE47B-C676-44BB-AE93-2CF59B8C8BD4}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {BB6CE47B-C676-44BB-AE93-2CF59B8C8BD4}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {BB6CE47B-C676-44BB-AE93-2CF59B8C8BD4}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {BB6CE47B-C676-44BB-AE93-2CF59B8C8BD4}.DebugFast|x64.Build.0 = DebugFast|x64 - {BB6CE47B-C676-44BB-AE93-2CF59B8C8BD4}.Release|Win32.ActiveCfg = Release|Win32 - {BB6CE47B-C676-44BB-AE93-2CF59B8C8BD4}.Release|Win32.Build.0 = Release|Win32 - {BB6CE47B-C676-44BB-AE93-2CF59B8C8BD4}.Release|x64.ActiveCfg = Release|x64 - {BB6CE47B-C676-44BB-AE93-2CF59B8C8BD4}.Release|x64.Build.0 = Release|x64 - {660BB3F7-ED8F-4027-A460-8E4EDA8189BE}.Debug|Win32.ActiveCfg = Debug|Win32 - {660BB3F7-ED8F-4027-A460-8E4EDA8189BE}.Debug|Win32.Build.0 = Debug|Win32 - {660BB3F7-ED8F-4027-A460-8E4EDA8189BE}.Debug|x64.ActiveCfg = Debug|x64 - {660BB3F7-ED8F-4027-A460-8E4EDA8189BE}.Debug|x64.Build.0 = Debug|x64 - {660BB3F7-ED8F-4027-A460-8E4EDA8189BE}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {660BB3F7-ED8F-4027-A460-8E4EDA8189BE}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {660BB3F7-ED8F-4027-A460-8E4EDA8189BE}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {660BB3F7-ED8F-4027-A460-8E4EDA8189BE}.DebugFast|x64.Build.0 = DebugFast|x64 - {660BB3F7-ED8F-4027-A460-8E4EDA8189BE}.Release|Win32.ActiveCfg = Release|Win32 - {660BB3F7-ED8F-4027-A460-8E4EDA8189BE}.Release|Win32.Build.0 = Release|Win32 - {660BB3F7-ED8F-4027-A460-8E4EDA8189BE}.Release|x64.ActiveCfg = Release|x64 - {660BB3F7-ED8F-4027-A460-8E4EDA8189BE}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - AMDCaProjectFile = D:\Dev\Dolphin\trunk\Source\CodeAnalyst\Dolphin.caw - EndGlobalSection - GlobalSection(DPCodeReviewSolutionGUID) = preSolution - DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} - EndGlobalSection -EndGlobal +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Core", "Core\Core\Core.vcproj", "{F0B874CB-4476-4199-9315-8343D05AE684}" + ProjectSection(ProjectDependencies) = postProject + {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} = {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} + {DA4CA030-A741-4DDC-9DA8-B2F351F0F158} = {DA4CA030-A741-4DDC-9DA8-B2F351F0F158} + {33546D62-7F34-4EA6-A88E-D538B36E16BF} = {33546D62-7F34-4EA6-A88E-D538B36E16BF} + {3E03C179-8251-46E4-81F4-466F114BAC63} = {3E03C179-8251-46E4-81F4-466F114BAC63} + {823DDC98-42D5-4A38-88CF-9DC06C788AE4} = {823DDC98-42D5-4A38-88CF-9DC06C788AE4} + {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} = {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} + {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} + {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C} = {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_VideoDX9", "Plugins\Plugin_VideoDX9\Plugin_VideoDX9.vcproj", "{636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}" + ProjectSection(ProjectDependencies) = postProject + {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} + {3E03C179-8251-46E4-81F4-466F114BAC63} = {3E03C179-8251-46E4-81F4-466F114BAC63} + {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} = {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} + {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} + {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Bochs_disasm", "..\Externals\Bochs_disasm\Bochs_disasm.vcproj", "{29C2ABC1-ADA5-42CD-A5FC-96022D52A510}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "..\Externals\zlib\zlib.vcproj", "{3E03C179-8251-46E4-81F4-466F114BAC63}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DiscIO", "Core\DiscIO\DiscIO.vcproj", "{B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}" + ProjectSection(ProjectDependencies) = postProject + {3E03C179-8251-46E4-81F4-466F114BAC63} = {3E03C179-8251-46E4-81F4-466F114BAC63} + {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_VideoOGL", "Plugins\Plugin_VideoOGL\Plugin_VideoOGL.vcproj", "{CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}" + ProjectSection(ProjectDependencies) = postProject + {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} = {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} + {05C75041-D67D-4903-A362-8395A7B35C75} = {05C75041-D67D-4903-A362-8395A7B35C75} + {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} + {3E03C179-8251-46E4-81F4-466F114BAC63} = {3E03C179-8251-46E4-81F4-466F114BAC63} + {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} + {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} = {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} + {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} + {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Common", "Core\Common\Common.vcproj", "{C573CAF7-EE6A-458E-8049-16C0BF34C2E9}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Dolphin", "Core\DolphinWX\DolphinWX.vcproj", "{A72606EF-C5C1-4954-90AD-F0F93A8D97D9}" + ProjectSection(ProjectDependencies) = postProject + {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} = {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} + {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160} = {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160} + {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8} = {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8} + {8D612734-FAA5-4B8A-804F-4DEA2367D495} = {8D612734-FAA5-4B8A-804F-4DEA2367D495} + {05C75041-D67D-4903-A362-8395A7B35C75} = {05C75041-D67D-4903-A362-8395A7B35C75} + {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18} = {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18} + {33546D62-7F34-4EA6-A88E-D538B36E16BF} = {33546D62-7F34-4EA6-A88E-D538B36E16BF} + {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} + {3E03C179-8251-46E4-81F4-466F114BAC63} = {3E03C179-8251-46E4-81F4-466F114BAC63} + {823DDC98-42D5-4A38-88CF-9DC06C788AE4} = {823DDC98-42D5-4A38-88CF-9DC06C788AE4} + {3D8156A9-64D1-4C8E-ADBE-1B319030E4A4} = {3D8156A9-64D1-4C8E-ADBE-1B319030E4A4} + {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} + {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} = {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} + {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} = {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} + {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77} = {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77} + {F0B874CB-4476-4199-9315-8343D05AE684} = {F0B874CB-4476-4199-9315-8343D05AE684} + {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} + {9FF603F8-B3BB-4144-9688-B2B802FA0F16} = {9FF603F8-B3BB-4144-9688-B2B802FA0F16} + {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C} = {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Debugger", "Core\DebuggerWX\DebuggerWX.vcproj", "{4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}" + ProjectSection(ProjectDependencies) = postProject + {F81AE75C-3D17-4D8C-A201-82FA5351C123} = {F81AE75C-3D17-4D8C-A201-82FA5351C123} + {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} = {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} + {F0B874CB-4476-4199-9315-8343D05AE684} = {F0B874CB-4476-4199-9315-8343D05AE684} + {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VideoCommon", "Core\VideoCommon\VideoCommon.vcproj", "{E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}" + ProjectSection(ProjectDependencies) = postProject + {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4} = {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4} + {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_DSP_HLE", "Plugins\Plugin_DSP_HLE\Plugin_DSP_HLE.vcproj", "{D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}" + ProjectSection(ProjectDependencies) = postProject + {05C75041-D67D-4903-A362-8395A7B35C75} = {05C75041-D67D-4903-A362-8395A7B35C75} + {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} + {FBAFB369-07EB-4460-9CAD-08BE5789DAB6} = {FBAFB369-07EB-4460-9CAD-08BE5789DAB6} + {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} + {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} + {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LZO", "..\Externals\LZO\LZO.vcproj", "{33546D62-7F34-4EA6-A88E-D538B36E16BF}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_Wiimote", "Plugins\Plugin_Wiimote\Plugin_Wiimote.vcproj", "{8D612734-FAA5-4B8A-804F-4DEA2367D495}" + ProjectSection(ProjectDependencies) = postProject + {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} = {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} + {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} + {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} + {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} + {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InputCommon", "Core\InputCommon\InputCommon.vcproj", "{C7E5D50A-2916-464B-86A7-E10B3CC88ADA}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AudioCommon", "Core\AudioCommon\AudioCommon.vcproj", "{FBAFB369-07EB-4460-9CAD-08BE5789DAB6}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_DSP_LLE", "Plugins\Plugin_DSP_LLE\Plugin_DSP_LLE.vcproj", "{3D8156A9-64D1-4C8E-ADBE-1B319030E4A4}" + ProjectSection(ProjectDependencies) = postProject + {05C75041-D67D-4903-A362-8395A7B35C75} = {05C75041-D67D-4903-A362-8395A7B35C75} + {F81AE75C-3D17-4D8C-A201-82FA5351C123} = {F81AE75C-3D17-4D8C-A201-82FA5351C123} + {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} + {FBAFB369-07EB-4460-9CAD-08BE5789DAB6} = {FBAFB369-07EB-4460-9CAD-08BE5789DAB6} + {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED} = {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED} + {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} + {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} + {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DSPCore", "Core\DSPCore\DSPCore.vcproj", "{838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED}" + ProjectSection(ProjectDependencies) = postProject + {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DSPTool", "DSPTool\DSPTool.vcproj", "{1970D175-3DE8-4738-942A-4D98D1CDBF64}" + ProjectSection(ProjectDependencies) = postProject + {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED} = {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED} + {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DSPSpy", "DSPSpy\DSPSpy.vcproj", "{3877AA3E-9CC0-4ADF-8E71-272EE4443478}" + ProjectSection(ProjectDependencies) = postProject + {1970D175-3DE8-4738-942A-4D98D1CDBF64} = {1970D175-3DE8-4738-942A-4D98D1CDBF64} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SOIL", "..\Externals\SOIL\SOIL.vcproj", "{C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SFML_Network", "..\Externals\SFML\build\vc2008\sfml-network.vcproj", "{823DDC98-42D5-4A38-88CF-9DC06C788AE4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UnitTests", "UnitTests\UnitTests.vcproj", "{40C636FA-B5BF-4D67-ABC8-376B524A7551}" + ProjectSection(ProjectDependencies) = postProject + {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} + {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED} = {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED} + {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} + {F0B874CB-4476-4199-9315-8343D05AE684} = {F0B874CB-4476-4199-9315-8343D05AE684} + {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DebuggerUICommon", "Core\DebuggerUICommon\DebuggerUICommon.vcproj", "{F81AE75C-3D17-4D8C-A201-82FA5351C123}" + ProjectSection(ProjectDependencies) = postProject + {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Lua", "..\Externals\Lua\Lua.vcproj", "{DA4CA030-A741-4DDC-9DA8-B2F351F0F158}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxAdv28", "..\Externals\wxWidgets\build\msw\wx_adv.vcproj", "{0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}" + ProjectSection(ProjectDependencies) = postProject + {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxAui", "..\Externals\wxWidgets\build\msw\wx_aui.vcproj", "{05C75041-D67D-4903-A362-8395A7B35C75}" + ProjectSection(ProjectDependencies) = postProject + {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} + {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxBase28", "..\Externals\wxWidgets\build\msw\wx_base.vcproj", "{1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}" + ProjectSection(ProjectDependencies) = postProject + {3E03C179-8251-46E4-81F4-466F114BAC63} = {3E03C179-8251-46E4-81F4-466F114BAC63} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxCore28", "..\Externals\wxWidgets\build\msw\wx_core.vcproj", "{11F55366-12EC-4C44-A8CB-1D4E315D61ED}" + ProjectSection(ProjectDependencies) = postProject + {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_VideoSoftware", "Plugins\Plugin_VideoSoftware\Plugin_VideoSoftware.vcproj", "{66A4E7BD-E2E8-4373-9B75-8750EB5AE683}" + ProjectSection(ProjectDependencies) = postProject + {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} + {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} = {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} + {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} + {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_GCPad", "Plugins\Plugin_GCPad\Plugin_GCPad.vcproj", "{9FF603F8-B3BB-4144-9688-B2B802FA0F16}" + ProjectSection(ProjectDependencies) = postProject + {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} = {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} + {05C75041-D67D-4903-A362-8395A7B35C75} = {05C75041-D67D-4903-A362-8395A7B35C75} + {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} + {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} + {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} + {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_GCPadNew", "Plugins\Plugin_GCPadNew\Plugin_GCPadNew.vcproj", "{1C3A7A91-A97F-4C7C-B45D-26F2242904D7}" + ProjectSection(ProjectDependencies) = postProject + {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} = {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} + {05C75041-D67D-4903-A362-8395A7B35C75} = {05C75041-D67D-4903-A362-8395A7B35C75} + {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} + {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} + {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} + {660BB3F7-ED8F-4027-A460-8E4EDA8189BE} = {660BB3F7-ED8F-4027-A460-8E4EDA8189BE} + {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_WiimoteNew", "Plugins\Plugin_WiimoteNew\Plugin_WiimoteNew.vcproj", "{BB6CE47B-C676-44BB-AE93-2CF59B8C8BD4}" + ProjectSection(ProjectDependencies) = postProject + {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} = {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} + {05C75041-D67D-4903-A362-8395A7B35C75} = {05C75041-D67D-4903-A362-8395A7B35C75} + {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} + {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} + {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} + {660BB3F7-ED8F-4027-A460-8E4EDA8189BE} = {660BB3F7-ED8F-4027-A460-8E4EDA8189BE} + {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InputPluginCommon", "Plugins\InputPluginCommon\InputPluginCommon.vcproj", "{660BB3F7-ED8F-4027-A460-8E4EDA8189BE}" + ProjectSection(ProjectDependencies) = postProject + {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} = {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} + {05C75041-D67D-4903-A362-8395A7B35C75} = {05C75041-D67D-4903-A362-8395A7B35C75} + {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} + {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} + {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} + {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + DebugFast|Win32 = DebugFast|Win32 + DebugFast|x64 = DebugFast|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F0B874CB-4476-4199-9315-8343D05AE684}.Debug|Win32.ActiveCfg = Debug|Win32 + {F0B874CB-4476-4199-9315-8343D05AE684}.Debug|Win32.Build.0 = Debug|Win32 + {F0B874CB-4476-4199-9315-8343D05AE684}.Debug|x64.ActiveCfg = Debug|x64 + {F0B874CB-4476-4199-9315-8343D05AE684}.Debug|x64.Build.0 = Debug|x64 + {F0B874CB-4476-4199-9315-8343D05AE684}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 + {F0B874CB-4476-4199-9315-8343D05AE684}.DebugFast|Win32.Build.0 = DebugFast|Win32 + {F0B874CB-4476-4199-9315-8343D05AE684}.DebugFast|x64.ActiveCfg = DebugFast|x64 + {F0B874CB-4476-4199-9315-8343D05AE684}.DebugFast|x64.Build.0 = DebugFast|x64 + {F0B874CB-4476-4199-9315-8343D05AE684}.Release|Win32.ActiveCfg = Release|Win32 + {F0B874CB-4476-4199-9315-8343D05AE684}.Release|Win32.Build.0 = Release|Win32 + {F0B874CB-4476-4199-9315-8343D05AE684}.Release|x64.ActiveCfg = Release|x64 + {F0B874CB-4476-4199-9315-8343D05AE684}.Release|x64.Build.0 = Release|x64 + {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Debug|Win32.ActiveCfg = Debug|Win32 + {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Debug|Win32.Build.0 = Debug|Win32 + {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Debug|x64.ActiveCfg = Debug|x64 + {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Debug|x64.Build.0 = Debug|x64 + {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 + {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.DebugFast|Win32.Build.0 = DebugFast|Win32 + {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.DebugFast|x64.ActiveCfg = DebugFast|x64 + {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.DebugFast|x64.Build.0 = DebugFast|x64 + {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Release|Win32.ActiveCfg = Release|Win32 + {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Release|Win32.Build.0 = Release|Win32 + {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Release|x64.ActiveCfg = Release|x64 + {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Release|x64.Build.0 = Release|x64 + {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Debug|Win32.ActiveCfg = Debug|Win32 + {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Debug|Win32.Build.0 = Debug|Win32 + {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Debug|x64.ActiveCfg = Debug|x64 + {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Debug|x64.Build.0 = Debug|x64 + {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.DebugFast|Win32.ActiveCfg = Release|Win32 + {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.DebugFast|Win32.Build.0 = Release|Win32 + {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.DebugFast|x64.ActiveCfg = Release|x64 + {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.DebugFast|x64.Build.0 = Release|x64 + {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Release|Win32.ActiveCfg = Release|Win32 + {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Release|Win32.Build.0 = Release|Win32 + {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Release|x64.ActiveCfg = Release|x64 + {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Release|x64.Build.0 = Release|x64 + {3E03C179-8251-46E4-81F4-466F114BAC63}.Debug|Win32.ActiveCfg = Debug|Win32 + {3E03C179-8251-46E4-81F4-466F114BAC63}.Debug|Win32.Build.0 = Debug|Win32 + {3E03C179-8251-46E4-81F4-466F114BAC63}.Debug|x64.ActiveCfg = Debug|x64 + {3E03C179-8251-46E4-81F4-466F114BAC63}.Debug|x64.Build.0 = Debug|x64 + {3E03C179-8251-46E4-81F4-466F114BAC63}.DebugFast|Win32.ActiveCfg = Release|Win32 + {3E03C179-8251-46E4-81F4-466F114BAC63}.DebugFast|Win32.Build.0 = Release|Win32 + {3E03C179-8251-46E4-81F4-466F114BAC63}.DebugFast|x64.ActiveCfg = Release|x64 + {3E03C179-8251-46E4-81F4-466F114BAC63}.DebugFast|x64.Build.0 = Release|x64 + {3E03C179-8251-46E4-81F4-466F114BAC63}.Release|Win32.ActiveCfg = Release|Win32 + {3E03C179-8251-46E4-81F4-466F114BAC63}.Release|Win32.Build.0 = Release|Win32 + {3E03C179-8251-46E4-81F4-466F114BAC63}.Release|x64.ActiveCfg = Release|x64 + {3E03C179-8251-46E4-81F4-466F114BAC63}.Release|x64.Build.0 = Release|x64 + {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Debug|Win32.ActiveCfg = Debug|Win32 + {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Debug|Win32.Build.0 = Debug|Win32 + {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Debug|x64.ActiveCfg = Debug|x64 + {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Debug|x64.Build.0 = Debug|x64 + {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 + {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.DebugFast|Win32.Build.0 = DebugFast|Win32 + {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.DebugFast|x64.ActiveCfg = DebugFast|x64 + {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.DebugFast|x64.Build.0 = DebugFast|x64 + {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Release|Win32.ActiveCfg = Release|Win32 + {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Release|Win32.Build.0 = Release|Win32 + {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Release|x64.ActiveCfg = Release|x64 + {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Release|x64.Build.0 = Release|x64 + {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Debug|Win32.ActiveCfg = Debug|Win32 + {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Debug|Win32.Build.0 = Debug|Win32 + {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Debug|x64.ActiveCfg = Debug|x64 + {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Debug|x64.Build.0 = Debug|x64 + {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 + {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.DebugFast|Win32.Build.0 = DebugFast|Win32 + {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.DebugFast|x64.ActiveCfg = DebugFast|x64 + {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.DebugFast|x64.Build.0 = DebugFast|x64 + {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Release|Win32.ActiveCfg = Release|Win32 + {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Release|Win32.Build.0 = Release|Win32 + {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Release|x64.ActiveCfg = Release|x64 + {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Release|x64.Build.0 = Release|x64 + {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Debug|Win32.ActiveCfg = Debug|Win32 + {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Debug|Win32.Build.0 = Debug|Win32 + {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Debug|x64.ActiveCfg = Debug|x64 + {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Debug|x64.Build.0 = Debug|x64 + {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 + {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.DebugFast|Win32.Build.0 = DebugFast|Win32 + {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.DebugFast|x64.ActiveCfg = DebugFast|x64 + {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.DebugFast|x64.Build.0 = DebugFast|x64 + {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Release|Win32.ActiveCfg = Release|Win32 + {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Release|Win32.Build.0 = Release|Win32 + {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Release|x64.ActiveCfg = Release|x64 + {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Release|x64.Build.0 = Release|x64 + {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Debug|Win32.ActiveCfg = Debug|Win32 + {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Debug|Win32.Build.0 = Debug|Win32 + {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Debug|x64.ActiveCfg = Debug|x64 + {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Debug|x64.Build.0 = Debug|x64 + {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 + {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.DebugFast|Win32.Build.0 = DebugFast|Win32 + {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.DebugFast|x64.ActiveCfg = DebugFast|x64 + {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.DebugFast|x64.Build.0 = DebugFast|x64 + {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Release|Win32.ActiveCfg = Release|Win32 + {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Release|Win32.Build.0 = Release|Win32 + {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Release|x64.ActiveCfg = Release|x64 + {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Release|x64.Build.0 = Release|x64 + {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Debug|Win32.ActiveCfg = Debug|Win32 + {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Debug|Win32.Build.0 = Debug|Win32 + {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Debug|x64.ActiveCfg = Debug|x64 + {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Debug|x64.Build.0 = Debug|x64 + {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 + {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.DebugFast|Win32.Build.0 = DebugFast|Win32 + {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.DebugFast|x64.ActiveCfg = DebugFast|x64 + {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.DebugFast|x64.Build.0 = DebugFast|x64 + {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Release|Win32.ActiveCfg = Release|Win32 + {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Release|Win32.Build.0 = Release|Win32 + {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Release|x64.ActiveCfg = Release|x64 + {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Release|x64.Build.0 = Release|x64 + {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Debug|Win32.ActiveCfg = Debug|Win32 + {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Debug|Win32.Build.0 = Debug|Win32 + {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Debug|x64.ActiveCfg = Debug|x64 + {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Debug|x64.Build.0 = Debug|x64 + {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 + {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.DebugFast|Win32.Build.0 = DebugFast|Win32 + {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.DebugFast|x64.ActiveCfg = DebugFast|x64 + {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.DebugFast|x64.Build.0 = DebugFast|x64 + {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Release|Win32.ActiveCfg = Release|Win32 + {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Release|Win32.Build.0 = Release|Win32 + {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Release|x64.ActiveCfg = Release|x64 + {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Release|x64.Build.0 = Release|x64 + {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.Debug|Win32.ActiveCfg = Debug|Win32 + {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.Debug|Win32.Build.0 = Debug|Win32 + {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.Debug|x64.ActiveCfg = Debug|x64 + {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.Debug|x64.Build.0 = Debug|x64 + {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 + {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.DebugFast|Win32.Build.0 = DebugFast|Win32 + {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.DebugFast|x64.ActiveCfg = DebugFast|x64 + {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.DebugFast|x64.Build.0 = DebugFast|x64 + {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.Release|Win32.ActiveCfg = Release|Win32 + {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.Release|Win32.Build.0 = Release|Win32 + {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.Release|x64.ActiveCfg = Release|x64 + {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.Release|x64.Build.0 = Release|x64 + {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Debug|Win32.ActiveCfg = Debug|Win32 + {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Debug|Win32.Build.0 = Debug|Win32 + {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Debug|x64.ActiveCfg = Debug|x64 + {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Debug|x64.Build.0 = Debug|x64 + {33546D62-7F34-4EA6-A88E-D538B36E16BF}.DebugFast|Win32.ActiveCfg = Release|Win32 + {33546D62-7F34-4EA6-A88E-D538B36E16BF}.DebugFast|Win32.Build.0 = Release|Win32 + {33546D62-7F34-4EA6-A88E-D538B36E16BF}.DebugFast|x64.ActiveCfg = Release|x64 + {33546D62-7F34-4EA6-A88E-D538B36E16BF}.DebugFast|x64.Build.0 = Release|x64 + {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Release|Win32.ActiveCfg = Release|Win32 + {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Release|Win32.Build.0 = Release|Win32 + {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Release|x64.ActiveCfg = Release|x64 + {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Release|x64.Build.0 = Release|x64 + {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Debug|Win32.ActiveCfg = Debug|Win32 + {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Debug|Win32.Build.0 = Debug|Win32 + {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Debug|x64.ActiveCfg = Debug|x64 + {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Debug|x64.Build.0 = Debug|x64 + {8D612734-FAA5-4B8A-804F-4DEA2367D495}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 + {8D612734-FAA5-4B8A-804F-4DEA2367D495}.DebugFast|Win32.Build.0 = DebugFast|Win32 + {8D612734-FAA5-4B8A-804F-4DEA2367D495}.DebugFast|x64.ActiveCfg = DebugFast|x64 + {8D612734-FAA5-4B8A-804F-4DEA2367D495}.DebugFast|x64.Build.0 = DebugFast|x64 + {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release|Win32.ActiveCfg = Release|Win32 + {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release|Win32.Build.0 = Release|Win32 + {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release|x64.ActiveCfg = Release|x64 + {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release|x64.Build.0 = Release|x64 + {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.Debug|Win32.ActiveCfg = Debug|Win32 + {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.Debug|Win32.Build.0 = Debug|Win32 + {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.Debug|x64.ActiveCfg = Debug|x64 + {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.Debug|x64.Build.0 = Debug|x64 + {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 + {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.DebugFast|Win32.Build.0 = DebugFast|Win32 + {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.DebugFast|x64.ActiveCfg = DebugFast|x64 + {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.DebugFast|x64.Build.0 = DebugFast|x64 + {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.Release|Win32.ActiveCfg = Release|Win32 + {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.Release|Win32.Build.0 = Release|Win32 + {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.Release|x64.ActiveCfg = Release|x64 + {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.Release|x64.Build.0 = Release|x64 + {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.Debug|Win32.ActiveCfg = Debug|Win32 + {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.Debug|Win32.Build.0 = Debug|Win32 + {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.Debug|x64.ActiveCfg = Debug|x64 + {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.Debug|x64.Build.0 = Debug|x64 + {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 + {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.DebugFast|Win32.Build.0 = DebugFast|Win32 + {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.DebugFast|x64.ActiveCfg = DebugFast|x64 + {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.DebugFast|x64.Build.0 = DebugFast|x64 + {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.Release|Win32.ActiveCfg = Release|Win32 + {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.Release|Win32.Build.0 = Release|Win32 + {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.Release|x64.ActiveCfg = Release|x64 + {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.Release|x64.Build.0 = Release|x64 + {3D8156A9-64D1-4C8E-ADBE-1B319030E4A4}.Debug|Win32.ActiveCfg = Debug|Win32 + {3D8156A9-64D1-4C8E-ADBE-1B319030E4A4}.Debug|Win32.Build.0 = Debug|Win32 + {3D8156A9-64D1-4C8E-ADBE-1B319030E4A4}.Debug|x64.ActiveCfg = Debug|x64 + {3D8156A9-64D1-4C8E-ADBE-1B319030E4A4}.Debug|x64.Build.0 = Debug|x64 + {3D8156A9-64D1-4C8E-ADBE-1B319030E4A4}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 + {3D8156A9-64D1-4C8E-ADBE-1B319030E4A4}.DebugFast|Win32.Build.0 = DebugFast|Win32 + {3D8156A9-64D1-4C8E-ADBE-1B319030E4A4}.DebugFast|x64.ActiveCfg = DebugFast|x64 + {3D8156A9-64D1-4C8E-ADBE-1B319030E4A4}.DebugFast|x64.Build.0 = DebugFast|x64 + {3D8156A9-64D1-4C8E-ADBE-1B319030E4A4}.Release|Win32.ActiveCfg = Release|Win32 + {3D8156A9-64D1-4C8E-ADBE-1B319030E4A4}.Release|Win32.Build.0 = Release|Win32 + {3D8156A9-64D1-4C8E-ADBE-1B319030E4A4}.Release|x64.ActiveCfg = Release|x64 + {3D8156A9-64D1-4C8E-ADBE-1B319030E4A4}.Release|x64.Build.0 = Release|x64 + {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED}.Debug|Win32.ActiveCfg = Debug|Win32 + {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED}.Debug|Win32.Build.0 = Debug|Win32 + {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED}.Debug|x64.ActiveCfg = Debug|x64 + {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED}.Debug|x64.Build.0 = Debug|x64 + {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 + {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED}.DebugFast|Win32.Build.0 = DebugFast|Win32 + {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED}.DebugFast|x64.ActiveCfg = DebugFast|x64 + {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED}.DebugFast|x64.Build.0 = DebugFast|x64 + {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED}.Release|Win32.ActiveCfg = Release|Win32 + {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED}.Release|Win32.Build.0 = Release|Win32 + {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED}.Release|x64.ActiveCfg = Release|x64 + {838A89A3-3AA0-4A45-ACBE-3D1E0980C2ED}.Release|x64.Build.0 = Release|x64 + {1970D175-3DE8-4738-942A-4D98D1CDBF64}.Debug|Win32.ActiveCfg = Debug|Win32 + {1970D175-3DE8-4738-942A-4D98D1CDBF64}.Debug|Win32.Build.0 = Debug|Win32 + {1970D175-3DE8-4738-942A-4D98D1CDBF64}.Debug|x64.ActiveCfg = Debug|x64 + {1970D175-3DE8-4738-942A-4D98D1CDBF64}.Debug|x64.Build.0 = Debug|x64 + {1970D175-3DE8-4738-942A-4D98D1CDBF64}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 + {1970D175-3DE8-4738-942A-4D98D1CDBF64}.DebugFast|Win32.Build.0 = DebugFast|Win32 + {1970D175-3DE8-4738-942A-4D98D1CDBF64}.DebugFast|x64.ActiveCfg = DebugFast|x64 + {1970D175-3DE8-4738-942A-4D98D1CDBF64}.DebugFast|x64.Build.0 = DebugFast|x64 + {1970D175-3DE8-4738-942A-4D98D1CDBF64}.Release|Win32.ActiveCfg = Release|Win32 + {1970D175-3DE8-4738-942A-4D98D1CDBF64}.Release|x64.ActiveCfg = Release|x64 + {1970D175-3DE8-4738-942A-4D98D1CDBF64}.Release|x64.Build.0 = Release|x64 + {3877AA3E-9CC0-4ADF-8E71-272EE4443478}.Debug|Win32.ActiveCfg = Wii|Win32 + {3877AA3E-9CC0-4ADF-8E71-272EE4443478}.Debug|x64.ActiveCfg = Wii|x64 + {3877AA3E-9CC0-4ADF-8E71-272EE4443478}.DebugFast|Win32.ActiveCfg = Wii|Win32 + {3877AA3E-9CC0-4ADF-8E71-272EE4443478}.DebugFast|x64.ActiveCfg = Wii|x64 + {3877AA3E-9CC0-4ADF-8E71-272EE4443478}.Release|Win32.ActiveCfg = Wii|Win32 + {3877AA3E-9CC0-4ADF-8E71-272EE4443478}.Release|x64.ActiveCfg = Wii|x64 + {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.Debug|Win32.ActiveCfg = Debug|Win32 + {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.Debug|Win32.Build.0 = Debug|Win32 + {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.Debug|x64.ActiveCfg = Debug|x64 + {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.Debug|x64.Build.0 = Debug|x64 + {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.DebugFast|Win32.ActiveCfg = Release|Win32 + {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.DebugFast|Win32.Build.0 = Release|Win32 + {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.DebugFast|x64.ActiveCfg = Release|x64 + {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.DebugFast|x64.Build.0 = Release|x64 + {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.Release|Win32.ActiveCfg = Release|Win32 + {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.Release|Win32.Build.0 = Release|Win32 + {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.Release|x64.ActiveCfg = Release|x64 + {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.Release|x64.Build.0 = Release|x64 + {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.Debug|Win32.ActiveCfg = Debug|Win32 + {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.Debug|Win32.Build.0 = Debug|Win32 + {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.Debug|x64.ActiveCfg = Debug|x64 + {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.Debug|x64.Build.0 = Debug|x64 + {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.DebugFast|Win32.ActiveCfg = Release|Win32 + {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.DebugFast|Win32.Build.0 = Release|Win32 + {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.DebugFast|x64.ActiveCfg = Release|x64 + {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.DebugFast|x64.Build.0 = Release|x64 + {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.Release|Win32.ActiveCfg = Release|Win32 + {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.Release|Win32.Build.0 = Release|Win32 + {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.Release|x64.ActiveCfg = Release|x64 + {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.Release|x64.Build.0 = Release|x64 + {40C636FA-B5BF-4D67-ABC8-376B524A7551}.Debug|Win32.ActiveCfg = Debug|Win32 + {40C636FA-B5BF-4D67-ABC8-376B524A7551}.Debug|x64.ActiveCfg = Debug|x64 + {40C636FA-B5BF-4D67-ABC8-376B524A7551}.DebugFast|Win32.ActiveCfg = Release|Win32 + {40C636FA-B5BF-4D67-ABC8-376B524A7551}.DebugFast|Win32.Build.0 = Release|Win32 + {40C636FA-B5BF-4D67-ABC8-376B524A7551}.DebugFast|x64.ActiveCfg = Release|x64 + {40C636FA-B5BF-4D67-ABC8-376B524A7551}.DebugFast|x64.Build.0 = Release|x64 + {40C636FA-B5BF-4D67-ABC8-376B524A7551}.Release|Win32.ActiveCfg = Release|Win32 + {40C636FA-B5BF-4D67-ABC8-376B524A7551}.Release|x64.ActiveCfg = Release|x64 + {40C636FA-B5BF-4D67-ABC8-376B524A7551}.Release|x64.Build.0 = Release|x64 + {F81AE75C-3D17-4D8C-A201-82FA5351C123}.Debug|Win32.ActiveCfg = Debug|Win32 + {F81AE75C-3D17-4D8C-A201-82FA5351C123}.Debug|Win32.Build.0 = Debug|Win32 + {F81AE75C-3D17-4D8C-A201-82FA5351C123}.Debug|x64.ActiveCfg = Debug|x64 + {F81AE75C-3D17-4D8C-A201-82FA5351C123}.Debug|x64.Build.0 = Debug|x64 + {F81AE75C-3D17-4D8C-A201-82FA5351C123}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 + {F81AE75C-3D17-4D8C-A201-82FA5351C123}.DebugFast|Win32.Build.0 = DebugFast|Win32 + {F81AE75C-3D17-4D8C-A201-82FA5351C123}.DebugFast|x64.ActiveCfg = DebugFast|x64 + {F81AE75C-3D17-4D8C-A201-82FA5351C123}.DebugFast|x64.Build.0 = DebugFast|x64 + {F81AE75C-3D17-4D8C-A201-82FA5351C123}.Release|Win32.ActiveCfg = Release|Win32 + {F81AE75C-3D17-4D8C-A201-82FA5351C123}.Release|Win32.Build.0 = Release|Win32 + {F81AE75C-3D17-4D8C-A201-82FA5351C123}.Release|x64.ActiveCfg = Release|x64 + {F81AE75C-3D17-4D8C-A201-82FA5351C123}.Release|x64.Build.0 = Release|x64 + {DA4CA030-A741-4DDC-9DA8-B2F351F0F158}.Debug|Win32.ActiveCfg = Debug|Win32 + {DA4CA030-A741-4DDC-9DA8-B2F351F0F158}.Debug|Win32.Build.0 = Debug|Win32 + {DA4CA030-A741-4DDC-9DA8-B2F351F0F158}.Debug|x64.ActiveCfg = Debug|x64 + {DA4CA030-A741-4DDC-9DA8-B2F351F0F158}.Debug|x64.Build.0 = Debug|x64 + {DA4CA030-A741-4DDC-9DA8-B2F351F0F158}.DebugFast|Win32.ActiveCfg = Release|Win32 + {DA4CA030-A741-4DDC-9DA8-B2F351F0F158}.DebugFast|Win32.Build.0 = Release|Win32 + {DA4CA030-A741-4DDC-9DA8-B2F351F0F158}.DebugFast|x64.ActiveCfg = Release|x64 + {DA4CA030-A741-4DDC-9DA8-B2F351F0F158}.DebugFast|x64.Build.0 = Release|x64 + {DA4CA030-A741-4DDC-9DA8-B2F351F0F158}.Release|Win32.ActiveCfg = Release|Win32 + {DA4CA030-A741-4DDC-9DA8-B2F351F0F158}.Release|Win32.Build.0 = Release|Win32 + {DA4CA030-A741-4DDC-9DA8-B2F351F0F158}.Release|x64.ActiveCfg = Release|x64 + {DA4CA030-A741-4DDC-9DA8-B2F351F0F158}.Release|x64.Build.0 = Release|x64 + {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug|Win32.ActiveCfg = Debug|Win32 + {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug|Win32.Build.0 = Debug|Win32 + {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug|x64.ActiveCfg = Debug|x64 + {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug|x64.Build.0 = Debug|x64 + {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.DebugFast|Win32.ActiveCfg = Release|Win32 + {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.DebugFast|Win32.Build.0 = Release|Win32 + {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.DebugFast|x64.ActiveCfg = Release|x64 + {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.DebugFast|x64.Build.0 = Release|x64 + {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release|Win32.ActiveCfg = Release|Win32 + {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release|Win32.Build.0 = Release|Win32 + {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release|x64.ActiveCfg = Release|x64 + {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release|x64.Build.0 = Release|x64 + {05C75041-D67D-4903-A362-8395A7B35C75}.Debug|Win32.ActiveCfg = Debug|Win32 + {05C75041-D67D-4903-A362-8395A7B35C75}.Debug|Win32.Build.0 = Debug|Win32 + {05C75041-D67D-4903-A362-8395A7B35C75}.Debug|x64.ActiveCfg = Debug|x64 + {05C75041-D67D-4903-A362-8395A7B35C75}.Debug|x64.Build.0 = Debug|x64 + {05C75041-D67D-4903-A362-8395A7B35C75}.DebugFast|Win32.ActiveCfg = Release|Win32 + {05C75041-D67D-4903-A362-8395A7B35C75}.DebugFast|Win32.Build.0 = Release|Win32 + {05C75041-D67D-4903-A362-8395A7B35C75}.DebugFast|x64.ActiveCfg = Release|x64 + {05C75041-D67D-4903-A362-8395A7B35C75}.DebugFast|x64.Build.0 = Release|x64 + {05C75041-D67D-4903-A362-8395A7B35C75}.Release|Win32.ActiveCfg = Release|Win32 + {05C75041-D67D-4903-A362-8395A7B35C75}.Release|Win32.Build.0 = Release|Win32 + {05C75041-D67D-4903-A362-8395A7B35C75}.Release|x64.ActiveCfg = Release|x64 + {05C75041-D67D-4903-A362-8395A7B35C75}.Release|x64.Build.0 = Release|x64 + {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Debug|Win32.ActiveCfg = Debug|Win32 + {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Debug|Win32.Build.0 = Debug|Win32 + {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Debug|x64.ActiveCfg = Debug|x64 + {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Debug|x64.Build.0 = Debug|x64 + {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.DebugFast|Win32.ActiveCfg = Release|Win32 + {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.DebugFast|Win32.Build.0 = Release|Win32 + {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.DebugFast|x64.ActiveCfg = Release|x64 + {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.DebugFast|x64.Build.0 = Release|x64 + {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Release|Win32.ActiveCfg = Release|Win32 + {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Release|Win32.Build.0 = Release|Win32 + {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Release|x64.ActiveCfg = Release|x64 + {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Release|x64.Build.0 = Release|x64 + {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.Debug|Win32.ActiveCfg = Debug|Win32 + {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.Debug|Win32.Build.0 = Debug|Win32 + {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.Debug|x64.ActiveCfg = Debug|x64 + {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.Debug|x64.Build.0 = Debug|x64 + {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.DebugFast|Win32.ActiveCfg = Release|Win32 + {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.DebugFast|Win32.Build.0 = Release|Win32 + {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.DebugFast|x64.ActiveCfg = Release|x64 + {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.DebugFast|x64.Build.0 = Release|x64 + {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.Release|Win32.ActiveCfg = Release|Win32 + {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.Release|Win32.Build.0 = Release|Win32 + {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.Release|x64.ActiveCfg = Release|x64 + {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.Release|x64.Build.0 = Release|x64 + {66A4E7BD-E2E8-4373-9B75-8750EB5AE683}.Debug|Win32.ActiveCfg = Debug|Win32 + {66A4E7BD-E2E8-4373-9B75-8750EB5AE683}.Debug|Win32.Build.0 = Debug|Win32 + {66A4E7BD-E2E8-4373-9B75-8750EB5AE683}.Debug|x64.ActiveCfg = Debug|x64 + {66A4E7BD-E2E8-4373-9B75-8750EB5AE683}.Debug|x64.Build.0 = Debug|x64 + {66A4E7BD-E2E8-4373-9B75-8750EB5AE683}.DebugFast|Win32.ActiveCfg = Release|Win32 + {66A4E7BD-E2E8-4373-9B75-8750EB5AE683}.DebugFast|Win32.Build.0 = Release|Win32 + {66A4E7BD-E2E8-4373-9B75-8750EB5AE683}.DebugFast|x64.ActiveCfg = Release|x64 + {66A4E7BD-E2E8-4373-9B75-8750EB5AE683}.DebugFast|x64.Build.0 = Release|x64 + {66A4E7BD-E2E8-4373-9B75-8750EB5AE683}.Release|Win32.ActiveCfg = Release|Win32 + {66A4E7BD-E2E8-4373-9B75-8750EB5AE683}.Release|Win32.Build.0 = Release|Win32 + {66A4E7BD-E2E8-4373-9B75-8750EB5AE683}.Release|x64.ActiveCfg = Release|x64 + {66A4E7BD-E2E8-4373-9B75-8750EB5AE683}.Release|x64.Build.0 = Release|x64 + {9FF603F8-B3BB-4144-9688-B2B802FA0F16}.Debug|Win32.ActiveCfg = Debug|Win32 + {9FF603F8-B3BB-4144-9688-B2B802FA0F16}.Debug|Win32.Build.0 = Debug|Win32 + {9FF603F8-B3BB-4144-9688-B2B802FA0F16}.Debug|x64.ActiveCfg = Debug|x64 + {9FF603F8-B3BB-4144-9688-B2B802FA0F16}.Debug|x64.Build.0 = Debug|x64 + {9FF603F8-B3BB-4144-9688-B2B802FA0F16}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 + {9FF603F8-B3BB-4144-9688-B2B802FA0F16}.DebugFast|Win32.Build.0 = DebugFast|Win32 + {9FF603F8-B3BB-4144-9688-B2B802FA0F16}.DebugFast|x64.ActiveCfg = DebugFast|x64 + {9FF603F8-B3BB-4144-9688-B2B802FA0F16}.DebugFast|x64.Build.0 = DebugFast|x64 + {9FF603F8-B3BB-4144-9688-B2B802FA0F16}.Release|Win32.ActiveCfg = Release|Win32 + {9FF603F8-B3BB-4144-9688-B2B802FA0F16}.Release|Win32.Build.0 = Release|Win32 + {9FF603F8-B3BB-4144-9688-B2B802FA0F16}.Release|x64.ActiveCfg = Release|x64 + {9FF603F8-B3BB-4144-9688-B2B802FA0F16}.Release|x64.Build.0 = Release|x64 + {1C3A7A91-A97F-4C7C-B45D-26F2242904D7}.Debug|Win32.ActiveCfg = Debug|Win32 + {1C3A7A91-A97F-4C7C-B45D-26F2242904D7}.Debug|Win32.Build.0 = Debug|Win32 + {1C3A7A91-A97F-4C7C-B45D-26F2242904D7}.Debug|x64.ActiveCfg = Debug|x64 + {1C3A7A91-A97F-4C7C-B45D-26F2242904D7}.Debug|x64.Build.0 = Debug|x64 + {1C3A7A91-A97F-4C7C-B45D-26F2242904D7}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 + {1C3A7A91-A97F-4C7C-B45D-26F2242904D7}.DebugFast|Win32.Build.0 = DebugFast|Win32 + {1C3A7A91-A97F-4C7C-B45D-26F2242904D7}.DebugFast|x64.ActiveCfg = DebugFast|x64 + {1C3A7A91-A97F-4C7C-B45D-26F2242904D7}.DebugFast|x64.Build.0 = DebugFast|x64 + {1C3A7A91-A97F-4C7C-B45D-26F2242904D7}.Release|Win32.ActiveCfg = Release|Win32 + {1C3A7A91-A97F-4C7C-B45D-26F2242904D7}.Release|Win32.Build.0 = Release|Win32 + {1C3A7A91-A97F-4C7C-B45D-26F2242904D7}.Release|x64.ActiveCfg = Release|x64 + {1C3A7A91-A97F-4C7C-B45D-26F2242904D7}.Release|x64.Build.0 = Release|x64 + {BB6CE47B-C676-44BB-AE93-2CF59B8C8BD4}.Debug|Win32.ActiveCfg = Debug|Win32 + {BB6CE47B-C676-44BB-AE93-2CF59B8C8BD4}.Debug|Win32.Build.0 = Debug|Win32 + {BB6CE47B-C676-44BB-AE93-2CF59B8C8BD4}.Debug|x64.ActiveCfg = Debug|x64 + {BB6CE47B-C676-44BB-AE93-2CF59B8C8BD4}.Debug|x64.Build.0 = Debug|x64 + {BB6CE47B-C676-44BB-AE93-2CF59B8C8BD4}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 + {BB6CE47B-C676-44BB-AE93-2CF59B8C8BD4}.DebugFast|Win32.Build.0 = DebugFast|Win32 + {BB6CE47B-C676-44BB-AE93-2CF59B8C8BD4}.DebugFast|x64.ActiveCfg = DebugFast|x64 + {BB6CE47B-C676-44BB-AE93-2CF59B8C8BD4}.DebugFast|x64.Build.0 = DebugFast|x64 + {BB6CE47B-C676-44BB-AE93-2CF59B8C8BD4}.Release|Win32.ActiveCfg = Release|Win32 + {BB6CE47B-C676-44BB-AE93-2CF59B8C8BD4}.Release|Win32.Build.0 = Release|Win32 + {BB6CE47B-C676-44BB-AE93-2CF59B8C8BD4}.Release|x64.ActiveCfg = Release|x64 + {BB6CE47B-C676-44BB-AE93-2CF59B8C8BD4}.Release|x64.Build.0 = Release|x64 + {660BB3F7-ED8F-4027-A460-8E4EDA8189BE}.Debug|Win32.ActiveCfg = Debug|Win32 + {660BB3F7-ED8F-4027-A460-8E4EDA8189BE}.Debug|Win32.Build.0 = Debug|Win32 + {660BB3F7-ED8F-4027-A460-8E4EDA8189BE}.Debug|x64.ActiveCfg = Debug|x64 + {660BB3F7-ED8F-4027-A460-8E4EDA8189BE}.Debug|x64.Build.0 = Debug|x64 + {660BB3F7-ED8F-4027-A460-8E4EDA8189BE}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 + {660BB3F7-ED8F-4027-A460-8E4EDA8189BE}.DebugFast|Win32.Build.0 = DebugFast|Win32 + {660BB3F7-ED8F-4027-A460-8E4EDA8189BE}.DebugFast|x64.ActiveCfg = DebugFast|x64 + {660BB3F7-ED8F-4027-A460-8E4EDA8189BE}.DebugFast|x64.Build.0 = DebugFast|x64 + {660BB3F7-ED8F-4027-A460-8E4EDA8189BE}.Release|Win32.ActiveCfg = Release|Win32 + {660BB3F7-ED8F-4027-A460-8E4EDA8189BE}.Release|Win32.Build.0 = Release|Win32 + {660BB3F7-ED8F-4027-A460-8E4EDA8189BE}.Release|x64.ActiveCfg = Release|x64 + {660BB3F7-ED8F-4027-A460-8E4EDA8189BE}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + AMDCaProjectFile = D:\Dev\Dolphin\trunk\Source\CodeAnalyst\Dolphin.caw + EndGlobalSection + GlobalSection(DPCodeReviewSolutionGUID) = preSolution + DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} + EndGlobalSection +EndGlobal diff --git a/Source/Dolphin.xcodeproj/project.pbxproj b/Source/Dolphin.xcodeproj/project.pbxproj index e52f8f915b..547a5a9bfa 100644 --- a/Source/Dolphin.xcodeproj/project.pbxproj +++ b/Source/Dolphin.xcodeproj/project.pbxproj @@ -163,7 +163,6 @@ 292AC27811838FD700B8790B /* HLE_Misc.h in Headers */ = {isa = PBXBuildFile; fileRef = 292ABE2011838FD500B8790B /* HLE_Misc.h */; }; 292AC27911838FD700B8790B /* HLE_OS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 292ABE2111838FD500B8790B /* HLE_OS.cpp */; }; 292AC27A11838FD700B8790B /* HLE_OS.h in Headers */ = {isa = PBXBuildFile; fileRef = 292ABE2211838FD500B8790B /* HLE_OS.h */; }; - 292AC27B11838FD700B8790B /* Host.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 292ABE2311838FD500B8790B /* Host.cpp */; }; 292AC27C11838FD700B8790B /* Host.h in Headers */ = {isa = PBXBuildFile; fileRef = 292ABE2411838FD500B8790B /* Host.h */; }; 292AC27D11838FD700B8790B /* AudioInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 292ABE2611838FD500B8790B /* AudioInterface.cpp */; }; 292AC27E11838FD700B8790B /* AudioInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 292ABE2711838FD500B8790B /* AudioInterface.h */; }; @@ -1434,7 +1433,6 @@ 292ABE2011838FD500B8790B /* HLE_Misc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HLE_Misc.h; sourceTree = ""; }; 292ABE2111838FD500B8790B /* HLE_OS.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HLE_OS.cpp; sourceTree = ""; }; 292ABE2211838FD500B8790B /* HLE_OS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HLE_OS.h; sourceTree = ""; }; - 292ABE2311838FD500B8790B /* Host.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Host.cpp; sourceTree = ""; }; 292ABE2411838FD500B8790B /* Host.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Host.h; sourceTree = ""; }; 292ABE2611838FD500B8790B /* AudioInterface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AudioInterface.cpp; sourceTree = ""; }; 292ABE2711838FD500B8790B /* AudioInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioInterface.h; sourceTree = ""; }; @@ -2841,7 +2839,6 @@ 292ABE1311838FD500B8790B /* Debugger */, 292ABE1B11838FD500B8790B /* DolLoader.h */, 292ABE1C11838FD500B8790B /* HLE */, - 292ABE2311838FD500B8790B /* Host.cpp */, 292ABE2411838FD500B8790B /* Host.h */, 292ABE2511838FD500B8790B /* HW */, 292ABE6511838FD500B8790B /* IPC_HLE */, @@ -5488,7 +5485,6 @@ 292AC27511838FD700B8790B /* HLE.cpp in Sources */, 292AC27711838FD700B8790B /* HLE_Misc.cpp in Sources */, 292AC27911838FD700B8790B /* HLE_OS.cpp in Sources */, - 292AC27B11838FD700B8790B /* Host.cpp in Sources */, 292AC27D11838FD700B8790B /* AudioInterface.cpp in Sources */, 292AC27F11838FD700B8790B /* TAP_Apple.cpp in Sources */, 292AC28011838FD700B8790B /* TAP_Unix.cpp in Sources */, diff --git a/Source/Plugins/InputPluginCommon/InputPluginCommon.vcproj b/Source/Plugins/InputPluginCommon/InputPluginCommon.vcproj index 33827bd5ab..d7df1fea37 100644 --- a/Source/Plugins/InputPluginCommon/InputPluginCommon.vcproj +++ b/Source/Plugins/InputPluginCommon/InputPluginCommon.vcproj @@ -1,450 +1,450 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Plugins/Plugin_DSP_HLE/Plugin_DSP_HLE.vcproj b/Source/Plugins/Plugin_DSP_HLE/Plugin_DSP_HLE.vcproj index c374c9053a..7b787de81f 100644 --- a/Source/Plugins/Plugin_DSP_HLE/Plugin_DSP_HLE.vcproj +++ b/Source/Plugins/Plugin_DSP_HLE/Plugin_DSP_HLE.vcproj @@ -1,820 +1,820 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Plugins/Plugin_DSP_LLE/Plugin_DSP_LLE.vcproj b/Source/Plugins/Plugin_DSP_LLE/Plugin_DSP_LLE.vcproj index bb62d19646..0a99d399f1 100644 --- a/Source/Plugins/Plugin_DSP_LLE/Plugin_DSP_LLE.vcproj +++ b/Source/Plugins/Plugin_DSP_LLE/Plugin_DSP_LLE.vcproj @@ -1,873 +1,873 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Plugins/Plugin_GCPadNew/Plugin_GCPadNew.vcproj b/Source/Plugins/Plugin_GCPadNew/Plugin_GCPadNew.vcproj index f748bbcc6a..e32ef83007 100644 --- a/Source/Plugins/Plugin_GCPadNew/Plugin_GCPadNew.vcproj +++ b/Source/Plugins/Plugin_GCPadNew/Plugin_GCPadNew.vcproj @@ -1,532 +1,532 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Plugins/Plugin_VideoDX9/Plugin_VideoDX9.vcproj b/Source/Plugins/Plugin_VideoDX9/Plugin_VideoDX9.vcproj index 72df0c1fb2..f045cd313b 100644 --- a/Source/Plugins/Plugin_VideoDX9/Plugin_VideoDX9.vcproj +++ b/Source/Plugins/Plugin_VideoDX9/Plugin_VideoDX9.vcproj @@ -1,1424 +1,1424 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcproj b/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcproj index dcfd97d0bd..1c8110ba4b 100644 --- a/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcproj +++ b/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcproj @@ -1,1007 +1,1007 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Plugins/Plugin_VideoSoftware/Plugin_VideoSoftware.vcproj b/Source/Plugins/Plugin_VideoSoftware/Plugin_VideoSoftware.vcproj index be80cc2c52..d02a9bb20f 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Plugin_VideoSoftware.vcproj +++ b/Source/Plugins/Plugin_VideoSoftware/Plugin_VideoSoftware.vcproj @@ -1,680 +1,680 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Plugins/Plugin_Wiimote/Plugin_Wiimote.vcproj b/Source/Plugins/Plugin_Wiimote/Plugin_Wiimote.vcproj index 738d574c03..4aed745fd9 100644 --- a/Source/Plugins/Plugin_Wiimote/Plugin_Wiimote.vcproj +++ b/Source/Plugins/Plugin_Wiimote/Plugin_Wiimote.vcproj @@ -1,687 +1,687 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Plugins/Plugin_Wiimote/Src/Config.cpp b/Source/Plugins/Plugin_Wiimote/Src/Config.cpp index 762b82db9c..16da0c008d 100644 --- a/Source/Plugins/Plugin_Wiimote/Src/Config.cpp +++ b/Source/Plugins/Plugin_Wiimote/Src/Config.cpp @@ -369,7 +369,7 @@ void Config::LoadIR() int defaultLeft, defaultTop, defaultWidth, defaultHeight; sprintf(TmpSection, "%s", g_ISOId ? Hex2Ascii(g_ISOId).c_str() : "Default"); - iniFile.Load((std::string(File::GetUserPath(D_CONFIG_IDX)) + "IR Pointer.ini").c_str()); + iniFile.Load((std::string(File::GetUserPath(D_CONFIG_IDX)) + "IrPointer.ini").c_str()); //Load defaults first... iniFile.Get("Default", "IRLeft", &defaultLeft, LEFT); iniFile.Get("Default", "IRTop", &defaultTop, TOP); @@ -461,7 +461,7 @@ void Config::Save() iniFile.Save((std::string(File::GetUserPath(D_CONFIG_IDX)) + "Wiimote.ini").c_str()); // Save the IR cursor settings if it's avaliable for the GameId, if not save the default settings - iniFile.Load((std::string(File::GetUserPath(D_CONFIG_IDX)) + "IR Pointer.ini").c_str()); + iniFile.Load((std::string(File::GetUserPath(D_CONFIG_IDX)) + "IrPointer.ini").c_str()); char TmpSection[32]; sprintf(TmpSection, "%s", g_ISOId ? Hex2Ascii(g_ISOId).c_str() : "Default"); iniFile.Set(TmpSection, "IRLeft", iIRLeft); @@ -469,7 +469,7 @@ void Config::Save() iniFile.Set(TmpSection, "IRWidth", iIRWidth); iniFile.Set(TmpSection, "IRHeight", iIRHeight); iniFile.Set(TmpSection, "IRLevel", iIRLevel); - iniFile.Save((std::string(File::GetUserPath(D_CONFIG_IDX)) + "IR Pointer.ini").c_str()); + iniFile.Save((std::string(File::GetUserPath(D_CONFIG_IDX)) + "IrPointer.ini").c_str()); //Save any options that need to be accessed in Dolphin iniFile.Load((std::string(File::GetUserPath(D_CONFIG_IDX)) + "Dolphin.ini").c_str()); diff --git a/Source/Plugins/Plugin_Wiimote/Src/Rumble.cpp b/Source/Plugins/Plugin_Wiimote/Src/Rumble.cpp index 48158f7738..c3a2c603ae 100644 --- a/Source/Plugins/Plugin_Wiimote/Src/Rumble.cpp +++ b/Source/Plugins/Plugin_Wiimote/Src/Rumble.cpp @@ -1,405 +1,405 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ -// - -#include "EmuDefinitions.h" -#ifdef _WIN32 -#include "XInput.h" -#endif - -namespace WiiMoteEmu -{ - -// SDL Haptic fails on windows, it just doesn't work (even the sample doesn't work) -// So until i can make it work, this is all disabled >:( -#if SDL_VERSION_ATLEAST(1, 3, 0) && !defined(_WIN32) && !defined(__APPLE__) - #define SDL_RUMBLE -#else - #ifdef _WIN32 - #define RUMBLE_HACK - #define DIRECTINPUT_VERSION 0x0800 - #define WIN32_LEAN_AND_MEAN - - #pragma comment(lib, "dxguid.lib") - #pragma comment(lib, "dinput8.lib") - #pragma comment(lib, "winmm.lib") - #include - #endif -#endif - - -#ifdef RUMBLE_HACK - -struct RUMBLE // GC Pad rumble DIDevice -{ - LPDIRECTINPUTDEVICE8 g_pDevice; // 4 pads objects - LPDIRECTINPUTEFFECT g_pEffect; - DWORD g_dwNumForceFeedbackAxis; - DIEFFECT eff; -}; - -#define SAFE_RELEASE(p) { if (p) { (p)->Release(); (p)=NULL; } } - -BOOL CALLBACK EnumFFDevicesCallback(const DIDEVICEINSTANCE* pInst, VOID* pContext); -BOOL CALLBACK EnumAxesCallback(const DIDEVICEOBJECTINSTANCE* pdidoi, VOID* pContext); -void SetDeviceForcesXY(int pad, int nXYForce); -HRESULT InitRumble(HWND hWnd); -void Rumble_DInput(int _ID, unsigned int _Strength); -void Rumble_XInput(int _ID, unsigned int _Strength); - - -LPDIRECTINPUT8 g_Rumble; // DInput Rumble object -RUMBLE pRumble[MAX_WIIMOTES]; - - - -//////////////////////////////////////////////////// -// Set PAD rumble. Explanation: Stop = 0, Rumble = 1 -void PAD_Rumble(u8 _numPAD, unsigned int _uType) -{ - if (WiiMapping[_numPAD].ID >= NumPads || !WiiMapping[_numPAD].Rumble) - return; - - unsigned int Strength = 0; - if (_uType == 1) - { - Strength = WiiMapping[_numPAD].RumbleStrength; - Strength = Strength > 100 ? 100 : Strength; - } - - if (WiiMapping[_numPAD].TriggerType == InputCommon::CTL_TRIGGER_XINPUT) - Rumble_XInput(WiiMapping[_numPAD].ID, Strength); - else - Rumble_DInput(WiiMapping[_numPAD].ID, Strength); -} - -//////////////////////////////////////////////////// -// Set rumble with XInput. -void Rumble_XInput(int _ID, unsigned int _Strength) -{ -#ifdef _WIN32 - XINPUT_VIBRATION vib; - vib.wLeftMotorSpeed = 0xFFFF / 100 * _Strength; - vib.wRightMotorSpeed = 0xFFFF / 100 * _Strength; - XInputSetState(_ID, &vib); -#endif -} - -//////////////////////////////////////////////////// -// Set rumble with DInput.¯¯¯¯¯¯¯¯¯¯¯¯ -void Rumble_DInput(int _ID, unsigned int _Strength) -{ - if (!g_Rumble) - { - // GetForegroundWindow() always sends the good HWND - if (FAILED(InitRumble(GetForegroundWindow()))) - PanicAlert("Could not initialize Rumble!"); - } - else - { - // Acquire gamepad - if (pRumble[_ID].g_pDevice != NULL) - pRumble[_ID].g_pDevice->Acquire(); - } - - SetDeviceForcesXY(_ID, _Strength * 100); -} - -HRESULT InitRumble(HWND hWnd) -{ - DIPROPDWORD dipdw; - HRESULT hr; - - // Register with the DirectInput subsystem and get a pointer to a IDirectInput interface we can use. - if (FAILED(hr = DirectInput8Create(GetModuleHandle(NULL), DIRECTINPUT_VERSION, IID_IDirectInput8, (VOID**)&g_Rumble, NULL))) - return hr; - - // Look for a device we can use - if (FAILED(hr = g_Rumble->EnumDevices( DI8DEVCLASS_GAMECTRL, EnumFFDevicesCallback, NULL, DIEDFL_ATTACHEDONLY | DIEDFL_FORCEFEEDBACK))) - return hr; - - for (int i = 0; i < MAX_WIIMOTES; i++) - { - if (NULL == pRumble[i].g_pDevice) - WiiMapping[i].Rumble = false; // Disable Rumble for this pad only. - else - { - pRumble[i].g_pDevice->SetDataFormat(&c_dfDIJoystick); - pRumble[i].g_pDevice->SetCooperativeLevel(hWnd, DISCL_EXCLUSIVE | DISCL_BACKGROUND); - // Request exclusive acces for both background and foreground. - - dipdw.diph.dwSize = sizeof(DIPROPDWORD); - dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER); - dipdw.diph.dwObj = 0; - dipdw.diph.dwHow = DIPH_DEVICE; - dipdw.dwData = FALSE; - - // if Force Feedback doesn't seem to work... - if (FAILED(pRumble[i].g_pDevice->EnumObjects(EnumAxesCallback, - (void*)&pRumble[i].g_dwNumForceFeedbackAxis, DIDFT_AXIS)) - || FAILED(pRumble[i].g_pDevice->SetProperty(DIPROP_AUTOCENTER, &dipdw.diph))) - { - PanicAlert("Device %d doesn't seem to work ! \nRumble for device %d is now Disabled !", i+1); - - WiiMapping[i].Rumble = false; // Disable Rumble for this pad - - continue; // Next pad - } - - if (pRumble[i].g_dwNumForceFeedbackAxis > 2) - pRumble[i].g_dwNumForceFeedbackAxis = 2; - - DWORD _rgdwAxes[2] = {DIJOFS_X, DIJOFS_Y}; - long rglDirection[2] = {0, 0}; - DICONSTANTFORCE cf = {0}; - - ZeroMemory(&pRumble[i].eff, sizeof(pRumble[i].eff)); - pRumble[i].eff.dwSize = sizeof(DIEFFECT); - pRumble[i].eff.dwFlags = DIEFF_CARTESIAN | DIEFF_OBJECTOFFSETS; - pRumble[i].eff.dwDuration = INFINITE; // fixed time may be safer (X * DI_SECONDS) - pRumble[i].eff.dwSamplePeriod = 0; - pRumble[i].eff.dwGain = DI_FFNOMINALMAX; - pRumble[i].eff.dwTriggerButton = DIEB_NOTRIGGER; - pRumble[i].eff.dwTriggerRepeatInterval = 0; - pRumble[i].eff.cAxes = pRumble[i].g_dwNumForceFeedbackAxis; - pRumble[i].eff.rgdwAxes = _rgdwAxes; - pRumble[i].eff.rglDirection = rglDirection; - pRumble[i].eff.lpEnvelope = 0; - pRumble[i].eff.cbTypeSpecificParams = sizeof( DICONSTANTFORCE ); - pRumble[i].eff.lpvTypeSpecificParams = &cf; - pRumble[i].eff.dwStartDelay = 0; - - // Create the prepared effect - if (FAILED(hr = pRumble[i].g_pDevice->CreateEffect(GUID_ConstantForce, &pRumble[i].eff, &pRumble[i].g_pEffect, NULL))) - continue; - - if (pRumble[i].g_pEffect == NULL) - continue; - } - } - - return S_OK; -} - -void SetDeviceForcesXY(int npad, int nXYForce) -{ - // Security check - if (pRumble[npad].g_pDevice == NULL) - return; - - // If nXYForce is null, there's no point to create the effect - // Just stop the force feedback - if (nXYForce == 0) { - pRumble[npad].g_pEffect->Stop(); - return; - } - - long rglDirection[2] = {0}; - DICONSTANTFORCE cf; - - // If only one force feedback axis, then apply only one direction and keep the direction at zero - if (pRumble[npad].g_dwNumForceFeedbackAxis == 1) - { - rglDirection[0] = 0; - cf.lMagnitude = nXYForce; // max should be 10000 - } - // If two force feedback axis, then apply magnitude from both directions - else - { - rglDirection[0] = nXYForce; - rglDirection[1] = nXYForce; - cf.lMagnitude = static_cast(1.4142f*nXYForce); - } - - ZeroMemory(&pRumble[npad].eff, sizeof(pRumble[npad].eff)); - pRumble[npad].eff.dwSize = sizeof(DIEFFECT); - pRumble[npad].eff.dwFlags = DIEFF_CARTESIAN | DIEFF_OBJECTOFFSETS; - pRumble[npad].eff.cAxes = pRumble[npad].g_dwNumForceFeedbackAxis; - pRumble[npad].eff.rglDirection = rglDirection; - pRumble[npad].eff.lpEnvelope = 0; - pRumble[npad].eff.cbTypeSpecificParams = sizeof(DICONSTANTFORCE); - pRumble[npad].eff.lpvTypeSpecificParams = &cf; - pRumble[npad].eff.dwStartDelay = 0; - - // Now set the new parameters.. - pRumble[npad].g_pEffect->SetParameters(&pRumble[npad].eff, DIEP_DIRECTION | DIEP_TYPESPECIFICPARAMS | DIEP_START); - // ..And start the effect immediately. - if (pRumble[npad].g_pEffect != NULL) - pRumble[npad].g_pEffect->Start(1, 0); -} - -BOOL CALLBACK EnumFFDevicesCallback(const DIDEVICEINSTANCE* pInst, VOID* pContext) -{ - LPDIRECTINPUTDEVICE8 pDevice; - DIPROPDWORD dipdw; - HRESULT hr; - - int JoystickID; - - dipdw.diph.dwSize = sizeof(DIPROPDWORD); - dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER); - dipdw.diph.dwObj = 0; - dipdw.diph.dwHow = DIPH_DEVICE; - - g_Rumble->CreateDevice(pInst->guidInstance, &pDevice, NULL); // Create a DInput pad device - - if (SUCCEEDED(hr = pDevice->GetProperty(DIPROP_JOYSTICKID, &dipdw.diph))) // Get DInput Device ID - JoystickID = dipdw.dwData; - else - return DIENUM_CONTINUE; - - //PanicAlert("DInput ID : %d \nSDL ID (1-4) : %d / %d / %d / %d\n", JoystickID, WiiMapping[0].ID, WiiMapping[1].ID, WiiMapping[2].ID, WiiMapping[3].ID); - - for (int i=0; i<4; i++) - { - if (WiiMapping[i].ID == JoystickID) // if SDL ID = DInput ID -> we're dealing with the same device - { - // a DInput device is created even if rumble is disabled on startup - // this way, you can toggle the rumble setting while in game - pRumble[i].g_pDevice = pDevice; // everything looks good, save the DInput device - } - } - - return DIENUM_CONTINUE; -} - -BOOL CALLBACK EnumAxesCallback(const DIDEVICEOBJECTINSTANCE* pdidoi, VOID* pContext) -{ - DWORD* pdwNumForceFeedbackAxis = (DWORD*)pContext; // Enum Rumble Axis - if ((pdidoi->dwFlags & DIDOI_FFACTUATOR) != 0) - (*pdwNumForceFeedbackAxis)++; - - return DIENUM_CONTINUE; -} - -void PAD_RumbleClose() -{ - for (int i = 0; i < MAX_WIIMOTES; i++) - { - if (WiiMapping[i].ID < NumPads) - if (WiiMapping[i].TriggerType == InputCommon::CTL_TRIGGER_XINPUT) - { -#ifdef _WIN32 - // Kill Xpad rumble - XINPUT_VIBRATION vib; - vib.wLeftMotorSpeed = 0; - vib.wRightMotorSpeed = 0; - XInputSetState(WiiMapping[i].ID, &vib); -#endif - } - else - { - // It may look weird, but we don't free anything here, it was the cause of crashes - // on stop, and the DLL isn't unloaded anyway, so the pointers stay - // We just stop the rumble in case it's still playing an effect. - if (pRumble[WiiMapping[i].ID].g_pDevice && pRumble[WiiMapping[i].ID].g_pEffect) - pRumble[WiiMapping[i].ID].g_pEffect->Stop(); - } - } -} - -#else // Multiplatform SDL Rumble code - -#ifdef SDL_RUMBLE - -struct RUMBLE // GC Pad rumble DIDevice -{ - SDL_Haptic* g_pDevice; - SDL_HapticEffect g_pEffect; - int effect_id; -}; - -RUMBLE pRumble[4] = {0}; // 4 GC Rumble Pads -#endif - - -// Use PAD rumble -// -------------- -bool PAD_Init_Rumble(u8 _numPAD, SDL_Joystick *SDL_Device) -{ -#ifdef SDL_RUMBLE - if (SDL_Device == NULL) - return false; - - pRumble[_numPAD].g_pDevice = SDL_HapticOpenFromJoystick(SDL_Device); - - if (pRumble[_numPAD].g_pDevice == NULL) - return false; // Most likely joystick isn't haptic - - if (!(SDL_HapticQuery(pRumble[_numPAD].g_pDevice) & SDL_HAPTIC_CONSTANT)) - { - SDL_HapticClose(pRumble[_numPAD].g_pDevice); // No effect - pRumble[_numPAD].g_pDevice = 0; - WiiMapping[_numPAD].Rumble = false; - return false; - } - - // Set the strength of the rumble effect - int Strenght = 3276 * (pRumble[_numPAD].RumbleStrength); - Strenght = Strenght > 32767 ? 32767 : Strenght; - - // Create the effect - memset(&pRumble[_numPAD].g_pEffect, 0, sizeof(SDL_HapticEffect)); // 0 is safe default - pRumble[_numPAD].g_pEffect.type = SDL_HAPTIC_CONSTANT; - pRumble[_numPAD].g_pEffect.constant.direction.type = SDL_HAPTIC_POLAR; // Polar coordinates - pRumble[_numPAD].g_pEffect.constant.direction.dir[0] = 18000; // Force comes from south - pRumble[_numPAD].g_pEffect.constant.level = Strenght; - pRumble[_numPAD].g_pEffect.constant.length = 10000; // 10s long (should be INFINITE, but 10s is safer) - pRumble[_numPAD].g_pEffect.constant.attack_length = 0; // disable Fade in... - pRumble[_numPAD].g_pEffect.constant.fade_length = 0; // ...and out - - // Upload the effect - pRumble[_numPAD].effect_id = SDL_HapticNewEffect( pRumble[_numPAD].g_pDevice, &pRumble[_numPAD].g_pEffect ); -#endif - return true; -} - - -// Set PAD rumble. Explanation: Stop = 0, Rumble = 1 -// -------------- -void PAD_Rumble(u8 _numPAD, unsigned int _uType) -{ -#ifdef SDL_RUMBLE - if (WiiMapping[_numPAD].Rumble) // rumble activated - { - if (!pRumble[_numPAD].g_pDevice) - return; - - if (_uType == 1) - SDL_HapticRunEffect( pRumble[_numPAD].g_pDevice, pRumble[_numPAD].effect_id, 1 ); - else - SDL_HapticStopAll(pRumble[_numPAD].g_pDevice); - } -#endif -} - -void PAD_RumbleClose() -{ -#ifdef SDL_RUMBLE - for (int i=0; i<4; i++) // Free all pads - { - if (pRumble[i].g_pDevice) { - SDL_HapticClose( pRumble[i].g_pDevice ); - pRumble[i].g_pDevice = NULL; - } - } -#endif -} - -#endif // RUMBLE_HACK - -} // end of namespace +// Copyright (C) 2003 Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ +// + +#include "EmuDefinitions.h" +#ifdef _WIN32 +#include "XInput.h" +#endif + +namespace WiiMoteEmu +{ + +// SDL Haptic fails on windows, it just doesn't work (even the sample doesn't work) +// So until i can make it work, this is all disabled >:( +#if SDL_VERSION_ATLEAST(1, 3, 0) && !defined(_WIN32) && !defined(__APPLE__) + #define SDL_RUMBLE +#else + #ifdef _WIN32 + #define RUMBLE_HACK + #define DIRECTINPUT_VERSION 0x0800 + #define WIN32_LEAN_AND_MEAN + + #pragma comment(lib, "dxguid.lib") + #pragma comment(lib, "dinput8.lib") + #pragma comment(lib, "winmm.lib") + #include + #endif +#endif + + +#ifdef RUMBLE_HACK + +struct RUMBLE // GC Pad rumble DIDevice +{ + LPDIRECTINPUTDEVICE8 g_pDevice; // 4 pads objects + LPDIRECTINPUTEFFECT g_pEffect; + DWORD g_dwNumForceFeedbackAxis; + DIEFFECT eff; +}; + +#define SAFE_RELEASE(p) { if (p) { (p)->Release(); (p)=NULL; } } + +BOOL CALLBACK EnumFFDevicesCallback(const DIDEVICEINSTANCE* pInst, VOID* pContext); +BOOL CALLBACK EnumAxesCallback(const DIDEVICEOBJECTINSTANCE* pdidoi, VOID* pContext); +void SetDeviceForcesXY(int pad, int nXYForce); +HRESULT InitRumble(HWND hWnd); +void Rumble_DInput(int _ID, unsigned int _Strength); +void Rumble_XInput(int _ID, unsigned int _Strength); + + +LPDIRECTINPUT8 g_Rumble; // DInput Rumble object +RUMBLE pRumble[MAX_WIIMOTES]; + + + +//////////////////////////////////////////////////// +// Set PAD rumble. Explanation: Stop = 0, Rumble = 1 +void PAD_Rumble(u8 _numPAD, unsigned int _uType) +{ + if (WiiMapping[_numPAD].ID >= NumPads || !WiiMapping[_numPAD].Rumble) + return; + + unsigned int Strength = 0; + if (_uType == 1) + { + Strength = WiiMapping[_numPAD].RumbleStrength; + Strength = Strength > 100 ? 100 : Strength; + } + + if (WiiMapping[_numPAD].TriggerType == InputCommon::CTL_TRIGGER_XINPUT) + Rumble_XInput(WiiMapping[_numPAD].ID, Strength); + else + Rumble_DInput(WiiMapping[_numPAD].ID, Strength); +} + +//////////////////////////////////////////////////// +// Set rumble with XInput. +void Rumble_XInput(int _ID, unsigned int _Strength) +{ +#ifdef _WIN32 + XINPUT_VIBRATION vib; + vib.wLeftMotorSpeed = 0xFFFF / 100 * _Strength; + vib.wRightMotorSpeed = 0xFFFF / 100 * _Strength; + XInputSetState(_ID, &vib); +#endif +} + +//////////////////////////////////////////////////// +// Set rumble with DInput.¯¯¯¯¯¯¯¯¯¯¯¯ +void Rumble_DInput(int _ID, unsigned int _Strength) +{ + if (!g_Rumble) + { + // GetForegroundWindow() always sends the good HWND + if (FAILED(InitRumble(GetForegroundWindow()))) + PanicAlert("Could not initialize Rumble!"); + } + else + { + // Acquire gamepad + if (pRumble[_ID].g_pDevice != NULL) + pRumble[_ID].g_pDevice->Acquire(); + } + + SetDeviceForcesXY(_ID, _Strength * 100); +} + +HRESULT InitRumble(HWND hWnd) +{ + DIPROPDWORD dipdw; + HRESULT hr; + + // Register with the DirectInput subsystem and get a pointer to a IDirectInput interface we can use. + if (FAILED(hr = DirectInput8Create(GetModuleHandle(NULL), DIRECTINPUT_VERSION, IID_IDirectInput8, (VOID**)&g_Rumble, NULL))) + return hr; + + // Look for a device we can use + if (FAILED(hr = g_Rumble->EnumDevices( DI8DEVCLASS_GAMECTRL, EnumFFDevicesCallback, NULL, DIEDFL_ATTACHEDONLY | DIEDFL_FORCEFEEDBACK))) + return hr; + + for (int i = 0; i < MAX_WIIMOTES; i++) + { + if (NULL == pRumble[i].g_pDevice) + WiiMapping[i].Rumble = false; // Disable Rumble for this pad only. + else + { + pRumble[i].g_pDevice->SetDataFormat(&c_dfDIJoystick); + pRumble[i].g_pDevice->SetCooperativeLevel(hWnd, DISCL_EXCLUSIVE | DISCL_BACKGROUND); + // Request exclusive acces for both background and foreground. + + dipdw.diph.dwSize = sizeof(DIPROPDWORD); + dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER); + dipdw.diph.dwObj = 0; + dipdw.diph.dwHow = DIPH_DEVICE; + dipdw.dwData = FALSE; + + // if Force Feedback doesn't seem to work... + if (FAILED(pRumble[i].g_pDevice->EnumObjects(EnumAxesCallback, + (void*)&pRumble[i].g_dwNumForceFeedbackAxis, DIDFT_AXIS)) + || FAILED(pRumble[i].g_pDevice->SetProperty(DIPROP_AUTOCENTER, &dipdw.diph))) + { + PanicAlert("Device %d doesn't seem to work ! \nRumble for device %d is now Disabled !", i+1); + + WiiMapping[i].Rumble = false; // Disable Rumble for this pad + + continue; // Next pad + } + + if (pRumble[i].g_dwNumForceFeedbackAxis > 2) + pRumble[i].g_dwNumForceFeedbackAxis = 2; + + DWORD _rgdwAxes[2] = {DIJOFS_X, DIJOFS_Y}; + long rglDirection[2] = {0, 0}; + DICONSTANTFORCE cf = {0}; + + ZeroMemory(&pRumble[i].eff, sizeof(pRumble[i].eff)); + pRumble[i].eff.dwSize = sizeof(DIEFFECT); + pRumble[i].eff.dwFlags = DIEFF_CARTESIAN | DIEFF_OBJECTOFFSETS; + pRumble[i].eff.dwDuration = INFINITE; // fixed time may be safer (X * DI_SECONDS) + pRumble[i].eff.dwSamplePeriod = 0; + pRumble[i].eff.dwGain = DI_FFNOMINALMAX; + pRumble[i].eff.dwTriggerButton = DIEB_NOTRIGGER; + pRumble[i].eff.dwTriggerRepeatInterval = 0; + pRumble[i].eff.cAxes = pRumble[i].g_dwNumForceFeedbackAxis; + pRumble[i].eff.rgdwAxes = _rgdwAxes; + pRumble[i].eff.rglDirection = rglDirection; + pRumble[i].eff.lpEnvelope = 0; + pRumble[i].eff.cbTypeSpecificParams = sizeof( DICONSTANTFORCE ); + pRumble[i].eff.lpvTypeSpecificParams = &cf; + pRumble[i].eff.dwStartDelay = 0; + + // Create the prepared effect + if (FAILED(hr = pRumble[i].g_pDevice->CreateEffect(GUID_ConstantForce, &pRumble[i].eff, &pRumble[i].g_pEffect, NULL))) + continue; + + if (pRumble[i].g_pEffect == NULL) + continue; + } + } + + return S_OK; +} + +void SetDeviceForcesXY(int npad, int nXYForce) +{ + // Security check + if (pRumble[npad].g_pDevice == NULL) + return; + + // If nXYForce is null, there's no point to create the effect + // Just stop the force feedback + if (nXYForce == 0) { + pRumble[npad].g_pEffect->Stop(); + return; + } + + long rglDirection[2] = {0}; + DICONSTANTFORCE cf; + + // If only one force feedback axis, then apply only one direction and keep the direction at zero + if (pRumble[npad].g_dwNumForceFeedbackAxis == 1) + { + rglDirection[0] = 0; + cf.lMagnitude = nXYForce; // max should be 10000 + } + // If two force feedback axis, then apply magnitude from both directions + else + { + rglDirection[0] = nXYForce; + rglDirection[1] = nXYForce; + cf.lMagnitude = static_cast(1.4142f*nXYForce); + } + + ZeroMemory(&pRumble[npad].eff, sizeof(pRumble[npad].eff)); + pRumble[npad].eff.dwSize = sizeof(DIEFFECT); + pRumble[npad].eff.dwFlags = DIEFF_CARTESIAN | DIEFF_OBJECTOFFSETS; + pRumble[npad].eff.cAxes = pRumble[npad].g_dwNumForceFeedbackAxis; + pRumble[npad].eff.rglDirection = rglDirection; + pRumble[npad].eff.lpEnvelope = 0; + pRumble[npad].eff.cbTypeSpecificParams = sizeof(DICONSTANTFORCE); + pRumble[npad].eff.lpvTypeSpecificParams = &cf; + pRumble[npad].eff.dwStartDelay = 0; + + // Now set the new parameters.. + pRumble[npad].g_pEffect->SetParameters(&pRumble[npad].eff, DIEP_DIRECTION | DIEP_TYPESPECIFICPARAMS | DIEP_START); + // ..And start the effect immediately. + if (pRumble[npad].g_pEffect != NULL) + pRumble[npad].g_pEffect->Start(1, 0); +} + +BOOL CALLBACK EnumFFDevicesCallback(const DIDEVICEINSTANCE* pInst, VOID* pContext) +{ + LPDIRECTINPUTDEVICE8 pDevice; + DIPROPDWORD dipdw; + HRESULT hr; + + int JoystickID; + + dipdw.diph.dwSize = sizeof(DIPROPDWORD); + dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER); + dipdw.diph.dwObj = 0; + dipdw.diph.dwHow = DIPH_DEVICE; + + g_Rumble->CreateDevice(pInst->guidInstance, &pDevice, NULL); // Create a DInput pad device + + if (SUCCEEDED(hr = pDevice->GetProperty(DIPROP_JOYSTICKID, &dipdw.diph))) // Get DInput Device ID + JoystickID = dipdw.dwData; + else + return DIENUM_CONTINUE; + + //PanicAlert("DInput ID : %d \nSDL ID (1-4) : %d / %d / %d / %d\n", JoystickID, WiiMapping[0].ID, WiiMapping[1].ID, WiiMapping[2].ID, WiiMapping[3].ID); + + for (int i=0; i<4; i++) + { + if (WiiMapping[i].ID == JoystickID) // if SDL ID = DInput ID -> we're dealing with the same device + { + // a DInput device is created even if rumble is disabled on startup + // this way, you can toggle the rumble setting while in game + pRumble[i].g_pDevice = pDevice; // everything looks good, save the DInput device + } + } + + return DIENUM_CONTINUE; +} + +BOOL CALLBACK EnumAxesCallback(const DIDEVICEOBJECTINSTANCE* pdidoi, VOID* pContext) +{ + DWORD* pdwNumForceFeedbackAxis = (DWORD*)pContext; // Enum Rumble Axis + if ((pdidoi->dwFlags & DIDOI_FFACTUATOR) != 0) + (*pdwNumForceFeedbackAxis)++; + + return DIENUM_CONTINUE; +} + +void PAD_RumbleClose() +{ + for (int i = 0; i < MAX_WIIMOTES; i++) + { + if (WiiMapping[i].ID < NumPads) + if (WiiMapping[i].TriggerType == InputCommon::CTL_TRIGGER_XINPUT) + { +#ifdef _WIN32 + // Kill Xpad rumble + XINPUT_VIBRATION vib; + vib.wLeftMotorSpeed = 0; + vib.wRightMotorSpeed = 0; + XInputSetState(WiiMapping[i].ID, &vib); +#endif + } + else + { + // It may look weird, but we don't free anything here, it was the cause of crashes + // on stop, and the DLL isn't unloaded anyway, so the pointers stay + // We just stop the rumble in case it's still playing an effect. + if (pRumble[WiiMapping[i].ID].g_pDevice && pRumble[WiiMapping[i].ID].g_pEffect) + pRumble[WiiMapping[i].ID].g_pEffect->Stop(); + } + } +} + +#else // Multiplatform SDL Rumble code + +#ifdef SDL_RUMBLE + +struct RUMBLE // GC Pad rumble DIDevice +{ + SDL_Haptic* g_pDevice; + SDL_HapticEffect g_pEffect; + int effect_id; +}; + +RUMBLE pRumble[4] = {0}; // 4 GC Rumble Pads +#endif + + +// Use PAD rumble +// -------------- +bool PAD_Init_Rumble(u8 _numPAD, SDL_Joystick *SDL_Device) +{ +#ifdef SDL_RUMBLE + if (SDL_Device == NULL) + return false; + + pRumble[_numPAD].g_pDevice = SDL_HapticOpenFromJoystick(SDL_Device); + + if (pRumble[_numPAD].g_pDevice == NULL) + return false; // Most likely joystick isn't haptic + + if (!(SDL_HapticQuery(pRumble[_numPAD].g_pDevice) & SDL_HAPTIC_CONSTANT)) + { + SDL_HapticClose(pRumble[_numPAD].g_pDevice); // No effect + pRumble[_numPAD].g_pDevice = 0; + WiiMapping[_numPAD].Rumble = false; + return false; + } + + // Set the strength of the rumble effect + int Strenght = 3276 * (pRumble[_numPAD].RumbleStrength); + Strenght = Strenght > 32767 ? 32767 : Strenght; + + // Create the effect + memset(&pRumble[_numPAD].g_pEffect, 0, sizeof(SDL_HapticEffect)); // 0 is safe default + pRumble[_numPAD].g_pEffect.type = SDL_HAPTIC_CONSTANT; + pRumble[_numPAD].g_pEffect.constant.direction.type = SDL_HAPTIC_POLAR; // Polar coordinates + pRumble[_numPAD].g_pEffect.constant.direction.dir[0] = 18000; // Force comes from south + pRumble[_numPAD].g_pEffect.constant.level = Strenght; + pRumble[_numPAD].g_pEffect.constant.length = 10000; // 10s long (should be INFINITE, but 10s is safer) + pRumble[_numPAD].g_pEffect.constant.attack_length = 0; // disable Fade in... + pRumble[_numPAD].g_pEffect.constant.fade_length = 0; // ...and out + + // Upload the effect + pRumble[_numPAD].effect_id = SDL_HapticNewEffect( pRumble[_numPAD].g_pDevice, &pRumble[_numPAD].g_pEffect ); +#endif + return true; +} + + +// Set PAD rumble. Explanation: Stop = 0, Rumble = 1 +// -------------- +void PAD_Rumble(u8 _numPAD, unsigned int _uType) +{ +#ifdef SDL_RUMBLE + if (WiiMapping[_numPAD].Rumble) // rumble activated + { + if (!pRumble[_numPAD].g_pDevice) + return; + + if (_uType == 1) + SDL_HapticRunEffect( pRumble[_numPAD].g_pDevice, pRumble[_numPAD].effect_id, 1 ); + else + SDL_HapticStopAll(pRumble[_numPAD].g_pDevice); + } +#endif +} + +void PAD_RumbleClose() +{ +#ifdef SDL_RUMBLE + for (int i=0; i<4; i++) // Free all pads + { + if (pRumble[i].g_pDevice) { + SDL_HapticClose( pRumble[i].g_pDevice ); + pRumble[i].g_pDevice = NULL; + } + } +#endif +} + +#endif // RUMBLE_HACK + +} // end of namespace diff --git a/Source/Plugins/Plugin_WiimoteNew/Plugin_WiimoteNew.vcproj b/Source/Plugins/Plugin_WiimoteNew/Plugin_WiimoteNew.vcproj index 198870664a..f7f5b03621 100644 --- a/Source/Plugins/Plugin_WiimoteNew/Plugin_WiimoteNew.vcproj +++ b/Source/Plugins/Plugin_WiimoteNew/Plugin_WiimoteNew.vcproj @@ -1,611 +1,611 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Plugins/Plugin_nJoy_SDL/Plugin_nJoy_SDL.vcproj b/Source/Plugins/Plugin_nJoy_SDL/Plugin_nJoy_SDL.vcproj index 315b60edfd..307c159261 100644 --- a/Source/Plugins/Plugin_nJoy_SDL/Plugin_nJoy_SDL.vcproj +++ b/Source/Plugins/Plugin_nJoy_SDL/Plugin_nJoy_SDL.vcproj @@ -1,581 +1,581 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Plugins/Plugin_nJoy_SDL/Src/GUI/ConfigBox.cpp b/Source/Plugins/Plugin_nJoy_SDL/Src/GUI/ConfigBox.cpp index fac63aff71..d09953386f 100644 --- a/Source/Plugins/Plugin_nJoy_SDL/Src/GUI/ConfigBox.cpp +++ b/Source/Plugins/Plugin_nJoy_SDL/Src/GUI/ConfigBox.cpp @@ -1,1013 +1,1013 @@ -// Project description -// ------------------- -// Name: nJoy -// Description: A Dolphin Compatible Input Plugin -// -// Author: Falcon4ever (nJoy@falcon4ever.com) -// Site: www.multigesture.net -// Copyright (C) 2003 Dolphin Project. -// -// Licensetype: GNU General Public License (GPL) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 2.0. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. -// -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ -// -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ -// - -#include "math.h" // System - -#include "ConfigBox.h" // Local -#include "../nJoy.h" -#include "Images/controller.xpm" - -extern bool g_EmulatorRunning; - -// D-Pad type -static const char* DPadType[] = -{ - "Hat", - "Custom", -}; - -// Trigger type -static const char* TriggerType[] = -{ - "SDL", // -0x8000 to 0x7fff - "XInput", // 0x00 to 0xff -}; - - -// The wxWidgets class -BEGIN_EVENT_TABLE(PADConfigDialognJoy,wxDialog) - EVT_CLOSE(PADConfigDialognJoy::OnClose) - EVT_BUTTON(ID_ABOUT, PADConfigDialognJoy::AboutClick) - EVT_BUTTON(ID_OK, PADConfigDialognJoy::OKClick) - EVT_BUTTON(ID_CANCEL, PADConfigDialognJoy::CancelClick) - EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK, PADConfigDialognJoy::NotebookPageChanged) - - // Change gamepad - EVT_COMBOBOX(IDC_JOYNAME, PADConfigDialognJoy::ChangeSettings) - EVT_CHECKBOX(IDC_ENABLE, PADConfigDialognJoy::ChangeSettings) - - // Other settings - EVT_CHECKBOX(IDC_SAVEBYID, PADConfigDialognJoy::ChangeSettings) - EVT_CHECKBOX(IDC_SHOWADVANCED, PADConfigDialognJoy::ChangeSettings) - EVT_CHECKBOX(IDCB_CHECKFOCUS, PADConfigDialognJoy::ChangeSettings) - EVT_COMBOBOX(IDCB_MAINSTICK_DIAGONAL, PADConfigDialognJoy::ChangeSettings) - EVT_COMBOBOX(IDC_CONTROLTYPE, PADConfigDialognJoy::ChangeSettings) - EVT_COMBOBOX(IDC_TRIGGERTYPE, PADConfigDialognJoy::ChangeSettings) - EVT_COMBOBOX(IDC_DEADZONE, PADConfigDialognJoy::ChangeSettings) - - // Rumble settings - EVT_CHECKBOX(IDC_ENABLERUMBLE, PADConfigDialognJoy::ChangeSettings) - EVT_COMBOBOX(IDC_RUMBLESTRENGTH, PADConfigDialognJoy::ChangeSettings) - - // Advanced settings - EVT_COMBOBOX(IDCB_MAINSTICK_RADIUS, PADConfigDialognJoy::ChangeSettings) - EVT_CHECKBOX(IDCB_MAINSTICK_CB_RADIUS, PADConfigDialognJoy::ChangeSettings) - EVT_COMBOBOX(IDCB_MAINSTICK_DIAGONAL, PADConfigDialognJoy::ChangeSettings) - EVT_CHECKBOX(IDCB_MAINSTICK_S_TO_C, PADConfigDialognJoy::ChangeSettings) - // C-stick - EVT_COMBOBOX(IDCB_CSTICK_RADIUS, PADConfigDialognJoy::ChangeSettings) - EVT_CHECKBOX(IDCB_CSTICK_CB_RADIUS, PADConfigDialognJoy::ChangeSettings) - EVT_COMBOBOX(IDCB_CSTICK_DIAGONAL, PADConfigDialognJoy::ChangeSettings) - EVT_CHECKBOX(IDCB_CSTICK_S_TO_C, PADConfigDialognJoy::ChangeSettings) - EVT_CHECKBOX(IDCB_FILTER_SETTINGS, PADConfigDialognJoy::ChangeSettings) - - EVT_BUTTON(IDB_SHOULDER_L, PADConfigDialognJoy::GetButtons) - EVT_BUTTON(IDB_SHOULDER_R, PADConfigDialognJoy::GetButtons) - EVT_BUTTON(IDB_BUTTON_A, PADConfigDialognJoy::GetButtons) - EVT_BUTTON(IDB_BUTTON_B, PADConfigDialognJoy::GetButtons) - EVT_BUTTON(IDB_BUTTON_X, PADConfigDialognJoy::GetButtons) - EVT_BUTTON(IDB_BUTTON_Y, PADConfigDialognJoy::GetButtons) - EVT_BUTTON(IDB_BUTTON_Z, PADConfigDialognJoy::GetButtons) - EVT_BUTTON(IDB_BUTTONSTART, PADConfigDialognJoy::GetButtons) - EVT_BUTTON(IDB_BUTTONHALFPRESS, PADConfigDialognJoy::GetButtons) - EVT_BUTTON(IDB_DPAD_UP, PADConfigDialognJoy::GetButtons) - EVT_BUTTON(IDB_DPAD_DOWN, PADConfigDialognJoy::GetButtons) - EVT_BUTTON(IDB_DPAD_LEFT, PADConfigDialognJoy::GetButtons) - EVT_BUTTON(IDB_DPAD_RIGHT, PADConfigDialognJoy::GetButtons) - EVT_BUTTON(IDB_ANALOG_MAIN_X, PADConfigDialognJoy::GetButtons) - EVT_BUTTON(IDB_ANALOG_MAIN_Y, PADConfigDialognJoy::GetButtons) - EVT_BUTTON(IDB_ANALOG_SUB_X, PADConfigDialognJoy::GetButtons) - EVT_BUTTON(IDB_ANALOG_SUB_Y, PADConfigDialognJoy::GetButtons) - - #if wxUSE_TIMER - EVT_TIMER(IDTM_CONSTANT, PADConfigDialognJoy::OnTimer) - EVT_TIMER(IDTM_BUTTON, PADConfigDialognJoy::OnButtonTimer) - #endif -END_EVENT_TABLE() - -PADConfigDialognJoy::PADConfigDialognJoy(wxWindow *parent, wxWindowID id, const wxString &title, - const wxPoint &position, const wxSize& size, long style) - : wxDialog(parent, id, title, position, size, style) -{ - // Define values - notebookpage = 0; - g_Pressed = 0; - Debugging = false; - m_TCDebugging = NULL; - ControlsCreated = false; - - // Create controls - CreateGUIControls(); - - #if wxUSE_TIMER - m_ConstantTimer = new wxTimer(this, IDTM_CONSTANT); - m_ButtonMappingTimer = new wxTimer(this, IDTM_BUTTON); - - // Reset values - GetButtonWaitingID = 0; GetButtonWaitingTimer = 0; - if (NumGoodPads) - { - // Start the constant timer - int TimesPerSecond = 10; - m_ConstantTimer->Start(1000 / TimesPerSecond); - } - #endif - - // wxEVT_KEY_DOWN is blocked for enter, tab and the directional keys - wxTheApp->Connect(wxID_ANY, wxEVT_KEY_UP, - wxKeyEventHandler(PADConfigDialognJoy::OnKeyDown), - (wxObject*)0, this); -} - -PADConfigDialognJoy::~PADConfigDialognJoy() -{ -// The statbar sample has this so I add this to -#if wxUSE_TIMER - if (m_ConstantTimer->IsRunning()) m_ConstantTimer->Stop(); -#endif -} - -void PADConfigDialognJoy::OnKeyDown(wxKeyEvent& event) -{ - g_Pressed = event.GetKeyCode(); -} - -// Close window -void PADConfigDialognJoy::OnClose(wxCloseEvent& event) -{ - // Allow wxWidgets to close the window - //event.Skip(); - - // Stop the timer - m_ConstantTimer->Stop(); - - // Close pads, unless we are running a game - //if (!g_EmulatorRunning) Shutdown(); - - EndModal(wxID_CLOSE); -} - -// Call about dialog -void PADConfigDialognJoy::AboutClick(wxCommandEvent& event) -{ - #ifdef _WIN32 - wxWindow win; - win.SetHWND((WXHWND)this->GetHWND()); - win.Enable(false); - - AboutBox frame(&win); - frame.ShowModal(); - - win.Enable(true); - win.SetHWND(0); - #else - AboutBox frame(NULL); - frame.ShowModal(); - #endif -} - -// Click OK -void PADConfigDialognJoy::OKClick(wxCommandEvent& event) -{ - if (event.GetId() == ID_OK) - { - DoSave(); // Save settings - if (Debugging) PanicAlert("Done"); - Close(); // Call OnClose() - } -} - -// Click Cancel -void PADConfigDialognJoy::CancelClick(wxCommandEvent& event) -{ - if (event.GetId() == ID_CANCEL) - { - // Forget all potential changes to PadMapping by loading the last saved settings - g_Config.Load(); - Close(); // Call OnClose() - } -} - -// Debugging -void PADConfigDialognJoy::LogMsg(const char* format, ...) -{ - #ifdef _WIN32 - if (Debugging) - { - const int MaxMsgSize = 1024*2; - char buffer[MaxMsgSize]; - va_list args; - va_start(args, format); - CharArrayFromFormatV(buffer, MaxMsgSize, format, args); - va_end(args); - - // Add timestamp - std::string StrTmp = buffer; - //StrTmp += Common::Timer::GetTimeFormatted(); - - if(m_TCDebugging) m_TCDebugging->AppendText(wxString::FromAscii(StrTmp.c_str())); - } - #endif -} - - - -// Save Settings -/* - - Saving is currently done when: - - 1. Closing the configuration window - 2. Changing the gamepad - 3. When the gamepad is enabled or disbled - 4. When we change saving mode (by Id or by slot) - - Input: ChangePad needs to be used when we change the pad for a slot. Slot needs to be used when - we only want to save changes to one slot. -*/ -void PADConfigDialognJoy::DoSave(bool ChangePad, int Slot) -{ - // Replace "" with "-1" before we are saving - ToBlank(false); - - if (ChangePad) - { - // Since we are selecting the pad to save to by the Id we can't update it when we change the pad - for(int i = 0; i < 4; i++) - SaveButtonMapping(i, true); - - // Now we can update the ID - PadMapping[notebookpage].ID = m_Joyname[notebookpage]->GetSelection(); - PadState[notebookpage].joy = joyinfo.at(PadMapping[notebookpage].ID).joy; - - g_Config.Save(Slot); - } - else - { - // Update PadMapping[] from the GUI controls - for(int i = 0; i < 4; i++) - SaveButtonMapping(i); - - g_Config.Save(Slot); - } - - // Then change it back to "" - ToBlank(); -} - -// On changing the SaveById option we update all pages -void PADConfigDialognJoy::OnSaveById() -{ - // Save current settings - DoSave(false, notebookpage); - - // Update the SaveByID setting and load the settings - g_Config.bSaveByID = m_CBSaveByID[notebookpage]->IsChecked(); - g_Config.Load(false, true); - - // Update the GUI from the now updated PadMapping[] - UpdateGUIAll(-1); -} - -// Change Joystick -/* Function: When changing the joystick we save and load the settings and update the PadMapping - and PadState array. PadState[].joy is the gamepad handle that is used to access the pad throughout - the plugin. Joyinfo[].joy is only used the first time the pads are checked. */ -void PADConfigDialognJoy::DoChangeJoystick() -{ - // Before changing the pad we save potential changes to the current pad (to support SaveByID) - DoSave(true); - - // Load the settings for the new Id - g_Config.Load(true); - UpdateGUI(notebookpage); // Update the GUI -} - -// Notebook page changed -void PADConfigDialognJoy::NotebookPageChanged(wxNotebookEvent& event) -{ - // Save current settings now, don't wait for OK - if (ControlsCreated && !g_Config.bSaveByID) - DoSave(false, notebookpage); - - // Update the global variable - notebookpage = event.GetSelection(); - - // Update GUI - if (ControlsCreated) - UpdateGUI(notebookpage); -} - -// Replace the harder to understand -1 with "" for the sake of user friendliness -void PADConfigDialognJoy::ToBlank(bool ToBlank) -{ - if (!ControlsCreated) return; - - for (int j = 0; j < 4; j++) - { - if(ToBlank) - { - for(int i = IDB_ANALOG_MAIN_X; i <= IDB_BUTTONHALFPRESS; i++) - #ifndef _WIN32 - if(!strcmp(GetButtonText(i, j).mb_str(), "-1")) SetButtonText(i, "", j); - #else - if(GetButtonText(i, j) == wxT("-1")) SetButtonText(i, "", j); - #endif - } - else - { - for(int i = IDB_ANALOG_MAIN_X; i <= IDB_BUTTONHALFPRESS; i++) - if(GetButtonText(i, j).IsEmpty()) SetButtonText(i, "-1", j); - } - } -} - - -// Change settings -void PADConfigDialognJoy::SetButtonTextAll(int id, const char *text) -{ - for (int i = 0; i < 4; i++) - { - // Safety check to avoid crash - if (joyinfo.size() > (u32)PadMapping[i].ID) - if (joyinfo[PadMapping[i].ID].Name == joyinfo[PadMapping[notebookpage].ID].Name) - SetButtonText(id, text, i); - }; -} - -void PADConfigDialognJoy::SaveButtonMappingAll(int Slot) -{ - for (int i = 0; i < 4; i++) - { - // This can occur when no gamepad is detected - if (joyinfo.size() > (u32)PadMapping[i].ID) - if (joyinfo[PadMapping[i].ID].Name == joyinfo[PadMapping[Slot].ID].Name) - SaveButtonMapping(i, false, Slot); - } -} - -void PADConfigDialognJoy::UpdateGUIAll(int Slot) -{ - if (Slot == -1) - { - for (int i = 0; i < 4; i++) - UpdateGUI(i); - } - else - { - for (int i = 0; i < 4; i++) - { - // Safety check to avoid crash - if (joyinfo.size() > (u32)PadMapping[i].ID) - if (joyinfo[PadMapping[i].ID].Name == joyinfo[PadMapping[Slot].ID].Name) - UpdateGUI(i); - } - } -} - -void PADConfigDialognJoy::ChangeSettings( wxCommandEvent& event ) -{ - switch(event.GetId()) - { - case IDC_SAVEBYID: - OnSaveById(); - break; - - case IDC_SHOWADVANCED: - g_Config.bShowAdvanced = m_CBShowAdvanced[notebookpage]->IsChecked(); - for(int i = 0; i < 4; i++) - m_CBShowAdvanced[i]->SetValue(g_Config.bShowAdvanced); - UpdateGUI(notebookpage); - // Resize the window without the need of any weird hack - SetSizerAndFit(m_MainSizer); - break; - - // Advanced settings - case IDCB_CHECKFOCUS: - g_Config.bCheckFocus = m_CBCheckFocus[notebookpage]->IsChecked(); - for(int i = 0; i < 4; i++) - m_CBCheckFocus[i]->SetValue(g_Config.bCheckFocus); - break; - case IDCB_FILTER_SETTINGS: - g_Config.bNoTriggerFilter = m_AdvancedMapFilter[notebookpage]->IsChecked(); - for(int i = 0; i < 4; i++) - m_AdvancedMapFilter[i]->SetValue(g_Config.bNoTriggerFilter); - break; - - case IDC_CONTROLTYPE: - if(!g_Config.bSaveByID) - { - PadMapping[notebookpage].controllertype = m_ControlType[notebookpage]->GetSelection(); - UpdateGUI(notebookpage); - } - case IDC_TRIGGERTYPE: - if(!g_Config.bSaveByID) - { - PadMapping[notebookpage].triggertype = m_TriggerType[notebookpage]->GetSelection(); - UpdateGUI(notebookpage); - } - break; - case IDC_ENABLERUMBLE: - PadMapping[notebookpage].rumble = m_Rumble[notebookpage]->IsChecked(); - break; - case IDC_RUMBLESTRENGTH: - g_Config.RumbleStrength = m_RStrength[notebookpage]->GetSelection(); - break; - case IDC_JOYNAME: - DoChangeJoystick(); - break; - case IDC_ENABLE: - PadMapping[notebookpage].enable = m_Enable[notebookpage]->IsChecked(); - UpdateGUI(notebookpage); - // Resize the window without the need of any weird hack - SetSizerAndFit(m_MainSizer); - break; - } - - // Update all slots that use this device - if(g_Config.bSaveByID) SaveButtonMappingAll(notebookpage); - //if(g_Config.bSaveByID) UpdateGUIAll(notebookpage); -} - - -// Update GUI -// Called from: CreateGUIControls(), ChangeControllertype() -void PADConfigDialognJoy::UpdateGUI(int _notebookpage) -{ - // If there are no good pads disable the entire notebook - if (NumGoodPads == 0) - { - m_Notebook->Enable(false); - return; - } - - // Update the GUI from PadMapping[] - UpdateGUIButtonMapping(_notebookpage); - - // Collect status - bool Hat = (PadMapping[_notebookpage].controllertype == InputCommon::CTL_DPAD_HAT); - long Left, Right; - m_JoyShoulderL[_notebookpage]->GetValue().ToLong(&Left); - m_JoyShoulderR[_notebookpage]->GetValue().ToLong(&Right); - bool AnalogTrigger = (Left >= 1000 || Right >= 1000); - #ifdef _WIN32 - bool XInput = XInput::IsConnected(PadMapping[_notebookpage].ID); - #endif - - // Hat type selection - m_JoyDpadUp[_notebookpage]->Show(!Hat); - m_JoyDpadLeft[_notebookpage]->Show(!Hat); - m_JoyDpadRight[_notebookpage]->Show(!Hat); - - m_bJoyDpadUp[_notebookpage]->Show(!Hat); - m_bJoyDpadLeft[_notebookpage]->Show(!Hat); - m_bJoyDpadRight[_notebookpage]->Show(!Hat); - - m_textDpadUp[_notebookpage]->Show(!Hat); - m_textDpadLeft[_notebookpage]->Show(!Hat); - m_textDpadRight[_notebookpage]->Show(!Hat); - - m_textDpadDown[_notebookpage]->SetLabel(Hat ? wxT("Select hat") : wxT("Down")); - m_bJoyDpadDown[_notebookpage]->SetToolTip(Hat ? - wxT("Select a hat by pressing the hat in any direction") : wxT("")); - - // General settings - m_CBSaveByID[_notebookpage]->SetValue(g_Config.bSaveByID); - m_CBShowAdvanced[_notebookpage]->SetValue(g_Config.bShowAdvanced); - m_CBCheckFocus[_notebookpage]->SetValue(g_Config.bCheckFocus); - m_AdvancedMapFilter[_notebookpage]->SetValue(g_Config.bNoTriggerFilter); - m_RStrength[_notebookpage]->SetSelection(g_Config.RumbleStrength); - - // Replace the harder to understand -1 with "" for the sake of user friendliness - ToBlank(); - - // Advanced settings - if (g_Config.bShowAdvanced) - { - if (PadMapping[_notebookpage].bRadiusOnOff) m_CoBRadius[_notebookpage]->Enable(true); - else m_CoBRadius[_notebookpage]->Enable(false); - if (PadMapping[_notebookpage].bSquareToCircle) m_CoBDiagonal[_notebookpage]->Enable(true); - else m_CoBDiagonal[_notebookpage]->Enable(false); - if (PadMapping[_notebookpage].bRadiusOnOffC) m_CoBRadiusC[_notebookpage]->Enable(true); - else m_CoBRadiusC[_notebookpage]->Enable(false); - if (PadMapping[_notebookpage].bSquareToCircleC) m_CoBDiagonalC[_notebookpage]->Enable(true); - else m_CoBDiagonalC[_notebookpage]->Enable(false); - } - - m_sKeys[_notebookpage]->Show(PadMapping[_notebookpage].enable); - m_sSettings[_notebookpage]->Show(PadMapping[_notebookpage].enable); - m_sMainRight[_notebookpage]->Show(g_Config.bShowAdvanced && PadMapping[_notebookpage].enable); - - // Repaint the background - m_Controller[_notebookpage]->Refresh(); -} - - -// Paint the background -void PADConfigDialognJoy::OnPaint(wxPaintEvent &event) -{ - event.Skip(); - - wxPaintDC dcWin(m_pKeys[notebookpage]); - PrepareDC( dcWin ); - dcWin.DrawBitmap( WxStaticBitmap1_BITMAP, 94, 0, true ); -} - -// Populate the config window -void PADConfigDialognJoy::CreateGUIControls() -{ - INFO_LOG(PAD, "CreateGUIControls()"); - - #ifndef _DEBUG - SetTitle(wxT("Configure: nJoy Input Plugin")); - #else - SetTitle(wxT("Configure: nJoy (Debug) Input Plugin")); - #endif - - SetIcon(wxNullIcon); - -#ifndef _WIN32 - // Force a 8pt font so that it looks more or less "correct" regardless of the default font setting - wxFont f(8, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL); - SetFont(f); -#endif - - // Buttons - m_About = new wxButton(this, ID_ABOUT, wxT("About"), wxDefaultPosition, wxSize(75, 25), 0, wxDefaultValidator, wxT("About")); - m_OK = new wxButton(this, ID_OK, wxT("OK"), wxDefaultPosition, wxSize(75, 25), 0, wxDefaultValidator, wxT("OK")); - m_Cancel = new wxButton(this, ID_CANCEL, wxT("Cancel"), wxDefaultPosition, wxSize(75, 25), 0, wxDefaultValidator, wxT("Cancel")); - m_OK->SetToolTip( - wxT("Save your settings and close this window.") - ); - m_Cancel->SetToolTip( - wxT("Close this window without saving your changes.") - ); - - // Notebook - m_Notebook = new wxNotebook(this, ID_NOTEBOOK, wxDefaultPosition, wxDefaultSize); - - // Controller pages - m_Controller[0] = new wxPanel(m_Notebook, ID_CONTROLLERPAGE1, wxDefaultPosition, wxDefaultSize); - m_Notebook->AddPage(m_Controller[0], wxT("Controller 1")); - m_Controller[1] = new wxPanel(m_Notebook, ID_CONTROLLERPAGE2, wxDefaultPosition, wxDefaultSize); - m_Notebook->AddPage(m_Controller[1], wxT("Controller 2")); - m_Controller[2] = new wxPanel(m_Notebook, ID_CONTROLLERPAGE3, wxDefaultPosition, wxDefaultSize); - m_Notebook->AddPage(m_Controller[2], wxT("Controller 3")); - m_Controller[3] = new wxPanel(m_Notebook, ID_CONTROLLERPAGE4, wxDefaultPosition, wxDefaultSize); - m_Notebook->AddPage(m_Controller[3], wxT("Controller 4")); - - - // Define bitmap for EVT_PAINT - WxStaticBitmap1_BITMAP = wxBitmap(ConfigBox_WxStaticBitmap1_XPM); - - // Search for devices and add them to the device list - wxArrayString arrayStringFor_Joyname; // The string array - if (NumGoodPads > 0) - { - for(int x = 0; (u32)x < joyinfo.size(); x++) - { - arrayStringFor_Joyname.Add(wxString::FromAscii(joyinfo[x].Name.c_str())); - } - } - else - { - arrayStringFor_Joyname.Add(wxString::FromAscii("")); - } - - // Populate the DPad type and Trigger type list - wxArrayString wxAS_DPadType; - wxAS_DPadType.Add(wxString::FromAscii(DPadType[InputCommon::CTL_DPAD_HAT])); - wxAS_DPadType.Add(wxString::FromAscii(DPadType[InputCommon::CTL_DPAD_CUSTOM])); - - wxArrayString wxAS_TriggerType; - wxAS_TriggerType.Add(wxString::FromAscii(TriggerType[InputCommon::CTL_TRIGGER_SDL])); - wxAS_TriggerType.Add(wxString::FromAscii(TriggerType[InputCommon::CTL_TRIGGER_XINPUT])); - - // Populate the deadzone list and the Rumble Strength - - char buffer[8]; - - wxArrayString wxAS_RumbleStrength; - for (int i = 1; i < 11; i++) - { - sprintf (buffer, "%d %%", i*10); - wxAS_RumbleStrength.Add(wxString::FromAscii(buffer)); - } - - wxArrayString arrayStringFor_Deadzone; - for(int x = 1; x <= 100; x++) - { - sprintf (buffer, "%d %%", x); - arrayStringFor_Deadzone.Add(wxString::FromAscii(buffer)); - } - - // Populate all four pages - for(int i = 0; i < 4; i++) - { - // Populate keys sizer - // Set relative values for the keys - int t = -75; // Top - int l = -4; // Left - m_sKeys[i] = new wxStaticBoxSizer( wxVERTICAL, m_Controller[i], wxT("Keys")); - m_pKeys[i] = new wxPanel(m_Controller[i], ID_KEYSPANEL1 + i, wxDefaultPosition, wxSize(600, 400), 0); - //m_sKeys[i] = new wxStaticBox (m_Controller[i], IDG_JOYSTICK, wxT("Keys"), wxDefaultPosition, wxSize(608, 500)); - m_sKeys[i]->Add(m_pKeys[i], 0, (wxALL), 0); // margin = 0 - - // GameCube controller picture - // TODO: Controller image - // Placeholder instead of bitmap - // m_PlaceholderBMP[i] = new wxTextCtrl(m_Controller[i], ID_CONTROLLERPICTURE, wxT("BITMAP HERE PLZ KTHX!"), wxPoint(98, 75), wxSize(423, 306), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("BITMAP HERE PLZ KTHX!")); - // m_PlaceholderBMP[i]->Enable(false); - - /* You can enable the bitmap here. But it loads überslow on init... (only in windows, linux - seems to load it fast!) AAaaand the XPM file (256 colours) looks crappier than the real bitmap... - so maybe we can find a way to use a bitmap? */ - //m_controllerimage[i] = new wxStaticBitmap(m_pKeys[i], ID_CONTROLLERPICTURE, WxStaticBitmap1_BITMAP, wxPoint(l + 98, t + 75), wxSize(421,304)); - //m_controllerimage[i] = new wxBitmap( WxStaticBitmap1_BITMAP ); - - // Paint background. This allows objects to be visible on top of the picture - m_pKeys[i]->Connect(wxID_ANY, wxEVT_PAINT, - wxPaintEventHandler(PADConfigDialognJoy::OnPaint), - (wxObject*)0, this); - - - // Keys objects - // Left and right shoulder buttons - m_JoyShoulderL[i] = new wxTextCtrl(m_pKeys[i], ID_SHOULDER_L, wxT("0"), wxPoint(l + 6, t + 80), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); - m_JoyShoulderL[i]->Enable(false); - m_bJoyShoulderL[i] = new wxButton(m_pKeys[i], IDB_SHOULDER_L, wxEmptyString, wxPoint(l + 70, t + 82), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); - m_JoyShoulderR[i] = new wxTextCtrl(m_pKeys[i], ID_SHOULDER_R, wxT("0"), wxPoint(l + 552, t + 106), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); - m_JoyShoulderR[i]->Enable(false); - m_bJoyShoulderR[i] = new wxButton(m_pKeys[i], IDB_SHOULDER_R, wxEmptyString, wxPoint(l + 526, t + 108), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); - // Left analog - int ALt = 169; int ALw = ALt + 14; int ALb = ALw + 2; // Set offset - m_JoyAnalogMainX[i] = new wxTextCtrl(m_pKeys[i], ID_ANALOG_MAIN_X, wxT("0"), wxPoint(l + 6, t + ALw), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); - m_JoyAnalogMainX[i]->Enable(false); - m_JoyAnalogMainY[i] = new wxTextCtrl(m_pKeys[i], ID_ANALOG_MAIN_Y, wxT("0"), wxPoint(l + 6, t + ALw + 36), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); - m_JoyAnalogMainY[i]->Enable(false); - m_bJoyAnalogMainX[i] = new wxButton(m_pKeys[i], IDB_ANALOG_MAIN_X, wxEmptyString, wxPoint(l + 70, t + ALb), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); - m_bJoyAnalogMainY[i] = new wxButton(m_pKeys[i], IDB_ANALOG_MAIN_Y, wxEmptyString, wxPoint(l + 70, t + ALb + 36), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); - m_textMainX[i] = new wxStaticText(m_pKeys[i], IDT_ANALOG_MAIN_X, wxT("X-axis"), wxPoint(l + 6, t + ALt), wxDefaultSize, 0, wxT("X-axis")); - m_textMainY[i] = new wxStaticText(m_pKeys[i], IDT_ANALOG_MAIN_Y, wxT("Y-axis"), wxPoint(l + 6, t + ALt + 36), wxDefaultSize, 0, wxT("Y-axis")); - - // D-Pad - int DPt = 250; int DPw = DPt + 14; int DPb = DPw + 2; // Set offset - m_JoyDpadUp[i] = new wxTextCtrl(m_pKeys[i], ID_DPAD_UP, wxT("0"), wxPoint(l + 6, t + DPw), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); - m_JoyDpadDown[i] = new wxTextCtrl(m_pKeys[i], ID_DPAD_DOWN, wxT("0"), wxPoint(l + 6, t + DPw + 36*1), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); - m_JoyDpadLeft[i] = new wxTextCtrl(m_pKeys[i], ID_DPAD_LEFT, wxT("0"), wxPoint(l + 6, t + DPw + 36*2), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); - m_JoyDpadRight[i] = new wxTextCtrl(m_pKeys[i], ID_DPAD_RIGHT, wxT("0"), wxPoint(l + 6, t + DPw + 36*3), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); - m_JoyDpadUp[i]->Enable(false); - m_JoyDpadDown[i]->Enable(false); - m_JoyDpadLeft[i]->Enable(false); - m_JoyDpadRight[i]->Enable(false); - m_bJoyDpadUp[i] = new wxButton(m_pKeys[i], IDB_DPAD_UP, wxEmptyString, wxPoint(l + 70, t + DPb + 36*0), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); - m_bJoyDpadDown[i] = new wxButton(m_pKeys[i], IDB_DPAD_DOWN, wxEmptyString, wxPoint(l + 70, t + DPb + 36*1), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); - m_bJoyDpadLeft[i] = new wxButton(m_pKeys[i], IDB_DPAD_LEFT, wxEmptyString, wxPoint(l + 70, t + DPb + 36*2), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); - m_bJoyDpadRight[i] = new wxButton(m_pKeys[i], IDB_DPAD_RIGHT, wxEmptyString, wxPoint(l + 70, t + DPb + 36*3), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); - m_textDpadUp[i] = new wxStaticText(m_pKeys[i], IDT_DPAD_UP, wxT("Up"), wxPoint(l + 6, t + DPt + 36*0), wxDefaultSize, 0, wxT("Up")); - m_textDpadDown[i] = new wxStaticText(m_pKeys[i], IDT_DPAD_DOWN, wxT("Down"), wxPoint(l + 6, t + DPt + 36*1), wxDefaultSize, 0, wxT("Down")); - m_textDpadLeft[i] = new wxStaticText(m_pKeys[i], IDT_DPAD_LEFT, wxT("Left"), wxPoint(l + 6, t + DPt + 36*2), wxDefaultSize, 0, wxT("Left")); - m_textDpadRight[i] = new wxStaticText(m_pKeys[i], IDT_DPAD_RIGHT, wxT("Right"), wxPoint(l + 6, t + DPt + 36*3), wxDefaultSize, 0, wxT("Right")); - - // Buttons - m_JoyButtonA[i] = new wxTextCtrl(m_pKeys[i], ID_BUTTON_A, wxT("0"), wxPoint(l + 552, t + 280), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); - m_JoyButtonA[i]->Enable(false); - m_JoyButtonB[i] = new wxTextCtrl(m_pKeys[i], ID_BUTTON_B, wxT("0"), wxPoint(l + 552, t + 80), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); - m_JoyButtonB[i]->Enable(false); - m_JoyButtonX[i] = new wxTextCtrl(m_pKeys[i], ID_BUTTON_X, wxT("0"), wxPoint(l + 552, t + 242), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); - m_JoyButtonX[i]->Enable(false); - m_JoyButtonY[i] = new wxTextCtrl(m_pKeys[i], ID_BUTTON_Y, wxT("0"), wxPoint(l + 552, t + 171), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); - m_JoyButtonY[i]->Enable(false); - m_JoyButtonZ[i] = new wxTextCtrl(m_pKeys[i], ID_BUTTON_Z, wxT("0"), wxPoint(l + 552, t + 145), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); - m_JoyButtonZ[i]->Enable(false); - m_bJoyButtonA[i] = new wxButton(m_pKeys[i], IDB_BUTTON_A, wxEmptyString, wxPoint(l + 526, t + 282), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); - m_bJoyButtonB[i] = new wxButton(m_pKeys[i], IDB_BUTTON_B, wxEmptyString, wxPoint(l + 526, t + 82), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); - m_bJoyButtonX[i] = new wxButton(m_pKeys[i], IDB_BUTTON_X, wxEmptyString, wxPoint(l + 526, t + 244), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); - m_bJoyButtonY[i] = new wxButton(m_pKeys[i], IDB_BUTTON_Y, wxEmptyString, wxPoint(l + 526, t + 173), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); - m_bJoyButtonZ[i] = new wxButton(m_pKeys[i], IDB_BUTTON_Z, wxEmptyString, wxPoint(l + 526, t + 147), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); - - // C-buttons - m_JoyAnalogSubX[i] = new wxTextCtrl(m_pKeys[i], ID_ANALOG_SUB_X, wxT("0"), wxPoint(l + 552, t + 336), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); - m_JoyAnalogSubX[i]->Enable(false); - m_JoyAnalogSubY[i] = new wxTextCtrl(m_pKeys[i], ID_ANALOG_SUB_Y, wxT("0"), wxPoint(l + 552, t + 373), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); - m_JoyAnalogSubY[i]->Enable(false); - m_bJoyAnalogSubX[i] = new wxButton(m_pKeys[i], IDB_ANALOG_SUB_X, wxEmptyString, wxPoint(l + 526, t + 338), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); - m_bJoyAnalogSubY[i] = new wxButton(m_pKeys[i], IDB_ANALOG_SUB_Y, wxEmptyString, wxPoint(l + 526, t + 375), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); - m_textSubX[i] = new wxStaticText(m_pKeys[i], IDT_ANALOG_SUB_X, wxT("X-axis"), wxPoint(l + 552, t + 321), wxDefaultSize, 0, wxT("X-axis")); - m_textSubY[i] = new wxStaticText(m_pKeys[i], IDT_ANALOG_SUB_Y, wxT("Y-axis"), wxPoint(l + 552, t + 358), wxDefaultSize, 0, wxT("Y-axis")); - - // Start button - m_bJoyButtonStart[i] = new wxButton(m_pKeys[i], IDB_BUTTONSTART, wxEmptyString, wxPoint(l + 284, t + 365), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); - m_JoyButtonStart[i] = new wxTextCtrl(m_pKeys[i], ID_BUTTONSTART, wxT("0"), wxPoint(l + 220, t + 363), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); - m_JoyButtonStart[i]->Enable(false); - - // Website text - #ifdef _WIN32 - m_textWebsite[i] = new wxStaticText(m_pKeys[i], IDT_WEBSITE, wxT("www.multigesture.net"), wxPoint(l + 400, t + 380), wxDefaultSize, 0, wxT("www.multigesture.net")); - #else - m_textWebsite[i] = new wxStaticText(m_Controller[i], IDT_WEBSITE, wxT("www.multigesture.net"), wxPoint(l + 480, t + 418), wxDefaultSize, 0, wxT("www.multigesture.net")); - #endif - - - // Populate Controller sizer - // Groups - #ifdef _WIN32 - m_Joyname[i] = new wxComboBox(m_Controller[i], IDC_JOYNAME, arrayStringFor_Joyname[0], wxDefaultPosition, wxSize(300, 25), arrayStringFor_Joyname, wxCB_READONLY); - #else - m_Joyname[i] = new wxComboBox(m_Controller[i], IDC_JOYNAME, arrayStringFor_Joyname[0], wxDefaultPosition, wxSize(300, 25), arrayStringFor_Joyname, 0, wxDefaultValidator, wxT("m_Joyname")); - #endif - m_Joyname[i]->SetToolTip(wxT("Save your settings and configure another joypad")); - - m_Enable[i] = new wxCheckBox(m_Controller[i], IDC_ENABLE, wxT("Pad Enabled"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); - m_Enable[i]->SetToolTip(wxT("Enable this pad to send input events to game")); - - m_gJoyname[i] = new wxStaticBoxSizer (wxHORIZONTAL, m_Controller[i], wxT("Controller")); - m_gJoyname[i]->Add(m_Joyname[i], 0, wxEXPAND | (wxLEFT | wxRIGHT), 5); - m_gJoyname[i]->Add(m_Enable[i], 0, wxEXPAND | (wxLEFT | wxRIGHT), 5); - - // General settings - - // General settings 1 - m_JoyButtonHalfpress[i] = new wxTextCtrl(m_Controller[i], ID_BUTTONHALFPRESS, wxT("0"), wxDefaultPosition, wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); - m_JoyButtonHalfpress[i]->Enable(false); - m_bJoyButtonHalfpress[i] = new wxButton(m_Controller[i], IDB_BUTTONHALFPRESS, wxEmptyString, wxDefaultPosition, wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); - #ifdef _WIN32 - m_Deadzone[i] = new wxComboBox(m_Controller[i], IDC_DEADZONE, wxEmptyString, wxDefaultPosition, wxSize(59, 21), arrayStringFor_Deadzone, wxCB_READONLY, wxDefaultValidator, wxT("m_Deadzone")); - m_textDeadzone[i] = new wxStaticText(m_Controller[i], IDT_DEADZONE, wxT("Deadzone")); - m_textHalfpress[i] = new wxStaticText(m_Controller[i], IDT_BUTTONHALFPRESS, wxT("Half press")); - #else - m_Deadzone[i] = new wxComboBox(m_Controller[i], IDC_DEADZONE, wxEmptyString, wxPoint(167, 398), wxSize(80, 25), arrayStringFor_Deadzone, wxCB_READONLY, wxDefaultValidator, wxT("m_Deadzone")); - m_textDeadzone[i] = new wxStaticText(m_Controller[i], IDT_DEADZONE, wxT("Deadzone"), wxPoint(105, 404), wxDefaultSize, 0, wxT("Deadzone")); - m_textHalfpress[i] = new wxStaticText(m_Controller[i], IDT_BUTTONHALFPRESS, wxT("Half press"), wxPoint(105, 428), wxDefaultSize, 0, wxT("Half press")); - #endif - - // Populate general settings 1 - m_gExtrasettings[i] = new wxStaticBoxSizer( wxVERTICAL, m_Controller[i], wxT("Extra settings")); - m_gGBExtrasettings[i] = new wxGridBagSizer(0, 0); - m_gGBExtrasettings[i]->Add(m_textDeadzone[i], wxGBPosition(0, 0), wxGBSpan(1, 1), (wxRIGHT | wxTOP), 3); - m_gGBExtrasettings[i]->Add(m_Deadzone[i], wxGBPosition(0, 1), wxGBSpan(1, 1), (wxBOTTOM), 2); - m_gGBExtrasettings[i]->Add(m_textHalfpress[i], wxGBPosition(1, 0), wxGBSpan(1, 1), (wxRIGHT | wxTOP), 3); - m_gGBExtrasettings[i]->Add(m_JoyButtonHalfpress[i], wxGBPosition(1, 1), wxGBSpan(1, 1), (wxALL), 0); - m_gGBExtrasettings[i]->Add(m_bJoyButtonHalfpress[i], wxGBPosition(1, 2), wxGBSpan(1, 1), (wxLEFT | wxTOP), 2); - m_gExtrasettings[i]->Add(m_gGBExtrasettings[i], 0, wxEXPAND | wxALL, 3); - - // Create general settings 2 (controller typ) - m_TSControltype[i] = new wxStaticText(m_Controller[i], IDT_DPADTYPE, wxT("D-Pad")); - m_TSTriggerType[i] = new wxStaticText(m_Controller[i], IDT_TRIGGERTYPE, wxT("Trigger")); - m_ControlType[i] = new wxComboBox(m_Controller[i], IDC_CONTROLTYPE, wxAS_DPadType[0], wxDefaultPosition, wxDefaultSize, wxAS_DPadType, wxCB_READONLY); - m_TriggerType[i] = new wxComboBox(m_Controller[i], IDC_TRIGGERTYPE, wxAS_TriggerType[0], wxDefaultPosition, wxDefaultSize, wxAS_TriggerType, wxCB_READONLY); - - // Populate general settings 2 (controller typ) - m_gGenSettings[i] = new wxStaticBoxSizer( wxVERTICAL, m_Controller[i], wxT("D-pad and trigger")); - m_gGBGenSettings[i] = new wxGridBagSizer(0, 0); - m_gGBGenSettings[i]->Add(m_TSControltype[i], wxGBPosition(0, 0), wxGBSpan(1, 1), (wxTOP), 4); - m_gGBGenSettings[i]->Add(m_ControlType[i], wxGBPosition(0, 1), wxGBSpan(1, 1), (wxBOTTOM | wxLEFT), 2); - m_gGBGenSettings[i]->Add(m_TSTriggerType[i], wxGBPosition(1, 0), wxGBSpan(1, 1), (wxTOP), 4); - m_gGBGenSettings[i]->Add(m_TriggerType[i], wxGBPosition(1, 1), wxGBSpan(1, 1), (wxLEFT), 2); - m_gGenSettings[i]->Add(m_gGBGenSettings[i], 0, wxEXPAND | wxALL, 3); - - // Create objects for general settings 3 - m_gGenSettingsID[i] = new wxStaticBoxSizer( wxVERTICAL, m_Controller[i], wxT("Settings") ); - m_CBSaveByID[i] = new wxCheckBox(m_Controller[i], IDC_SAVEBYID, wxT("Save by ID"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); - m_CBSaveByID[i]->Enable(false); - m_CBShowAdvanced[i] = new wxCheckBox(m_Controller[i], IDC_SHOWADVANCED, wxT("Show advanced settings"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); - - // Populate general settings 3 - m_gGenSettingsID[i]->Add(m_CBSaveByID[i], 0, wxEXPAND | wxALL, 3); - m_gGenSettingsID[i]->Add(m_CBShowAdvanced[i], 0, wxEXPAND | wxALL, 3); - - // Create objects for Rumble settings (general 4) - m_RStrength[i] = new wxComboBox(m_Controller[i], IDC_RUMBLESTRENGTH, wxAS_RumbleStrength[0], wxDefaultPosition, wxSize(85, 20), wxAS_RumbleStrength, wxCB_READONLY); - m_Rumble[i] = new wxCheckBox(m_Controller[i], IDC_ENABLERUMBLE, wxT("Enable Rumble"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); -#if !SDL_VERSION_ATLEAST(1, 3, 0) && !defined(_WIN32) - m_Rumble[i]->Disable(); -#endif - - // Populate general settings 4 - m_gRumble[i] = new wxStaticBoxSizer( wxVERTICAL, m_Controller[i], wxT("Rumble settings")); - m_gGBRumble[i] = new wxGridBagSizer(0, 0); - m_gGBRumble[i]->Add(m_Rumble[i], wxGBPosition(0, 0), wxGBSpan(1, 1), (wxTOP), 1); - m_gGBRumble[i]->Add(m_RStrength[i], wxGBPosition(1, 0), wxGBSpan(1, 1), (wxTOP), 6); - m_gRumble[i]->Add(m_gGBRumble[i], 0, wxEXPAND | wxALL, 3); - - // Create tooltips - m_ControlType[i]->SetToolTip(wxT( - "Use a 'hat' on your gamepad or configure a custom button for each direction." - )); - m_TriggerType[i]->SetToolTip(wxT( - "Select XInput if you want the triggers to work with the XBox 360 pad." - )); - m_CBSaveByID[i]->SetToolTip(wxString::Format( - wxT("Map these settings to the selected controller device instead of to the") - wxT("\nselected slot (1, 2, 3 or 4). This may be a more convenient way") - wxT("\nto save your settings if you have multiple controllers.") - , i+1 - )); - - // Populate settings - m_sSettings[i] = new wxBoxSizer ( wxHORIZONTAL ); - m_sSettings[i]->Add(m_gExtrasettings[i], 0, wxEXPAND | wxALL, 0); - m_sSettings[i]->Add(m_gGenSettings[i], 0, wxEXPAND | wxLEFT, 5); - m_sSettings[i]->Add(m_gGenSettingsID[i], 0, wxEXPAND | wxLEFT, 5); - m_sSettings[i]->Add(m_gRumble[i], 0, wxEXPAND | wxLEFT, 5); - - // Advanced settings - - // Input status controls - - // Input status text - CreateAdvancedControls(i); - - // Main-stick sizers - m_GBAdvancedMainStick[i] = new wxGridBagSizer(0, 0); - m_GBAdvancedMainStick[i]->Add(m_pInStatus[i], wxGBPosition(0, 0), wxGBSpan(1, 1), wxALL, 0); - m_GBAdvancedMainStick[i]->Add(m_pOutStatus[i], wxGBPosition(0, 1), wxGBSpan(1, 1), wxLEFT, 5); - m_GBAdvancedMainStick[i]->Add(m_TStatusIn[i], wxGBPosition(1, 0), wxGBSpan(1, 1), wxALL, 0); - m_GBAdvancedMainStick[i]->Add(m_TStatusOut[i], wxGBPosition(1, 1), wxGBSpan(1, 1), wxLEFT, 5); - // Cstick sizers - m_GBAdvancedCStick[i] = new wxGridBagSizer(0, 0); - m_GBAdvancedCStick[i]->Add(m_pInStatusC[i], wxGBPosition(0, 0), wxGBSpan(1, 1), wxALL, 0); - m_GBAdvancedCStick[i]->Add(m_pOutStatusC[i], wxGBPosition(0, 1), wxGBSpan(1, 1), wxLEFT, 5); - m_GBAdvancedCStick[i]->Add(m_TStatusInC[i], wxGBPosition(1, 0), wxGBSpan(1, 1), wxALL, 0); - m_GBAdvancedCStick[i]->Add(m_TStatusOutC[i], wxGBPosition(1, 1), wxGBSpan(1, 1), wxLEFT, 5); - // Add sizers - m_gStatusIn[i]->Add(m_GBAdvancedMainStick[i], 0, wxLEFT, 5); - m_gStatusInC[i]->Add(m_GBAdvancedCStick[i], 0, wxLEFT, 5); - - // Populate input status settings - - // The drop down menu - m_gStatusInSettings[i] = new wxStaticBoxSizer( wxVERTICAL, m_Controller[i], wxT("Main-stick settings")); - m_gStatusInSettingsRadiusH[i] = new wxBoxSizer(wxHORIZONTAL); - m_gStatusInSettingsC[i] = new wxStaticBoxSizer( wxVERTICAL, m_Controller[i], wxT("C-stick settings")); - m_gStatusInSettingsRadiusHC[i] = new wxBoxSizer(wxHORIZONTAL); - wxArrayString asRadius; - asRadius.Add(wxT("100%")); - asRadius.Add(wxT("90%")); - asRadius.Add(wxT("80%")); - asRadius.Add(wxT("70%")); - asRadius.Add(wxT("60%")); - asRadius.Add(wxT("50%")); - asRadius.Add(wxT("40%")); - m_CoBRadius[i] = new wxComboBox(m_Controller[i], IDCB_MAINSTICK_RADIUS, asRadius[0], wxDefaultPosition, wxDefaultSize, asRadius, wxCB_READONLY); - m_CoBRadiusC[i] = new wxComboBox(m_Controller[i], IDCB_CSTICK_RADIUS, asRadius[0], wxDefaultPosition, wxDefaultSize, asRadius, wxCB_READONLY); - - // The checkbox - m_CBRadius[i] = new wxCheckBox(m_Controller[i], IDCB_MAINSTICK_CB_RADIUS, wxT("Radius")); - m_CBRadiusC[i] = new wxCheckBox(m_Controller[i], IDCB_CSTICK_CB_RADIUS, wxT("Radius")); - wxString CBRadiusToolTip = wxT("This will reduce the stick radius."); - m_CBRadius[i]->SetToolTip(CBRadiusToolTip); - m_CBRadiusC[i]->SetToolTip(CBRadiusToolTip); - - // The drop down menu); - m_gStatusInSettingsH[i] = new wxBoxSizer(wxHORIZONTAL); - m_gStatusInSettingsHC[i] = new wxBoxSizer(wxHORIZONTAL); - wxArrayString asStatusInSet; - asStatusInSet.Add(wxT("100%")); - asStatusInSet.Add(wxT("95%")); - asStatusInSet.Add(wxT("90%")); - asStatusInSet.Add(wxT("85%")); - asStatusInSet.Add(wxT("80%")); - asStatusInSet.Add(wxT("75%")); - m_CoBDiagonal[i] = new wxComboBox(m_Controller[i], IDCB_MAINSTICK_DIAGONAL, asStatusInSet[0], wxDefaultPosition, wxDefaultSize, asStatusInSet, wxCB_READONLY); - m_CoBDiagonalC[i] = new wxComboBox(m_Controller[i], IDCB_CSTICK_DIAGONAL, asStatusInSet[0], wxDefaultPosition, wxDefaultSize, asStatusInSet, wxCB_READONLY); - - // The checkbox - m_CBS_to_C[i] = new wxCheckBox(m_Controller[i], IDCB_MAINSTICK_S_TO_C, wxT("Diagonal")); - m_CBS_to_CC[i] = new wxCheckBox(m_Controller[i], IDCB_CSTICK_S_TO_C, wxT("Diagonal")); - wxString CBS_to_CToolTip = - wxT("This will convert a square stick radius to a circle stick radius similar to the octagonal area that the original GameCube pad produce.") - wxT(" To produce a smooth circle in the 'Out' window you have to manually set") - wxT(" your diagonal values from the 'In' window in the drop down menu."); - m_CBS_to_C[i]->SetToolTip(CBS_to_CToolTip); - m_CBS_to_CC[i]->SetToolTip(CBS_to_CToolTip); - - // Populate sizers - m_gStatusInSettings[i]->Add(m_gStatusInSettingsRadiusH[i], 0, (wxLEFT | wxRIGHT | wxBOTTOM), 4); - m_gStatusInSettings[i]->Add(m_gStatusInSettingsH[i], 0, (wxLEFT | wxRIGHT | wxBOTTOM), 4); - // C-stick - m_gStatusInSettingsC[i]->Add(m_gStatusInSettingsRadiusHC[i], 0, (wxLEFT | wxRIGHT | wxBOTTOM), 4); - m_gStatusInSettingsC[i]->Add(m_gStatusInSettingsHC[i], 0, (wxLEFT | wxRIGHT | wxBOTTOM), 4); - - m_gStatusInSettingsRadiusH[i]->Add(m_CBRadius[i], 0, wxLEFT | wxTOP, 3); - m_gStatusInSettingsRadiusH[i]->Add(m_CoBRadius[i], 0, wxLEFT, 3); - m_gStatusInSettingsH[i]->Add(m_CBS_to_C[i], 0, wxLEFT | wxTOP, 3); - m_gStatusInSettingsH[i]->Add(m_CoBDiagonal[i], 0, wxLEFT, 3); - // C-stick - m_gStatusInSettingsRadiusHC[i]->Add(m_CBRadiusC[i], 0, wxLEFT | wxTOP, 3); - m_gStatusInSettingsRadiusHC[i]->Add(m_CoBRadiusC[i], 0, wxLEFT, 3); - m_gStatusInSettingsHC[i]->Add(m_CBS_to_CC[i], 0, wxLEFT | wxTOP, 3); - m_gStatusInSettingsHC[i]->Add(m_CoBDiagonalC[i], 0, wxLEFT, 3); - - // The trigger values - m_gStatusTriggers[i] = new wxStaticBoxSizer( wxVERTICAL, m_Controller[i], wxT("Trigger values")); - m_TStatusTriggers[i] = new wxStaticText(m_Controller[i], IDT_TRIGGERS, wxT("Left: Right:")); - m_gStatusTriggers[i]->Add(m_TStatusTriggers[i], 0, (wxALL), 4); - - m_gStatusAdvancedSettings[i] = new wxStaticBoxSizer( wxVERTICAL, m_Controller[i], wxT("Advanced settings")); - m_CBCheckFocus[i] = new wxCheckBox(m_Controller[i], IDCB_CHECKFOCUS, wxT("Allow out of focus input"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); - m_AdvancedMapFilter[i] = new wxCheckBox(m_Controller[i], IDCB_FILTER_SETTINGS , wxT("No trigger filter")); - m_gStatusAdvancedSettings[i]->Add(m_CBCheckFocus[i], 0, (wxALL), 4); - m_gStatusAdvancedSettings[i]->Add(m_AdvancedMapFilter[i], 0, (wxALL), 4); - - // Tool tips - m_CBCheckFocus[i]->SetToolTip(wxT( - "Allow gamepad input even when Dolphin is not in focus. Out of focus keyboard input is never allowed.")); - m_AdvancedMapFilter[i]->SetToolTip( - wxT("This will allow you to map a digital axis to the main stick or the C-stick. If you don't have") - wxT(" any analog triggers that will be automatically set when the trigger filter is off.") - ); - - - // Populate sizers - - // Populate main left sizer - m_sMainLeft[i] = new wxBoxSizer(wxVERTICAL); - m_sMainLeft[i]->Add(m_gJoyname[i], 0, wxEXPAND | (wxALL), 5); - m_sMainLeft[i]->Add(m_sKeys[i], 1, wxEXPAND | (wxLEFT | wxRIGHT), 5); - m_sMainLeft[i]->Add(m_sSettings[i], 0, wxEXPAND | (wxALL), 5); - - // Populate main right sizer - m_sMainRight[i] = new wxBoxSizer(wxVERTICAL); - m_sMainRight[i]->Add(m_gStatusIn[i], 0, wxEXPAND | (wxLEFT), 2); - m_sMainRight[i]->Add(m_gStatusInSettings[i], 0, wxEXPAND | (wxLEFT | wxTOP), 2); - m_sMainRight[i]->Add(m_gStatusInC[i], 0, wxEXPAND | (wxLEFT), 2); - m_sMainRight[i]->Add(m_gStatusInSettingsC[i], 0, wxEXPAND | (wxLEFT | wxTOP), 2); - m_sMainRight[i]->Add(m_gStatusTriggers[i], 0, wxEXPAND | (wxLEFT | wxTOP), 2); - m_sMainRight[i]->Add(m_gStatusAdvancedSettings[i], 0, wxEXPAND | (wxLEFT | wxTOP), 2); -#ifdef RERECORDING - m_sMainRight[i]->Add(m_SizeRecording[i], 0, wxEXPAND | (wxLEFT | wxTOP), 2); -#endif - - // Populate main sizer - m_sMain[i] = new wxBoxSizer(wxHORIZONTAL); - m_sMain[i]->Add(m_sMainLeft[i], 0, wxEXPAND | (wxALL), 0); - m_sMain[i]->Add(m_sMainRight[i], 0, wxEXPAND | (wxRIGHT | wxTOP), 5); - m_Controller[i]->SetSizerAndFit(m_sMain[i]); // Set the main sizer - - // Show or hide it. We have to do this after we add it to its sizer - m_sMainRight[i]->Show(g_Config.bShowAdvanced); - - // Update GUI - UpdateGUI(i); - } // end of loop - - // Populate buttons sizer. - wxBoxSizer * m_sButtons = new wxBoxSizer(wxHORIZONTAL); - m_sButtons->Add(m_About, 0, (wxBOTTOM), 0); - m_sButtons->AddStretchSpacer(1); - m_sButtons->Add(m_OK, 0, wxALIGN_RIGHT | (wxBOTTOM), 0); - m_sButtons->Add(m_Cancel, 0, wxALIGN_RIGHT | (wxLEFT), 5); - - - // Populate master sizer. - m_MainSizer = new wxBoxSizer(wxVERTICAL); - m_MainSizer->Add(m_Notebook, 0, wxEXPAND | wxALL, 5); - m_MainSizer->Add(m_sButtons, 1, wxEXPAND | ( wxLEFT | wxRIGHT | wxBOTTOM), 5); - SetSizerAndFit(m_MainSizer); - - // Debugging - #ifdef SHOW_PAD_STATUS - m_pStatusBar = new wxStaticText(this, IDT_DEBUGGING, wxT("Debugging"), wxPoint(135, 100), wxDefaultSize); - #endif - - // Set window size - SetSizer(m_MainSizer); - Layout(); - Fit(); - // Center the window if there is room for it - #ifdef _WIN32 - if (GetSystemMetrics(SM_CYFULLSCREEN) > 600) - Center(); - #endif - - // All done - ControlsCreated = true; - - // Replace the harder to understand -1 with "" for the sake of user friendliness - ToBlank(); -} +// Project description +// ------------------- +// Name: nJoy +// Description: A Dolphin Compatible Input Plugin +// +// Author: Falcon4ever (nJoy@falcon4ever.com) +// Site: www.multigesture.net +// Copyright (C) 2003 Dolphin Project. +// +// Licensetype: GNU General Public License (GPL) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. +// +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ +// +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ +// + +#include "math.h" // System + +#include "ConfigBox.h" // Local +#include "../nJoy.h" +#include "Images/controller.xpm" + +extern bool g_EmulatorRunning; + +// D-Pad type +static const char* DPadType[] = +{ + "Hat", + "Custom", +}; + +// Trigger type +static const char* TriggerType[] = +{ + "SDL", // -0x8000 to 0x7fff + "XInput", // 0x00 to 0xff +}; + + +// The wxWidgets class +BEGIN_EVENT_TABLE(PADConfigDialognJoy,wxDialog) + EVT_CLOSE(PADConfigDialognJoy::OnClose) + EVT_BUTTON(ID_ABOUT, PADConfigDialognJoy::AboutClick) + EVT_BUTTON(ID_OK, PADConfigDialognJoy::OKClick) + EVT_BUTTON(ID_CANCEL, PADConfigDialognJoy::CancelClick) + EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK, PADConfigDialognJoy::NotebookPageChanged) + + // Change gamepad + EVT_COMBOBOX(IDC_JOYNAME, PADConfigDialognJoy::ChangeSettings) + EVT_CHECKBOX(IDC_ENABLE, PADConfigDialognJoy::ChangeSettings) + + // Other settings + EVT_CHECKBOX(IDC_SAVEBYID, PADConfigDialognJoy::ChangeSettings) + EVT_CHECKBOX(IDC_SHOWADVANCED, PADConfigDialognJoy::ChangeSettings) + EVT_CHECKBOX(IDCB_CHECKFOCUS, PADConfigDialognJoy::ChangeSettings) + EVT_COMBOBOX(IDCB_MAINSTICK_DIAGONAL, PADConfigDialognJoy::ChangeSettings) + EVT_COMBOBOX(IDC_CONTROLTYPE, PADConfigDialognJoy::ChangeSettings) + EVT_COMBOBOX(IDC_TRIGGERTYPE, PADConfigDialognJoy::ChangeSettings) + EVT_COMBOBOX(IDC_DEADZONE, PADConfigDialognJoy::ChangeSettings) + + // Rumble settings + EVT_CHECKBOX(IDC_ENABLERUMBLE, PADConfigDialognJoy::ChangeSettings) + EVT_COMBOBOX(IDC_RUMBLESTRENGTH, PADConfigDialognJoy::ChangeSettings) + + // Advanced settings + EVT_COMBOBOX(IDCB_MAINSTICK_RADIUS, PADConfigDialognJoy::ChangeSettings) + EVT_CHECKBOX(IDCB_MAINSTICK_CB_RADIUS, PADConfigDialognJoy::ChangeSettings) + EVT_COMBOBOX(IDCB_MAINSTICK_DIAGONAL, PADConfigDialognJoy::ChangeSettings) + EVT_CHECKBOX(IDCB_MAINSTICK_S_TO_C, PADConfigDialognJoy::ChangeSettings) + // C-stick + EVT_COMBOBOX(IDCB_CSTICK_RADIUS, PADConfigDialognJoy::ChangeSettings) + EVT_CHECKBOX(IDCB_CSTICK_CB_RADIUS, PADConfigDialognJoy::ChangeSettings) + EVT_COMBOBOX(IDCB_CSTICK_DIAGONAL, PADConfigDialognJoy::ChangeSettings) + EVT_CHECKBOX(IDCB_CSTICK_S_TO_C, PADConfigDialognJoy::ChangeSettings) + EVT_CHECKBOX(IDCB_FILTER_SETTINGS, PADConfigDialognJoy::ChangeSettings) + + EVT_BUTTON(IDB_SHOULDER_L, PADConfigDialognJoy::GetButtons) + EVT_BUTTON(IDB_SHOULDER_R, PADConfigDialognJoy::GetButtons) + EVT_BUTTON(IDB_BUTTON_A, PADConfigDialognJoy::GetButtons) + EVT_BUTTON(IDB_BUTTON_B, PADConfigDialognJoy::GetButtons) + EVT_BUTTON(IDB_BUTTON_X, PADConfigDialognJoy::GetButtons) + EVT_BUTTON(IDB_BUTTON_Y, PADConfigDialognJoy::GetButtons) + EVT_BUTTON(IDB_BUTTON_Z, PADConfigDialognJoy::GetButtons) + EVT_BUTTON(IDB_BUTTONSTART, PADConfigDialognJoy::GetButtons) + EVT_BUTTON(IDB_BUTTONHALFPRESS, PADConfigDialognJoy::GetButtons) + EVT_BUTTON(IDB_DPAD_UP, PADConfigDialognJoy::GetButtons) + EVT_BUTTON(IDB_DPAD_DOWN, PADConfigDialognJoy::GetButtons) + EVT_BUTTON(IDB_DPAD_LEFT, PADConfigDialognJoy::GetButtons) + EVT_BUTTON(IDB_DPAD_RIGHT, PADConfigDialognJoy::GetButtons) + EVT_BUTTON(IDB_ANALOG_MAIN_X, PADConfigDialognJoy::GetButtons) + EVT_BUTTON(IDB_ANALOG_MAIN_Y, PADConfigDialognJoy::GetButtons) + EVT_BUTTON(IDB_ANALOG_SUB_X, PADConfigDialognJoy::GetButtons) + EVT_BUTTON(IDB_ANALOG_SUB_Y, PADConfigDialognJoy::GetButtons) + + #if wxUSE_TIMER + EVT_TIMER(IDTM_CONSTANT, PADConfigDialognJoy::OnTimer) + EVT_TIMER(IDTM_BUTTON, PADConfigDialognJoy::OnButtonTimer) + #endif +END_EVENT_TABLE() + +PADConfigDialognJoy::PADConfigDialognJoy(wxWindow *parent, wxWindowID id, const wxString &title, + const wxPoint &position, const wxSize& size, long style) + : wxDialog(parent, id, title, position, size, style) +{ + // Define values + notebookpage = 0; + g_Pressed = 0; + Debugging = false; + m_TCDebugging = NULL; + ControlsCreated = false; + + // Create controls + CreateGUIControls(); + + #if wxUSE_TIMER + m_ConstantTimer = new wxTimer(this, IDTM_CONSTANT); + m_ButtonMappingTimer = new wxTimer(this, IDTM_BUTTON); + + // Reset values + GetButtonWaitingID = 0; GetButtonWaitingTimer = 0; + if (NumGoodPads) + { + // Start the constant timer + int TimesPerSecond = 10; + m_ConstantTimer->Start(1000 / TimesPerSecond); + } + #endif + + // wxEVT_KEY_DOWN is blocked for enter, tab and the directional keys + wxTheApp->Connect(wxID_ANY, wxEVT_KEY_UP, + wxKeyEventHandler(PADConfigDialognJoy::OnKeyDown), + (wxObject*)0, this); +} + +PADConfigDialognJoy::~PADConfigDialognJoy() +{ +// The statbar sample has this so I add this to +#if wxUSE_TIMER + if (m_ConstantTimer->IsRunning()) m_ConstantTimer->Stop(); +#endif +} + +void PADConfigDialognJoy::OnKeyDown(wxKeyEvent& event) +{ + g_Pressed = event.GetKeyCode(); +} + +// Close window +void PADConfigDialognJoy::OnClose(wxCloseEvent& event) +{ + // Allow wxWidgets to close the window + //event.Skip(); + + // Stop the timer + m_ConstantTimer->Stop(); + + // Close pads, unless we are running a game + //if (!g_EmulatorRunning) Shutdown(); + + EndModal(wxID_CLOSE); +} + +// Call about dialog +void PADConfigDialognJoy::AboutClick(wxCommandEvent& event) +{ + #ifdef _WIN32 + wxWindow win; + win.SetHWND((WXHWND)this->GetHWND()); + win.Enable(false); + + AboutBox frame(&win); + frame.ShowModal(); + + win.Enable(true); + win.SetHWND(0); + #else + AboutBox frame(NULL); + frame.ShowModal(); + #endif +} + +// Click OK +void PADConfigDialognJoy::OKClick(wxCommandEvent& event) +{ + if (event.GetId() == ID_OK) + { + DoSave(); // Save settings + if (Debugging) PanicAlert("Done"); + Close(); // Call OnClose() + } +} + +// Click Cancel +void PADConfigDialognJoy::CancelClick(wxCommandEvent& event) +{ + if (event.GetId() == ID_CANCEL) + { + // Forget all potential changes to PadMapping by loading the last saved settings + g_Config.Load(); + Close(); // Call OnClose() + } +} + +// Debugging +void PADConfigDialognJoy::LogMsg(const char* format, ...) +{ + #ifdef _WIN32 + if (Debugging) + { + const int MaxMsgSize = 1024*2; + char buffer[MaxMsgSize]; + va_list args; + va_start(args, format); + CharArrayFromFormatV(buffer, MaxMsgSize, format, args); + va_end(args); + + // Add timestamp + std::string StrTmp = buffer; + //StrTmp += Common::Timer::GetTimeFormatted(); + + if(m_TCDebugging) m_TCDebugging->AppendText(wxString::FromAscii(StrTmp.c_str())); + } + #endif +} + + + +// Save Settings +/* + + Saving is currently done when: + + 1. Closing the configuration window + 2. Changing the gamepad + 3. When the gamepad is enabled or disbled + 4. When we change saving mode (by Id or by slot) + + Input: ChangePad needs to be used when we change the pad for a slot. Slot needs to be used when + we only want to save changes to one slot. +*/ +void PADConfigDialognJoy::DoSave(bool ChangePad, int Slot) +{ + // Replace "" with "-1" before we are saving + ToBlank(false); + + if (ChangePad) + { + // Since we are selecting the pad to save to by the Id we can't update it when we change the pad + for(int i = 0; i < 4; i++) + SaveButtonMapping(i, true); + + // Now we can update the ID + PadMapping[notebookpage].ID = m_Joyname[notebookpage]->GetSelection(); + PadState[notebookpage].joy = joyinfo.at(PadMapping[notebookpage].ID).joy; + + g_Config.Save(Slot); + } + else + { + // Update PadMapping[] from the GUI controls + for(int i = 0; i < 4; i++) + SaveButtonMapping(i); + + g_Config.Save(Slot); + } + + // Then change it back to "" + ToBlank(); +} + +// On changing the SaveById option we update all pages +void PADConfigDialognJoy::OnSaveById() +{ + // Save current settings + DoSave(false, notebookpage); + + // Update the SaveByID setting and load the settings + g_Config.bSaveByID = m_CBSaveByID[notebookpage]->IsChecked(); + g_Config.Load(false, true); + + // Update the GUI from the now updated PadMapping[] + UpdateGUIAll(-1); +} + +// Change Joystick +/* Function: When changing the joystick we save and load the settings and update the PadMapping + and PadState array. PadState[].joy is the gamepad handle that is used to access the pad throughout + the plugin. Joyinfo[].joy is only used the first time the pads are checked. */ +void PADConfigDialognJoy::DoChangeJoystick() +{ + // Before changing the pad we save potential changes to the current pad (to support SaveByID) + DoSave(true); + + // Load the settings for the new Id + g_Config.Load(true); + UpdateGUI(notebookpage); // Update the GUI +} + +// Notebook page changed +void PADConfigDialognJoy::NotebookPageChanged(wxNotebookEvent& event) +{ + // Save current settings now, don't wait for OK + if (ControlsCreated && !g_Config.bSaveByID) + DoSave(false, notebookpage); + + // Update the global variable + notebookpage = event.GetSelection(); + + // Update GUI + if (ControlsCreated) + UpdateGUI(notebookpage); +} + +// Replace the harder to understand -1 with "" for the sake of user friendliness +void PADConfigDialognJoy::ToBlank(bool ToBlank) +{ + if (!ControlsCreated) return; + + for (int j = 0; j < 4; j++) + { + if(ToBlank) + { + for(int i = IDB_ANALOG_MAIN_X; i <= IDB_BUTTONHALFPRESS; i++) + #ifndef _WIN32 + if(!strcmp(GetButtonText(i, j).mb_str(), "-1")) SetButtonText(i, "", j); + #else + if(GetButtonText(i, j) == wxT("-1")) SetButtonText(i, "", j); + #endif + } + else + { + for(int i = IDB_ANALOG_MAIN_X; i <= IDB_BUTTONHALFPRESS; i++) + if(GetButtonText(i, j).IsEmpty()) SetButtonText(i, "-1", j); + } + } +} + + +// Change settings +void PADConfigDialognJoy::SetButtonTextAll(int id, const char *text) +{ + for (int i = 0; i < 4; i++) + { + // Safety check to avoid crash + if (joyinfo.size() > (u32)PadMapping[i].ID) + if (joyinfo[PadMapping[i].ID].Name == joyinfo[PadMapping[notebookpage].ID].Name) + SetButtonText(id, text, i); + }; +} + +void PADConfigDialognJoy::SaveButtonMappingAll(int Slot) +{ + for (int i = 0; i < 4; i++) + { + // This can occur when no gamepad is detected + if (joyinfo.size() > (u32)PadMapping[i].ID) + if (joyinfo[PadMapping[i].ID].Name == joyinfo[PadMapping[Slot].ID].Name) + SaveButtonMapping(i, false, Slot); + } +} + +void PADConfigDialognJoy::UpdateGUIAll(int Slot) +{ + if (Slot == -1) + { + for (int i = 0; i < 4; i++) + UpdateGUI(i); + } + else + { + for (int i = 0; i < 4; i++) + { + // Safety check to avoid crash + if (joyinfo.size() > (u32)PadMapping[i].ID) + if (joyinfo[PadMapping[i].ID].Name == joyinfo[PadMapping[Slot].ID].Name) + UpdateGUI(i); + } + } +} + +void PADConfigDialognJoy::ChangeSettings( wxCommandEvent& event ) +{ + switch(event.GetId()) + { + case IDC_SAVEBYID: + OnSaveById(); + break; + + case IDC_SHOWADVANCED: + g_Config.bShowAdvanced = m_CBShowAdvanced[notebookpage]->IsChecked(); + for(int i = 0; i < 4; i++) + m_CBShowAdvanced[i]->SetValue(g_Config.bShowAdvanced); + UpdateGUI(notebookpage); + // Resize the window without the need of any weird hack + SetSizerAndFit(m_MainSizer); + break; + + // Advanced settings + case IDCB_CHECKFOCUS: + g_Config.bCheckFocus = m_CBCheckFocus[notebookpage]->IsChecked(); + for(int i = 0; i < 4; i++) + m_CBCheckFocus[i]->SetValue(g_Config.bCheckFocus); + break; + case IDCB_FILTER_SETTINGS: + g_Config.bNoTriggerFilter = m_AdvancedMapFilter[notebookpage]->IsChecked(); + for(int i = 0; i < 4; i++) + m_AdvancedMapFilter[i]->SetValue(g_Config.bNoTriggerFilter); + break; + + case IDC_CONTROLTYPE: + if(!g_Config.bSaveByID) + { + PadMapping[notebookpage].controllertype = m_ControlType[notebookpage]->GetSelection(); + UpdateGUI(notebookpage); + } + case IDC_TRIGGERTYPE: + if(!g_Config.bSaveByID) + { + PadMapping[notebookpage].triggertype = m_TriggerType[notebookpage]->GetSelection(); + UpdateGUI(notebookpage); + } + break; + case IDC_ENABLERUMBLE: + PadMapping[notebookpage].rumble = m_Rumble[notebookpage]->IsChecked(); + break; + case IDC_RUMBLESTRENGTH: + g_Config.RumbleStrength = m_RStrength[notebookpage]->GetSelection(); + break; + case IDC_JOYNAME: + DoChangeJoystick(); + break; + case IDC_ENABLE: + PadMapping[notebookpage].enable = m_Enable[notebookpage]->IsChecked(); + UpdateGUI(notebookpage); + // Resize the window without the need of any weird hack + SetSizerAndFit(m_MainSizer); + break; + } + + // Update all slots that use this device + if(g_Config.bSaveByID) SaveButtonMappingAll(notebookpage); + //if(g_Config.bSaveByID) UpdateGUIAll(notebookpage); +} + + +// Update GUI +// Called from: CreateGUIControls(), ChangeControllertype() +void PADConfigDialognJoy::UpdateGUI(int _notebookpage) +{ + // If there are no good pads disable the entire notebook + if (NumGoodPads == 0) + { + m_Notebook->Enable(false); + return; + } + + // Update the GUI from PadMapping[] + UpdateGUIButtonMapping(_notebookpage); + + // Collect status + bool Hat = (PadMapping[_notebookpage].controllertype == InputCommon::CTL_DPAD_HAT); + long Left, Right; + m_JoyShoulderL[_notebookpage]->GetValue().ToLong(&Left); + m_JoyShoulderR[_notebookpage]->GetValue().ToLong(&Right); + bool AnalogTrigger = (Left >= 1000 || Right >= 1000); + #ifdef _WIN32 + bool XInput = XInput::IsConnected(PadMapping[_notebookpage].ID); + #endif + + // Hat type selection + m_JoyDpadUp[_notebookpage]->Show(!Hat); + m_JoyDpadLeft[_notebookpage]->Show(!Hat); + m_JoyDpadRight[_notebookpage]->Show(!Hat); + + m_bJoyDpadUp[_notebookpage]->Show(!Hat); + m_bJoyDpadLeft[_notebookpage]->Show(!Hat); + m_bJoyDpadRight[_notebookpage]->Show(!Hat); + + m_textDpadUp[_notebookpage]->Show(!Hat); + m_textDpadLeft[_notebookpage]->Show(!Hat); + m_textDpadRight[_notebookpage]->Show(!Hat); + + m_textDpadDown[_notebookpage]->SetLabel(Hat ? wxT("Select hat") : wxT("Down")); + m_bJoyDpadDown[_notebookpage]->SetToolTip(Hat ? + wxT("Select a hat by pressing the hat in any direction") : wxT("")); + + // General settings + m_CBSaveByID[_notebookpage]->SetValue(g_Config.bSaveByID); + m_CBShowAdvanced[_notebookpage]->SetValue(g_Config.bShowAdvanced); + m_CBCheckFocus[_notebookpage]->SetValue(g_Config.bCheckFocus); + m_AdvancedMapFilter[_notebookpage]->SetValue(g_Config.bNoTriggerFilter); + m_RStrength[_notebookpage]->SetSelection(g_Config.RumbleStrength); + + // Replace the harder to understand -1 with "" for the sake of user friendliness + ToBlank(); + + // Advanced settings + if (g_Config.bShowAdvanced) + { + if (PadMapping[_notebookpage].bRadiusOnOff) m_CoBRadius[_notebookpage]->Enable(true); + else m_CoBRadius[_notebookpage]->Enable(false); + if (PadMapping[_notebookpage].bSquareToCircle) m_CoBDiagonal[_notebookpage]->Enable(true); + else m_CoBDiagonal[_notebookpage]->Enable(false); + if (PadMapping[_notebookpage].bRadiusOnOffC) m_CoBRadiusC[_notebookpage]->Enable(true); + else m_CoBRadiusC[_notebookpage]->Enable(false); + if (PadMapping[_notebookpage].bSquareToCircleC) m_CoBDiagonalC[_notebookpage]->Enable(true); + else m_CoBDiagonalC[_notebookpage]->Enable(false); + } + + m_sKeys[_notebookpage]->Show(PadMapping[_notebookpage].enable); + m_sSettings[_notebookpage]->Show(PadMapping[_notebookpage].enable); + m_sMainRight[_notebookpage]->Show(g_Config.bShowAdvanced && PadMapping[_notebookpage].enable); + + // Repaint the background + m_Controller[_notebookpage]->Refresh(); +} + + +// Paint the background +void PADConfigDialognJoy::OnPaint(wxPaintEvent &event) +{ + event.Skip(); + + wxPaintDC dcWin(m_pKeys[notebookpage]); + PrepareDC( dcWin ); + dcWin.DrawBitmap( WxStaticBitmap1_BITMAP, 94, 0, true ); +} + +// Populate the config window +void PADConfigDialognJoy::CreateGUIControls() +{ + INFO_LOG(PAD, "CreateGUIControls()"); + + #ifndef _DEBUG + SetTitle(wxT("Configure: nJoy Input Plugin")); + #else + SetTitle(wxT("Configure: nJoy (Debug) Input Plugin")); + #endif + + SetIcon(wxNullIcon); + +#ifndef _WIN32 + // Force a 8pt font so that it looks more or less "correct" regardless of the default font setting + wxFont f(8, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL); + SetFont(f); +#endif + + // Buttons + m_About = new wxButton(this, ID_ABOUT, wxT("About"), wxDefaultPosition, wxSize(75, 25), 0, wxDefaultValidator, wxT("About")); + m_OK = new wxButton(this, ID_OK, wxT("OK"), wxDefaultPosition, wxSize(75, 25), 0, wxDefaultValidator, wxT("OK")); + m_Cancel = new wxButton(this, ID_CANCEL, wxT("Cancel"), wxDefaultPosition, wxSize(75, 25), 0, wxDefaultValidator, wxT("Cancel")); + m_OK->SetToolTip( + wxT("Save your settings and close this window.") + ); + m_Cancel->SetToolTip( + wxT("Close this window without saving your changes.") + ); + + // Notebook + m_Notebook = new wxNotebook(this, ID_NOTEBOOK, wxDefaultPosition, wxDefaultSize); + + // Controller pages + m_Controller[0] = new wxPanel(m_Notebook, ID_CONTROLLERPAGE1, wxDefaultPosition, wxDefaultSize); + m_Notebook->AddPage(m_Controller[0], wxT("Controller 1")); + m_Controller[1] = new wxPanel(m_Notebook, ID_CONTROLLERPAGE2, wxDefaultPosition, wxDefaultSize); + m_Notebook->AddPage(m_Controller[1], wxT("Controller 2")); + m_Controller[2] = new wxPanel(m_Notebook, ID_CONTROLLERPAGE3, wxDefaultPosition, wxDefaultSize); + m_Notebook->AddPage(m_Controller[2], wxT("Controller 3")); + m_Controller[3] = new wxPanel(m_Notebook, ID_CONTROLLERPAGE4, wxDefaultPosition, wxDefaultSize); + m_Notebook->AddPage(m_Controller[3], wxT("Controller 4")); + + + // Define bitmap for EVT_PAINT + WxStaticBitmap1_BITMAP = wxBitmap(ConfigBox_WxStaticBitmap1_XPM); + + // Search for devices and add them to the device list + wxArrayString arrayStringFor_Joyname; // The string array + if (NumGoodPads > 0) + { + for(int x = 0; (u32)x < joyinfo.size(); x++) + { + arrayStringFor_Joyname.Add(wxString::FromAscii(joyinfo[x].Name.c_str())); + } + } + else + { + arrayStringFor_Joyname.Add(wxString::FromAscii("")); + } + + // Populate the DPad type and Trigger type list + wxArrayString wxAS_DPadType; + wxAS_DPadType.Add(wxString::FromAscii(DPadType[InputCommon::CTL_DPAD_HAT])); + wxAS_DPadType.Add(wxString::FromAscii(DPadType[InputCommon::CTL_DPAD_CUSTOM])); + + wxArrayString wxAS_TriggerType; + wxAS_TriggerType.Add(wxString::FromAscii(TriggerType[InputCommon::CTL_TRIGGER_SDL])); + wxAS_TriggerType.Add(wxString::FromAscii(TriggerType[InputCommon::CTL_TRIGGER_XINPUT])); + + // Populate the deadzone list and the Rumble Strength + + char buffer[8]; + + wxArrayString wxAS_RumbleStrength; + for (int i = 1; i < 11; i++) + { + sprintf (buffer, "%d %%", i*10); + wxAS_RumbleStrength.Add(wxString::FromAscii(buffer)); + } + + wxArrayString arrayStringFor_Deadzone; + for(int x = 1; x <= 100; x++) + { + sprintf (buffer, "%d %%", x); + arrayStringFor_Deadzone.Add(wxString::FromAscii(buffer)); + } + + // Populate all four pages + for(int i = 0; i < 4; i++) + { + // Populate keys sizer + // Set relative values for the keys + int t = -75; // Top + int l = -4; // Left + m_sKeys[i] = new wxStaticBoxSizer( wxVERTICAL, m_Controller[i], wxT("Keys")); + m_pKeys[i] = new wxPanel(m_Controller[i], ID_KEYSPANEL1 + i, wxDefaultPosition, wxSize(600, 400), 0); + //m_sKeys[i] = new wxStaticBox (m_Controller[i], IDG_JOYSTICK, wxT("Keys"), wxDefaultPosition, wxSize(608, 500)); + m_sKeys[i]->Add(m_pKeys[i], 0, (wxALL), 0); // margin = 0 + + // GameCube controller picture + // TODO: Controller image + // Placeholder instead of bitmap + // m_PlaceholderBMP[i] = new wxTextCtrl(m_Controller[i], ID_CONTROLLERPICTURE, wxT("BITMAP HERE PLZ KTHX!"), wxPoint(98, 75), wxSize(423, 306), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("BITMAP HERE PLZ KTHX!")); + // m_PlaceholderBMP[i]->Enable(false); + + /* You can enable the bitmap here. But it loads überslow on init... (only in windows, linux + seems to load it fast!) AAaaand the XPM file (256 colours) looks crappier than the real bitmap... + so maybe we can find a way to use a bitmap? */ + //m_controllerimage[i] = new wxStaticBitmap(m_pKeys[i], ID_CONTROLLERPICTURE, WxStaticBitmap1_BITMAP, wxPoint(l + 98, t + 75), wxSize(421,304)); + //m_controllerimage[i] = new wxBitmap( WxStaticBitmap1_BITMAP ); + + // Paint background. This allows objects to be visible on top of the picture + m_pKeys[i]->Connect(wxID_ANY, wxEVT_PAINT, + wxPaintEventHandler(PADConfigDialognJoy::OnPaint), + (wxObject*)0, this); + + + // Keys objects + // Left and right shoulder buttons + m_JoyShoulderL[i] = new wxTextCtrl(m_pKeys[i], ID_SHOULDER_L, wxT("0"), wxPoint(l + 6, t + 80), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); + m_JoyShoulderL[i]->Enable(false); + m_bJoyShoulderL[i] = new wxButton(m_pKeys[i], IDB_SHOULDER_L, wxEmptyString, wxPoint(l + 70, t + 82), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); + m_JoyShoulderR[i] = new wxTextCtrl(m_pKeys[i], ID_SHOULDER_R, wxT("0"), wxPoint(l + 552, t + 106), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); + m_JoyShoulderR[i]->Enable(false); + m_bJoyShoulderR[i] = new wxButton(m_pKeys[i], IDB_SHOULDER_R, wxEmptyString, wxPoint(l + 526, t + 108), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); + // Left analog + int ALt = 169; int ALw = ALt + 14; int ALb = ALw + 2; // Set offset + m_JoyAnalogMainX[i] = new wxTextCtrl(m_pKeys[i], ID_ANALOG_MAIN_X, wxT("0"), wxPoint(l + 6, t + ALw), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); + m_JoyAnalogMainX[i]->Enable(false); + m_JoyAnalogMainY[i] = new wxTextCtrl(m_pKeys[i], ID_ANALOG_MAIN_Y, wxT("0"), wxPoint(l + 6, t + ALw + 36), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); + m_JoyAnalogMainY[i]->Enable(false); + m_bJoyAnalogMainX[i] = new wxButton(m_pKeys[i], IDB_ANALOG_MAIN_X, wxEmptyString, wxPoint(l + 70, t + ALb), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); + m_bJoyAnalogMainY[i] = new wxButton(m_pKeys[i], IDB_ANALOG_MAIN_Y, wxEmptyString, wxPoint(l + 70, t + ALb + 36), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); + m_textMainX[i] = new wxStaticText(m_pKeys[i], IDT_ANALOG_MAIN_X, wxT("X-axis"), wxPoint(l + 6, t + ALt), wxDefaultSize, 0, wxT("X-axis")); + m_textMainY[i] = new wxStaticText(m_pKeys[i], IDT_ANALOG_MAIN_Y, wxT("Y-axis"), wxPoint(l + 6, t + ALt + 36), wxDefaultSize, 0, wxT("Y-axis")); + + // D-Pad + int DPt = 250; int DPw = DPt + 14; int DPb = DPw + 2; // Set offset + m_JoyDpadUp[i] = new wxTextCtrl(m_pKeys[i], ID_DPAD_UP, wxT("0"), wxPoint(l + 6, t + DPw), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); + m_JoyDpadDown[i] = new wxTextCtrl(m_pKeys[i], ID_DPAD_DOWN, wxT("0"), wxPoint(l + 6, t + DPw + 36*1), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); + m_JoyDpadLeft[i] = new wxTextCtrl(m_pKeys[i], ID_DPAD_LEFT, wxT("0"), wxPoint(l + 6, t + DPw + 36*2), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); + m_JoyDpadRight[i] = new wxTextCtrl(m_pKeys[i], ID_DPAD_RIGHT, wxT("0"), wxPoint(l + 6, t + DPw + 36*3), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); + m_JoyDpadUp[i]->Enable(false); + m_JoyDpadDown[i]->Enable(false); + m_JoyDpadLeft[i]->Enable(false); + m_JoyDpadRight[i]->Enable(false); + m_bJoyDpadUp[i] = new wxButton(m_pKeys[i], IDB_DPAD_UP, wxEmptyString, wxPoint(l + 70, t + DPb + 36*0), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); + m_bJoyDpadDown[i] = new wxButton(m_pKeys[i], IDB_DPAD_DOWN, wxEmptyString, wxPoint(l + 70, t + DPb + 36*1), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); + m_bJoyDpadLeft[i] = new wxButton(m_pKeys[i], IDB_DPAD_LEFT, wxEmptyString, wxPoint(l + 70, t + DPb + 36*2), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); + m_bJoyDpadRight[i] = new wxButton(m_pKeys[i], IDB_DPAD_RIGHT, wxEmptyString, wxPoint(l + 70, t + DPb + 36*3), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); + m_textDpadUp[i] = new wxStaticText(m_pKeys[i], IDT_DPAD_UP, wxT("Up"), wxPoint(l + 6, t + DPt + 36*0), wxDefaultSize, 0, wxT("Up")); + m_textDpadDown[i] = new wxStaticText(m_pKeys[i], IDT_DPAD_DOWN, wxT("Down"), wxPoint(l + 6, t + DPt + 36*1), wxDefaultSize, 0, wxT("Down")); + m_textDpadLeft[i] = new wxStaticText(m_pKeys[i], IDT_DPAD_LEFT, wxT("Left"), wxPoint(l + 6, t + DPt + 36*2), wxDefaultSize, 0, wxT("Left")); + m_textDpadRight[i] = new wxStaticText(m_pKeys[i], IDT_DPAD_RIGHT, wxT("Right"), wxPoint(l + 6, t + DPt + 36*3), wxDefaultSize, 0, wxT("Right")); + + // Buttons + m_JoyButtonA[i] = new wxTextCtrl(m_pKeys[i], ID_BUTTON_A, wxT("0"), wxPoint(l + 552, t + 280), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); + m_JoyButtonA[i]->Enable(false); + m_JoyButtonB[i] = new wxTextCtrl(m_pKeys[i], ID_BUTTON_B, wxT("0"), wxPoint(l + 552, t + 80), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); + m_JoyButtonB[i]->Enable(false); + m_JoyButtonX[i] = new wxTextCtrl(m_pKeys[i], ID_BUTTON_X, wxT("0"), wxPoint(l + 552, t + 242), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); + m_JoyButtonX[i]->Enable(false); + m_JoyButtonY[i] = new wxTextCtrl(m_pKeys[i], ID_BUTTON_Y, wxT("0"), wxPoint(l + 552, t + 171), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); + m_JoyButtonY[i]->Enable(false); + m_JoyButtonZ[i] = new wxTextCtrl(m_pKeys[i], ID_BUTTON_Z, wxT("0"), wxPoint(l + 552, t + 145), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); + m_JoyButtonZ[i]->Enable(false); + m_bJoyButtonA[i] = new wxButton(m_pKeys[i], IDB_BUTTON_A, wxEmptyString, wxPoint(l + 526, t + 282), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); + m_bJoyButtonB[i] = new wxButton(m_pKeys[i], IDB_BUTTON_B, wxEmptyString, wxPoint(l + 526, t + 82), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); + m_bJoyButtonX[i] = new wxButton(m_pKeys[i], IDB_BUTTON_X, wxEmptyString, wxPoint(l + 526, t + 244), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); + m_bJoyButtonY[i] = new wxButton(m_pKeys[i], IDB_BUTTON_Y, wxEmptyString, wxPoint(l + 526, t + 173), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); + m_bJoyButtonZ[i] = new wxButton(m_pKeys[i], IDB_BUTTON_Z, wxEmptyString, wxPoint(l + 526, t + 147), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); + + // C-buttons + m_JoyAnalogSubX[i] = new wxTextCtrl(m_pKeys[i], ID_ANALOG_SUB_X, wxT("0"), wxPoint(l + 552, t + 336), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); + m_JoyAnalogSubX[i]->Enable(false); + m_JoyAnalogSubY[i] = new wxTextCtrl(m_pKeys[i], ID_ANALOG_SUB_Y, wxT("0"), wxPoint(l + 552, t + 373), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); + m_JoyAnalogSubY[i]->Enable(false); + m_bJoyAnalogSubX[i] = new wxButton(m_pKeys[i], IDB_ANALOG_SUB_X, wxEmptyString, wxPoint(l + 526, t + 338), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); + m_bJoyAnalogSubY[i] = new wxButton(m_pKeys[i], IDB_ANALOG_SUB_Y, wxEmptyString, wxPoint(l + 526, t + 375), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); + m_textSubX[i] = new wxStaticText(m_pKeys[i], IDT_ANALOG_SUB_X, wxT("X-axis"), wxPoint(l + 552, t + 321), wxDefaultSize, 0, wxT("X-axis")); + m_textSubY[i] = new wxStaticText(m_pKeys[i], IDT_ANALOG_SUB_Y, wxT("Y-axis"), wxPoint(l + 552, t + 358), wxDefaultSize, 0, wxT("Y-axis")); + + // Start button + m_bJoyButtonStart[i] = new wxButton(m_pKeys[i], IDB_BUTTONSTART, wxEmptyString, wxPoint(l + 284, t + 365), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); + m_JoyButtonStart[i] = new wxTextCtrl(m_pKeys[i], ID_BUTTONSTART, wxT("0"), wxPoint(l + 220, t + 363), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); + m_JoyButtonStart[i]->Enable(false); + + // Website text + #ifdef _WIN32 + m_textWebsite[i] = new wxStaticText(m_pKeys[i], IDT_WEBSITE, wxT("www.multigesture.net"), wxPoint(l + 400, t + 380), wxDefaultSize, 0, wxT("www.multigesture.net")); + #else + m_textWebsite[i] = new wxStaticText(m_Controller[i], IDT_WEBSITE, wxT("www.multigesture.net"), wxPoint(l + 480, t + 418), wxDefaultSize, 0, wxT("www.multigesture.net")); + #endif + + + // Populate Controller sizer + // Groups + #ifdef _WIN32 + m_Joyname[i] = new wxComboBox(m_Controller[i], IDC_JOYNAME, arrayStringFor_Joyname[0], wxDefaultPosition, wxSize(300, 25), arrayStringFor_Joyname, wxCB_READONLY); + #else + m_Joyname[i] = new wxComboBox(m_Controller[i], IDC_JOYNAME, arrayStringFor_Joyname[0], wxDefaultPosition, wxSize(300, 25), arrayStringFor_Joyname, 0, wxDefaultValidator, wxT("m_Joyname")); + #endif + m_Joyname[i]->SetToolTip(wxT("Save your settings and configure another joypad")); + + m_Enable[i] = new wxCheckBox(m_Controller[i], IDC_ENABLE, wxT("Pad Enabled"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); + m_Enable[i]->SetToolTip(wxT("Enable this pad to send input events to game")); + + m_gJoyname[i] = new wxStaticBoxSizer (wxHORIZONTAL, m_Controller[i], wxT("Controller")); + m_gJoyname[i]->Add(m_Joyname[i], 0, wxEXPAND | (wxLEFT | wxRIGHT), 5); + m_gJoyname[i]->Add(m_Enable[i], 0, wxEXPAND | (wxLEFT | wxRIGHT), 5); + + // General settings + + // General settings 1 + m_JoyButtonHalfpress[i] = new wxTextCtrl(m_Controller[i], ID_BUTTONHALFPRESS, wxT("0"), wxDefaultPosition, wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0")); + m_JoyButtonHalfpress[i]->Enable(false); + m_bJoyButtonHalfpress[i] = new wxButton(m_Controller[i], IDB_BUTTONHALFPRESS, wxEmptyString, wxDefaultPosition, wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString); + #ifdef _WIN32 + m_Deadzone[i] = new wxComboBox(m_Controller[i], IDC_DEADZONE, wxEmptyString, wxDefaultPosition, wxSize(59, 21), arrayStringFor_Deadzone, wxCB_READONLY, wxDefaultValidator, wxT("m_Deadzone")); + m_textDeadzone[i] = new wxStaticText(m_Controller[i], IDT_DEADZONE, wxT("Deadzone")); + m_textHalfpress[i] = new wxStaticText(m_Controller[i], IDT_BUTTONHALFPRESS, wxT("Half press")); + #else + m_Deadzone[i] = new wxComboBox(m_Controller[i], IDC_DEADZONE, wxEmptyString, wxPoint(167, 398), wxSize(80, 25), arrayStringFor_Deadzone, wxCB_READONLY, wxDefaultValidator, wxT("m_Deadzone")); + m_textDeadzone[i] = new wxStaticText(m_Controller[i], IDT_DEADZONE, wxT("Deadzone"), wxPoint(105, 404), wxDefaultSize, 0, wxT("Deadzone")); + m_textHalfpress[i] = new wxStaticText(m_Controller[i], IDT_BUTTONHALFPRESS, wxT("Half press"), wxPoint(105, 428), wxDefaultSize, 0, wxT("Half press")); + #endif + + // Populate general settings 1 + m_gExtrasettings[i] = new wxStaticBoxSizer( wxVERTICAL, m_Controller[i], wxT("Extra settings")); + m_gGBExtrasettings[i] = new wxGridBagSizer(0, 0); + m_gGBExtrasettings[i]->Add(m_textDeadzone[i], wxGBPosition(0, 0), wxGBSpan(1, 1), (wxRIGHT | wxTOP), 3); + m_gGBExtrasettings[i]->Add(m_Deadzone[i], wxGBPosition(0, 1), wxGBSpan(1, 1), (wxBOTTOM), 2); + m_gGBExtrasettings[i]->Add(m_textHalfpress[i], wxGBPosition(1, 0), wxGBSpan(1, 1), (wxRIGHT | wxTOP), 3); + m_gGBExtrasettings[i]->Add(m_JoyButtonHalfpress[i], wxGBPosition(1, 1), wxGBSpan(1, 1), (wxALL), 0); + m_gGBExtrasettings[i]->Add(m_bJoyButtonHalfpress[i], wxGBPosition(1, 2), wxGBSpan(1, 1), (wxLEFT | wxTOP), 2); + m_gExtrasettings[i]->Add(m_gGBExtrasettings[i], 0, wxEXPAND | wxALL, 3); + + // Create general settings 2 (controller typ) + m_TSControltype[i] = new wxStaticText(m_Controller[i], IDT_DPADTYPE, wxT("D-Pad")); + m_TSTriggerType[i] = new wxStaticText(m_Controller[i], IDT_TRIGGERTYPE, wxT("Trigger")); + m_ControlType[i] = new wxComboBox(m_Controller[i], IDC_CONTROLTYPE, wxAS_DPadType[0], wxDefaultPosition, wxDefaultSize, wxAS_DPadType, wxCB_READONLY); + m_TriggerType[i] = new wxComboBox(m_Controller[i], IDC_TRIGGERTYPE, wxAS_TriggerType[0], wxDefaultPosition, wxDefaultSize, wxAS_TriggerType, wxCB_READONLY); + + // Populate general settings 2 (controller typ) + m_gGenSettings[i] = new wxStaticBoxSizer( wxVERTICAL, m_Controller[i], wxT("D-pad and trigger")); + m_gGBGenSettings[i] = new wxGridBagSizer(0, 0); + m_gGBGenSettings[i]->Add(m_TSControltype[i], wxGBPosition(0, 0), wxGBSpan(1, 1), (wxTOP), 4); + m_gGBGenSettings[i]->Add(m_ControlType[i], wxGBPosition(0, 1), wxGBSpan(1, 1), (wxBOTTOM | wxLEFT), 2); + m_gGBGenSettings[i]->Add(m_TSTriggerType[i], wxGBPosition(1, 0), wxGBSpan(1, 1), (wxTOP), 4); + m_gGBGenSettings[i]->Add(m_TriggerType[i], wxGBPosition(1, 1), wxGBSpan(1, 1), (wxLEFT), 2); + m_gGenSettings[i]->Add(m_gGBGenSettings[i], 0, wxEXPAND | wxALL, 3); + + // Create objects for general settings 3 + m_gGenSettingsID[i] = new wxStaticBoxSizer( wxVERTICAL, m_Controller[i], wxT("Settings") ); + m_CBSaveByID[i] = new wxCheckBox(m_Controller[i], IDC_SAVEBYID, wxT("Save by ID"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); + m_CBSaveByID[i]->Enable(false); + m_CBShowAdvanced[i] = new wxCheckBox(m_Controller[i], IDC_SHOWADVANCED, wxT("Show advanced settings"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); + + // Populate general settings 3 + m_gGenSettingsID[i]->Add(m_CBSaveByID[i], 0, wxEXPAND | wxALL, 3); + m_gGenSettingsID[i]->Add(m_CBShowAdvanced[i], 0, wxEXPAND | wxALL, 3); + + // Create objects for Rumble settings (general 4) + m_RStrength[i] = new wxComboBox(m_Controller[i], IDC_RUMBLESTRENGTH, wxAS_RumbleStrength[0], wxDefaultPosition, wxSize(85, 20), wxAS_RumbleStrength, wxCB_READONLY); + m_Rumble[i] = new wxCheckBox(m_Controller[i], IDC_ENABLERUMBLE, wxT("Enable Rumble"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); +#if !SDL_VERSION_ATLEAST(1, 3, 0) && !defined(_WIN32) + m_Rumble[i]->Disable(); +#endif + + // Populate general settings 4 + m_gRumble[i] = new wxStaticBoxSizer( wxVERTICAL, m_Controller[i], wxT("Rumble settings")); + m_gGBRumble[i] = new wxGridBagSizer(0, 0); + m_gGBRumble[i]->Add(m_Rumble[i], wxGBPosition(0, 0), wxGBSpan(1, 1), (wxTOP), 1); + m_gGBRumble[i]->Add(m_RStrength[i], wxGBPosition(1, 0), wxGBSpan(1, 1), (wxTOP), 6); + m_gRumble[i]->Add(m_gGBRumble[i], 0, wxEXPAND | wxALL, 3); + + // Create tooltips + m_ControlType[i]->SetToolTip(wxT( + "Use a 'hat' on your gamepad or configure a custom button for each direction." + )); + m_TriggerType[i]->SetToolTip(wxT( + "Select XInput if you want the triggers to work with the XBox 360 pad." + )); + m_CBSaveByID[i]->SetToolTip(wxString::Format( + wxT("Map these settings to the selected controller device instead of to the") + wxT("\nselected slot (1, 2, 3 or 4). This may be a more convenient way") + wxT("\nto save your settings if you have multiple controllers.") + , i+1 + )); + + // Populate settings + m_sSettings[i] = new wxBoxSizer ( wxHORIZONTAL ); + m_sSettings[i]->Add(m_gExtrasettings[i], 0, wxEXPAND | wxALL, 0); + m_sSettings[i]->Add(m_gGenSettings[i], 0, wxEXPAND | wxLEFT, 5); + m_sSettings[i]->Add(m_gGenSettingsID[i], 0, wxEXPAND | wxLEFT, 5); + m_sSettings[i]->Add(m_gRumble[i], 0, wxEXPAND | wxLEFT, 5); + + // Advanced settings + + // Input status controls + + // Input status text + CreateAdvancedControls(i); + + // Main-stick sizers + m_GBAdvancedMainStick[i] = new wxGridBagSizer(0, 0); + m_GBAdvancedMainStick[i]->Add(m_pInStatus[i], wxGBPosition(0, 0), wxGBSpan(1, 1), wxALL, 0); + m_GBAdvancedMainStick[i]->Add(m_pOutStatus[i], wxGBPosition(0, 1), wxGBSpan(1, 1), wxLEFT, 5); + m_GBAdvancedMainStick[i]->Add(m_TStatusIn[i], wxGBPosition(1, 0), wxGBSpan(1, 1), wxALL, 0); + m_GBAdvancedMainStick[i]->Add(m_TStatusOut[i], wxGBPosition(1, 1), wxGBSpan(1, 1), wxLEFT, 5); + // Cstick sizers + m_GBAdvancedCStick[i] = new wxGridBagSizer(0, 0); + m_GBAdvancedCStick[i]->Add(m_pInStatusC[i], wxGBPosition(0, 0), wxGBSpan(1, 1), wxALL, 0); + m_GBAdvancedCStick[i]->Add(m_pOutStatusC[i], wxGBPosition(0, 1), wxGBSpan(1, 1), wxLEFT, 5); + m_GBAdvancedCStick[i]->Add(m_TStatusInC[i], wxGBPosition(1, 0), wxGBSpan(1, 1), wxALL, 0); + m_GBAdvancedCStick[i]->Add(m_TStatusOutC[i], wxGBPosition(1, 1), wxGBSpan(1, 1), wxLEFT, 5); + // Add sizers + m_gStatusIn[i]->Add(m_GBAdvancedMainStick[i], 0, wxLEFT, 5); + m_gStatusInC[i]->Add(m_GBAdvancedCStick[i], 0, wxLEFT, 5); + + // Populate input status settings + + // The drop down menu + m_gStatusInSettings[i] = new wxStaticBoxSizer( wxVERTICAL, m_Controller[i], wxT("Main-stick settings")); + m_gStatusInSettingsRadiusH[i] = new wxBoxSizer(wxHORIZONTAL); + m_gStatusInSettingsC[i] = new wxStaticBoxSizer( wxVERTICAL, m_Controller[i], wxT("C-stick settings")); + m_gStatusInSettingsRadiusHC[i] = new wxBoxSizer(wxHORIZONTAL); + wxArrayString asRadius; + asRadius.Add(wxT("100%")); + asRadius.Add(wxT("90%")); + asRadius.Add(wxT("80%")); + asRadius.Add(wxT("70%")); + asRadius.Add(wxT("60%")); + asRadius.Add(wxT("50%")); + asRadius.Add(wxT("40%")); + m_CoBRadius[i] = new wxComboBox(m_Controller[i], IDCB_MAINSTICK_RADIUS, asRadius[0], wxDefaultPosition, wxDefaultSize, asRadius, wxCB_READONLY); + m_CoBRadiusC[i] = new wxComboBox(m_Controller[i], IDCB_CSTICK_RADIUS, asRadius[0], wxDefaultPosition, wxDefaultSize, asRadius, wxCB_READONLY); + + // The checkbox + m_CBRadius[i] = new wxCheckBox(m_Controller[i], IDCB_MAINSTICK_CB_RADIUS, wxT("Radius")); + m_CBRadiusC[i] = new wxCheckBox(m_Controller[i], IDCB_CSTICK_CB_RADIUS, wxT("Radius")); + wxString CBRadiusToolTip = wxT("This will reduce the stick radius."); + m_CBRadius[i]->SetToolTip(CBRadiusToolTip); + m_CBRadiusC[i]->SetToolTip(CBRadiusToolTip); + + // The drop down menu); + m_gStatusInSettingsH[i] = new wxBoxSizer(wxHORIZONTAL); + m_gStatusInSettingsHC[i] = new wxBoxSizer(wxHORIZONTAL); + wxArrayString asStatusInSet; + asStatusInSet.Add(wxT("100%")); + asStatusInSet.Add(wxT("95%")); + asStatusInSet.Add(wxT("90%")); + asStatusInSet.Add(wxT("85%")); + asStatusInSet.Add(wxT("80%")); + asStatusInSet.Add(wxT("75%")); + m_CoBDiagonal[i] = new wxComboBox(m_Controller[i], IDCB_MAINSTICK_DIAGONAL, asStatusInSet[0], wxDefaultPosition, wxDefaultSize, asStatusInSet, wxCB_READONLY); + m_CoBDiagonalC[i] = new wxComboBox(m_Controller[i], IDCB_CSTICK_DIAGONAL, asStatusInSet[0], wxDefaultPosition, wxDefaultSize, asStatusInSet, wxCB_READONLY); + + // The checkbox + m_CBS_to_C[i] = new wxCheckBox(m_Controller[i], IDCB_MAINSTICK_S_TO_C, wxT("Diagonal")); + m_CBS_to_CC[i] = new wxCheckBox(m_Controller[i], IDCB_CSTICK_S_TO_C, wxT("Diagonal")); + wxString CBS_to_CToolTip = + wxT("This will convert a square stick radius to a circle stick radius similar to the octagonal area that the original GameCube pad produce.") + wxT(" To produce a smooth circle in the 'Out' window you have to manually set") + wxT(" your diagonal values from the 'In' window in the drop down menu."); + m_CBS_to_C[i]->SetToolTip(CBS_to_CToolTip); + m_CBS_to_CC[i]->SetToolTip(CBS_to_CToolTip); + + // Populate sizers + m_gStatusInSettings[i]->Add(m_gStatusInSettingsRadiusH[i], 0, (wxLEFT | wxRIGHT | wxBOTTOM), 4); + m_gStatusInSettings[i]->Add(m_gStatusInSettingsH[i], 0, (wxLEFT | wxRIGHT | wxBOTTOM), 4); + // C-stick + m_gStatusInSettingsC[i]->Add(m_gStatusInSettingsRadiusHC[i], 0, (wxLEFT | wxRIGHT | wxBOTTOM), 4); + m_gStatusInSettingsC[i]->Add(m_gStatusInSettingsHC[i], 0, (wxLEFT | wxRIGHT | wxBOTTOM), 4); + + m_gStatusInSettingsRadiusH[i]->Add(m_CBRadius[i], 0, wxLEFT | wxTOP, 3); + m_gStatusInSettingsRadiusH[i]->Add(m_CoBRadius[i], 0, wxLEFT, 3); + m_gStatusInSettingsH[i]->Add(m_CBS_to_C[i], 0, wxLEFT | wxTOP, 3); + m_gStatusInSettingsH[i]->Add(m_CoBDiagonal[i], 0, wxLEFT, 3); + // C-stick + m_gStatusInSettingsRadiusHC[i]->Add(m_CBRadiusC[i], 0, wxLEFT | wxTOP, 3); + m_gStatusInSettingsRadiusHC[i]->Add(m_CoBRadiusC[i], 0, wxLEFT, 3); + m_gStatusInSettingsHC[i]->Add(m_CBS_to_CC[i], 0, wxLEFT | wxTOP, 3); + m_gStatusInSettingsHC[i]->Add(m_CoBDiagonalC[i], 0, wxLEFT, 3); + + // The trigger values + m_gStatusTriggers[i] = new wxStaticBoxSizer( wxVERTICAL, m_Controller[i], wxT("Trigger values")); + m_TStatusTriggers[i] = new wxStaticText(m_Controller[i], IDT_TRIGGERS, wxT("Left: Right:")); + m_gStatusTriggers[i]->Add(m_TStatusTriggers[i], 0, (wxALL), 4); + + m_gStatusAdvancedSettings[i] = new wxStaticBoxSizer( wxVERTICAL, m_Controller[i], wxT("Advanced settings")); + m_CBCheckFocus[i] = new wxCheckBox(m_Controller[i], IDCB_CHECKFOCUS, wxT("Allow out of focus input"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); + m_AdvancedMapFilter[i] = new wxCheckBox(m_Controller[i], IDCB_FILTER_SETTINGS , wxT("No trigger filter")); + m_gStatusAdvancedSettings[i]->Add(m_CBCheckFocus[i], 0, (wxALL), 4); + m_gStatusAdvancedSettings[i]->Add(m_AdvancedMapFilter[i], 0, (wxALL), 4); + + // Tool tips + m_CBCheckFocus[i]->SetToolTip(wxT( + "Allow gamepad input even when Dolphin is not in focus. Out of focus keyboard input is never allowed.")); + m_AdvancedMapFilter[i]->SetToolTip( + wxT("This will allow you to map a digital axis to the main stick or the C-stick. If you don't have") + wxT(" any analog triggers that will be automatically set when the trigger filter is off.") + ); + + + // Populate sizers + + // Populate main left sizer + m_sMainLeft[i] = new wxBoxSizer(wxVERTICAL); + m_sMainLeft[i]->Add(m_gJoyname[i], 0, wxEXPAND | (wxALL), 5); + m_sMainLeft[i]->Add(m_sKeys[i], 1, wxEXPAND | (wxLEFT | wxRIGHT), 5); + m_sMainLeft[i]->Add(m_sSettings[i], 0, wxEXPAND | (wxALL), 5); + + // Populate main right sizer + m_sMainRight[i] = new wxBoxSizer(wxVERTICAL); + m_sMainRight[i]->Add(m_gStatusIn[i], 0, wxEXPAND | (wxLEFT), 2); + m_sMainRight[i]->Add(m_gStatusInSettings[i], 0, wxEXPAND | (wxLEFT | wxTOP), 2); + m_sMainRight[i]->Add(m_gStatusInC[i], 0, wxEXPAND | (wxLEFT), 2); + m_sMainRight[i]->Add(m_gStatusInSettingsC[i], 0, wxEXPAND | (wxLEFT | wxTOP), 2); + m_sMainRight[i]->Add(m_gStatusTriggers[i], 0, wxEXPAND | (wxLEFT | wxTOP), 2); + m_sMainRight[i]->Add(m_gStatusAdvancedSettings[i], 0, wxEXPAND | (wxLEFT | wxTOP), 2); +#ifdef RERECORDING + m_sMainRight[i]->Add(m_SizeRecording[i], 0, wxEXPAND | (wxLEFT | wxTOP), 2); +#endif + + // Populate main sizer + m_sMain[i] = new wxBoxSizer(wxHORIZONTAL); + m_sMain[i]->Add(m_sMainLeft[i], 0, wxEXPAND | (wxALL), 0); + m_sMain[i]->Add(m_sMainRight[i], 0, wxEXPAND | (wxRIGHT | wxTOP), 5); + m_Controller[i]->SetSizerAndFit(m_sMain[i]); // Set the main sizer + + // Show or hide it. We have to do this after we add it to its sizer + m_sMainRight[i]->Show(g_Config.bShowAdvanced); + + // Update GUI + UpdateGUI(i); + } // end of loop + + // Populate buttons sizer. + wxBoxSizer * m_sButtons = new wxBoxSizer(wxHORIZONTAL); + m_sButtons->Add(m_About, 0, (wxBOTTOM), 0); + m_sButtons->AddStretchSpacer(1); + m_sButtons->Add(m_OK, 0, wxALIGN_RIGHT | (wxBOTTOM), 0); + m_sButtons->Add(m_Cancel, 0, wxALIGN_RIGHT | (wxLEFT), 5); + + + // Populate master sizer. + m_MainSizer = new wxBoxSizer(wxVERTICAL); + m_MainSizer->Add(m_Notebook, 0, wxEXPAND | wxALL, 5); + m_MainSizer->Add(m_sButtons, 1, wxEXPAND | ( wxLEFT | wxRIGHT | wxBOTTOM), 5); + SetSizerAndFit(m_MainSizer); + + // Debugging + #ifdef SHOW_PAD_STATUS + m_pStatusBar = new wxStaticText(this, IDT_DEBUGGING, wxT("Debugging"), wxPoint(135, 100), wxDefaultSize); + #endif + + // Set window size + SetSizer(m_MainSizer); + Layout(); + Fit(); + // Center the window if there is room for it + #ifdef _WIN32 + if (GetSystemMetrics(SM_CYFULLSCREEN) > 600) + Center(); + #endif + + // All done + ControlsCreated = true; + + // Replace the harder to understand -1 with "" for the sake of user friendliness + ToBlank(); +} diff --git a/Source/Plugins/Plugin_nJoy_SDL/Src/GUI/Images/controller.xpm b/Source/Plugins/Plugin_nJoy_SDL/Src/GUI/Images/controller.xpm index d04290311e..e1b6102869 100644 --- a/Source/Plugins/Plugin_nJoy_SDL/Src/GUI/Images/controller.xpm +++ b/Source/Plugins/Plugin_nJoy_SDL/Src/GUI/Images/controller.xpm @@ -1,566 +1,566 @@ -/* XPM */ -static const char *ConfigBox_WxStaticBitmap1_XPM[]={ -/* ConfigBox_WxStaticBitmap1 */ -"421 304 256 2", -" c black", -". c #04040B", -"X c #090916", -"o c #141217", -"O c #181828", -"+ c #15152D", -"@ c #271B2F", -"# c #162730", -"$ c #272738", -"% c #312B33", -"& c #251A19", -"* c #50312F", -"= c #6D3734", -"- c #531A34", -"; c #744736", -": c #2A2846", -"> c #383847", -", c #38355A", -"< c #312E51", -"1 c #3B3565", -"2 c #3C366A", -"3 c #3C396C", -"4 c #383866", -"5 c #3D3B73", -"6 c #3D3D7B", -"7 c #393773", -"8 c #333165", -"9 c #1B2543", -"0 c #4A354F", -"q c #423A69", -"w c #413D74", -"e c #423E7B", -"r c #4A3D79", -"t c #54386A", -"y c #6D2A49", -"u c #3E427B", -"i c #3D4376", -"p c #36486C", -"a c #01786A", -"s c #097773", -"d c #1C5956", -"f c #484858", -"g c #4D4C56", -"h c #474669", -"j c #565768", -"k c #434275", -"l c #43437D", -"z c #45497D", -"x c #4A4C7D", -"c c #494678", -"v c #585977", -"b c #4E5175", -"n c #576771", -"m c #666779", -"M c #6C6D77", -"N c #6A535C", -"B c #0E463B", -"V c #94273C", -"C c #8D5237", -"Z c #996738", -"A c #A56B37", -"S c #A97439", -"D c #B67937", -"F c #B0722C", -"G c #A25D30", -"H c #B22C4B", -"J c #912C4B", -"K c #C6264B", -"L c #C93859", -"P c #CD2D54", -"I c #CF315A", -"U c #AC7743", -"Y c #925845", -"T c #CF4760", -"R c #C36636", -"E c #018B7B", -"W c #028577", -"Q c #01927D", -"! c #088272", -"~ c #34857B", -"^ c #04A17D", -"/ c #42857D", -"( c #B98336", -") c #CE9130", -"_ c #DBA62E", -"` c #E9B22D", -"' c #E1A227", -"] c #F6CA34", -"[ c #FCE43E", -"{ c #CC9447", -"} c #EDB74B", -"| c #DBA84F", -" . c #F7C749", -".. c #FCD64A", -"X. c #F9CA55", -"o. c #FDD955", -"O. c #ECC44C", -"+. c #FDE358", -"@. c #FDE14A", -"#. c #FDE96E", -"$. c #F8D569", -"%. c #BD874A", -"&. c #3D3D84", -"*. c #3D3892", -"=. c #433E84", -"-. c #483D99", -";. c #3E4383", -":. c #3D478A", -">. c #3E4993", -",. c #3C548E", -"<. c #2F7F81", -"1. c #454585", -"2. c #494484", -"3. c #454985", -"4. c #494C84", -"5. c #454689", -"6. c #49468A", -"7. c #464B8A", -"8. c #494C8C", -"9. c #4C5284", -"0. c #47518C", -"q. c #4A538D", -"w. c #4D598D", -"e. c #485586", -"r. c #52548C", -"t. c #535B8C", -"y. c #565987", -"u. c #444B92", -"i. c #4B4E92", -"p. c #454794", -"a. c #4C5394", -"s. c #4D5A94", -"d. c #4E5599", -"f. c #4E5A99", -"g. c #455495", -"h. c #515594", -"j. c #525C94", -"k. c #51559A", -"l. c #525C9B", -"z. c #5A5D97", -"x. c #524B8D", -"c. c #58628C", -"v. c #4E6298", -"b. c #536295", -"n. c #54639B", -"m. c #5B649C", -"M. c #5B6A9D", -"N. c #586797", -"B. c #586F9A", -"V. c #686987", -"C. c #75768A", -"Z. c #64699A", -"A. c #69739B", -"S. c #787997", -"D. c #706F88", -"F. c #545CA2", -"G. c #4C58A3", -"H. c #5364A1", -"J. c #5C65A2", -"K. c #5C6BA3", -"L. c #576AA6", -"P. c #5C72A8", -"I. c #536AA8", -"U. c #636CA3", -"Y. c #656BA7", -"T. c #6B74AB", -"R. c #6774A7", -"E. c #737BAC", -"W. c #767AA6", -"Q. c #6A79B2", -"!. c #747CB3", -"~. c #6E6FAE", -"^. c #615E8D", -"/. c #827D95", -"(. c #E07A84", -"). c #019482", -"_. c #039986", -"`. c #0C8F87", -"'. c #398A84", -"]. c #30928B", -"[. c #03A593", -"{. c #0BABA7", -"}. c #458988", -"|. c #7E8197", -" X c #7983AA", -".X c #7B84B4", -"XX c #7986B7", -"oX c #6D85AE", -"OX c #55B0B5", -"+X c #7D88C1", -"@X c #85859A", -"#X c #8D9098", -"$X c #8C8DAB", -"%X c #8688A7", -"&X c #8C91AC", -"*X c #9595AB", -"=X c #838CBB", -"-X c #868BB5", -";X c #8B93BC", -":X c #8992B7", -">X c #9394B3", -",X c #959ABB", -" f f f f g g M |.7XVXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKX KXKXKXKXKX", -"KXKXKXKXKX KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVXMX#XC.m j f f g h f f f f f f f > > > > > > > > f j |.MXFXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKX KXKXKXKXKX", -"KXKXKXKXKX KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVXMX|.n j j g f f f g j f g f f f > > > % > $ $ $ $ $ $ % > g M 8XVXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKXKX", -"KXKXKXKXKX KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXPXjX#Xm j j j g h g h g j g f f > > % > $ $ # # # @ # O O # $ $ $ > f M 8XHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSX5XM j j j g g j g g g g f > > > $ $ # O O O O O O o + + O X O O O # : > j #XVXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXBX|.M j j g j j j j g f > > $ % $ $ # @ # O # O O # # O o X + X o + X + # $ > > M 8XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXkXtXtXtXtXtXtXtXtXtXtX", -"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHX*XD.j j j j j j j j f > > % % $ $ $ : : > % > > > : $ : $ $ # O O + X X o X O # % f g 5XSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXkXtXtXtXtXtXtXtXtXtXtX", -"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXjX#XM m j j j j j j g > > > $ % % f f j m M C.|.@XM M M M j g f % $ $ # + O + X o + O $ > f #XHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXyXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXjX@Xm j m n j j j g f > % $ $ > j C.5XCXVXHXKXKXKXKXJXJXHXFXCX8X*XC.j > > $ # + o X O o O $ > g #XFXKXKXKXKXKXKXKXKXKXKXKXKXKXyXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXMX|.n m m j n n j j g > % @ % j #XVXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXCX5XM g % % # o O X o O + > g #XHXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCX@Xm n m v j n j j f > % % j 5XVXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVX5XM f % $ # O O X + $ % j 5XKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCX@Xm m M j m m j g f $ % g *XFXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCX*Xj > > # O O X O # % n 8XKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFX|.m M M m m m v h f > > n MXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXjXM f > # + O o O % > M CXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVX#Xm n D.M m V.n j f $ > @XCXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX#Xj > $ + O O O % g S.VXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX*XM m D.D.m V.V.v f $ f #XVXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX#Xg > # O O O $ > j *XHXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCXn m m D.C.D.m j g > > #XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX*Xj > $ # o O $ > m 8XKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVXM n M M m C.D.n f % > #XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX5Xg > $ O o O % g C.BXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX@Xj M C.C.D.D.j g > % #XHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX#Xg > $ o o $ % g 5XKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX8Xj j M D.C.C.m j > % C.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX@Xf % @ o O % f M VXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVXM j M M C.D.D.j g $ j VXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVXm > $ O o O > g #XKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX#Xj n D.C.S.C.m j > g BXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX8Xj > O O O % g M CXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXMXm j M D.S.S.V.j f > 5XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVX|.f # O O $ > g *XKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX@Xj m M C.|.S.n > $ M KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCXj % $ O O > f M VXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKX KXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX8Xm j M D.C.|.D.j > f CXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX#Xf $ O O % f j 5XKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKX KXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFXM j n M C.S.C.n f % 5XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVXj > $ O % > g C.VXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKX KXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXeXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX8Xj j n D.|.|.m j % g HXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX@X% # O @ % g n CXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXIXC.j n M D.C.C.n f % *XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCXf % O O $ > j 5XKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KX KXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCXj j m D.D.C.M j > g CXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXM % O O # % g M VXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKX KXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX*Xj n M C.C.C.n f $ #XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX*X> $ O O % g M MXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKX KXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXJXKXKXKXKXKXKXKXJXCXC.j m D.C.C.M j > > CXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCXf % O O % f j 5XKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXFXHXHXHXFXFXFXJXJXFXKXKXKXCXCXBXjXgXaX7XeX>X$XS.j n M C.C.C.M j > f #X8X8XjXjXmXBXAXAXVXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXm % $ O % f g #XKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXAXZXBXmXhXgXpXdXtX $ # $ > g Y FXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXtXtXtXtXtXeXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFXBXmXzXfXpXiX4X3XyX,XX,XeX>X;X;X,X;XeXwX,X;XeXeX,X;X-X XE.E.W.U.z.i.5.6 6 u l i 5 1 h j j m C.S.S.M g % < p i i 5 i u 3.w.Z.R.E. X-X=X;X=X=X=XrX;X:X-X-X;X;XwXwXeXeXeX>XeXiXlXmXAXHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXMXj % # O % f j 8XKXyXdXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXSXAXhXaXiX , h z x 9.c.N.Z.T.oX X.X:X;X;X:X;XrXrXwXrXwXwX=X=X;X;X=X;X;X;XrXwXwXeXeXyXyXgXMXCXFXHXHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVXn > $ O % > j 5XKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXFXCXxXgXyXyX:X,XeXeXeXwX,X;X;X;X;X,X,XwXeX,X,X;X;X;XeX,X,X;X:X:X:X;XwXwXwXrXwX;X;X;X-X.X.X.X.X X X XW.A.A.A.A.A.M.c.N.N.Z.A. XXXXX.X;X;X:X:X:X:X:X:X;X;X;X;XrXwX;XwXwX;X:X=X-X:X;X-X-X.X-X.X.X-X-X:X,X4X4X3XsXmXAXAXSXSXSXKXKXKXKXKXKXKXKXHX|.> $ O # > j #XKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXSXBXBXaX3X3X3XyX:X:X,X,X;X:X;X,XeX,XeX,XeXeX;X;X;X;X;X-X-X-X;X-X;X:X:X:X-X-X:X:X,X,X;X,XeXeXrXwXwXrXeXrXwX;X=XE.U.Z.M.Z.Z.M.Z.Z.A.oXXX;X=X:X=X=XwX=X;XwXwX;XwXwX;X;X:X:X:X;X;X;X;X:X=X-X.X-X-X-X=X-X-X:X=XXXXX=XXX=X=XwX>X j M VXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXCXjXjXpXiXyX,X;X-X-X-XrX;XwXwX:X-X-X=X=X=X=X-X-X:X:X:X:X-X;XrX=X=X=X=X.X!.Q.T.T.R.Y.K.K.m.n.n.h.f.j.s.s.w.w.t.j.n.n.n.n.l.n.n.K.U.K.K.K.K.K.K.U.N.B.Z.U.M.M.M.M.K.K.K.Z.M.U.Z.U.Z.U.R.T.T.E.W.E..X.X.X-X-X-X=X-X=X=X.X=X!..X.X.X X X XXX.X.XoX!.E.oX X X-X:X-X.X XA.y.h , : > g M CXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXAXBXzXsXpXdXyX,X;X:X=X=XrX=X=X-X=X=X=X;XXX.X=XrXrXXX=X=XXX.XE.E.T.U.M.m.N.j.t.w.w.a.s.g.s.a.f.f.n.n.H.K.K.Y.Q.T.T.E.E..XXXXX+XXX=X=X+X+X=XrXwX+X=X+X=X=XXXXXXXXX.X X.X.XoX XE.R.T.R.R.R.T.R.Y.Y.U.U.N.Z.Z.Z.Z.Z.A.T.Y.T.W.!.!..XE. X.X-X.X X XXXXXXXXXoXQ.T.E.T.T.R.T.T.R.A.Z.A.V.c.v v D.jXdXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXSXzXxXfXdXbXwX-X=X-X=X=X.X.X=X-X-X-X-X:XXX:XXXXX.X.XoXT.T.U.n.n.j.r.q.e.q.e.s.j.n.m.M.U.R.T.E..XXXXX=XwXwXeXyXyXuXuXuXuXuXuXlXkXkXlXuXlXlXlXlXkXlXlXlXlXvXvXlXNXvXvXvXNXxXvXlXlXlXkXtXkXdXyXyXyXeXwX:X-X=X.X!.E.T.R.A.Z.U.U.U.U.Z.U.U.U.R.R.T.E.E.E. X XE.E.E.E.E.!.T.T.T.T.U.P.U.B.R.R.R.W. X%XcXdXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXIXVXVXCXCXBXBXBXCXCXVXSXHXHXJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXAXzXaXiXdX>X-X-X-XrXrXrX-X=X-X.X=X;X=X-XXX.X XW.A.Z.M.b.t.w.q.q.q.w.s.b.m.U.R.T.!.XXXX+XrXrXwXwXwXyXyXyXeXeXwXeXeX;XwX;XwX=XwX=XXXXXXX=XXXXX-X-XXX=X.X=X=X=X:X:X;X;XwXwXeXyXtXtXkXlXlXlXkXkXlXlXlXxXxXvXNXxXlXlXvXvXkXtXyXyXeXrX=XXX.XE.T.T.U.P.M.M.K.K.K.Z.R.R.E.E.E.T.E.T.E.T.U.K.K.R.M.P.M.M.R.T.E.-XtXtXBXJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXFXSXVXVXSXVXVXVXVXSXFXHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXBXnXnXnXnXjXcXcXjXnXjXjXnXnXnXBXBXVXSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXFXZXxXyXyX,X;X-X=X=X=X=X-X-X=X.X=X=X!.!.!.E.T.U.Z.n.j.w.q.w.w.j.l.J.Y.T.E.oXoXXXXXwXwXrX;X=X=XXX.X.XXX!.Q.T.R.U.K.J.n.H.l.l.f.a.a.s.a.s.a.s.a.s.q.a.q.q.q.0.8.8.q.q.a.s.a.a.s.j.j.k.k.k.z.m.m.n.n.m.J.Y.R.E.E..XXXrXwXwXyXyXkXlXlXlXxXvXvXlXlXkXyXeX:X:X.X X!.T.U.K.Z.Z.m.M.M.Z.M.A.U.R.U.U.U.U.Y.U.T.T.R.T.T.E.tXtX,X,XpXmXCXHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXSXVXBXBXBXBXnXBXnXBXBXnXBXVXCXVXSXHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXCXnXjXcXcXcX9X9X9X9X7X9XiX7X7X8X8XcXcXcXjXBXVXSXHXHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFXAXzXgX6X,X>X-X-X-X=X.X=X=X=X.X.X!.E.E.T.R.Z.j.w.e.w.w.q.s.b.U.Y.Q.!.!.XX+X+XXXXXoX!.E.T.R.P.M.N.z.j.r.w.q.q.7.7.7.3.3.3.;.3.;.;.;.;.;.3.3.;.;.;.;.;.;.3.;.1.;.;.1.;.;.;.1.;.;.3.3.3.;.3.;.;.u u ;.l u u ;.;.;.;.u u :.3.4.w.s.h.j.m.U.Q.!.!.wXwXeXuXlXvXvXvXvXxXlXkXyX,XwX=X.XE.oXE.A.Z.M.M.M.J.J.J.J.Y.Y.R.R.T.E.E.!.tXtXoXE. X.X2X9XhXBXSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFXVXBXnXjXnXjXjXjXcXcXaXcXcXhXcXhXzXzXnXBXSXHXHXJXHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFXCXnXcXcX8X7X9X9X9X9X9X9X9X9X9X9X9X9X9X9X7X7X7X8XjXjXBXSXFXHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXAXmXfXiXX1X9X1X1X9X1X9X9X9X9X1X9X9XbX9X6X6X6X7XcXjXBXVXFXHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXSXBXsXeX>X-X-X=X-X.X=X=X=XXX!.Q.T.M.m.h.w.e.w.h.j.n.m.Y.T.Q.!.T.T.T.R.K.n.n.j.h.q.7.7.7.8.7.5.5.5.:.:.5.5.5.5.5.5.5.5.5.:.:.5.5.5.5.5.1.1.1.1.3.1.1.1.1.1.3.;.1.1.3.2.7.1.1.1.1.1.5.1.1.1.1.1.1.1.1.1.5.5.6.6.5.5.5.5.5.5.5.5.5.;.5.5.5.5.5.3.5.1.1.1.1.;.1.1.;.;.;.1.u.i.h.z.Y.E.!.wXeXkXlXvXNXNXNXNXNXNXlXyX:X XA.A.B.M.Z.U.K.U.tXtXQ.!.!.XX!..X.X X X.X-XbXhXAXJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFXCXjXgXcXgXpXdXdXbXiX9XbX9XeXbXeXbXbXbXdXdXbXbXdXsXsXcXjXBXSXDXHXHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFXnX8X7X9X9X9X>X>X1X1X1X1X1X>X1X1X>X1X9X9XX>X2X%X2X*X9X>X>X1XeX>X>X>X9XeXeX9XeXbXbXeXeXiXiXiX6X6XpXcXjXnXVXFXKXKXKXKXKXKXJXSXmXsXyX,X:X=X-X-X.XXXXXXX!.T.Y.m.j.r.q.q.t.b.J.K.U.Y.U.K.J.J.n.k.a.s.a.a.8.7.7.3.3.1.;.1.3.7.7.5.3.1.1.1.5.6.5.7.5.5.1.1.1.5.7.7.7.1.1.1.1.1.1.1.1.1.5.1.1.5.1.1.1.1.1.1.1.1.2.1.1.1.1.2.1.1.1.1.1.1.1.1.7.5.5.6.6.6.2.1.1.5.5.5.1.1.5.7.5.7.3.3.1.1.1.1.1.1.1.1.1.1.1.1.3.1.1.1.1.1.5.5.5.=.5.&.;.1.;.1.4.e.h.m.T. XrXtXvXNXAXDXGXDXAXNXfX:XtXtXR.A.U.Y.K.U.T.E.E.E.E.XX.XXXE.W.-XeXfXZXJXKXKXKXGXNXvXlXlXxXxXxXxXmXkXuXeXeXeXeX,XeXyXyXeXtXbXeXbXeXeXdXbXX>X1X9X%XS.S.$X>X>X>X1X>XeX>X,X,X,X,X,X,XX>X>X>X1XiX>X%XS.$X>X2X>X>XeX1X1X1X,X,X,X,X.P.Q.G.>.*.>.>.>.>.>.>.>.>.>.,.,.,.G.G.P.oX+XXXrXeXeXkXbX%X2X;X>X/.-XbXdXsXsXhXnXBXCXVXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCX7X6XX>X>X>X1XyX>XW.S.$X>X>X>X>X>XeX>X>X,X,X,X,X,X,X,X3XX>XyX,X-X-X-X.X.X=X.XE.U.m.j.s.j.j.a.j.l.z.m.n.n.n.n.s.s.s.q.8.8.7.5.1.1.3.1.7.5.5.1.1.1.5.3.5.1.3.5.1.5.1.5.1.5.1.5.5.5.5.5.1.6.7.1.5.1.1.5.1.5.5.1.5.1.7.1.5.1.1.5.1.5.5.3.5.1.5.1.5.1.1.5.1.5.1.5.1.5.5.1.5.1.5.1.5.1.1.5.1.5.1.5.1.5.5.1.5.1.5.1.7.1.5.1.5.1.5.3.5.1.5.1.5.1.5.1.5.1.1.5.1.5.5.1.1.5.5.1.7.1.5.1.5.1.1.5.1.5.1.5.1.1.5.1.;.;.1.u u 4.r.Z.tXtXuXNXDXJXPXJXGXNXsX,X.XQ.Y.J.Z.Z.Z.R.T.E.E.!.T.f.:.g.f.>.>.>.G.>.g.,.g.g.G.g.g.G.G.g.,.>.>.>.>.G.I.Q.XXwXeX,XeXdXiX$X%X>XiXbXdXsXcXcXnXVXVXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSX7X*X>X*X*X2X*X>X>X>X>XyX>X%XS.-X1X>XeX>X>XeXeX1X,X,X,X,X,X,X,X3XX-X-X%XW.W.-X-X-X=XXXE.E.U.m.b.a.w.a.a.j.j.j.l.m.m.l.k.a.g.0.0.5.7.;.1.1.1.1.1.1.1.5.5.1.1.5.1.5.1.5.1.5.5.1.5.3.5.1.5.1.5.1.1.5.5.5.7.1.5.1.5.1.5.1.5.1.1.5.1.5.1.5.1.5.5.1.5.1.1.5.1.5.1.5.1.5.5.1.5.1.5.1.5.1.1.5.1.5.1.5.1.5.5.3.5.1.5.3.5.1.1.5.1.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.1.5.1.7.1.5.5.1.5.1.5.1.7.1.1.5.1.5.1.5.1.5.5.1.7.1.5.1.1.5.1.5.7.3.1.1.;.u u &.tXtXa.m.~.=XkXAXGXPXJXJXFXNXyX:XoXR.Z.U.Z.Z.T.!.Q.n.g.5.&.&.>.>.>.>.>.>.>.>.>.>.g.G.g.G.G.I.I.I.G.,.:.:.>.G.P.Q..XeXtX;X-X>X7XiXbXsXsXcXhXmXBXSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVX7X*X1X>X*X>X2X>X>X>X>X>XyX>X%XS.-XeX>X>XeXeX1X1XeX,X,X,X,X,X,XeX1X,X3XyX,X:X-X-X XW.W.E.-X=X=X.X!.T.U.m.h.s.w.a.a.f.k.F.J.l.k.j.h.a.q.8.q.7.5.;.;.;.1.1.1.1.1.1.1.1.5.7.1.5.5.1.1.5.1.5.3.1.5.1.5.1.5.1.5.1.1.7.5.7.2.7.5.7.5.1.5.1.5.1.5.7.1.5.1.7.1.5.1.1.5.3.5.5.1.5.3.5.1.5.1.1.5.1.5.1.7.1.5.5.1.5.1.5.1.7.1.1.5.1.5.1.5.1.5.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.1.1.7.1.5.1.5.1.5.5.1.5.1.5.1.7.1.1.5.1.5.1.5.5.1.5.1.1.1.1.7.7.8.1.1.tXtX&.u 1.3.q.U..XyXxXDXPXPXPXGXAXlX;XW.A.N.m.K.P.P.K.F.i.p.>.*.>.>.>.>.>.:.>.>.>.>.>.>.G.G.I.Q.oXXXoXT.f.*.-.G.F.I.Q.!.;XuXdXiXbXbXdXsXxXhXjXBXSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVX5X*X>X>X2X>X>X>X>X>X>X>X1XbXeX/.W.2X>X>X>X>X>XeX>XeX,X,XeX,XeXeX,X4X,X,X;X-X!.W.T.E.E..XXX.X!.~.Y.z.w.0.0.0.f.k.k.l.l.k.k.k.k.a.q.7.7.1.3.7.1.1.1.1.7.7.7.2.7.1.1.1.1.5.7.1.5.1.1.1.1.5.1.5.1.5.5.1.5.1.5.1.5.1.5.5.1.6.7.1.5.1.5.1.5.1.5.1.5.1.1.5.1.5.1.5.1.5.5.1.3.5.1.5.1.5.1.5.1.5.1.1.5.1.5.1.1.5.1.7.5.1.5.1.5.1.5.3.5.1.5.1.1.5.1.5.1.7.1.5.1.5.1.5.1.5.1.1.1.5.1.5.1.5.1.5.5.1.5.1.5.1.5.1.1.5.1.7.7.1.5.1.7.1.5.1.1.5.1.5.1.6.4.1.1.1.5.5.7.1.tXtX1.1.l ;.5.&.;.3.t.W.-XkXNXGXJXPXPXFXmXyX XA.B.K.M.U.Y.J.G.p.5.:.&.:.p.u.>.>.>.>.>.>.>.>.g.G.G.L.!.rXuXeX!.Y.>.:.g.Y.+XrXrXdXdXdXdXdXsXlXjXnXZXSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHX7X2X1X>X>X>X>X>X>X-X2X;X>X>X6XeX/.W.2X>X>XeXeXeX>XeX>X,X,XeX,X,X,X,X;X:X.XE.E.E.E.T.T.!.Q.R.J.k.h.8.8.0.w.w.s.j.j.j.f.h.a.0.q.7.7.7.1.1.1.5.5.1.1.5.1.5.5.1.1.1.1.1.1.1.1.5.1.1.5.5.1.5.3.5.1.5.3.1.5.1.7.1.1.1.5.5.5.5.3.5.1.7.1.1.5.1.5.1.5.1.5.5.1.5.1.5.1.5.1.1.5.5.1.5.1.5.1.5.1.7.1.5.3.1.5.1.5.5.1.5.1.1.5.1.5.1.5.1.5.1.5.1.5.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.7.5.1.7.1.5.1.5.1.1.5.1.5.1.5.1.7.5.1.5.1.1.5.1.5.1.5.1.5.7.1.5.1.5.1.1.1.1.1.5.5.1.3.tXtX1.7.1.1.5.5.5.5.&.1.5.k.Y.!.wXhXSXJXLXJXFXmX3X&XA.U.M.U.L.H.F.a.p.>.*.&.>.>.=.>.>.>.>.>.>.>.>.>.G.p.f.U.=XeXkXrXY.u.g.L.!.rXrXtXdXdXpXsXcXcXnXBXSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHX8X*X1X2X%X2X&X&X&X>X&X:X-X>X>XyXeX/./.2XrX>X>XrX>XeXeX>X;X,XeXeX;X:X-X XE.E.E.T.Q.!.T.U.J.l.f.q.0.h.a.a.j.j.j.j.w.w.w.0.0.7.3.5.5.5.;.5.5.5.5.5.5.5.5.5.5.5.1.1.2.1.6.2.2.5.7.5.5.1.1.1.1.5.1.5.1.5.1.1.5.1.1.1.5.5.5.5.5.5.5.1.6.1.1.1.5.5.1.1.5.5.1.5.1.5.1.1.1.3.5.3.1.1.3.5.1.5.1.1.1.5.1.1.1.1.5.1.5.5.5.1.5.1.5.1.5.1.5.1.5.1.1.1.1.5.1.1.5.1.1.5.1.1.1.5.1.5.1.1.1.1.1.1.5.5.5.1.5.1.5.1.1.1.5.1.1.1.1.5.5.1.5.1.5.1.5.1.1.5.1.5.5.1.2.5.5.5.=.=.5.5.tXtX5.5.5.5.l 3.1.1.5.p.&.l e 1.7.h.Y.rXgXBXJXPXJXGXAXuXoXT.R.U.R.K.Y.F.i.5.:.*.5.*.*.:.>.:.>.>.>.>.>.>.>.>.>.f.V.2XkXeXQ.f.a.h.U.=XeXkXsXpXcXcXzXnXCXHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX8X*X*X*X2X>X>X:X&X:X:X>X>X;X>X>X6XeX/./.-X/./.1X,X2X1XeX;X;X,X;X:X XE.E.T.E.Q.!.T.Y.K.f.a.s.q.q.s.a.k.j.j.j.h.h.a.8.7.7.5.3.5.1.1.1.5.5.1.1.1.5.1.5.5.1.5.1.1.5.1.5.1.1.5.7.1.1.1.1.5.5.1.5.1.5.3.5.1.5.7.1.1.3.7.1.5.5.5.4.2.4.1.6.8.5.5.8.7.5.5.7.1.5.1.5.1.5.7.5.1.;.;.7.1.5.5.1.1.7.1.8.3.1.1.1.3.3.l l 1.6.5.p.5.5.8.1.5.7.7.7.7.5.3.;.1.1.1.7.7.6.7.1.1.1.1.3.1.1.l 1.3.1.1.1.5.5.7.3.1.5.5.l 4.1.1.1.4.z 1.1.5.1.5.1.7.1.5.5.1.5.1.1.1.5.5.5.5.5.5.1.1.tXtX1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.3.a.K.rXlXAXGXLXPXFXmX3X.XY.~.Z.Z.M.m.g.u.>.>.>.*.>.>.>.>.>.g.>.>.>.>.u.u.>.g.g.~.uXeXE.h.i.i.~.rXuXkXcXaXcXzXnXVXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCX1X*X2X2X2X2X&X>X-X>X:X>X>X>X>X,XyXX>X,X,X,X:X,X=X XoXE.E.E.E.T.R.J.l.j.a.q.s.a.f.j.j.f.a.h.a.a.q.7.7.7.7.7.5.5.1.1.5.1.5.1.5.1.5.1.5.1.5.1.5.5.1.5.1.5.1.5.1.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.1.2.7.5.5.i.5.1.l e 1.5.5.5.5.1.5.5.;.1.7.1.5.5.1.5.1.5.1.2.1.7.1.1.5.7.1.8.7.1.1.p.6.6.5.6.p.=.6.=.&.6.5.1.1.1.1.1.=.1.5.p.5.1.1.7.1.6.5.1.1.1.1.7.2.1.1.5.5.=.=.5.p.5.5.5.5.1.5.7.5.5.6.6.p.p.5.6.1.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.1.tXtX1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.5.&.=.3.Z.-XsXZXGXJXLXGXxX,XoXY.K.U.Y.J.j.u.p.>.-.>.>.>.>.*.*.>.>.p.>.p.g.p.>.:.:.J.+XrX!.F.:.w.E.wXdXlXxXfXjXBXVXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJX5X$X2X2X$X2X&X&X-X&X:X>X:X:X:X;X>XyX.>.>.>.>.>.>.>.>.:.u.p.>.>.g.f.!.+XQ.f.w.b.rXkXlXkXhXnXCXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX8X$X2X2X2X2X$X:X2X-X:X2X:X>X-X>X>X,X.>.:.>.>.>.>.p.>.>.:.u.>.>.>.>.-.>.:.q.Y.!.K.g.8.!.rXE.eXzXZXSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVX#X2X2X2X2X2X>X>X-X&X:X:X>X-X>X:X>X:X,XeXeXdXdXeX;X-X.XW.T.E.E.E.E.T.m.h.q.0.0.w.a.a.k.j.a.h.h.q.7.7.3.3.1.1.1.1.1.5.3.5.1.1.1.1.1.1.1.5.1.5.1.5.1.7.1.5.1.5.1.1.5.1.5.1.5.1.5.5.1.5.3.5.1.5.3.5.1.5.3.5.1.1.1.1.5.5.1.A.lX Xl y.eXz.=.5.5.1.1.1.3..X-Xl 5.5.1.1.5.1.r.eXeX9.3 rX!.l 5.1.3.l r.rXuX3XpXeXeXY.l e 5.5.w 9.-XeXuXkX!.7.l 1.1.1.=.r.eXeXh.5 -X-X=.1.1.1.1.1.Z.4XeXeXeXS.c 1.1.1.&.5.6 N.>XdXtX;XV.q z 6.5.5.1.5.1.5.1.5.1.5.1.5.1.7.1.5.1.7.1.5.1.1.1.tXtX1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.l l z l l 1.1.5.:.&.;.1.a.R.:XjXDXLXLXJXBX.>.p.u.:.*.>.>.>.>.>.>.>.>.g.G.I.d.d.a.k.z.W.xXZXJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX6X@X2X2X$X$X-X2X>X:X2X:X2X:X:X&X:X:X:X,XeX;X,X;X-X XE.T.R.E.E.E.Y.K.j.0.4.0.s.a.j.j.a.a.a.7.8.7.7.5.1.5.7.1.1.1.1.1.1.7.1.1.5.5.5.1.5.1.1.5.1.5.1.5.1.5.1.5.1.5.5.1.5.1.7.1.5.1.3.5.1.5.1.5.1.5.3.5.1.5.5.1.5.1.5.p.5.6 -XAXdXy.y.vXz.w 6.5.1.1.l z eXtXu 1.1.5.5.1.1.z.zXZXW.1 bXrXl 1.1.4.l z U.U.,XlXS.Z.y.l 8.p.5.l XsX!.Z.Y.z.4.3.4.1.8.=.t.zXxX!.l 6X.p.p.>.p.p.>.>.>.>.>.>.:.:.>.G.f.f.G.G.u.:.J.dXSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCX#X$X2X2X$X$X$X-X-X:X-X:X2X:X>X:X>X:X:X:X;X:X%X|.A.R.R.E.E.E.M.b.w.0.4.8.s.k.l.j.j.a.a.7.7.5.1.1.5.1.5.1.1.1.1.1.1.1.1.1.1.1.5.1.1.5.7.5.5.1.5.5.5.1.5.1.5.1.5.1.1.7.1.5.1.5.1.5.5.1.5.1.5.3.5.1.5.1.5.1.1.5.1.;.7.&.5.l $X4XiXW.y.xXV.l 7.6.6.1.1.k rXyXz 1.5.1.1.5.1.z.7X6X>Xv bX-Xc 1.8.4.1.l 4.3 W.dXb 5 1.6.p.p.=.k >XeXq 6 l 1.1.1.1.1.7.=.^.7X*XkX9.*X1X&.1.1.1.1.1.T.7Xr.7 k sX!.=.z 1.5.&.6.lXS.7 5 !.kX4.&.p.6.1.1.5.5.5.1.7.1.5.1.5.1.5.1.5.5.5.1.5.1.1.1.tXtX1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.:.5.5.5.5.&.&.1.1.l u 1.1.l =.=.=.6.z./.kXAXJXLXJXvX=XW.U.U.U.m.l.a.>.:.*.-.p.>.:.:.>.>.>.>.:.>.>.G.,.>.,.G.G.g.G./.zXJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX*X2X2X$X%X%X%X$X2X2X-X-X&X&X2X-X-X:X,X:X-X.XE.T.T.E.!.E.T.M.j.q.3.0.g.s.a.h.j.a.q.8.7.5.1.5.:.5.5.5.5.5.5.5.1.7.2.7.1.7.1.3.5.1.1.1.1.1.5.3.1.1.3.1.5.1.1.1.7.3.1.1.3.5.1.5.1.5.1.1.5.3.5.1.5.1.5.1.5.3.5.5.1.5.3.1.1.&.k -XX%X*X1X1.1.1.1.1.1.W.pXh.=.x dXS.u 1.5.7.2.l kXS.-.=.W.kX4.1.5.1.1.1.1.1.1.1.5.5.1.5.1.7.1.1.1.1.1.5.1.1.1.1.tXtX1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.&.1.1.3.1.1.;.=.=.1.&.1.2.i.z.-XxXJXLXJXBX5XW.Z.A.U.m.l.a.u.:.:.:.u.>.:.>.>.>.u.7.u.u.g.>.>.g.G.g.G.K.eXAXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCX$X%X$X2X:X&X-X$X-X:X-X&X&X-X-X&X-X:X-X X XA.R.T.Q.!.U.m.h.0.3.e.0.f.s.j.a.a.a.8.7.7.7.3.1.7.7.1.1.1.1.1.1.5.5.1.1.1.1.5.1.1.1.1.1.7.1.1.3.1.1.1.5.3.1.1.3.1.1.5.1.5.1.1.5.1.5.1.5.5.1.5.1.5.1.5.3.5.1.5.1.1.5.1.1.1.1.1.u ;XbXx ;X3XaXy.2.5.5.5.1.2.k ,XeXc 1.5.7.6.6.1.t.6Xz.Y..>.>.g.>.>.>.:.>.u.u.>.>.>.g.p.g.g.,.f..XmXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX*X@X%X$X$X$X$X$X-X$X-X2X:X-X$X-X;X-X XA.Z.R.E.E.T.U.l.q.0.7.0.a.l.l.q.a.8.8.3.1.1.1.2.2.=.1.2.1.1.1.1.1.1.1.1.1.1.1.1.6.1.1.1.1.1.1.1.1.1.1.1.1.5.1.1.5.5.1.1.1.1.1.5.1.5.1.7.1.7.1.3.5.1.5.3.5.1.5.5.1.5.1.5.1.5.1.5.1.1.5 ;XbXe z.hXmXy.1.=.5.5.5.1.k eXbXe 5.5.6.7.6.1.z.sXZ.5 >XZX-Xl 5.5.1.5.1.1.&.%XkX2.2.1.1.3.p.5.l -XdXc 7 3 k l 1.5.5.5.7 z.xX^.w eXZX$X=.1.2.1.1.2.W.gXx 8 y.kXW.&.5.1.6.1.r.kX/.=.q %XdX2.=.6.5.1.1.1.1.1.1.1.5.1.5.1.5.5.1.1.5.5.1.1.1.5.1.tXtX1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.&.l 1.1.2.2.2.2.2.2.2.2.2.2.2.=.=.r 5.=.6 e 2.h.~.dXSXPXJXNXeXW.Z.Y.J.J.F.d.>.>.>.>.p.p.>.>.*.>.>.>.5.u.p.p.g.,.>.K.yXDXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXBX#X$X2X$X%X%X%X-X-X-X$X-X-X-X;X-XW.W.A.T.E..XE.K.s.3.7.7.a.k.l.k.f.a.4.3.1.1.e e e 2.2.=.e e =.e 1.1.1.1.1.1.&.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.3.1.1.3.1.1.1.1.3.5.1.7.3.1.1.5.1.5.1.5.5.1.5.1.5.1.5.1.1.7.1.5.1.5.1.7.7.1.1.1.rXdXx.6 &XzXZ.=.p.u.5.8.1.l eXdXx.1.1.5.2.7.1.z.xXZ.3 Z.xX;X1.1.5.1.5.1.1.1.-XdXx.1.1.1.3.5.5.l W.lXeX/.;XW.4.=.5.1.i.6 z.vXZ.5 Z.vX;X=.1.7.1.6.1.T.jX:X-X;XkXZ.&.7.&.5.1.l =XkX!.-XdX-X6.5.1.1.1.1.5.1.1.3.5.1.5.3.5.1.1.1.1.1.2.=.5.=.1.1.tXtX1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.&.6 l &.1.1.1.=.=.2.=.2.=.=.e e l l e 5 e e 1.1.1.6 7 =.4.^.2XzXDXDXBX.>.>.>.>.>.>.>.u.>.>.>.>.>.>.g.>.>.H.rXNXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX5X%X$X2X2X%X-X-X-X$X-X$X-X-X-X.XR.Z.A.E..XT.U.s.3.3.7.s.a.h.k.j.a.7.5.3.3.1.1.2.2.2.1.=.e =.6 6 6 2.1.e =.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.3.1.1.1.3.1.1.1.1.1.1.5.5.1.5.1.1.5.3.5.1.5.3.5.5.1.5.1.7.1.5.1.1.5.=.&.Y.W.i.=.y.W.z.=.5.5.5.1.1.2.Y.~.l 5.1.5.5.7.5.h.E.z.w k E.Y.1.1.1.5.1.1.1.1.Z.E.l 2.1.5.1.7.8.6 e Y.-XrXrX~.7.6.6.5.2.=.x.E.y.2.1.E.A.&.1.1.1.1.1.h.%X-XrXE.Z.e 5.1.5.5.8.e r.W.;X;XW.9.&.5.6.1.5.1.7.1.3.5.1.5.1.5.1.5.5.1.1.5.1.5.1.1.1.1.tXtX1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.6 1.e e e w 6 e e l 4.4.8.r.r.z.c.c.j.z.m.Y.Y.Y.~.>XmXGXPXLXGXfX%XA.Z.Z.R.l.a.7.:.:.>.p.u.p.u.:.>.u.>.>.>.>.G.>.g.Q.xXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHX$X%X$X-X-X2X-X%X%X%X-X-X-X XR.Z.U.!.E.R.m.d.8.5.7.s.s.s.f.s.s.h.l.m.M.Z.J.J.Z.U.U.U.J.U.m.z.z.h.r.1.1.u 6 6 6 u 2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.5.1.7.1.5.1.5.1.1.1.7.1.1.5.1.5.5.1.5.1.5.1.5.1.1.5.1.5.1.5.1.3.1.5.5.&.2.l &.6.5 5 2.6.=.1.5.;.7.4.2.l =.6.1.5.1.5.7.1.l 1.1.6 2.6 1.1.5.7.5.5.1.5.e 2.5 2.1.5.;.&.1.8.1.7 6 5 5 e =.5.5.6.2.1.5.4 k 2.5.5 l 1.1.1.1.1.1.1.5 7 w w u =.5.3.5.=.5.6.7 w e c w e p.5.4.1.1.1.1.1.1.1.5.3.5.1.5.3.5.5.=.1.1.5.=.1.1.1.tXtX1.1.1.1.1.1.1.1.1.1.1.1.;.1.1.&.l 1.1.1.1.1.6 &.6 6 6 u 2.8.h.z.Z.U.U.U.U.R.E.T.T.T.T.T.!.W.!.rXrX=XeXbXlXZXAXDXZXlX=XT.U.T.Y.l.u.:.>.>.>.>.>.>.:.>.>.>.>.>.>.g.g.>.K.kXJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXBX/.%X$X-X%X-X-X%X%X-X-X XA.Z.U.E.E.R.j.4.;.5.u.a.a.j.k.l.m.m.m.M.M.U.U.R.R.U.U.Y.R.Y.R.R.R.T.R.R.R.Y.~.Y.Z.h.2.l l =.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.7.1.1.7.1.1.1.3.5.5.1.5.1.5.1.5.1.5.3.5.1.5.7.1.5.1.5.1.1.7.;.6.p.5.=.e =.=.e &.*.=.1.6 p.i.5.8.=.=.1.=.5.1.1.6.1.&.6 1.3.5.5.5.5.5.1.=.1.5.=.&.=.6 &.1.=.&.&.:.1.7.5.=.1.=.e 1.=.=.=.&.l 5.&.u 6 p.5.1.l 1.=.&.1.1.1.&.*.;.e 6 &.5.=.&.1.5.&.5.=.=.=.&.e =.=.=.2.1.1.3.1.1.1.3.5.1.1.5.1.5.1.1.1.1.5.1.=.6.=.2.tXtX1.1.1.1.1.1.1.1.1.1.1.1.=.1.1.1.1.1.=.6 6 6 6 1.1.w.j.M.R.E.T.Y.R.R.U.K.M.M.M.m.m.m.m.m.m.m.z.c.c.z.z.z.^.Y.Y.W.-X=X=XE.Z.M.U.R.U.l.i.:.*.>.*.:.*.u.u.*.p.>.:.>.>.>.d.z.eXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX7X@X@X%X-X%X%X%X-X=X-XA.Z.Z.!.!.Y.z.3.1.1.7.e.h.z.n.m.U.Z.M.Z.M.M.M.M.m.J.K.K.K.U.J.U.U.Y.K.J.Y.Y.Y.Y.R.R.Y.T.~.R.m.t.4.6 6 2.1.5.1.2.1.1.1.=.5.1.5.1.1.1.1.1.1.1.1.1.1.5.1.5.1.5.3.5.1.5.3.5.1.5.1.5.1.1.5.1.5.1.1.5.z p.=.4.S.$X>X>X>X$X>X;X;XX>X;X,X&X&X>X:X>Xt.&.x. X&X&X2X1X:X>X1X%Xr.2. X6XA.5.5.7.;.&.A.1X%X4.-X>X>X1X>X2X-X>X2XW.2.h.;X*X2X,X>X2X$X>X,XW.e 1.5.1.5.5.5.5.1.5.5.3.5.1.5.1.1.1.1.1.1.1.1.5.tXtX1.1.1.1.1.1.1.1.1.1.6 =.e 1.l =.6 1.u 6 u 4.j.J.T.Q.T.R.U.M.Z.Z.M.M.M.M.U.U.Y.R.T.T.T.~.~.Y.Y.R.U.Z.U.U.Z.m.F.z.n.m.n.m.Z.H.K.K.K.Y.U.z.u.:.:.>.p.p.p.-.*.p.u.>.>.>.f.G.f.yXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXkXtXtXtXtXtXtXtXtXtXtX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX$X%X$X%X X%X-X;X XZ.Z.U.T.!.Y.z.r.7.8.h.z.m.M.M.M.Z.J.Z.M.U.Z.R.T.T.T.T.E.oX!.E.E.E.T.T.E.T.T.Y.U.U.Z.M.Z.U.R.R.U.U.T.E.Z.z.1.7 6 l =.1.=.5.=.1.1.1.=.=.1.1.1.1.1.1.5.1.3.1.1.5.1.5.1.5.1.5.1.5.1.5.3.5.5.1.5.1.5.1.1.l 6.=.A.jXMXvXzXBXzXBXBXzXZX.p.-.p.p.>.>.>.g.g.,.>.T.tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXkXtXtXtXtXtXtXtXtXtXtX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSX@X@X%X%X$X%XW.A.Z.A.T.E.Y.z.r.r.h.z.J.U.Y.U.U.Y.U.U.Y.Y.T.!.oXXXXX+XwXrXyXyXyXyXyXyXtX,XwX,X;X:X%X XE.~.R.U.U.U.U.R.U.M.R.T.Y.m.8.2.l 6 6 &.1.1.1.1.1.1.1.1.1.1.6.5.4.1.1.1.5.3.5.1.5.3.5.1.5.3.5.1.5.1.1.5.1.5.1.7.1.4.5.=..XBX7XW.A.W.V.A.A.A.A.Z.6.p.=.y.X8.1.l >XjXMX,Xr.6 1.5.&.W.gXzX.>.>.>.>.:.>.p.A.SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCX X%X%X%X-XW.V.Z.R.W.U.n.j.z.j.l.m.U.Y.J.m.m.m.J.K.R.T.T.T.T.T.T.E.E.Q.E. X.X.XXX;XwXwXyXtXtXkXlXNXvXkXuXuXwX.XE.A.R.P.B.U.Y.Y.R.Y.Z.j.q.1.;.6 1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.5.1.5.3.5.p.W.BX6X9.6 =.=.=.e 2.l l 2.5.l A.BXiXS.hXmXA.l x >XzXjXzXE.l 1.;.h.aXMX8X6Xy.>XjX,Xx c x.6.6.=.e =.1.%XCX5Xu 7 &.7 k XNXeXr.*XBX-X=.5.1.=.=./.jX.5.>.p.:.p.a.;XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX8X X-X%XS.Z.A.T.!.E.R.N.j.l.z.j.j.j.l.l.m.J.K.K.K.Y.U.U.K.U.U.K.K.J.m.J.H.n.n.n.n.J.K.K.U.U.T.oXXXrXwXlXlXNXNXmXlXdXwXXXoXZ.N.N.U.U.U.R.U.m.w.;.u 6 6 &.1.1.1.1.1.1.1.1.1.1.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.7.1.5.1.1.5.5.l 5.p.W.CXaXh.e h.rXeX,X>X1X-X7.6 9.lXmXS.k &XBXpXx l -XzXcXzXsXy.5 1.rXmXjXMXdX9.>XBXxX.:.m.ZXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX5X%XS.Z.Z.W.!.!.E.R.m.b.f.a.7.0.s.j.l.n.J.J.K.K.K.J.H.n.j.l.l.f.k.f.s.a.f.G.F.G.F.F.F.F.H.F.l.F.H.I.L.U.T.oX;XtXlXNXNXNXlXtX:XW.Z.Z.Z.Z.R.T.U.m.a.1.1.6 1.1.1.1.1.1.1.1.1.1.1.1.1.1.5.1.5.1.7.1.5.1.5.1.5.1.5.1.5.5.1.5.1.5.1.W.CXiXh.5 V.xXZXzXzXCXsXr.5 -XZXiXr.6 Z.fXzX%X3 2XzXeX1XZX%X3 y.xXfX@XjXdXr.1XjXjXjXxXxXdXy.k 5.5.2.&XCX*X7.=.5.5.5.h.9.7.r.6XCX%X=.5.7.=.&.%XjXXCX X&.&.l =.7 W.MX4Xy.eXMXeXx 9.r.4.4.>XBX-X^.sXmXD.8.9.4.5.&.=.&.1.5.1.5.1.5.1.5.1.7.5.1.5.5.1.1.1.1.1.1.1.1.1.1.tXtX1.=.1.1.1.6 1.1.7.8.8.3.5.7.a.l.R.Q.XX+XwXrX=XE.U.z.h.q.5.;.1.:.1.1.1.1.1.1.l 1.7.1.1.1.1.1.1.2.3.4.1.1.1.1.;.7.7.5.;.;.u ;.1.r.Z.XmX7XzXhXh.v mXdX4.1XMXeXx.c 4.4.r.x.y.e 1.;XCX5Xy.9.y.x.y.-XZX3Xy.eXzX-Xy.9.x.r.y.@XMXiXy.Xc.z.dXgXhXvXzXjXjXjXmX>Xc 1.5.5.5.1.5.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.e tXtX6 6 ;.1.x.8.7.1.:.a.J.!.XX+X!.K.a.;.;.;.u ;.3.5.;.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.3.2.7.1.1.1.5.1.1.2.5.7.1.7.5.7.7.7.7.5.7.7.7.7.7.6.1.l y..XxXGXGXmX%XZ.Z.Y.Y.!..X/.sXJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCX$X-X;X;XXXU.a.0.7.q.k.l.l.k.f.a.a.a.7.7.q.7.u.q.7.q.u.q.7.a.0.a.7.a.q.q.a.a.q.a.a.a.d.a.d.s.d.d.d.f.d.f.l.f.l.l.l.f.f.l.l.H.F.F.F.F.H.H.H.H.M.R.yXmXGXJXmX XZ.L.Z.A.E.Z.1.5 1.4.1.&.1.1.1.1.1.5.1.1.7.1.1.6.3.1.5.1.5.1.5.1.7.6.6.5.1.4.z.y.Z.t.y.t.y.y.9.z z.^.y.y.y.z.8.=.l l r.z.r.^.y.=.&.x y.y.e *.z y.t.e r.^.t.y.z.t.t.y.y.t.k.5.e v c.t.4.y.y.t.z.r.1.7 1.t.V.y.y.z.h.r.y.b 2.6 z.y.t.r.y.t.y.y.y.c 6 8.z.v y.r.y.c.y.b c.h.;.1.5.1.1.5.1.7.1.1.1.1.;.1.1.1.1.1.1.e 1.1.1.=.tXtX1.1.8.8.1.3.3.q.l.R.!.!.T.m.7.;.;.3.1.1.1.3.7.3.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.5.1.5.1.1.7.7.5.1.1.6.7.2.7.6.7.7.7.7.7.7.7.8.i.i.5.;.w.!.mXGXDXdXW.U.F.J.!.=X%X9XFXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXjX%XwXrXrX!.n.q.:.a.j.l.l.k.j.a.0.7.7.7.0.q.u.7.q.q.0.7.q.7.q.q.u.a.q.a.q.q.a.q.a.a.a.f.d.d.a.f.f.d.d.f.f.f.k.k.l.l.f.F.l.f.f.F.F.F.F.F.F.F.G.I.L.J.J.!.eXZXJXDXuXT.M.M.U.T.T.w.5 e 1.l 1.1.1.1.1.1.5.1.1.1.1.1.6.1.5.1.5.1.5.1.5.5.5.6.5.1.3.l 5.p.5.p.5.p.5.5.p.=.5.7.&.p.5.2.1.1.1.5.1.6 6 8.p.1.w l 6.p.1.l 2.1.1.l 5.5.&.5.p.p.5.2.5.p.5.i k 1.5.5.=.5.5.*.p.p.p.=.5.&.&.5.5.1.i k 7.5.8.l p.5.p.p.&.5.p.1.5.5.6 5 l 1.&.1.1.&.1.=.p.5.5.5.5.1.5.5.1.1.1.1.;.1.;.1.1.1.1.1.&.1.1.e tXtX1.7.8.7.;.3.s.Y.~.~.U.z.x.3.1.1.1.1.1.1.;.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.5.5.1.5.5.5.1.7.6.1.1.5.1.5.7.5.1.1.7.7.6.7.6.7.5.7.7.7.7.8.7.5.p.G.i.7.3.t..XNXGXNX:XA.K.J.T.-X-X1XSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXgX%X,XrXrXR.w.7.7.s.k.l.h.a.i.a.8.a.8.7.7.7.a.8.a.u.i.a.i.u.0.q.u.q.7.u.u.q.a.7.a.q.a.a.g.a.f.f.a.a.f.d.f.d.f.f.f.l.k.f.l.f.f.f.f.F.F.F.F.F.F.f.G.F.L.L.L.Y.~.yXGXLXAXeX~.J.M.T.!.Z.3.6 2.1.1.1.1.1.1.2.1.7.2.2.7.1.1.1.7.1.5.1.5.1.1.=.1.1.=.5.5.1.1.1.1.1.1.1.1.1.5.3.1.5.7.5.6.1.5.1.5.7.5.1.1.1.8.5.1.5.p.8.4.1.2.5.6.1.5.3.3.1.1.1.6.5.6.7.1.1.7.1.1.5.8.7.1.5.8.5.5.7.5.5.7.1.1.3.7.5.=.8.5.1.1.1.&.1.7.1.5.5.5.6.7.5.7.8.1.1.1.7.1.1.5.1.5.1.5.1.5.;.1.1.1.1.1.1.1.1.1.&.1.l 1.1.6 tXtX7.5.1.;.0.M.T.Y.Z.h.8.8.5.1.7.7.1.=.1.1.1.1.1.1.1.1.1.1.1.1.1.1.6.2.1.2.1.6.6.5.1.1.1.5.1.6.1.1.5.1.5.1.1.6.7.6.7.6.6.7.7.5.7.7.5.5.8.7.q.7.5.u.p.i.q.7.5.j.wXZXDXlX-XU.z.Z..X-XwXSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX8X$XyXwX.Xm.e.3.s.k.j.a.w.q.0.7.8.8.8.8.7.7.7.7.7.8.8.a.a.0.7.0.q.q.u.0.a.a.g.a.a.a.a.a.d.a.a.f.d.f.d.a.f.d.d.f.f.f.a.d.f.f.f.F.F.f.l.l.f.f.F.d.F.l.f.l.f.g.f.I.P.XXMXPXLXxX!.K.M.T.!.T.x.e =.1.1.1.1.1.1.1.1.1.1.2.7.1.5.1.5.1.5.1.5.7.1.5.6.1.1.6.7.3.1.1.1.1.1.1.1.7.;.1.4.1.3.5.7.5.1.1.1.3.1.7.7.5.5.=.p.5.8.6.3.1.5.5.5.1.4.7.3.1.1.1.1.1.7.5.8.5.u 1.1.1.7.5.5.1.1.1.5.1.3.z l 7.5.3.7.7.5.5.;.3.1.3.1.7.1.5.5.5.5.5.5.7.3.1.1.1.5.3.3.1.5.1.5.1.5.1.1.1.1.;.1.1.1.1.;.1.=.1.1.&.1.1.tXtX1.1.7.s.M.R.K.j.8.4.l 1.1.1.2.2.1.6.2.5.5.5.1.1.1.1.1.1.1.1.5.6.8.p.6.5.5.5.*.5.8.8.5.5.7.6.5.1.1.5.1.1.5.5.2.5.6.7.6.6.7.5.5.7.7.7.7.8.3.4.7.7.u.a.u.7.7.u.i.U.uXDXAX4XT.Z.J.!.-X,XZXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXjX%XeX;X.Xh.3.w.a.j.j.a.8.q.q.q.8.8.8.8.8.i.8.i.7.a.8.8.7.8.u.q.a.u.a.a.a.q.q.q.q.q.a.a.a.g.a.a.a.a.a.a.f.a.f.d.f.k.f.f.f.f.l.l.l.l.n.H.H.l.l.H.H.F.l.l.l.n.n.n.H.I.H.R.yXFXLXSX;XA.n.T.!.W.y.u 6 6 1.=.1.1.1.1.1.5.1.1.1.1.1.5.1.1.1.1.1.1.5.7.5.=.5.1.1.5.1.7.5.1.1.1.5.;.5.5.;.7.5.u.5.5.5.;.1.5.1.1.5.5.5.5.6.1.1.1.7.5.5.5.1.;.5.5.1.1.5.1.1.3.;.;.1.1.5.5.5.:.5.5.:.5.5.5.;.7.3.1.1.5.1.3.5.5.5.5.1.1.1.;.5.5.5.5.7.1.5.5.;.;.5.7.5.5.5.5.5.1.5.1.5.1.5.1.1.1.1.1.1.1.1.1.1.1.1.1.l 2.7.tXtX;.5.n.Y.U.j.q.3.4.1.e 1.6.2.1.1.1.6.1.2.l l 1.5.p.5.5.5.6.4.k 3 8 , < < < < < < < < , 2 k c 4.6.p.5.5.7.1.4.7.1.2.7.7.7.6.7.7.6.7.7.8.7.3.0.a.7.7.q.q.7.7.g.u.1.a.oXNXAXlXW.N.z.~.=XeXZXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXgX&XeXwXE.w.;.q.d.k.a.a.8.8.7.7.a.8.8.i.8.8.8.8.i.7.7.u.8.q.8.a.7.8.8.a.q.8.u.u.g.g.g.i.a.g.g.a.a.g.a.a.a.f.a.f.f.a.d.f.l.l.l.l.l.k.l.l.f.l.l.F.l.F.l.F.l.F.F.l.F.l.F.F.L.J.XXmXPXJXdXE.K.U.E.!.z.6 7 1.1.=.=.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.5.1.5.1.3.5.1.5.1.5.3.5.1.1.5.1.5.1.5.5.5.3.1.5.5.1.5.5.5.1.5.1.5.5.5.1.1.5.5.1.5.1.1.5.1.5.3.5.1.1.5.3.5.3.7.1.5.1.5.1.5.1.1.1.5.1.5.1.1.5.5.1.1.5.3.5.1.5.1.5.1.5.1.5.5.1.1.5.5.1.5.1.5.5.1.1.1.5.1.1.6.1.7.2.1.7.1.1.1.1.1.u 1.=.2.1.1.1.1.1.7.3.tXtX0.l.L.K.h.x.5.1.1.1.1.1.1.1.1.1.1.1.1.1.4.l u 5.p.i.7.l 8 : : < > 0 j j v m m j j g 0 > : : < 5 6.i.5.=.2.4.5.7.7.7.7.5.6.7.6.7.6.7.8.8.7.7.8.7.8.8.8.7.8.a.q.7.u.u.Z.eXZXNX-XN.z.T.XXeXAXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXjX&XeXrXM.q.3.s.k.a.a.a.8.8.7.7.i.i.7.8.8.8.8.8.a.7.8.7.7.8.7.7.a.a.7.8.8.i.a.a.q.u.a.g.q.g.a.a.a.a.a.a.a.a.f.d.f.d.f.d.d.d.d.f.f.d.l.l.F.F.f.l.l.l.l.l.l.l.l.l.l.l.k.F.F.F.H.n.A.4XFXLXmX.XT.~.Q./.Z.3.u 2.2.=.1.1.1.1.1.1.1.1.1.1.1.1.1.1.5.1.5.1.5.5.1.5.1.5.1.5.1.1.5.5.3.3.5.1.5.1.5.1.1.1.5.5.1.1.7.1.5.1.5.1.5.5.1.5.1.5.1.5.1.5.1.5.1.1.5.1.5.1.5.1.5.1.5.1.5.5.1.5.3.1.5.1.5.1.1.1.5.5.1.5.1.5.1.5.3.1.1.5.1.1.5.5.1.1.7.1.5.1.1.1.5.7.1.5.2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.6 6 1.7.7.1.tXtXJ.J.l.g.7.5.1.1.1.1.1.1.1.1.1.1.1.1.c 1.5.5.5.z c : : < , b Z./.>X,XeXdXdXdXdXaXaX6X,X$XS.Z.b : $ < x 6.5.8.7.6.6.2.6.7.7.6.6.7.7.7.8.6.7.7.8.8.7.8.a.7.8.a.a.8.u.a.q.r.-XvXZXeXA.z.T.-X,XAXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKX KXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXMX>XyXrXm.e.3.w.l.f.q.u.i.7.7.7.7.7.q.8.7.8.8.8.7.8.7.7.u.7.7.i.8.7.7.a.8.q.a.8.i.u.a.a.a.a.a.a.a.a.d.a.a.s.d.a.a.f.a.f.d.f.f.l.f.f.l.d.l.f.f.l.l.l.F.l.l.l.l.l.l.k.l.l.l.F.F.F.l.J.B.oXAXLXAXeXT.Y.E.-XU.1.6 =.e 1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.5.1.5.1.3.5.1.5.1.5.1.5.3.5.1.5.5.1.5.3.5.1.1.5.1.5.1.5.5.1.5.1.5.1.5.1.1.5.1.5.1.5.1.5.1.5.1.5.5.3.5.1.5.1.5.1.5.1.5.1.1.5.1.5.5.1.7.1.5.1.5.1.1.5.1.5.3.5.1.5.1.5.1.5.7.1.5.1.5.1.5.1.5.1.5.1.1.5.5.3.1.3.1.5.7.1.1.1.1.1.1.1.1.e =.=.1.7.7.3.1.7.tXtXJ.l.7.;.1.1.1.1.1.1.;.1.1.1.1.1.1.1.=.5.p.6.l , $ > j C.2X1XXXhXBXAXCXBXnXzXhXhXzXcXgXjXhXhXcXhXhXjXhXjXjXjXzXBXBXSXSXHXjX$ , 4.p.5.3.1.8.6.6.7.6.7.8.8.8.6.8.8.8.8.8.8.8.q.8.8.8.8.a.i.a.a.a.a.a.k.k.T.eXeXW.j.T.bXHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXAXyX:XN.e.q.t.a.0.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.8.7.7.8.7.8.8.8.8.8.8.8.8.i.i.7.5.7.7.7.7.u.7.:.5.u.7.u.7.7.u.q.a.a.a.a.g.l.d.d.a.d.d.a.a.a.a.f.l.l.l.l.l.f.f.d.d.d.k.k.l.f.l.l.k.l.F.l.l.l.d.F.l.W.ZXGXdXW.T.Y.!.z.l e e 6 6.1.1.;.1.1.1.1.1.3.2.5.6.4.1.5.1.7.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.7.1.3.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.5.1.5.1.5.1.5.1.5.1.7.1.5.1.5.1.7.1.5.1.5.1.5.1.1.5.1.7.1.5.1.1.5.1.1.1.1.1.1.1.1.1.1.2.1.6 ;.7.8.;.3.a.k.l.a.0.1.1.tXtX1.1.=.1.1.1.1.1.1.1.1.5.1.1.4.< 9 b Z.S./.bXZXAXBXnXjXjXhXhXjXjXjXjXcXjXjXjXgXhXcXhXhXhXzXhXzXjXzXBXCXSXSXC.: 2.p.5.3.1.6.6.7.6.6.6.8.8.6.8.8.8.8.8.8.8.8.8.8.8.a.8.a.a.a.r.a.a.a.k.a.h.W.eXeXT.z.A.hXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXfXeXZ.3.q.r.a.q.0.7.7.7.5.5.3.5.7.5.5.7.5.7.7.5.7.7.7.7.7.7.7.5.5.p.7.7.8.8.8.6.6.8.7.8.8.7.5.7.a.a.a.d.l.H.J.J.K.Y.K.J.l.f.a.q.q.a.u.u.u.g.d.d.a.a.a.a.f.f.f.d.d.d.d.f.f.d.d.d.f.f.l.l.l.l.k.f.a.d.d.l.l.f.d.G..XNXJXpXU.~.W.W.y.6 e =.1.l =.1.1.1.1.1.1.1.1.1.3.5.1.1.5.1.5.1.7.1.5.1.5.1.7.1.5.1.5.1.5.1.5.1.5.1.5.1.5.5.1.5.1.5.3.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.3.5.1.1.5.1.5.1.5.1.7.1.5.1.5.1.5.1.5.1.5.1.7.1.5.1.5.5.1.5.1.3.1.5.3.1.1.1.7.1.1.1.1.1.1.&.2.1.7 1.8.7.;.7.l.l.a.7.3.;.1.tXtXu 1.1.1.1.1.1.1.1.1.1.1.=.2.< : h A.A.%XkXZXBXzXjXgXhXcXhXhX7X9X6XhXzX7X1X9XaXhXcXhXjXhXhXhXjXzXzXjXBXCXHX8X, e p.5.7.5.6.4.6.7.8.7.8.6.8.8.8.8.8.8.8.8.8.8.8.a.8.a.8.i.8.a.a.h.a.j.j.q.t.E.rXrXR.z.W.AXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXzXdXE.0.w.r.w.8.7.7.5.5.7.1.5.7.7.5.7.7.5.7.5.5.7.7.7.7.7.7.7.7.7.8.8.7.7.7.5.6.6.8.8.8.8.8.a.f.H.J.J.Y.T.T.T.T.Q.Q.Q.!.!.XXXX!.Q.Q.K.m.f.d.q.u.0.a.f.a.d.f.f.a.a.f.d.d.d.f.d.d.d.f.f.k.l.l.f.f.d.d.f.f.d.d.f.d.G.b.oXAXGXwXY.R.!.~.q.5 l 1.1.;.1.1.1.1.1.1.1.6.2.1.1.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.1.5.3.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.3.5.1.5.1.5.5.1.7.1.5.1.5.1.5.1.5.1.5.1.7.1.5.1.5.1.5.1.5.1.1.5.1.5.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.;.=.1.1.7.3.7.k.m.j.7.3.1.1.1.tXtX1.1.1.1.1.1.1.1.1.1.1.1.3.p + , D.Z.%XsXBXCXjXcXcXcXcXcXjXjX*X@X@XaXjX*X@X$XaXhXhXhXhXhXhXhXhXjXjXzXmXBXSXBXv e p.5.1.1.6.6.7.7.7.7.8.6.8.6.8.8.8.x.i.p.8.a.8.8.8.a.q.a.a.a.a.a.h.a.h.k.a.k.~.=X=Xz.z.eXJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXGXdX=Xw.7.h.q.8.7.7.3.;.5.5.7.7.5.7.7.5.3.7.5.5.5.5.7.7.7.7.7.7.7.7.7.7.7.7.5.7.7.7.8.h.k.z.z.J.K.K.K.K.K.P.R.R.R.R.T.Q.Q.Q.Q.Q.XX+X+XXXXX!.Q.K.v.s.g.g.a.a.a.a.f.f.k.d.a.a.d.f.f.k.f.f.k.f.k.k.f.d.l.l.l.d.a.f.f.G.n.e. XNXDX-XT.A.!.Y.4.l 1.=.1.1.1.1.1.1.1.1.1.7.1.1.6.1.7.1.5.1.5.1.5.1.7.1.5.1.5.1.5.1.7.1.7.1.5.1.5.1.5.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.3.1.5.1.5.1.5.1.5.1.5.1.5.1.7.1.5.1.5.1.5.1.5.1.7.5.1.5.5.1.1.7.1.1.1.1.1.1.1.1.1.1.2.=.6 ;.3.7.;.3.f.H.j.7.1.1.1.1.1.tXtX1.1.1.1.1.1.1.1.1.1.1.6.p + < v Z.W.lXZXjXcXcXhXcXaXaXcXzXnXzX*X@XXaXfXsXhXsXhXfXhXfXfXcXcXhXjXjXjXzXlXl.8.a.8.i.7.i.8.6.5.1.6.8.8.8.8.6.7.7.8.x.8.8.8.i.8.8.x.8.h.q.h.8.a.i.h.k.k.f.d.d.l.f.n.Y.Y.U.y.$XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXeXZ.h.k.h.3.3.7.3.1.7.1.7.7.1.1.5.5.1.7.1.6.7.7.5.7.7.6.6.5.5.5.5.5.7.0.a.a.a.q.q.q.s.f.j.f.l.n.n.H.J.K.K.P.U.T.T.oXXXXXXXOX,X,XwXwXwXwX+XwX+X+X+XwXOX+X+XwXwXXXXXwXwX+XQ.f.7.s.l.f.a.d.d.f.d.f.f.d.f.f.d.G.l.d.f.d.d.d.d.d.l.l.a.k.W.DXvX XA.T.!.r.l l 1.6 1.1.1.1.1.1.1.1.1.1.1.1.6.1.1.1.5.5.1.5.1.7.1.5.1.5.1.5.1.5.1.7.1.5.1.1.5.1.5.3.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.1.5.1.5.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.3.5.1.1.5.1.1.1.1.;.1.1.5.1.1.1.1.1.1.;.1.1.1.6 =.8.7.1.a.l.k.7.3.1.1.1.;.1.1.1.1.tXtX1.1.1.1.2.1.1.1.1.1.e : $ ^.$XbXkXiXaXcXsXsXaXsXaXsXaXaXgXaXgXjXgX4X$X1XaXaXfXhXaXaXhXaXfXfXcXfXhXgXgXmXzX-X7.8.a.a.a.q.h.a.8.7.5.7.7.8.7.6.7.7.6.8.8.8.x.i.8.x.i.8.a.8.x.a.i.h.h.h.k.a.a.k.f.f.s.j.K.Y.!.k.z.ZXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXxX~.z.h.h.q.3.3.1.1.5.1.5.7.7.1.5.1.1.5.1.5.5.1.5.7.1.5.1.1.1.1.1.5.7.q.0.a.a.s.q.u.q.s.a.l.l.n.n.H.J.J.K.U.U.R.R.E.oX.XXX=X+X+XwXwXwXwXwXwXwXwX4XwXwXwX4X+XwXwXwXwXXXXXwXwXXXK.w.s.l.d.g.d.d.d.d.f.d.G.d.F.d.d.f.d.d.d.d.f.d.f.k.f.j.k.rXDXyXW.M.~.U.3.6 1.1.2.=.1.1.1.1.1.1.7.2.1.1.1.2.3.2.1.1.5.1.7.1.5.1.5.1.7.1.7.1.5.1.5.1.7.5.3.5.1.5.1.5.1.5.3.5.1.5.3.5.1.5.3.5.1.5.1.5.1.5.3.5.1.5.3.5.1.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.5.1.5.1.1.5.1.1.1.1.1.1.1.1.l 1.1.1.1.6 &.6.8.3.7.l.m.h.3.1.1.1.1.1.e 1.1.1.tXtX1.1.=.1.1.1.=.6 e 1.6 $ < ^.2X1XdXiXaXdXaXsXiXaXpXsXaXpXaXaXgXjXhXX$X*XaXaXaXsXfXsXhXhXhXfXhXhXfXiXA.z 3.i.0.q.a.g.g.a.s.a.s.f.f.f.f.f.q.i.7.7.7.7.7.8.7.8.8.8.8.8.i.8.8.a.a.a.h.h.a.h.f.a.f.a.d.d.f.j.b.K.n.s.l.mXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXAXT.j.h.r.7.4.7.6.2.1.1.5.3.3.1.3.1.5.1.3.1.5.1.1.1.7.1.1.;.;.0.0.0.0.0.7.g.7.q.q.g.s.s.s.f.f.j.s.s.l.J.J.K.R.T.T.T.T.!.XX;XwXwXwXyXwXyXuXyXyXuXyXuXuXuX4XtXuXtXtXuXuXuXuXtXtXOXyXwXXXXXuXwXB.e.a.s.a.d.i.g.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.a.J.uXvX XZ.Y.R.6.6 =.2.2.1.1.1.1.1.1.1.1.1.1.1.1.2.5.1.5.1.5.1.5.1.5.1.7.1.5.1.5.1.5.1.7.5.1.5.1.5.3.5.1.5.1.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.1.5.1.5.3.5.1.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.5.1.;.1.;.1.1.1.5.3.1.1.1.1.e e 2.e 2.x.8.1.0.f.j.7.1.1.1.1.1.1.1.1.1.1.1.1.tXtXl 2.l 2.=.e e l e e w 1 + f *X*X9XaXaXpXaXsXiXiXsXdXiXdXaXiXcXjXjXgX4X6XpXfXpXsXxXfXsXsXsXsXfXeXW.y.1.5.i.p.7.u.q.g.s.s.g.s.a.a.f.f.f.f.f.f.g.5.7.a.6.5.i.i.8.8.x.x.i.i.r.h.p.i.k.k.8.q.w.q.a.a.d.f.k.n.l.J.K.J.a.=XKXKXPXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX7XN.s.h.q.7.4.6.1.5.7.1.1.1.1.5.1.1.3.1.1.1.3.1.1.6.3.1.1.1.7.0.q.7.q.0.0.0.q.g.0.a.s.s.a.a.j.n.n.n.n.H.J.H.K.U.T.T.!.!.XX;X;XwXwXyXyXwXuXuXyXyX4XtXuXyXtXtXtXtXtXuXuXuXuXuXyXyXyXyXuX+XwXwX;XR.q.q.d.q.G.G.g.d.d.d.d.d.d.d.d.G.d.d.d.d.f.d.a.f.a.E.lXyXR.U.R.z.=.=.=.2.1.1.1.1.1.2.1.=.5.=.1.5.5.1.5.1.5.1.7.1.5.1.5.1.5.1.5.1.5.1.5.1.1.5.3.5.1.5.1.5.1.5.3.5.1.5.3.5.1.5.1.5.1.5.3.5.1.5.3.5.1.5.1.5.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.1.1.1.5.5.5.1.5.3.3.1.1.1.=.2.=.=.=.2.8.3.3.q.a.s.7.1.1.1.1.1.1.1.1.1.l l =.tXtX1.=.1.e 2.e e l e w w w : < S.*X1XiXbX9XiXsXaXpXsXsXsXaXaXgXhXcXzXzXhXcXpX6X6X1X2X%XS.S.A.Z.V.q.z l 1.5.i.u.i.q.q.a.g.a.g.a.s.s.f.s.f.f.H.H.f.7.8.a.7.8.8.8.8.6.6.4.1.1.4.4.r.k.i.p.k.k.j.q.s.f.f.s.k.s.f.m.Y.J.a.m.SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXS.w.s.e.8.4.2.2.2.1.1.1.5.1.3.1.5.1.5.1.5.1.5.1.1.5.1.1.5.7.8.0.q.g.g.7.q.g.q.q.q.0.a.a.s.s.s.f.l.n.J.J.K.P.K.U.R.T.!.oXXXXXXXXXwXyXuXuXuXyXyXuXyXtXtXtXtXtXlXtXgXuXlXuXlXuXuXtXuXuXuXyX+XXXuXuXQ.0.s.f.i.i.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.a.d.f.u.l.rXlXXXM.Y.Z.6.e =.1.=.1.1.1.1.1.1.1.1.1.1.1.1.5.1.5.1.7.1.5.1.5.1.5.1.7.1.7.1.5.1.5.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.1.5.1.5.3.1.5.3.5.1.5.3.5.1.5.3.5.1.5.3.5.1.5.3.5.5.5.1.;.1.1.1.;.:.5.1.1.2.2.=.e r =.8.8.3.8.a.a.7.1.1.1.1.1.1.1.1.1.1.1.1.l tXtX1.l 1.2.=.=.e l e w 2 e e < ^.>X*X9XaXiXpXpXsXaXcXaXiXaXaXaXcXcXcXsX6X2XS.V.v b q q 4 3 3 w 6 e l 1.8.8.7.7.7.u.0.s.s.s.s.a.s.s.f.f.k.j.H.v.f.f.a.8.7.8.8.4.4.4.4.y.Z.V.9.h 3 z r.k.k.d.d.a.a.w.f.f.j.f.a.l.J.K.l.u eXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXgXy.j.j.e.4.3.1.1.1.1.1.1.1.1.1.1.1.5.1.5.5.1.1.7.1.1.1.3.5.0.a.0.q.q.u.g.q.q.q.g.q.a.s.a.a.s.s.f.l.l.n.n.n.K.K.R.R.T.R.T.L.H.a.e.s.R.XXwXtXtXtXtXtXgXuXuXtXtXgXtXtXlXlXtXlXtXtXuXuXuXuXyXwXwX+XuXuXR.e.q.d.i.a.a.d.d.d.d.d.a.d.d.d.d.d.d.d.a.l.d.d.a.U.uXwXT.U.R.h.2.e 1.;.1.1.1.1.1.1.1.5.=.1.1.6.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.3.5.1.5.3.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.1.5.1.5.3.5.1.5.3.5.1.5.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.1.1.1.5.5.;.1.3.1.1.l =.=.=.e 1.q.7.1.q.h.q.3.1.1.1.1.1.1.1.1.1.1.=.1.l tXtXe 1.=.e 2.e l e e w 7 =.x.3 c S.1X7X6XiXiXaXsXsXaXgXgXaXhXhXgXiX2XC.v q q q 0 q h 3 k l 2.5.5.=.6.6.7.4.4.q.u.0.s.s.g.s.s.f.f.f.f.k.l.l.f.f.f.n.l.a.7.e.z z r.A./.;XeX9X1X@Xv p 4 e.k.k.i.d.a.a.a.a.j.f.a.f.l.K.U.3.m.HXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJX%Xe.z.q.3.3.1.3.2.5.1.1.5.5.3.5.3.1.3.1.1.1.1.1.1.1.1.1.7.7.a.s.0.g.q.q.q.g.g.q.q.g.s.a.s.f.j.l.j.l.n.n.m.K.K.K.K.m.b.w.w.5.;.l i i 1.8.N.oX;XuXkXuXuXtXtXtXlXuXlXlXtXgXtXgXlXlXlXuXuXtXuXuXyX;XXXeXeXM.,.a.F.d.d.d.d.d.d.a.a.d.d.d.d.d.d.d.d.d.k.F.a.z.XXuX.XZ.Y.Z.4.6 1.1.=.l 1.1.1.=.1.5.1.5.1.1.5.1.5.1.5.1.5.1.7.1.5.1.5.1.5.1.5.1.5.5.1.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.3.5.1.5.3.5.1.5.1.5.1.5.1.5.1.3.5.1.5.3.5.1.5.3.5.1.5.3.5.1.5.3.5.1.5.5.1.5.1.1.1.1.1.;.1.1.1.1.1.e 1.1.7.8.5.;.s.a.7.1.1.1.1.=.1.1.1.1.e ;.1.l =.tXtX1.1.l 1.2.r e e w e e =.2.2.w y.$X6XiXiXiXaXsXsXfXgXaXfXhXaX%X^.h q 0 q q q h k k c l 1.5.5.5.p.6.7.6.7.4.7.7.u.q.a.a.a.g.a.s.a.j.f.f.l.n.f.f.n.H.n.n.4.x Z.%XXsXBXSXSXSXHXJXJXJXHXAX7Xj , r.F.i.k.a.j.s.a.l.a.a.l.N.J.F.4.HXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXE.q.e.q.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.;.1.1.1.7.1.1.;.7.a.h.a.a.h.s.w.a.s.q.a.s.s.a.s.s.0.w.g.s.v.s.0.3.3.1.l c c h , $ O . . . . X + , i 3.7.i.U..XeXlXlXlXgXlXlXlXlXlXMXmXxXxXlXxXlXsXdXyXuXXX+XuXXX8.8.d.i.G.d.a.a.a.a.a.d.d.d.d.k.a.f.k.a.f.a.d.M.rXXXZ.U.J.7.;.1.1.&.6 1.1.1.1.1.1.1.1.1.1.5.1.5.1.5.1.5.1.7.7.1.7.1.7.4.2.1.7.1.2.4.2.1.4.2.4.8.3.1.1.1.l 1.3.1.4.1.3.1.1.1.1.8.6 1.6.7.1.7.1.8.3.1.4.1.4.4.7.5.1.1.1.1.;.5.1.1.5.1.5.1.1.1.1.1.1.1.1.1.5.1.&.=.1.6 &.7.7.1.8.a.8.1.1.1.1.1.1.2.1.1.=.=.e 1.=.1.e tXtXl =.1.e 2.e 6 e 1.1.2.1.1.1.1.1.6 l e x ^.W.W.S.D.x.c q q w k w k c i u u ;.;.1.1.2.l l u i 3.x.1.7.7.7.8.h.d.i.7.s.a.g.g.q.g.s.s.s.s.f.s.l.F.l.c.z i Z.%XsXAXVXVXCXBXCXVXVXSXHXJXSXcXt , 9.e.j.f.a.j.d.f.d.f.k.n.K.n.3.dXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXNXz.h.e.4.1.1.1.1.1.1.;.1.1.1.1.1.1.1.1.1.1.3.1.1.;.1.3.q.f.f.w.a.h.s.s.s.s.s.a.a.s.a.a.a.g.g.g.0.0.:.3.z x l k , : @ o O @ % % > > % % O o o . + < 3 l &.5.k..XyXkXlXlXmXmXMXmXNXmXxXmXzXNXxXlXlXtXyXwX;XwXeXY.1.d.d.p.i.G.a.a.a.a.d.d.d.i.f.a.a.a.a.f.k.d.l.XX=XY.Z.K.a.1.6 1.1.l 1.1.1.1.1.1.1.1.1.1.1.5.1.5.1.5.1.7.1.2.1.7.2.1.1.1.1.e 7 1.1.4.l 4.1.e l u 1.7.l u 3.1.3.3.1.3.1.l 1.l 8.1.1.2.1.e 2.6 1.l 5 1.l l l 6.1.1.1.5.1.1.1.5.5.1.5.1.5.1.1.1.1.1.1.1.1.1.1.6 e =.e 1.7.7.3.a.a.7.1.1.1.1.1.1.1.1.2.1.1.1.1.e =.l tXtX=.l =.l l e e e 1.1.1.1.1.1.1.1.1.1.1.e w w w w q w w w c w c k r =.=.2.1.l l 1.p.p.6.6.7.5.4.8.4.;.5.7.7.:.p.a.a.q.a.s.d.q.g.s.f.f.s.a.h.l.G.k.v p p Z. j M |.%X,X.>.f.XXAXSXAXAXAXZXzXlXlXyXeX;X=XXXXXwXK.u.d.i.d.g.i.g.d.g.a.a.d.a.f.d.a.f.k.k.G.k.m.!.!.U.K.z.6.6 1.1.&.l 1.1.1.1.1.1.1.1.1.5.1.5.1.5.1.1.1.1.1.2.6.7.l u 4.6.2.6.4.2.x.l 4.e h.2.1.4.6 u 8.1.1.3.3.3.1.l 2.4.2.4.4.l r.l k 4.4.2.1.l 8.4.6 1.1.1.1.1.1.5.1.5.1.5.1.5.1.1.1.1.1.1.1.1.1.1.=.1.=.1.8.1.1.q.a.8.7.;.;.1.1.1.1.1.1.1.=.l 1.=.1.e e =.tXtXl =.e e e l 2.2.1.1.1.7.6.1.1.1.1.1.1.l l 1.1.1.1.;.1.1.2.2.;.u.> # o # B a W _.[.[.[.[.{.{.{.{.{.[.`.<.a B o O , h.a.8.a.8.a.h.k.a.a.7.7.u.p.w.9 9 V.*XiXfXsXkXjX8XcXcX8XcXjXjXjXjXjXnXBXFXFXM < F.k.k.a.j.k.k.a.w.f.I.Y.e.AXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX X9.4.4.l 2.2.1.1.1.1.1.3.1.1.1.1.1.1.1.1.1.1.1.;.3.a.j.j.f.s.l.l.n.n.f.v.f.n.n.a.7.5.4.> X X O % j m C.%X*X,X O X X + < p ;.a.,XDXFXVXZXZXBXxXlXdXeXwXwXXXXXXX+Xd.7.i.k.i.d.i.d.d.a.d.d.d.d.d.d.d.a.a.k.a.f.U.!.U.Z.m.7.1.e ;.1.2.1.1.1.1.1.1.1.1.7.1.5.1.5.1.5.7.5.1.1.2.7.7.8.7.8.8.8.h.8.8.h.8.q.8.h.8.8.8.7.3.3.1.1.1.1.1.3.1.4.7.8.8.r.8.r.8.8.8.8.x.x.6.8.r.7.1.7.1.5.1.5.7.5.1.5.3.5.1.1.1.1.1.1.1.1.1.e 2.=.6 e 5.7.1.3.a.a.3.3.1.1.1.1.1.1.1.e 1.1.1.1.1.1.1.1.1.tXtXu 1.=.1.e 1.1.1.1.1.1.1.5.1.5.1.5.1.1.3.1.;.l 1.1.2.5.:.:.6.q % # # d a E _.{.[.[.[.[.[.[.{.[.{.{.OXOXOX`._.a # X O p h.i.i.h.h.x.i.i.u.5.u.i.7.< : M 1XsXsXcXcXcXcXcXcXjXcX8XcXjXjXjXjXBXBXJXjX> 9.k.d.G.f.s.z.a.j.l.H.Y.a.eXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXDXR.9.4.z l l 1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.1.8.j.j.j.j.j.l.j.n.l.l.v.l.n.l.a.5.1.c @ @ 0 j D./.@X2X>X1XeXeXX>X1X # o . . < 6.8.,XZXDXAXZXmXxXlXuXyXwXwX+X+XXX+XoXa.u.d.a.i.d.g.d.d.d.i.G.i.d.d.d.d.a.a.f.a.n.T.R.U.U.r.1.l 6 1.1.1.1.1.1.1.1.1.1.5.1.5.1.5.1.5.1.1.5.7.1.5.1.1.1.1.1.1.1.1.;.;.;.;.7.5.7.1.1.1.1.1.3.5.7.1.1.1.1.1.1.1.1.1.1.1.6.1.1.1.1.1.1.1.1.1.5.1.6.7.5.1.1.5.1.5.1.5.1.5.1.4.1.1.1.1.1.=.2.e 1.;.3.7.3.7.a.q.1.1.1.1.1.;.1.=.1.1.1.1.1.1.1.1.l ;.1.tXtX1.1.1.;.1.1.1.1.7.1.1.5.5.7.2.7.7.1.5.1.1.1.7.3.3.;.2.c 0 # B d E Q _.[.[._._._._._._._._._.)._._.[._.].].OXOX{.{.).# + $ w.0.g.f.,.7.8.8.p.7.6.c + g 1XiXpXsXaXgXgXcXcXaXcXcXcXhXhXhXcXjXnXCXHX5X< h.F.f.s.a.h.l.k.f.n.U.k.m.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXpXe.r.z l 4.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.l l 1.q.h.l.j.n.l.l.n.n.n.n.n.v.n.n.q.1.1.x : O > j V././.%X$X2X*X j m D./././.2X$X2X1XaXmXAXSXFXHXJXJXJXJXJXPXPXLXLXLXLXPXJXFXFXVXVXFXFXSXAXSXAXmXmXgX|.j & . $ 3.7.E.xXzXxXxXlXkXtXeX;X+X+X+XQ.Q.!.Q.f.u.a.a.i.i.d.d.i.i.G.g.d.d.d.d.a.d.d.d.a.H.T.Y.U.m.6.2.e 1.=.1.1.1.1.1.1.1.1.1.5.1.5.1.5.1.1.1.5.5.1.5.1.1.4.7.1.1.1.7.5.5.3.5.5.5.7.1.1.1.1.7.7.4.1.1.1.1.5.1.5.6.7.5.7.5.5.5.7.5.1.1.5.7.5.1.5.5.5.5.7.1.6.1.5.1.5.5.1.5.1.1.1.1.1.1.1.=.1.1.6 1.7.1.5.a.q.;.1.1.;.1.1.1.1.;.1.1.1.1.1.1.1.1.;.1.1.tXtX1.1.1.1.1.1.5.7.7.3.1.7.7.7.7.5.6.7.1.7.7.1.7.7.4.> $ B a W Q Q _.Q Q Q Q Q Q )._.).).)._.Q Q _._._._.Q Q ^ ^ _.[.[.[.[.[.B + 8 z.7.7.8.7.:.u.5.1.b $ > #XiXiXsXiXaXcXcX*X2X*X8XzX9X2X9XcXjXnXnXSX8Xb h.l.a.k.k.F.l.k.k.l.Y.j.9XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXS.r.3.3.1.=.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.0.j.l.s.v.n.n.m.n.n.m.n.m.j.z.9.u 1.6 9 > g N V.D.C././.2X2X6XjXCXSXSXSXFXHXSXSXFXHXHXHXHXHXLXLXLXLXKXLXPXHXSXVXVXFXSXAXAXAXCXmXkX|.g O O &.u.r.eXvXlXlXkXtXyX;XXX+X+XXXoXQ.Q.+XH.u.g.i.g.i.g.i.g.p.d.d.d.d.i.d.a.d.g.d.d.l.Y.R.Y.Z.q.1.2.=.6 1.1.1.1.1.1.1.1.5.1.5.1.5.1.5.7.1.1.1.1.5.5.5.5.1.1.1.1.3.7.5.7.7.5.3.1.7.1.1.5.1.1.;.6 &.;.1.5.7.6.6.7.7.7.7.6.1.7.7.1.6.7.5.7.7.6.7.1.1.1.7.7.5.1.5.1.1.5.5.3.1.1.1.1.1.1.2.e 1.&.2.7.1.5.a.q.;.3.1.1.1.1.1.;.1.1.;.1.l =.l 1.1.1.1.1.tXtX1.1.1.1.1.1.3.3.3.1.1.7.6.2.6.7.7.6.1.6.1.;.7.5.7 # B d `.)._.Q Q Q Q Q ).Q _._.)._.)._._._._._._._._._._._._._._.[.[.[.{.Q # + c q.;.p.0.5.u.5.2.c , X C. j j V.D.S././.1XhXBXDXDXAXAXAXAXAXZXZXCXAXSXSXSXSXHXJXPXLXKXKXLXLXLXFXVXVXAXAXAXAXNXAXNX4XM > O 4 7.u.!.lXfXdXtXuXwXwXwX+XXX!.+XQ.Q.!.P.g.i.i.i.d.g.d.d.i.d.d.d.d.d.d.i.d.d.d.d.l.Y.R.K.Z.h.1.l 1.=.1.1.1.1.1.1.2.1.1.5.1.5.1.7.7.1.5.1.5.1.7.1.1.1.1.1.1.1.1.5.3.3.;.7.5.5.2.4.l 5 3 c c c b k 3 w 2.2.8.5.5.5.2.7.6.5.5.2.7.1.1.5.1.7.7.2.7.1.7.6.7.1.1.5.1.1.1.1.1.1.1.1.1.e e 1.=.1.7.1.1.7.a.7.;.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.=.;.1.tXtX1.1.3.7.5.3.5.5.7.5.7.5.7.1.5.6.5.6.2.;.7.=.8.p # # d ! E Q Q E E Q Q Q ).).).).Q ).).).Q Q Q _.Q _.Q ).Q _._._.^ ^ [.[.[.{.<.+ @ 9.p.6.7.5.5.5.7.1.z O > *XiXdXsX7XaXzXnXcX*X*X9X9X9XcXjXjXjXnXCXVX2X9.k.a.h.k.a.a.f.l.l.J.n.S.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXAXA.9.z l 1.1.=.1.1.1.1.1.1.1.1.1.1.1.1.1.;.2.e 4.w.n.s.b.m.m.m.n.n.n.n.m.J.m.q.1.6.k @ $ g j m V.D.C./.1XmXAXBXBXCXBXzXjXhXhXhXzXzXjXzXBXmXnXBXVXVXHXLXKXKXLXLXPXHXSXAXBXZXAXZXCXBXhX#Xn % $ k p.L.eXgXtXuXyXwXwXwX+XXXoX+XQ.Q.Q.Q.a.i.i.p.d.i.i.i.d.d.i.d.d.d.d.d.a.f.d.d.f.K.K.U.m.r.1.6 1.=.l 1.1.1.1.1.1.5.1.5.5.1.1.5.5.5.1.5.1.5.1.5.5.5.1.7.5.5.5.;.:.3.3.7.=.5.2.l q c V.S.%X*X*X%XD.b q q 1.p.5.5.5.5.6.5.5.7.6.1.7.6.1.5.5.5.1.6.5.1.5.5.5.1.5.1.1.1.1.1.1.;.1.1.=.1.6 1.3.1.1.8.q.8.1.1.1.1.1.1.1.=.1.l =.1.1.;.1.l 1.1.1.1.tXuX1.1.1.7.5.5.7.5.7.5.7.5.7.5.5.6.1.2.4.;.>.6.2.: o d s ! E E Q E W Q W Q E Q Q Q ).Q Q )._.Q Q _.Q _._._._._._._._._._.[.[.[.{.B . 3 x.2.3.5.3.3.1.1.1.< O |.7XiXiX7XaXhXzXcX9X5X7X9X7XcXjXnXnXnXnXVX7Xr.d.f.d.k.h.d.j.j.l.J.m.T.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXBXm.e.l l 1.3.1.=.1.1.1.1.1.1.1.1.1.1.1.1.1.1.e 4.h.b.s.j.m.K.K.m.n.n.n.m.J.a.3.l 2., O > g v m m D./. 5.=.K.wX4X;XwXXXwX=XXXoXXXoXQ.Q.P.Q.I.p.d.i.i.g.i.d.d.d.i.d.i.d.d.d.j.a.d.f.d.J.U.Y.U.h.2.1.1.=.1.1.1.1.1.1.1.1.1.5.7.1.1.6.7.1.1.5.1.5.1.5.6.7.7.6.7.5.7.1.1.1.5.l k l q y.$XsXzXhXzXjXzXBXAXDXNX/.k 5 2.7.1.7.5.3.5.4.7.2.7.1.5.1.1.5.7.5.6.5.5.7.5.1.5.1.1.1.1.1.=.1.1.1.=.2.6 1.7.1.1.0.7.5.1.1.1.1.l 1.1.1.1.1.1.l 1.;.1.1.1.1.;.l tXtX1.1.1.5.5.7.7.7.7.5.7.:.7.5.3.6.1.2.l 7.1.x : + d ! W E ! ! ! Q Q W Q Q Q Q Q Q Q Q Q Q _.Q Q Q ).).)._.Q _._._._.Q _._._._.{.{.d X 4 g.7.3.7.3.5.;.3.x + % *XiXiX7X7XiXcXzXcX9X9X9XcXjXjXjXcXnXnXCXnXZ.g.f.a.k.h.k.j.a.l.J.n.Z.JXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXlXt.e.l l l 1.1.1.1.1.1.1.1.1.1.1.1.1.1.;.1.1.l 8.h.v.s.n.n.m.n.m.K.K.n.n.f.q.l c < + > g v j v C.1XfXxXsXsX9X2X1XhXZXBXzX7X*X@XS.S.S.S.S./.$X9X8XBXFXPXJXFXHXHXPXLXKXKXJXVXBXmXmXmXzXxX l 5.a.XX;X=XwX;XXXXX+XXXoXQ.Q.Q.P.Q.Y.p.i.i.i.d.i.i.i.g.i.d.d.d.d.d.j.d.d.d.a.J.R.U.U.z.7.l 1.1.1.1.1.1.1.1.1.5.1.5.1.5.1.5.6.1.1.5.5.1.5.1.7.6.6.7.6.7.7.1.5.5.1.2.k , b XpXsXaX7X7X8XcXcXhXBXSXmXA.q e 6.5.5.3.7.5.5.5.5.5.5.1.7.2.7.1.6.5.5.3.6.1.5.1.1.1.1.1.;.1.u 1.l =.1.=.1.7.1.1.0.7.5.3.1.1.=.1.&.6 1.1.1.1.l 1.1.1.l 1.1.1.=.tXtX1.1.1.1.7.7.5.7.7.3.5.7.7.5.5.5.1.5.3.;.6.q o B d W W E ! ! ! Q ! Q Q W E Q E Q Q Q Q Q Q ).).).Q ).).)._._._._.Q _.Q _._.^ [.{.`.O # u.7.7.5.3.3.5.;.z : O @XiXeX7X7X7XcXhXaX9X5X5X8XjXcXjXcXjXnXCXZX~.i.f.a.k.j.k.a.f.l.H.l.Z.SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXsXj.e.i u 1.1.1.1.1.1.1.1.1.1.1.1.1.1.=.1.1.e l 8.h.b.n.n.n.M.m.m.n.n.m.m.q.8.1.3 # @ f g j v V.2XpXpXiXiX>X%X q 2.5.T.+XXXXXXXXXXXQ.oXQ.Q.Q.Q.P.Q.Y.i.p.d.d.i.d.d.i.d.d.g.i.d.a.i.h.a.d.d.g.H.R.U.U.z.7.1.&.1.=.1.1.1.1.1.1.1.1.1.5.1.1.7.7.1.5.1.1.5.1.7.7.2.5.1.2.1.5.1.6.p.6.4., < V.,XsX6XiXiX7XiX7XaXcXcXnXSX6Xv q 1.5.8.;.3.2.5.4.5.1.7.5.7.5.5.5.3.4.5.5.5.5.1.1.1.;.1.1.1.1.1.&.1.e 1.6 1.5.1.1.q.7.5.1.1.l 1.1.1.1.1.&.1.1.1.1.=.1.=.1.1.1.1.tXtX1.1.1.7.7.;.7.5.7.5.7.5.5.1.1.5.5.5.3.&.x.: o B a W W ! ! ! Q ! Q ! W Q E E E E Q Q Q Q ).Q Q ).).).).)._.Q Q _._._._.).Q _.[.[.{.B + u 7.7.7.7.5.;.7.3.4 + m 6XbX6XaXpXcXcX7X6X9X*X9XjXjXnXjXcXjXnXAX!.a.s.a.k.h.h.j.f.k.F.l.Z.ZXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXh.4.u l 1.1.1.1.1.1.1.1.1.1.1.1.1.1.=.1.1.1.2.8.j.j.b.m.n.K.M.m.n.n.n.b.4.;.7.< o % 0 h j m S.>XiX,XXbXkXsXsXsXsXsX9X2X@XD.m D.5XVXHXJXVXIXPXLXKXLXVXBXzXmXNXxXcX1X/.g 0 c ;.l.XXXXXXXXXXXXoXQ.Q.Q.P.P.Q.L.Y.d.i.a.a.i.i.d.d.p.d.i.d.d.i.d.d.a.a.d.g.J.T.U.U.z.8.l &.1.1.1.1.1.1.1.1.5.1.5.1.5.5.7.6.1.1.7.5.1.5.1.7.5.5.7.7.5.7.2.5.-.=.l < > %XiXbXX1X>X%XS.,XfXsX$XS./.>XeXdXsXdXsXsXsXfXhXhXzXhXcX6X2XD.m /.nXHXHXSXVXPXLXLXPXSXnXzXmXzXhX4X@Xm 0 h l 7.Q.oX!.XXQ.Q.oXQ.Q.Q.Q.P.P.P.K.G.i.a.i.d.i.d.i.d.i.d.i.a.d.d.a.i.d.G.a.n.T.U.U.z.8.2.1.&.1.1.1.1.1.1.1.1.1.5.5.1.1.1.7.1.5.1.1.5.1.5.5.1.1.1.1.1.5.1.=.=.=.q @ j >XeX9X 7.7.7.5.5.5.3.7.k + f *X3X3X6XaX8X9X1X8XcX*X*X7XnXcXjXjXjXnXZXW.d.s.j.k.k.f.a.f.k.n.H.Z.mXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKX KXKXKXKXKXKXKXKXKXKXKXwXt.x u u 1.1.1.;.KXKX1.1.1.1.1.1.=.1.1.l l 5 z a.j.l.n.n.b.m.m.n.J.K.f.7.-.2.> X @ f h j j S.2X*X$XS.S.-XsXsX$XW.%X,XeXbX9X6XaXzXzXBXAXAXBXBXMXnXhXcXbX/.^./.8XHXHXVXHXPXLXLXHXCXzXzXzXlXyX$XC.f , k ;.K.Q.Q.Q.Q.Q.Q.Q.Q.Q.P.Y.P.P.K.l.i.i.d.d.i.d.d.d.i.a.h.d.a.k.k.d.d.g.d.H.R.R.U.m.8.l e =.1.1.1.1.1.1.1.5.1.5.1.5.1.5.5.5.1.5.5.1.5.1.7.7.2.7.1.7.5.1.5.5.2.1 + D.1X9XiX6X &X6X3XpXaX9X1X*XhXnX7X%X*XjXhXcXjXjXnXZXW.s.d.a.j.k.f.k.f.k.n.H.J.hXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKX KXKXKXKXKXKXKXKXKXKXKX;Xz.4.i u 1.1.&.1.KXKX1.=.1.1.1.1.l l 2.1.l u i w.j.l.n.b.n.n.n.m.n.n.f.7.p.e O X % f g j m @X2X2X/.Z.S.X1X1X f f j D.%X/./.D.Z.>XsXX2X2X>XsXxXxXaX9X$X2X/.2X9XjXBXSXJXFXBXzXhX2XV./.jXJXFXSXPXLXLXJXBXhXxXxXsX f f j S./.S.S.V.S.sXiX%X%X-X%X%X>XsXkXbX/.S.S.S.D.D.D.D.D./.9XCXJXJXBXnXfX%XM @XBXJXSXHXPXPXPXSXxXxXlXaX1X%XV.0 , h 3.l.P.T.P.P.P.Q.Y.P.K.K.H.J.H.f.i.i.i.i.g.d.a.d.i.a.k.i.a.k.h.i.d.d.g.G.K.Y.U.m.8.2.2.=.1.1.1.1.1.1.1.1.1.5.1.5.1.5.7.7.1.5.5.1.5.1.6.5.5.5.5.5.1.7.1.1.2.q + M 0 g m /.S.C.V.V.%XdX>XW.%X%XS.%XdXsX1X%X/.$X2X>X1X9X*X2X/.D.m /.cXJXJXBXxXaX/.V.9XFXHXSXHXPXLXSXzXhXfXpX1X%XD.f % , 3.j.L.Y.Q.Y.P.Y.Y.P.L.J.n.H.H.f.i.i.i.d.i.a.i.a.a.d.a.h.k.a.h.i.k.d.a.l.K.Y.U.z.4.1.=.=.1.1.1.1.1.1.1.5.;.1.5.1.1.5.5.1.5.1.1.5.1.5.3.5.3.5.2.5.5.1.1.1.2.k + j >X f g D./.D.D.m V.bXdX%X/.%XC.A.,XsX,X$X>XbXdXbXdXaXiXaXcXcX1X/.V.D.7XHXHXBXxX9XD.C.nXHXSXHXJXLXJXBXhXhXaX4X2XC.g $ , 2.a.H.L.P.K.Y.P.Y.K.L.H.n.n.H.d.i.i.p.g.a.i.i.a.i.a.a.a.h.d.h.d.k.d.a.l.K.R.U.m.7.2.e 2.1.1.1.1.1.1.1.1.5.5.1.5.1.7.5.1.1.5.7.1.1.1.7.5.6.1.7.5.1.1.1.2.2.k < % 2X1XXq.g.d.g.d.a.f.a.d.f.n.n.m.hXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKX KXKXKX KXKX KXKX FXE.KXKXi l KXKX1.1.KXKX1.u KXKX1.1.KXKX2.l KXKXl q.KXKXf.s.v.s.l.n.l.a.1.1.4 . & > 0 j C.C.D.m v S.fXXS.g @ $ l 7.n.K.K.K.L.Y.L.L.H.H.l.n.n.f.i.i.a.i.a.i.i.d.a.d.d.i.d.d.d.d.d.d.a.l.K.Y.U.m.7.=.l =.1.1.1.1.1.1.1.1.1.5.5.1.5.7.5.1.5.1.1.1.1.5.5.7.2.7.5.5.1.=.1.=.2.k q @ D.1X9X1XX9XaXBXZXAXSXHXSXnXcXcX2XV.S.ZXJXVXnX9XD.S.ZXJXSXHXJXHXVXhXhXsXiX>XS.g $ O i 1.j.J.J.K.L.L.J.L.J.z.l.k.k.k.u.i.u.i.i.a.i.i.i.i.i.i.i.i.d.d.d.a.a.l.K.Y.Z.z.4.1.l e =.1.1.1.1.1.1.1.1.1.1.5.1.6.3.6.7.1.6.7.5.5.1.7.5.5.1.5.1.6.=.1.z z w 8 $ @X7X>X j /.V.m v m X%X9XxXfXaX*X/.9XcXGXJXZXhXhX$X^.*XHXSXnXcX/.D.gXHXSXFXHXJXVXgXsXsXiX>XC.g O O 4 ;.a.J.J.J.J.L.J.F.H.l.j.f.j.h.i.i.i.i.i.a.i.i.d.i.d.i.i.d.i.d.d.a.a.l.K.U.U.z.3.l l =.=.;.1.&.1.l 1.1.1.1.1.5.1.7.7.1.7.5.6.1.7.2.6.1.5.7.6.7.5.6.1.1.2.x e w < 0 /.iX9X7X v /.m v j D.sXXS./.pXsX2XS.D.m m /.1XBXGXnXnXcXD.C.BXJXBXnX>XV.*XSXVXSXHXHXSXcXaXsXiX2XD.g O O i u a.J.n.H.H.H.H.F.n.l.a.a.a.a.u.i.a.i.u.i.d.i.d.i.d.d.d.d.k.i.a.a.a.l.Y.U.m.z.4.l u 1.1.1.1.1.1.1.1.1.1.1.5.1.1.5.5.5.2.5.3.7.5.5.1.7.5.2.5.1.5.5.5.2.2.c l 2.t < 0 V.@X7X8X8XaXiX9X/.v q c l 2.1.7.5.5.:.5.5.5.5.1.7.5.1.6.5.5.1.5.5.7.2.3.1.1.1.1.1.1.1.1.1.1.2.e e e l 1.1.5.3.1.1.1.1.=.2.=.1.1.1.1.1.1.l e e 2.2.=.=.=.=.tXtX=.=.5.=.=.=.2.4.8.7.4.3.1.1.1.1.1.5.7.1.$ o B a a a a a a a a a a a a W ! ! ! E ! a a a a a a a s W W ).`.s W W s ).W ).s ).).)._.[.d < a.h.a.h.i.8.8.d.8.h o m 4XkXdXaXaXaXaXsXhXgX8XcXjXcXcXnXzX!.8.h.d.d.a.a.d.d.d.f.l.F.F.l.zXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXdXm C.v v j C.lX,XS.S.v m iXfX>X,X%XV.%XsX1X$X%X2X/.C.v m *XDXSXzXzX2Xm 9XJXAXzX6XD.@XAXSXVXSXHXSXjXaXsXiX$XM % + : k ;.a.J.J.J.H.H.n.l.l.k.f.a.h.h.i.i.i.i.a.a.i.i.i.d.i.d.i.d.k.i.d.a.a.l.K.Y.m.z.4.l 1.1.1.l 1.;.1.1.1.1.1.5.1.5.5.7.2.5.6.3.6.1.7.7.2.5.5.5.5.5.5.1.1.1.1.l 1.l c q , , q h D.dXtX^.c q q r z 2.2.7.7.3.:.5.7.;.5.7.3.:.3.5.7.1.5.7.5.1.1.5.1.1.1.;.1.1.1.&.&.1.1.1.e e e l 1.1.1.7.1.;.1.1.l =.2.1.2.2.=.1.2.=.=.=.&.:.;.;.=.=.eXuX-.=.=.=.x.6.7.5.5.p.6.1.1.1.1.1.3.5.3.5.> o B a a a a a a a a a a W s W ! W W W W a a s s W a a a s ).s <.s W ).s ).s ).).W s ).).`.d 4 s.f.f.a.q.8.a.G.a.b + < 6XsXiXaXaXfXfXhXhXgX8XgXjXcXjXnXbXz.8.h.d.d.a.f.f.a.f.f.l.F.l.h.hXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXuXtXtXtXtXtXtXtXtXtXtXtXyXtXtXtXtXtXtXtXtXtXtXtXtXtXuXtXtXtXtXtXtXtXtXtXdXtXtXtXtXtXm C.m j h S.xX:XS.V.j D.gXsX,X;XD.V.1XcX2X>XiXiXpXiX/.v D.jXJXnXzXiXD.2XSXSXzX7XS.@XBXSXVXSXHXSXhX7XaXyX%Xn % + 1 l 1.s.m.l.l.H.n.n.l.l.f.s.s.a.a.u.i.i.a.u.i.d.i.d.i.k.i.d.d.d.i.d.i.i.f.K.J.Z.z.4.l e l 1.1.1.1.1.1.1.1.1.1.5.1.1.5.7.5.5.5.5.1.1.5.7.5.1.7.4.5.5.3.3.1.;.;.1.1.6 c x 3 , q , dXtX1 3 l =.=.2.6.1.7.3.7.5.3.7.7.5.3.5.5.3.7.5.3.5.1.5.7.5.4.1.1.1.1.1.1.1.1.l 1.l &.e e e e 1.1.1.3.1.1.1.1.1.2.=.1.1.2.2.1.2.=.-.5.1.;.k w t 0 eXbX0 q q 8 r l 7.:.:.p.-.1.1.1.3.1.1.1.3.7., & B a a a a a a a a a s a a W ! ! W E W a a `.`.).s a s s W s s ).s s ).s ).W s ).<.)._.W d u f.f.f.s.s.a.a.a.a.9.4 X D.cXaXpXaXaXsXhXsXhXgXhXcXhXnXzX-Xp.h.k.d.a.a.d.a.f.a.k.l.l.l.j.dXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXgXR.P.h.l e l 6 u 1.1.1.1.1.1.1.1.;.=.1.l e 6 7 3 4.8.g.a.w.s.f.f.s.f.f.h.7.=.l 3 O . & v C.j j h |.xX&XS.V.h S.xXiX;X%Xm D.cXsX$X>XeXXSXBXhXaXS.@XSXSXjXaX/.S.BXSXVXSXHXSXgX9XbX,XS.g @ : w l 3.f.l.l.n.H.n.l.f.f.a.a.q.a.a.u.i.i.i.i.a.i.i.i.d.i.i.i.d.d.i.d.d.a.k.K.U.m.z.3.1.1.1.1.&.1.1.1.1.1.5.1.7.1.5.1.1.7.1.4.5.5.7.5.5.1.5.7.6.1.5.7.3.3.;.1.1.1.5.7.6 4.2.5 w c tXtX=.6.1.&.1.5.5.5.5.:.7.:.5.3.3.5.:.5.3.5.7.5.7.5.5.1.1.1.5.1.1.1.1.1.1.1.1.1.1.6 1.e e e 1.1.1.1.7.1.;.1.1.=.2.1.=.=.1.1.=.1.6.6.4.k q 0 y V V bXbXV y y - 0 0 h z 4.5.5.5.1.5.5.1.3.1.u u.c % # a a d a a a a a a a W ! a ! ! ! W W a a E ).).s a s s ).).).).s ).s ).W ).).).<.<._.a 8 7.f.f.f.a.a.a.j.a.s.a.z.: : #XaXpXaXaXgXfXhXhXcXhXhXzXxX,Xz.i.k.a.s.a.f.d.a.f.a.f.F.J.l.l.dXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX1XT.R.j.l 6 l l ;.1.1.1.;.1.1.1.1.1.l e l e w 7 3 1.q.q.g.s.s.j.a.s.s.f.k.8.1.e c + & j C.n j h @XxX>XC.V.h S.BXiX-X/.v C.cXbX2X>X,XXD.f O < c l 8.l.J.l.n.H.l.f.f.s.a.q.7.a.a.i.i.u.a.a.i.d.i.i.i.i.d.d.i.d.i.d.i.a.k.J.U.m.j.3.u e 1.1.1.1.1.1.1.1.1.1.1.7.1.5.7.1.6.5.5.5.3.5.1.7.2.5.1.7.5.5.3.;.1.1.7.5.5.;.5.1.1.7.6.=.tXtX5.;.5.8.5.5.5.5.5.3.7.3.7.:.5.7.3.5.5.5.3.5.3.5.3.7.5.7.1.1.1.1.1.1.1.1.1.1.1.1.1.e e e e l 1.1.3.1.;.1.2.e 1.2.1.=.1.1.1.=.1.k 1 0 - y V K K K P K K K H V - 0 0 h l 1.7.1.1.3.2.7.5.u 7.4.% # d a a a a a a a a s s a a ! ! ! E `.! ! W E ).`.<.E E ).W ).<.).W s <.W s s ).s ).Q d 1 k.f.f.f.d.a.a.k.w.n.u.k.4.: g *XaXaXaXaXgXcXgXcXcXzXxXbXA.2.k.i.h.a.q.G.a.d.f.a.a.H.z.l.J.yXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXXXP.P.b.4.i i l 1.1.l e u 1.=.6 1.l l e e w w q 2 l q.7.g.a.g.h.a.a.a.f.s.s.z 7 2.< X o 0 C.m j h S.zX>XD.m h C.BXsX%XS.j D.zXpX%X>X>X1XbX1X9X2Xm @XBXZXxXcXS.@XAXSXzXhX%XC.BXVXCXFXFXSX9X>X1X@Xm % $ e &.1.h.m.l.l.n.l.k.j.h.a.a.7.a.d.i.i.u.i.i.i.i.i.d.i.d.i.d.d.i.k.k.d.a.a.l.K.m.Z.h.l l u 1.=.1.;.1.1.=.1.1.5.5.1.5.1.5.1.1.5.1.5.5.5.7.7.7.7.3.1.1.;.5.3.1.1.3.1.5.2.2.6.1.2.1.6.dXtX5.6.6.5.6.7.5.7.7.5.5.5.7.7.5.3.:.7.3.7.7.7.7.;.7.5.5.1.1.1.1.1.1.1.1.6 1.l 1.6 1.2.l e =.l 1.1.1.1.l 1.1.1.=.1.u =.6.5.5.-.e < - y V K K P P K P I I I T P K H = 0 h 3.p.:.;.2.2.6.:.z 3.x.1 # d a a a a a a a a a a s ! s W s W W W W W s ).W ).).).W W s s <.s `.W `.`.W <.W Q a d =.F.l.f.f.d.d.d.f.f.f.f.s.a.a.7 y.>XaXaX8XjX8XjXjXzXxX;Xz.7.q.a.a.a.d.a.f.f.l.f.a.f.n.n.s.K.3XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXoXP.P.N.4.i k l 1.&.1.1.1.1.l 1.e l 6 e e e 5 q 2 k 8.g.g.g.s.j.s.s.f.j.a.s.l 1.1.1 O X > D.V.j f D.hX1XD.V.f C.BXkX/.S.j V.hXhX$X$X2X2X1X ~ ~ ! a d a a a a a a a s s W W W s s W ).s ).<.s s ).s ).<.E E W W s E E `.E E d d z.G.l.f.f.f.f.f.f.f.l.f.a.a.k.j.c v S.>XiXaXaXcXiX2XW.y.4.h.f.a.f.d.a.d.d.d.f.k.a.f.l.l.s.L.4XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXA.P.P.M.e.i 5 l u 6 1.1.u u 1.l 1.l l l e e w w 3 3 3.0.q.0.a.s.s.s.f.f.a.s.1.1.e c $ . $ m V.j h m aX7XD.V.h m zXNX%XD.v v 1XZXcX$X/.%X2X>X2X%X@XaXxX $ h k 1.a.l.l.l.l.l.l.s.h.h.a.a.8.a.d.u.i.i.d.g.p.i.i.i.i.d.i.d.i.k.k.x.k.a.a.l.J.Z.Z.h.1.;.e 1.1.=.1.1.l 1.1.1.1.7.1.5.1.7.1.5.5.1.1.7.5.3.:.3.5.5.5.5.7.7.7.7.3.3.7.7.7.7.7.7.7.7.8.tXtX7.7.7.5.5.5.:.3.:.7.;.7.7.7.7.7.7.7.7.7.7.7.5.7.7.7.3.1.5.1.1.1.1.1.1.1.l l 1.e 1.c e e 1.1.1.1.z l 1.1.1.1.2.1.=.-.=.;.h < - J H K K K P K K P P P P P T (.UX(.T L V = 0 c ;.;.5.2.z 3.1.p.x.q $ n ~ ~ ~ ! ! s s a a a s ! W W s ).s s W s ).<.).<.<.).<.).W E E W W E `.).`.).s p z l.F.l.f.G.f.f.f.f.G.l.f.k.l.j.l.r.l 2 c z.Z.tXtXy.c l 8.k.a.u.a.d.a.a.d.a.f.a.f.f.l.l.j.n.P.:XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXB.n.K.U.e.k i l 1.&.l 1.1.e 1.=.1.e l l e w 5 q q 3 l w.0.0.s.a.a.s.a.a.s.a.8.1.6 l , X o j D.v j v 1XhXS.V.v v 9XAXX$X$X>X1X6XhX3X>XaX$XC.aXAXgXhXpXS.6XAXCXVXSXSX7X@X/.D.f % < c l 3.k.z.l.l.l.k.f.f.a.q.q.8.8.a.i.p.g.p.i.i.g.d.i.i.g.d.d.i.i.i.k.i.a.h.a.k.J.K.Z.h.1.u l 1.1.6 1.1.;.1.1.1.5.1.5.1.5.1.5.1.5.7.7.7.7.5.7.5.7.5.7.7.7.5.5.5.5.7.7.5.1.1.1.1.1.7.5.tXtX7.7.7.7.7.5.7.5.7.7.7.7.7.7.5.5.7.5.7.5.7.7.7.;.7.5.5.1.1.1.1.1.1.1.l 1.1.1.6 1.2.=.l e e 1.1.1.3.3.l 2.1.1.2.e 1.-.5.i < - J K K K K K K K K K K P K K K K T T T T L H y 0 i 7.5.z c 1.7.p.x.r < > ~ ~ ~ ~ ~ ~ ~ ~ ~ ! ! ! ! W s s W s <.).s s s ).s s <.<.).).`.`.`.`.`.`.).W d k h.f.H.H.H.H.v.f.f.f.H.f.l.n.l.h.h.8.e 6 e 5 5 tXdXc r.q.i.d.d.d.a.s.a.f.a.a.d.a.a.f.l.l.k.K.R. XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXB.L.P.K.t.z w l l =.1.1.l 1.1.6 l l l e e w 5 q q 1 6 6.u.0.a.s.s.s.s.a.a.s.k.1.u k c + . f D.m j j |.zX2XV.v j S.CXxXS.V.v b S.gXVXSXBXzXfXsXcXbX2X$X : q 2.u q.l.l.k.l.j.f.s.a.w.q.a.7.q.a.i.u.u.a.i.i.i.a.d.g.i.i.d.i.d.i.d.i.d.i.a.l.J.U.U.z.1.l 1.1.=.1.1.1.1.1.1.1.1.1.5.1.5.1.5.7.5.5.7.6.7.1.1.5.3.5.5.5.5.5.3.3.3.3.5.3.7.5.3.7.7.7.3.tXtX7.7.7.7.7.5.5.5.5.5.5.5.7.5.7.7.7.7.5.7.7.7.7.5.7.5.5.1.7.1.1.1.1.1.l 1.l 1.e 1.e e l e =.1.1.1.1.l 1.l 1.1.2.2.=.=.1.1 @ = H H K K K K K K K K K K K K K P K K K I P P K - 1 3.;.2.4.1.i.5.-.x.q $ n n / ~ ~ '.'.}.'.~ ~ ~ ~ s ~ ! ~ ! ! `.].! `.`.`.`.].].`.].].].].].].`.`.s u x.l.H.H.H.H.H.v.G.v.H.F.v.H.v.f.l.l.8.l u l 1.2.tXtX8.a.a.i.a.a.a.a.a.d.a.a.f.a.f.f.f.l.f.f.U.R..XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXA.v.M.K.b.4.i l 1.1.l l 1.6 1.6 1.1.6 e e e w q q 1 7 7.7.q.a.0.0.a.a.g.a.s.k.7.l l l < . O n M j j V.cXsXD.v j m 8XAX6XC.m v v D.*XaXcXhXaX l =.3.h.l.l.f.f.j.a.a.a.q.8.q.7.i.a.8.i.i.i.a.i.u.i.i.i.i.d.i.d.i.d.k.d.k.i.a.l.K.U.U.r.1.2.l 1.1.u 1.1.1.1.1.1.1.1.1.5.1.5.1.5.1.7.5.7.6.7.5.7.5.5.7.7.7.7.7.7.7.8.7.7.0.8.8.8.8.8.q.tXtX8.8.8.8.8.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.5.7.7.5.;.7.1.1.1.1.1.1.1.1.l 1.;.1.l =.c =.e 2.1.1.;.l 3.l 1.l 1.1.1.6 l w : - V K K K K K K K K K K K K K K K K K K K K P P P V 0 i 3.1.2.=.7.:.=.x.2., d n / ~ ~ ~ './ ~ }.}.'.'.'.'.].~ ].].'.'.].].'.'.].'.].].].].].].].`.`.<.p u.f.v.I.n.H.H.H.H.f.H.H.G.H.H.v.n.H.f.l k z l l u tXtXi.a.h.h.h.x.s.a.d.a.a.f.a.f.d.k.k.n.f.s.T.L. XPXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXM.v.v.M.N.9.k e ;.1.l 1.;.l 1.1.u l 1.e e w 5 w q 1 7 3.7.q.w.u.q.a.q.a.q.a.d.a.l 1.l 3 X . g D.n j j *XmX$Xm v j @XBXZX2XV.m v j m C././.S.S.S.W.$X:X2X%X6XhX9X9X7X>X/.1XBXzXjXCXAX*XC.M j : $ , =.=.8.j.f.d.f.f.f.s.s.a.0.8.a.7.8.a.7.i.i.u.i.a.a.a.i.d.g.d.d.i.d.d.k.k.d.i.a.l.J.U.U.z.1.l 1.=.1.1.=.1.1.1.1.1.1.5.5.5.1.1.1.7.5.7.5.6.7.7.8.8.8.i.s.a.a.a.a.a.h.a.a.f.a.a.a.a.i.a.a.tXtXa.a.a.a.a.a.s.a.a.a.a.a.8.0.7.7.8.8.i.7.7.5.5.5.7.7.5.5.5.1.1.1.1.2.2.1.1.l =.l l e l e 1.1.1.1.3.3.l 1.1.1.5.2.6 l , @ y H K K K K K K K P K K K K K K K K K K K P P P P H - < :.;.1.6.l i :.p.x.i B g / ~ ~ ~ n n '.~ }.'.'.'.'.~ ~ '.~ '.'.'.'.'.'.'.'.}.].].].].].].`.W a ,.i.H.I.H.n.H.H.H.H.H.H.H.G.H.H.v.H.n.0.z k c k x l tXtXa.7.a.a.a.r.a.d.a.f.a.f.d.a.k.k.f.n.s.s.Q.K.%XPXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXn.v.v.n.K.w.l 5 k l =.e 1.e l e 1.e l e e e w q 1 1 1 w 4.7.>.q.q.q.q.g.q.q.g.a.5.1.l c : . @ D.V.b j M zXcXD.v v j %XZXAX1XD.m m m v y.V.D.S./.$X$X%X$X6XsXX @ , c e 1.s.s.f.f.j.a.a.a.a.a.a.q.5.7.a.i.i.u.a.i.i.u.i.i.i.i.i.a.p.i.i.i.p.k.i.i.a.f.K.Y.J.j.1.1.1.2.&.5.&.5.1.=.l ;.:.;.:.5.5.u.7.4.4.7.8.i.a.h.a.s.q.a.q.e.0.i.i.a.8.8.7.7.5.u.u.7.:.5.5.tXtXp.u.p.u.p.7.5.7.7.7.i.d.q.e.e.0.e.8.q.q.8.u.7.7.7.7.7.u.p.5.1.1.l l =.6 2.1.=.=.=.l 5 l 1.1.1.:.3.l 3.1.1.=.1.=.1.e @ - V H K K K K K K K P H H H K K K K K K K K K K K P K y $ i 1.1.1.1.4.4.4.3.7.z p d / ~ ~ '.'.'./ }.}./ ~ ~ B./ }.}.'.}.'.].].'.}.'.].].}.].].].`.<.s g.g.f.v.I.I.I.I.H.I.H.L.H.H.H.H.H.v.H.j.q.x x z l 2.4.tXtXa.a.a.a.a.a.a.a.a.a.d.a.f.d.a.a.n.f.e.B.R.L. XJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFXn.B.v.n.m.h.3.5 e l 1.l 1.e =.=.l 6 l e e e w q 2 q 1 q 3.7.,.g.g.q.q.q.g.a.q.a.7.1.l c , . o g D.V.j v *XmX2Xv m v m 2XBXDXzX2XD.V.D.C.S.S.@X%X%X2XXX%X%X%X2X1XiXsXfXpX2X$X1X6X1X%X>XzXhXaXBXCXcXC.j g > + : r =.2.h.a.s.w.a.f.a.s.a.a.8.q.8.7.a.a.i.u.g.i.i.g.i.g.i.i.i.d.i.i.i.i.d.p.k.i.h.h.k.J.Y.U.m.8.e e =.u l u 3.3.3.3.8.h.a.i.x.i.7.5.&.&.7 7 5 u x x.t.^.A.W.E.-X*X1X7XcXnXBXZXVXVXSXSXHXJXJXuXkXJXJXHXHXSXSXZXCXnXcX6X*X$X/.W.A.Z.y.y.4.1.7 7 7 7 6 6 e l 1.5.=.=.5.1.7.1.l k k i l w l 1.1.;.5.1.l l 1.1.1.2.=.2.1 @ = J K K K K K K K K K H J H K H V H K K K K K P K P P H - 1 1.1.1.1.3.3.1.7.5.x l i f p n / ~ ~ / / / ~ '.'.'.'.'.'.'.].'.}.}.'.}.}.'.'.].].`.s <.,.h.f.n.H.I.I.n.B.L.L.P.I.L.I.I.I.I.P.P.L.w.u k z l 1.4.7.tXtXa.a.a.a.a.a.a.a.a.f.f.a.a.f.d.l.f.0.N.B.M.P.oXSXKXKXKXKXKXKXKXKXKXKXKXKX KXKX KXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXAXl.n.b.s.n.m.r.e 5 e l e =.l =.=.l l e l e w w 7 2 2 q 8 3 4.0.u.0.g.u.q.g.0.g.7.q.i.1.c c : . . % D.V.v v S.hXhX/.v m m v V.2XzXAXZXCXzXhXhXhXzXhXaX>X%X%XX%X@X/.%X>XX%XS.y.q 8 8 7 6 e 2.e l w l 1.5.5.7.3.3.l 1.1.2.=.6.l < & V H K K K K K V K K K H V V H H V H K K K K P K K K P P y < 1.6.7.5.7.2.7.6.7.8.2.1.1.z p d d s '.].}.}.}.}.B.~ / }.}.}.}.}.}.}.}.].'.<.s s ,.p.G.H.H.H.H.H.n.L.P.I.P.P.P.P.P.P.P.P.P.P.I.e.u 4.4.4.4.7.i.a.tXtXa.a.a.a.a.d.a.a.a.d.f.a.f.d.k.l.s.s.M.B.v.M. XSXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXmXb.B.b.s.s.N.z.4.e e 2.2.e 2.e 1.e 6 l e w w 7 q w 2 q 1 8 2 l 7.0.g.g.0.0.7.g.:.q.u.i.2.w c $ . o m S.D.m m /.sXxX>XD.V.V.V.m V.V.V.C.S.S.S.A.S./.$X2X>X$X%XXsXsX $ o O h 2.;.a.f.q.q.a.a.g.q.0.u.7.7.7.7.q.i.i.7.a.i.i.i.g.g.p.i.i.i.i.i.d.g.d.i.g.i.k.i.i.a.a.J.m.m.U.Z.4.e w q c /.cXSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXSXaXv q w w l 1.2.5.8.1.l l 1.1.=.=.=.7 @ & V K K H K K H K K P H J H J H H H H K K K K K P K P K P V > u 6.7.5.2.7.6.7.6.6.7.7.:.7.7.8.4.z i d s a a ! s ~ '.'.'.~ ~ ! ! s s s s ,.k.f.G.F.H.v.I.I.I.I.I.P.I.P.I.I.I.I.P.P.P.P.P.I.g.0.4.4.4.8.q.a.a.a.tXtXa.a.d.f.a.f.a.a.a.a.a.d.a.f.l.f.a.m.n.b.M.L.oXVXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXxXb.v.v.b.j.j.n.n.3.6 e e l l 6 u 1.u l e e w 7 q 7 2 1 q 1 1 1 7.7.7.7.0.g.g.7.q.g.a.u.7.5.=.r q : X . o m %XD.m V.C.$X7XhXaX2XC.D.C.S.W.W.W.%X-X-X-X>X : & o . X 1 2.6.i.a.a.q.q.q.a.a.a.8.u.7.7.7.8.a.i.7.8.i.i.i.i.i.i.i.i.a.i.i.i.i.i.d.i.d.i.i.a.a.i.a.k.U.m.Z.Y.Z.9.4.q m SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXZXy.3.3.8.8.8.7.4.1.z 1.1.1.=.2.r r q : X V K H H H H H K H H K H H H H H H H P K P P K K P P K P y q 6.>.5.7.7.7.7.8.8.6.7.7.8.8.8.i.7.4.3.3.4.3.;.,.s s s s kXtXs ,.,.,.g.d.G.G.H.H.H.H.H.H.I.I.I.I.P.P.P.I.I.Q.P.P.P.P.P.Q.P.F.a.i.i.8.h.a.g.a.a.a.tXtXa.a.a.a.d.a.a.f.d.a.f.k.f.k.h.w.n.J.b.v.n.L.R.BXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXlXs.v.b.b.s.s.n.n.q.6 w e l l i l l u e e w w w q 2 2 2 1 1 1 1 l 3.7.8.7.7.g.0.q.7.q.u.0.7.1.r r w , $ X O j 2X@XD.V.V.S.2XiXzXhXaX9X>X1X1X $ o . . X : l 1.6.a.a.a.g.u.u.q.i.a.u.7.7.7.8.8.i.p.u.8.p.i.i.i.i.i.i.i.g.p.g.i.g.i.i.d.i.i.a.a.i.a.a.h.m.z.Z.Y.R.Z.z.^.y.>XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXA.k 7.7.8.q.8.8.7.1.1.l 1.1.1.2.e q 1 < o = K K H K K K I K P K H H H L H J H K K K P K K P P K K y 3 5.u.7.7.7.7.7.7.8.7.7.7.7.7.8.8.8.7.8.8.6.7.5.7.1.5.:.3.kXtXe.e.,.g.d.G.G.G.v.v.H.H.H.I.I.I.I.I.I.P.I.Q.P.P.Q.P.P.P.Q.P.I.f.g.i.x.x.a.a.a.a.a.g.tXtXa.a.a.a.a.a.a.a.f.a.f.f.k.k.a.a.n.n.b.N.N.L.R.mXKXKXKXKXKXKXKXKXKXKXKXKX KXKX KXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXlXs.v.b.b.j.w.b.m.z.3.w e l l l e =.e e e w w w w 2 2 1 1 1 1 1 3 e 4.8.7.:.g.0.8.a.q.g.0.0.8.6.l w k h , @ + f |.$XS.D.D.V.S.%X2XbXcXxXjXjXnXhXgXgX7X*X2X/.S.2XpXxXhX%Xg @ . . . + $ , w 2.l 8.a.a.q.q.q.u.q.q.u.7.7.7.7.8.i.p.p.8.8.i.i.i.i.p.g.i.d.g.i.i.i.d.d.i.d.i.i.a.a.i.i.a.h.n.m.m.Y.W.Z.Z.Z.x V.mXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX,Xz 3.7.0.q.8.8.7.7.2.1.l &.=.2.r e 3 1 8 + - K K K L H I I H I I J H H L H H H H K P P P P P K K K y 5 5.5.7.7.7.7.7.8.8.7.7.8.7.8.8.7.8.8.8.7.8.8.q.8.x.i.x.a.uXuXs.,.s.s.f.v.v.G.H.v.n.n.I.n.v.I.I.I.I.P.P.I.P.I.Q.Q.P.P.Q.H.f.g.a.a.h.h.a.a.a.a.a.a.tXtXa.f.f.a.d.a.a.f.a.a.a.f.l.a.s.j.m.b.b.N.n.P.A.mXKXKXKXKXKXKXKXKXKXKXKXKX KXKX KXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXdXw.n.v.j.s.s.b.n.z.q.e 5 l l e e e e e e 7 q 7 w 2 2 2 2 2 1 1 8 5 l 4.0.q.u.u.7.0.q.q.q.q.i.i.8.2.i k k h , : < V.&X&X/.D.D.V.D.S./.%X%X2X2X%X%XS.C.S.S./.>XhXhX*Xm $ . X + + < q r e l 2.1.a.s.7.7.g.0.7.7.0.7.7.7.7.u.i.i.8.u.u.p.i.i.i.i.g.i.i.i.p.g.i.d.i.i.i.i.a.i.a.a.i.i.a.a.n.Y.m.m.T.Z.z.Z.x.9.C.SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXmX4.7.s.7.q.a.a.8.7.7.2.1.1.1.1.=.e q 4 1 1 : - H P K L I L L I L L H J H H H H J K L L I P P P P P J 0 u ,.4.7.7.8.7.8.7.8.7.7.7.7.7.7.i.a.8.a.i.q.q.q.a.g.g.d.g.uXuXv.v.v.v.v.v.H.H.H.v.H.I.n.I.I.I.B.L.I.I.Q.I.P.P.I.Q.Q.P.L.f.a.a.i.a.k.h.d.a.d.a.s.d.tXuXd.a.a.f.d.s.d.d.a.a.s.f.k.a.q.n.n.j.b.v.B.P.B.MXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXyXs.n.v.v.s.s.s.j.n.t.1.e e e e e e e e e w w 7 2 2 2 2 1 1 1 1 1 1 2 1.8.i.7.7.7.0.q.a.g.q.i.u.i.8.7.u 6 c h h , < h C.2X1X2X/.S.S.D.V.S.S.A.S.S.W.S.2XbXcXhX5XM % X O : q c c =.2.1.1.7.q.w.7.0.7.0.7.g.7.u.7.7.7.7.7.i.8.7.p.u.p.p.i.i.i.d.i.i.i.i.i.i.i.i.i.a.i.a.i.a.h.i.i.a.a.k.U.m.n.Y.Y.^.Y.z.l x W.JXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXc.1.a.7.0.a.a.q.8.7.1.1.1.1.1.1.e i 3 4 1 q < @ J P I I L L L I L L H J J H H J H L L I I I I I I K J t :.,.4.7.7.i.7.8.8.8.7.7.7.7.0.7.q.7.0.u.0.u.q.a.a.f.g.g.g.tXtXv.g.f.v.v.H.H.H.n.n.I.I.B.I.I.I.I.P.I.Q.Q.I.Q.I.Q.Q.Q.K.a.a.a.u.a.a.a.a.a.a.a.a.a.a.tXtXa.a.s.a.a.d.f.d.a.d.a.a.f.a.a.n.j.s.v.b.n.P.B.mXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXyXb.n.v.v.v.s.s.s.j.z.e.l w e e e e e 7 w w w 7 q q 2 2 2 1 1 1 1 , 2 5 7.8.u.7.q.u.u.7.u.a.u.u.7.7.7.5.5.1.w q h h , , h V.%X1X9XiXXbXsXlXfXiX%Xj $ X X @ , h w e =.=.&.1.7.i.h.a.0.7.7.7.7.7.7.0.7.7.7.u.7.7.7.7.i.i.i.i.i.i.i.i.i.g.i.i.i.a.i.i.a.i.i.a.a.i.i.a.i.i.i.a.j.Y.Y.z.U.Y.Z.Z.z.t.y.b 2XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXW.u d.a.a.4.q.q.8.7.1.1.1.1.1.&.1.l 3 4 , 1 q 8 @ y H I I L L L I I L J H H J H L L L L I T T T I I J 0 l p.:.x q.8.8.i.8.i.8.a.7.a.7.0.a.a.u.a.q.q.q.q.s.g.,.f.v.v.tXtXG.f.G.v.H.H.H.B.I.n.I.I.L.L.L.I.P.P.I.Q.I.I.P.P.I.Q.K.l.0.a.a.a.d.a.a.a.a.d.a.d.s.a.tXtXtXtXuXtXtXuXtXtXtXtXtXtXtXtXtXtXtXtXyXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXkXtXtXtXtXtXtXtXtXtXtX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXyXb.v.v.v.v.v.w.w.s.v.q.u i e e r e e 6 w 5 5 2 q 2 2 2 2 1 1 1 1 1 1 2 e 6.i.8.u.q.0.u.7.q.:.0.g.:.7.a.7.6.e l c q k h < > > f j D.2X9X7XcX8X6X*X@XC.g $ o + + : q 2.l l &.l ;.;.7.q.h.q.0.g.0.0.0.7.7.7.7.u.7.5.7.8.8.7.7.7.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.d.d.i.d.a.a.a.i.8.i.h.q.U.Y.z.z.U.U.z.y.Z.r.y.y.>XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX Xz w.0.7.0.q.q.q.8.7.3.3.1.1.1.;.1.e 3 , , 8 t 8 : - H L L L L L I L T T H L L L L T T L L T T I T I y 7 u.-.u.3.8.8.u.i.8.u.i.q.u.q.g.a.q.q.s.a.s.s.a.f.g.f.f.f.f.v.tXtXv.H.H.H.H.I.v.I.B.H.I.I.L.L.I.P.P.Q.Q.P.Q.Q.Q.Q.oXI.G.,.g.g.a.a.a.a.a.d.f.a.d.a.a.d.uXuXtXtXtXtXtXuXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXkXtXtXtXtXtXtXtXtXtXtX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX;Xv.B.v.v.v.s.w.s.w.v.n.q.u u l e w e e w 5 w 3 2 2 2 2 2 1 1 1 1 1 2 1 3 w 4.r.i.7.7.q.g.0.0.g.0.7.7.g.7.7.7.;.6 l w k q h q 8 9 + O O @ % % @ o o X X + : 1 w c 2.=.=.6 1.5.0.0.f.f.a.7.:.:.0.7.7.7.7.7.7.7.5.7.7.8.u.7.u.8.i.p.i.i.p.p.i.i.i.i.i.p.d.i.d.i.d.i.i.i.p.i.a.i.i.i.i.i.a.F.Y.Y.z.J.U.z.z.z.t.y.r.9.9XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX2Xq.0.s.0.s.0.s.s.8.7.7.5.1.1.1.1.e e w 4 1 , 1 2 8 < - t H L L L L L I L T T L L L I T T T T L T T T J t &.:.p.u.6.7.8.7.q.q.q.q.q.q.q.g.a.g.a.a.s.g.a.f.s.s.s.f.v.l.v.tXtXn.v.H.H.H.H.v.I.I.I.I.B.L.P.I.P.P.P.P.P.P.P.Q.I.I.G.,.,.d.f.a.f.d.a.a.f.a.a.f.a.a.f.a.s.a.a.d.f.f.a.f.a.a.j.z.a.q.l.a.a.w.s.v.n.B.I.A.hXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXXXv.M.b.v.v.w.s.w.s.s.n.f.3.u i w w w w w w 3 3 2 2 2 2 1 1 1 q 1 2 2 2 2 q w 6.8.7.7.7.0.,.7.7.0.0.7.7.7.u.7.7.7.1.k l w q r r w , $ o . X O : 1 q c z =.=.6.=.1.4.8.s.s.s.a.a.7.7.:.:.0.7.7.7.7.7.7.5.7.p.7.5.8.7.8.p.p.8.i.i.8.i.i.i.i.i.i.i.i.i.d.p.i.p.d.i.i.i.x.i.h.a.i.i.i.k.U.~.z.z.Z.m.z.z.z.r.t.r.v 1XJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX$X9.a.s.q.s.a.a.g.a.7.7.7.1.1.;.1.1.l 6 5 1 1 q , 8 7 1 < 0 J L L L L T T T L L T T L L T T I I T T T H t r =.=.7.7.6.8.8.7.q.7.q.g.g.u.g.q.q.a.a.g.g.s.g.g.f.f.f.f.f.v.H.uXtXv.H.v.H.H.H.I.B.I.B.I.I.P.P.P.P.P.P.P.Q.Q.Q.I.I.I.G.a.a.d.d.a.a.d.a.a.a.a.f.a.f.g.a.d.a.f.d.d.a.d.f.g.a.f.l.j.a.f.j.q.w.w.s.b.n.M.P.B.fXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXXXv.n.v.v.w.w.w.s.w.s.s.k.w.u 7 5 l w w q w 3 3 2 2 8 2 2 q 1 1 1 1 2 2 1 2 2 l 3.8.8.7.:.u.g.q.0.7.0.7.7.g.u.q.8.4.4.2.c w w e 2.z k , < $ : : , q k l l l e e 1.6.8.x.h.h.a.7.7.7.5.5.:.7.7.:.7.7.7.7.7.7.8.8.5.u.8.8.p.8.8.i.p.i.p.i.i.i.i.i.d.i.i.i.i.i.i.i.i.i.i.d.i.i.i.i.i.i.a.8.k.F.~.U.j.m.Z.z.z.z.z.y.r.y.b 2XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJX%Xt.4.s.w.a.a.a.a.a.8.8.7.7.1.1.&.=.=.e e 5 2 1 , , 8 1 q 0 < - y H T I I L L L T L L T L L L T T T T J y r =.=.=.6.4.4.a.a.u.7.0.7.q.q.q.q.g.s.a.a.s.s.g.s.s.f.f.f.f.f.v.H.uXuXI.v.H.H.I.H.I.I.I.I.L.L.P.P.P.I.P.P.Q.P.I.P.I.I.G.,.a.a.d.d.a.f.a.a.d.f.d.a.d.a.a.d.g.a.f.a.f.a.a.a.a.a.l.n.q.a.j.q.a.w.w.s.v.N.M.P.B.pXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXoXv.n.N.v.v.v.w.s.w.s.s.f.h.4.5 5 w w w 7 q 7 2 3 2 2 1 1 1 1 1 1 1 1 1 2 2 1 7 e 2.2.7.7.0.7.0.g.7.0.u.0.q.g.u.7.7.8.q.4.c l 2.=.6 ;.l l w l 1.2.2.e 5.1.1.5.8.8.q.a.s.8.8.7.3.3.5.7.7.7.7.5.7.7.7.5.5.7.7.7.7.7.p.8.p.8.8.8.p.i.i.u.p.i.i.p.i.i.i.i.i.i.p.i.i.i.i.i.d.i.i.a.i.a.x.i.i.a.h.Y.Y.m.c.m.m.j.z.z.t.y.z.z.y.$XHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJX Xe.g.s.w.a.w.s.a.a.g.7.7.7.7.2.1.6 1.2.l e q 2 1 , , , 8 1 q 8 : : y H I I T T T L L L T T T T T T L J t e &.5.=.=.2.2.4.8.8.8.q.a.q.g.q.q.q.a.a.s.s.a.g.g.f.f.f.f.f.v.v.G.n.tXtXn.H.n.I.n.I.L.L.L.L.L.P.P.P.P.P.P.Q.Q.P.L.n.g.g.s.a.a.d.d.a.a.f.a.f.a.f.a.d.a.f.a.g.s.a.f.a.s.a.a.a.a.k.l.j.a.j.j.q.a.q.s.s.b.N.M.P.B.pXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXE.n.n.b.v.b.s.s.w.s.w.g.s.j.h.z 5 7 w w q 7 2 2 2 2 2 2 2 1 q 1 1 1 1 1 q 2 1 2 2 w l 3.8.7.7.7.7.7.7.q.7.0.q.7.7.7.0.0.4.x q.a.7.5.5.:.&.&.1.5.6.6.5.p.u.i.i.a.q.7.4.3.1.1.1.7.8.7.7.7.7.7.7.;.5.7.5.7.7.7.p.7.7.8.8.7.7.8.8.8.i.8.i.8.i.i.i.i.i.i.i.i.i.i.k.i.i.d.k.p.a.x.i.i.i.i.i.a.k.a.z.R.U.z.j.z.z.h.j.c.t.s.k.j.9.W.SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXA.e.f.a.g.s.w.a.a.a.s.q.3.7.7.1.1.1.6 1.=.l l w 2 1 , , q 8 8 8 7 8 8 0 y J H L T T T T T T T T T L J y q e =.5.:.5.=.e 2.1.1.5.8.a.a.a.a.g.q.a.s.a.s.a.s.s.s.g.f.f.f.v.G.n.v.H.tXtXH.H.I.n.I.L.L.L.P.I.P.P.L.P.P.Q.Q.P.P.H.f.g.s.a.a.a.d.a.a.a.a.a.d.a.a.f.a.a.a.a.d.d.d.d.f.a.a.a.d.f.k.l.j.a.j.j.0.8.0.s.s.s.b.n.n.P.B.yXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXR.v.n.v.v.w.s.s.s.s.s.0.w.s.j.e.l 5 w 5 7 q 2 2 2 2 2 2 q 1 1 1 2 2 1 2 q q 2 1 1 8 7 r 5.5.7.7.7.0.7.7.g.7.5.7.g.0.0.0.7.q.8.7.7.7.7.7.7.7.7.7.7.i.a.u.u.0.7.7.7.3.:.7.7.7.7.7.1.7.8.7.7.5.7.3.5.5.5.7.7.8.8.8.5.p.8.p.p.8.u.p.i.i.i.i.i.i.i.i.i.i.i.i.i.k.i.i.i.k.i.i.i.i.h.i.i.i.i.a.k.8.h.Z.T.Z.z.l.j.h.h.z.z.h.3.h.Z.c D.AXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXmXV.9.h.w.s.s.w.s.w.s.s.a.7.2.7.7.1.2.1.=.1.1.e w w 2 1 , 8 1 1 , q 8 q q 8 : : y J J H H L L L H H J y , 4 e 2.=.6.5.=.l e =.1.1.1.7.8.a.i.a.a.a.s.a.a.s.f.s.s.f.f.f.v.f.G.v.G.H.H.tXtXn.n.B.I.I.L.L.P.P.P.P.P.P.P.P.Q.L.H.f.d.a.a.d.d.f.a.d.a.f.a.a.f.f.a.d.f.s.d.d.g.a.s.a.a.f.a.a.a.f.k.l.l.a.a.f.w.5.0.0.s.w.b.n.n.B.P.B.pXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXA.v.n.N.v.b.s.s.w.w.s.g.s.w.h.h.4.u 5 w 7 2 2 3 2 3 2 2 2 1 1 1 2 q 2 2 2 1 2 1 1 8 2 7 ;.7.7.:.,.:.7.7.7.7.7.0.0.7.>.:.u.a.7.3.3.0.0.7.7.3.3.3.e.0.4.4.0.0.:.7.7.7.0.:.7.5.7.1.1.5.5.5.;.3.5.5.5.5.7.7.8.7.7.7.5.8.8.6.8.p.8.8.u.i.8.p.i.i.i.i.i.i.i.i.i.i.k.i.i.p.k.i.i.i.i.i.i.a.x.i.h.a.q.h.T.E.l.k.l.j.t.t.h.t.t.w.h.z.9.W.FXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXMXn.4.n.j.e.h.j.s.s.s.s.a.7.5.7.7.7.1.=.=.1.=.1.l e w 2 8 1 8 , 1 , q q q 8 8 8 8 8 8 1 0 q t y 0 0 0 q , 7 =.=.2.c =.l w c l 2.-.5.1.1.1.7.7.a.a.a.a.a.s.a.f.f.s.f.f.f.f.v.v.n.v.v.H.tXtXH.I.I.L.L.L.I.P.P.P.P.P.P.P.P.H.G.g.u.g.d.d.h.k.d.d.a.f.a.a.a.a.a.d.a.a.a.d.d.s.d.a.f.d.d.g.a.f.k.F.l.f.j.j.a.3.0.7.0.w.s.v.v.n.n.P.B.3XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXB.B.n.n.b.v.v.w.s.w.s.g.s.0.w.s.q.3.5 3 q q 1 1 q 2 2 2 1 2 1 1 q q 2 2 1 2 2 1 q 1 1 2 3 5 l 2.7.7.7.u.u.u.0.7.7.7.0.0.0.>.0.0.:.0.,.0.7.3.3.3.5.3.3.:.3.0.:.:.:.0.:.7.3.7.7.3.7.7.5.1.5.3.1.1.5.5.7.7.8.6.p.8.8.p.6.i.8.8.p.8.p.8.i.i.i.i.i.p.i.i.i.i.i.i.i.i.k.i.i.i.i.i.k.i.i.i.i.i.i.a.a.h.U.!.Y.r.r.z.k.z.h.t.c.j.e.t.t.y.W.SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXhXN.s.b.w.w.j.j.s.s.a.s.a.7.5.5.3.7.1.1.1.=.1.1.l l e w 7 2 q q 8 , , q 0 , < 0 1 1 8 8 8 < < , 8 , 8 , 8 5 r =.=.1.2.=.2.l 2.2.1.=.5.6.1.1.1.6.8.a.s.s.a.a.f.s.f.f.f.f.v.v.v.G.n.H.H.H.uXuXH.n.I.I.M.I.L.L.P.P.R.Q.L.H.F.d.g.a.g.a.a.f.a.a.a.d.a.a.a.a.f.a.s.d.g.a.a.a.a.a.f.d.a.a.d.f.d.f.j.l.k.a.j.h.3.3.7.0.0.w.s.s.b.N.M.P.B.yXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXB.I.n.b.b.b.s.s.s.w.q.w.a.w.0.q.s.q.l 5 2 q q 1 q 8 2 8 1 1 2 1 2 2 2 2 2 2 2 1 1 1 1 1 1 1 2 e 2.2.7.p.u.u.q.u.7.0.3.,.,.0.g.:.0.7.7.7.7.7.7.7.7.7.7.7.5.7.7.3.3.7.3.7.7.7.3.7.7.3.5.5.3.5.1.1.5.7.8.7.8.6.8.8.8.8.8.8.8.i.i.8.i.8.8.8.i.8.i.8.i.i.i.a.i.k.k.p.i.i.x.i.i.i.i.i.i.i.i.k.i.a.h.i.h.Y.!.A.q.k.z.k.r.t.z.h.h.t.r.r.y.A.SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXjXZ.s.b.s.w.j.j.s.s.a.a.s.0.7.7.7.3.5.1.1.1.l 1.6 e 1.l e w q 8 8 0 8 q 8 0 8 1 < 1 1 1 1 , , 8 1 1 2 2 2 7 5 e 2.5.=.6.5.1.1.=.5.1.1.1.1.6.1.5.6.1.7.7.8.s.s.f.f.f.f.v.f.v.H.H.v.f.v.v.H.uXuXI.I.L.L.L.P.P.P.P.L.L.H.d.a.i.a.a.a.a.d.a.a.a.a.a.a.a.g.g.d.a.d.a.g.d.a.a.f.d.a.g.s.d.a.l.k.a.k.n.k.q.h.h.8.3.4.4.8.0.a.s.s.v.N.M.P.L.yXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXB.I.n.n.v.s.s.w.s.s.s.g.a.0.q.s.q.q.r.k 8 8 1 q 1 8 2 2 2 1 2 1 2 2 2 2 q 2 2 1 1 1 q 1 1 4 1 2 5 l 3.7.7.7.7.7.7.:.7.g.7.7.7.0.7.7.7.7.7.7.7.7.7.7.7.5.:.7.5.5.7.7.7.5.3.5.7.7.1.1.1.1.5.1.5.7.5.6.6.u.6.8.8.p.6.i.6.i.8.8.8.8.8.i.i.8.i.i.i.8.8.i.i.i.i.i.x.i.k.i.i.k.h.i.i.i.i.i.i.k.i.h.i.i.i.z.E..Xm.q.z.k.t.t.h.t.j.j.j.t.t.4.S.HXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXBXV.w.b.w.s.j.j.h.a.w.a.s.a.7.5.3.3.1.1.1.1.1.&.1.1.=.l e e e 7 2 8 8 q 8 0 8 8 q 1 8 0 1 1 1 1 1 1 1 2 2 2 i i l 1.6.=.=.5.1.5.=.1.5.=.1.5.1.5.1.1.5.1.1.5.7.8.a.h.f.s.f.f.v.v.v.H.n.H.H.H.tXtXI.I.L.L.L.H.I.K.F.G.a.u.u.q.q.a.a.a.a.a.a.a.s.a.d.a.s.d.a.f.f.a.f.d.f.a.a.d.f.a.d.d.d.f.l.a.a.l.J.a.q.r.7.3.7.8.8.8.q.w.s.j.v.N.B.P.K.yXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXGXN.B.n.b.s.v.b.s.s.w.s.w.w.a.0.q.0.s.r.8.=.8 2 q 1 2 2 q 1 1 1 2 2 2 q 1 2 2 2 2 1 1 1 1 1 2 1 1 4 3 3 u l 1.5.7.7.u.u.u.7.7.7.7.7.7.7.7.7.7.7.5.5.7.5.3.3.7.5.5.3.5.3.3.1.1.1.5.1.1.1.1.1.5.5.7.8.5.8.6.8.6.8.6.i.8.i.6.i.i.8.p.8.p.8.8.8.8.i.i.i.i.i.a.k.i.i.i.p.i.i.i.i.i.i.i.i.i.i.i.i.p.i.i.a.h.z.!..Xz.q.j.z.j.h.h.j.z.j.t.h.z.9.S.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXA.c.b.w.w.j.b.j.s.a.s.a.0.7.5.1.7.7.1.1.1.1.1.1.1.6 1.=.e e =.r q q q 8 1 8 q 8 8 8 1 1 1 8 1 1 8 8 2 3 5 5 u u 2.2.=.5.=.1.1.1.1.5.1.1.1.1.6.1.5.6.1.6.6.6.5.7.7.7.q.g.a.s.g.f.f.v.H.n.H.H.tXtXM.n.n.n.f.s.g.g.u.g.g.g.a.d.d.g.a.a.a.a.f.a.d.d.a.f.a.d.a.a.d.f.a.d.d.d.s.a.a.a.f.a.f.k.d.h.m.l.w.a.s.8.1.3.7.7.7.q.q.s.w.s.v.n.M.B.P.4XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXGXN.B.n.v.v.v.v.s.w.s.w.g.q.0.q.0.0.w.a.h.=.w 2 q 8 q 2 8 8 2 8 2 q q 8 q 1 2 q 2 2 1 1 1 2 1 2 1 1 1 4 2 3 e 2.1.7.7.7.:.7.7.7.7.7.7.7.7.7.7.5.7.7.5.7.3.5.5.5.5.7.7.5.1.7.5.3.5.5.5.5.5.1.5.1.5.5.7.p.8.6.8.p.8.6.i.8.8.8.i.8.8.i.i.8.p.i.i.i.i.i.i.i.x.i.i.i.i.i.k.i.i.i.i.i.i.i.i.i.k.p.i.i.h.a.h.q.U.XX!.z.q.r.z.j.h.h.z.z.t.t.h.z.b >XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX Xt.m.j.j.j.j.l.k.j.f.a.7.7.7.1.1.1.1.1.2.1.1.1.1.=.l =.=.=.r =.r q q 7 2 1 1 8 8 8 8 8 1 1 1 1 2 2 3 q e e e 1.1.2.1.6.2.=.1.1.5.5.1.5.5.1.1.1.5.1.1.2.x.6.6.6.6.1.6.7.7.7.7.g.q.g.a.s.s.s.a.tXtXa.f.a.s.a.q.0.0.i.a.a.a.a.a.a.a.g.a.a.d.a.d.g.a.a.a.d.g.a.f.a.f.a.d.a.f.a.f.f.d.a.f.f.a.j.l.l.a.q.w.w.1.;.7.8.3.4.8.0.s.a.s.b.n.M.P.P.eXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFXc.I.n.v.v.v.s.w.s.w.w.s.s.q.0.0.0.0.q.f.x.=.e 7 2 2 2 2 q 2 q 2 8 q 8 q 2 2 2 2 2 2 1 1 2 2 2 2 1 2 1 1 1 1 3 5 l 1.5.5.7.5.:.5.5.7.7.7.5.5.7.5.5.7.5.3.1.1.1.5.1.1.1.1.1.1.1.1.1.7.5.3.5.5.1.1.5.6.6.8.8.6.8.8.6.i.6.i.8.8.i.8.p.8.i.8.i.8.8.i.8.i.i.i.i.i.i.i.i.i.k.i.i.i.i.h.h.i.i.k.i.i.i.h.8.7.i.h.U.=XW.t.q.h.j.h.r.t.j.j.b.j.h.m.9.sXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX3Xt.M.l.w.n.n.j.j.f.a.s.s.7.7.5.1.1.1.1.1.1.1.1.1.=.1.&.=.=.=.r =.=.r e w 7 q q q q q 8 1 8 8 1 2 5 5 5 e e 2.2.1.1.1.=.=.5.6.1.1.2.=.1.=.2.=.5.6.1.6.6.6.6.7.6.6.7.7.7.5.5.5.5.:.7.7.7.7.5.7.7.tXtX7.7.8.i.a.i.a.a.a.i.i.u.q.g.g.a.d.a.a.a.a.a.d.f.f.a.a.f.a.d.d.f.f.d.d.f.a.d.f.a.d.f.d.f.k.l.w.w.w.q.3.1.3.7.7.3.8.q.q.a.s.s.b.N.M.L.R.,XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXb.n.n.b.v.s.s.w.s.s.s.g.a.0.q.0.0.0.0.0.a.w.1.5 7 2 2 2 2 2 q q 2 2 q q 2 q q 2 2 2 2 2 2 2 8 2 2 2 1 1 q 1 4 4 3 5 u ;.1.5.5.5.5.5.3.5.5.7.5.5.5.3.5.5.1.5.1.1.1.5.1.1.1.2.1.1.1.5.5.1.1.5.5.5.5.8.8.6.6.8.8.p.i.8.i.6.i.i.i.p.8.8.p.i.i.i.8.8.i.i.i.i.i.i.i.k.i.k.p.i.i.i.i.i.i.i.i.i.i.i.i.a.q.8.i.k.r.R.;XT.r.a.j.j.z.h.h.j.N.t.w.k.h.V.AXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXBXc.N.v.s.b.c.n.f.a.a.a.q.7.7.5.1.1.7.2.1.1.1.1.1.2.1.1.5.=.2.=.=.=.=.=.w w w w q q q 2 2 q q 1 1 3 6 w e 2.=.1.=.5.=.=.1.=.2.2.1.5.=.2.5.5.=.1.5.1.5.1.1.2.1.5.7.7.7.7.7.6.6.6.7.7.7.7.7.7.8.8.8.tXtX7.i.i.i.i.h.i.i.i.x.i.a.q.g.g.a.d.a.f.a.s.f.d.a.f.f.f.f.a.d.f.d.f.d.f.f.a.a.d.f.d.d.d.l.l.q.a.j.w.3.u 3.7.3.3.8.8.8.q.a.w.j.b.n.B.P.R.;XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXc.I.n.b.v.b.v.v.w.w.s.w.s.q.0.0.0.0.7.7.q.h.8.1.7 q 2 2 2 q 8 q 2 q q 8 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 q q q 1 1 4 4 2 2 5 u l u l 1.1.1.3.3.3.1.5.7.3.1.l 1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.5.1.5.6.5.5.5.8.8.6.8.6.6.i.i.6.6.x.8.6.8.i.8.8.8.i.i.p.i.i.8.h.k.i.i.i.d.p.k.i.h.i.i.i.i.i.i.i.i.i.i.i.x.a.i.d.8.z.!.;XE.h.8.h.z.r.t.h.t.c.h.j.h.9.S.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXT.t.b.n.b.m.b.j.f.f.a.q.7.5.7.3.1.1.1.2.1.&.e 1.;.2.=.1.2.6.2.=.=.=.=.=.=.=.e e e r r w w w w w t 5 l 1.1.2.2.1.=.5.=.5.1.5.2.5.1.5.1.=.5.1.1.1.1.6.1.5.6.5.5.5.5.7.7.7.5.8.8.8.8.u.u.7.7.7.i.i.i.tXtXa.a.i.i.i.i.i.i.h.h.a.a.a.a.a.a.a.a.a.d.d.d.a.f.d.a.d.a.f.f.a.s.d.s.f.a.d.f.f.a.a.f.l.l.s.s.l.h.3.3.4.3.3.3.3.8.8.8.q.w.w.s.v.N.B.L.R.wXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXb.I.n.n.v.v.b.s.w.w.,.s.g.g.q.q.q.w.0.3.3.0.a.q.3.5 5 3 3 2 q 1 3 3 3 3 3 3 3 2 1 1 3 2 3 1 1 q 2 2 1 2 2 q 2 q 3 1 q 1 1 1 2 3 q w e e w e l e e 2.=.w w 6 k 6 6 l &.6 1.l &.1.1.1.1.1.5.2.5.6.7.7.6.7.6.7.6.8.6.i.8.8.8.8.i.8.i.i.i.8.8.i.i.i.8.i.8.i.i.p.i.k.i.i.d.i.a.i.i.a.i.d.d.i.i.i.i.i.i.i.k.i.h.h.z.!.rXE.h.2.q.r.h.z.z.h.m.t.j.t.t.lXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX,Xw.m.N.N.N.j.z.j.k.a.0.3.3.1.7.5.7.1.1.1.1.1.1.1.1.1.1.l ;.1.1.1.=.1.1.;.;.&.;.1.=.;.6 6 1.6 e ;.e 1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.5.1.5.7.5.1.6.5.7.6.2.7.7.6.p.7.8.8.8.i.7.u.7.u.7.tXtX8.8.a.i.i.a.a.a.g.a.a.a.a.a.a.a.a.f.a.f.a.f.f.a.f.a.a.d.a.a.a.s.f.j.f.f.f.f.a.d.k.m.l.s.s.l.s.0.;.3.7.7.3.3.4.7.8.q.q.q.s.s.s.n.n.B.P.eXJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXb.n.n.N.v.v.s.s.v.w.s.s.q.e.g.q.q.0.w.3.;.3.0.q.q.l 5 3 3 3 3 1 3 2 1 2 2 1 1 3 3 3 3 3 1 3 q 3 2 q q 2 q 2 2 2 q 1 2 2 1 1 2 3 3 2 2 3 3 3 3 5 5 5 5 3 5 5 5 6 e 6 1.1.1.1.1.1.1.1.1.1.1.5.1.6.5.6.7.7.7.6.6.8.6.i.i.8.i.i.8.i.8.8.i.i.x.i.i.8.i.i.a.i.i.i.k.p.i.i.i.i.i.i.a.i.i.i.i.i.i.h.i.h.i.i.k.k.h.a.x.m.T.rX-Xz.l 3.h.h.h.r.t.m.z.t.3.Z.SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCXc.n.c.b.N.z.j.j.k.a.q.7.3.1.1.1.1.1.1.1.1.1.1.1.1.6 =.1.1.1.1.1.1.1.1.l 1.1.1.e 1.6 1.1.l 6 1.l l 1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.5.5.1.6.5.5.5.1.5.1.1.7.1.7.6.7.7.7.7.6.7.7.p.8.8.p.7.8.a.i.8.i.tXtXa.a.i.i.a.i.a.a.a.a.a.a.a.a.a.f.a.a.d.a.f.a.k.a.f.d.f.f.f.f.f.f.a.a.a.f.l.f.a.n.J.n.s.s.n.0.3.:.3.3.3.3.3.7.4.7.8.q.q.0.s.s.b.n.B.B.P.wXJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXAXb.I.v.N.v.b.v.w.w.s.w.w.w.q.q.q.0.q.7.7.4.7.0.0.q.r.4.5 7 7 2 3 3 2 2 3 2 2 2 3 3 3 4 3 q 3 4 3 3 2 3 3 3 2 2 2 3 3 1 3 2 2 2 2 2 2 7 2 4 3 3 3 3 5 5 5 5 5 l l =.e 1.1.1.1.1.1.1.1.1.1.5.2.1.6.6.4.7.6.7.6.6.8.6.i.6.8.8.i.8.8.i.i.p.8.a.i.i.i.i.i.i.i.i.i.i.d.d.i.i.i.d.i.a.i.a.i.i.i.i.h.i.i.x.i.i.i.p.8.a.8.z.W.wXrXZ.3.3.i.h.h.h.j.t.N.t.x % & @ % > q e &.p.u.z 1.1.2.5.-.6.5.=.=.=.=.-.-.1.1.1.1.5.5.7.5.1.7.1.5.6.6.4.1.7.7.7.8.8.8.8.8.8.u.8.u.7.8.i.a.i.tXtX8.a.a.a.a.a.a.d.a.a.a.a.d.a.f.f.f.f.f.f.a.a.f.f.d.d.f.k.l.a.j.j.l.j.a.q.j.j.h.q.0.0.q.q.8.8.8.7.7.3.3.7.4.3.4.7.8.q.8.a.a.j.v.b.M.B.P.;XJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXmXw.I.n.b.v.v.v.,.v.w.s.w.s.a.0.0.0.q.8.q.4.7.7.4.3.7.7.3.3.7.7.0.0.7.1.u q q 3 3 p 3 3 3 2 2 5 3 3 3 q 5 3 q 3 3 3 3 5 w w 5 k w 6 l l l 1.1.=.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.6.5.1.5.6.5.4.5.6.1.5.1.7.7.6.7.5.5.7.8.8.p.8.7.i.i.p.i.i.i.k.a.a.a.q.0.0.8.7.7.7.7.5.5.:.5.7.a.a.7.i.i.i.i.i.i.i.d.a.i.i.i.i.h.k.i.k.i.i.a.8.q.m. X-X~.r.4.z.Z.h.J.r.y.BXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXgXc.J.U.Z.m.m.j.7.3.3.3.1.1.1.1.1.&.&.1.1.1.1.=.1.l k k l 2.1.1.l ;.:.;.3.l r e t 0 0 * % * * % % * > 0 0 3 l 6.5.1.1.1.;.3.3.1.1.2.l 3.l 1.5.1.1.5.6.1.7.1.6.1.7.6.6.3.6.7.7.8.7.7.7.q.8.u.q.i.7.i.a.7.a.a.tXtXa.a.a.a.a.d.a.d.d.a.s.d.a.f.a.f.f.f.f.a.f.f.k.f.k.k.l.f.l.l.n.n.h.q.a.m.j.s.s.w.q.0.q.8.8.7.4.7.3.3.3.7.7.3.4.8.8.8.8.w.h.w.b.b.N.L.P.:XJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXxXw.H.n.b.s.v.v.w.w.s.w.q.0.q.q.0.0.q.8.4.7.4.7.7.3.7.7.3.3.5.5.5.7.7.0.7.1.u 5 3 2 3 3 q q w q 5 5 q 3 3 q q p 3 k 5 w 5 k i 5 k e e l e 1.;.1.1.1.1.1.1.1.1.1.1.1.1.1.=.5.1.=.1.1.5.1.5.5.3.5.7.3.6.6.7.6.6.7.5.7.8.u.8.8.8.7.7.7.i.a.i.8.a.a.a.q.q.3.3.7.5.5.5.:.:.&.;.6 &.&.;.7.8.q.a.k.k.k.i.d.p.i.i.h.i.i.i.h.i.i.i.h.q.8.q.Z..X=XU.4.q.z.n.z.h.x &XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX XN.K.U.m.J.l.q.;.3.3.1.1.1.1.l 1.1.1.1.l 1.1.1.1.=.k l 1.7.7.1.u :.;.3.z k q 0 * * * * * * = * * * * * - * 0 q q l 3.3.:.:.1.1.1.1.z z z 5.1.5.7.1.7.6.5.5.2.7.7.7.7.4.7.7.7.8.u.8.u.u.7.7.i.7.8.u.i.a.a.i.tXtXa.a.a.a.a.a.d.a.a.a.d.f.a.f.d.f.f.a.j.j.a.f.l.k.f.a.l.l.m.n.f.w.w.j.j.s.a.s.q.q.7.0.q.q.8.q.0.7.3.3.3.3.3.7.4.4.8.q.8.w.w.j.b.n.B.B.P.:XJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXLXMXw.I.b.b.v.s.v.w.s.w.s.g.s.0.0.0.0.8.q.4.7.4.3.0.3.7.7.5.;.3.5.3.:.7.0.0.7.5.;.5 5 5 3 q q q q 3 3 3 3 3 3 5 3 k 3 k w 5 5 k l k e l l e 1.&.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.5.6.1.1.5.5.6.5.4.5.2.7.6.6.7.6.8.u.8.i.p.8.8.p.i.i.h.a.q.q.q.7.7.8.q.7.3.7.4.4.4.1.l 1.1.l l 6 5 5 6 l 1.6.i.k.k.d.i.i.i.i.i.h.i.i.i.i.a.h.h.a.a.h.m.!.!.m.z r.m.l.z.y.V.HXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXZ.B.m.M.l.m.s.3.1.7.3.1.1.&.1.1.1.1.1.1.1.1.l ;.1.1.1.5.5.5.5.5.;.1.c q 0 0 y = = = = = = = = = = = = = * = * * 0 0 h k z 3.l 1.5.p.5.3.3.1.5.1.7.6.5.6.2.7.7.6.6.7.7.4.7.7.7.8.i.u.i.7.8.i.u.i.7.a.u.8.i.i.tXtXa.a.a.a.a.a.a.a.f.a.s.a.f.d.f.j.f.f.k.f.j.j.j.j.k.l.l.l.l.a.a.s.j.s.a.q.q.q.q.0.0.q.q.q.q.8.7.4.7.3.0.7.3.3.7.8.8.8.a.r.h.s.b.b.N.L.P.XXJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXlXv.I.b.b.v.b.v.s.s.s.w.e.0.w.q.0.0.q.7.0.0.0.7.3.3.7.7.3.5.3.;.3.7.:.5.5.7.8.a.3.2.l 5 5 3 3 3 q q w w q w q w 3 w w w w e 5 6 l l l =.l 1.1.l 1.1.1.1.1.1.1.1.1.1.1.=.1.=.5.1.6.1.5.1.5.5.1.5.6.5.7.6.7.7.5.7.8.8.p.7.8.p.8.i.d.k.j.q.q.a.w.e.z k i 3 4 3 , 4 , , , , , < , 4 w 3 7 7 5 e 1.6.i.k.G.d.i.h.i.i.i.h.k.h.i.i.a.i.i.i.h.Y.=X!.r.3.l.M.n.j.9.xXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXfXN.Z.b.M.n.z.3.;.3.8.1.6 l 1.6 1.1.1.l 1.&.1.1.1.1.1.&.-.=.6.=.r w 0 0 0 = ; ; ; C C C C C C J C C C C = = = = = = 0 0 0 q k c 2.p.p.u.7.1.5.7.5.7.6.7.7.6.7.6.7.6.6.6.7.7.7.7.8.7.i.7.i.u.7.a.8.a.i.a.a.i.a.tXdXa.a.a.a.f.a.d.a.d.f.d.d.d.f.a.f.j.f.l.l.l.l.f.l.n.n.l.a.w.a.l.n.s.0.7.0.0.0.0.q.q.q.q.q.q.q.0.0.7.3.3.3.7.3.4.8.8.8.8.h.w.j.v.v.B.K.P.XXFXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXgXb.H.n.b.v.b.s.s.s.q.s.g.g.w.0.q.0.8.8.4.4.7.7.7.7.3.5.7.7.3.;.7.3.3.3.1.5.7.0.7.7.7.3.u 3 3 3 3 k 3 5 q 3 w k 5 5 w w e e l e l 1.e 1.=.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.5.1.5.5.7.1.5.7.5.5.7.5.6.7.7.7.7.7.7.i.i.h.a.a.d.a.q.w.,.4 # X X X X X X . . . . . . . X . + < q 5 e 7 4 5 u 1.p.a.i.i.i.i.a.i.h.i.a.i.a.i.i.i.k.k.k.Y..XZ.4.3.n.J.k.y.%XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKX%Xm.M.b.N.j.q.3.3.3.3.1.1.e 1.1.1.l 1.1.1.1.1.1.1.1.1.:.5.3.c t 0 0 = = ; ; C C C G G C Z C C C C C C C C J C = ; = = * * * 0 0 q c 2.p.1.1.1.5.5.7.5.6.6.2.7.6.7.7.7.7.7.7.7.8.7.p.p.u.i.u.i.u.i.7.i.a.8.a.a.tXtXa.a.a.a.a.a.a.f.a.a.f.d.f.d.f.k.l.j.l.l.l.l.m.l.s.0.s.s.k.l.s.w.0.0.0.0.7.0.q.q.q.q.0.q.8.8.q.4.4.7.3.3.7.3.4.8.8.8.8.h.h.w.b.b.N.P.R..XHXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXpXb.I.n.b.v.s.s.w.s.s.w.g.w.0.0.0.0.7.q.q.7.0.7.7.7.3.3.7.5.7.7.3.l 3.4.4.7.5.1.5.7.7.4.3.z i i q 3 5 q 3 w q w w w w w e w l e e e 1.=.1.1.l 1.1.1.1.1.1.1.1.1.1.1.1.=.1.1.5.1.5.2.5.1.5.1.6.6.7.7.2.6.6.6.3.7.6.5.5.u.i.h.k.l.k.a.a.q.w.p + o % % % % > > f f f g f % o . # 1 w 7 7 4 4 7 5 1.1.8.i.h.i.i.h.h.a.i.h.a.d.i.k.i.i.x.z.T.E.h.;.w.J.z.t.y.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXJXW.K.K.M.b.a.3.3.3.7.1.l 1.;.1.1.&.1.6 =.1.1.1.1.1.1.2.u i 3 0 0 y ; ; C C C Z A D D F ( ( D S G G G G C C C C C V C ; = = = * % 0 q q r 2.2.6.7.5.5.5.7.7.7.6.6.7.6.7.7.7.8.7.8.8.8.i.q.7.8.a.a.7.a.a.i.a.i.a.tXtXa.a.a.f.a.f.d.a.f.a.a.f.f.f.f.k.l.l.J.n.n.l.w.s.s.s.f.s.s.w.0.0.3.7.7.0.q.q.7.q.q.q.0.8.q.q.8.8.7.4.7.7.3.7.7.7.8.q.8.q.s.h.b.v.B.P.P.XXHXKXKXKXKXKXKXKXKXKXKXKX KX KXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXLXpXv.v.N.b.v.v.b.s.w.w.s.0.0.0.0.0.0.7.7.7.3.0.3.3.7.3.7.3.3.7.3.:.3.5.3.5.3.5.3.3.3.3.4.7.8.8.4.z k k 3 3 w i 5 5 5 w w k l 6 1.;.1.1.l l 1.1.1.1.1.1.1.1.1.1.1.1.1.1.6.1.5.5.5.1.6.1.1.5.1.7.6.6.6.2.1.1.5.6.6.1.7.0.a.f.k.f.f.s.w.d.d.a.4 . . $ m X%X|.|.%XW././.S.|.S.@Xn o X , 5 2 2 3 5 7 2 3 3 2.8.h.k.i.d.d.d.h.a.a.a.h.i.a.i.x.h.z.~.m.7.7.t.N.j.t.mXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXCXA.n.M.N.b.3.4.3.1.1.1.1.1.1.1.1.1.1.1.1.:.;.1.l l x 2.> 0 * = = C C C C U S ( ( ) _ { | | | { { ) ( F G G C C C C C V Y J = = = * * - 0 q 2.x.6.5.:.u.8.6.1.7.7.5.7.7.7.8.7.8.8.8.8.8.7.i.a.u.8.a.i.i.0.a.a.a.tXtXa.s.a.f.a.a.a.f.f.s.a.a.f.d.f.l.l.m.l.l.f.w.0.w.b.n.v.0.:.4.0.7.7.q.0.q.q.q.q.q.q.q.q.8.8.4.8.3.3.7.3.3.1.3.3.4.4.8.q.q.w.w.s.b.B.K.P.XXFXKXKXKXKXKXKXKXKXKXKXKX KX KXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXpXv.v.n.t.v.v.s.s.s.s.w.s.0.a.0.0.0.7.0.7.7.3.0.3.e.3.3.5.7.5.5.3.5.3.:.3.5.3.5.3.3.3.3.3.7.7.4.4.3.3.l i 5 5 k l l l l k u 1.l l u 1.1.&.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.5.5.2.2.5.1.5.1.5.5.7.1.7.2.6.6.6.6.7.1.7.0.w.s.j.j.f.a.a.s.d.d.a., . o g %X4X6X4X4X X < q 7 7 3 7 2 7 3 7 2 7 5 5 5 u 7.x.a.a.h.i.h.a.i.k.i.p.i.h.k.z.U.w.;.d.J.y.gXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXVXA.j.F.s.z 4.1.1.1.1.1.1.1.1.1.1.1.1.6 1.1.5.5.2.t 0 C G F D ) _ ' ` ` ` ` ] ] O.O.$.o.X.o.o.$.#.#.0X0XIXIXLXKXKXLXKXPXIX| { D A A C C V C = * * % , 2.6.7.2.7.7.7.7.7.7.8.8.8.8.8.8.8.8.i.a.q.a.a.i.i.a.a.a.a.a.tXtXa.a.f.f.k.k.k.l.d.a.a.w.r.9.z k k 3 3 5 k k u u l 3.3.0.0.7.4.7.8.4.8.8.0.q.q.a.q.q.0.q.q.8.8.8.7.4.7.3.3.3.7.8.8.8.8.q.w.w.s.n.N.K.I.oXFXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX4Xv.I.v.v.v.v.w.w.s.s.s.q.g.0.0.0.0.7.4.0.7.7.7.7.3.7.7.7.7.3.;.7.3.5.7.3.5.3.3.3.3.;.3.3.3.;.3.z l k w q 3 5 u u 1.3.4.q.1.1.l 2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.6.1.5.2.5.6.5.5.1.5.5.7.5.7.1.1.1.5.h.z.k.l.j.k.k.j.l.f.h.a.w.a.u.8., . o j #X6XiXpXgX1X%X>XiXiXsXxXmX7X% X , 5 5 7 5 2 2 2 7 3 8 3 5 5 7 7 l 7.d.a.i.h.i.a.i.i.k.i.i.k.h.k.Y.z.;.a.z.Z.>XKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXzXc.j.k.q.l 7.1.1.1.1.1.1.1.6 1.1.1.1.1.1.6 ;.5.c h ; Z F ( ) _ ' ' ` ` ` ` ] ] ] O.O. .X. ...o.$.#.#.0XqXIXIXIXIXIXPXIXqXqX$.{ ( D G C C C = = * % < e 6.5.2.7.7.7.8.7.8.8.8.8.8.q.8.8.q.8.a.i.a.i.a.a.a.a.a.a.a.tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXkXdXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXkXtXtXtXtXtXtXtXtXtXtX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX&Xv.v.b.b.v.s.s.s.s.w.q.g.w.w.0.q.q.7.7.7.:.3.3.7.7.7.3.5.7.5.3.7.:.3.;.5.3.3.:.3.3.3.3.3.3.;.3.;.l l u i i i 5 5 5 i l z 8.i.5.1.u l u l 1.1.1.l l 1.1.1.1.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.1.5.5.1.5.a.l.l.n.l.f.j.f.j.j.f.a.s.0.w.q.l : . o g $X6XdXsXaX1X>X%X . < 6 6 3 2 2 8 7 2 8 3 7 7 5 5 5 7 1.p.k.k.i.k.a.a.i.d.h.a.a.a.k.F.U.q.1.h.m.E.KXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXyXf.n.a.4.1.l 1.2.1.1.1.1.1.1.1.1.1.&.1.1.1.;.7.q ; G F ( ) ) ) _ ' ` ` ` ` ` ` ] ] ] .] .......+.+.$.#.0X0XqXqXqX0X0X0X0X$.$.| ) F G G C C = = * % < l p.p.7.5.8.p.7.8.p.8.7.i.u.q.i.i.a.8.i.8.8.a.a.u.7.q.q.a.tXtXtXdXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXyXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXdXtXtXtXtXtXtXtXuXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXuXtXtXtXtXtXtXtXtXtX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX:Xv.v.b.b.v.v.s.s.w.w.w.q.q.q.0.8.0.7.0.7.3.0.3.0.7.3.7.5.3.3.5.5.3.3.3.3.5.3.3.3.3.;.3.3.3.3.3.3.1.l l i 5 k i 5 5 5 5 i l 1.7.7.1.1.6 1.l 1.l l 6 1.1.1.1.1.1.1.1.1.5.1.3.6.1.1.1.1.1.5.5.1.3.5.1.3.7.f.l.l.n.l.l.l.k.l.j.a.a.a.e.8.8.3.< . o j $X6XsXiX1X . < e e 5 7 7 3 2 7 7 2 2 7 7 5 7 7 e p.h.i.i.a.a.a.i.i.a.a.a.h.i.z.U.h.7.q.z.T.KXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKX>Xs.j.q.1.l l l 1.1.l 1.&.1.6 1.1.1.1.1.1.;.;.u 0 Y S ( ) ) _ _ ' ' ` ` ` ` ` ` ` ] ] ] ] ] ] ] ] ..o.+.+.#.#.0X0X0X0X0X0X#.#.$.O.} ) F G C C C = * - > c 8.i.5.u.7.7.7.p.8.u.u.a.i.u.i.8.i.a.i.a.i.a.i.0.a.s.a.a.a.a.k.n.k.h.h.q.4.3.c c k 5 3 5 5 q i w i i l u 1.1.3.3.3.7.3.0.7.7.q.4.4.q.q.q.q.q.q.q.a.q.q.8.q.8.8.4.4.7.3.3.3.3.3.8.8.w.s.s.b.b.B.P.P.oXFXLXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX:Xv.B.B.b.v.s.s.s.s.w.0.w.a.q.0.q.0.7.7.0.3.3.:.3.7.5.3.3.5.7.7.3.7.5.7.5.5.5.5.3.3.3.3.3.3.3.3.3.u l u i u w 5 5 5 5 3 7 3 i l 4.8.5.;.&.e 6 1.1.1.l 1.1.1.1.1.1.1.1.2.1.1.1.5.1.5.1.1.5.1.5.5.5.1.7.a.l.l.l.l.n.l.k.h.j.a.a.s.g.7.3.7.4.< . o j %XiXsXdX>X1X q 4.p.7.7.8.p.7.i.8.7.i.7.7.8.i.i.8.i.i.i.a.a.a.i.a.a.s.a.a.k.l.l.j.w.4.3.z l 3 i i 5 i 5 5 w w k k l l l l 3.3.3.3.3.0.3.0.4.7.7.q.8.q.0.q.q.a.q.q.q.q.8.q.q.8.8.7.4.3.3.3.7.7.7.q.q.s.s.b.b.N.P.P.oXSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXXXb.I.N.v.b.w.v.w.s.w.w.g.0.q.0.8.8.8.7.7.7.3.:.3.0.3.7.7.5.3.3.7.3.5.3.3.5.7.7.3.3.3.3.3.3.3.5.3.;.z u l l 5 5 5 5 5 5 5 5 p 3 k 4.q.8.5.l l 2.1.l 1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.5.1.5.7.5.8.k.J.l.l.l.j.s.a.a.a.a.7.u.a.7.1.5.4.< . o j @XpXfXyX,X1X4X1X%X*XpXjXBXiXg . $ c 7 3 7 7 7 7 7 2 3 3 3 3 7 7 7 7 7 7.q.h.a.a.a.i.a.h.a.a.a.d.j.z.m.8.3.h.Z.VXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXHXW.s.q.3.3.l l 1.1.1.1.1.1.1.l 1.&.1.1.1.1.4.4.g ; ( ( ) ) ) ) ' ' ' ' ' ' ' ' ` ` ` ` ] ] ] ] ] [ ..+.#.0X0X0X0X#.+.+.+.+.+.+.+.+...] _ ) F G C C = - % 0 k 8.7.7.8.p.8.8.u.i.7.7.a.8.i.a.a.i.i.a.a.i.a.a.a.j.f.a.f.l.j.h.w.q.3.l z i i 5 k i 5 5 i w w w u u l u l 3.3.3.3.3.7.7.7.7.7.q.8.q.q.q.q.q.q.q.q.q.a.q.q.8.q.7.7.4.3.3.3.3.7.8.7.s.a.s.j.b.N.K.P.oXFXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX:Xn.L.N.v.v.v.w.v.s.0.0.s.q.q.0.q.q.8.7.7.7.3.7.0.7.3.3.5.7.7.5.5.7.7.7.7.7.7.7.3.3.7.3.7.4.3.3.3.3.3.l u u i 5 k i k k 5 k 3 p i l 8.8.8.1.1.1.l 1.l 1.1.1.1.1.1.1.1.1.1.1.1.7.1.5.1.5.5.1.5.1.1.7.h.z.l.k.l.j.f.a.a.w.q.q.a.q.7.3.l 1.k : o g @XpXyX1X1X1X>X i 4.7.7.7.7.8.p.7.i.i.i.u.a.u.i.i.i.a.a.h.a.a.a.a.a.a.a.j.k.a.e.4.4.z c l k k k k k i k i w w w l l 1.l 1.;.3.3.3.e.7.3.7.e.4.q.q.8.0.q.q.q.a.q.a.q.q.8.q.q.q.7.7.7.5.3.3.7.4.8.q.q.s.s.b.b.M.K.P.oXFXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX&Xv.I.B.b.v.v.s.v.s.w.0.s.a.0.0.8.q.8.7.7.3.:.:.7.7.3.3.7.3.5.7.3.7.7.7.7.7.5.7.3.3.7.7.3.3.7.3.3.3.l u l l k l k k i i i i i k k l k 4.r.7.2.2.l 6 l 1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.5.3.5.1.i.k.z.l.j.f.f.a.a.a.s.w.0.0.q.4.z z z c : o g %XsXpX1X,X1X>X : $ $ # O X X X X . . . X o j @X6XsXsXpXpXpXpXaXpXdXhXBXcX/.j > > : $ @ O O o o o o X X X + : , 4 5 5 6 5.k.d.i.i.h.a.i.a.h.i.a.a.l.m.8.3.z.6XKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXBXt.a.3.l e l 1.;.1.1.1.&.l 1.1.1.r 2.5.u.2.h ; A ( F ( ) ) ) ) ) ) ' ' ) ) ' ' ` ` ] ] ] ] +.#.#.#.0X#.0X0X0X0X#.#.#.+.@.[ [ ..@.@.@.@...] ] ) F A C C = * 0 3 7.7.7.0.q.p.i.i.8.a.7.a.i.a.8.a.h.8.8.a.h.l.a.t.t.d.5.x y.9.9.x x x k 4.l k l k k l l w l u u l l 1.;.;.3.3.7.3.7.7.7.7.e.8.q.8.q.q.q.a.q.q.q.q.q.a.q.q.8.8.8.4.4.3.3.7.4.7.q.q.w.s.j.b.N.K.P.oXSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX XK.n.v.b.s.b.s.s.s.KXKXg.q.KXKX8.7.8.7.7.:.7.7.3.3.7.7.:.7.7.7.3.7.7.7.7.7.:.7.7.3.7.7.7.KXKX7.3.3.l l l l 5 u w l l l l z z z l 9.x 9.c 5XHXZ.w 1.6 l l 2.1.1.1.1.1.1.1.1.1.1.1.1.6.1.1.5.1.5.8.f.l.F.a.< O . X O # $ $ $ $ $ @ o . o j $XiXsXiXiXiXiXiXiX3XiXsXBXcX$X/.C.C.C.C.D.M m n j j j g j f + . O , 5 5 7 1.a.k.i.d.i.i.h.i.i.d.a.a.l.m.q.1.h.6XKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXCXh.h.3.l e l 5.;.1.1.1.1.1.1.1.;.c =.p.p.l h C A ( ( F F ) ) ) ) ) ) ) ) ) ' ' ` ` ] ] [ [ +.#.#.#.#.#.#.#.0X0X0X#.#.#.+.@.] ....@.@.@...] ] _ ( A C C = * % , 3.7.7.7.7.i.p.i.i.i.u.i.a.i.8.a.h.i.a.a.a.a.l.h.r.3.=XW.h 9.x 9.x 9.x z l z l l u 5 k i l 6 u l l 1.3.3.3.3.3.3.3.7.7.4.8.7.4.q.0.q.q.q.w.a.q.a.r.r.q.8.q.8.7.3.7.3.3.3.3.7.q.q.w.s.j.b.N.M.P.oXAXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX.XI.v.N.n.b.s.w.w.w.KXKX0.0.q.KXKX0.4.7.7.3.7.7.5.KXKXKXKXKX7.7.7.7.KXKXKXKX3.7.3.3.KXKXKXKXKX5.3.3.l l l l 5 l l l k l l z x x z 9.9.9.y.CXKXBXy.l 1.&.l 1.1.l l 1.1.1.1.1.1.1.1.1.6.1.6.5.;.5.a.s.b.l.3 X . X f m M D.D.D.M m n g f % @ O o O j %X9XdXiXsXgXiXiXiX3XiXhXmXjX9X@X|.S.C.S.C.S.C.C.C.S.S.C.@X@Xm # . : 5 7 5 ;.i.d.d.d.i.d.d.i.a.a.a.a.k.J.q.l r. M S.S.S.S.S.S.S.S.|.S.S.D.m m j m %XiXiXiXpXpXiX6XiX3XiXcXzXZXBX6X$X*X*X&X2X-X2X2X$X$X*X$X*X$X@Xf . + 3 7 7 6 8.a.i.i.h.a.i.h.a.a.a.h.h.z.a.1.r.6XKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXCXt.a.3.l 5 1.5.;.1.;.1.1.1.1.1.2.2.=.p.4.0 ; Z F F F F F F ) F ) ) ) ) R R ' } ` ] ....o.o.+.+.@.+.+.+.+.#.#.#.#.#.0X#.#.#.+...] ..o.o.o.[ ] ` ' F G Y C = * : 5 z 8.7.u.u.x.i.i.a.a.8.a.a.h.8.a.h.a.q.k.b.h.6.R.HXKXHXV.x y.x x x x x z z k l l k l i l l l u l l 3.;.3.3.3.3.4.4.7.7.7.4.q.8.8.0.q.q.q.q.q.q.q.r.8.q.q.8.8.3.3.3.3.7.7.7.q.q.a.s.j.b.M.K.P.oXVXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX.Xn.v.v.b.b.s.s.s.s.KXKXq.0.q.KXKX7.7.KXKXKXKX3.3.KXKX7.3.KXKX7.7.5.KXKXKXKXKX7.3.KXKX3.7.KXKX5.3.3.3.l l l l l l l l 4.l 4.4.4.9.y.x y.Xi y.x 9.9.z x z z c k l k l l i l u l l 1.;.3.3.3.3.3.7.0.7.e.0.7.e.8.q.q.q.q.q.q.q.q.q.a.q.8.8.8.4.4.7.3.3.3.3.4.8.q.w.w.b.n.B.B.I.oXAXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX.XI.B.N.b.b.b.s.w.w.KXKX0.0.q.KXKX8.4.7.7.7.7.3.:.KXKX7.7.KXKX3.7.KXKX7.7.KXKX7.3.KXKX7.3.KXKX5.3.3.3.3.l l l l z l x 4.4.4.4.4.4.v b c.AXKXKXKXKXKXdXk l l l 1.1.1.1.1.1.1.1.1.1.1.5.5.1.7.3.8.k.n.j.r., . . g %XxXZXZXZXBXZXZXZXZXNXBXBXBXmXhX3XiXsXkXpXpXpX7XyX7X6X6XiXaXhXmXzXzXhXxXxXxXxXxXzXxXxXxXxXDXFXcXg . 9 7 2 7 7 3.i.a.a.a.a.i.a.i.k.a.a.h.F.z.3.x.aXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXSXU.7.3.l 5 1.1.1.1.1.1.1.1.1.1.1.=.6.1.h ; ; Z Z F F S F ( ( ( ( F F R ) ' ` } ] .......o.o.o.o.@.+.o.o.o.@.@.+.#.#.#.#.#.#.#.+.[ ] ] ] [ ] ] ' ) F G C ; * @ : t x.i.u.i.8.8.a.i.a.i.a.a.h.x.h.a.a.a.l.w.k ZXKXKXKXKXBXx b v b y.z x x x z z l k k l l l l l l 1.;.3.3.3.3.3.3.3.7.7.4.0.8.q.q.q.q.q.a.w.q.a.r.q.r.q.q.8.8.4.3.3.3.7.3.8.q.q.a.s.s.b.N.L.P.oXVXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX.XI.N.v.v.s.s.s.w.s.KXKX0.0.KXKXq.0.7.7.7.7.7.7.:.KXKX3.5.KXKX7.7.KXKX7.3.KXKX:.3.KXKX3.3.KXKX5.3.3.l l l l l z z l 4.x 4.4.x.y.x y.v A.KXKXKXKXKXKXKX%X1.1.6 e 1.1.=.1.1.1.1.1.1.1.6.=.1.2.7.8.k.z.k.t., . o g %XpXzXzXzXxXzXzXxXxXxXfXhXhXhXsXfXsXdXdXgX4X1X>X>X1X1X9X6XiX3XpX6XpXiXpXgXaXaXpX7XpXpXaX8XnXBXjXj X 9 2 q 7 7 1.i.i.a.a.h.a.a.a.i.a.a.q.J.z.3.r.sXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXSXT.7.3.u 5 1.;.;.1.u 1.=.1.1.1.=.=.6.6.h ; C C Z F F S F ( D ( D D R F ) ' ` } ` ...o. ...........o.o.o.o.@.@.+.+.+.#.#.#.#.#.+.@.] [ [ ] [ ] ` ' D G C = * & @ q 4.i.i.i.4.q.a.a.i.a.a.a.h.h.a.a.h.k.a.&.eXKXKXKXKXKXJXA.x c.b 9.x x x 3.l l k l k l l l l l z 1.u 3.1.1.3.3.3.7.0.7.0.7.8.8.q.q.q.q.q.q.q.a.a.q.q.8.q.8.8.3.7.3.3.7.3.8.8.q.w.a.j.b.B.L.B.oXVXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXoXM.n.c.v.v.b.s.g.w.KXKXKXKXKX7.7.7.4.7.7.7.7.7.7.KXKXKXKXKX7.3.7.3.KXKXKXKXKX3.7.7.KXKXKXKXKX3.3.1.3.3.z z z l l z 3.x x 4.x q.9.9.b *XKXKXKXKXKXKXKXHXZ.u 6 u u =.6.1.1.1.1.1.2.1.1.1.1.1.1.a.k.j.h.h.q . X f S.3XfXfXfXgXfXlXsXiX,XsXfXgXsXaXgXsXdXsXpX4X&X$X#X@X@X$X5X3X3XyX3X3X3XdX2X&X>X4XpXiX6X6XpXhXBXhXj . + 2 7 7 7 &.i.i.a.a.i.i.h.a.d.d.a.a.m.m.l r.nXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXW.5.5.6 k l =.5.1.1.1.1.1.1.;.1.5.8.c 0 ; ; Z Z Z S S F ( D D D D F R ) | } } . . ... .] .... .....o.o.o.o.@.@.+.+.+.#.#.#.#.+.+.] ] [ ] ] ] ` ' D G C = - & @ 0 4.8.7.u.i.i.i.i.i.i.a.i.a.8.k.7.l.j.u S.KXKXKXKXKXKXKX*Xz t.x b x 4.x x 4.x z l z l l l l l 1.3.1.1.3.3.3.3.7.7.4.4.7.0.e.8.8.0.q.q.q.a.a.r.q.q.r.q.q.8.8.4.7.3.3.7.8.8.8.w.w.s.b.b.B.B.P.oXAXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX XM.I.b.v.v.s.s.w.s.q.q.g.0.0.0.7.4.4.7.7.:.3.0.7.KXKX7.7.5.7.7.5.3.3.3.3.0.3.3.0.7.3.0.3.7.3.3.3.1.z 1.z z l l z 3.z x 4.4.x q.w.e.b nXKXKXKXKXKXKXKXKXfX4.;.i u e =.1.1.1.=.1.1.1.1.1.1.7.1.a.h.j.a.h.q X X f C.bXaXsXfXlXfXiX1X&X%XiXsXdXgXaXpXpXgXfXdX3X*X$X@X@XC./.*XX&X$X%X%X$X*X4XiXhXNXhXj . @ 7 2 2 7 1.a.k.h.h.k.h.a.k.a.a.k.k.z.m.1.^.FXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXX4XyXpXdX&XyXgXsXsXaXpXfXmXmXxXfXiX>X%X@XC.D.C.1X4X3X3X3X3XdX*X$X*X>X*X&X@X%X1XsXZXhXj . + 7 2 7 7 1.i.i.h.a.h.i.k.h.a.d.k.h.z.Z.1.z.KXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXfX4.1.e i c =.-.2.1.1.1.;.1.1.l 3.2.q 0 ; ; Z Z Z A A F S S S F F D %.' } } } . ... . . ... . .} ` ` ` ` ..o...o.+.+.+.#.+.+.+.+.O.] O.] ] ` ` ' ) A C = * & o : l 4.3.0.i.i.8.i.i.i.a.a.4.s.a.F.8.c.FXKXKXKXKXKXKXKXKXKXS.z t.v 9.4.x x x z c 2.z k l l l 3.1.1.1.3.3.3.3.3.7.3.4.7.0.0.7.q.0.0.q.q.q.q.q.q.8.r.q.8.q.8.e.8.4.3.3.4.8.8.8.w.w.w.j.n.M.K.P.oXAXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXyXtXtXtXtXtXtXtXtXtXtXuXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXuXtXtXtXtXtXuXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXdXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXyXtXtXtXtXtXtXtXtXtXtXtXtXtXtXdXS.3X3X1X1X4XiX3X4XyX$X3XfXlXsXsXpXxXZXBXmXjXgX7X1X@X/.M C.1X3X3X3X3XyXpX>X&X*X>X2X&X$X|.&XsXNXhXv . + w 2 7 7 1.h.k.a.k.i.h.a.a.a.k.a.h.z.m.2.A.KXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXBXt.1.6 5 l 1.1.1.1.l 1.1.1.1.l 1.4.c 0 ; ; Z C Z Z A A S S F F F R { _ ` } . . . . . ..... .` ` ` } . .o.o.....+.+.+.+.+.+.+.+.O.] ` ] ] ] ` ' ) A C = & o @ , l 7.e.e.8.8.a.i.i.a.i.h.7.s.F.7.l pXKXKXKXKXKXKXKXKXKXKX$Xz 9.y.9.9.x 9.4.x 2.c 3.l l l 1.l l 1.3.z 3.;.3.3.3.3.3.0.3.7.0.8.0.0.q.8.q.q.a.a.q.q.q.q.q.q.4.8.8.3.3.3.4.8.7.w.a.s.b.m.N.P.I.oXFXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXyXtXtXtXtXtXuXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXyXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXdXtXtXdXdXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXC.X@XC./.X2X$X$X&X>X6XfXZXxXm X @ q 7 7 5 1.a.k.h.d.h.a.h.k.a.k.k.h.F.z.=.=XKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXGXA.l 6 6 l 2.1.1.1.1.=.1.1.1.1.1.7.2.q = ; ; C Z Z F A S S S A F D { _ } } } } . . . . . .} } } X.X.o.X.o.o.....o.o.+.+.+.+.+.+.O.` ] ` ] ` ` _ ) A C * & & : q 7.a.0.q.i.a.i.a.a.a.i.a.d.d.k.z V.KXKXKXKXKXKXKXKXKXKXKXiX9.9.9.y.4.x 4.4.2.x l z l l l 1.1.1.1.1.1.3.3.3.3.:.e.3.7.4.0.7.7.7.0.q.0.q.q.q.q.a.q.x.8.q.8.8.8.4.3.3.7.7.8.q.w.s.a.v.b.M.K.K.oXFXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX:Xn.I.v.b.v.v.s.w.w.q.q.0.0.0.0.4.0.3.3.0.3.7.7.7.7.3.3.7.3.7.7.7.3.e.7.7.7.7.:.e.3.7.3.3.3.3.3.3.1.3.3.l l 1.4.2.4.4.4.9.y.e.r.9.v JXKXKXKXKXKXKXKXKXKXKXKXKX,X4.l w 1.1.1.1.1.1.1.1.1.;.1.1.8.h.f.0.8.h X X f C.X&X$X$X&X1X9X4XpXxXZXzXM X + q 2 7 5 1.h.i.k.a.k.k.a.k.a.k.k.k.U.h.2.kXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKX.Xi =.5 l 1.1.1.1.1.1.1.1.=.=.&.5.i.r = ; ; C Z Z Z A S S A A S R { _ } } } } . . ... . . .} X.X.X.o.o.X.o.o.o.o.o.@.o.+.o.o.o.O.` ` ] ` ` ` _ ) G J * @ @ > w i.i.7.a.i.i.i.i.i.i.a.a.d.G.s.z dXKXKXKXKXKXKXKXKXKXKXKXzXt.b b y.x.b 9.x x 4.2.4.l l 1.l 1.l 1.l 1.1.;.;.3.:.3.3.3.7.0.q.4.0.0.7.q.0.q.q.q.q.q.q.q.q.8.8.4.4.3.3.7.4.8.7.w.a.w.s.b.M.P.P.oXFXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX4Xb.I.b.b.s.s.b.s.s.s.w.0.0.0.3.0.3.3.7.7.3.0.3.0.7.7.7.7.7.7.:.3.7.3.7.7.7.7.7.3.3.3.3.3.3.3.1.3.3.1.3.3.z 4.4.x 4.4.9.9.b e.r.9.S.KXKXKXKXKXKXKXKXKXKXKXKXKXFXz.1.&.l 1.1.=.1.1.=.1.1.1.1.1.7.a.w.w.q.k X X f S.1XpXsXlXxXxXfXpXiX$XXpXdXsXfXlXlXzXhXiXiXlXdXdXgXfXsXfXBXHXLXGXCXzXfXiXyXiX6XiXyX9X6X6X6XaX9X9XiXpX6X9X7X6XcXCXjX> 9 2 5 7 6 7.a.i.a.a.i.i.a.a.i.k.h.F.F.h.h JXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXBX8.5.i k =.=.1.1.l 1.1.1.1.l l ;.:.x g g ; C Z Z S S S S S S S R ) ) ` } } } } . .X.o.} } } } X. .X.X. .o.o. .o.o.o.o.@.o.o.o.] ` ` ` ` ` ' _ D G = * @ > l z x.q.8.p.a.a.a.8.0.a.s.g.f.a.3.>XKXKXKXKXKXKXKXKXKXKXKXKXKXD.9.z.e.b x x x z x z z x x l z l l 1.3.l 1.3.3.3.3.3.7.3.3.3.7.4.4.8.q.q.8.q.q.q.a.q.r.q.x.q.8.7.7.7.7.3.3.7.8.q.r.s.b.N.B.I.P.-XHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXyXb.I.N.b.v.s.w.s.s.w.w.e.0.7.7.3.7.3.7.7.7.7.3.0.:.7.0.3.0.3.7.7.7.7.7.:.7.7.7.7.3.3.3.3.3.3.1.3.1.3.1.3.z x 4.x 4.9.x 9.9.9.t.b mXKXKXKXKXKXKXKXKXKXKXKXKXKXKXxXr.;.6 l l 1.1.;.1.1.1.1.1.u 1.a.h.w.8.c X % |.4XaXaXsXhXsXcXhXhXlXfXfXsXfXsXsXsXdXsXzXAXAXBXzXfXdXdXiX3XiXiXpXiX6X6XaX6X6X7X7X6X6XiXiXxXZX@Xo X : 7 3 8 6 q.a.a.a.i.k.k.a.h.d.k.z.l.F.6.^.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXHXz.7.5 z 1.=.1.=.1.;.1.1.=.e l 3.5.l t g ; C Z Z Z Z S Z Z U U ( ) | } } } .} } . .X.} } } } X.X.X.X.X.X.......o.o.o.o.o.o...` _ ` ` ' ` ' ) D C = & $ , x 4.r.8.8.8.u.i.a.a.q.g.a.a.f.0.k GXKXKXKXKXKXKXKXKXKXKXKXKXKX@X9.h.e.b 9.x x z x x 4.z 4.l l l 3.1.1.z 3.1.z 3.3.3.:.3.7.e.7.7.0.q.8.q.q.q.8.q.q.q.q.q.8.8.8.8.7.4.3.3.3.7.8.r.h.j.b.n.N.B.P.-XHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXgXv.v.n.t.v.s.s.w.s.w.q.0.e.7.0.7.7.7.3.:.3.7.7.7.0.3.3.7.7.7.7.:.7.3.3.0.:.7.7.3.7.3.3.3.3.3.1.1.3.1.z z 1.4.4.4.x x 9.9.v 9.9.y.HXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXZ.3.5 l l 1.l 1.1.2.1.1.1.;.1.q.q.8.8.c + o M 7XhXcXaXcXaXpXpXiXiXiX6X3X3X1XX>X&X&X>X>X>X1X>X,X1XS.< + # , 5 3 7 1.a.a.a.a.h.a.h.a.i.k.k.k.l.J.2.%XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXW.1.u l 4.1.1.1.1.1.1.1.1.1.l 1.5.2.h f ; ; Z Z Z U S S S A S ( { | } } } } } } . .X.} X.} } X.X.X.X.X...o.o...o.o.o.o.o.o.X.` ` _ ` ` ' ' ) U ; * @ < h 6.8.8.q.i.i.i.i.8.a.q.q.q.d.f.3.W.KXKXKXKXKXKXKXKXKXKXKXKXKXKX*Xv r.y.b 9.9.4.x 1.z 1.x l l l l l 1.1.1.1.3.3.3.3.:.7.7.3.3.3.7.0.0.8.q.8.q.q.q.q.q.r.8.q.8.8.8.7.4.7.3.8.4.8.q.a.s.v.N.B.I.P.-XJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXxXv.I.n.b.b.s.s.s.w.w.q.g.0.0.3.3.7.7.7.e.0.3.0.7.3.7.7.:.7.7.7.7.3.0.3.7.3.0.7.3.7.3.3.3.3.3.1.l 1.z 3.l z 4.4.x 9.9.9.y.t.v e.V.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX$X3.u 6 l 1.l =.1.1.1.1.1.;.1.7.h.a.8.x < O X $ h m m V.V.V.^.y.b b v b h h g C.>XiXsXdXiXiXiXyXyXiXdXdXlXhXC.> : , , , , , , < < < 1 , 1 < 9 , , 4 7 4 7 7.a.a.a.a.a.a.i.a.a.i.k.j.l.z.l zXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXaXl l 5 1.2.1.u 1.1.1.l =.=.l 1.5.=.c h = ; Z Z Z U U S Z A U D { | } } X.} X.} . .X.X.} } } } X.X.X.X.X.......o.o.o.o.+.o.O._ _ _ ` _ _ ) ( A = * % , k x.8.8.i.a.i.a.8.a.a.a.0.s.s.a.u mXKXKXKXKXKXKXKXKXKXKXKXKXKXKXgXv r.c.b x x x x x z z z x l l l 4.1.1.z 1.3.3.3.3.3.:.3.3.7.7.3.7.q.8.8.q.q.r.q.q.q.q.8.8.8.q.8.4.7.3.7.8.8.8.q.t.s.b.n.B.B.P.=XJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXLXmXB.H.N.b.s.s.s.s.s.w.q.e.0.0.0.3.7.7.7.7.:.7.3.7.7.7.3.0.,.7.7.7.:.7.0.7.7.3.0.3.7.3.3.3.3.3.1.1.3.1.1.z l 4.4.4.x 9.9.b 9.c.z &XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXmXt.l 6 6 1.1.1.1.1.1.1.1.1.;.1.q.a.i.q.x h 4 , 4 h 4 3 3 3 3 w 3 3 k p 4 + o j S. q 4.i.8.i.i.i.a.a.q.a.a.a.q.a.f.7.t.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVXc.9.w.9.9.9.x 4.z z 4.z 4.l z l l 1.1.l 3.1.3.3.3.z 3.e.:.7.4.4.8.7.q.q.8.q.8.q.q.q.q.q.r.8.4.8.4.4.4.3.4.8.8.q.w.h.v.n.M.K.P.;XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXBXB.H.n.b.v.s.s.s.w.q.q.g.e.0.e.7.0.7.3.7.0.3.7.7.3.0.7.0.3.3.0.3.3.7.7.7.7.7.3.3.3.3.3.3.3.3.1.3.3.l 3.l z 4.9.4.e.9.9.y.9.y.z fXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXZ.l i u 1.1.1.1.1.1.1.1.;.;.;.q.h.k.6.4.9.8.6.9.4.3.3.3.4.4.3.1.l z k 3 @ g C.4XfXpXpXkXdXyXdXiX3XdXzXmXm X + h k 3 2 7 2 2 2 8 8 2 8 2 2 8 3 5 2 7 ;.a.d.a.d.h.h.h.k.h.h.h.k.l.m.7.Y.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXA.7.1.l l 1.1.1.1.1.1.1.=.l e =.5.5.l t = ; Z Z Z U S U Z S S { { } } } } } O.O. . .X.X.X.} | } | } X.X...o.......X.o.$.O._ _ _ _ _ ' ) ( F ; * % , k 8.i.x.i.i.a.i.q.a.a.i.a.a.s.j.&.rXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXV.9.w.9.y.v 9.z z z z x l l l l 1.1.3.1.3.3.l 3.3.3.3.3.3.3.4.7.7.q.8.q.8.q.8.q.q.q.q.8.q.4.8.7.7.7.7.3.8.8.8.q.h.j.b.n.B.P.P.wXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXAXN.I.K.b.v.s.b.w.s.q.q.g.0.e.7.7.3.3.7.7.7.:.7.7.7.3.:.3.3.3.7.7.3.,.7.7.:.7.0.3.7.3.3.3.3.3.1.1.3.z 1.z z 4.4.4.x 9.e.y.t.t.z BXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX*X4.;.6 2.l 2.1.1.=.1.1.1.u ;.4.8.8.7.8.q.8.7.e.3.4.q.3.;.3.4.z z z l i # . g C.1XiXyXpXdXdXiXdXdX3XsXxXzXm o + q 2 3 2 7 2 2 2 8 8 7 2 2 7 2 4 7 7 7 3.f.d.g.d.a.d.a.h.h.k.h.h.J.n.u bXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX9X4.1.1.l 1.1.1.l &.1.1.1.l 2.=.=.5.1.t g ; Y Z Z S S U U U S ( { | | } } } } X.} } X.X.$.X.} } } } X.X.X...X.o...X.o.O.| _ | _ _ _ ) ( ( Z = & > 4 k 8.i.i.i.a.i.i.8.a.w.e.q.a.a.s.6 ZXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXC.9.9.9.e.e.x x x 3.4.z 4.l z 1.l 1.l 1.3.1.3.3.3.3.3.3.3.3.7.7.0.0.8.8.q.q.q.q.q.q.q.q.q.8.q.8.4.3.3.7.3.4.8.r.h.j.b.N.B.P.K.,XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXDXb.I.n.n.v.b.s.s.s.w.q.0.0.0.7.7.7.4.3.7.7.3.7.3.3.7.7.7.0.3.7.3.7.7.7.7.e.3.:.3.7.;.3.3.3.1.3.l 1.3.z 3.x 4.4.4.e.9.e.y.w.w.b SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVXe.7.&.r c e 5.&.1.1.l 1.1.6 2.8.8.4.7.8.4.4.4.3.4.z 3.z :.z k k l l h # . > D.4XpXpXdXgXpXpXgXpXdXfXxXhXM X + k 7 2 2 2 2 2 2 8 1 2 2 2 2 7 7 3 7 u q.h.a.a.d.a.a.k.k.k.k.h.t.J.G.z AXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXb i.&.;.1.1.1.1.1.1.1.=.1.1.=.1.1.2.h f ; C C Z Z S S U U Z S %.| | } } } } X.X.X. .X.o.X.X.X.X.X.X.X.X...o.o.o.o.O.| | { _ _ _ ) ( ( S ; * % q w 7.q.p.i.8.i.8.a.a.i.q.e.0.d.a.:.V.HXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX@Xy.9.e.y.b 9.x x 4.4.z z z l 4.3.1.z 1.3.1.1.3.1.z 3.3.3.3.7.3.4.8.q.8.8.q.q.q.q.0.q.q.0.0.0.8.7.4.7.3.3.7.q.q.s.s.v.n.M.P.B.4XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXN.n.M.v.v.v.s.w.s.w.q.e.0.0.7.7.7.7.0.7.7.7.0.3.:.7.7.3.3.:.7.0.7.7.7.7.3.3.3.3.3.3.3.3.3.1.3.1.z l 3.z 4.4.4.e.9.9.e.9.c.9.V.HXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXZ.1.=.5 r l 5.1.l l 1.1.1.6 2.4.q.8.8.q.7.4.4.4.3.3.3.3.3.3.k z 3.l q # > D.1XdXXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX1Xy.y.y.9.9.x x 3.4.4.z 3.z 3.l z 3.1.3.1.3.3.1.3.1.3.3.5.3.4.4.7.0.8.q.q.8.8.q.q.0.q.8.q.7.q.8.7.7.3.3.3.7.q.w.s.j.b.n.L.P.K.3XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXGXB.v.M.b.v.s.s.w.w.q.g.e.0.3.3.3.7.e.7.7.7.:.7.3.3.7.7.0.7.7.7.3.0.7.7.7.7.:.7.3.7.3.3.3.3.1.3.z 3.z z 3.4.4.4.9.9.9.y.t.c.e. XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXdX4.2.6 l l 5.=.1.1.l 1.u 1.6 1.8.q.q.q.8.4.4.4.4.3.3.z ;.3.i z 3.l k $ > D.>XfX1X&X&X&X&X>X&X%XyXzXzXM X + h 5 7 7 2 8 2 2 8 2 2 2 7 7 5 7 7 6 8.h.j.a.d.d.k.h.k.a.h.k.h.m.F.l pXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXfXz h.6 1.6 1.1.1.1.6 1.2.1.=.2.1.1.;.k 0 ; ; Z Z Z S U U U U U U %.| | O.} } } } } X. . .} } X.X.X.X.X.X.X.X.X.| { ) ) ) ) ) ( ( Z ; ; & @ < c 7.8.8.i.i.i.8.a.a.i.d.d.w.a.d.i.6 CXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXhXc.t.y.9.b 9.z z z 4.z x 1.x l 3.1.1.3.1.3.3.3.1.3.3.3.3.5.7.3.7.7.4.8.q.q.q.q.q.q.0.7.q.7.0.8.4.7.7.3.3.7.q.w.s.s.v.B.L.R.A.pXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXR.v.n.b.v.v.v.w.s.w.q.g.0.,.0.0.7.7.7.7.3.0.0.3.3.3.7.:.7.7.7.7.0.7.7.7.3.7.7.3.3.3.;.3.3.1.3.3.3.z 3.4.x 4.4.9.9.9.t.t.t.x 4XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXGXy.3.u i l =.1.u l 1.1.1.6 6 u 3.8.q.8.q.8.8.q.8.4.3.3.3.7.z z 3.1.k $ $ V.1XhX4X,X3X4X1X,X>X&XdXzXnXM X + q 7 2 2 2 2 8 2 2 2 7 2 7 7 7 7 6 7.h.h.a.k.f.a.h.k.a.k.a.k.l.n.h.y.SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXv q.&.=.&.1.1.1.1.1.1.=.1.1.=.1.1.:.l 0 * ; ; Z Z Z ( U U U U S ( %.| } } } } } } X. . .X.X.X. .O.X.X.$.X.} | { %.{ ( ) ( ( ( ( Z ; * & % q z 8.8.x.i.i.i.a.u.a.i.g.a.q.d.d.=.A.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXAXc.y.y.y.y.9.x x 4.4.x 3.z 1.3.l 3.3.1.3.l 1.l 3.1.3.3.3.3.3.7.7.e.8.q.4.8.8.q.q.7.0.q.0.0.7.7.4.3.3.7.7.4.q.q.s.s.v.B.L.P.B.hXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX Xv.n.v.b.v.s.s.s.w.q.0.0.7.3.3.7.3.7.7.3.7.7.:.e.3.7.7.3.7.3.7.7.7.3.:.7.3.7.3.5.3.3.3.3.1.3.1.4.l 4.x 4.9.e.e.9.t.t.t.c.x fXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX%X3.l i u =.6 1.1.1.l 1.l e u 1.7.8.q.q.8.q.8.8.8.7.7.7.7.u 3.1.3.k $ : D.>XfXiX,X1X1X1X,X>X1XfXzXzXD.o + q 7 7 7 2 2 8 7 2 2 7 7 5 7 7 7 1.i.k.h.a.a.k.a.h.k.k.h.k.l.J.l.l $XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX1Xu 5.6 1.l 1.1.1.1.=.1.=.2.2.1.1.:.1.q > * ; N Z Z Z Z ( U U U U U %.{ | } } } } } } X. .X. .X.X.$.$.O.} | { %.( { { ( ( ( ( ; ; * & # , k 8.7.u.x.u.8.i.u.i.i.i.g.0.a.l.i.l hXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXV.9.v t.e.9.x 4.x 4.z z 4.z 2.4.4.1.z 1.3.3.1.1.3.;.3.5.5.3.7.7.7.q.8.q.8.q.q.q.7.0.q.q.0.0.3.7.5.4.7.4.8.i.w.h.j.b.n.B.P.A.MXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXXXv.B.v.v.b.s.w.s.w.q.0.0.0.0.0.3.3.0.7.0.7.7.3.:.7.7.7.0.:.0.3.7.7.7.7.7.7.:.3.3.3.3.3.3.1.3.4.3.4.3.4.4.e.e.e.w.t.c.c.c.v CXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXBXt.4.i u 1.1.e 1.l 1.1.1.l 6 u 3.q.q.q.r.q.q.r.8.q.0.7.0.z z 1.5.z $ $ V.1XdXsX3X1X1X1X&X&X3XpXxXzXC.o + 3 5 7 8 2 7 7 7 2 2 3 7 2 7 7 =.i.k.k.d.a.a.f.a.h.k.k.k.k.F.Y.a.h.AXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXz.5.1.1.1.1.1.1.1.1.1.1.2.=.2.1.=.c q % % * ; ; ; Z Z Z S U U U U U ( { { | | } } } } } } } } O.} | | { { %.( ( %.( S ( ; ; ; % o . $ q c i.i.p.i.8.a.a.i.i.i.i.d.s.a.k.&.A.JXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXA.y.c.y.9.9.9.4.x 4.x 3.x 4.3.3.1.3.1.3.3.l 3.3.1.3.3.3.3.7.4.0.7.4.4.8.q.8.q.q.q.0.0.0.0.0.7.4.3.7.7.8.8.a.h.h.b.b.B.B.P.R.BXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX,Xb.v.v.v.v.b.v.w.s.s.0.0.7.e.7.e.3.0.3.3.0.3.3.:.0.7.7.0.3.7.7.7.7.7.7.7.:.7.3.3.3.3.3.3.1.3.3.4.4.3.4.9.9.9.e.w.t.c.c.c.c.VXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX X3.:.u l 1.1.1.l 1.l 6 1.6 6 1.8.q.q.h.h.a.x.q.q.8.7.7.3.3.1.3.k $ $ m *XiXsXsX1X1X1X>X1XsXfXxXmXM o O q w 2 7 2 7 7 2 2 3 7 5 7 7 e 8.k.k.k.h.k.f.a.a.d.k.k.h.l.J.m.5.=XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX,X1.7.5.1.2.2.1.1.1.1.1.1.=.1.=.e r w > # & * = ; C Z Z S S S ( U U U U ( %.{ { _ { | } } | | | | ) ( ( U ( ( ( S S S C C = % o . X , h 4.8.i.i.p.a.i.8.i.i.a.8.a.s.h.7.l sXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX Xy.t.c.9.9.x x 4.4.x 3.z 4.z 3.3.3.3.1.1.3.3.3.3.3.3.3.3.3.7.3.0.4.7.7.q.q.q.q.7.0.0.7.7.4.7.7.4.3.7.4.8.w.h.s.b.n.M.L.P. XVXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX7Xc.H.H.v.v.s.w.s.s.w.0.e.0.:.7.3.3.7.7.3.3.7.7.7.3.:.7.7.7.:.3.7.7.3.7.3.3.3.3.3.3.z 3.3.z z 3.3.3.4.4.e.9.e.y.e.w.c.c.c. XHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXZXq.p.;.h 1.1.1.1.1.6 1.1.1.1.;.2.8.x.h.a.8.a.a.a.7.7.4.3.7.z z z : % M *X7XiXsXXeXdXsXxXzX/.o O q 7 2 2 2 2 7 2 7 4 7 7 5 6 5.k.k.a.a.h.a.a.h.a.k.k.a.h.j.M.q.r.ZXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVXv >.;.=.e =.6 1.1.1.1.1.l 1.1.e e w p $ X o % * ; ; Z A A S Z S U U U U ( ( ( ( %.U { { { %.( ( U U ( ( ( S S Z Z C ; * & o X $ 5 4.r.8.8.a.i.a.8.8.8.a.a.q.a.a.z.l Z.JXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX5Xc.l.c.t.9.9.3.3.3.3.4.z 3.3.3.3.2.4.4.3.6.4.3.1.;.3.3.3.3.3.7.3.7.0.7.q.8.q.q.8.q.8.8.q.7.q.0.3.4.4.7.q.q.a.f.j.v.B.L.P..XFXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXhXc.H.v.v.b.s.s.w.q.0.0.0.0.:.7.3.3.3.7.,.3.7.7.7.0.7.7.7.3.7.7.7.5.3.5.7.5.3.3.1.3.3.3.3.4.3.z z 4.4.4.4.9.e.e.t.t.c.N.c.-XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX:X;.7.l l l l 1.l l 1.1.;.1.1.1.7.8.h.a.a.q.i.q.a.8.e.7.7.z z k 9 > M &XiXkXdXiX1X2X>XbXpXpXvXxX/.O @ 7 7 5 5 7 2 2 7 w 3 2 7 6 6.i.h.k.k.h.k.a.k.a.k.l.k.l.k.J.F.5.>XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX,X;.7.2.2.1.1.;.1.1.1.&.l 1.1.l e e p < O . . & * ; ; ; Z Z Z S S S ( ( U U U U ( ( S ( U U ( U ( U U S S S Z ; ; ; * & . . X : q l 4.r.8.8.i.u.8.8.8.q.a.8.q.a.l.8.x fXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXMXc.n.y.y.9.e.4.4.3.9.3.3.z 3.3.3.4.3.3.3.1.3.3.1.3.3.3.;.3.3.3.0.7.0.0.4.e.8.8.e.q.4.7.0.q.q.4.3.7.7.q.8.q.h.j.l.n.M.P.P.:XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXmXc.I.n.v.b.v.v.s.q.s.0.0.0.7.7.7.3.7.7.7.7.7.7.7.3.7.3.7.7.7.7.3.7.7.5.3.3.5.3.z 3.z 1.3.3.z 4.3.4.4.e.8.9.e.e.w.c.c.N.t.3XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXc.1.5.&.l u l 1.1.l 1.1.1.1.2.7.2.8.i.q.a.q.i.a.q.8.7.7.3.z i : . $ m $XyXsXdXhX7X % # O o & & & % % * * * * tXtX* * % % @ O O $ 1 c x.p.p.p.i.i.p.p.7.3.a.i.i.i.a.i.7.a.8.8.a.a.h.z.a.y.DXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXyXe.y.t.y.t.r.9.e.4.4.e.4.e.3.4.1.4.4.3.4.3.3.;.3.;.3.3.3.3.3.3.3.7.4.7.e.7.e.8.0.7.4.7.4.7.3.4.7.8.8.q.w.s.j.n.B.P.P.oXmXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX4Xs.v.b.v.s.b.s.w.w.0.0.0.3.7.3.7.0.3.3.7.7.7.7.3.7.7.3.7.7.7.:.3.3.3.;.3.3.5.3.3.3.3.z z 3.4.4.e.9.e.e.9.^.t.N.c.N.N.>XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX.Xq.3.3.u 1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.5.p.8.8.3.1.l z l u u i i 5 5 3 3 3 5 5 5 5 5 5 5 5 5 5 5 4 7 7 u 5.i.k.k.k.h.i.d.i.k.i.k.k.h.r.q.r.k.L.l.z yXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX%X4.8.1.k l 1.1.5.1.1.w w 5 5 7 2 2 w q q 5 2 2 8 , < < : $ O X X X o o o & tXtXo X X X + < w i.6.x.i.x.6.6.0.8.i.8.q.i.8.7.a.q.i.a.8.a.a.8.d.d.l.8.8.BXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXNXx N.t.w.w.e.e.w.9.4.q.3.3.z z 3.3.3.3.3.3.3.3.3.3.3.3.3.7.0.3.0.3.0.3.7.7.e.7.4.7.7.7.7.4.7.7.7.0.q.q.q.w.j.b.M.P.P.XXGXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXs.I.v.v.s.b.s.w.0.0.0.0.3.3.3.3.7.:.7.3.:.7.7.7.:.3.3.:.7.:.z 3.:.3.3.3.3.5.;.3.3.3.e.3.3.e.8.9.q.e.9.r.y.t.N.c.B.c.dXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXW.z e.1.1.u e 1.1.1.1.1.1.1.1.1.1.1.1.1.1.8.8.8.4.3.3.z l z l i u i i i 5 5 i 5 5 5 5 6 5 5 7 7 2 5 i 1.8.a.i.i.i.i.h.k.a.h.h.d.k.i.i.k.h.h.Y.F.u %XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXZ.l 6.5 1.1.6 1.1.6 e e 5 q 7 q 7 2 2 3 3 3 2 3 1 , , , < : : @ o X . tXtX X @ , c 9.4.6.8.6.6.8.6.8.8.7.8.8.8.8.i.8.8.8.a.8.i.a.q.i.i.F.h.i iXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXAXy.w.c.w.w.w.e.q.q.9.4.e.3.e.3.3.3.7.3.3.3.;.3.3.3.3.3.3.3.3.7.3.7.3.0.0.4.7.7.7.0.e.7.4.7.7.4.4.8.8.q.q.w.b.n.M.P.B.:XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXmXw.K.n.v.s.s.s.w.w.0.0.0.7.3.0.3.0.7.:.7.3.0.7.3.3.,.7.:.7.7.3.3.z 3.3.3.3.5.3.3.3.3.3.3.4.e.4.9.r.e.9.r.y.t.c.B.c.A.BXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXV.l 8.1.u 1.1.1.1.1.1.1.1.7.1.1.1.2.1.1.5.6.4.1.l l z l z l u l u u i w 5 6 5 5 6 7 7 5 5 5 6 6 3.4.8.q.a.i.i.x.a.h.a.h.a.h.h.a.a.F.k.k.J.F.l A.JXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXBXy.4.p.1.6 l 1.=.=.w w 5 7 q 7 3 3 3 3 5 3 5 q q q 2 1 8 , , < < : @ + + tXdX: q b 4.2.7.8.8.6.6.6.6.8.i.7.i.8.8.8.8.q.7.8.8.8.q.8.q.q.k.F.k.l >XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXGXV.w.t.t.w.w.e.q.9.q.4.4.e.3.3.7.7.3.3.3.3.5.3.3.3.3.3.3.7.3.3.7.3.7.3.7.7.7.0.7.7.7.7.0.3.7.7.8.8.8.q.w.h.b.n.B.P.P.4XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVXb.n.n.v.b.s.s.s.w.g.0.e.,.3.3.7.7.7.3.3.7.3.0.3.3.3.3.7.7.3.;.3.3.3.3.3.;.3.3.7.3.3.z 3.4.4.8.q.e.e.w.t.t.b.N.A.c.A.SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXZ.5 7.3.;.u 1.1.1.1.1.1.2.7.1.1.1.1.=.=.1.1.l 5 i l l u l l i l i k l u l l u u 6 6 6 l 1.1.7.8.a.8.8.8.h.k.a.a.i.k.i.k.k.h.q.h.F.F.Y.z.l A.HXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXzXy.6.i.1.6 l l e e e w w 7 q q w q 5 q w q w w w q q q 1 1 , , , 1 1 q tXdX4.z 4.6.p.5.6.8.6.8.6.8.8.8.8.7.8.8.8.a.8.a.a.7.a.i.a.8.h.m.k.e W.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX|.w.t.t.w.w.w.q.q.9.q.4.3.e.e.3.3.3.3.3.3.3.3.:.3.3.3.3.7.7.3.3.0.3.0.7.e.7.7.e.7.4.0.0.7.3.e.8.8.q.q.a.h.b.N.B.P.P.gXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFXB.b.n.b.b.s.s.w.w.0.0.0.7.3.3.3.0.7.7.3.7.7.7.,.3.7.:.7.3.:.3.3.3.3.3.3.;.3.3.3.3.3.3.3.4.4.e.q.r.e.w.w.c.n.N.M.c.|.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXV.u q.1.1.;.1.1.1.1.1.1.1.1.1.1.1.1.1.1.l 6 5 5 5 u 5 u e 5 e l u u u l u 1.1.1.1.5.2.7.8.8.8.8.a.i.i.a.a.a.a.k.a.a.d.k.q.h.h.k.L.k.z A.SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXfXz.k 1.l 6 l 7 e w 5 7 q 2 3 3 k 5 q w q 5 q q e e w w w 2 1 2 3 c l tXtX6.6.6.5.5.5.5.7.7.7.8.8.8.7.8.8.8.8.8.q.8.a.8.a.q.q.a.a.h.r.i S.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX4Xe.t.t.t.w.w.e.q.q.9.4.4.3.3.7.3.3.3.5.3.3.3.3.3.3.3.3.3.3.3.0.3.7.3.0.0.0.4.0.7.7.7.4.0.3.0.8.q.q.r.s.s.b.n.B.P.R.mXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXoXv.n.n.s.b.b.s.w.0.0.7.7.e.7.3.7.3.:.7.7.7.3.3.7.:.3.3.7.7.3.3.3.;.3.3.3.3.3.3.3.3.3.z 4.e.4.e.e.w.w.c.c.B.B.M.c.*XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXDXZ.;.8.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.l 5 5 3 i 5 5 5 w k e k u l l 1.1.1.1.8.8.6.p.i.i.8.u.i.a.a.a.a.i.i.a.i.a.h.a.h.a.h.h.J.z.9. XSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXjXc.3.8.1.k w e w w w 7 2 3 3 5 q w 3 3 2 2 2 q w w 5 w w 5 5 5 6 e tXtX6.5.5.5.7.8.8.7.7.7.8.8.8.8.8.8.8.8.8.8.8.8.8.a.a.h.h.h.j.z S.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXjX9.c.t.t.w.w.r.q.q.9.4.4.4.3.3.7.3.3.3.;.3.3.3.3.3.3.3.3.3.3.3.0.3.0.0.3.7.4.4.4.0.4.7.3.3.7.8.q.q.q.w.b.n.N.B.P.oXFXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX;Xv.n.v.b.v.s.w.0.g.0.0.7.7.3.7.0.:.7.7.7.7.7.3.3.7.7.3.7.3.3.3.3.3.3.3.3.3.:.3.3.z 3.z e.e.4.q.e.r.w.t.c.N.M.B.V.8XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXGXT.1.8.5.1.l 1.1.1.2.1.1.1.1.1.1.2.2.l e 5 k w w e l l l e l ;.1.1.7.7.7.i.6.8.8.i.i.8.i.g.i.i.a.a.a.q.a.a.h.a.a.a.d.k.z.J.F.3.A.SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXxXZ.6.8.5 q e e w w 2 3 3 3 3 q k w q 2 3 7 q q 2 5 w 5 e l l 1.1.tXtX7.6.7.7.7.3.5.7.7.7.7.7.8.8.8.8.8.8.8.i.8.8.8.a.a.a.h.a.q.-XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXAXw.b.t.w.w.w.e.q.q.4.e.4.4.4.7.3.3.3.3.3.;.7.3.3.3.3.3.7.7.e.7.0.3.3.3.0.0.0.7.0.0.0.0.7.7.0.q.q.q.w.s.j.v.B.K.P.XXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXpXe.n.v.s.s.s.s.s.w.0.e.,.7.7.3.7.7.7.3.:.3.3.3.3.3.3.3.3.3.3.3.3.;.;.3.3.3.3.3.3.3.4.4.3.4.q.e.e.t.w.c.b.N.B.c.A.SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX Xq.7.4.l l 1.1.l l l l 1.6.5.l 2.l l ;.l l l l l l l l l 1.5.6.7.8.8.7.8.8.8.8.8.8.8.a.a.8.8.i.8.a.a.a.8.q.a.d.G.F.J.a.8.-XJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXBXC.4.u.*.e e w q q w w k q q k w w w 3 7 5 5 7 5 5 u u u l 1.3.tXtX6.6.6.6.6.6.8.7.7.8.8.8.8.i.a.8.p.a.8.9.9.i.a.a.z.a.7.a.5XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXB.w.s.b.c.9.h.r.q.q.7.0.0.e.7.7.0.3.0.3.3.7.7.7.3.7.3.:.3.3.3.3.3.0.3.3.3.7.7.3.3.7.4.7.4.3.7.7.q.a.k.b.b.B.R.R.XXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXfXc.n.n.b.s.b.s.w.w.0.7.7.3.3.3.7.3.:.7.3.3.:.3.7.3.3.7.3.3.3.;.3.3.3.3.5.5.3.3.3.e.3.4.4.4.e.e.w.w.w.c.N.B.N.c.C.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXeX8.5.u.;.z z l ;.l 1.1.1.1.l 1.l 6 l 1.6 1.l 1.l 1.1.2.1.5.7.8.8.6.8.8.7.8.8.8.8.8.8.8.8.8.8.a.h.i.i.h.k.k.d.F.F.4.t.dXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSX-X4.4.6.6 7 l w w q 3 5 3 3 3 3 3 3 3 i 5 5 5 5 l u l l 3.7.tXtX6.6.6.6.7.6.7.7.8.8.8.8.8.7.1.i.p.i.i.q.q.h.u.d.k.1.Z.xXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX Xe.b.t.t.w.h.e.q.0.0.4.7.4.3.3.3.7.3.7.3.7.7.e.:.3.e.:.3.3.:.e.7.3.7.3.e.7.3.7.7.0.4.3.7.0.0.0.0.g.l.b.c.B.P.P.yXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCXB.v.n.b.s.s.s.w.s.w.0.0.3.3.7.7.7.0.3.7.:.7.3.3.3.3.3.3.3.3.3.3.;.3.3.3.3.3.3.3.3.4.4.4.4.q.e.w.w.w.w.c.M.N.c.%XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXxXU.&.7.e.u 1.1.1.5.3.;.;.1.1.1.1.l l l 1.2.1.1.1.1.1.1.5.7.6.8.6.8.8.8.8.8.7.8.a.8.a.8.h.a.i.a.8.i.k.G.F.J.k.2.A.mXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXgXc.7.7.5.&.5 k k w 5 w 5 5 5 5 5 5 5 i w l l l l l 1.3.1.tXtX6.6.6.7.6.6.8.7.7.8.8.7.8.8.q.7.8.i.i.i.h.s.F.p.5.-XAXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXpXz n.b.e.w.h.q.q.0.e.0.0.e.0.0.0.3.4.3.7.3.7.7.3.3.:.3.3.3.3.7.7.3.7.3.3.7.0.3.3.7.7.7.3.0.0.0.w.s.l.b.b.L.R.R.NXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFXR.v.v.n.v.s.s.s.0.0.0.0.7.7.7.7.7.3.0.3.7.7.3.3.3.3.5.7.3.3.3.3.3.3.3.3.:.3.3.3.3.4.4.4.e.9.q.w.w.w.c.c.B.A.c.gXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXW.3.7.7.5.5.5.=.1.l 3.1.l 1.l 1.1.1.1.1.1.1.2.5.1.6.5.7.6.6.7.6.7.7.8.8.8.8.8.a.a.8.8.i.8.h.a.a.F.F.k.2.y.1XHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCX X9.u 5.1.l 5 5 k 5 5 5 k l i i 5 i l e u l 1.1.1.1.5.tXtX6.6.7.7.6.8.8.8.7.8.8.8.8.7.4.q.8.p.k.k.k.a.;.j.pXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXBXz v.b.w.t.r.w.q.q.0.4.4.0.7.4.0.0.7.0.7.7.7.3.3.7.3.3.3.7.3.3.3.3.7.e.7.7.3.7.3.4.7.4.7.0.0.0.w.s.l.b.B.P.R.A.DXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXXXv.v.v.v.s.s.w.s.0.0.0.4.0.4.7.7.0.3.7.7.7.3.3.3.3.3.3.3.7.3.3.;.3.3.3.7.3.3.4.3.4.4.8.9.q.e.w.w.c.c.b.N.B.c.SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXdXl.i 3.5.5.5.1.l l 1.1.1.1.l 1.l 1.1.1.1.1.6.6.6.7.6.7.6.7.5.8.7.8.7.7.8.8.i.8.8.8.h.h.h.h.z.h.2.c /.BXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXhXD.i u 7.u u 5 i 5 5 5 k k 5 5 l l l u 1.1.1.5.5.8.tXtX7.7.6.7.8.8.8.8.p.8.8.i.8.i.8.8.i.k.k.r.1.i.-XSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVXc.w.v.w.t.w.a.w.0.0.0.0.e.q.0.0.7.7.7.4.4.7.3.3.e.3.e.:.3.e.7.3.3.e.:.3.7.0.3.0.0.7.4.7.0.0.0.s.s.s.N.B.P.R. XJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXyXv.n.s.v.j.j.s.w.g.0.0.7.3.7.e.7.7.7.7.7.7.3.3.3.3.7.3.3.3.3.3.3.3.;.3.5.3.3.e.3.4.3.0.0.e.e.j.t.j.c.N.c.c.S.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSX%Xv e.;.1.5.u z 3.1.1.1.1.1.1.1.1.1.5.6.1.1.5.5.1.1.6.5.6.7.7.8.8.7.8.8.8.q.x.h.h.k.k.h.3.z S.zXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXpXZ.4.1.l l l e u u i w l l l l l l 1.1.7.5.7.6.tXtX7.7.8.7.8.7.8.7.8.8.a.8.a.h.a.8.z.h.i 9.W.ZXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX Xe.v.b.e.w.w.w.q.0.0.0.0.8.q.8.8.4.0.0.4.7.7.3.3.3.0.:.7.3.3.3.7.7.7.7.3.7.3.4.e.0.4.0.0.q.g.s.s.v.v.B.P.R.,XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXfXn.n.b.n.b.s.w.s.q.0.0.e.0.4.7.0.7.7.7.3.3.3.3.3.3.3.3.3.5.3.3.;.3.3.3.7.3.7.7.4.4.4.q.e.9.w.t.j.j.c.z.c.c.&XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXAX=Xw.5.7.q.4.1.3.3.1.1.1.1.1.1.5.5.5.6.6.1.6.1.5.1.1.5.6.7.7.8.8.8.8.q.h.h.k.k.a.7.8..XZXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXxXW.9.4.4.4.l l l l k e l l l 2.1.3.1.5.7.7.tXtX7.7.7.8.7.7.7.7.8.8.a.a.a.h.k.x.1.q.-XZXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXyX0.v.b.e.t.w.q.q.0.0.e.q.q.7.e.8.q.7.0.7.7.7.0.3.3.3.3.3.3.3.7.7.7.7.e.3.3.7.7.7.7.7.4.0.q.s.s.s.v.v.B.I.R.pXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXB.v.v.b.h.f.g.s.q.0.0.7.0.3.7.7.3.,.:.3.3.7.0.7.7.7.:.3.;.3.3.3.3.3.3.3.3.e.3.4.4.e.4.e.w.w.w.w.c.w.N.N.c.BXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXAX%Xy.z 7.u.u.u.7.:.:.1.1.1.7.5.5.7.7.1.1.5.1.5.1.1.1.7.3.7.a.a.a.G.G.a.q.4.y.,XSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXBX Xb 4.7.u.>.:.;.l 1.u l z 1.5.7.4.2.2.tXtX3.3.7.7.8.i.i.a.a.s.d.d.i.i.x.Z.1XSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXBXy.w.v.t.9.w.w.q.0.0.0.7.0.0.0.0.0.4.7.7.e.e.7.7.0.7.3.7.7.3.7.e.7.3.3.7.7.7.0.7.4.4.0.0.q.q.w.s.v.B.B.oXoXZXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXoXv.v.b.j.f.g.s.q.0.0.0.0.7.3.3.3.3.3.3.:.7.7.7.7.7.3.7.7.3.3.3.3.3.3.3.3.3.3.4.8.q.4.4.9.e.w.c.w.c.N.N.V.FXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXGXgXA.t.9.z 1.7.i.u.5.7.7.u.5.5.5.6.1.1.6.1.1.2.7.i.a.i.i.7.7.3.3.y.A.sXJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXDXiXA.w.0.7.3.7.7.5.5.;.3.7.8.8.8.x.tXtX7.i.i.i.i.i.i.a.a.q.4.9.c.A.fXDXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFXA.w.b.s.t.w.w.q.0.0.0.g.0.q.q.7.0.0.0.4.7.e.3.0.0.4.3.3.e.3.3.:.3.3.7.3.7.e.7.7.7.e.0.0.e.q.w.b.N.B.B.oXoXDXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX:Xv.n.b.b.v.f.s.s.0.0.0.3.7.3.3.7.3.3.,.3.0.7.7.7.7.3.3.3.3.3.3.3.3.3.4.z 4.3.4.4.q.4.9.q.r.t.t.t.b.c.c. XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXAX7XS.V.r.8.6.p.5.3.7.a.a.i.7.7.7.7.5.7.5.6.6.7.1.3.t.n.S.pXGXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXAX*XA.Z.y.2.1.6.p.7.7.7.7.8.7.tXtXu.i.i.8.7.7.q.r.z.Z./.7XAXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX&Xw.b.s.b.w.w.w.q.0.7.g.0.7.0.0.0.0.0.4.0.4.7.4.7.7.7.7.3.7.7.7.3.0.3.7.3.0.7.0.7.4.0.0.q.w.s.b.m.K.P.P.&XPXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXgXv.n.b.b.v.f.s.s.0.0.7.0.7.7.7.7.7.3.3.3.7.7.3.3.7.7.:.7.7.3.7.4.3.3.3.4.3.4.4.4.9.q.9.r.e.w.c.c.N.B.c.fXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXBX9X/.W.Z.c.e.9.z i :.:.;.:.7.i.i.z.Z.R.%X3XZXJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXzX1XW.A.Z.z.a.i.i.8.8.tXtXq.r.t.c.A.|.-XiXZXJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXjXc.b.b.j.t.w.w.w.0.q.q.q.q.q.0.0.0.0.8.q.8.0.q.0.e.7.4.3.7.3.e.7.3.0.3.4.0.4.7.q.e.q.q.w.s.s.n.N.M.oXB.4XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCXB.v.N.b.v.v.g.s.0.0.0.0.7.4.4.3.e.3.3.:.0.0.7.7.7.7.7.3.3.7.3.3.7.3.3.4.3.3.9.8.4.q.9.e.w.w.c.c.c.N.c.FXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXAXBXjX7X6X4XXe.P.b.B.v.v.M.v.s.v.b.j.s.w.s.w.w.w.w.w.w.w.b.t.j.m.n.n.B.B.P.P.R.8XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFXB.q.H.v.l.j.s.s.w.q.e.7.0.7.7.3.3.3.3.3.3.l 1.4.1.8.3.q.t.w.w.w.A.SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXLXFX Xb.L.B.B.B.B.v.v.b.b.b.b.j.b.w.b.b.s.s.s.s.b.b.b.v.I.P.v.B.P.B.tXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXAXN.s.n.f.l.f.w.w.w.0.0.7.4.4.3.3.3.l 4.l 3.l 4.4.e.4.q.z.j.y.c.MXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKX KXKXKX KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXGXA.v.B.P.v.v.B.B.v.v.b.b.v.b.b.v.b.j.b.b.b.b.b.N.B.n.P.Q.P.B.4XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXAXN.h.l.l.f.q.0.0.w.0.0.0.3.3.3.4.l 1.3.1.4.4.4.3.w.h.r.x V.mXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKX KXKXKX KXKX KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXW.N.v.P.B.v.v.b.N.n.N.n.b.b.v.N.b.b.n.n.n.N.B.B.P.R.P.R.gXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSX Xb.t.w.j.j.w.w.0.0.7.7.4.5.4.3.3.1.3.4.4.4.e.w.9.z D.CXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKX KXKXKXKXKX KXKX KXKXKX KX KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXGX>Xc.N.M.B.B.n.M.n.B.n.n.n.n.v.n.n.N.M.B.P.B.B.P.R. XmXLXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFX:XB.e.t.j.a.a.w.q.0.0.7.7.8.3.3.4.3.4.8.8.w.w.v %XHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKX KXKXKX KXKXKXKXKXKXKX KXKX KX KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXhXR.n.R.N.B.M.M.M.L.M.M.M.M.M.M.M.B.P.P.P.R.R.4XDXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXxX Xt.e.a.f.s.s.q.0.7.7.7.8.5.7.8.8.4.z 9.A.xXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKX KXKX KXKXKXKX KXKX KXKXKXKX KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXGXyXT.B.N.B.B.L.L.I.P.P.P.P.P.P.P.P.B.A.XXmXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXfXE.b.7.7.7.u.a.d.a.q.7.:.&.6 l t.E.8XHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKX KXKX KXKXKX KXKX KXKX KXKXKXKX KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSX4XoXB.N.N.L.P.P.I.P.P.L.B.B.oX1XMXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXmX1X XZ.e.c b x x b y.S.%X6XCXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKX KXKXKX KXKX KXKXKX KXKX KXKX KXKXKXKX KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFXNXpX&XoXA.A.A.A. XXX4XmXDXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXHXCXBXBXBXMXCXVXHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKX KXKXKXKX KXKX KXKX KXKXKXKXKX KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFXSXVXSXSXFXPXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", -"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX" -}; +/* XPM */ +static const char *ConfigBox_WxStaticBitmap1_XPM[]={ +/* ConfigBox_WxStaticBitmap1 */ +"421 304 256 2", +" c black", +". c #04040B", +"X c #090916", +"o c #141217", +"O c #181828", +"+ c #15152D", +"@ c #271B2F", +"# c #162730", +"$ c #272738", +"% c #312B33", +"& c #251A19", +"* c #50312F", +"= c #6D3734", +"- c #531A34", +"; c #744736", +": c #2A2846", +"> c #383847", +", c #38355A", +"< c #312E51", +"1 c #3B3565", +"2 c #3C366A", +"3 c #3C396C", +"4 c #383866", +"5 c #3D3B73", +"6 c #3D3D7B", +"7 c #393773", +"8 c #333165", +"9 c #1B2543", +"0 c #4A354F", +"q c #423A69", +"w c #413D74", +"e c #423E7B", +"r c #4A3D79", +"t c #54386A", +"y c #6D2A49", +"u c #3E427B", +"i c #3D4376", +"p c #36486C", +"a c #01786A", +"s c #097773", +"d c #1C5956", +"f c #484858", +"g c #4D4C56", +"h c #474669", +"j c #565768", +"k c #434275", +"l c #43437D", +"z c #45497D", +"x c #4A4C7D", +"c c #494678", +"v c #585977", +"b c #4E5175", +"n c #576771", +"m c #666779", +"M c #6C6D77", +"N c #6A535C", +"B c #0E463B", +"V c #94273C", +"C c #8D5237", +"Z c #996738", +"A c #A56B37", +"S c #A97439", +"D c #B67937", +"F c #B0722C", +"G c #A25D30", +"H c #B22C4B", +"J c #912C4B", +"K c #C6264B", +"L c #C93859", +"P c #CD2D54", +"I c #CF315A", +"U c #AC7743", +"Y c #925845", +"T c #CF4760", +"R c #C36636", +"E c #018B7B", +"W c #028577", +"Q c #01927D", +"! c #088272", +"~ c #34857B", +"^ c #04A17D", +"/ c #42857D", +"( c #B98336", +") c #CE9130", +"_ c #DBA62E", +"` c #E9B22D", +"' c #E1A227", +"] c #F6CA34", +"[ c #FCE43E", +"{ c #CC9447", +"} c #EDB74B", +"| c #DBA84F", +" . c #F7C749", +".. c #FCD64A", +"X. c #F9CA55", +"o. c #FDD955", +"O. c #ECC44C", +"+. c #FDE358", +"@. c #FDE14A", +"#. c #FDE96E", +"$. c #F8D569", +"%. c #BD874A", +"&. c #3D3D84", +"*. c #3D3892", +"=. c #433E84", +"-. c #483D99", +";. c #3E4383", +":. c #3D478A", +">. c #3E4993", +",. c #3C548E", +"<. c #2F7F81", +"1. c #454585", +"2. c #494484", +"3. c #454985", +"4. c #494C84", +"5. c #454689", +"6. c #49468A", +"7. c #464B8A", +"8. c #494C8C", +"9. c #4C5284", +"0. c #47518C", +"q. c #4A538D", +"w. c #4D598D", +"e. c #485586", +"r. c #52548C", +"t. c #535B8C", +"y. c #565987", +"u. c #444B92", +"i. c #4B4E92", +"p. c #454794", +"a. c #4C5394", +"s. c #4D5A94", +"d. c #4E5599", +"f. c #4E5A99", +"g. c #455495", +"h. c #515594", +"j. c #525C94", +"k. c #51559A", +"l. c #525C9B", +"z. c #5A5D97", +"x. c #524B8D", +"c. c #58628C", +"v. c #4E6298", +"b. c #536295", +"n. c #54639B", +"m. c #5B649C", +"M. c #5B6A9D", +"N. c #586797", +"B. c #586F9A", +"V. c #686987", +"C. c #75768A", +"Z. c #64699A", +"A. c #69739B", +"S. c #787997", +"D. c #706F88", +"F. c #545CA2", +"G. c #4C58A3", +"H. c #5364A1", +"J. c #5C65A2", +"K. c #5C6BA3", +"L. c #576AA6", +"P. c #5C72A8", +"I. c #536AA8", +"U. c #636CA3", +"Y. c #656BA7", +"T. c #6B74AB", +"R. c #6774A7", +"E. c #737BAC", +"W. c #767AA6", +"Q. c #6A79B2", +"!. c #747CB3", +"~. c #6E6FAE", +"^. c #615E8D", +"/. c #827D95", +"(. c #E07A84", +"). c #019482", +"_. c #039986", +"`. c #0C8F87", +"'. c #398A84", +"]. c #30928B", +"[. c #03A593", +"{. c #0BABA7", +"}. c #458988", +"|. c #7E8197", +" X c #7983AA", +".X c #7B84B4", +"XX c #7986B7", +"oX c #6D85AE", +"OX c #55B0B5", +"+X c #7D88C1", +"@X c #85859A", +"#X c #8D9098", +"$X c #8C8DAB", +"%X c #8688A7", +"&X c #8C91AC", +"*X c #9595AB", +"=X c #838CBB", +"-X c #868BB5", +";X c #8B93BC", +":X c #8992B7", +">X c #9394B3", +",X c #959ABB", +" f f f f g g M |.7XVXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKX KXKXKXKXKX", +"KXKXKXKXKX KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVXMX#XC.m j f f g h f f f f f f f > > > > > > > > f j |.MXFXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKX KXKXKXKXKX", +"KXKXKXKXKX KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVXMX|.n j j g f f f g j f g f f f > > > % > $ $ $ $ $ $ % > g M 8XVXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKXKX", +"KXKXKXKXKX KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXPXjX#Xm j j j g h g h g j g f f > > % > $ $ # # # @ # O O # $ $ $ > f M 8XHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSX5XM j j j g g j g g g g f > > > $ $ # O O O O O O o + + O X O O O # : > j #XVXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXBX|.M j j g j j j j g f > > $ % $ $ # @ # O # O O # # O o X + X o + X + # $ > > M 8XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXkXtXtXtXtXtXtXtXtXtXtX", +"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHX*XD.j j j j j j j j f > > % % $ $ $ : : > % > > > : $ : $ $ # O O + X X o X O # % f g 5XSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXkXtXtXtXtXtXtXtXtXtXtX", +"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXjX#XM m j j j j j j g > > > $ % % f f j m M C.|.@XM M M M j g f % $ $ # + O + X o + O $ > f #XHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXyXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXjX@Xm j m n j j j g f > % $ $ > j C.5XCXVXHXKXKXKXKXJXJXHXFXCX8X*XC.j > > $ # + o X O o O $ > g #XFXKXKXKXKXKXKXKXKXKXKXKXKXKXyXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXMX|.n m m j n n j j g > % @ % j #XVXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXCX5XM g % % # o O X o O + > g #XHXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCX@Xm n m v j n j j f > % % j 5XVXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVX5XM f % $ # O O X + $ % j 5XKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCX@Xm m M j m m j g f $ % g *XFXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCX*Xj > > # O O X O # % n 8XKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFX|.m M M m m m v h f > > n MXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXjXM f > # + O o O % > M CXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVX#Xm n D.M m V.n j f $ > @XCXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX#Xj > $ + O O O % g S.VXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX*XM m D.D.m V.V.v f $ f #XVXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX#Xg > # O O O $ > j *XHXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCXn m m D.C.D.m j g > > #XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX*Xj > $ # o O $ > m 8XKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVXM n M M m C.D.n f % > #XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX5Xg > $ O o O % g C.BXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX@Xj M C.C.D.D.j g > % #XHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX#Xg > $ o o $ % g 5XKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX8Xj j M D.C.C.m j > % C.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX@Xf % @ o O % f M VXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVXM j M M C.D.D.j g $ j VXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVXm > $ O o O > g #XKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX#Xj n D.C.S.C.m j > g BXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX8Xj > O O O % g M CXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXMXm j M D.S.S.V.j f > 5XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVX|.f # O O $ > g *XKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX@Xj m M C.|.S.n > $ M KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCXj % $ O O > f M VXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKX KXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX8Xm j M D.C.|.D.j > f CXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX#Xf $ O O % f j 5XKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKX KXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFXM j n M C.S.C.n f % 5XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVXj > $ O % > g C.VXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKX KXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXeXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX8Xj j n D.|.|.m j % g HXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX@X% # O @ % g n CXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXIXC.j n M D.C.C.n f % *XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCXf % O O $ > j 5XKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KX KXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCXj j m D.D.C.M j > g CXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXM % O O # % g M VXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKX KXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX*Xj n M C.C.C.n f $ #XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX*X> $ O O % g M MXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKX KXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXJXKXKXKXKXKXKXKXJXCXC.j m D.C.C.M j > > CXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCXf % O O % f j 5XKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXFXHXHXHXFXFXFXJXJXFXKXKXKXCXCXBXjXgXaX7XeX>X$XS.j n M C.C.C.M j > f #X8X8XjXjXmXBXAXAXVXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXm % $ O % f g #XKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXAXZXBXmXhXgXpXdXtX $ # $ > g Y FXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXtXtXtXtXtXeXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFXBXmXzXfXpXiX4X3XyX,XX,XeX>X;X;X,X;XeXwX,X;XeXeX,X;X-X XE.E.W.U.z.i.5.6 6 u l i 5 1 h j j m C.S.S.M g % < p i i 5 i u 3.w.Z.R.E. X-X=X;X=X=X=XrX;X:X-X-X;X;XwXwXeXeXeX>XeXiXlXmXAXHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXMXj % # O % f j 8XKXyXdXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXSXAXhXaXiX , h z x 9.c.N.Z.T.oX X.X:X;X;X:X;XrXrXwXrXwXwX=X=X;X;X=X;X;X;XrXwXwXeXeXyXyXgXMXCXFXHXHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVXn > $ O % > j 5XKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXFXCXxXgXyXyX:X,XeXeXeXwX,X;X;X;X;X,X,XwXeX,X,X;X;X;XeX,X,X;X:X:X:X;XwXwXwXrXwX;X;X;X-X.X.X.X.X X X XW.A.A.A.A.A.M.c.N.N.Z.A. XXXXX.X;X;X:X:X:X:X:X:X;X;X;X;XrXwX;XwXwX;X:X=X-X:X;X-X-X.X-X.X.X-X-X:X,X4X4X3XsXmXAXAXSXSXSXKXKXKXKXKXKXKXKXHX|.> $ O # > j #XKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXSXBXBXaX3X3X3XyX:X:X,X,X;X:X;X,XeX,XeX,XeXeX;X;X;X;X;X-X-X-X;X-X;X:X:X:X-X-X:X:X,X,X;X,XeXeXrXwXwXrXeXrXwX;X=XE.U.Z.M.Z.Z.M.Z.Z.A.oXXX;X=X:X=X=XwX=X;XwXwX;XwXwX;X;X:X:X:X;X;X;X;X:X=X-X.X-X-X-X=X-X-X:X=XXXXX=XXX=X=XwX>X j M VXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXCXjXjXpXiXyX,X;X-X-X-XrX;XwXwX:X-X-X=X=X=X=X-X-X:X:X:X:X-X;XrX=X=X=X=X.X!.Q.T.T.R.Y.K.K.m.n.n.h.f.j.s.s.w.w.t.j.n.n.n.n.l.n.n.K.U.K.K.K.K.K.K.U.N.B.Z.U.M.M.M.M.K.K.K.Z.M.U.Z.U.Z.U.R.T.T.E.W.E..X.X.X-X-X-X=X-X=X=X.X=X!..X.X.X X X XXX.X.XoX!.E.oX X X-X:X-X.X XA.y.h , : > g M CXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXAXBXzXsXpXdXyX,X;X:X=X=XrX=X=X-X=X=X=X;XXX.X=XrXrXXX=X=XXX.XE.E.T.U.M.m.N.j.t.w.w.a.s.g.s.a.f.f.n.n.H.K.K.Y.Q.T.T.E.E..XXXXX+XXX=X=X+X+X=XrXwX+X=X+X=X=XXXXXXXXX.X X.X.XoX XE.R.T.R.R.R.T.R.Y.Y.U.U.N.Z.Z.Z.Z.Z.A.T.Y.T.W.!.!..XE. X.X-X.X X XXXXXXXXXoXQ.T.E.T.T.R.T.T.R.A.Z.A.V.c.v v D.jXdXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXSXzXxXfXdXbXwX-X=X-X=X=X.X.X=X-X-X-X-X:XXX:XXXXX.X.XoXT.T.U.n.n.j.r.q.e.q.e.s.j.n.m.M.U.R.T.E..XXXXX=XwXwXeXyXyXuXuXuXuXuXuXlXkXkXlXuXlXlXlXlXkXlXlXlXlXvXvXlXNXvXvXvXNXxXvXlXlXlXkXtXkXdXyXyXyXeXwX:X-X=X.X!.E.T.R.A.Z.U.U.U.U.Z.U.U.U.R.R.T.E.E.E. X XE.E.E.E.E.!.T.T.T.T.U.P.U.B.R.R.R.W. X%XcXdXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXIXVXVXCXCXBXBXBXCXCXVXSXHXHXJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXAXzXaXiXdX>X-X-X-XrXrXrX-X=X-X.X=X;X=X-XXX.X XW.A.Z.M.b.t.w.q.q.q.w.s.b.m.U.R.T.!.XXXX+XrXrXwXwXwXyXyXyXeXeXwXeXeX;XwX;XwX=XwX=XXXXXXX=XXXXX-X-XXX=X.X=X=X=X:X:X;X;XwXwXeXyXtXtXkXlXlXlXkXkXlXlXlXxXxXvXNXxXlXlXvXvXkXtXyXyXeXrX=XXX.XE.T.T.U.P.M.M.K.K.K.Z.R.R.E.E.E.T.E.T.E.T.U.K.K.R.M.P.M.M.R.T.E.-XtXtXBXJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXFXSXVXVXSXVXVXVXVXSXFXHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXBXnXnXnXnXjXcXcXjXnXjXjXnXnXnXBXBXVXSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXFXZXxXyXyX,X;X-X=X=X=X=X-X-X=X.X=X=X!.!.!.E.T.U.Z.n.j.w.q.w.w.j.l.J.Y.T.E.oXoXXXXXwXwXrX;X=X=XXX.X.XXX!.Q.T.R.U.K.J.n.H.l.l.f.a.a.s.a.s.a.s.a.s.q.a.q.q.q.0.8.8.q.q.a.s.a.a.s.j.j.k.k.k.z.m.m.n.n.m.J.Y.R.E.E..XXXrXwXwXyXyXkXlXlXlXxXvXvXlXlXkXyXeX:X:X.X X!.T.U.K.Z.Z.m.M.M.Z.M.A.U.R.U.U.U.U.Y.U.T.T.R.T.T.E.tXtX,X,XpXmXCXHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXSXVXBXBXBXBXnXBXnXBXBXnXBXVXCXVXSXHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXCXnXjXcXcXcX9X9X9X9X7X9XiX7X7X8X8XcXcXcXjXBXVXSXHXHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFXAXzXgX6X,X>X-X-X-X=X.X=X=X=X.X.X!.E.E.T.R.Z.j.w.e.w.w.q.s.b.U.Y.Q.!.!.XX+X+XXXXXoX!.E.T.R.P.M.N.z.j.r.w.q.q.7.7.7.3.3.3.;.3.;.;.;.;.;.3.3.;.;.;.;.;.;.3.;.1.;.;.1.;.;.;.1.;.;.3.3.3.;.3.;.;.u u ;.l u u ;.;.;.;.u u :.3.4.w.s.h.j.m.U.Q.!.!.wXwXeXuXlXvXvXvXvXxXlXkXyX,XwX=X.XE.oXE.A.Z.M.M.M.J.J.J.J.Y.Y.R.R.T.E.E.!.tXtXoXE. X.X2X9XhXBXSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFXVXBXnXjXnXjXjXjXcXcXaXcXcXhXcXhXzXzXnXBXSXHXHXJXHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFXCXnXcXcX8X7X9X9X9X9X9X9X9X9X9X9X9X9X9X9X7X7X7X8XjXjXBXSXFXHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXAXmXfXiXX1X9X1X1X9X1X9X9X9X9X1X9X9XbX9X6X6X6X7XcXjXBXVXFXHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXSXBXsXeX>X-X-X=X-X.X=X=X=XXX!.Q.T.M.m.h.w.e.w.h.j.n.m.Y.T.Q.!.T.T.T.R.K.n.n.j.h.q.7.7.7.8.7.5.5.5.:.:.5.5.5.5.5.5.5.5.5.:.:.5.5.5.5.5.1.1.1.1.3.1.1.1.1.1.3.;.1.1.3.2.7.1.1.1.1.1.5.1.1.1.1.1.1.1.1.1.5.5.6.6.5.5.5.5.5.5.5.5.5.;.5.5.5.5.5.3.5.1.1.1.1.;.1.1.;.;.;.1.u.i.h.z.Y.E.!.wXeXkXlXvXNXNXNXNXNXNXlXyX:X XA.A.B.M.Z.U.K.U.tXtXQ.!.!.XX!..X.X X X.X-XbXhXAXJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFXCXjXgXcXgXpXdXdXbXiX9XbX9XeXbXeXbXbXbXdXdXbXbXdXsXsXcXjXBXSXDXHXHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFXnX8X7X9X9X9X>X>X1X1X1X1X1X>X1X1X>X1X9X9XX>X2X%X2X*X9X>X>X1XeX>X>X>X9XeXeX9XeXbXbXeXeXiXiXiX6X6XpXcXjXnXVXFXKXKXKXKXKXKXJXSXmXsXyX,X:X=X-X-X.XXXXXXX!.T.Y.m.j.r.q.q.t.b.J.K.U.Y.U.K.J.J.n.k.a.s.a.a.8.7.7.3.3.1.;.1.3.7.7.5.3.1.1.1.5.6.5.7.5.5.1.1.1.5.7.7.7.1.1.1.1.1.1.1.1.1.5.1.1.5.1.1.1.1.1.1.1.1.2.1.1.1.1.2.1.1.1.1.1.1.1.1.7.5.5.6.6.6.2.1.1.5.5.5.1.1.5.7.5.7.3.3.1.1.1.1.1.1.1.1.1.1.1.1.3.1.1.1.1.1.5.5.5.=.5.&.;.1.;.1.4.e.h.m.T. XrXtXvXNXAXDXGXDXAXNXfX:XtXtXR.A.U.Y.K.U.T.E.E.E.E.XX.XXXE.W.-XeXfXZXJXKXKXKXGXNXvXlXlXxXxXxXxXmXkXuXeXeXeXeX,XeXyXyXeXtXbXeXbXeXeXdXbXX>X1X9X%XS.S.$X>X>X>X1X>XeX>X,X,X,X,X,X,XX>X>X>X1XiX>X%XS.$X>X2X>X>XeX1X1X1X,X,X,X,X.P.Q.G.>.*.>.>.>.>.>.>.>.>.>.,.,.,.G.G.P.oX+XXXrXeXeXkXbX%X2X;X>X/.-XbXdXsXsXhXnXBXCXVXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCX7X6XX>X>X>X1XyX>XW.S.$X>X>X>X>X>XeX>X>X,X,X,X,X,X,X,X3XX>XyX,X-X-X-X.X.X=X.XE.U.m.j.s.j.j.a.j.l.z.m.n.n.n.n.s.s.s.q.8.8.7.5.1.1.3.1.7.5.5.1.1.1.5.3.5.1.3.5.1.5.1.5.1.5.1.5.5.5.5.5.1.6.7.1.5.1.1.5.1.5.5.1.5.1.7.1.5.1.1.5.1.5.5.3.5.1.5.1.5.1.1.5.1.5.1.5.1.5.5.1.5.1.5.1.5.1.1.5.1.5.1.5.1.5.5.1.5.1.5.1.7.1.5.1.5.1.5.3.5.1.5.1.5.1.5.1.5.1.1.5.1.5.5.1.1.5.5.1.7.1.5.1.5.1.1.5.1.5.1.5.1.1.5.1.;.;.1.u u 4.r.Z.tXtXuXNXDXJXPXJXGXNXsX,X.XQ.Y.J.Z.Z.Z.R.T.E.E.!.T.f.:.g.f.>.>.>.G.>.g.,.g.g.G.g.g.G.G.g.,.>.>.>.>.G.I.Q.XXwXeX,XeXdXiX$X%X>XiXbXdXsXcXcXnXVXVXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSX7X*X>X*X*X2X*X>X>X>X>XyX>X%XS.-X1X>XeX>X>XeXeX1X,X,X,X,X,X,X,X3XX-X-X%XW.W.-X-X-X=XXXE.E.U.m.b.a.w.a.a.j.j.j.l.m.m.l.k.a.g.0.0.5.7.;.1.1.1.1.1.1.1.5.5.1.1.5.1.5.1.5.1.5.5.1.5.3.5.1.5.1.5.1.1.5.5.5.7.1.5.1.5.1.5.1.5.1.1.5.1.5.1.5.1.5.5.1.5.1.1.5.1.5.1.5.1.5.5.1.5.1.5.1.5.1.1.5.1.5.1.5.1.5.5.3.5.1.5.3.5.1.1.5.1.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.1.5.1.7.1.5.5.1.5.1.5.1.7.1.1.5.1.5.1.5.1.5.5.1.7.1.5.1.1.5.1.5.7.3.1.1.;.u u &.tXtXa.m.~.=XkXAXGXPXJXJXFXNXyX:XoXR.Z.U.Z.Z.T.!.Q.n.g.5.&.&.>.>.>.>.>.>.>.>.>.>.g.G.g.G.G.I.I.I.G.,.:.:.>.G.P.Q..XeXtX;X-X>X7XiXbXsXsXcXhXmXBXSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVX7X*X1X>X*X>X2X>X>X>X>X>XyX>X%XS.-XeX>X>XeXeX1X1XeX,X,X,X,X,X,XeX1X,X3XyX,X:X-X-X XW.W.E.-X=X=X.X!.T.U.m.h.s.w.a.a.f.k.F.J.l.k.j.h.a.q.8.q.7.5.;.;.;.1.1.1.1.1.1.1.1.5.7.1.5.5.1.1.5.1.5.3.1.5.1.5.1.5.1.5.1.1.7.5.7.2.7.5.7.5.1.5.1.5.1.5.7.1.5.1.7.1.5.1.1.5.3.5.5.1.5.3.5.1.5.1.1.5.1.5.1.7.1.5.5.1.5.1.5.1.7.1.1.5.1.5.1.5.1.5.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.1.1.7.1.5.1.5.1.5.5.1.5.1.5.1.7.1.1.5.1.5.1.5.5.1.5.1.1.1.1.7.7.8.1.1.tXtX&.u 1.3.q.U..XyXxXDXPXPXPXGXAXlX;XW.A.N.m.K.P.P.K.F.i.p.>.*.>.>.>.>.>.:.>.>.>.>.>.>.G.G.I.Q.oXXXoXT.f.*.-.G.F.I.Q.!.;XuXdXiXbXbXdXsXxXhXjXBXSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVX5X*X>X>X2X>X>X>X>X>X>X>X1XbXeX/.W.2X>X>X>X>X>XeX>XeX,X,XeX,XeXeX,X4X,X,X;X-X!.W.T.E.E..XXX.X!.~.Y.z.w.0.0.0.f.k.k.l.l.k.k.k.k.a.q.7.7.1.3.7.1.1.1.1.7.7.7.2.7.1.1.1.1.5.7.1.5.1.1.1.1.5.1.5.1.5.5.1.5.1.5.1.5.1.5.5.1.6.7.1.5.1.5.1.5.1.5.1.5.1.1.5.1.5.1.5.1.5.5.1.3.5.1.5.1.5.1.5.1.5.1.1.5.1.5.1.1.5.1.7.5.1.5.1.5.1.5.3.5.1.5.1.1.5.1.5.1.7.1.5.1.5.1.5.1.5.1.1.1.5.1.5.1.5.1.5.5.1.5.1.5.1.5.1.1.5.1.7.7.1.5.1.7.1.5.1.1.5.1.5.1.6.4.1.1.1.5.5.7.1.tXtX1.1.l ;.5.&.;.3.t.W.-XkXNXGXJXPXPXFXmXyX XA.B.K.M.U.Y.J.G.p.5.:.&.:.p.u.>.>.>.>.>.>.>.>.g.G.G.L.!.rXuXeX!.Y.>.:.g.Y.+XrXrXdXdXdXdXdXsXlXjXnXZXSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHX7X2X1X>X>X>X>X>X>X-X2X;X>X>X6XeX/.W.2X>X>XeXeXeX>XeX>X,X,XeX,X,X,X,X;X:X.XE.E.E.E.T.T.!.Q.R.J.k.h.8.8.0.w.w.s.j.j.j.f.h.a.0.q.7.7.7.1.1.1.5.5.1.1.5.1.5.5.1.1.1.1.1.1.1.1.5.1.1.5.5.1.5.3.5.1.5.3.1.5.1.7.1.1.1.5.5.5.5.3.5.1.7.1.1.5.1.5.1.5.1.5.5.1.5.1.5.1.5.1.1.5.5.1.5.1.5.1.5.1.7.1.5.3.1.5.1.5.5.1.5.1.1.5.1.5.1.5.1.5.1.5.1.5.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.7.5.1.7.1.5.1.5.1.1.5.1.5.1.5.1.7.5.1.5.1.1.5.1.5.1.5.1.5.7.1.5.1.5.1.1.1.1.1.5.5.1.3.tXtX1.7.1.1.5.5.5.5.&.1.5.k.Y.!.wXhXSXJXLXJXFXmX3X&XA.U.M.U.L.H.F.a.p.>.*.&.>.>.=.>.>.>.>.>.>.>.>.>.G.p.f.U.=XeXkXrXY.u.g.L.!.rXrXtXdXdXpXsXcXcXnXBXSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHX8X*X1X2X%X2X&X&X&X>X&X:X-X>X>XyXeX/./.2XrX>X>XrX>XeXeX>X;X,XeXeX;X:X-X XE.E.E.T.Q.!.T.U.J.l.f.q.0.h.a.a.j.j.j.j.w.w.w.0.0.7.3.5.5.5.;.5.5.5.5.5.5.5.5.5.5.5.1.1.2.1.6.2.2.5.7.5.5.1.1.1.1.5.1.5.1.5.1.1.5.1.1.1.5.5.5.5.5.5.5.1.6.1.1.1.5.5.1.1.5.5.1.5.1.5.1.1.1.3.5.3.1.1.3.5.1.5.1.1.1.5.1.1.1.1.5.1.5.5.5.1.5.1.5.1.5.1.5.1.5.1.1.1.1.5.1.1.5.1.1.5.1.1.1.5.1.5.1.1.1.1.1.1.5.5.5.1.5.1.5.1.1.1.5.1.1.1.1.5.5.1.5.1.5.1.5.1.1.5.1.5.5.1.2.5.5.5.=.=.5.5.tXtX5.5.5.5.l 3.1.1.5.p.&.l e 1.7.h.Y.rXgXBXJXPXJXGXAXuXoXT.R.U.R.K.Y.F.i.5.:.*.5.*.*.:.>.:.>.>.>.>.>.>.>.>.>.f.V.2XkXeXQ.f.a.h.U.=XeXkXsXpXcXcXzXnXCXHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX8X*X*X*X2X>X>X:X&X:X:X>X>X;X>X>X6XeX/./.-X/./.1X,X2X1XeX;X;X,X;X:X XE.E.T.E.Q.!.T.Y.K.f.a.s.q.q.s.a.k.j.j.j.h.h.a.8.7.7.5.3.5.1.1.1.5.5.1.1.1.5.1.5.5.1.5.1.1.5.1.5.1.1.5.7.1.1.1.1.5.5.1.5.1.5.3.5.1.5.7.1.1.3.7.1.5.5.5.4.2.4.1.6.8.5.5.8.7.5.5.7.1.5.1.5.1.5.7.5.1.;.;.7.1.5.5.1.1.7.1.8.3.1.1.1.3.3.l l 1.6.5.p.5.5.8.1.5.7.7.7.7.5.3.;.1.1.1.7.7.6.7.1.1.1.1.3.1.1.l 1.3.1.1.1.5.5.7.3.1.5.5.l 4.1.1.1.4.z 1.1.5.1.5.1.7.1.5.5.1.5.1.1.1.5.5.5.5.5.5.1.1.tXtX1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.3.a.K.rXlXAXGXLXPXFXmX3X.XY.~.Z.Z.M.m.g.u.>.>.>.*.>.>.>.>.>.g.>.>.>.>.u.u.>.g.g.~.uXeXE.h.i.i.~.rXuXkXcXaXcXzXnXVXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCX1X*X2X2X2X2X&X>X-X>X:X>X>X>X>X,XyXX>X,X,X,X:X,X=X XoXE.E.E.E.T.R.J.l.j.a.q.s.a.f.j.j.f.a.h.a.a.q.7.7.7.7.7.5.5.1.1.5.1.5.1.5.1.5.1.5.1.5.1.5.5.1.5.1.5.1.5.1.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.1.2.7.5.5.i.5.1.l e 1.5.5.5.5.1.5.5.;.1.7.1.5.5.1.5.1.5.1.2.1.7.1.1.5.7.1.8.7.1.1.p.6.6.5.6.p.=.6.=.&.6.5.1.1.1.1.1.=.1.5.p.5.1.1.7.1.6.5.1.1.1.1.7.2.1.1.5.5.=.=.5.p.5.5.5.5.1.5.7.5.5.6.6.p.p.5.6.1.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.1.tXtX1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.5.&.=.3.Z.-XsXZXGXJXLXGXxX,XoXY.K.U.Y.J.j.u.p.>.-.>.>.>.>.*.*.>.>.p.>.p.g.p.>.:.:.J.+XrX!.F.:.w.E.wXdXlXxXfXjXBXVXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJX5X$X2X2X$X2X&X&X-X&X:X>X:X:X:X;X>XyX.>.>.>.>.>.>.>.>.:.u.p.>.>.g.f.!.+XQ.f.w.b.rXkXlXkXhXnXCXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX8X$X2X2X2X2X$X:X2X-X:X2X:X>X-X>X>X,X.>.:.>.>.>.>.p.>.>.:.u.>.>.>.>.-.>.:.q.Y.!.K.g.8.!.rXE.eXzXZXSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVX#X2X2X2X2X2X>X>X-X&X:X:X>X-X>X:X>X:X,XeXeXdXdXeX;X-X.XW.T.E.E.E.E.T.m.h.q.0.0.w.a.a.k.j.a.h.h.q.7.7.3.3.1.1.1.1.1.5.3.5.1.1.1.1.1.1.1.5.1.5.1.5.1.7.1.5.1.5.1.1.5.1.5.1.5.1.5.5.1.5.3.5.1.5.3.5.1.5.3.5.1.1.1.1.5.5.1.A.lX Xl y.eXz.=.5.5.1.1.1.3..X-Xl 5.5.1.1.5.1.r.eXeX9.3 rX!.l 5.1.3.l r.rXuX3XpXeXeXY.l e 5.5.w 9.-XeXuXkX!.7.l 1.1.1.=.r.eXeXh.5 -X-X=.1.1.1.1.1.Z.4XeXeXeXS.c 1.1.1.&.5.6 N.>XdXtX;XV.q z 6.5.5.1.5.1.5.1.5.1.5.1.5.1.7.1.5.1.7.1.5.1.1.1.tXtX1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.l l z l l 1.1.5.:.&.;.1.a.R.:XjXDXLXLXJXBX.>.p.u.:.*.>.>.>.>.>.>.>.>.g.G.I.d.d.a.k.z.W.xXZXJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX6X@X2X2X$X$X-X2X>X:X2X:X2X:X:X&X:X:X:X,XeX;X,X;X-X XE.T.R.E.E.E.Y.K.j.0.4.0.s.a.j.j.a.a.a.7.8.7.7.5.1.5.7.1.1.1.1.1.1.7.1.1.5.5.5.1.5.1.1.5.1.5.1.5.1.5.1.5.1.5.5.1.5.1.7.1.5.1.3.5.1.5.1.5.1.5.3.5.1.5.5.1.5.1.5.p.5.6 -XAXdXy.y.vXz.w 6.5.1.1.l z eXtXu 1.1.5.5.1.1.z.zXZXW.1 bXrXl 1.1.4.l z U.U.,XlXS.Z.y.l 8.p.5.l XsX!.Z.Y.z.4.3.4.1.8.=.t.zXxX!.l 6X.p.p.>.p.p.>.>.>.>.>.>.:.:.>.G.f.f.G.G.u.:.J.dXSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCX#X$X2X2X$X$X$X-X-X:X-X:X2X:X>X:X>X:X:X:X;X:X%X|.A.R.R.E.E.E.M.b.w.0.4.8.s.k.l.j.j.a.a.7.7.5.1.1.5.1.5.1.1.1.1.1.1.1.1.1.1.1.5.1.1.5.7.5.5.1.5.5.5.1.5.1.5.1.5.1.1.7.1.5.1.5.1.5.5.1.5.1.5.3.5.1.5.1.5.1.1.5.1.;.7.&.5.l $X4XiXW.y.xXV.l 7.6.6.1.1.k rXyXz 1.5.1.1.5.1.z.7X6X>Xv bX-Xc 1.8.4.1.l 4.3 W.dXb 5 1.6.p.p.=.k >XeXq 6 l 1.1.1.1.1.7.=.^.7X*XkX9.*X1X&.1.1.1.1.1.T.7Xr.7 k sX!.=.z 1.5.&.6.lXS.7 5 !.kX4.&.p.6.1.1.5.5.5.1.7.1.5.1.5.1.5.1.5.5.5.1.5.1.1.1.tXtX1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.:.5.5.5.5.&.&.1.1.l u 1.1.l =.=.=.6.z./.kXAXJXLXJXvX=XW.U.U.U.m.l.a.>.:.*.-.p.>.:.:.>.>.>.>.:.>.>.G.,.>.,.G.G.g.G./.zXJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX*X2X2X$X%X%X%X$X2X2X-X-X&X&X2X-X-X:X,X:X-X.XE.T.T.E.!.E.T.M.j.q.3.0.g.s.a.h.j.a.q.8.7.5.1.5.:.5.5.5.5.5.5.5.1.7.2.7.1.7.1.3.5.1.1.1.1.1.5.3.1.1.3.1.5.1.1.1.7.3.1.1.3.5.1.5.1.5.1.1.5.3.5.1.5.1.5.1.5.3.5.5.1.5.3.1.1.&.k -XX%X*X1X1.1.1.1.1.1.W.pXh.=.x dXS.u 1.5.7.2.l kXS.-.=.W.kX4.1.5.1.1.1.1.1.1.1.5.5.1.5.1.7.1.1.1.1.1.5.1.1.1.1.tXtX1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.&.1.1.3.1.1.;.=.=.1.&.1.2.i.z.-XxXJXLXJXBX5XW.Z.A.U.m.l.a.u.:.:.:.u.>.:.>.>.>.u.7.u.u.g.>.>.g.G.g.G.K.eXAXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCX$X%X$X2X:X&X-X$X-X:X-X&X&X-X-X&X-X:X-X X XA.R.T.Q.!.U.m.h.0.3.e.0.f.s.j.a.a.a.8.7.7.7.3.1.7.7.1.1.1.1.1.1.5.5.1.1.1.1.5.1.1.1.1.1.7.1.1.3.1.1.1.5.3.1.1.3.1.1.5.1.5.1.1.5.1.5.1.5.5.1.5.1.5.1.5.3.5.1.5.1.1.5.1.1.1.1.1.u ;XbXx ;X3XaXy.2.5.5.5.1.2.k ,XeXc 1.5.7.6.6.1.t.6Xz.Y..>.>.g.>.>.>.:.>.u.u.>.>.>.g.p.g.g.,.f..XmXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX*X@X%X$X$X$X$X$X-X$X-X2X:X-X$X-X;X-X XA.Z.R.E.E.T.U.l.q.0.7.0.a.l.l.q.a.8.8.3.1.1.1.2.2.=.1.2.1.1.1.1.1.1.1.1.1.1.1.1.6.1.1.1.1.1.1.1.1.1.1.1.1.5.1.1.5.5.1.1.1.1.1.5.1.5.1.7.1.7.1.3.5.1.5.3.5.1.5.5.1.5.1.5.1.5.1.5.1.1.5 ;XbXe z.hXmXy.1.=.5.5.5.1.k eXbXe 5.5.6.7.6.1.z.sXZ.5 >XZX-Xl 5.5.1.5.1.1.&.%XkX2.2.1.1.3.p.5.l -XdXc 7 3 k l 1.5.5.5.7 z.xX^.w eXZX$X=.1.2.1.1.2.W.gXx 8 y.kXW.&.5.1.6.1.r.kX/.=.q %XdX2.=.6.5.1.1.1.1.1.1.1.5.1.5.1.5.5.1.1.5.5.1.1.1.5.1.tXtX1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.&.l 1.1.2.2.2.2.2.2.2.2.2.2.2.=.=.r 5.=.6 e 2.h.~.dXSXPXJXNXeXW.Z.Y.J.J.F.d.>.>.>.>.p.p.>.>.*.>.>.>.5.u.p.p.g.,.>.K.yXDXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXBX#X$X2X$X%X%X%X-X-X-X$X-X-X-X;X-XW.W.A.T.E..XE.K.s.3.7.7.a.k.l.k.f.a.4.3.1.1.e e e 2.2.=.e e =.e 1.1.1.1.1.1.&.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.3.1.1.3.1.1.1.1.3.5.1.7.3.1.1.5.1.5.1.5.5.1.5.1.5.1.5.1.1.7.1.5.1.5.1.7.7.1.1.1.rXdXx.6 &XzXZ.=.p.u.5.8.1.l eXdXx.1.1.5.2.7.1.z.xXZ.3 Z.xX;X1.1.5.1.5.1.1.1.-XdXx.1.1.1.3.5.5.l W.lXeX/.;XW.4.=.5.1.i.6 z.vXZ.5 Z.vX;X=.1.7.1.6.1.T.jX:X-X;XkXZ.&.7.&.5.1.l =XkX!.-XdX-X6.5.1.1.1.1.5.1.1.3.5.1.5.3.5.1.1.1.1.1.2.=.5.=.1.1.tXtX1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.&.6 l &.1.1.1.=.=.2.=.2.=.=.e e l l e 5 e e 1.1.1.6 7 =.4.^.2XzXDXDXBX.>.>.>.>.>.>.>.u.>.>.>.>.>.>.g.>.>.H.rXNXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX5X%X$X2X2X%X-X-X-X$X-X$X-X-X-X.XR.Z.A.E..XT.U.s.3.3.7.s.a.h.k.j.a.7.5.3.3.1.1.2.2.2.1.=.e =.6 6 6 2.1.e =.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.3.1.1.1.3.1.1.1.1.1.1.5.5.1.5.1.1.5.3.5.1.5.3.5.5.1.5.1.7.1.5.1.1.5.=.&.Y.W.i.=.y.W.z.=.5.5.5.1.1.2.Y.~.l 5.1.5.5.7.5.h.E.z.w k E.Y.1.1.1.5.1.1.1.1.Z.E.l 2.1.5.1.7.8.6 e Y.-XrXrX~.7.6.6.5.2.=.x.E.y.2.1.E.A.&.1.1.1.1.1.h.%X-XrXE.Z.e 5.1.5.5.8.e r.W.;X;XW.9.&.5.6.1.5.1.7.1.3.5.1.5.1.5.1.5.5.1.1.5.1.5.1.1.1.1.tXtX1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.6 1.e e e w 6 e e l 4.4.8.r.r.z.c.c.j.z.m.Y.Y.Y.~.>XmXGXPXLXGXfX%XA.Z.Z.R.l.a.7.:.:.>.p.u.p.u.:.>.u.>.>.>.>.G.>.g.Q.xXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHX$X%X$X-X-X2X-X%X%X%X-X-X-X XR.Z.U.!.E.R.m.d.8.5.7.s.s.s.f.s.s.h.l.m.M.Z.J.J.Z.U.U.U.J.U.m.z.z.h.r.1.1.u 6 6 6 u 2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.5.1.7.1.5.1.5.1.1.1.7.1.1.5.1.5.5.1.5.1.5.1.5.1.1.5.1.5.1.5.1.3.1.5.5.&.2.l &.6.5 5 2.6.=.1.5.;.7.4.2.l =.6.1.5.1.5.7.1.l 1.1.6 2.6 1.1.5.7.5.5.1.5.e 2.5 2.1.5.;.&.1.8.1.7 6 5 5 e =.5.5.6.2.1.5.4 k 2.5.5 l 1.1.1.1.1.1.1.5 7 w w u =.5.3.5.=.5.6.7 w e c w e p.5.4.1.1.1.1.1.1.1.5.3.5.1.5.3.5.5.=.1.1.5.=.1.1.1.tXtX1.1.1.1.1.1.1.1.1.1.1.1.;.1.1.&.l 1.1.1.1.1.6 &.6 6 6 u 2.8.h.z.Z.U.U.U.U.R.E.T.T.T.T.T.!.W.!.rXrX=XeXbXlXZXAXDXZXlX=XT.U.T.Y.l.u.:.>.>.>.>.>.>.:.>.>.>.>.>.>.g.g.>.K.kXJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXBX/.%X$X-X%X-X-X%X%X-X-X XA.Z.U.E.E.R.j.4.;.5.u.a.a.j.k.l.m.m.m.M.M.U.U.R.R.U.U.Y.R.Y.R.R.R.T.R.R.R.Y.~.Y.Z.h.2.l l =.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.7.1.1.7.1.1.1.3.5.5.1.5.1.5.1.5.1.5.3.5.1.5.7.1.5.1.5.1.1.7.;.6.p.5.=.e =.=.e &.*.=.1.6 p.i.5.8.=.=.1.=.5.1.1.6.1.&.6 1.3.5.5.5.5.5.1.=.1.5.=.&.=.6 &.1.=.&.&.:.1.7.5.=.1.=.e 1.=.=.=.&.l 5.&.u 6 p.5.1.l 1.=.&.1.1.1.&.*.;.e 6 &.5.=.&.1.5.&.5.=.=.=.&.e =.=.=.2.1.1.3.1.1.1.3.5.1.1.5.1.5.1.1.1.1.5.1.=.6.=.2.tXtX1.1.1.1.1.1.1.1.1.1.1.1.=.1.1.1.1.1.=.6 6 6 6 1.1.w.j.M.R.E.T.Y.R.R.U.K.M.M.M.m.m.m.m.m.m.m.z.c.c.z.z.z.^.Y.Y.W.-X=X=XE.Z.M.U.R.U.l.i.:.*.>.*.:.*.u.u.*.p.>.:.>.>.>.d.z.eXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX7X@X@X%X-X%X%X%X-X=X-XA.Z.Z.!.!.Y.z.3.1.1.7.e.h.z.n.m.U.Z.M.Z.M.M.M.M.m.J.K.K.K.U.J.U.U.Y.K.J.Y.Y.Y.Y.R.R.Y.T.~.R.m.t.4.6 6 2.1.5.1.2.1.1.1.=.5.1.5.1.1.1.1.1.1.1.1.1.1.5.1.5.1.5.3.5.1.5.3.5.1.5.1.5.1.1.5.1.5.1.1.5.z p.=.4.S.$X>X>X>X$X>X;X;XX>X;X,X&X&X>X:X>Xt.&.x. X&X&X2X1X:X>X1X%Xr.2. X6XA.5.5.7.;.&.A.1X%X4.-X>X>X1X>X2X-X>X2XW.2.h.;X*X2X,X>X2X$X>X,XW.e 1.5.1.5.5.5.5.1.5.5.3.5.1.5.1.1.1.1.1.1.1.1.5.tXtX1.1.1.1.1.1.1.1.1.1.6 =.e 1.l =.6 1.u 6 u 4.j.J.T.Q.T.R.U.M.Z.Z.M.M.M.M.U.U.Y.R.T.T.T.~.~.Y.Y.R.U.Z.U.U.Z.m.F.z.n.m.n.m.Z.H.K.K.K.Y.U.z.u.:.:.>.p.p.p.-.*.p.u.>.>.>.f.G.f.yXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXkXtXtXtXtXtXtXtXtXtXtX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX$X%X$X%X X%X-X;X XZ.Z.U.T.!.Y.z.r.7.8.h.z.m.M.M.M.Z.J.Z.M.U.Z.R.T.T.T.T.E.oX!.E.E.E.T.T.E.T.T.Y.U.U.Z.M.Z.U.R.R.U.U.T.E.Z.z.1.7 6 l =.1.=.5.=.1.1.1.=.=.1.1.1.1.1.1.5.1.3.1.1.5.1.5.1.5.1.5.1.5.1.5.3.5.5.1.5.1.5.1.1.l 6.=.A.jXMXvXzXBXzXBXBXzXZX.p.-.p.p.>.>.>.g.g.,.>.T.tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXkXtXtXtXtXtXtXtXtXtXtX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSX@X@X%X%X$X%XW.A.Z.A.T.E.Y.z.r.r.h.z.J.U.Y.U.U.Y.U.U.Y.Y.T.!.oXXXXX+XwXrXyXyXyXyXyXyXtX,XwX,X;X:X%X XE.~.R.U.U.U.U.R.U.M.R.T.Y.m.8.2.l 6 6 &.1.1.1.1.1.1.1.1.1.1.6.5.4.1.1.1.5.3.5.1.5.3.5.1.5.3.5.1.5.1.1.5.1.5.1.7.1.4.5.=..XBX7XW.A.W.V.A.A.A.A.Z.6.p.=.y.X8.1.l >XjXMX,Xr.6 1.5.&.W.gXzX.>.>.>.>.:.>.p.A.SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCX X%X%X%X-XW.V.Z.R.W.U.n.j.z.j.l.m.U.Y.J.m.m.m.J.K.R.T.T.T.T.T.T.E.E.Q.E. X.X.XXX;XwXwXyXtXtXkXlXNXvXkXuXuXwX.XE.A.R.P.B.U.Y.Y.R.Y.Z.j.q.1.;.6 1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.5.1.5.3.5.p.W.BX6X9.6 =.=.=.e 2.l l 2.5.l A.BXiXS.hXmXA.l x >XzXjXzXE.l 1.;.h.aXMX8X6Xy.>XjX,Xx c x.6.6.=.e =.1.%XCX5Xu 7 &.7 k XNXeXr.*XBX-X=.5.1.=.=./.jX.5.>.p.:.p.a.;XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX8X X-X%XS.Z.A.T.!.E.R.N.j.l.z.j.j.j.l.l.m.J.K.K.K.Y.U.U.K.U.U.K.K.J.m.J.H.n.n.n.n.J.K.K.U.U.T.oXXXrXwXlXlXNXNXmXlXdXwXXXoXZ.N.N.U.U.U.R.U.m.w.;.u 6 6 &.1.1.1.1.1.1.1.1.1.1.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.7.1.5.1.1.5.5.l 5.p.W.CXaXh.e h.rXeX,X>X1X-X7.6 9.lXmXS.k &XBXpXx l -XzXcXzXsXy.5 1.rXmXjXMXdX9.>XBXxX.:.m.ZXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX5X%XS.Z.Z.W.!.!.E.R.m.b.f.a.7.0.s.j.l.n.J.J.K.K.K.J.H.n.j.l.l.f.k.f.s.a.f.G.F.G.F.F.F.F.H.F.l.F.H.I.L.U.T.oX;XtXlXNXNXNXlXtX:XW.Z.Z.Z.Z.R.T.U.m.a.1.1.6 1.1.1.1.1.1.1.1.1.1.1.1.1.1.5.1.5.1.7.1.5.1.5.1.5.1.5.1.5.5.1.5.1.5.1.W.CXiXh.5 V.xXZXzXzXCXsXr.5 -XZXiXr.6 Z.fXzX%X3 2XzXeX1XZX%X3 y.xXfX@XjXdXr.1XjXjXjXxXxXdXy.k 5.5.2.&XCX*X7.=.5.5.5.h.9.7.r.6XCX%X=.5.7.=.&.%XjXXCX X&.&.l =.7 W.MX4Xy.eXMXeXx 9.r.4.4.>XBX-X^.sXmXD.8.9.4.5.&.=.&.1.5.1.5.1.5.1.5.1.7.5.1.5.5.1.1.1.1.1.1.1.1.1.1.tXtX1.=.1.1.1.6 1.1.7.8.8.3.5.7.a.l.R.Q.XX+XwXrX=XE.U.z.h.q.5.;.1.:.1.1.1.1.1.1.l 1.7.1.1.1.1.1.1.2.3.4.1.1.1.1.;.7.7.5.;.;.u ;.1.r.Z.XmX7XzXhXh.v mXdX4.1XMXeXx.c 4.4.r.x.y.e 1.;XCX5Xy.9.y.x.y.-XZX3Xy.eXzX-Xy.9.x.r.y.@XMXiXy.Xc.z.dXgXhXvXzXjXjXjXmX>Xc 1.5.5.5.1.5.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.e tXtX6 6 ;.1.x.8.7.1.:.a.J.!.XX+X!.K.a.;.;.;.u ;.3.5.;.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.3.2.7.1.1.1.5.1.1.2.5.7.1.7.5.7.7.7.7.5.7.7.7.7.7.6.1.l y..XxXGXGXmX%XZ.Z.Y.Y.!..X/.sXJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCX$X-X;X;XXXU.a.0.7.q.k.l.l.k.f.a.a.a.7.7.q.7.u.q.7.q.u.q.7.a.0.a.7.a.q.q.a.a.q.a.a.a.d.a.d.s.d.d.d.f.d.f.l.f.l.l.l.f.f.l.l.H.F.F.F.F.H.H.H.H.M.R.yXmXGXJXmX XZ.L.Z.A.E.Z.1.5 1.4.1.&.1.1.1.1.1.5.1.1.7.1.1.6.3.1.5.1.5.1.5.1.7.6.6.5.1.4.z.y.Z.t.y.t.y.y.9.z z.^.y.y.y.z.8.=.l l r.z.r.^.y.=.&.x y.y.e *.z y.t.e r.^.t.y.z.t.t.y.y.t.k.5.e v c.t.4.y.y.t.z.r.1.7 1.t.V.y.y.z.h.r.y.b 2.6 z.y.t.r.y.t.y.y.y.c 6 8.z.v y.r.y.c.y.b c.h.;.1.5.1.1.5.1.7.1.1.1.1.;.1.1.1.1.1.1.e 1.1.1.=.tXtX1.1.8.8.1.3.3.q.l.R.!.!.T.m.7.;.;.3.1.1.1.3.7.3.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.5.1.5.1.1.7.7.5.1.1.6.7.2.7.6.7.7.7.7.7.7.7.8.i.i.5.;.w.!.mXGXDXdXW.U.F.J.!.=X%X9XFXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXjX%XwXrXrX!.n.q.:.a.j.l.l.k.j.a.0.7.7.7.0.q.u.7.q.q.0.7.q.7.q.q.u.a.q.a.q.q.a.q.a.a.a.f.d.d.a.f.f.d.d.f.f.f.k.k.l.l.f.F.l.f.f.F.F.F.F.F.F.F.G.I.L.J.J.!.eXZXJXDXuXT.M.M.U.T.T.w.5 e 1.l 1.1.1.1.1.1.5.1.1.1.1.1.6.1.5.1.5.1.5.1.5.5.5.6.5.1.3.l 5.p.5.p.5.p.5.5.p.=.5.7.&.p.5.2.1.1.1.5.1.6 6 8.p.1.w l 6.p.1.l 2.1.1.l 5.5.&.5.p.p.5.2.5.p.5.i k 1.5.5.=.5.5.*.p.p.p.=.5.&.&.5.5.1.i k 7.5.8.l p.5.p.p.&.5.p.1.5.5.6 5 l 1.&.1.1.&.1.=.p.5.5.5.5.1.5.5.1.1.1.1.;.1.;.1.1.1.1.1.&.1.1.e tXtX1.7.8.7.;.3.s.Y.~.~.U.z.x.3.1.1.1.1.1.1.;.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.5.5.1.5.5.5.1.7.6.1.1.5.1.5.7.5.1.1.7.7.6.7.6.7.5.7.7.7.7.8.7.5.p.G.i.7.3.t..XNXGXNX:XA.K.J.T.-X-X1XSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXgX%X,XrXrXR.w.7.7.s.k.l.h.a.i.a.8.a.8.7.7.7.a.8.a.u.i.a.i.u.0.q.u.q.7.u.u.q.a.7.a.q.a.a.g.a.f.f.a.a.f.d.f.d.f.f.f.l.k.f.l.f.f.f.f.F.F.F.F.F.F.f.G.F.L.L.L.Y.~.yXGXLXAXeX~.J.M.T.!.Z.3.6 2.1.1.1.1.1.1.2.1.7.2.2.7.1.1.1.7.1.5.1.5.1.1.=.1.1.=.5.5.1.1.1.1.1.1.1.1.1.5.3.1.5.7.5.6.1.5.1.5.7.5.1.1.1.8.5.1.5.p.8.4.1.2.5.6.1.5.3.3.1.1.1.6.5.6.7.1.1.7.1.1.5.8.7.1.5.8.5.5.7.5.5.7.1.1.3.7.5.=.8.5.1.1.1.&.1.7.1.5.5.5.6.7.5.7.8.1.1.1.7.1.1.5.1.5.1.5.1.5.;.1.1.1.1.1.1.1.1.1.&.1.l 1.1.6 tXtX7.5.1.;.0.M.T.Y.Z.h.8.8.5.1.7.7.1.=.1.1.1.1.1.1.1.1.1.1.1.1.1.1.6.2.1.2.1.6.6.5.1.1.1.5.1.6.1.1.5.1.5.1.1.6.7.6.7.6.6.7.7.5.7.7.5.5.8.7.q.7.5.u.p.i.q.7.5.j.wXZXDXlX-XU.z.Z..X-XwXSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX8X$XyXwX.Xm.e.3.s.k.j.a.w.q.0.7.8.8.8.8.7.7.7.7.7.8.8.a.a.0.7.0.q.q.u.0.a.a.g.a.a.a.a.a.d.a.a.f.d.f.d.a.f.d.d.f.f.f.a.d.f.f.f.F.F.f.l.l.f.f.F.d.F.l.f.l.f.g.f.I.P.XXMXPXLXxX!.K.M.T.!.T.x.e =.1.1.1.1.1.1.1.1.1.1.2.7.1.5.1.5.1.5.1.5.7.1.5.6.1.1.6.7.3.1.1.1.1.1.1.1.7.;.1.4.1.3.5.7.5.1.1.1.3.1.7.7.5.5.=.p.5.8.6.3.1.5.5.5.1.4.7.3.1.1.1.1.1.7.5.8.5.u 1.1.1.7.5.5.1.1.1.5.1.3.z l 7.5.3.7.7.5.5.;.3.1.3.1.7.1.5.5.5.5.5.5.7.3.1.1.1.5.3.3.1.5.1.5.1.5.1.1.1.1.;.1.1.1.1.;.1.=.1.1.&.1.1.tXtX1.1.7.s.M.R.K.j.8.4.l 1.1.1.2.2.1.6.2.5.5.5.1.1.1.1.1.1.1.1.5.6.8.p.6.5.5.5.*.5.8.8.5.5.7.6.5.1.1.5.1.1.5.5.2.5.6.7.6.6.7.5.5.7.7.7.7.8.3.4.7.7.u.a.u.7.7.u.i.U.uXDXAX4XT.Z.J.!.-X,XZXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXjX%XeX;X.Xh.3.w.a.j.j.a.8.q.q.q.8.8.8.8.8.i.8.i.7.a.8.8.7.8.u.q.a.u.a.a.a.q.q.q.q.q.a.a.a.g.a.a.a.a.a.a.f.a.f.d.f.k.f.f.f.f.l.l.l.l.n.H.H.l.l.H.H.F.l.l.l.n.n.n.H.I.H.R.yXFXLXSX;XA.n.T.!.W.y.u 6 6 1.=.1.1.1.1.1.5.1.1.1.1.1.5.1.1.1.1.1.1.5.7.5.=.5.1.1.5.1.7.5.1.1.1.5.;.5.5.;.7.5.u.5.5.5.;.1.5.1.1.5.5.5.5.6.1.1.1.7.5.5.5.1.;.5.5.1.1.5.1.1.3.;.;.1.1.5.5.5.:.5.5.:.5.5.5.;.7.3.1.1.5.1.3.5.5.5.5.1.1.1.;.5.5.5.5.7.1.5.5.;.;.5.7.5.5.5.5.5.1.5.1.5.1.5.1.1.1.1.1.1.1.1.1.1.1.1.1.l 2.7.tXtX;.5.n.Y.U.j.q.3.4.1.e 1.6.2.1.1.1.6.1.2.l l 1.5.p.5.5.5.6.4.k 3 8 , < < < < < < < < , 2 k c 4.6.p.5.5.7.1.4.7.1.2.7.7.7.6.7.7.6.7.7.8.7.3.0.a.7.7.q.q.7.7.g.u.1.a.oXNXAXlXW.N.z.~.=XeXZXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXgX&XeXwXE.w.;.q.d.k.a.a.8.8.7.7.a.8.8.i.8.8.8.8.i.7.7.u.8.q.8.a.7.8.8.a.q.8.u.u.g.g.g.i.a.g.g.a.a.g.a.a.a.f.a.f.f.a.d.f.l.l.l.l.l.k.l.l.f.l.l.F.l.F.l.F.l.F.F.l.F.l.F.F.L.J.XXmXPXJXdXE.K.U.E.!.z.6 7 1.1.=.=.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.5.1.5.1.3.5.1.5.1.5.3.5.1.1.5.1.5.1.5.5.5.3.1.5.5.1.5.5.5.1.5.1.5.5.5.1.1.5.5.1.5.1.1.5.1.5.3.5.1.1.5.3.5.3.7.1.5.1.5.1.5.1.1.1.5.1.5.1.1.5.5.1.1.5.3.5.1.5.1.5.1.5.1.5.5.1.1.5.5.1.5.1.5.5.1.1.1.5.1.1.6.1.7.2.1.7.1.1.1.1.1.u 1.=.2.1.1.1.1.1.7.3.tXtX0.l.L.K.h.x.5.1.1.1.1.1.1.1.1.1.1.1.1.1.4.l u 5.p.i.7.l 8 : : < > 0 j j v m m j j g 0 > : : < 5 6.i.5.=.2.4.5.7.7.7.7.5.6.7.6.7.6.7.8.8.7.7.8.7.8.8.8.7.8.a.q.7.u.u.Z.eXZXNX-XN.z.T.XXeXAXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXjX&XeXrXM.q.3.s.k.a.a.a.8.8.7.7.i.i.7.8.8.8.8.8.a.7.8.7.7.8.7.7.a.a.7.8.8.i.a.a.q.u.a.g.q.g.a.a.a.a.a.a.a.a.f.d.f.d.f.d.d.d.d.f.f.d.l.l.F.F.f.l.l.l.l.l.l.l.l.l.l.l.k.F.F.F.H.n.A.4XFXLXmX.XT.~.Q./.Z.3.u 2.2.=.1.1.1.1.1.1.1.1.1.1.1.1.1.1.5.1.5.1.5.5.1.5.1.5.1.5.1.1.5.5.3.3.5.1.5.1.5.1.1.1.5.5.1.1.7.1.5.1.5.1.5.5.1.5.1.5.1.5.1.5.1.5.1.1.5.1.5.1.5.1.5.1.5.1.5.5.1.5.3.1.5.1.5.1.1.1.5.5.1.5.1.5.1.5.3.1.1.5.1.1.5.5.1.1.7.1.5.1.1.1.5.7.1.5.2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.6 6 1.7.7.1.tXtXJ.J.l.g.7.5.1.1.1.1.1.1.1.1.1.1.1.1.c 1.5.5.5.z c : : < , b Z./.>X,XeXdXdXdXdXaXaX6X,X$XS.Z.b : $ < x 6.5.8.7.6.6.2.6.7.7.6.6.7.7.7.8.6.7.7.8.8.7.8.a.7.8.a.a.8.u.a.q.r.-XvXZXeXA.z.T.-X,XAXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKX KXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXMX>XyXrXm.e.3.w.l.f.q.u.i.7.7.7.7.7.q.8.7.8.8.8.7.8.7.7.u.7.7.i.8.7.7.a.8.q.a.8.i.u.a.a.a.a.a.a.a.a.d.a.a.s.d.a.a.f.a.f.d.f.f.l.f.f.l.d.l.f.f.l.l.l.F.l.l.l.l.l.l.k.l.l.l.F.F.F.l.J.B.oXAXLXAXeXT.Y.E.-XU.1.6 =.e 1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.5.1.5.1.3.5.1.5.1.5.1.5.3.5.1.5.5.1.5.3.5.1.1.5.1.5.1.5.5.1.5.1.5.1.5.1.1.5.1.5.1.5.1.5.1.5.1.5.5.3.5.1.5.1.5.1.5.1.5.1.1.5.1.5.5.1.7.1.5.1.5.1.1.5.1.5.3.5.1.5.1.5.1.5.7.1.5.1.5.1.5.1.5.1.5.1.1.5.5.3.1.3.1.5.7.1.1.1.1.1.1.1.1.e =.=.1.7.7.3.1.7.tXtXJ.l.7.;.1.1.1.1.1.1.;.1.1.1.1.1.1.1.=.5.p.6.l , $ > j C.2X1XXXhXBXAXCXBXnXzXhXhXzXcXgXjXhXhXcXhXhXjXhXjXjXjXzXBXBXSXSXHXjX$ , 4.p.5.3.1.8.6.6.7.6.7.8.8.8.6.8.8.8.8.8.8.8.q.8.8.8.8.a.i.a.a.a.a.a.k.k.T.eXeXW.j.T.bXHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXAXyX:XN.e.q.t.a.0.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.8.7.7.8.7.8.8.8.8.8.8.8.8.i.i.7.5.7.7.7.7.u.7.:.5.u.7.u.7.7.u.q.a.a.a.a.g.l.d.d.a.d.d.a.a.a.a.f.l.l.l.l.l.f.f.d.d.d.k.k.l.f.l.l.k.l.F.l.l.l.d.F.l.W.ZXGXdXW.T.Y.!.z.l e e 6 6.1.1.;.1.1.1.1.1.3.2.5.6.4.1.5.1.7.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.7.1.3.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.5.1.5.1.5.1.5.1.5.1.7.1.5.1.5.1.7.1.5.1.5.1.5.1.1.5.1.7.1.5.1.1.5.1.1.1.1.1.1.1.1.1.1.2.1.6 ;.7.8.;.3.a.k.l.a.0.1.1.tXtX1.1.=.1.1.1.1.1.1.1.1.5.1.1.4.< 9 b Z.S./.bXZXAXBXnXjXjXhXhXjXjXjXjXcXjXjXjXgXhXcXhXhXhXzXhXzXjXzXBXCXSXSXC.: 2.p.5.3.1.6.6.7.6.6.6.8.8.6.8.8.8.8.8.8.8.8.8.8.8.a.8.a.a.a.r.a.a.a.k.a.h.W.eXeXT.z.A.hXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXfXeXZ.3.q.r.a.q.0.7.7.7.5.5.3.5.7.5.5.7.5.7.7.5.7.7.7.7.7.7.7.5.5.p.7.7.8.8.8.6.6.8.7.8.8.7.5.7.a.a.a.d.l.H.J.J.K.Y.K.J.l.f.a.q.q.a.u.u.u.g.d.d.a.a.a.a.f.f.f.d.d.d.d.f.f.d.d.d.f.f.l.l.l.l.k.f.a.d.d.l.l.f.d.G..XNXJXpXU.~.W.W.y.6 e =.1.l =.1.1.1.1.1.1.1.1.1.3.5.1.1.5.1.5.1.7.1.5.1.5.1.7.1.5.1.5.1.5.1.5.1.5.1.5.1.5.5.1.5.1.5.3.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.3.5.1.1.5.1.5.1.5.1.7.1.5.1.5.1.5.1.5.1.5.1.7.1.5.1.5.5.1.5.1.3.1.5.3.1.1.1.7.1.1.1.1.1.1.&.2.1.7 1.8.7.;.7.l.l.a.7.3.;.1.tXtXu 1.1.1.1.1.1.1.1.1.1.1.=.2.< : h A.A.%XkXZXBXzXjXgXhXcXhXhX7X9X6XhXzX7X1X9XaXhXcXhXjXhXhXhXjXzXzXjXBXCXHX8X, e p.5.7.5.6.4.6.7.8.7.8.6.8.8.8.8.8.8.8.8.8.8.8.a.8.a.8.i.8.a.a.h.a.j.j.q.t.E.rXrXR.z.W.AXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXzXdXE.0.w.r.w.8.7.7.5.5.7.1.5.7.7.5.7.7.5.7.5.5.7.7.7.7.7.7.7.7.7.8.8.7.7.7.5.6.6.8.8.8.8.8.a.f.H.J.J.Y.T.T.T.T.Q.Q.Q.!.!.XXXX!.Q.Q.K.m.f.d.q.u.0.a.f.a.d.f.f.a.a.f.d.d.d.f.d.d.d.f.f.k.l.l.f.f.d.d.f.f.d.d.f.d.G.b.oXAXGXwXY.R.!.~.q.5 l 1.1.;.1.1.1.1.1.1.1.6.2.1.1.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.1.5.3.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.3.5.1.5.1.5.5.1.7.1.5.1.5.1.5.1.5.1.5.1.7.1.5.1.5.1.5.1.5.1.1.5.1.5.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.;.=.1.1.7.3.7.k.m.j.7.3.1.1.1.tXtX1.1.1.1.1.1.1.1.1.1.1.1.3.p + , D.Z.%XsXBXCXjXcXcXcXcXcXjXjX*X@X@XaXjX*X@X$XaXhXhXhXhXhXhXhXhXjXjXzXmXBXSXBXv e p.5.1.1.6.6.7.7.7.7.8.6.8.6.8.8.8.x.i.p.8.a.8.8.8.a.q.a.a.a.a.a.h.a.h.k.a.k.~.=X=Xz.z.eXJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXGXdX=Xw.7.h.q.8.7.7.3.;.5.5.7.7.5.7.7.5.3.7.5.5.5.5.7.7.7.7.7.7.7.7.7.7.7.7.5.7.7.7.8.h.k.z.z.J.K.K.K.K.K.P.R.R.R.R.T.Q.Q.Q.Q.Q.XX+X+XXXXX!.Q.K.v.s.g.g.a.a.a.a.f.f.k.d.a.a.d.f.f.k.f.f.k.f.k.k.f.d.l.l.l.d.a.f.f.G.n.e. XNXDX-XT.A.!.Y.4.l 1.=.1.1.1.1.1.1.1.1.1.7.1.1.6.1.7.1.5.1.5.1.5.1.7.1.5.1.5.1.5.1.7.1.7.1.5.1.5.1.5.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.3.1.5.1.5.1.5.1.5.1.5.1.5.1.7.1.5.1.5.1.5.1.5.1.7.5.1.5.5.1.1.7.1.1.1.1.1.1.1.1.1.1.2.=.6 ;.3.7.;.3.f.H.j.7.1.1.1.1.1.tXtX1.1.1.1.1.1.1.1.1.1.1.6.p + < v Z.W.lXZXjXcXcXhXcXaXaXcXzXnXzX*X@XXaXfXsXhXsXhXfXhXfXfXcXcXhXjXjXjXzXlXl.8.a.8.i.7.i.8.6.5.1.6.8.8.8.8.6.7.7.8.x.8.8.8.i.8.8.x.8.h.q.h.8.a.i.h.k.k.f.d.d.l.f.n.Y.Y.U.y.$XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXeXZ.h.k.h.3.3.7.3.1.7.1.7.7.1.1.5.5.1.7.1.6.7.7.5.7.7.6.6.5.5.5.5.5.7.0.a.a.a.q.q.q.s.f.j.f.l.n.n.H.J.K.K.P.U.T.T.oXXXXXXXOX,X,XwXwXwXwX+XwX+X+X+XwXOX+X+XwXwXXXXXwXwX+XQ.f.7.s.l.f.a.d.d.f.d.f.f.d.f.f.d.G.l.d.f.d.d.d.d.d.l.l.a.k.W.DXvX XA.T.!.r.l l 1.6 1.1.1.1.1.1.1.1.1.1.1.1.6.1.1.1.5.5.1.5.1.7.1.5.1.5.1.5.1.5.1.7.1.5.1.1.5.1.5.3.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.1.5.1.5.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.3.5.1.1.5.1.1.1.1.;.1.1.5.1.1.1.1.1.1.;.1.1.1.6 =.8.7.1.a.l.k.7.3.1.1.1.;.1.1.1.1.tXtX1.1.1.1.2.1.1.1.1.1.e : $ ^.$XbXkXiXaXcXsXsXaXsXaXsXaXaXgXaXgXjXgX4X$X1XaXaXfXhXaXaXhXaXfXfXcXfXhXgXgXmXzX-X7.8.a.a.a.q.h.a.8.7.5.7.7.8.7.6.7.7.6.8.8.8.x.i.8.x.i.8.a.8.x.a.i.h.h.h.k.a.a.k.f.f.s.j.K.Y.!.k.z.ZXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXxX~.z.h.h.q.3.3.1.1.5.1.5.7.7.1.5.1.1.5.1.5.5.1.5.7.1.5.1.1.1.1.1.5.7.q.0.a.a.s.q.u.q.s.a.l.l.n.n.H.J.J.K.U.U.R.R.E.oX.XXX=X+X+XwXwXwXwXwXwXwXwX4XwXwXwX4X+XwXwXwXwXXXXXwXwXXXK.w.s.l.d.g.d.d.d.d.f.d.G.d.F.d.d.f.d.d.d.d.f.d.f.k.f.j.k.rXDXyXW.M.~.U.3.6 1.1.2.=.1.1.1.1.1.1.7.2.1.1.1.2.3.2.1.1.5.1.7.1.5.1.5.1.7.1.7.1.5.1.5.1.7.5.3.5.1.5.1.5.1.5.3.5.1.5.3.5.1.5.3.5.1.5.1.5.1.5.3.5.1.5.3.5.1.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.5.1.5.1.1.5.1.1.1.1.1.1.1.1.l 1.1.1.1.6 &.6.8.3.7.l.m.h.3.1.1.1.1.1.e 1.1.1.tXtX1.1.=.1.1.1.=.6 e 1.6 $ < ^.2X1XdXiXaXdXaXsXiXaXpXsXaXpXaXaXgXjXhXX$X*XaXaXaXsXfXsXhXhXhXfXhXhXfXiXA.z 3.i.0.q.a.g.g.a.s.a.s.f.f.f.f.f.q.i.7.7.7.7.7.8.7.8.8.8.8.8.i.8.8.a.a.a.h.h.a.h.f.a.f.a.d.d.f.j.b.K.n.s.l.mXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXAXT.j.h.r.7.4.7.6.2.1.1.5.3.3.1.3.1.5.1.3.1.5.1.1.1.7.1.1.;.;.0.0.0.0.0.7.g.7.q.q.g.s.s.s.f.f.j.s.s.l.J.J.K.R.T.T.T.T.!.XX;XwXwXwXyXwXyXuXyXyXuXyXuXuXuX4XtXuXtXtXuXuXuXuXtXtXOXyXwXXXXXuXwXB.e.a.s.a.d.i.g.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.a.J.uXvX XZ.Y.R.6.6 =.2.2.1.1.1.1.1.1.1.1.1.1.1.1.2.5.1.5.1.5.1.5.1.5.1.7.1.5.1.5.1.5.1.7.5.1.5.1.5.3.5.1.5.1.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.1.5.1.5.3.5.1.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.5.1.;.1.;.1.1.1.5.3.1.1.1.1.e e 2.e 2.x.8.1.0.f.j.7.1.1.1.1.1.1.1.1.1.1.1.1.tXtXl 2.l 2.=.e e l e e w 1 + f *X*X9XaXaXpXaXsXiXiXsXdXiXdXaXiXcXjXjXgX4X6XpXfXpXsXxXfXsXsXsXsXfXeXW.y.1.5.i.p.7.u.q.g.s.s.g.s.a.a.f.f.f.f.f.f.g.5.7.a.6.5.i.i.8.8.x.x.i.i.r.h.p.i.k.k.8.q.w.q.a.a.d.f.k.n.l.J.K.J.a.=XKXKXPXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX7XN.s.h.q.7.4.6.1.5.7.1.1.1.1.5.1.1.3.1.1.1.3.1.1.6.3.1.1.1.7.0.q.7.q.0.0.0.q.g.0.a.s.s.a.a.j.n.n.n.n.H.J.H.K.U.T.T.!.!.XX;X;XwXwXyXyXwXuXuXyXyX4XtXuXyXtXtXtXtXtXuXuXuXuXuXyXyXyXyXuX+XwXwX;XR.q.q.d.q.G.G.g.d.d.d.d.d.d.d.d.G.d.d.d.d.f.d.a.f.a.E.lXyXR.U.R.z.=.=.=.2.1.1.1.1.1.2.1.=.5.=.1.5.5.1.5.1.5.1.7.1.5.1.5.1.5.1.5.1.5.1.5.1.1.5.3.5.1.5.1.5.1.5.3.5.1.5.3.5.1.5.1.5.1.5.3.5.1.5.3.5.1.5.1.5.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.1.1.1.5.5.5.1.5.3.3.1.1.1.=.2.=.=.=.2.8.3.3.q.a.s.7.1.1.1.1.1.1.1.1.1.l l =.tXtX1.=.1.e 2.e e l e w w w : < S.*X1XiXbX9XiXsXaXpXsXsXsXaXaXgXhXcXzXzXhXcXpX6X6X1X2X%XS.S.A.Z.V.q.z l 1.5.i.u.i.q.q.a.g.a.g.a.s.s.f.s.f.f.H.H.f.7.8.a.7.8.8.8.8.6.6.4.1.1.4.4.r.k.i.p.k.k.j.q.s.f.f.s.k.s.f.m.Y.J.a.m.SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXS.w.s.e.8.4.2.2.2.1.1.1.5.1.3.1.5.1.5.1.5.1.5.1.1.5.1.1.5.7.8.0.q.g.g.7.q.g.q.q.q.0.a.a.s.s.s.f.l.n.J.J.K.P.K.U.R.T.!.oXXXXXXXXXwXyXuXuXuXyXyXuXyXtXtXtXtXtXlXtXgXuXlXuXlXuXuXtXuXuXuXyX+XXXuXuXQ.0.s.f.i.i.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.a.d.f.u.l.rXlXXXM.Y.Z.6.e =.1.=.1.1.1.1.1.1.1.1.1.1.1.1.5.1.5.1.7.1.5.1.5.1.5.1.7.1.7.1.5.1.5.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.1.5.1.5.3.1.5.3.5.1.5.3.5.1.5.3.5.1.5.3.5.1.5.3.5.5.5.1.;.1.1.1.;.:.5.1.1.2.2.=.e r =.8.8.3.8.a.a.7.1.1.1.1.1.1.1.1.1.1.1.1.l tXtX1.l 1.2.=.=.e l e w 2 e e < ^.>X*X9XaXiXpXpXsXaXcXaXiXaXaXaXcXcXcXsX6X2XS.V.v b q q 4 3 3 w 6 e l 1.8.8.7.7.7.u.0.s.s.s.s.a.s.s.f.f.k.j.H.v.f.f.a.8.7.8.8.4.4.4.4.y.Z.V.9.h 3 z r.k.k.d.d.a.a.w.f.f.j.f.a.l.J.K.l.u eXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXgXy.j.j.e.4.3.1.1.1.1.1.1.1.1.1.1.1.5.1.5.5.1.1.7.1.1.1.3.5.0.a.0.q.q.u.g.q.q.q.g.q.a.s.a.a.s.s.f.l.l.n.n.n.K.K.R.R.T.R.T.L.H.a.e.s.R.XXwXtXtXtXtXtXgXuXuXtXtXgXtXtXlXlXtXlXtXtXuXuXuXuXyXwXwX+XuXuXR.e.q.d.i.a.a.d.d.d.d.d.a.d.d.d.d.d.d.d.a.l.d.d.a.U.uXwXT.U.R.h.2.e 1.;.1.1.1.1.1.1.1.5.=.1.1.6.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.3.5.1.5.3.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.1.5.1.5.3.5.1.5.3.5.1.5.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.5.1.1.1.1.5.5.;.1.3.1.1.l =.=.=.e 1.q.7.1.q.h.q.3.1.1.1.1.1.1.1.1.1.1.=.1.l tXtXe 1.=.e 2.e l e e w 7 =.x.3 c S.1X7X6XiXiXaXsXsXaXgXgXaXhXhXgXiX2XC.v q q q 0 q h 3 k l 2.5.5.=.6.6.7.4.4.q.u.0.s.s.g.s.s.f.f.f.f.k.l.l.f.f.f.n.l.a.7.e.z z r.A./.;XeX9X1X@Xv p 4 e.k.k.i.d.a.a.a.a.j.f.a.f.l.K.U.3.m.HXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJX%Xe.z.q.3.3.1.3.2.5.1.1.5.5.3.5.3.1.3.1.1.1.1.1.1.1.1.1.7.7.a.s.0.g.q.q.q.g.g.q.q.g.s.a.s.f.j.l.j.l.n.n.m.K.K.K.K.m.b.w.w.5.;.l i i 1.8.N.oX;XuXkXuXuXtXtXtXlXuXlXlXtXgXtXgXlXlXlXuXuXtXuXuXyX;XXXeXeXM.,.a.F.d.d.d.d.d.d.a.a.d.d.d.d.d.d.d.d.d.k.F.a.z.XXuX.XZ.Y.Z.4.6 1.1.=.l 1.1.1.=.1.5.1.5.1.1.5.1.5.1.5.1.5.1.7.1.5.1.5.1.5.1.5.1.5.5.1.5.1.5.1.5.1.5.3.5.1.5.1.5.1.5.3.5.1.5.3.5.1.5.1.5.1.5.1.5.1.3.5.1.5.3.5.1.5.3.5.1.5.3.5.1.5.3.5.1.5.5.1.5.1.1.1.1.1.;.1.1.1.1.1.e 1.1.7.8.5.;.s.a.7.1.1.1.1.=.1.1.1.1.e ;.1.l =.tXtX1.1.l 1.2.r e e w e e =.2.2.w y.$X6XiXiXiXaXsXsXfXgXaXfXhXaX%X^.h q 0 q q q h k k c l 1.5.5.5.p.6.7.6.7.4.7.7.u.q.a.a.a.g.a.s.a.j.f.f.l.n.f.f.n.H.n.n.4.x Z.%XXsXBXSXSXSXHXJXJXJXHXAX7Xj , r.F.i.k.a.j.s.a.l.a.a.l.N.J.F.4.HXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXE.q.e.q.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.;.1.1.1.7.1.1.;.7.a.h.a.a.h.s.w.a.s.q.a.s.s.a.s.s.0.w.g.s.v.s.0.3.3.1.l c c h , $ O . . . . X + , i 3.7.i.U..XeXlXlXlXgXlXlXlXlXlXMXmXxXxXlXxXlXsXdXyXuXXX+XuXXX8.8.d.i.G.d.a.a.a.a.a.d.d.d.d.k.a.f.k.a.f.a.d.M.rXXXZ.U.J.7.;.1.1.&.6 1.1.1.1.1.1.1.1.1.1.5.1.5.1.5.1.5.1.7.7.1.7.1.7.4.2.1.7.1.2.4.2.1.4.2.4.8.3.1.1.1.l 1.3.1.4.1.3.1.1.1.1.8.6 1.6.7.1.7.1.8.3.1.4.1.4.4.7.5.1.1.1.1.;.5.1.1.5.1.5.1.1.1.1.1.1.1.1.1.5.1.&.=.1.6 &.7.7.1.8.a.8.1.1.1.1.1.1.2.1.1.=.=.e 1.=.1.e tXtXl =.1.e 2.e 6 e 1.1.2.1.1.1.1.1.6 l e x ^.W.W.S.D.x.c q q w k w k c i u u ;.;.1.1.2.l l u i 3.x.1.7.7.7.8.h.d.i.7.s.a.g.g.q.g.s.s.s.s.f.s.l.F.l.c.z i Z.%XsXAXVXVXCXBXCXVXVXSXHXJXSXcXt , 9.e.j.f.a.j.d.f.d.f.k.n.K.n.3.dXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXNXz.h.e.4.1.1.1.1.1.1.;.1.1.1.1.1.1.1.1.1.1.3.1.1.;.1.3.q.f.f.w.a.h.s.s.s.s.s.a.a.s.a.a.a.g.g.g.0.0.:.3.z x l k , : @ o O @ % % > > % % O o o . + < 3 l &.5.k..XyXkXlXlXmXmXMXmXNXmXxXmXzXNXxXlXlXtXyXwX;XwXeXY.1.d.d.p.i.G.a.a.a.a.d.d.d.i.f.a.a.a.a.f.k.d.l.XX=XY.Z.K.a.1.6 1.1.l 1.1.1.1.1.1.1.1.1.1.1.5.1.5.1.5.1.7.1.2.1.7.2.1.1.1.1.e 7 1.1.4.l 4.1.e l u 1.7.l u 3.1.3.3.1.3.1.l 1.l 8.1.1.2.1.e 2.6 1.l 5 1.l l l 6.1.1.1.5.1.1.1.5.5.1.5.1.5.1.1.1.1.1.1.1.1.1.1.6 e =.e 1.7.7.3.a.a.7.1.1.1.1.1.1.1.1.2.1.1.1.1.e =.l tXtX=.l =.l l e e e 1.1.1.1.1.1.1.1.1.1.1.e w w w w q w w w c w c k r =.=.2.1.l l 1.p.p.6.6.7.5.4.8.4.;.5.7.7.:.p.a.a.q.a.s.d.q.g.s.f.f.s.a.h.l.G.k.v p p Z. j M |.%X,X.>.f.XXAXSXAXAXAXZXzXlXlXyXeX;X=XXXXXwXK.u.d.i.d.g.i.g.d.g.a.a.d.a.f.d.a.f.k.k.G.k.m.!.!.U.K.z.6.6 1.1.&.l 1.1.1.1.1.1.1.1.1.5.1.5.1.5.1.1.1.1.1.2.6.7.l u 4.6.2.6.4.2.x.l 4.e h.2.1.4.6 u 8.1.1.3.3.3.1.l 2.4.2.4.4.l r.l k 4.4.2.1.l 8.4.6 1.1.1.1.1.1.5.1.5.1.5.1.5.1.1.1.1.1.1.1.1.1.1.=.1.=.1.8.1.1.q.a.8.7.;.;.1.1.1.1.1.1.1.=.l 1.=.1.e e =.tXtXl =.e e e l 2.2.1.1.1.7.6.1.1.1.1.1.1.l l 1.1.1.1.;.1.1.2.2.;.u.> # o # B a W _.[.[.[.[.{.{.{.{.{.[.`.<.a B o O , h.a.8.a.8.a.h.k.a.a.7.7.u.p.w.9 9 V.*XiXfXsXkXjX8XcXcX8XcXjXjXjXjXjXnXBXFXFXM < F.k.k.a.j.k.k.a.w.f.I.Y.e.AXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX X9.4.4.l 2.2.1.1.1.1.1.3.1.1.1.1.1.1.1.1.1.1.1.;.3.a.j.j.f.s.l.l.n.n.f.v.f.n.n.a.7.5.4.> X X O % j m C.%X*X,X O X X + < p ;.a.,XDXFXVXZXZXBXxXlXdXeXwXwXXXXXXX+Xd.7.i.k.i.d.i.d.d.a.d.d.d.d.d.d.d.a.a.k.a.f.U.!.U.Z.m.7.1.e ;.1.2.1.1.1.1.1.1.1.1.7.1.5.1.5.1.5.7.5.1.1.2.7.7.8.7.8.8.8.h.8.8.h.8.q.8.h.8.8.8.7.3.3.1.1.1.1.1.3.1.4.7.8.8.r.8.r.8.8.8.8.x.x.6.8.r.7.1.7.1.5.1.5.7.5.1.5.3.5.1.1.1.1.1.1.1.1.1.e 2.=.6 e 5.7.1.3.a.a.3.3.1.1.1.1.1.1.1.e 1.1.1.1.1.1.1.1.1.tXtXu 1.=.1.e 1.1.1.1.1.1.1.5.1.5.1.5.1.1.3.1.;.l 1.1.2.5.:.:.6.q % # # d a E _.{.[.[.[.[.[.[.{.[.{.{.OXOXOX`._.a # X O p h.i.i.h.h.x.i.i.u.5.u.i.7.< : M 1XsXsXcXcXcXcXcXcXjXcX8XcXjXjXjXjXBXBXJXjX> 9.k.d.G.f.s.z.a.j.l.H.Y.a.eXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXDXR.9.4.z l l 1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.1.8.j.j.j.j.j.l.j.n.l.l.v.l.n.l.a.5.1.c @ @ 0 j D./.@X2X>X1XeXeXX>X1X # o . . < 6.8.,XZXDXAXZXmXxXlXuXyXwXwX+X+XXX+XoXa.u.d.a.i.d.g.d.d.d.i.G.i.d.d.d.d.a.a.f.a.n.T.R.U.U.r.1.l 6 1.1.1.1.1.1.1.1.1.1.5.1.5.1.5.1.5.1.1.5.7.1.5.1.1.1.1.1.1.1.1.;.;.;.;.7.5.7.1.1.1.1.1.3.5.7.1.1.1.1.1.1.1.1.1.1.1.6.1.1.1.1.1.1.1.1.1.5.1.6.7.5.1.1.5.1.5.1.5.1.5.1.4.1.1.1.1.1.=.2.e 1.;.3.7.3.7.a.q.1.1.1.1.1.;.1.=.1.1.1.1.1.1.1.1.l ;.1.tXtX1.1.1.;.1.1.1.1.7.1.1.5.5.7.2.7.7.1.5.1.1.1.7.3.3.;.2.c 0 # B d E Q _.[.[._._._._._._._._._.)._._.[._.].].OXOX{.{.).# + $ w.0.g.f.,.7.8.8.p.7.6.c + g 1XiXpXsXaXgXgXcXcXaXcXcXcXhXhXhXcXjXnXCXHX5X< h.F.f.s.a.h.l.k.f.n.U.k.m.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXpXe.r.z l 4.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.l l 1.q.h.l.j.n.l.l.n.n.n.n.n.v.n.n.q.1.1.x : O > j V././.%X$X2X*X j m D./././.2X$X2X1XaXmXAXSXFXHXJXJXJXJXJXPXPXLXLXLXLXPXJXFXFXVXVXFXFXSXAXSXAXmXmXgX|.j & . $ 3.7.E.xXzXxXxXlXkXtXeX;X+X+X+XQ.Q.!.Q.f.u.a.a.i.i.d.d.i.i.G.g.d.d.d.d.a.d.d.d.a.H.T.Y.U.m.6.2.e 1.=.1.1.1.1.1.1.1.1.1.5.1.5.1.5.1.1.1.5.5.1.5.1.1.4.7.1.1.1.7.5.5.3.5.5.5.7.1.1.1.1.7.7.4.1.1.1.1.5.1.5.6.7.5.7.5.5.5.7.5.1.1.5.7.5.1.5.5.5.5.7.1.6.1.5.1.5.5.1.5.1.1.1.1.1.1.1.=.1.1.6 1.7.1.5.a.q.;.1.1.;.1.1.1.1.;.1.1.1.1.1.1.1.1.;.1.1.tXtX1.1.1.1.1.1.5.7.7.3.1.7.7.7.7.5.6.7.1.7.7.1.7.7.4.> $ B a W Q Q _.Q Q Q Q Q Q )._.).).)._.Q Q _._._._.Q Q ^ ^ _.[.[.[.[.[.B + 8 z.7.7.8.7.:.u.5.1.b $ > #XiXiXsXiXaXcXcX*X2X*X8XzX9X2X9XcXjXnXnXSX8Xb h.l.a.k.k.F.l.k.k.l.Y.j.9XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXS.r.3.3.1.=.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.0.j.l.s.v.n.n.m.n.n.m.n.m.j.z.9.u 1.6 9 > g N V.D.C././.2X2X6XjXCXSXSXSXFXHXSXSXFXHXHXHXHXHXLXLXLXLXKXLXPXHXSXVXVXFXSXAXAXAXCXmXkX|.g O O &.u.r.eXvXlXlXkXtXyX;XXX+X+XXXoXQ.Q.+XH.u.g.i.g.i.g.i.g.p.d.d.d.d.i.d.a.d.g.d.d.l.Y.R.Y.Z.q.1.2.=.6 1.1.1.1.1.1.1.1.5.1.5.1.5.1.5.7.1.1.1.1.5.5.5.5.1.1.1.1.3.7.5.7.7.5.3.1.7.1.1.5.1.1.;.6 &.;.1.5.7.6.6.7.7.7.7.6.1.7.7.1.6.7.5.7.7.6.7.1.1.1.7.7.5.1.5.1.1.5.5.3.1.1.1.1.1.1.2.e 1.&.2.7.1.5.a.q.;.3.1.1.1.1.1.;.1.1.;.1.l =.l 1.1.1.1.1.tXtX1.1.1.1.1.1.3.3.3.1.1.7.6.2.6.7.7.6.1.6.1.;.7.5.7 # B d `.)._.Q Q Q Q Q ).Q _._.)._.)._._._._._._._._._._._._._._.[.[.[.{.Q # + c q.;.p.0.5.u.5.2.c , X C. j j V.D.S././.1XhXBXDXDXAXAXAXAXAXZXZXCXAXSXSXSXSXHXJXPXLXKXKXLXLXLXFXVXVXAXAXAXAXNXAXNX4XM > O 4 7.u.!.lXfXdXtXuXwXwXwX+XXX!.+XQ.Q.!.P.g.i.i.i.d.g.d.d.i.d.d.d.d.d.d.i.d.d.d.d.l.Y.R.K.Z.h.1.l 1.=.1.1.1.1.1.1.2.1.1.5.1.5.1.7.7.1.5.1.5.1.7.1.1.1.1.1.1.1.1.5.3.3.;.7.5.5.2.4.l 5 3 c c c b k 3 w 2.2.8.5.5.5.2.7.6.5.5.2.7.1.1.5.1.7.7.2.7.1.7.6.7.1.1.5.1.1.1.1.1.1.1.1.1.e e 1.=.1.7.1.1.7.a.7.;.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.=.;.1.tXtX1.1.3.7.5.3.5.5.7.5.7.5.7.1.5.6.5.6.2.;.7.=.8.p # # d ! E Q Q E E Q Q Q ).).).).Q ).).).Q Q Q _.Q _.Q ).Q _._._.^ ^ [.[.[.{.<.+ @ 9.p.6.7.5.5.5.7.1.z O > *XiXdXsX7XaXzXnXcX*X*X9X9X9XcXjXjXjXnXCXVX2X9.k.a.h.k.a.a.f.l.l.J.n.S.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXAXA.9.z l 1.1.=.1.1.1.1.1.1.1.1.1.1.1.1.1.;.2.e 4.w.n.s.b.m.m.m.n.n.n.n.m.J.m.q.1.6.k @ $ g j m V.D.C./.1XmXAXBXBXCXBXzXjXhXhXhXzXzXjXzXBXmXnXBXVXVXHXLXKXKXLXLXPXHXSXAXBXZXAXZXCXBXhX#Xn % $ k p.L.eXgXtXuXyXwXwXwX+XXXoX+XQ.Q.Q.Q.a.i.i.p.d.i.i.i.d.d.i.d.d.d.d.d.a.f.d.d.f.K.K.U.m.r.1.6 1.=.l 1.1.1.1.1.1.5.1.5.5.1.1.5.5.5.1.5.1.5.1.5.5.5.1.7.5.5.5.;.:.3.3.7.=.5.2.l q c V.S.%X*X*X%XD.b q q 1.p.5.5.5.5.6.5.5.7.6.1.7.6.1.5.5.5.1.6.5.1.5.5.5.1.5.1.1.1.1.1.1.;.1.1.=.1.6 1.3.1.1.8.q.8.1.1.1.1.1.1.1.=.1.l =.1.1.;.1.l 1.1.1.1.tXuX1.1.1.7.5.5.7.5.7.5.7.5.7.5.5.6.1.2.4.;.>.6.2.: o d s ! E E Q E W Q W Q E Q Q Q ).Q Q )._.Q Q _.Q _._._._._._._._._._.[.[.[.{.B . 3 x.2.3.5.3.3.1.1.1.< O |.7XiXiX7XaXhXzXcX9X5X7X9X7XcXjXnXnXnXnXVX7Xr.d.f.d.k.h.d.j.j.l.J.m.T.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXBXm.e.l l 1.3.1.=.1.1.1.1.1.1.1.1.1.1.1.1.1.1.e 4.h.b.s.j.m.K.K.m.n.n.n.m.J.a.3.l 2., O > g v m m D./. 5.=.K.wX4X;XwXXXwX=XXXoXXXoXQ.Q.P.Q.I.p.d.i.i.g.i.d.d.d.i.d.i.d.d.d.j.a.d.f.d.J.U.Y.U.h.2.1.1.=.1.1.1.1.1.1.1.1.1.5.7.1.1.6.7.1.1.5.1.5.1.5.6.7.7.6.7.5.7.1.1.1.5.l k l q y.$XsXzXhXzXjXzXBXAXDXNX/.k 5 2.7.1.7.5.3.5.4.7.2.7.1.5.1.1.5.7.5.6.5.5.7.5.1.5.1.1.1.1.1.=.1.1.1.=.2.6 1.7.1.1.0.7.5.1.1.1.1.l 1.1.1.1.1.1.l 1.;.1.1.1.1.;.l tXtX1.1.1.5.5.7.7.7.7.5.7.:.7.5.3.6.1.2.l 7.1.x : + d ! W E ! ! ! Q Q W Q Q Q Q Q Q Q Q Q Q _.Q Q Q ).).)._.Q _._._._.Q _._._._.{.{.d X 4 g.7.3.7.3.5.;.3.x + % *XiXiX7X7XiXcXzXcX9X9X9XcXjXjXjXcXnXnXCXnXZ.g.f.a.k.h.k.j.a.l.J.n.Z.JXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXlXt.e.l l l 1.1.1.1.1.1.1.1.1.1.1.1.1.1.;.1.1.l 8.h.v.s.n.n.m.n.m.K.K.n.n.f.q.l c < + > g v j v C.1XfXxXsXsX9X2X1XhXZXBXzX7X*X@XS.S.S.S.S./.$X9X8XBXFXPXJXFXHXHXPXLXKXKXJXVXBXmXmXmXzXxX l 5.a.XX;X=XwX;XXXXX+XXXoXQ.Q.Q.P.Q.Y.p.i.i.i.d.i.i.i.g.i.d.d.d.d.d.j.d.d.d.a.J.R.U.U.z.7.l 1.1.1.1.1.1.1.1.1.5.1.5.1.5.1.5.6.1.1.5.5.1.5.1.7.6.6.7.6.7.7.1.5.5.1.2.k , b XpXsXaX7X7X8XcXcXhXBXSXmXA.q e 6.5.5.3.7.5.5.5.5.5.5.1.7.2.7.1.6.5.5.3.6.1.5.1.1.1.1.1.;.1.u 1.l =.1.=.1.7.1.1.0.7.5.3.1.1.=.1.&.6 1.1.1.1.l 1.1.1.l 1.1.1.=.tXtX1.1.1.1.7.7.5.7.7.3.5.7.7.5.5.5.1.5.3.;.6.q o B d W W E ! ! ! Q ! Q Q W E Q E Q Q Q Q Q Q ).).).Q ).).)._._._._.Q _.Q _._.^ [.{.`.O # u.7.7.5.3.3.5.;.z : O @XiXeX7X7X7XcXhXaX9X5X5X8XjXcXjXcXjXnXCXZX~.i.f.a.k.j.k.a.f.l.H.l.Z.SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXsXj.e.i u 1.1.1.1.1.1.1.1.1.1.1.1.1.1.=.1.1.e l 8.h.b.n.n.n.M.m.m.n.n.m.m.q.8.1.3 # @ f g j v V.2XpXpXiXiX>X%X q 2.5.T.+XXXXXXXXXXXQ.oXQ.Q.Q.Q.P.Q.Y.i.p.d.d.i.d.d.i.d.d.g.i.d.a.i.h.a.d.d.g.H.R.U.U.z.7.1.&.1.=.1.1.1.1.1.1.1.1.1.5.1.1.7.7.1.5.1.1.5.1.7.7.2.5.1.2.1.5.1.6.p.6.4., < V.,XsX6XiXiX7XiX7XaXcXcXnXSX6Xv q 1.5.8.;.3.2.5.4.5.1.7.5.7.5.5.5.3.4.5.5.5.5.1.1.1.;.1.1.1.1.1.&.1.e 1.6 1.5.1.1.q.7.5.1.1.l 1.1.1.1.1.&.1.1.1.1.=.1.=.1.1.1.1.tXtX1.1.1.7.7.;.7.5.7.5.7.5.5.1.1.5.5.5.3.&.x.: o B a W W ! ! ! Q ! Q ! W Q E E E E Q Q Q Q ).Q Q ).).).).)._.Q Q _._._._.).Q _.[.[.{.B + u 7.7.7.7.5.;.7.3.4 + m 6XbX6XaXpXcXcX7X6X9X*X9XjXjXnXjXcXjXnXAX!.a.s.a.k.h.h.j.f.k.F.l.Z.ZXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXh.4.u l 1.1.1.1.1.1.1.1.1.1.1.1.1.1.=.1.1.1.2.8.j.j.b.m.n.K.M.m.n.n.n.b.4.;.7.< o % 0 h j m S.>XiX,XXbXkXsXsXsXsXsX9X2X@XD.m D.5XVXHXJXVXIXPXLXKXLXVXBXzXmXNXxXcX1X/.g 0 c ;.l.XXXXXXXXXXXXoXQ.Q.Q.P.P.Q.L.Y.d.i.a.a.i.i.d.d.p.d.i.d.d.i.d.d.a.a.d.g.J.T.U.U.z.8.l &.1.1.1.1.1.1.1.1.5.1.5.1.5.5.7.6.1.1.7.5.1.5.1.7.5.5.7.7.5.7.2.5.-.=.l < > %XiXbXX1X>X%XS.,XfXsX$XS./.>XeXdXsXdXsXsXsXfXhXhXzXhXcX6X2XD.m /.nXHXHXSXVXPXLXLXPXSXnXzXmXzXhX4X@Xm 0 h l 7.Q.oX!.XXQ.Q.oXQ.Q.Q.Q.P.P.P.K.G.i.a.i.d.i.d.i.d.i.d.i.a.d.d.a.i.d.G.a.n.T.U.U.z.8.2.1.&.1.1.1.1.1.1.1.1.1.5.5.1.1.1.7.1.5.1.1.5.1.5.5.1.1.1.1.1.5.1.=.=.=.q @ j >XeX9X 7.7.7.5.5.5.3.7.k + f *X3X3X6XaX8X9X1X8XcX*X*X7XnXcXjXjXjXnXZXW.d.s.j.k.k.f.a.f.k.n.H.Z.mXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKX KXKXKXKXKXKXKXKXKXKXKXwXt.x u u 1.1.1.;.KXKX1.1.1.1.1.1.=.1.1.l l 5 z a.j.l.n.n.b.m.m.n.J.K.f.7.-.2.> X @ f h j j S.2X*X$XS.S.-XsXsX$XW.%X,XeXbX9X6XaXzXzXBXAXAXBXBXMXnXhXcXbX/.^./.8XHXHXVXHXPXLXLXHXCXzXzXzXlXyX$XC.f , k ;.K.Q.Q.Q.Q.Q.Q.Q.Q.Q.P.Y.P.P.K.l.i.i.d.d.i.d.d.d.i.a.h.d.a.k.k.d.d.g.d.H.R.R.U.m.8.l e =.1.1.1.1.1.1.1.5.1.5.1.5.1.5.5.5.1.5.5.1.5.1.7.7.2.7.1.7.5.1.5.5.2.1 + D.1X9XiX6X &X6X3XpXaX9X1X*XhXnX7X%X*XjXhXcXjXjXnXZXW.s.d.a.j.k.f.k.f.k.n.H.J.hXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKX KXKXKXKXKXKXKXKXKXKXKX;Xz.4.i u 1.1.&.1.KXKX1.=.1.1.1.1.l l 2.1.l u i w.j.l.n.b.n.n.n.m.n.n.f.7.p.e O X % f g j m @X2X2X/.Z.S.X1X1X f f j D.%X/./.D.Z.>XsXX2X2X>XsXxXxXaX9X$X2X/.2X9XjXBXSXJXFXBXzXhX2XV./.jXJXFXSXPXLXLXJXBXhXxXxXsX f f j S./.S.S.V.S.sXiX%X%X-X%X%X>XsXkXbX/.S.S.S.D.D.D.D.D./.9XCXJXJXBXnXfX%XM @XBXJXSXHXPXPXPXSXxXxXlXaX1X%XV.0 , h 3.l.P.T.P.P.P.Q.Y.P.K.K.H.J.H.f.i.i.i.i.g.d.a.d.i.a.k.i.a.k.h.i.d.d.g.G.K.Y.U.m.8.2.2.=.1.1.1.1.1.1.1.1.1.5.1.5.1.5.7.7.1.5.5.1.5.1.6.5.5.5.5.5.1.7.1.1.2.q + M 0 g m /.S.C.V.V.%XdX>XW.%X%XS.%XdXsX1X%X/.$X2X>X1X9X*X2X/.D.m /.cXJXJXBXxXaX/.V.9XFXHXSXHXPXLXSXzXhXfXpX1X%XD.f % , 3.j.L.Y.Q.Y.P.Y.Y.P.L.J.n.H.H.f.i.i.i.d.i.a.i.a.a.d.a.h.k.a.h.i.k.d.a.l.K.Y.U.z.4.1.=.=.1.1.1.1.1.1.1.5.;.1.5.1.1.5.5.1.5.1.1.5.1.5.3.5.3.5.2.5.5.1.1.1.2.k + j >X f g D./.D.D.m V.bXdX%X/.%XC.A.,XsX,X$X>XbXdXbXdXaXiXaXcXcX1X/.V.D.7XHXHXBXxX9XD.C.nXHXSXHXJXLXJXBXhXhXaX4X2XC.g $ , 2.a.H.L.P.K.Y.P.Y.K.L.H.n.n.H.d.i.i.p.g.a.i.i.a.i.a.a.a.h.d.h.d.k.d.a.l.K.R.U.m.7.2.e 2.1.1.1.1.1.1.1.1.5.5.1.5.1.7.5.1.1.5.7.1.1.1.7.5.6.1.7.5.1.1.1.2.2.k < % 2X1XXq.g.d.g.d.a.f.a.d.f.n.n.m.hXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKX KXKXKX KXKX KXKX FXE.KXKXi l KXKX1.1.KXKX1.u KXKX1.1.KXKX2.l KXKXl q.KXKXf.s.v.s.l.n.l.a.1.1.4 . & > 0 j C.C.D.m v S.fXXS.g @ $ l 7.n.K.K.K.L.Y.L.L.H.H.l.n.n.f.i.i.a.i.a.i.i.d.a.d.d.i.d.d.d.d.d.d.a.l.K.Y.U.m.7.=.l =.1.1.1.1.1.1.1.1.1.5.5.1.5.7.5.1.5.1.1.1.1.5.5.7.2.7.5.5.1.=.1.=.2.k q @ D.1X9X1XX9XaXBXZXAXSXHXSXnXcXcX2XV.S.ZXJXVXnX9XD.S.ZXJXSXHXJXHXVXhXhXsXiX>XS.g $ O i 1.j.J.J.K.L.L.J.L.J.z.l.k.k.k.u.i.u.i.i.a.i.i.i.i.i.i.i.i.d.d.d.a.a.l.K.Y.Z.z.4.1.l e =.1.1.1.1.1.1.1.1.1.1.5.1.6.3.6.7.1.6.7.5.5.1.7.5.5.1.5.1.6.=.1.z z w 8 $ @X7X>X j /.V.m v m X%X9XxXfXaX*X/.9XcXGXJXZXhXhX$X^.*XHXSXnXcX/.D.gXHXSXFXHXJXVXgXsXsXiX>XC.g O O 4 ;.a.J.J.J.J.L.J.F.H.l.j.f.j.h.i.i.i.i.i.a.i.i.d.i.d.i.i.d.i.d.d.a.a.l.K.U.U.z.3.l l =.=.;.1.&.1.l 1.1.1.1.1.5.1.7.7.1.7.5.6.1.7.2.6.1.5.7.6.7.5.6.1.1.2.x e w < 0 /.iX9X7X v /.m v j D.sXXS./.pXsX2XS.D.m m /.1XBXGXnXnXcXD.C.BXJXBXnX>XV.*XSXVXSXHXHXSXcXaXsXiX2XD.g O O i u a.J.n.H.H.H.H.F.n.l.a.a.a.a.u.i.a.i.u.i.d.i.d.i.d.d.d.d.k.i.a.a.a.l.Y.U.m.z.4.l u 1.1.1.1.1.1.1.1.1.1.1.5.1.1.5.5.5.2.5.3.7.5.5.1.7.5.2.5.1.5.5.5.2.2.c l 2.t < 0 V.@X7X8X8XaXiX9X/.v q c l 2.1.7.5.5.:.5.5.5.5.1.7.5.1.6.5.5.1.5.5.7.2.3.1.1.1.1.1.1.1.1.1.1.2.e e e l 1.1.5.3.1.1.1.1.=.2.=.1.1.1.1.1.1.l e e 2.2.=.=.=.=.tXtX=.=.5.=.=.=.2.4.8.7.4.3.1.1.1.1.1.5.7.1.$ o B a a a a a a a a a a a a W ! ! ! E ! a a a a a a a s W W ).`.s W W s ).W ).s ).).)._.[.d < a.h.a.h.i.8.8.d.8.h o m 4XkXdXaXaXaXaXsXhXgX8XcXjXcXcXnXzX!.8.h.d.d.a.a.d.d.d.f.l.F.F.l.zXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXdXm C.v v j C.lX,XS.S.v m iXfX>X,X%XV.%XsX1X$X%X2X/.C.v m *XDXSXzXzX2Xm 9XJXAXzX6XD.@XAXSXVXSXHXSXjXaXsXiX$XM % + : k ;.a.J.J.J.H.H.n.l.l.k.f.a.h.h.i.i.i.i.a.a.i.i.i.d.i.d.i.d.k.i.d.a.a.l.K.Y.m.z.4.l 1.1.1.l 1.;.1.1.1.1.1.5.1.5.5.7.2.5.6.3.6.1.7.7.2.5.5.5.5.5.5.1.1.1.1.l 1.l c q , , q h D.dXtX^.c q q r z 2.2.7.7.3.:.5.7.;.5.7.3.:.3.5.7.1.5.7.5.1.1.5.1.1.1.;.1.1.1.&.&.1.1.1.e e e l 1.1.1.7.1.;.1.1.l =.2.1.2.2.=.1.2.=.=.=.&.:.;.;.=.=.eXuX-.=.=.=.x.6.7.5.5.p.6.1.1.1.1.1.3.5.3.5.> o B a a a a a a a a a a W s W ! W W W W a a s s W a a a s ).s <.s W ).s ).s ).).W s ).).`.d 4 s.f.f.a.q.8.a.G.a.b + < 6XsXiXaXaXfXfXhXhXgX8XgXjXcXjXnXbXz.8.h.d.d.a.f.f.a.f.f.l.F.l.h.hXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXuXtXtXtXtXtXtXtXtXtXtXtXyXtXtXtXtXtXtXtXtXtXtXtXtXtXuXtXtXtXtXtXtXtXtXtXdXtXtXtXtXtXm C.m j h S.xX:XS.V.j D.gXsX,X;XD.V.1XcX2X>XiXiXpXiX/.v D.jXJXnXzXiXD.2XSXSXzX7XS.@XBXSXVXSXHXSXhX7XaXyX%Xn % + 1 l 1.s.m.l.l.H.n.n.l.l.f.s.s.a.a.u.i.i.a.u.i.d.i.d.i.k.i.d.d.d.i.d.i.i.f.K.J.Z.z.4.l e l 1.1.1.1.1.1.1.1.1.1.5.1.1.5.7.5.5.5.5.1.1.5.7.5.1.7.4.5.5.3.3.1.;.;.1.1.6 c x 3 , q , dXtX1 3 l =.=.2.6.1.7.3.7.5.3.7.7.5.3.5.5.3.7.5.3.5.1.5.7.5.4.1.1.1.1.1.1.1.1.l 1.l &.e e e e 1.1.1.3.1.1.1.1.1.2.=.1.1.2.2.1.2.=.-.5.1.;.k w t 0 eXbX0 q q 8 r l 7.:.:.p.-.1.1.1.3.1.1.1.3.7., & B a a a a a a a a a s a a W ! ! W E W a a `.`.).s a s s W s s ).s s ).s ).W s ).<.)._.W d u f.f.f.s.s.a.a.a.a.9.4 X D.cXaXpXaXaXsXhXsXhXgXhXcXhXnXzX-Xp.h.k.d.a.a.d.a.f.a.k.l.l.l.j.dXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXgXR.P.h.l e l 6 u 1.1.1.1.1.1.1.1.;.=.1.l e 6 7 3 4.8.g.a.w.s.f.f.s.f.f.h.7.=.l 3 O . & v C.j j h |.xX&XS.V.h S.xXiX;X%Xm D.cXsX$X>XeXXSXBXhXaXS.@XSXSXjXaX/.S.BXSXVXSXHXSXgX9XbX,XS.g @ : w l 3.f.l.l.n.H.n.l.f.f.a.a.q.a.a.u.i.i.i.i.a.i.i.i.d.i.i.i.d.d.i.d.d.a.k.K.U.m.z.3.1.1.1.1.&.1.1.1.1.1.5.1.7.1.5.1.1.7.1.4.5.5.7.5.5.1.5.7.6.1.5.7.3.3.;.1.1.1.5.7.6 4.2.5 w c tXtX=.6.1.&.1.5.5.5.5.:.7.:.5.3.3.5.:.5.3.5.7.5.7.5.5.1.1.1.5.1.1.1.1.1.1.1.1.1.1.6 1.e e e 1.1.1.1.7.1.;.1.1.=.2.1.=.=.1.1.=.1.6.6.4.k q 0 y V V bXbXV y y - 0 0 h z 4.5.5.5.1.5.5.1.3.1.u u.c % # a a d a a a a a a a W ! a ! ! ! W W a a E ).).s a s s ).).).).s ).s ).W ).).).<.<._.a 8 7.f.f.f.a.a.a.j.a.s.a.z.: : #XaXpXaXaXgXfXhXhXcXhXhXzXxX,Xz.i.k.a.s.a.f.d.a.f.a.f.F.J.l.l.dXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX1XT.R.j.l 6 l l ;.1.1.1.;.1.1.1.1.1.l e l e w 7 3 1.q.q.g.s.s.j.a.s.s.f.k.8.1.e c + & j C.n j h @XxX>XC.V.h S.BXiX-X/.v C.cXbX2X>X,XXD.f O < c l 8.l.J.l.n.H.l.f.f.s.a.q.7.a.a.i.i.u.a.a.i.d.i.i.i.i.d.d.i.d.i.d.i.a.k.J.U.m.j.3.u e 1.1.1.1.1.1.1.1.1.1.1.7.1.5.7.1.6.5.5.5.3.5.1.7.2.5.1.7.5.5.3.;.1.1.7.5.5.;.5.1.1.7.6.=.tXtX5.;.5.8.5.5.5.5.5.3.7.3.7.:.5.7.3.5.5.5.3.5.3.5.3.7.5.7.1.1.1.1.1.1.1.1.1.1.1.1.1.e e e e l 1.1.3.1.;.1.2.e 1.2.1.=.1.1.1.=.1.k 1 0 - y V K K K P K K K H V - 0 0 h l 1.7.1.1.3.2.7.5.u 7.4.% # d a a a a a a a a s s a a ! ! ! E `.! ! W E ).`.<.E E ).W ).<.).W s <.W s s ).s ).Q d 1 k.f.f.f.d.a.a.k.w.n.u.k.4.: g *XaXaXaXaXgXcXgXcXcXzXxXbXA.2.k.i.h.a.q.G.a.d.f.a.a.H.z.l.J.yXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXXXP.P.b.4.i i l 1.1.l e u 1.=.6 1.l l e e w w q 2 l q.7.g.a.g.h.a.a.a.f.s.s.z 7 2.< X o 0 C.m j h S.zX>XD.m h C.BXsX%XS.j D.zXpX%X>X>X1XbX1X9X2Xm @XBXZXxXcXS.@XAXSXzXhX%XC.BXVXCXFXFXSX9X>X1X@Xm % $ e &.1.h.m.l.l.n.l.k.j.h.a.a.7.a.d.i.i.u.i.i.i.i.i.d.i.d.i.d.d.i.k.k.d.a.a.l.K.m.Z.h.l l u 1.=.1.;.1.1.=.1.1.5.5.1.5.1.5.1.1.5.1.5.5.5.7.7.7.7.3.1.1.;.5.3.1.1.3.1.5.2.2.6.1.2.1.6.dXtX5.6.6.5.6.7.5.7.7.5.5.5.7.7.5.3.:.7.3.7.7.7.7.;.7.5.5.1.1.1.1.1.1.1.1.6 1.l 1.6 1.2.l e =.l 1.1.1.1.l 1.1.1.=.1.u =.6.5.5.-.e < - y V K K P P K P I I I T P K H = 0 h 3.p.:.;.2.2.6.:.z 3.x.1 # d a a a a a a a a a a s ! s W s W W W W W s ).W ).).).W W s s <.s `.W `.`.W <.W Q a d =.F.l.f.f.d.d.d.f.f.f.f.s.a.a.7 y.>XaXaX8XjX8XjXjXzXxX;Xz.7.q.a.a.a.d.a.f.f.l.f.a.f.n.n.s.K.3XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXoXP.P.N.4.i k l 1.&.1.1.1.1.l 1.e l 6 e e e 5 q 2 k 8.g.g.g.s.j.s.s.f.j.a.s.l 1.1.1 O X > D.V.j f D.hX1XD.V.f C.BXkX/.S.j V.hXhX$X$X2X2X1X ~ ~ ! a d a a a a a a a s s W W W s s W ).s ).<.s s ).s ).<.E E W W s E E `.E E d d z.G.l.f.f.f.f.f.f.f.l.f.a.a.k.j.c v S.>XiXaXaXcXiX2XW.y.4.h.f.a.f.d.a.d.d.d.f.k.a.f.l.l.s.L.4XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXA.P.P.M.e.i 5 l u 6 1.1.u u 1.l 1.l l l e e w w 3 3 3.0.q.0.a.s.s.s.f.f.a.s.1.1.e c $ . $ m V.j h m aX7XD.V.h m zXNX%XD.v v 1XZXcX$X/.%X2X>X2X%X@XaXxX $ h k 1.a.l.l.l.l.l.l.s.h.h.a.a.8.a.d.u.i.i.d.g.p.i.i.i.i.d.i.d.i.k.k.x.k.a.a.l.J.Z.Z.h.1.;.e 1.1.=.1.1.l 1.1.1.1.7.1.5.1.7.1.5.5.1.1.7.5.3.:.3.5.5.5.5.7.7.7.7.3.3.7.7.7.7.7.7.7.7.8.tXtX7.7.7.5.5.5.:.3.:.7.;.7.7.7.7.7.7.7.7.7.7.7.5.7.7.7.3.1.5.1.1.1.1.1.1.1.l l 1.e 1.c e e 1.1.1.1.z l 1.1.1.1.2.1.=.-.=.;.h < - J H K K K P K K P P P P P T (.UX(.T L V = 0 c ;.;.5.2.z 3.1.p.x.q $ n ~ ~ ~ ! ! s s a a a s ! W W s ).s s W s ).<.).<.<.).<.).W E E W W E `.).`.).s p z l.F.l.f.G.f.f.f.f.G.l.f.k.l.j.l.r.l 2 c z.Z.tXtXy.c l 8.k.a.u.a.d.a.a.d.a.f.a.f.f.l.l.j.n.P.:XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXB.n.K.U.e.k i l 1.&.l 1.1.e 1.=.1.e l l e w 5 q q 3 l w.0.0.s.a.a.s.a.a.s.a.8.1.6 l , X o j D.v j v 1XhXS.V.v v 9XAXX$X$X>X1X6XhX3X>XaX$XC.aXAXgXhXpXS.6XAXCXVXSXSX7X@X/.D.f % < c l 3.k.z.l.l.l.k.f.f.a.q.q.8.8.a.i.p.g.p.i.i.g.d.i.i.g.d.d.i.i.i.k.i.a.h.a.k.J.K.Z.h.1.u l 1.1.6 1.1.;.1.1.1.5.1.5.1.5.1.5.1.5.7.7.7.7.5.7.5.7.5.7.7.7.5.5.5.5.7.7.5.1.1.1.1.1.7.5.tXtX7.7.7.7.7.5.7.5.7.7.7.7.7.7.5.5.7.5.7.5.7.7.7.;.7.5.5.1.1.1.1.1.1.1.l 1.1.1.6 1.2.=.l e e 1.1.1.3.3.l 2.1.1.2.e 1.-.5.i < - J K K K K K K K K K K P K K K K T T T T L H y 0 i 7.5.z c 1.7.p.x.r < > ~ ~ ~ ~ ~ ~ ~ ~ ~ ! ! ! ! W s s W s <.).s s s ).s s <.<.).).`.`.`.`.`.`.).W d k h.f.H.H.H.H.v.f.f.f.H.f.l.n.l.h.h.8.e 6 e 5 5 tXdXc r.q.i.d.d.d.a.s.a.f.a.a.d.a.a.f.l.l.k.K.R. XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXB.L.P.K.t.z w l l =.1.1.l 1.1.6 l l l e e w 5 q q 1 6 6.u.0.a.s.s.s.s.a.a.s.k.1.u k c + . f D.m j j |.zX2XV.v j S.CXxXS.V.v b S.gXVXSXBXzXfXsXcXbX2X$X : q 2.u q.l.l.k.l.j.f.s.a.w.q.a.7.q.a.i.u.u.a.i.i.i.a.d.g.i.i.d.i.d.i.d.i.d.i.a.l.J.U.U.z.1.l 1.1.=.1.1.1.1.1.1.1.1.1.5.1.5.1.5.7.5.5.7.6.7.1.1.5.3.5.5.5.5.5.3.3.3.3.5.3.7.5.3.7.7.7.3.tXtX7.7.7.7.7.5.5.5.5.5.5.5.7.5.7.7.7.7.5.7.7.7.7.5.7.5.5.1.7.1.1.1.1.1.l 1.l 1.e 1.e e l e =.1.1.1.1.l 1.l 1.1.2.2.=.=.1.1 @ = H H K K K K K K K K K K K K K P K K K I P P K - 1 3.;.2.4.1.i.5.-.x.q $ n n / ~ ~ '.'.}.'.~ ~ ~ ~ s ~ ! ~ ! ! `.].! `.`.`.`.].].`.].].].].].].`.`.s u x.l.H.H.H.H.H.v.G.v.H.F.v.H.v.f.l.l.8.l u l 1.2.tXtX8.a.a.i.a.a.a.a.a.d.a.a.f.a.f.f.f.l.f.f.U.R..XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXA.v.M.K.b.4.i l 1.1.l l 1.6 1.6 1.1.6 e e e w q q 1 7 7.7.q.a.0.0.a.a.g.a.s.k.7.l l l < . O n M j j V.cXsXD.v j m 8XAX6XC.m v v D.*XaXcXhXaX l =.3.h.l.l.f.f.j.a.a.a.q.8.q.7.i.a.8.i.i.i.a.i.u.i.i.i.i.d.i.d.i.d.k.d.k.i.a.l.K.U.U.r.1.2.l 1.1.u 1.1.1.1.1.1.1.1.1.5.1.5.1.5.1.7.5.7.6.7.5.7.5.5.7.7.7.7.7.7.7.8.7.7.0.8.8.8.8.8.q.tXtX8.8.8.8.8.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.5.7.7.5.;.7.1.1.1.1.1.1.1.1.l 1.;.1.l =.c =.e 2.1.1.;.l 3.l 1.l 1.1.1.6 l w : - V K K K K K K K K K K K K K K K K K K K K P P P V 0 i 3.1.2.=.7.:.=.x.2., d n / ~ ~ ~ './ ~ }.}.'.'.'.'.].~ ].].'.'.].].'.'.].'.].].].].].].].`.`.<.p u.f.v.I.n.H.H.H.H.f.H.H.G.H.H.v.n.H.f.l k z l l u tXtXi.a.h.h.h.x.s.a.d.a.a.f.a.f.d.k.k.n.f.s.T.L. XPXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXM.v.v.M.N.9.k e ;.1.l 1.;.l 1.1.u l 1.e e w 5 w q 1 7 3.7.q.w.u.q.a.q.a.q.a.d.a.l 1.l 3 X . g D.n j j *XmX$Xm v j @XBXZX2XV.m v j m C././.S.S.S.W.$X:X2X%X6XhX9X9X7X>X/.1XBXzXjXCXAX*XC.M j : $ , =.=.8.j.f.d.f.f.f.s.s.a.0.8.a.7.8.a.7.i.i.u.i.a.a.a.i.d.g.d.d.i.d.d.k.k.d.i.a.l.J.U.U.z.1.l 1.=.1.1.=.1.1.1.1.1.1.5.5.5.1.1.1.7.5.7.5.6.7.7.8.8.8.i.s.a.a.a.a.a.h.a.a.f.a.a.a.a.i.a.a.tXtXa.a.a.a.a.a.s.a.a.a.a.a.8.0.7.7.8.8.i.7.7.5.5.5.7.7.5.5.5.1.1.1.1.2.2.1.1.l =.l l e l e 1.1.1.1.3.3.l 1.1.1.5.2.6 l , @ y H K K K K K K K P K K K K K K K K K K K P P P P H - < :.;.1.6.l i :.p.x.i B g / ~ ~ ~ n n '.~ }.'.'.'.'.~ ~ '.~ '.'.'.'.'.'.'.'.}.].].].].].].`.W a ,.i.H.I.H.n.H.H.H.H.H.H.H.G.H.H.v.H.n.0.z k c k x l tXtXa.7.a.a.a.r.a.d.a.f.a.f.d.a.k.k.f.n.s.s.Q.K.%XPXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXn.v.v.n.K.w.l 5 k l =.e 1.e l e 1.e l e e e w q 1 1 1 w 4.7.>.q.q.q.q.g.q.q.g.a.5.1.l c : . @ D.V.b j M zXcXD.v v j %XZXAX1XD.m m m v y.V.D.S./.$X$X%X$X6XsXX @ , c e 1.s.s.f.f.j.a.a.a.a.a.a.q.5.7.a.i.i.u.a.i.i.u.i.i.i.i.i.a.p.i.i.i.p.k.i.i.a.f.K.Y.J.j.1.1.1.2.&.5.&.5.1.=.l ;.:.;.:.5.5.u.7.4.4.7.8.i.a.h.a.s.q.a.q.e.0.i.i.a.8.8.7.7.5.u.u.7.:.5.5.tXtXp.u.p.u.p.7.5.7.7.7.i.d.q.e.e.0.e.8.q.q.8.u.7.7.7.7.7.u.p.5.1.1.l l =.6 2.1.=.=.=.l 5 l 1.1.1.:.3.l 3.1.1.=.1.=.1.e @ - V H K K K K K K K P H H H K K K K K K K K K K K P K y $ i 1.1.1.1.4.4.4.3.7.z p d / ~ ~ '.'.'./ }.}./ ~ ~ B./ }.}.'.}.'.].].'.}.'.].].}.].].].`.<.s g.g.f.v.I.I.I.I.H.I.H.L.H.H.H.H.H.v.H.j.q.x x z l 2.4.tXtXa.a.a.a.a.a.a.a.a.a.d.a.f.d.a.a.n.f.e.B.R.L. XJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFXn.B.v.n.m.h.3.5 e l 1.l 1.e =.=.l 6 l e e e w q 2 q 1 q 3.7.,.g.g.q.q.q.g.a.q.a.7.1.l c , . o g D.V.j v *XmX2Xv m v m 2XBXDXzX2XD.V.D.C.S.S.@X%X%X2XXX%X%X%X2X1XiXsXfXpX2X$X1X6X1X%X>XzXhXaXBXCXcXC.j g > + : r =.2.h.a.s.w.a.f.a.s.a.a.8.q.8.7.a.a.i.u.g.i.i.g.i.g.i.i.i.d.i.i.i.i.d.p.k.i.h.h.k.J.Y.U.m.8.e e =.u l u 3.3.3.3.8.h.a.i.x.i.7.5.&.&.7 7 5 u x x.t.^.A.W.E.-X*X1X7XcXnXBXZXVXVXSXSXHXJXJXuXkXJXJXHXHXSXSXZXCXnXcX6X*X$X/.W.A.Z.y.y.4.1.7 7 7 7 6 6 e l 1.5.=.=.5.1.7.1.l k k i l w l 1.1.;.5.1.l l 1.1.1.2.=.2.1 @ = J K K K K K K K K K H J H K H V H K K K K K P K P P H - 1 1.1.1.1.3.3.1.7.5.x l i f p n / ~ ~ / / / ~ '.'.'.'.'.'.'.].'.}.}.'.}.}.'.'.].].`.s <.,.h.f.n.H.I.I.n.B.L.L.P.I.L.I.I.I.I.P.P.L.w.u k z l 1.4.7.tXtXa.a.a.a.a.a.a.a.a.f.f.a.a.f.d.l.f.0.N.B.M.P.oXSXKXKXKXKXKXKXKXKXKXKXKXKX KXKX KXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXAXl.n.b.s.n.m.r.e 5 e l e =.l =.=.l l e l e w w 7 2 2 q 8 3 4.0.u.0.g.u.q.g.0.g.7.q.i.1.c c : . . % D.V.v v S.hXhX/.v m m v V.2XzXAXZXCXzXhXhXhXzXhXaX>X%X%XX%X@X/.%X>XX%XS.y.q 8 8 7 6 e 2.e l w l 1.5.5.7.3.3.l 1.1.2.=.6.l < & V H K K K K K V K K K H V V H H V H K K K K P K K K P P y < 1.6.7.5.7.2.7.6.7.8.2.1.1.z p d d s '.].}.}.}.}.B.~ / }.}.}.}.}.}.}.}.].'.<.s s ,.p.G.H.H.H.H.H.n.L.P.I.P.P.P.P.P.P.P.P.P.P.I.e.u 4.4.4.4.7.i.a.tXtXa.a.a.a.a.d.a.a.a.d.f.a.f.d.k.l.s.s.M.B.v.M. XSXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXmXb.B.b.s.s.N.z.4.e e 2.2.e 2.e 1.e 6 l e w w 7 q w 2 q 1 8 2 l 7.0.g.g.0.0.7.g.:.q.u.i.2.w c $ . o m S.D.m m /.sXxX>XD.V.V.V.m V.V.V.C.S.S.S.A.S./.$X2X>X$X%XXsXsX $ o O h 2.;.a.f.q.q.a.a.g.q.0.u.7.7.7.7.q.i.i.7.a.i.i.i.g.g.p.i.i.i.i.i.d.g.d.i.g.i.k.i.i.a.a.J.m.m.U.Z.4.e w q c /.cXSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXSXaXv q w w l 1.2.5.8.1.l l 1.1.=.=.=.7 @ & V K K H K K H K K P H J H J H H H H K K K K K P K P K P V > u 6.7.5.2.7.6.7.6.6.7.7.:.7.7.8.4.z i d s a a ! s ~ '.'.'.~ ~ ! ! s s s s ,.k.f.G.F.H.v.I.I.I.I.I.P.I.P.I.I.I.I.P.P.P.P.P.I.g.0.4.4.4.8.q.a.a.a.tXtXa.a.d.f.a.f.a.a.a.a.a.d.a.f.l.f.a.m.n.b.M.L.oXVXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXxXb.v.v.b.j.j.n.n.3.6 e e l l 6 u 1.u l e e w 7 q 7 2 1 q 1 1 1 7.7.7.7.0.g.g.7.q.g.a.u.7.5.=.r q : X . o m %XD.m V.C.$X7XhXaX2XC.D.C.S.W.W.W.%X-X-X-X>X : & o . X 1 2.6.i.a.a.q.q.q.a.a.a.8.u.7.7.7.8.a.i.7.8.i.i.i.i.i.i.i.i.a.i.i.i.i.i.d.i.d.i.i.a.a.i.a.k.U.m.Z.Y.Z.9.4.q m SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXZXy.3.3.8.8.8.7.4.1.z 1.1.1.=.2.r r q : X V K H H H H H K H H K H H H H H H H P K P P K K P P K P y q 6.>.5.7.7.7.7.8.8.6.7.7.8.8.8.i.7.4.3.3.4.3.;.,.s s s s kXtXs ,.,.,.g.d.G.G.H.H.H.H.H.H.I.I.I.I.P.P.P.I.I.Q.P.P.P.P.P.Q.P.F.a.i.i.8.h.a.g.a.a.a.tXtXa.a.a.a.d.a.a.f.d.a.f.k.f.k.h.w.n.J.b.v.n.L.R.BXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXlXs.v.b.b.s.s.n.n.q.6 w e l l i l l u e e w w w q 2 2 2 1 1 1 1 l 3.7.8.7.7.g.0.q.7.q.u.0.7.1.r r w , $ X O j 2X@XD.V.V.S.2XiXzXhXaX9X>X1X1X $ o . . X : l 1.6.a.a.a.g.u.u.q.i.a.u.7.7.7.8.8.i.p.u.8.p.i.i.i.i.i.i.i.g.p.g.i.g.i.i.d.i.i.a.a.i.a.a.h.m.z.Z.Y.R.Z.z.^.y.>XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXA.k 7.7.8.q.8.8.7.1.1.l 1.1.1.2.e q 1 < o = K K H K K K I K P K H H H L H J H K K K P K K P P K K y 3 5.u.7.7.7.7.7.7.8.7.7.7.7.7.8.8.8.7.8.8.6.7.5.7.1.5.:.3.kXtXe.e.,.g.d.G.G.G.v.v.H.H.H.I.I.I.I.I.I.P.I.Q.P.P.Q.P.P.P.Q.P.I.f.g.i.x.x.a.a.a.a.a.g.tXtXa.a.a.a.a.a.a.a.f.a.f.f.k.k.a.a.n.n.b.N.N.L.R.mXKXKXKXKXKXKXKXKXKXKXKXKX KXKX KXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXlXs.v.b.b.j.w.b.m.z.3.w e l l l e =.e e e w w w w 2 2 1 1 1 1 1 3 e 4.8.7.:.g.0.8.a.q.g.0.0.8.6.l w k h , @ + f |.$XS.D.D.V.S.%X2XbXcXxXjXjXnXhXgXgX7X*X2X/.S.2XpXxXhX%Xg @ . . . + $ , w 2.l 8.a.a.q.q.q.u.q.q.u.7.7.7.7.8.i.p.p.8.8.i.i.i.i.p.g.i.d.g.i.i.i.d.d.i.d.i.i.a.a.i.i.a.h.n.m.m.Y.W.Z.Z.Z.x V.mXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX,Xz 3.7.0.q.8.8.7.7.2.1.l &.=.2.r e 3 1 8 + - K K K L H I I H I I J H H L H H H H K P P P P P K K K y 5 5.5.7.7.7.7.7.8.8.7.7.8.7.8.8.7.8.8.8.7.8.8.q.8.x.i.x.a.uXuXs.,.s.s.f.v.v.G.H.v.n.n.I.n.v.I.I.I.I.P.P.I.P.I.Q.Q.P.P.Q.H.f.g.a.a.h.h.a.a.a.a.a.a.tXtXa.f.f.a.d.a.a.f.a.a.a.f.l.a.s.j.m.b.b.N.n.P.A.mXKXKXKXKXKXKXKXKXKXKXKXKX KXKX KXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXdXw.n.v.j.s.s.b.n.z.q.e 5 l l e e e e e e 7 q 7 w 2 2 2 2 2 1 1 8 5 l 4.0.q.u.u.7.0.q.q.q.q.i.i.8.2.i k k h , : < V.&X&X/.D.D.V.D.S./.%X%X2X2X%X%XS.C.S.S./.>XhXhX*Xm $ . X + + < q r e l 2.1.a.s.7.7.g.0.7.7.0.7.7.7.7.u.i.i.8.u.u.p.i.i.i.i.g.i.i.i.p.g.i.d.i.i.i.i.a.i.a.a.i.i.a.a.n.Y.m.m.T.Z.z.Z.x.9.C.SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXmX4.7.s.7.q.a.a.8.7.7.2.1.1.1.1.=.e q 4 1 1 : - H P K L I L L I L L H J H H H H J K L L I P P P P P J 0 u ,.4.7.7.8.7.8.7.8.7.7.7.7.7.7.i.a.8.a.i.q.q.q.a.g.g.d.g.uXuXv.v.v.v.v.v.H.H.H.v.H.I.n.I.I.I.B.L.I.I.Q.I.P.P.I.Q.Q.P.L.f.a.a.i.a.k.h.d.a.d.a.s.d.tXuXd.a.a.f.d.s.d.d.a.a.s.f.k.a.q.n.n.j.b.v.B.P.B.MXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXyXs.n.v.v.s.s.s.j.n.t.1.e e e e e e e e e w w 7 2 2 2 2 1 1 1 1 1 1 2 1.8.i.7.7.7.0.q.a.g.q.i.u.i.8.7.u 6 c h h , < h C.2X1X2X/.S.S.D.V.S.S.A.S.S.W.S.2XbXcXhX5XM % X O : q c c =.2.1.1.7.q.w.7.0.7.0.7.g.7.u.7.7.7.7.7.i.8.7.p.u.p.p.i.i.i.d.i.i.i.i.i.i.i.i.i.a.i.a.i.a.h.i.i.a.a.k.U.m.n.Y.Y.^.Y.z.l x W.JXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXc.1.a.7.0.a.a.q.8.7.1.1.1.1.1.1.e i 3 4 1 q < @ J P I I L L L I L L H J J H H J H L L I I I I I I K J t :.,.4.7.7.i.7.8.8.8.7.7.7.7.0.7.q.7.0.u.0.u.q.a.a.f.g.g.g.tXtXv.g.f.v.v.H.H.H.n.n.I.I.B.I.I.I.I.P.I.Q.Q.I.Q.I.Q.Q.Q.K.a.a.a.u.a.a.a.a.a.a.a.a.a.a.tXtXa.a.s.a.a.d.f.d.a.d.a.a.f.a.a.n.j.s.v.b.n.P.B.mXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXyXb.n.v.v.v.s.s.s.j.z.e.l w e e e e e 7 w w w 7 q q 2 2 2 1 1 1 1 , 2 5 7.8.u.7.q.u.u.7.u.a.u.u.7.7.7.5.5.1.w q h h , , h V.%X1X9XiXXbXsXlXfXiX%Xj $ X X @ , h w e =.=.&.1.7.i.h.a.0.7.7.7.7.7.7.0.7.7.7.u.7.7.7.7.i.i.i.i.i.i.i.i.i.g.i.i.i.a.i.i.a.i.i.a.a.i.i.a.i.i.i.a.j.Y.Y.z.U.Y.Z.Z.z.t.y.b 2XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXW.u d.a.a.4.q.q.8.7.1.1.1.1.1.&.1.l 3 4 , 1 q 8 @ y H I I L L L I I L J H H J H L L L L I T T T I I J 0 l p.:.x q.8.8.i.8.i.8.a.7.a.7.0.a.a.u.a.q.q.q.q.s.g.,.f.v.v.tXtXG.f.G.v.H.H.H.B.I.n.I.I.L.L.L.I.P.P.I.Q.I.I.P.P.I.Q.K.l.0.a.a.a.d.a.a.a.a.d.a.d.s.a.tXtXtXtXuXtXtXuXtXtXtXtXtXtXtXtXtXtXtXtXyXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXkXtXtXtXtXtXtXtXtXtXtX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXyXb.v.v.v.v.v.w.w.s.v.q.u i e e r e e 6 w 5 5 2 q 2 2 2 2 1 1 1 1 1 1 2 e 6.i.8.u.q.0.u.7.q.:.0.g.:.7.a.7.6.e l c q k h < > > f j D.2X9X7XcX8X6X*X@XC.g $ o + + : q 2.l l &.l ;.;.7.q.h.q.0.g.0.0.0.7.7.7.7.u.7.5.7.8.8.7.7.7.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.d.d.i.d.a.a.a.i.8.i.h.q.U.Y.z.z.U.U.z.y.Z.r.y.y.>XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX Xz w.0.7.0.q.q.q.8.7.3.3.1.1.1.;.1.e 3 , , 8 t 8 : - H L L L L L I L T T H L L L L T T L L T T I T I y 7 u.-.u.3.8.8.u.i.8.u.i.q.u.q.g.a.q.q.s.a.s.s.a.f.g.f.f.f.f.v.tXtXv.H.H.H.H.I.v.I.B.H.I.I.L.L.I.P.P.Q.Q.P.Q.Q.Q.Q.oXI.G.,.g.g.a.a.a.a.a.d.f.a.d.a.a.d.uXuXtXtXtXtXtXuXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXkXtXtXtXtXtXtXtXtXtXtX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX;Xv.B.v.v.v.s.w.s.w.v.n.q.u u l e w e e w 5 w 3 2 2 2 2 2 1 1 1 1 1 2 1 3 w 4.r.i.7.7.q.g.0.0.g.0.7.7.g.7.7.7.;.6 l w k q h q 8 9 + O O @ % % @ o o X X + : 1 w c 2.=.=.6 1.5.0.0.f.f.a.7.:.:.0.7.7.7.7.7.7.7.5.7.7.8.u.7.u.8.i.p.i.i.p.p.i.i.i.i.i.p.d.i.d.i.d.i.i.i.p.i.a.i.i.i.i.i.a.F.Y.Y.z.J.U.z.z.z.t.y.r.9.9XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX2Xq.0.s.0.s.0.s.s.8.7.7.5.1.1.1.1.e e w 4 1 , 1 2 8 < - t H L L L L L I L T T L L L I T T T T L T T T J t &.:.p.u.6.7.8.7.q.q.q.q.q.q.q.g.a.g.a.a.s.g.a.f.s.s.s.f.v.l.v.tXtXn.v.H.H.H.H.v.I.I.I.I.B.L.P.I.P.P.P.P.P.P.P.Q.I.I.G.,.,.d.f.a.f.d.a.a.f.a.a.f.a.a.f.a.s.a.a.d.f.f.a.f.a.a.j.z.a.q.l.a.a.w.s.v.n.B.I.A.hXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXXXv.M.b.v.v.w.s.w.s.s.n.f.3.u i w w w w w w 3 3 2 2 2 2 1 1 1 q 1 2 2 2 2 q w 6.8.7.7.7.0.,.7.7.0.0.7.7.7.u.7.7.7.1.k l w q r r w , $ o . X O : 1 q c z =.=.6.=.1.4.8.s.s.s.a.a.7.7.:.:.0.7.7.7.7.7.7.5.7.p.7.5.8.7.8.p.p.8.i.i.8.i.i.i.i.i.i.i.i.i.d.p.i.p.d.i.i.i.x.i.h.a.i.i.i.k.U.~.z.z.Z.m.z.z.z.r.t.r.v 1XJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX$X9.a.s.q.s.a.a.g.a.7.7.7.1.1.;.1.1.l 6 5 1 1 q , 8 7 1 < 0 J L L L L T T T L L T T L L T T I I T T T H t r =.=.7.7.6.8.8.7.q.7.q.g.g.u.g.q.q.a.a.g.g.s.g.g.f.f.f.f.f.v.H.uXtXv.H.v.H.H.H.I.B.I.B.I.I.P.P.P.P.P.P.P.Q.Q.Q.I.I.I.G.a.a.d.d.a.a.d.a.a.a.a.f.a.f.g.a.d.a.f.d.d.a.d.f.g.a.f.l.j.a.f.j.q.w.w.s.b.n.M.P.B.fXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXXXv.n.v.v.w.w.w.s.w.s.s.k.w.u 7 5 l w w q w 3 3 2 2 8 2 2 q 1 1 1 1 2 2 1 2 2 l 3.8.8.7.:.u.g.q.0.7.0.7.7.g.u.q.8.4.4.2.c w w e 2.z k , < $ : : , q k l l l e e 1.6.8.x.h.h.a.7.7.7.5.5.:.7.7.:.7.7.7.7.7.7.8.8.5.u.8.8.p.8.8.i.p.i.p.i.i.i.i.i.d.i.i.i.i.i.i.i.i.i.i.d.i.i.i.i.i.i.a.8.k.F.~.U.j.m.Z.z.z.z.z.y.r.y.b 2XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJX%Xt.4.s.w.a.a.a.a.a.8.8.7.7.1.1.&.=.=.e e 5 2 1 , , 8 1 q 0 < - y H T I I L L L T L L T L L L T T T T J y r =.=.=.6.4.4.a.a.u.7.0.7.q.q.q.q.g.s.a.a.s.s.g.s.s.f.f.f.f.f.v.H.uXuXI.v.H.H.I.H.I.I.I.I.L.L.P.P.P.I.P.P.Q.P.I.P.I.I.G.,.a.a.d.d.a.f.a.a.d.f.d.a.d.a.a.d.g.a.f.a.f.a.a.a.a.a.l.n.q.a.j.q.a.w.w.s.v.N.M.P.B.pXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXoXv.n.N.v.v.v.w.s.w.s.s.f.h.4.5 5 w w w 7 q 7 2 3 2 2 1 1 1 1 1 1 1 1 1 2 2 1 7 e 2.2.7.7.0.7.0.g.7.0.u.0.q.g.u.7.7.8.q.4.c l 2.=.6 ;.l l w l 1.2.2.e 5.1.1.5.8.8.q.a.s.8.8.7.3.3.5.7.7.7.7.5.7.7.7.5.5.7.7.7.7.7.p.8.p.8.8.8.p.i.i.u.p.i.i.p.i.i.i.i.i.i.p.i.i.i.i.i.d.i.i.a.i.a.x.i.i.a.h.Y.Y.m.c.m.m.j.z.z.t.y.z.z.y.$XHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJX Xe.g.s.w.a.w.s.a.a.g.7.7.7.7.2.1.6 1.2.l e q 2 1 , , , 8 1 q 8 : : y H I I T T T L L L T T T T T T L J t e &.5.=.=.2.2.4.8.8.8.q.a.q.g.q.q.q.a.a.s.s.a.g.g.f.f.f.f.f.v.v.G.n.tXtXn.H.n.I.n.I.L.L.L.L.L.P.P.P.P.P.P.Q.Q.P.L.n.g.g.s.a.a.d.d.a.a.f.a.f.a.f.a.d.a.f.a.g.s.a.f.a.s.a.a.a.a.k.l.j.a.j.j.q.a.q.s.s.b.N.M.P.B.pXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXE.n.n.b.v.b.s.s.w.s.w.g.s.j.h.z 5 7 w w q 7 2 2 2 2 2 2 2 1 q 1 1 1 1 1 q 2 1 2 2 w l 3.8.7.7.7.7.7.7.q.7.0.q.7.7.7.0.0.4.x q.a.7.5.5.:.&.&.1.5.6.6.5.p.u.i.i.a.q.7.4.3.1.1.1.7.8.7.7.7.7.7.7.;.5.7.5.7.7.7.p.7.7.8.8.7.7.8.8.8.i.8.i.8.i.i.i.i.i.i.i.i.i.i.k.i.i.d.k.p.a.x.i.i.i.i.i.a.k.a.z.R.U.z.j.z.z.h.j.c.t.s.k.j.9.W.SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXA.e.f.a.g.s.w.a.a.a.s.q.3.7.7.1.1.1.6 1.=.l l w 2 1 , , q 8 8 8 7 8 8 0 y J H L T T T T T T T T T L J y q e =.5.:.5.=.e 2.1.1.5.8.a.a.a.a.g.q.a.s.a.s.a.s.s.s.g.f.f.f.v.G.n.v.H.tXtXH.H.I.n.I.L.L.L.P.I.P.P.L.P.P.Q.Q.P.P.H.f.g.s.a.a.a.d.a.a.a.a.a.d.a.a.f.a.a.a.a.d.d.d.d.f.a.a.a.d.f.k.l.j.a.j.j.0.8.0.s.s.s.b.n.n.P.B.yXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXR.v.n.v.v.w.s.s.s.s.s.0.w.s.j.e.l 5 w 5 7 q 2 2 2 2 2 2 q 1 1 1 2 2 1 2 q q 2 1 1 8 7 r 5.5.7.7.7.0.7.7.g.7.5.7.g.0.0.0.7.q.8.7.7.7.7.7.7.7.7.7.7.i.a.u.u.0.7.7.7.3.:.7.7.7.7.7.1.7.8.7.7.5.7.3.5.5.5.7.7.8.8.8.5.p.8.p.p.8.u.p.i.i.i.i.i.i.i.i.i.i.i.i.i.k.i.i.i.k.i.i.i.i.h.i.i.i.i.a.k.8.h.Z.T.Z.z.l.j.h.h.z.z.h.3.h.Z.c D.AXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXmXV.9.h.w.s.s.w.s.w.s.s.a.7.2.7.7.1.2.1.=.1.1.e w w 2 1 , 8 1 1 , q 8 q q 8 : : y J J H H L L L H H J y , 4 e 2.=.6.5.=.l e =.1.1.1.7.8.a.i.a.a.a.s.a.a.s.f.s.s.f.f.f.v.f.G.v.G.H.H.tXtXn.n.B.I.I.L.L.P.P.P.P.P.P.P.P.Q.L.H.f.d.a.a.d.d.f.a.d.a.f.a.a.f.f.a.d.f.s.d.d.g.a.s.a.a.f.a.a.a.f.k.l.l.a.a.f.w.5.0.0.s.w.b.n.n.B.P.B.pXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXA.v.n.N.v.b.s.s.w.w.s.g.s.w.h.h.4.u 5 w 7 2 2 3 2 3 2 2 2 1 1 1 2 q 2 2 2 1 2 1 1 8 2 7 ;.7.7.:.,.:.7.7.7.7.7.0.0.7.>.:.u.a.7.3.3.0.0.7.7.3.3.3.e.0.4.4.0.0.:.7.7.7.0.:.7.5.7.1.1.5.5.5.;.3.5.5.5.5.7.7.8.7.7.7.5.8.8.6.8.p.8.8.u.i.8.p.i.i.i.i.i.i.i.i.i.i.k.i.i.p.k.i.i.i.i.i.i.a.x.i.h.a.q.h.T.E.l.k.l.j.t.t.h.t.t.w.h.z.9.W.FXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXMXn.4.n.j.e.h.j.s.s.s.s.a.7.5.7.7.7.1.=.=.1.=.1.l e w 2 8 1 8 , 1 , q q q 8 8 8 8 8 8 1 0 q t y 0 0 0 q , 7 =.=.2.c =.l w c l 2.-.5.1.1.1.7.7.a.a.a.a.a.s.a.f.f.s.f.f.f.f.v.v.n.v.v.H.tXtXH.I.I.L.L.L.I.P.P.P.P.P.P.P.P.H.G.g.u.g.d.d.h.k.d.d.a.f.a.a.a.a.a.d.a.a.a.d.d.s.d.a.f.d.d.g.a.f.k.F.l.f.j.j.a.3.0.7.0.w.s.v.v.n.n.P.B.3XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXB.B.n.n.b.v.v.w.s.w.s.g.s.0.w.s.q.3.5 3 q q 1 1 q 2 2 2 1 2 1 1 q q 2 2 1 2 2 1 q 1 1 2 3 5 l 2.7.7.7.u.u.u.0.7.7.7.0.0.0.>.0.0.:.0.,.0.7.3.3.3.5.3.3.:.3.0.:.:.:.0.:.7.3.7.7.3.7.7.5.1.5.3.1.1.5.5.7.7.8.6.p.8.8.p.6.i.8.8.p.8.p.8.i.i.i.i.i.p.i.i.i.i.i.i.i.i.k.i.i.i.i.i.k.i.i.i.i.i.i.a.a.h.U.!.Y.r.r.z.k.z.h.t.c.j.e.t.t.y.W.SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXhXN.s.b.w.w.j.j.s.s.a.s.a.7.5.5.3.7.1.1.1.=.1.1.l l e w 7 2 q q 8 , , q 0 , < 0 1 1 8 8 8 < < , 8 , 8 , 8 5 r =.=.1.2.=.2.l 2.2.1.=.5.6.1.1.1.6.8.a.s.s.a.a.f.s.f.f.f.f.v.v.v.G.n.H.H.H.uXuXH.n.I.I.M.I.L.L.P.P.R.Q.L.H.F.d.g.a.g.a.a.f.a.a.a.d.a.a.a.a.f.a.s.d.g.a.a.a.a.a.f.d.a.a.d.f.d.f.j.l.k.a.j.h.3.3.7.0.0.w.s.s.b.N.M.P.B.yXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXB.I.n.b.b.b.s.s.s.w.q.w.a.w.0.q.s.q.l 5 2 q q 1 q 8 2 8 1 1 2 1 2 2 2 2 2 2 2 1 1 1 1 1 1 1 2 e 2.2.7.p.u.u.q.u.7.0.3.,.,.0.g.:.0.7.7.7.7.7.7.7.7.7.7.7.5.7.7.3.3.7.3.7.7.7.3.7.7.3.5.5.3.5.1.1.5.7.8.7.8.6.8.8.8.8.8.8.8.i.i.8.i.8.8.8.i.8.i.8.i.i.i.a.i.k.k.p.i.i.x.i.i.i.i.i.i.i.i.k.i.a.h.i.h.Y.!.A.q.k.z.k.r.t.z.h.h.t.r.r.y.A.SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXjXZ.s.b.s.w.j.j.s.s.a.a.s.0.7.7.7.3.5.1.1.1.l 1.6 e 1.l e w q 8 8 0 8 q 8 0 8 1 < 1 1 1 1 , , 8 1 1 2 2 2 7 5 e 2.5.=.6.5.1.1.=.5.1.1.1.1.6.1.5.6.1.7.7.8.s.s.f.f.f.f.v.f.v.H.H.v.f.v.v.H.uXuXI.I.L.L.L.P.P.P.P.L.L.H.d.a.i.a.a.a.a.d.a.a.a.a.a.a.a.g.g.d.a.d.a.g.d.a.a.f.d.a.g.s.d.a.l.k.a.k.n.k.q.h.h.8.3.4.4.8.0.a.s.s.v.N.M.P.L.yXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXB.I.n.n.v.s.s.w.s.s.s.g.a.0.q.s.q.q.r.k 8 8 1 q 1 8 2 2 2 1 2 1 2 2 2 2 q 2 2 1 1 1 q 1 1 4 1 2 5 l 3.7.7.7.7.7.7.:.7.g.7.7.7.0.7.7.7.7.7.7.7.7.7.7.7.5.:.7.5.5.7.7.7.5.3.5.7.7.1.1.1.1.5.1.5.7.5.6.6.u.6.8.8.p.6.i.6.i.8.8.8.8.8.i.i.8.i.i.i.8.8.i.i.i.i.i.x.i.k.i.i.k.h.i.i.i.i.i.i.k.i.h.i.i.i.z.E..Xm.q.z.k.t.t.h.t.j.j.j.t.t.4.S.HXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXBXV.w.b.w.s.j.j.h.a.w.a.s.a.7.5.3.3.1.1.1.1.1.&.1.1.=.l e e e 7 2 8 8 q 8 0 8 8 q 1 8 0 1 1 1 1 1 1 1 2 2 2 i i l 1.6.=.=.5.1.5.=.1.5.=.1.5.1.5.1.1.5.1.1.5.7.8.a.h.f.s.f.f.v.v.v.H.n.H.H.H.tXtXI.I.L.L.L.H.I.K.F.G.a.u.u.q.q.a.a.a.a.a.a.a.s.a.d.a.s.d.a.f.f.a.f.d.f.a.a.d.f.a.d.d.d.f.l.a.a.l.J.a.q.r.7.3.7.8.8.8.q.w.s.j.v.N.B.P.K.yXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXGXN.B.n.b.s.v.b.s.s.w.s.w.w.a.0.q.0.s.r.8.=.8 2 q 1 2 2 q 1 1 1 2 2 2 q 1 2 2 2 2 1 1 1 1 1 2 1 1 4 3 3 u l 1.5.7.7.u.u.u.7.7.7.7.7.7.7.7.7.7.7.5.5.7.5.3.3.7.5.5.3.5.3.3.1.1.1.5.1.1.1.1.1.5.5.7.8.5.8.6.8.6.8.6.i.8.i.6.i.i.8.p.8.p.8.8.8.8.i.i.i.i.i.a.k.i.i.i.p.i.i.i.i.i.i.i.i.i.i.i.i.p.i.i.a.h.z.!..Xz.q.j.z.j.h.h.j.z.j.t.h.z.9.S.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXA.c.b.w.w.j.b.j.s.a.s.a.0.7.5.1.7.7.1.1.1.1.1.1.1.6 1.=.e e =.r q q q 8 1 8 q 8 8 8 1 1 1 8 1 1 8 8 2 3 5 5 u u 2.2.=.5.=.1.1.1.1.5.1.1.1.1.6.1.5.6.1.6.6.6.5.7.7.7.q.g.a.s.g.f.f.v.H.n.H.H.tXtXM.n.n.n.f.s.g.g.u.g.g.g.a.d.d.g.a.a.a.a.f.a.d.d.a.f.a.d.a.a.d.f.a.d.d.d.s.a.a.a.f.a.f.k.d.h.m.l.w.a.s.8.1.3.7.7.7.q.q.s.w.s.v.n.M.B.P.4XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXGXN.B.n.v.v.v.v.s.w.s.w.g.q.0.q.0.0.w.a.h.=.w 2 q 8 q 2 8 8 2 8 2 q q 8 q 1 2 q 2 2 1 1 1 2 1 2 1 1 1 4 2 3 e 2.1.7.7.7.:.7.7.7.7.7.7.7.7.7.7.5.7.7.5.7.3.5.5.5.5.7.7.5.1.7.5.3.5.5.5.5.5.1.5.1.5.5.7.p.8.6.8.p.8.6.i.8.8.8.i.8.8.i.i.8.p.i.i.i.i.i.i.i.x.i.i.i.i.i.k.i.i.i.i.i.i.i.i.i.k.p.i.i.h.a.h.q.U.XX!.z.q.r.z.j.h.h.z.z.t.t.h.z.b >XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX Xt.m.j.j.j.j.l.k.j.f.a.7.7.7.1.1.1.1.1.2.1.1.1.1.=.l =.=.=.r =.r q q 7 2 1 1 8 8 8 8 8 1 1 1 1 2 2 3 q e e e 1.1.2.1.6.2.=.1.1.5.5.1.5.5.1.1.1.5.1.1.2.x.6.6.6.6.1.6.7.7.7.7.g.q.g.a.s.s.s.a.tXtXa.f.a.s.a.q.0.0.i.a.a.a.a.a.a.a.g.a.a.d.a.d.g.a.a.a.d.g.a.f.a.f.a.d.a.f.a.f.f.d.a.f.f.a.j.l.l.a.q.w.w.1.;.7.8.3.4.8.0.s.a.s.b.n.M.P.P.eXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFXc.I.n.v.v.v.s.w.s.w.w.s.s.q.0.0.0.0.q.f.x.=.e 7 2 2 2 2 q 2 q 2 8 q 8 q 2 2 2 2 2 2 1 1 2 2 2 2 1 2 1 1 1 1 3 5 l 1.5.5.7.5.:.5.5.7.7.7.5.5.7.5.5.7.5.3.1.1.1.5.1.1.1.1.1.1.1.1.1.7.5.3.5.5.1.1.5.6.6.8.8.6.8.8.6.i.6.i.8.8.i.8.p.8.i.8.i.8.8.i.8.i.i.i.i.i.i.i.i.i.k.i.i.i.i.h.h.i.i.k.i.i.i.h.8.7.i.h.U.=XW.t.q.h.j.h.r.t.j.j.b.j.h.m.9.sXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX3Xt.M.l.w.n.n.j.j.f.a.s.s.7.7.5.1.1.1.1.1.1.1.1.1.=.1.&.=.=.=.r =.=.r e w 7 q q q q q 8 1 8 8 1 2 5 5 5 e e 2.2.1.1.1.=.=.5.6.1.1.2.=.1.=.2.=.5.6.1.6.6.6.6.7.6.6.7.7.7.5.5.5.5.:.7.7.7.7.5.7.7.tXtX7.7.8.i.a.i.a.a.a.i.i.u.q.g.g.a.d.a.a.a.a.a.d.f.f.a.a.f.a.d.d.f.f.d.d.f.a.d.f.a.d.f.d.f.k.l.w.w.w.q.3.1.3.7.7.3.8.q.q.a.s.s.b.N.M.L.R.,XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXb.n.n.b.v.s.s.w.s.s.s.g.a.0.q.0.0.0.0.0.a.w.1.5 7 2 2 2 2 2 q q 2 2 q q 2 q q 2 2 2 2 2 2 2 8 2 2 2 1 1 q 1 4 4 3 5 u ;.1.5.5.5.5.5.3.5.5.7.5.5.5.3.5.5.1.5.1.1.1.5.1.1.1.2.1.1.1.5.5.1.1.5.5.5.5.8.8.6.6.8.8.p.i.8.i.6.i.i.i.p.8.8.p.i.i.i.8.8.i.i.i.i.i.i.i.k.i.k.p.i.i.i.i.i.i.i.i.i.i.i.i.a.q.8.i.k.r.R.;XT.r.a.j.j.z.h.h.j.N.t.w.k.h.V.AXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXBXc.N.v.s.b.c.n.f.a.a.a.q.7.7.5.1.1.7.2.1.1.1.1.1.2.1.1.5.=.2.=.=.=.=.=.w w w w q q q 2 2 q q 1 1 3 6 w e 2.=.1.=.5.=.=.1.=.2.2.1.5.=.2.5.5.=.1.5.1.5.1.1.2.1.5.7.7.7.7.7.6.6.6.7.7.7.7.7.7.8.8.8.tXtX7.i.i.i.i.h.i.i.i.x.i.a.q.g.g.a.d.a.f.a.s.f.d.a.f.f.f.f.a.d.f.d.f.d.f.f.a.a.d.f.d.d.d.l.l.q.a.j.w.3.u 3.7.3.3.8.8.8.q.a.w.j.b.n.B.P.R.;XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXc.I.n.b.v.b.v.v.w.w.s.w.s.q.0.0.0.0.7.7.q.h.8.1.7 q 2 2 2 q 8 q 2 q q 8 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 q q q 1 1 4 4 2 2 5 u l u l 1.1.1.3.3.3.1.5.7.3.1.l 1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.5.1.5.6.5.5.5.8.8.6.8.6.6.i.i.6.6.x.8.6.8.i.8.8.8.i.i.p.i.i.8.h.k.i.i.i.d.p.k.i.h.i.i.i.i.i.i.i.i.i.i.i.x.a.i.d.8.z.!.;XE.h.8.h.z.r.t.h.t.c.h.j.h.9.S.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXT.t.b.n.b.m.b.j.f.f.a.q.7.5.7.3.1.1.1.2.1.&.e 1.;.2.=.1.2.6.2.=.=.=.=.=.=.=.e e e r r w w w w w t 5 l 1.1.2.2.1.=.5.=.5.1.5.2.5.1.5.1.=.5.1.1.1.1.6.1.5.6.5.5.5.5.7.7.7.5.8.8.8.8.u.u.7.7.7.i.i.i.tXtXa.a.i.i.i.i.i.i.h.h.a.a.a.a.a.a.a.a.a.d.d.d.a.f.d.a.d.a.f.f.a.s.d.s.f.a.d.f.f.a.a.f.l.l.s.s.l.h.3.3.4.3.3.3.3.8.8.8.q.w.w.s.v.N.B.L.R.wXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXb.I.n.n.v.v.b.s.w.w.,.s.g.g.q.q.q.w.0.3.3.0.a.q.3.5 5 3 3 2 q 1 3 3 3 3 3 3 3 2 1 1 3 2 3 1 1 q 2 2 1 2 2 q 2 q 3 1 q 1 1 1 2 3 q w e e w e l e e 2.=.w w 6 k 6 6 l &.6 1.l &.1.1.1.1.1.5.2.5.6.7.7.6.7.6.7.6.8.6.i.8.8.8.8.i.8.i.i.i.8.8.i.i.i.8.i.8.i.i.p.i.k.i.i.d.i.a.i.i.a.i.d.d.i.i.i.i.i.i.i.k.i.h.h.z.!.rXE.h.2.q.r.h.z.z.h.m.t.j.t.t.lXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX,Xw.m.N.N.N.j.z.j.k.a.0.3.3.1.7.5.7.1.1.1.1.1.1.1.1.1.1.l ;.1.1.1.=.1.1.;.;.&.;.1.=.;.6 6 1.6 e ;.e 1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.5.1.5.7.5.1.6.5.7.6.2.7.7.6.p.7.8.8.8.i.7.u.7.u.7.tXtX8.8.a.i.i.a.a.a.g.a.a.a.a.a.a.a.a.f.a.f.a.f.f.a.f.a.a.d.a.a.a.s.f.j.f.f.f.f.a.d.k.m.l.s.s.l.s.0.;.3.7.7.3.3.4.7.8.q.q.q.s.s.s.n.n.B.P.eXJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXb.n.n.N.v.v.s.s.v.w.s.s.q.e.g.q.q.0.w.3.;.3.0.q.q.l 5 3 3 3 3 1 3 2 1 2 2 1 1 3 3 3 3 3 1 3 q 3 2 q q 2 q 2 2 2 q 1 2 2 1 1 2 3 3 2 2 3 3 3 3 5 5 5 5 3 5 5 5 6 e 6 1.1.1.1.1.1.1.1.1.1.1.5.1.6.5.6.7.7.7.6.6.8.6.i.i.8.i.i.8.i.8.8.i.i.x.i.i.8.i.i.a.i.i.i.k.p.i.i.i.i.i.i.a.i.i.i.i.i.i.h.i.h.i.i.k.k.h.a.x.m.T.rX-Xz.l 3.h.h.h.r.t.m.z.t.3.Z.SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCXc.n.c.b.N.z.j.j.k.a.q.7.3.1.1.1.1.1.1.1.1.1.1.1.1.6 =.1.1.1.1.1.1.1.1.l 1.1.1.e 1.6 1.1.l 6 1.l l 1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.5.5.1.6.5.5.5.1.5.1.1.7.1.7.6.7.7.7.7.6.7.7.p.8.8.p.7.8.a.i.8.i.tXtXa.a.i.i.a.i.a.a.a.a.a.a.a.a.a.f.a.a.d.a.f.a.k.a.f.d.f.f.f.f.f.f.a.a.a.f.l.f.a.n.J.n.s.s.n.0.3.:.3.3.3.3.3.7.4.7.8.q.q.0.s.s.b.n.B.B.P.wXJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXAXb.I.v.N.v.b.v.w.w.s.w.w.w.q.q.q.0.q.7.7.4.7.0.0.q.r.4.5 7 7 2 3 3 2 2 3 2 2 2 3 3 3 4 3 q 3 4 3 3 2 3 3 3 2 2 2 3 3 1 3 2 2 2 2 2 2 7 2 4 3 3 3 3 5 5 5 5 5 l l =.e 1.1.1.1.1.1.1.1.1.1.5.2.1.6.6.4.7.6.7.6.6.8.6.i.6.8.8.i.8.8.i.i.p.8.a.i.i.i.i.i.i.i.i.i.i.d.d.i.i.i.d.i.a.i.a.i.i.i.i.h.i.i.x.i.i.i.p.8.a.8.z.W.wXrXZ.3.3.i.h.h.h.j.t.N.t.x % & @ % > q e &.p.u.z 1.1.2.5.-.6.5.=.=.=.=.-.-.1.1.1.1.5.5.7.5.1.7.1.5.6.6.4.1.7.7.7.8.8.8.8.8.8.u.8.u.7.8.i.a.i.tXtX8.a.a.a.a.a.a.d.a.a.a.a.d.a.f.f.f.f.f.f.a.a.f.f.d.d.f.k.l.a.j.j.l.j.a.q.j.j.h.q.0.0.q.q.8.8.8.7.7.3.3.7.4.3.4.7.8.q.8.a.a.j.v.b.M.B.P.;XJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXmXw.I.n.b.v.v.v.,.v.w.s.w.s.a.0.0.0.q.8.q.4.7.7.4.3.7.7.3.3.7.7.0.0.7.1.u q q 3 3 p 3 3 3 2 2 5 3 3 3 q 5 3 q 3 3 3 3 5 w w 5 k w 6 l l l 1.1.=.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.6.5.1.5.6.5.4.5.6.1.5.1.7.7.6.7.5.5.7.8.8.p.8.7.i.i.p.i.i.i.k.a.a.a.q.0.0.8.7.7.7.7.5.5.:.5.7.a.a.7.i.i.i.i.i.i.i.d.a.i.i.i.i.h.k.i.k.i.i.a.8.q.m. X-X~.r.4.z.Z.h.J.r.y.BXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXgXc.J.U.Z.m.m.j.7.3.3.3.1.1.1.1.1.&.&.1.1.1.1.=.1.l k k l 2.1.1.l ;.:.;.3.l r e t 0 0 * % * * % % * > 0 0 3 l 6.5.1.1.1.;.3.3.1.1.2.l 3.l 1.5.1.1.5.6.1.7.1.6.1.7.6.6.3.6.7.7.8.7.7.7.q.8.u.q.i.7.i.a.7.a.a.tXtXa.a.a.a.a.d.a.d.d.a.s.d.a.f.a.f.f.f.f.a.f.f.k.f.k.k.l.f.l.l.n.n.h.q.a.m.j.s.s.w.q.0.q.8.8.7.4.7.3.3.3.7.7.3.4.8.8.8.8.w.h.w.b.b.N.L.P.:XJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXxXw.H.n.b.s.v.v.w.w.s.w.q.0.q.q.0.0.q.8.4.7.4.7.7.3.7.7.3.3.5.5.5.7.7.0.7.1.u 5 3 2 3 3 q q w q 5 5 q 3 3 q q p 3 k 5 w 5 k i 5 k e e l e 1.;.1.1.1.1.1.1.1.1.1.1.1.1.1.=.5.1.=.1.1.5.1.5.5.3.5.7.3.6.6.7.6.6.7.5.7.8.u.8.8.8.7.7.7.i.a.i.8.a.a.a.q.q.3.3.7.5.5.5.:.:.&.;.6 &.&.;.7.8.q.a.k.k.k.i.d.p.i.i.h.i.i.i.h.i.i.i.h.q.8.q.Z..X=XU.4.q.z.n.z.h.x &XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX XN.K.U.m.J.l.q.;.3.3.1.1.1.1.l 1.1.1.1.l 1.1.1.1.=.k l 1.7.7.1.u :.;.3.z k q 0 * * * * * * = * * * * * - * 0 q q l 3.3.:.:.1.1.1.1.z z z 5.1.5.7.1.7.6.5.5.2.7.7.7.7.4.7.7.7.8.u.8.u.u.7.7.i.7.8.u.i.a.a.i.tXtXa.a.a.a.a.a.d.a.a.a.d.f.a.f.d.f.f.a.j.j.a.f.l.k.f.a.l.l.m.n.f.w.w.j.j.s.a.s.q.q.7.0.q.q.8.q.0.7.3.3.3.3.3.7.4.4.8.q.8.w.w.j.b.n.B.B.P.:XJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXLXMXw.I.b.b.v.s.v.w.s.w.s.g.s.0.0.0.0.8.q.4.7.4.3.0.3.7.7.5.;.3.5.3.:.7.0.0.7.5.;.5 5 5 3 q q q q 3 3 3 3 3 3 5 3 k 3 k w 5 5 k l k e l l e 1.&.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.5.6.1.1.5.5.6.5.4.5.2.7.6.6.7.6.8.u.8.i.p.8.8.p.i.i.h.a.q.q.q.7.7.8.q.7.3.7.4.4.4.1.l 1.1.l l 6 5 5 6 l 1.6.i.k.k.d.i.i.i.i.i.h.i.i.i.i.a.h.h.a.a.h.m.!.!.m.z r.m.l.z.y.V.HXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXZ.B.m.M.l.m.s.3.1.7.3.1.1.&.1.1.1.1.1.1.1.1.l ;.1.1.1.5.5.5.5.5.;.1.c q 0 0 y = = = = = = = = = = = = = * = * * 0 0 h k z 3.l 1.5.p.5.3.3.1.5.1.7.6.5.6.2.7.7.6.6.7.7.4.7.7.7.8.i.u.i.7.8.i.u.i.7.a.u.8.i.i.tXtXa.a.a.a.a.a.a.a.f.a.s.a.f.d.f.j.f.f.k.f.j.j.j.j.k.l.l.l.l.a.a.s.j.s.a.q.q.q.q.0.0.q.q.q.q.8.7.4.7.3.0.7.3.3.7.8.8.8.a.r.h.s.b.b.N.L.P.XXJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXlXv.I.b.b.v.b.v.s.s.s.w.e.0.w.q.0.0.q.7.0.0.0.7.3.3.7.7.3.5.3.;.3.7.:.5.5.7.8.a.3.2.l 5 5 3 3 3 q q w w q w q w 3 w w w w e 5 6 l l l =.l 1.1.l 1.1.1.1.1.1.1.1.1.1.1.=.1.=.5.1.6.1.5.1.5.5.1.5.6.5.7.6.7.7.5.7.8.8.p.7.8.p.8.i.d.k.j.q.q.a.w.e.z k i 3 4 3 , 4 , , , , , < , 4 w 3 7 7 5 e 1.6.i.k.G.d.i.h.i.i.i.h.k.h.i.i.a.i.i.i.h.Y.=X!.r.3.l.M.n.j.9.xXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXfXN.Z.b.M.n.z.3.;.3.8.1.6 l 1.6 1.1.1.l 1.&.1.1.1.1.1.&.-.=.6.=.r w 0 0 0 = ; ; ; C C C C C C J C C C C = = = = = = 0 0 0 q k c 2.p.p.u.7.1.5.7.5.7.6.7.7.6.7.6.7.6.6.6.7.7.7.7.8.7.i.7.i.u.7.a.8.a.i.a.a.i.a.tXdXa.a.a.a.f.a.d.a.d.f.d.d.d.f.a.f.j.f.l.l.l.l.f.l.n.n.l.a.w.a.l.n.s.0.7.0.0.0.0.q.q.q.q.q.q.q.0.0.7.3.3.3.7.3.4.8.8.8.8.h.w.j.v.v.B.K.P.XXFXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXgXb.H.n.b.v.b.s.s.s.q.s.g.g.w.0.q.0.8.8.4.4.7.7.7.7.3.5.7.7.3.;.7.3.3.3.1.5.7.0.7.7.7.3.u 3 3 3 3 k 3 5 q 3 w k 5 5 w w e e l e l 1.e 1.=.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.5.1.5.5.7.1.5.7.5.5.7.5.6.7.7.7.7.7.7.i.i.h.a.a.d.a.q.w.,.4 # X X X X X X . . . . . . . X . + < q 5 e 7 4 5 u 1.p.a.i.i.i.i.a.i.h.i.a.i.a.i.i.i.k.k.k.Y..XZ.4.3.n.J.k.y.%XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKX%Xm.M.b.N.j.q.3.3.3.3.1.1.e 1.1.1.l 1.1.1.1.1.1.1.1.1.:.5.3.c t 0 0 = = ; ; C C C G G C Z C C C C C C C C J C = ; = = * * * 0 0 q c 2.p.1.1.1.5.5.7.5.6.6.2.7.6.7.7.7.7.7.7.7.8.7.p.p.u.i.u.i.u.i.7.i.a.8.a.a.tXtXa.a.a.a.a.a.a.f.a.a.f.d.f.d.f.k.l.j.l.l.l.l.m.l.s.0.s.s.k.l.s.w.0.0.0.0.7.0.q.q.q.q.0.q.8.8.q.4.4.7.3.3.7.3.4.8.8.8.8.h.h.w.b.b.N.P.R..XHXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXpXb.I.n.b.v.s.s.w.s.s.w.g.w.0.0.0.0.7.q.q.7.0.7.7.7.3.3.7.5.7.7.3.l 3.4.4.7.5.1.5.7.7.4.3.z i i q 3 5 q 3 w q w w w w w e w l e e e 1.=.1.1.l 1.1.1.1.1.1.1.1.1.1.1.1.=.1.1.5.1.5.2.5.1.5.1.6.6.7.7.2.6.6.6.3.7.6.5.5.u.i.h.k.l.k.a.a.q.w.p + o % % % % > > f f f g f % o . # 1 w 7 7 4 4 7 5 1.1.8.i.h.i.i.h.h.a.i.h.a.d.i.k.i.i.x.z.T.E.h.;.w.J.z.t.y.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXJXW.K.K.M.b.a.3.3.3.7.1.l 1.;.1.1.&.1.6 =.1.1.1.1.1.1.2.u i 3 0 0 y ; ; C C C Z A D D F ( ( D S G G G G C C C C C V C ; = = = * % 0 q q r 2.2.6.7.5.5.5.7.7.7.6.6.7.6.7.7.7.8.7.8.8.8.i.q.7.8.a.a.7.a.a.i.a.i.a.tXtXa.a.a.f.a.f.d.a.f.a.a.f.f.f.f.k.l.l.J.n.n.l.w.s.s.s.f.s.s.w.0.0.3.7.7.0.q.q.7.q.q.q.0.8.q.q.8.8.7.4.7.7.3.7.7.7.8.q.8.q.s.h.b.v.B.P.P.XXHXKXKXKXKXKXKXKXKXKXKXKX KX KXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXLXpXv.v.N.b.v.v.b.s.w.w.s.0.0.0.0.0.0.7.7.7.3.0.3.3.7.3.7.3.3.7.3.:.3.5.3.5.3.5.3.3.3.3.4.7.8.8.4.z k k 3 3 w i 5 5 5 w w k l 6 1.;.1.1.l l 1.1.1.1.1.1.1.1.1.1.1.1.1.1.6.1.5.5.5.1.6.1.1.5.1.7.6.6.6.2.1.1.5.6.6.1.7.0.a.f.k.f.f.s.w.d.d.a.4 . . $ m X%X|.|.%XW././.S.|.S.@Xn o X , 5 2 2 3 5 7 2 3 3 2.8.h.k.i.d.d.d.h.a.a.a.h.i.a.i.x.h.z.~.m.7.7.t.N.j.t.mXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXCXA.n.M.N.b.3.4.3.1.1.1.1.1.1.1.1.1.1.1.1.:.;.1.l l x 2.> 0 * = = C C C C U S ( ( ) _ { | | | { { ) ( F G G C C C C C V Y J = = = * * - 0 q 2.x.6.5.:.u.8.6.1.7.7.5.7.7.7.8.7.8.8.8.8.8.7.i.a.u.8.a.i.i.0.a.a.a.tXtXa.s.a.f.a.a.a.f.f.s.a.a.f.d.f.l.l.m.l.l.f.w.0.w.b.n.v.0.:.4.0.7.7.q.0.q.q.q.q.q.q.q.q.8.8.4.8.3.3.7.3.3.1.3.3.4.4.8.q.q.w.w.s.b.B.K.P.XXFXKXKXKXKXKXKXKXKXKXKXKX KX KXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXpXv.v.n.t.v.v.s.s.s.s.w.s.0.a.0.0.0.7.0.7.7.3.0.3.e.3.3.5.7.5.5.3.5.3.:.3.5.3.5.3.3.3.3.3.7.7.4.4.3.3.l i 5 5 k l l l l k u 1.l l u 1.1.&.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.5.5.2.2.5.1.5.1.5.5.7.1.7.2.6.6.6.6.7.1.7.0.w.s.j.j.f.a.a.s.d.d.a., . o g %X4X6X4X4X X < q 7 7 3 7 2 7 3 7 2 7 5 5 5 u 7.x.a.a.h.i.h.a.i.k.i.p.i.h.k.z.U.w.;.d.J.y.gXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXVXA.j.F.s.z 4.1.1.1.1.1.1.1.1.1.1.1.1.6 1.1.5.5.2.t 0 C G F D ) _ ' ` ` ` ` ] ] O.O.$.o.X.o.o.$.#.#.0X0XIXIXLXKXKXLXKXPXIX| { D A A C C V C = * * % , 2.6.7.2.7.7.7.7.7.7.8.8.8.8.8.8.8.8.i.a.q.a.a.i.i.a.a.a.a.a.tXtXa.a.f.f.k.k.k.l.d.a.a.w.r.9.z k k 3 3 5 k k u u l 3.3.0.0.7.4.7.8.4.8.8.0.q.q.a.q.q.0.q.q.8.8.8.7.4.7.3.3.3.7.8.8.8.8.q.w.w.s.n.N.K.I.oXFXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX4Xv.I.v.v.v.v.w.w.s.s.s.q.g.0.0.0.0.7.4.0.7.7.7.7.3.7.7.7.7.3.;.7.3.5.7.3.5.3.3.3.3.;.3.3.3.;.3.z l k w q 3 5 u u 1.3.4.q.1.1.l 2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.6.1.5.2.5.6.5.5.1.5.5.7.5.7.1.1.1.5.h.z.k.l.j.k.k.j.l.f.h.a.w.a.u.8., . o j #X6XiXpXgX1X%X>XiXiXsXxXmX7X% X , 5 5 7 5 2 2 2 7 3 8 3 5 5 7 7 l 7.d.a.i.h.i.a.i.i.k.i.i.k.h.k.Y.z.;.a.z.Z.>XKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXzXc.j.k.q.l 7.1.1.1.1.1.1.1.6 1.1.1.1.1.1.6 ;.5.c h ; Z F ( ) _ ' ' ` ` ` ` ] ] ] O.O. .X. ...o.$.#.#.0XqXIXIXIXIXIXPXIXqXqX$.{ ( D G C C C = = * % < e 6.5.2.7.7.7.8.7.8.8.8.8.8.q.8.8.q.8.a.i.a.i.a.a.a.a.a.a.a.tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXkXdXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXkXtXtXtXtXtXtXtXtXtXtX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX&Xv.v.b.b.v.s.s.s.s.w.q.g.w.w.0.q.q.7.7.7.:.3.3.7.7.7.3.5.7.5.3.7.:.3.;.5.3.3.:.3.3.3.3.3.3.;.3.;.l l u i i i 5 5 5 i l z 8.i.5.1.u l u l 1.1.1.l l 1.1.1.1.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.1.5.5.1.5.a.l.l.n.l.f.j.f.j.j.f.a.s.0.w.q.l : . o g $X6XdXsXaX1X>X%X . < 6 6 3 2 2 8 7 2 8 3 7 7 5 5 5 7 1.p.k.k.i.k.a.a.i.d.h.a.a.a.k.F.U.q.1.h.m.E.KXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXyXf.n.a.4.1.l 1.2.1.1.1.1.1.1.1.1.1.&.1.1.1.;.7.q ; G F ( ) ) ) _ ' ` ` ` ` ` ` ] ] ] .] .......+.+.$.#.0X0XqXqXqX0X0X0X0X$.$.| ) F G G C C = = * % < l p.p.7.5.8.p.7.8.p.8.7.i.u.q.i.i.a.8.i.8.8.a.a.u.7.q.q.a.tXtXtXdXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXyXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXdXtXtXtXtXtXtXtXuXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXuXtXtXtXtXtXtXtXtXtX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX:Xv.v.b.b.v.v.s.s.w.w.w.q.q.q.0.8.0.7.0.7.3.0.3.0.7.3.7.5.3.3.5.5.3.3.3.3.5.3.3.3.3.;.3.3.3.3.3.3.1.l l i 5 k i 5 5 5 5 i l 1.7.7.1.1.6 1.l 1.l l 6 1.1.1.1.1.1.1.1.1.5.1.3.6.1.1.1.1.1.5.5.1.3.5.1.3.7.f.l.l.n.l.l.l.k.l.j.a.a.a.e.8.8.3.< . o j $X6XsXiX1X . < e e 5 7 7 3 2 7 7 2 2 7 7 5 7 7 e p.h.i.i.a.a.a.i.i.a.a.a.h.i.z.U.h.7.q.z.T.KXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKX>Xs.j.q.1.l l l 1.1.l 1.&.1.6 1.1.1.1.1.1.;.;.u 0 Y S ( ) ) _ _ ' ' ` ` ` ` ` ` ` ] ] ] ] ] ] ] ] ..o.+.+.#.#.0X0X0X0X0X0X#.#.$.O.} ) F G C C C = * - > c 8.i.5.u.7.7.7.p.8.u.u.a.i.u.i.8.i.a.i.a.i.a.i.0.a.s.a.a.a.a.k.n.k.h.h.q.4.3.c c k 5 3 5 5 q i w i i l u 1.1.3.3.3.7.3.0.7.7.q.4.4.q.q.q.q.q.q.q.a.q.q.8.q.8.8.4.4.7.3.3.3.3.3.8.8.w.s.s.b.b.B.P.P.oXFXLXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX:Xv.B.B.b.v.s.s.s.s.w.0.w.a.q.0.q.0.7.7.0.3.3.:.3.7.5.3.3.5.7.7.3.7.5.7.5.5.5.5.3.3.3.3.3.3.3.3.3.u l u i u w 5 5 5 5 3 7 3 i l 4.8.5.;.&.e 6 1.1.1.l 1.1.1.1.1.1.1.1.2.1.1.1.5.1.5.1.1.5.1.5.5.5.1.7.a.l.l.l.l.n.l.k.h.j.a.a.s.g.7.3.7.4.< . o j %XiXsXdX>X1X q 4.p.7.7.8.p.7.i.8.7.i.7.7.8.i.i.8.i.i.i.a.a.a.i.a.a.s.a.a.k.l.l.j.w.4.3.z l 3 i i 5 i 5 5 w w k k l l l l 3.3.3.3.3.0.3.0.4.7.7.q.8.q.0.q.q.a.q.q.q.q.8.q.q.8.8.7.4.3.3.3.7.7.7.q.q.s.s.b.b.N.P.P.oXSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXXXb.I.N.v.b.w.v.w.s.w.w.g.0.q.0.8.8.8.7.7.7.3.:.3.0.3.7.7.5.3.3.7.3.5.3.3.5.7.7.3.3.3.3.3.3.3.5.3.;.z u l l 5 5 5 5 5 5 5 5 p 3 k 4.q.8.5.l l 2.1.l 1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.5.1.5.7.5.8.k.J.l.l.l.j.s.a.a.a.a.7.u.a.7.1.5.4.< . o j @XpXfXyX,X1X4X1X%X*XpXjXBXiXg . $ c 7 3 7 7 7 7 7 2 3 3 3 3 7 7 7 7 7 7.q.h.a.a.a.i.a.h.a.a.a.d.j.z.m.8.3.h.Z.VXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXHXW.s.q.3.3.l l 1.1.1.1.1.1.1.l 1.&.1.1.1.1.4.4.g ; ( ( ) ) ) ) ' ' ' ' ' ' ' ' ` ` ` ` ] ] ] ] ] [ ..+.#.0X0X0X0X#.+.+.+.+.+.+.+.+...] _ ) F G C C = - % 0 k 8.7.7.8.p.8.8.u.i.7.7.a.8.i.a.a.i.i.a.a.i.a.a.a.j.f.a.f.l.j.h.w.q.3.l z i i 5 k i 5 5 i w w w u u l u l 3.3.3.3.3.7.7.7.7.7.q.8.q.q.q.q.q.q.q.q.q.a.q.q.8.q.7.7.4.3.3.3.3.7.8.7.s.a.s.j.b.N.K.P.oXFXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX:Xn.L.N.v.v.v.w.v.s.0.0.s.q.q.0.q.q.8.7.7.7.3.7.0.7.3.3.5.7.7.5.5.7.7.7.7.7.7.7.3.3.7.3.7.4.3.3.3.3.3.l u u i 5 k i k k 5 k 3 p i l 8.8.8.1.1.1.l 1.l 1.1.1.1.1.1.1.1.1.1.1.1.7.1.5.1.5.5.1.5.1.1.7.h.z.l.k.l.j.f.a.a.w.q.q.a.q.7.3.l 1.k : o g @XpXyX1X1X1X>X i 4.7.7.7.7.8.p.7.i.i.i.u.a.u.i.i.i.a.a.h.a.a.a.a.a.a.a.j.k.a.e.4.4.z c l k k k k k i k i w w w l l 1.l 1.;.3.3.3.e.7.3.7.e.4.q.q.8.0.q.q.q.a.q.a.q.q.8.q.q.q.7.7.7.5.3.3.7.4.8.q.q.s.s.b.b.M.K.P.oXFXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX&Xv.I.B.b.v.v.s.v.s.w.0.s.a.0.0.8.q.8.7.7.3.:.:.7.7.3.3.7.3.5.7.3.7.7.7.7.7.5.7.3.3.7.7.3.3.7.3.3.3.l u l l k l k k i i i i i k k l k 4.r.7.2.2.l 6 l 1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.5.3.5.1.i.k.z.l.j.f.f.a.a.a.s.w.0.0.q.4.z z z c : o g %XsXpX1X,X1X>X : $ $ # O X X X X . . . X o j @X6XsXsXpXpXpXpXaXpXdXhXBXcX/.j > > : $ @ O O o o o o X X X + : , 4 5 5 6 5.k.d.i.i.h.a.i.a.h.i.a.a.l.m.8.3.z.6XKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXBXt.a.3.l e l 1.;.1.1.1.&.l 1.1.1.r 2.5.u.2.h ; A ( F ( ) ) ) ) ) ) ' ' ) ) ' ' ` ` ] ] ] ] +.#.#.#.0X#.0X0X0X0X#.#.#.+.@.[ [ ..@.@.@.@...] ] ) F A C C = * 0 3 7.7.7.0.q.p.i.i.8.a.7.a.i.a.8.a.h.8.8.a.h.l.a.t.t.d.5.x y.9.9.x x x k 4.l k l k k l l w l u u l l 1.;.;.3.3.7.3.7.7.7.7.e.8.q.8.q.q.q.a.q.q.q.q.q.a.q.q.8.8.8.4.4.3.3.7.4.7.q.q.w.s.j.b.N.K.P.oXSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX XK.n.v.b.s.b.s.s.s.KXKXg.q.KXKX8.7.8.7.7.:.7.7.3.3.7.7.:.7.7.7.3.7.7.7.7.7.:.7.7.3.7.7.7.KXKX7.3.3.l l l l 5 u w l l l l z z z l 9.x 9.c 5XHXZ.w 1.6 l l 2.1.1.1.1.1.1.1.1.1.1.1.1.6.1.1.5.1.5.8.f.l.F.a.< O . X O # $ $ $ $ $ @ o . o j $XiXsXiXiXiXiXiXiX3XiXsXBXcX$X/.C.C.C.C.D.M m n j j j g j f + . O , 5 5 7 1.a.k.i.d.i.i.h.i.i.d.a.a.l.m.q.1.h.6XKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXCXh.h.3.l e l 5.;.1.1.1.1.1.1.1.;.c =.p.p.l h C A ( ( F F ) ) ) ) ) ) ) ) ) ' ' ` ` ] ] [ [ +.#.#.#.#.#.#.#.0X0X0X#.#.#.+.@.] ....@.@.@...] ] _ ( A C C = * % , 3.7.7.7.7.i.p.i.i.i.u.i.a.i.8.a.h.i.a.a.a.a.l.h.r.3.=XW.h 9.x 9.x 9.x z l z l l u 5 k i l 6 u l l 1.3.3.3.3.3.3.3.7.7.4.8.7.4.q.0.q.q.q.w.a.q.a.r.r.q.8.q.8.7.3.7.3.3.3.3.7.q.q.w.s.j.b.N.M.P.oXAXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX.XI.v.N.n.b.s.w.w.w.KXKX0.0.q.KXKX0.4.7.7.3.7.7.5.KXKXKXKXKX7.7.7.7.KXKXKXKX3.7.3.3.KXKXKXKXKX5.3.3.l l l l 5 l l l k l l z x x z 9.9.9.y.CXKXBXy.l 1.&.l 1.1.l l 1.1.1.1.1.1.1.1.1.6.1.6.5.;.5.a.s.b.l.3 X . X f m M D.D.D.M m n g f % @ O o O j %X9XdXiXsXgXiXiXiX3XiXhXmXjX9X@X|.S.C.S.C.S.C.C.C.S.S.C.@X@Xm # . : 5 7 5 ;.i.d.d.d.i.d.d.i.a.a.a.a.k.J.q.l r. M S.S.S.S.S.S.S.S.|.S.S.D.m m j m %XiXiXiXpXpXiX6XiX3XiXcXzXZXBX6X$X*X*X&X2X-X2X2X$X$X*X$X*X$X@Xf . + 3 7 7 6 8.a.i.i.h.a.i.h.a.a.a.h.h.z.a.1.r.6XKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXCXt.a.3.l 5 1.5.;.1.;.1.1.1.1.1.2.2.=.p.4.0 ; Z F F F F F F ) F ) ) ) ) R R ' } ` ] ....o.o.+.+.@.+.+.+.+.#.#.#.#.#.0X#.#.#.+...] ..o.o.o.[ ] ` ' F G Y C = * : 5 z 8.7.u.u.x.i.i.a.a.8.a.a.h.8.a.h.a.q.k.b.h.6.R.HXKXHXV.x y.x x x x x z z k l l k l i l l l u l l 3.;.3.3.3.3.4.4.7.7.7.4.q.8.8.0.q.q.q.q.q.q.q.r.8.q.q.8.8.3.3.3.3.7.7.7.q.q.a.s.j.b.M.K.P.oXVXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX.Xn.v.v.b.b.s.s.s.s.KXKXq.0.q.KXKX7.7.KXKXKXKX3.3.KXKX7.3.KXKX7.7.5.KXKXKXKXKX7.3.KXKX3.7.KXKX5.3.3.3.l l l l l l l l 4.l 4.4.4.9.y.x y.Xi y.x 9.9.z x z z c k l k l l i l u l l 1.;.3.3.3.3.3.7.0.7.e.0.7.e.8.q.q.q.q.q.q.q.q.q.a.q.8.8.8.4.4.7.3.3.3.3.4.8.q.w.w.b.n.B.B.I.oXAXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX.XI.B.N.b.b.b.s.w.w.KXKX0.0.q.KXKX8.4.7.7.7.7.3.:.KXKX7.7.KXKX3.7.KXKX7.7.KXKX7.3.KXKX7.3.KXKX5.3.3.3.3.l l l l z l x 4.4.4.4.4.4.v b c.AXKXKXKXKXKXdXk l l l 1.1.1.1.1.1.1.1.1.1.1.5.5.1.7.3.8.k.n.j.r., . . g %XxXZXZXZXBXZXZXZXZXNXBXBXBXmXhX3XiXsXkXpXpXpX7XyX7X6X6XiXaXhXmXzXzXhXxXxXxXxXxXzXxXxXxXxXDXFXcXg . 9 7 2 7 7 3.i.a.a.a.a.i.a.i.k.a.a.h.F.z.3.x.aXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXSXU.7.3.l 5 1.1.1.1.1.1.1.1.1.1.1.=.6.1.h ; ; Z Z F F S F ( ( ( ( F F R ) ' ` } ] .......o.o.o.o.@.+.o.o.o.@.@.+.#.#.#.#.#.#.#.+.[ ] ] ] [ ] ] ' ) F G C ; * @ : t x.i.u.i.8.8.a.i.a.i.a.a.h.x.h.a.a.a.l.w.k ZXKXKXKXKXBXx b v b y.z x x x z z l k k l l l l l l 1.;.3.3.3.3.3.3.3.7.7.4.0.8.q.q.q.q.q.a.w.q.a.r.q.r.q.q.8.8.4.3.3.3.7.3.8.q.q.a.s.s.b.N.L.P.oXVXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX.XI.N.v.v.s.s.s.w.s.KXKX0.0.KXKXq.0.7.7.7.7.7.7.:.KXKX3.5.KXKX7.7.KXKX7.3.KXKX:.3.KXKX3.3.KXKX5.3.3.l l l l l z z l 4.x 4.4.x.y.x y.v A.KXKXKXKXKXKXKX%X1.1.6 e 1.1.=.1.1.1.1.1.1.1.6.=.1.2.7.8.k.z.k.t., . o g %XpXzXzXzXxXzXzXxXxXxXfXhXhXhXsXfXsXdXdXgX4X1X>X>X1X1X9X6XiX3XpX6XpXiXpXgXaXaXpX7XpXpXaX8XnXBXjXj X 9 2 q 7 7 1.i.i.a.a.h.a.a.a.i.a.a.q.J.z.3.r.sXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXSXT.7.3.u 5 1.;.;.1.u 1.=.1.1.1.=.=.6.6.h ; C C Z F F S F ( D ( D D R F ) ' ` } ` ...o. ...........o.o.o.o.@.@.+.+.+.#.#.#.#.#.+.@.] [ [ ] [ ] ` ' D G C = * & @ q 4.i.i.i.4.q.a.a.i.a.a.a.h.h.a.a.h.k.a.&.eXKXKXKXKXKXJXA.x c.b 9.x x x 3.l l k l k l l l l l z 1.u 3.1.1.3.3.3.7.0.7.0.7.8.8.q.q.q.q.q.q.q.a.a.q.q.8.q.8.8.3.7.3.3.7.3.8.8.q.w.a.j.b.B.L.B.oXVXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXoXM.n.c.v.v.b.s.g.w.KXKXKXKXKX7.7.7.4.7.7.7.7.7.7.KXKXKXKXKX7.3.7.3.KXKXKXKXKX3.7.7.KXKXKXKXKX3.3.1.3.3.z z z l l z 3.x x 4.x q.9.9.b *XKXKXKXKXKXKXKXHXZ.u 6 u u =.6.1.1.1.1.1.2.1.1.1.1.1.1.a.k.j.h.h.q . X f S.3XfXfXfXgXfXlXsXiX,XsXfXgXsXaXgXsXdXsXpX4X&X$X#X@X@X$X5X3X3XyX3X3X3XdX2X&X>X4XpXiX6X6XpXhXBXhXj . + 2 7 7 7 &.i.i.a.a.i.i.h.a.d.d.a.a.m.m.l r.nXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXW.5.5.6 k l =.5.1.1.1.1.1.1.;.1.5.8.c 0 ; ; Z Z Z S S F ( D D D D F R ) | } } . . ... .] .... .....o.o.o.o.@.@.+.+.+.#.#.#.#.+.+.] ] [ ] ] ] ` ' D G C = - & @ 0 4.8.7.u.i.i.i.i.i.i.a.i.a.8.k.7.l.j.u S.KXKXKXKXKXKXKX*Xz t.x b x 4.x x 4.x z l z l l l l l 1.3.1.1.3.3.3.3.7.7.4.4.7.0.e.8.8.0.q.q.q.a.a.r.q.q.r.q.q.8.8.4.7.3.3.7.8.8.8.w.w.s.b.b.B.B.P.oXAXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX XM.I.b.v.v.s.s.w.s.q.q.g.0.0.0.7.4.4.7.7.:.3.0.7.KXKX7.7.5.7.7.5.3.3.3.3.0.3.3.0.7.3.0.3.7.3.3.3.1.z 1.z z l l z 3.z x 4.4.x q.w.e.b nXKXKXKXKXKXKXKXKXfX4.;.i u e =.1.1.1.=.1.1.1.1.1.1.7.1.a.h.j.a.h.q X X f C.bXaXsXfXlXfXiX1X&X%XiXsXdXgXaXpXpXgXfXdX3X*X$X@X@XC./.*XX&X$X%X%X$X*X4XiXhXNXhXj . @ 7 2 2 7 1.a.k.h.h.k.h.a.k.a.a.k.k.z.m.1.^.FXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXX4XyXpXdX&XyXgXsXsXaXpXfXmXmXxXfXiX>X%X@XC.D.C.1X4X3X3X3X3XdX*X$X*X>X*X&X@X%X1XsXZXhXj . + 7 2 7 7 1.i.i.h.a.h.i.k.h.a.d.k.h.z.Z.1.z.KXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXfX4.1.e i c =.-.2.1.1.1.;.1.1.l 3.2.q 0 ; ; Z Z Z A A F S S S F F D %.' } } } . ... . . ... . .} ` ` ` ` ..o...o.+.+.+.#.+.+.+.+.O.] O.] ] ` ` ' ) A C = * & o : l 4.3.0.i.i.8.i.i.i.a.a.4.s.a.F.8.c.FXKXKXKXKXKXKXKXKXKXS.z t.v 9.4.x x x z c 2.z k l l l 3.1.1.1.3.3.3.3.3.7.3.4.7.0.0.7.q.0.0.q.q.q.q.q.q.8.r.q.8.q.8.e.8.4.3.3.4.8.8.8.w.w.w.j.n.M.K.P.oXAXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXyXtXtXtXtXtXtXtXtXtXtXuXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXuXtXtXtXtXtXuXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXdXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXyXtXtXtXtXtXtXtXtXtXtXtXtXtXtXdXS.3X3X1X1X4XiX3X4XyX$X3XfXlXsXsXpXxXZXBXmXjXgX7X1X@X/.M C.1X3X3X3X3XyXpX>X&X*X>X2X&X$X|.&XsXNXhXv . + w 2 7 7 1.h.k.a.k.i.h.a.a.a.k.a.h.z.m.2.A.KXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXBXt.1.6 5 l 1.1.1.1.l 1.1.1.1.l 1.4.c 0 ; ; Z C Z Z A A S S F F F R { _ ` } . . . . . ..... .` ` ` } . .o.o.....+.+.+.+.+.+.+.+.O.] ` ] ] ] ` ' ) A C = & o @ , l 7.e.e.8.8.a.i.i.a.i.h.7.s.F.7.l pXKXKXKXKXKXKXKXKXKXKX$Xz 9.y.9.9.x 9.4.x 2.c 3.l l l 1.l l 1.3.z 3.;.3.3.3.3.3.0.3.7.0.8.0.0.q.8.q.q.a.a.q.q.q.q.q.q.4.8.8.3.3.3.4.8.7.w.a.s.b.m.N.P.I.oXFXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXyXtXtXtXtXtXuXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXyXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXdXtXtXdXdXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXC.X@XC./.X2X$X$X&X>X6XfXZXxXm X @ q 7 7 5 1.a.k.h.d.h.a.h.k.a.k.k.h.F.z.=.=XKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXGXA.l 6 6 l 2.1.1.1.1.=.1.1.1.1.1.7.2.q = ; ; C Z Z F A S S S A F D { _ } } } } . . . . . .} } } X.X.o.X.o.o.....o.o.+.+.+.+.+.+.O.` ] ` ] ` ` _ ) A C * & & : q 7.a.0.q.i.a.i.a.a.a.i.a.d.d.k.z V.KXKXKXKXKXKXKXKXKXKXKXiX9.9.9.y.4.x 4.4.2.x l z l l l 1.1.1.1.1.1.3.3.3.3.:.e.3.7.4.0.7.7.7.0.q.0.q.q.q.q.a.q.x.8.q.8.8.8.4.3.3.7.7.8.q.w.s.a.v.b.M.K.K.oXFXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX:Xn.I.v.b.v.v.s.w.w.q.q.0.0.0.0.4.0.3.3.0.3.7.7.7.7.3.3.7.3.7.7.7.3.e.7.7.7.7.:.e.3.7.3.3.3.3.3.3.1.3.3.l l 1.4.2.4.4.4.9.y.e.r.9.v JXKXKXKXKXKXKXKXKXKXKXKXKX,X4.l w 1.1.1.1.1.1.1.1.1.;.1.1.8.h.f.0.8.h X X f C.X&X$X$X&X1X9X4XpXxXZXzXM X + q 2 7 5 1.h.i.k.a.k.k.a.k.a.k.k.k.U.h.2.kXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKX.Xi =.5 l 1.1.1.1.1.1.1.1.=.=.&.5.i.r = ; ; C Z Z Z A S S A A S R { _ } } } } . . ... . . .} X.X.X.o.o.X.o.o.o.o.o.@.o.+.o.o.o.O.` ` ] ` ` ` _ ) G J * @ @ > w i.i.7.a.i.i.i.i.i.i.a.a.d.G.s.z dXKXKXKXKXKXKXKXKXKXKXKXzXt.b b y.x.b 9.x x 4.2.4.l l 1.l 1.l 1.l 1.1.;.;.3.:.3.3.3.7.0.q.4.0.0.7.q.0.q.q.q.q.q.q.q.q.8.8.4.4.3.3.7.4.8.7.w.a.w.s.b.M.P.P.oXFXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX4Xb.I.b.b.s.s.b.s.s.s.w.0.0.0.3.0.3.3.7.7.3.0.3.0.7.7.7.7.7.7.:.3.7.3.7.7.7.7.7.3.3.3.3.3.3.3.1.3.3.1.3.3.z 4.4.x 4.4.9.9.b e.r.9.S.KXKXKXKXKXKXKXKXKXKXKXKXKXFXz.1.&.l 1.1.=.1.1.=.1.1.1.1.1.7.a.w.w.q.k X X f S.1XpXsXlXxXxXfXpXiX$XXpXdXsXfXlXlXzXhXiXiXlXdXdXgXfXsXfXBXHXLXGXCXzXfXiXyXiX6XiXyX9X6X6X6XaX9X9XiXpX6X9X7X6XcXCXjX> 9 2 5 7 6 7.a.i.a.a.i.i.a.a.i.k.h.F.F.h.h JXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXBX8.5.i k =.=.1.1.l 1.1.1.1.l l ;.:.x g g ; C Z Z S S S S S S S R ) ) ` } } } } . .X.o.} } } } X. .X.X. .o.o. .o.o.o.o.@.o.o.o.] ` ` ` ` ` ' _ D G = * @ > l z x.q.8.p.a.a.a.8.0.a.s.g.f.a.3.>XKXKXKXKXKXKXKXKXKXKXKXKXKXD.9.z.e.b x x x z x z z x x l z l l 1.3.l 1.3.3.3.3.3.7.3.3.3.7.4.4.8.q.q.8.q.q.q.a.q.r.q.x.q.8.7.7.7.7.3.3.7.8.q.r.s.b.N.B.I.P.-XHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXyXb.I.N.b.v.s.w.s.s.w.w.e.0.7.7.3.7.3.7.7.7.7.3.0.:.7.0.3.0.3.7.7.7.7.7.:.7.7.7.7.3.3.3.3.3.3.1.3.1.3.1.3.z x 4.x 4.9.x 9.9.9.t.b mXKXKXKXKXKXKXKXKXKXKXKXKXKXKXxXr.;.6 l l 1.1.;.1.1.1.1.1.u 1.a.h.w.8.c X % |.4XaXaXsXhXsXcXhXhXlXfXfXsXfXsXsXsXdXsXzXAXAXBXzXfXdXdXiX3XiXiXpXiX6X6XaX6X6X7X7X6X6XiXiXxXZX@Xo X : 7 3 8 6 q.a.a.a.i.k.k.a.h.d.k.z.l.F.6.^.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXHXz.7.5 z 1.=.1.=.1.;.1.1.=.e l 3.5.l t g ; C Z Z Z Z S Z Z U U ( ) | } } } .} } . .X.} } } } X.X.X.X.X.X.......o.o.o.o.o.o...` _ ` ` ' ` ' ) D C = & $ , x 4.r.8.8.8.u.i.a.a.q.g.a.a.f.0.k GXKXKXKXKXKXKXKXKXKXKXKXKXKX@X9.h.e.b 9.x x z x x 4.z 4.l l l 3.1.1.z 3.1.z 3.3.3.:.3.7.e.7.7.0.q.8.q.q.q.8.q.q.q.q.q.8.8.8.8.7.4.3.3.3.7.8.r.h.j.b.n.N.B.P.-XHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXgXv.v.n.t.v.s.s.w.s.w.q.0.e.7.0.7.7.7.3.:.3.7.7.7.0.3.3.7.7.7.7.:.7.3.3.0.:.7.7.3.7.3.3.3.3.3.1.1.3.1.z z 1.4.4.4.x x 9.9.v 9.9.y.HXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXZ.3.5 l l 1.l 1.1.2.1.1.1.;.1.q.q.8.8.c + o M 7XhXcXaXcXaXpXpXiXiXiX6X3X3X1XX>X&X&X>X>X>X1X>X,X1XS.< + # , 5 3 7 1.a.a.a.a.h.a.h.a.i.k.k.k.l.J.2.%XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXW.1.u l 4.1.1.1.1.1.1.1.1.1.l 1.5.2.h f ; ; Z Z Z U S S S A S ( { | } } } } } } . .X.} X.} } X.X.X.X.X...o.o...o.o.o.o.o.o.X.` ` _ ` ` ' ' ) U ; * @ < h 6.8.8.q.i.i.i.i.8.a.q.q.q.d.f.3.W.KXKXKXKXKXKXKXKXKXKXKXKXKXKX*Xv r.y.b 9.9.4.x 1.z 1.x l l l l l 1.1.1.1.3.3.3.3.:.7.7.3.3.3.7.0.0.8.q.8.q.q.q.q.q.r.8.q.8.8.8.7.4.7.3.8.4.8.q.a.s.v.N.B.I.P.-XJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXxXv.I.n.b.b.s.s.s.w.w.q.g.0.0.3.3.7.7.7.e.0.3.0.7.3.7.7.:.7.7.7.7.3.0.3.7.3.0.7.3.7.3.3.3.3.3.1.l 1.z 3.l z 4.4.x 9.9.9.y.t.v e.V.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX$X3.u 6 l 1.l =.1.1.1.1.1.;.1.7.h.a.8.x < O X $ h m m V.V.V.^.y.b b v b h h g C.>XiXsXdXiXiXiXyXyXiXdXdXlXhXC.> : , , , , , , < < < 1 , 1 < 9 , , 4 7 4 7 7.a.a.a.a.a.a.i.a.a.i.k.j.l.z.l zXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXaXl l 5 1.2.1.u 1.1.1.l =.=.l 1.5.=.c h = ; Z Z Z U U S Z A U D { | } } X.} X.} . .X.X.} } } } X.X.X.X.X.......o.o.o.o.+.o.O._ _ _ ` _ _ ) ( A = * % , k x.8.8.i.a.i.a.8.a.a.a.0.s.s.a.u mXKXKXKXKXKXKXKXKXKXKXKXKXKXKXgXv r.c.b x x x x x z z z x l l l 4.1.1.z 1.3.3.3.3.3.:.3.3.7.7.3.7.q.8.8.q.q.r.q.q.q.q.8.8.8.q.8.4.7.3.7.8.8.8.q.t.s.b.n.B.B.P.=XJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXLXmXB.H.N.b.s.s.s.s.s.w.q.e.0.0.0.3.7.7.7.7.:.7.3.7.7.7.3.0.,.7.7.7.:.7.0.7.7.3.0.3.7.3.3.3.3.3.1.1.3.1.1.z l 4.4.4.x 9.9.b 9.c.z &XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXmXt.l 6 6 1.1.1.1.1.1.1.1.1.;.1.q.a.i.q.x h 4 , 4 h 4 3 3 3 3 w 3 3 k p 4 + o j S. q 4.i.8.i.i.i.a.a.q.a.a.a.q.a.f.7.t.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVXc.9.w.9.9.9.x 4.z z 4.z 4.l z l l 1.1.l 3.1.3.3.3.z 3.e.:.7.4.4.8.7.q.q.8.q.8.q.q.q.q.q.r.8.4.8.4.4.4.3.4.8.8.q.w.h.v.n.M.K.P.;XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXBXB.H.n.b.v.s.s.s.w.q.q.g.e.0.e.7.0.7.3.7.0.3.7.7.3.0.7.0.3.3.0.3.3.7.7.7.7.7.3.3.3.3.3.3.3.3.1.3.3.l 3.l z 4.9.4.e.9.9.y.9.y.z fXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXZ.l i u 1.1.1.1.1.1.1.1.;.;.;.q.h.k.6.4.9.8.6.9.4.3.3.3.4.4.3.1.l z k 3 @ g C.4XfXpXpXkXdXyXdXiX3XdXzXmXm X + h k 3 2 7 2 2 2 8 8 2 8 2 2 8 3 5 2 7 ;.a.d.a.d.h.h.h.k.h.h.h.k.l.m.7.Y.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXA.7.1.l l 1.1.1.1.1.1.1.=.l e =.5.5.l t = ; Z Z Z U S U Z S S { { } } } } } O.O. . .X.X.X.} | } | } X.X...o.......X.o.$.O._ _ _ _ _ ' ) ( F ; * % , k 8.i.x.i.i.a.i.q.a.a.i.a.a.s.j.&.rXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXV.9.w.9.y.v 9.z z z z x l l l l 1.1.3.1.3.3.l 3.3.3.3.3.3.3.4.7.7.q.8.q.8.q.8.q.q.q.q.8.q.4.8.7.7.7.7.3.8.8.8.q.h.j.b.n.B.P.P.wXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXAXN.I.K.b.v.s.b.w.s.q.q.g.0.e.7.7.3.3.7.7.7.:.7.7.7.3.:.3.3.3.7.7.3.,.7.7.:.7.0.3.7.3.3.3.3.3.1.1.3.z 1.z z 4.4.4.x 9.e.y.t.t.z BXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX*X4.;.6 2.l 2.1.1.=.1.1.1.u ;.4.8.8.7.8.q.8.7.e.3.4.q.3.;.3.4.z z z l i # . g C.1XiXyXpXdXdXiXdXdX3XsXxXzXm o + q 2 3 2 7 2 2 2 8 8 7 2 2 7 2 4 7 7 7 3.f.d.g.d.a.d.a.h.h.k.h.h.J.n.u bXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX9X4.1.1.l 1.1.1.l &.1.1.1.l 2.=.=.5.1.t g ; Y Z Z S S U U U S ( { | | } } } } X.} } X.X.$.X.} } } } X.X.X...X.o...X.o.O.| _ | _ _ _ ) ( ( Z = & > 4 k 8.i.i.i.a.i.i.8.a.w.e.q.a.a.s.6 ZXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXC.9.9.9.e.e.x x x 3.4.z 4.l z 1.l 1.l 1.3.1.3.3.3.3.3.3.3.3.7.7.0.0.8.8.q.q.q.q.q.q.q.q.q.8.q.8.4.3.3.7.3.4.8.r.h.j.b.N.B.P.K.,XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXDXb.I.n.n.v.b.s.s.s.w.q.0.0.0.7.7.7.4.3.7.7.3.7.3.3.7.7.7.0.3.7.3.7.7.7.7.e.3.:.3.7.;.3.3.3.1.3.l 1.3.z 3.x 4.4.4.e.9.e.y.w.w.b SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVXe.7.&.r c e 5.&.1.1.l 1.1.6 2.8.8.4.7.8.4.4.4.3.4.z 3.z :.z k k l l h # . > D.4XpXpXdXgXpXpXgXpXdXfXxXhXM X + k 7 2 2 2 2 2 2 8 1 2 2 2 2 7 7 3 7 u q.h.a.a.d.a.a.k.k.k.k.h.t.J.G.z AXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXb i.&.;.1.1.1.1.1.1.1.=.1.1.=.1.1.2.h f ; C C Z Z S S U U Z S %.| | } } } } X.X.X. .X.o.X.X.X.X.X.X.X.X...o.o.o.o.O.| | { _ _ _ ) ( ( S ; * % q w 7.q.p.i.8.i.8.a.a.i.q.e.0.d.a.:.V.HXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX@Xy.9.e.y.b 9.x x 4.4.z z z l 4.3.1.z 1.3.1.1.3.1.z 3.3.3.3.7.3.4.8.q.8.8.q.q.q.q.0.q.q.0.0.0.8.7.4.7.3.3.7.q.q.s.s.v.n.M.P.B.4XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXN.n.M.v.v.v.s.w.s.w.q.e.0.0.7.7.7.7.0.7.7.7.0.3.:.7.7.3.3.:.7.0.7.7.7.7.3.3.3.3.3.3.3.3.3.1.3.1.z l 3.z 4.4.4.e.9.9.e.9.c.9.V.HXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXZ.1.=.5 r l 5.1.l l 1.1.1.6 2.4.q.8.8.q.7.4.4.4.3.3.3.3.3.3.k z 3.l q # > D.1XdXXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX1Xy.y.y.9.9.x x 3.4.4.z 3.z 3.l z 3.1.3.1.3.3.1.3.1.3.3.5.3.4.4.7.0.8.q.q.8.8.q.q.0.q.8.q.7.q.8.7.7.3.3.3.7.q.w.s.j.b.n.L.P.K.3XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXGXB.v.M.b.v.s.s.w.w.q.g.e.0.3.3.3.7.e.7.7.7.:.7.3.3.7.7.0.7.7.7.3.0.7.7.7.7.:.7.3.7.3.3.3.3.1.3.z 3.z z 3.4.4.4.9.9.9.y.t.c.e. XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXdX4.2.6 l l 5.=.1.1.l 1.u 1.6 1.8.q.q.q.8.4.4.4.4.3.3.z ;.3.i z 3.l k $ > D.>XfX1X&X&X&X&X>X&X%XyXzXzXM X + h 5 7 7 2 8 2 2 8 2 2 2 7 7 5 7 7 6 8.h.j.a.d.d.k.h.k.a.h.k.h.m.F.l pXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXfXz h.6 1.6 1.1.1.1.6 1.2.1.=.2.1.1.;.k 0 ; ; Z Z Z S U U U U U U %.| | O.} } } } } X. . .} } X.X.X.X.X.X.X.X.X.| { ) ) ) ) ) ( ( Z ; ; & @ < c 7.8.8.i.i.i.8.a.a.i.d.d.w.a.d.i.6 CXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXhXc.t.y.9.b 9.z z z 4.z x 1.x l 3.1.1.3.1.3.3.3.1.3.3.3.3.5.7.3.7.7.4.8.q.q.q.q.q.q.0.7.q.7.0.8.4.7.7.3.3.7.q.w.s.s.v.B.L.R.A.pXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXR.v.n.b.v.v.v.w.s.w.q.g.0.,.0.0.7.7.7.7.3.0.0.3.3.3.7.:.7.7.7.7.0.7.7.7.3.7.7.3.3.3.;.3.3.1.3.3.3.z 3.4.x 4.4.9.9.9.t.t.t.x 4XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXGXy.3.u i l =.1.u l 1.1.1.6 6 u 3.8.q.8.q.8.8.q.8.4.3.3.3.7.z z 3.1.k $ $ V.1XhX4X,X3X4X1X,X>X&XdXzXnXM X + q 7 2 2 2 2 8 2 2 2 7 2 7 7 7 7 6 7.h.h.a.k.f.a.h.k.a.k.a.k.l.n.h.y.SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXv q.&.=.&.1.1.1.1.1.1.=.1.1.=.1.1.:.l 0 * ; ; Z Z Z ( U U U U S ( %.| } } } } } } X. . .X.X.X. .O.X.X.$.X.} | { %.{ ( ) ( ( ( ( Z ; * & % q z 8.8.x.i.i.i.a.u.a.i.g.a.q.d.d.=.A.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXAXc.y.y.y.y.9.x x 4.4.x 3.z 1.3.l 3.3.1.3.l 1.l 3.1.3.3.3.3.3.7.7.e.8.q.4.8.8.q.q.7.0.q.0.0.7.7.4.3.3.7.7.4.q.q.s.s.v.B.L.P.B.hXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX Xv.n.v.b.v.s.s.s.w.q.0.0.7.3.3.7.3.7.7.3.7.7.:.e.3.7.7.3.7.3.7.7.7.3.:.7.3.7.3.5.3.3.3.3.1.3.1.4.l 4.x 4.9.e.e.9.t.t.t.c.x fXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX%X3.l i u =.6 1.1.1.l 1.l e u 1.7.8.q.q.8.q.8.8.8.7.7.7.7.u 3.1.3.k $ : D.>XfXiX,X1X1X1X,X>X1XfXzXzXD.o + q 7 7 7 2 2 8 7 2 2 7 7 5 7 7 7 1.i.k.h.a.a.k.a.h.k.k.h.k.l.J.l.l $XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX1Xu 5.6 1.l 1.1.1.1.=.1.=.2.2.1.1.:.1.q > * ; N Z Z Z Z ( U U U U U %.{ | } } } } } } X. .X. .X.X.$.$.O.} | { %.( { { ( ( ( ( ; ; * & # , k 8.7.u.x.u.8.i.u.i.i.i.g.0.a.l.i.l hXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXV.9.v t.e.9.x 4.x 4.z z 4.z 2.4.4.1.z 1.3.3.1.1.3.;.3.5.5.3.7.7.7.q.8.q.8.q.q.q.7.0.q.q.0.0.3.7.5.4.7.4.8.i.w.h.j.b.n.B.P.A.MXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXXXv.B.v.v.b.s.w.s.w.q.0.0.0.0.0.3.3.0.7.0.7.7.3.:.7.7.7.0.:.0.3.7.7.7.7.7.7.:.3.3.3.3.3.3.1.3.4.3.4.3.4.4.e.e.e.w.t.c.c.c.v CXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXBXt.4.i u 1.1.e 1.l 1.1.1.l 6 u 3.q.q.q.r.q.q.r.8.q.0.7.0.z z 1.5.z $ $ V.1XdXsX3X1X1X1X&X&X3XpXxXzXC.o + 3 5 7 8 2 7 7 7 2 2 3 7 2 7 7 =.i.k.k.d.a.a.f.a.h.k.k.k.k.F.Y.a.h.AXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXz.5.1.1.1.1.1.1.1.1.1.1.2.=.2.1.=.c q % % * ; ; ; Z Z Z S U U U U U ( { { | | } } } } } } } } O.} | | { { %.( ( %.( S ( ; ; ; % o . $ q c i.i.p.i.8.a.a.i.i.i.i.d.s.a.k.&.A.JXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXA.y.c.y.9.9.9.4.x 4.x 3.x 4.3.3.1.3.1.3.3.l 3.3.1.3.3.3.3.7.4.0.7.4.4.8.q.8.q.q.q.0.0.0.0.0.7.4.3.7.7.8.8.a.h.h.b.b.B.B.P.R.BXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX,Xb.v.v.v.v.b.v.w.s.s.0.0.7.e.7.e.3.0.3.3.0.3.3.:.0.7.7.0.3.7.7.7.7.7.7.7.:.7.3.3.3.3.3.3.1.3.3.4.4.3.4.9.9.9.e.w.t.c.c.c.c.VXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX X3.:.u l 1.1.1.l 1.l 6 1.6 6 1.8.q.q.h.h.a.x.q.q.8.7.7.3.3.1.3.k $ $ m *XiXsXsX1X1X1X>X1XsXfXxXmXM o O q w 2 7 2 7 7 2 2 3 7 5 7 7 e 8.k.k.k.h.k.f.a.a.d.k.k.h.l.J.m.5.=XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX,X1.7.5.1.2.2.1.1.1.1.1.1.=.1.=.e r w > # & * = ; C Z Z S S S ( U U U U ( %.{ { _ { | } } | | | | ) ( ( U ( ( ( S S S C C = % o . X , h 4.8.i.i.p.a.i.8.i.i.a.8.a.s.h.7.l sXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX Xy.t.c.9.9.x x 4.4.x 3.z 4.z 3.3.3.3.1.1.3.3.3.3.3.3.3.3.3.7.3.0.4.7.7.q.q.q.q.7.0.0.7.7.4.7.7.4.3.7.4.8.w.h.s.b.n.M.L.P. XVXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX7Xc.H.H.v.v.s.w.s.s.w.0.e.0.:.7.3.3.7.7.3.3.7.7.7.3.:.7.7.7.:.3.7.7.3.7.3.3.3.3.3.3.z 3.3.z z 3.3.3.4.4.e.9.e.y.e.w.c.c.c. XHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXZXq.p.;.h 1.1.1.1.1.6 1.1.1.1.;.2.8.x.h.a.8.a.a.a.7.7.4.3.7.z z z : % M *X7XiXsXXeXdXsXxXzX/.o O q 7 2 2 2 2 7 2 7 4 7 7 5 6 5.k.k.a.a.h.a.a.h.a.k.k.a.h.j.M.q.r.ZXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVXv >.;.=.e =.6 1.1.1.1.1.l 1.1.e e w p $ X o % * ; ; Z A A S Z S U U U U ( ( ( ( %.U { { { %.( ( U U ( ( ( S S Z Z C ; * & o X $ 5 4.r.8.8.a.i.a.8.8.8.a.a.q.a.a.z.l Z.JXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX5Xc.l.c.t.9.9.3.3.3.3.4.z 3.3.3.3.2.4.4.3.6.4.3.1.;.3.3.3.3.3.7.3.7.0.7.q.8.q.q.8.q.8.8.q.7.q.0.3.4.4.7.q.q.a.f.j.v.B.L.P..XFXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXhXc.H.v.v.b.s.s.w.q.0.0.0.0.:.7.3.3.3.7.,.3.7.7.7.0.7.7.7.3.7.7.7.5.3.5.7.5.3.3.1.3.3.3.3.4.3.z z 4.4.4.4.9.e.e.t.t.c.N.c.-XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX:X;.7.l l l l 1.l l 1.1.;.1.1.1.7.8.h.a.a.q.i.q.a.8.e.7.7.z z k 9 > M &XiXkXdXiX1X2X>XbXpXpXvXxX/.O @ 7 7 5 5 7 2 2 7 w 3 2 7 6 6.i.h.k.k.h.k.a.k.a.k.l.k.l.k.J.F.5.>XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX,X;.7.2.2.1.1.;.1.1.1.&.l 1.1.l e e p < O . . & * ; ; ; Z Z Z S S S ( ( U U U U ( ( S ( U U ( U ( U U S S S Z ; ; ; * & . . X : q l 4.r.8.8.i.u.8.8.8.q.a.8.q.a.l.8.x fXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXMXc.n.y.y.9.e.4.4.3.9.3.3.z 3.3.3.4.3.3.3.1.3.3.1.3.3.3.;.3.3.3.0.7.0.0.4.e.8.8.e.q.4.7.0.q.q.4.3.7.7.q.8.q.h.j.l.n.M.P.P.:XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXmXc.I.n.v.b.v.v.s.q.s.0.0.0.7.7.7.3.7.7.7.7.7.7.7.3.7.3.7.7.7.7.3.7.7.5.3.3.5.3.z 3.z 1.3.3.z 4.3.4.4.e.8.9.e.e.w.c.c.N.t.3XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXc.1.5.&.l u l 1.1.l 1.1.1.1.2.7.2.8.i.q.a.q.i.a.q.8.7.7.3.z i : . $ m $XyXsXdXhX7X % # O o & & & % % * * * * tXtX* * % % @ O O $ 1 c x.p.p.p.i.i.p.p.7.3.a.i.i.i.a.i.7.a.8.8.a.a.h.z.a.y.DXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXyXe.y.t.y.t.r.9.e.4.4.e.4.e.3.4.1.4.4.3.4.3.3.;.3.;.3.3.3.3.3.3.3.7.4.7.e.7.e.8.0.7.4.7.4.7.3.4.7.8.8.q.w.s.j.n.B.P.P.oXmXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX4Xs.v.b.v.s.b.s.w.w.0.0.0.3.7.3.7.0.3.3.7.7.7.7.3.7.7.3.7.7.7.:.3.3.3.;.3.3.5.3.3.3.3.z z 3.4.4.e.9.e.e.9.^.t.N.c.N.N.>XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX.Xq.3.3.u 1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.5.p.8.8.3.1.l z l u u i i 5 5 3 3 3 5 5 5 5 5 5 5 5 5 5 5 4 7 7 u 5.i.k.k.k.h.i.d.i.k.i.k.k.h.r.q.r.k.L.l.z yXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX%X4.8.1.k l 1.1.5.1.1.w w 5 5 7 2 2 w q q 5 2 2 8 , < < : $ O X X X o o o & tXtXo X X X + < w i.6.x.i.x.6.6.0.8.i.8.q.i.8.7.a.q.i.a.8.a.a.8.d.d.l.8.8.BXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXNXx N.t.w.w.e.e.w.9.4.q.3.3.z z 3.3.3.3.3.3.3.3.3.3.3.3.3.7.0.3.0.3.0.3.7.7.e.7.4.7.7.7.7.4.7.7.7.0.q.q.q.w.j.b.M.P.P.XXGXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXs.I.v.v.s.b.s.w.0.0.0.0.3.3.3.3.7.:.7.3.:.7.7.7.:.3.3.:.7.:.z 3.:.3.3.3.3.5.;.3.3.3.e.3.3.e.8.9.q.e.9.r.y.t.N.c.B.c.dXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXW.z e.1.1.u e 1.1.1.1.1.1.1.1.1.1.1.1.1.1.8.8.8.4.3.3.z l z l i u i i i 5 5 i 5 5 5 5 6 5 5 7 7 2 5 i 1.8.a.i.i.i.i.h.k.a.h.h.d.k.i.i.k.h.h.Y.F.u %XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXZ.l 6.5 1.1.6 1.1.6 e e 5 q 7 q 7 2 2 3 3 3 2 3 1 , , , < : : @ o X . tXtX X @ , c 9.4.6.8.6.6.8.6.8.8.7.8.8.8.8.i.8.8.8.a.8.i.a.q.i.i.F.h.i iXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXAXy.w.c.w.w.w.e.q.q.9.4.e.3.e.3.3.3.7.3.3.3.;.3.3.3.3.3.3.3.3.7.3.7.3.0.0.4.7.7.7.0.e.7.4.7.7.4.4.8.8.q.q.w.b.n.M.P.B.:XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXmXw.K.n.v.s.s.s.w.w.0.0.0.7.3.0.3.0.7.:.7.3.0.7.3.3.,.7.:.7.7.3.3.z 3.3.3.3.5.3.3.3.3.3.3.4.e.4.9.r.e.9.r.y.t.c.B.c.A.BXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXV.l 8.1.u 1.1.1.1.1.1.1.1.7.1.1.1.2.1.1.5.6.4.1.l l z l z l u l u u i w 5 6 5 5 6 7 7 5 5 5 6 6 3.4.8.q.a.i.i.x.a.h.a.h.a.h.h.a.a.F.k.k.J.F.l A.JXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXBXy.4.p.1.6 l 1.=.=.w w 5 7 q 7 3 3 3 3 5 3 5 q q q 2 1 8 , , < < : @ + + tXdX: q b 4.2.7.8.8.6.6.6.6.8.i.7.i.8.8.8.8.q.7.8.8.8.q.8.q.q.k.F.k.l >XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXGXV.w.t.t.w.w.e.q.9.q.4.4.e.3.3.7.7.3.3.3.3.5.3.3.3.3.3.3.7.3.3.7.3.7.3.7.7.7.0.7.7.7.7.0.3.7.7.8.8.8.q.w.h.b.n.B.P.P.4XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVXb.n.n.v.b.s.s.s.w.g.0.e.,.3.3.7.7.7.3.3.7.3.0.3.3.3.3.7.7.3.;.3.3.3.3.3.;.3.3.7.3.3.z 3.4.4.8.q.e.e.w.t.t.b.N.A.c.A.SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXZ.5 7.3.;.u 1.1.1.1.1.1.2.7.1.1.1.1.=.=.1.1.l 5 i l l u l l i l i k l u l l u u 6 6 6 l 1.1.7.8.a.8.8.8.h.k.a.a.i.k.i.k.k.h.q.h.F.F.Y.z.l A.HXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXzXy.6.i.1.6 l l e e e w w 7 q q w q 5 q w q w w w q q q 1 1 , , , 1 1 q tXdX4.z 4.6.p.5.6.8.6.8.6.8.8.8.8.7.8.8.8.a.8.a.a.7.a.i.a.8.h.m.k.e W.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX|.w.t.t.w.w.w.q.q.9.q.4.3.e.e.3.3.3.3.3.3.3.3.:.3.3.3.3.7.7.3.3.0.3.0.7.e.7.7.e.7.4.0.0.7.3.e.8.8.q.q.a.h.b.N.B.P.P.gXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFXB.b.n.b.b.s.s.w.w.0.0.0.7.3.3.3.0.7.7.3.7.7.7.,.3.7.:.7.3.:.3.3.3.3.3.3.;.3.3.3.3.3.3.3.4.4.e.q.r.e.w.w.c.n.N.M.c.|.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXV.u q.1.1.;.1.1.1.1.1.1.1.1.1.1.1.1.1.1.l 6 5 5 5 u 5 u e 5 e l u u u l u 1.1.1.1.5.2.7.8.8.8.8.a.i.i.a.a.a.a.k.a.a.d.k.q.h.h.k.L.k.z A.SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXfXz.k 1.l 6 l 7 e w 5 7 q 2 3 3 k 5 q w q 5 q q e e w w w 2 1 2 3 c l tXtX6.6.6.5.5.5.5.7.7.7.8.8.8.7.8.8.8.8.8.q.8.a.8.a.q.q.a.a.h.r.i S.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX4Xe.t.t.t.w.w.e.q.q.9.4.4.3.3.7.3.3.3.5.3.3.3.3.3.3.3.3.3.3.3.0.3.7.3.0.0.0.4.0.7.7.7.4.0.3.0.8.q.q.r.s.s.b.n.B.P.R.mXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXoXv.n.n.s.b.b.s.w.0.0.7.7.e.7.3.7.3.:.7.7.7.3.3.7.:.3.3.7.7.3.3.3.;.3.3.3.3.3.3.3.3.3.z 4.e.4.e.e.w.w.c.c.B.B.M.c.*XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXDXZ.;.8.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.l 5 5 3 i 5 5 5 w k e k u l l 1.1.1.1.8.8.6.p.i.i.8.u.i.a.a.a.a.i.i.a.i.a.h.a.h.a.h.h.J.z.9. XSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXjXc.3.8.1.k w e w w w 7 2 3 3 5 q w 3 3 2 2 2 q w w 5 w w 5 5 5 6 e tXtX6.5.5.5.7.8.8.7.7.7.8.8.8.8.8.8.8.8.8.8.8.8.8.a.a.h.h.h.j.z S.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXjX9.c.t.t.w.w.r.q.q.9.4.4.4.3.3.7.3.3.3.;.3.3.3.3.3.3.3.3.3.3.3.0.3.0.0.3.7.4.4.4.0.4.7.3.3.7.8.q.q.q.w.b.n.N.B.P.oXFXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX;Xv.n.v.b.v.s.w.0.g.0.0.7.7.3.7.0.:.7.7.7.7.7.3.3.7.7.3.7.3.3.3.3.3.3.3.3.3.:.3.3.z 3.z e.e.4.q.e.r.w.t.c.N.M.B.V.8XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXGXT.1.8.5.1.l 1.1.1.2.1.1.1.1.1.1.2.2.l e 5 k w w e l l l e l ;.1.1.7.7.7.i.6.8.8.i.i.8.i.g.i.i.a.a.a.q.a.a.h.a.a.a.d.k.z.J.F.3.A.SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXxXZ.6.8.5 q e e w w 2 3 3 3 3 q k w q 2 3 7 q q 2 5 w 5 e l l 1.1.tXtX7.6.7.7.7.3.5.7.7.7.7.7.8.8.8.8.8.8.8.i.8.8.8.a.a.a.h.a.q.-XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXAXw.b.t.w.w.w.e.q.q.4.e.4.4.4.7.3.3.3.3.3.;.7.3.3.3.3.3.7.7.e.7.0.3.3.3.0.0.0.7.0.0.0.0.7.7.0.q.q.q.w.s.j.v.B.K.P.XXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXpXe.n.v.s.s.s.s.s.w.0.e.,.7.7.3.7.7.7.3.:.3.3.3.3.3.3.3.3.3.3.3.3.;.;.3.3.3.3.3.3.3.4.4.3.4.q.e.e.t.w.c.b.N.B.c.A.SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX Xq.7.4.l l 1.1.l l l l 1.6.5.l 2.l l ;.l l l l l l l l l 1.5.6.7.8.8.7.8.8.8.8.8.8.8.a.a.8.8.i.8.a.a.a.8.q.a.d.G.F.J.a.8.-XJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXBXC.4.u.*.e e w q q w w k q q k w w w 3 7 5 5 7 5 5 u u u l 1.3.tXtX6.6.6.6.6.6.8.7.7.8.8.8.8.i.a.8.p.a.8.9.9.i.a.a.z.a.7.a.5XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXB.w.s.b.c.9.h.r.q.q.7.0.0.e.7.7.0.3.0.3.3.7.7.7.3.7.3.:.3.3.3.3.3.0.3.3.3.7.7.3.3.7.4.7.4.3.7.7.q.a.k.b.b.B.R.R.XXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXfXc.n.n.b.s.b.s.w.w.0.7.7.3.3.3.7.3.:.7.3.3.:.3.7.3.3.7.3.3.3.;.3.3.3.3.5.5.3.3.3.e.3.4.4.4.e.e.w.w.w.c.N.B.N.c.C.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXeX8.5.u.;.z z l ;.l 1.1.1.1.l 1.l 6 l 1.6 1.l 1.l 1.1.2.1.5.7.8.8.6.8.8.7.8.8.8.8.8.8.8.8.8.8.a.h.i.i.h.k.k.d.F.F.4.t.dXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSX-X4.4.6.6 7 l w w q 3 5 3 3 3 3 3 3 3 i 5 5 5 5 l u l l 3.7.tXtX6.6.6.6.7.6.7.7.8.8.8.8.8.7.1.i.p.i.i.q.q.h.u.d.k.1.Z.xXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX Xe.b.t.t.w.h.e.q.0.0.4.7.4.3.3.3.7.3.7.3.7.7.e.:.3.e.:.3.3.:.e.7.3.7.3.e.7.3.7.7.0.4.3.7.0.0.0.0.g.l.b.c.B.P.P.yXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCXB.v.n.b.s.s.s.w.s.w.0.0.3.3.7.7.7.0.3.7.:.7.3.3.3.3.3.3.3.3.3.3.;.3.3.3.3.3.3.3.3.4.4.4.4.q.e.w.w.w.w.c.M.N.c.%XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXxXU.&.7.e.u 1.1.1.5.3.;.;.1.1.1.1.l l l 1.2.1.1.1.1.1.1.5.7.6.8.6.8.8.8.8.8.7.8.a.8.a.8.h.a.i.a.8.i.k.G.F.J.k.2.A.mXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXgXc.7.7.5.&.5 k k w 5 w 5 5 5 5 5 5 5 i w l l l l l 1.3.1.tXtX6.6.6.7.6.6.8.7.7.8.8.7.8.8.q.7.8.i.i.i.h.s.F.p.5.-XAXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXpXz n.b.e.w.h.q.q.0.e.0.0.e.0.0.0.3.4.3.7.3.7.7.3.3.:.3.3.3.3.7.7.3.7.3.3.7.0.3.3.7.7.7.3.0.0.0.w.s.l.b.b.L.R.R.NXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFXR.v.v.n.v.s.s.s.0.0.0.0.7.7.7.7.7.3.0.3.7.7.3.3.3.3.5.7.3.3.3.3.3.3.3.3.:.3.3.3.3.4.4.4.e.9.q.w.w.w.c.c.B.A.c.gXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXW.3.7.7.5.5.5.=.1.l 3.1.l 1.l 1.1.1.1.1.1.1.2.5.1.6.5.7.6.6.7.6.7.7.8.8.8.8.8.a.a.8.8.i.8.h.a.a.F.F.k.2.y.1XHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCX X9.u 5.1.l 5 5 k 5 5 5 k l i i 5 i l e u l 1.1.1.1.5.tXtX6.6.7.7.6.8.8.8.7.8.8.8.8.7.4.q.8.p.k.k.k.a.;.j.pXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXBXz v.b.w.t.r.w.q.q.0.4.4.0.7.4.0.0.7.0.7.7.7.3.3.7.3.3.3.7.3.3.3.3.7.e.7.7.3.7.3.4.7.4.7.0.0.0.w.s.l.b.B.P.R.A.DXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXXXv.v.v.v.s.s.w.s.0.0.0.4.0.4.7.7.0.3.7.7.7.3.3.3.3.3.3.3.7.3.3.;.3.3.3.7.3.3.4.3.4.4.8.9.q.e.w.w.c.c.b.N.B.c.SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXdXl.i 3.5.5.5.1.l l 1.1.1.1.l 1.l 1.1.1.1.1.6.6.6.7.6.7.6.7.5.8.7.8.7.7.8.8.i.8.8.8.h.h.h.h.z.h.2.c /.BXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXhXD.i u 7.u u 5 i 5 5 5 k k 5 5 l l l u 1.1.1.5.5.8.tXtX7.7.6.7.8.8.8.8.p.8.8.i.8.i.8.8.i.k.k.r.1.i.-XSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXVXc.w.v.w.t.w.a.w.0.0.0.0.e.q.0.0.7.7.7.4.4.7.3.3.e.3.e.:.3.e.7.3.3.e.:.3.7.0.3.0.0.7.4.7.0.0.0.s.s.s.N.B.P.R. XJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXyXv.n.s.v.j.j.s.w.g.0.0.7.3.7.e.7.7.7.7.7.7.3.3.3.3.7.3.3.3.3.3.3.3.;.3.5.3.3.e.3.4.3.0.0.e.e.j.t.j.c.N.c.c.S.KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSX%Xv e.;.1.5.u z 3.1.1.1.1.1.1.1.1.1.5.6.1.1.5.5.1.1.6.5.6.7.7.8.8.7.8.8.8.q.x.h.h.k.k.h.3.z S.zXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXpXZ.4.1.l l l e u u i w l l l l l l 1.1.7.5.7.6.tXtX7.7.8.7.8.7.8.7.8.8.a.8.a.h.a.8.z.h.i 9.W.ZXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX Xe.v.b.e.w.w.w.q.0.0.0.0.8.q.8.8.4.0.0.4.7.7.3.3.3.0.:.7.3.3.3.7.7.7.7.3.7.3.4.e.0.4.0.0.q.g.s.s.v.v.B.P.R.,XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXfXn.n.b.n.b.s.w.s.q.0.0.e.0.4.7.0.7.7.7.3.3.3.3.3.3.3.3.3.5.3.3.;.3.3.3.7.3.7.7.4.4.4.q.e.9.w.t.j.j.c.z.c.c.&XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXAX=Xw.5.7.q.4.1.3.3.1.1.1.1.1.1.5.5.5.6.6.1.6.1.5.1.1.5.6.7.7.8.8.8.8.q.h.h.k.k.a.7.8..XZXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXxXW.9.4.4.4.l l l l k e l l l 2.1.3.1.5.7.7.tXtX7.7.7.8.7.7.7.7.8.8.a.a.a.h.k.x.1.q.-XZXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXyX0.v.b.e.t.w.q.q.0.0.e.q.q.7.e.8.q.7.0.7.7.7.0.3.3.3.3.3.3.3.7.7.7.7.e.3.3.7.7.7.7.7.4.0.q.s.s.s.v.v.B.I.R.pXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXB.v.v.b.h.f.g.s.q.0.0.7.0.3.7.7.3.,.:.3.3.7.0.7.7.7.:.3.;.3.3.3.3.3.3.3.3.e.3.4.4.e.4.e.w.w.w.w.c.w.N.N.c.BXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXAX%Xy.z 7.u.u.u.7.:.:.1.1.1.7.5.5.7.7.1.1.5.1.5.1.1.1.7.3.7.a.a.a.G.G.a.q.4.y.,XSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXBX Xb 4.7.u.>.:.;.l 1.u l z 1.5.7.4.2.2.tXtX3.3.7.7.8.i.i.a.a.s.d.d.i.i.x.Z.1XSXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXBXy.w.v.t.9.w.w.q.0.0.0.7.0.0.0.0.0.4.7.7.e.e.7.7.0.7.3.7.7.3.7.e.7.3.3.7.7.7.0.7.4.4.0.0.q.q.w.s.v.B.B.oXoXZXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXoXv.v.b.j.f.g.s.q.0.0.0.0.7.3.3.3.3.3.3.:.7.7.7.7.7.3.7.7.3.3.3.3.3.3.3.3.3.3.4.8.q.4.4.9.e.w.c.w.c.N.N.V.FXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXGXgXA.t.9.z 1.7.i.u.5.7.7.u.5.5.5.6.1.1.6.1.1.2.7.i.a.i.i.7.7.3.3.y.A.sXJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXDXiXA.w.0.7.3.7.7.5.5.;.3.7.8.8.8.x.tXtX7.i.i.i.i.i.i.a.a.q.4.9.c.A.fXDXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFXA.w.b.s.t.w.w.q.0.0.0.g.0.q.q.7.0.0.0.4.7.e.3.0.0.4.3.3.e.3.3.:.3.3.7.3.7.e.7.7.7.e.0.0.e.q.w.b.N.B.B.oXoXDXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX:Xv.n.b.b.v.f.s.s.0.0.0.3.7.3.3.7.3.3.,.3.0.7.7.7.7.3.3.3.3.3.3.3.3.3.4.z 4.3.4.4.q.4.9.q.r.t.t.t.b.c.c. XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXAX7XS.V.r.8.6.p.5.3.7.a.a.i.7.7.7.7.5.7.5.6.6.7.1.3.t.n.S.pXGXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXAX*XA.Z.y.2.1.6.p.7.7.7.7.8.7.tXtXu.i.i.8.7.7.q.r.z.Z./.7XAXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX&Xw.b.s.b.w.w.w.q.0.7.g.0.7.0.0.0.0.0.4.0.4.7.4.7.7.7.7.3.7.7.7.3.0.3.7.3.0.7.0.7.4.0.0.q.w.s.b.m.K.P.P.&XPXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXgXv.n.b.b.v.f.s.s.0.0.7.0.7.7.7.7.7.3.3.3.7.7.3.3.7.7.:.7.7.3.7.4.3.3.3.4.3.4.4.4.9.q.9.r.e.w.c.c.N.B.c.fXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXBX9X/.W.Z.c.e.9.z i :.:.;.:.7.i.i.z.Z.R.%X3XZXJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXzX1XW.A.Z.z.a.i.i.8.8.tXtXq.r.t.c.A.|.-XiXZXJXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXjXc.b.b.j.t.w.w.w.0.q.q.q.q.q.0.0.0.0.8.q.8.0.q.0.e.7.4.3.7.3.e.7.3.0.3.4.0.4.7.q.e.q.q.w.s.s.n.N.M.oXB.4XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXCXB.v.N.b.v.v.g.s.0.0.0.0.7.4.4.3.e.3.3.:.0.0.7.7.7.7.7.3.3.7.3.3.7.3.3.4.3.3.9.8.4.q.9.e.w.w.c.c.c.N.c.FXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXHXAXBXjX7X6X4XXe.P.b.B.v.v.M.v.s.v.b.j.s.w.s.w.w.w.w.w.w.w.b.t.j.m.n.n.B.B.P.P.R.8XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFXB.q.H.v.l.j.s.s.w.q.e.7.0.7.7.3.3.3.3.3.3.l 1.4.1.8.3.q.t.w.w.w.A.SXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXLXFX Xb.L.B.B.B.B.v.v.b.b.b.b.j.b.w.b.b.s.s.s.s.b.b.b.v.I.P.v.B.P.B.tXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXAXN.s.n.f.l.f.w.w.w.0.0.7.4.4.3.3.3.l 4.l 3.l 4.4.e.4.q.z.j.y.c.MXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKX KXKXKX KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXGXA.v.B.P.v.v.B.B.v.v.b.b.v.b.b.v.b.j.b.b.b.b.b.N.B.n.P.Q.P.B.4XKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXAXN.h.l.l.f.q.0.0.w.0.0.0.3.3.3.4.l 1.3.1.4.4.4.3.w.h.r.x V.mXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKX KXKXKX KXKX KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSXW.N.v.P.B.v.v.b.N.n.N.n.b.b.v.N.b.b.n.n.n.N.B.B.P.R.P.R.gXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSX Xb.t.w.j.j.w.w.0.0.7.7.4.5.4.3.3.1.3.4.4.4.e.w.9.z D.CXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKX KXKXKXKXKX KXKX KXKXKX KX KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXGX>Xc.N.M.B.B.n.M.n.B.n.n.n.n.v.n.n.N.M.B.P.B.B.P.R. XmXLXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFX:XB.e.t.j.a.a.w.q.0.0.7.7.8.3.3.4.3.4.8.8.w.w.v %XHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKX KXKXKX KXKXKXKXKXKXKX KXKX KX KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXhXR.n.R.N.B.M.M.M.L.M.M.M.M.M.M.M.B.P.P.P.R.R.4XDXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXxX Xt.e.a.f.s.s.q.0.7.7.7.8.5.7.8.8.4.z 9.A.xXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKX KXKX KXKXKXKX KXKX KXKXKXKX KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXGXyXT.B.N.B.B.L.L.I.P.P.P.P.P.P.P.P.B.A.XXmXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXfXE.b.7.7.7.u.a.d.a.q.7.:.&.6 l t.E.8XHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKX KXKX KXKXKX KXKX KXKX KXKXKXKX KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXSX4XoXB.N.N.L.P.P.I.P.P.L.B.B.oX1XMXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXmX1X XZ.e.c b x x b y.S.%X6XCXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKX KXKXKX KXKX KXKXKX KXKX KXKX KXKXKXKX KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFXNXpX&XoXA.A.A.A. XXX4XmXDXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXJXHXCXBXBXBXMXCXVXHXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKX KXKXKXKX KXKX KXKX KXKXKXKXKX KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXFXSXVXSXSXFXPXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX", +"KXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXtXtXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKXKX" +}; diff --git a/Source/Plugins/Plugin_nJoy_SDL/Src/GUI/Images/njoy.xpm b/Source/Plugins/Plugin_nJoy_SDL/Src/GUI/Images/njoy.xpm index 2214139485..746e6569c7 100644 --- a/Source/Plugins/Plugin_nJoy_SDL/Src/GUI/Images/njoy.xpm +++ b/Source/Plugins/Plugin_nJoy_SDL/Src/GUI/Images/njoy.xpm @@ -1,4028 +1,4028 @@ -/* XPM */ -static const char *AboutBox_WxStaticBitmap1_XPM[]={ -/* AboutBox_WxStaticBitmap1 */ -"200 60 3963 2", -" c None", -" 0 c #98CAFD", -" 1 c #99CBFC", -" 2 c #97C9FC", -" 3 c #96C8F9", -" 4 c #95C7F8", -" 5 c #94C6F7", -" 6 c #93C5F6", -" 7 c #92C2F2", -" 8 c #91C1F1", -" 9 c #91C0EC", -" a c #8DBCE8", -" b c #8BB6E3", -" c c #81ACD9", -" d c #707CA6", -" e c #B1BDE7", -" f c #BCCAEF", -" g c #526085", -" h c #6E98C2", -" i c #8BB5DF", -" j c #90C0F0", -" k c #93C5F8", -" l c #94C6F9", -" m c #97C9FA", -" n c #99CBFE", -" o c #9ACAFB", -" p c #9ACCFD", -" q c #9ACCFF", -" r c #92C4F5", -" s c #8EBDE9", -" t c #8CB7E4", -" u c #79A4D1", -" v c #6F7BA5", -" w c #D7E3FF", -" x c #8E9CC1", -" y c #58668B", -" z c #6B95BF", -" A c #8AB4DE", -" B c #95C5F5", -" C c #95C7FA", -" D c #9BCDFE", -" E c #9BCDFF", -" F c #9CCCFD", -" G c #A0D1FC", -" H c #A1D0FC", -" I c #A0D0FE", -" J c #9FCFFD", -" K c #9FCEFA", -" L c #9ECDF9", -" M c #9CCBF5", -" N c #9BCAF4", -" O c #9AC7F1", -" P c #97C4EE", -" Q c #94BFE9", -" R c #93BEE8", -" S c #91BBE3", -" T c #8BB5DD", -" U c #8EA2D5", -" V c #6F83B6", -" W c #B7BDDF", -" X c #BDC3E5", -" Y c #556B90", -" Z c #61779C", -" & c #779FC2", -"0 c #91B9DC", -"00 c #97C4ED", -"01 c #9AC7F0", -"02 c #9DC9F6", -"03 c #A0CCF9", -"04 c #9ECFFA", -"05 c #9FD0FB", -"06 c #A0D1FA", -"07 c #A1D0FE", -"08 c #A2D3FE", -"09 c #A3D2FE", -"0a c #A1D1FF", -"0b c #9DCCF6", -"0c c #9AC9F3", -"0d c #96C3ED", -"0e c #91BCE6", -"0f c #89B3DB", -"0g c #78A2CA", -"0h c #7488BB", -"0i c #99ADE0", -"0j c #C7CDEF", -"0k c #6D7395", -"0l c #546A8F", -"0m c #748AAF", -"0n c #85ADD0", -"0o c #96BEE1", -"0p c #99C6EF", -"0q c #9BC8F1", -"0r c #A1CDFA", -"0s c #A1D2FD", -"0t c #A2D3FC", -"0u c #A3D2FF", -"0v c #A6D6FC", -"0w c #A8D5FC", -"0x c #A7D4FB", -"0y c #A6D3FA", -"0z c #A5D2F9", -"0A c #A4D0F7", -"0B c #A2CEF5", -"0C c #A0CCF1", -"0D c #9DC9EE", -"0E c #9CC4E8", -"0F c #99C1E5", -"0G c #99BDE1", -"0H c #89ADD1", -"0I c #8094C6", -"0J c #798DBF", -"0K c #9EAAD4", -"0L c #AFBBE5", -"0M c #617598", -"0N c #53678A", -"0O c #6689A7", -"0P c #80A3C1", -"0Q c #8FBADD", -"0R c #99C4E7", -"0S c #9CC8ED", -"0T c #9FCBF0", -"0U c #A2CFF6", -"0V c #A3D0F7", -"0W c #A8D5FE", -"0X c #A5D5FB", -"0Y c #A9D5FC", -"0Z c #A8D8FE", -"0& c #AAD7FE", -"1 c #A9D6FD", -"10 c #85A9CD", -"11 c #7094B8", -"12 c #7F93C5", -"13 c #97ABDD", -"14 c #9DA9D3", -"15 c #64709A", -"16 c #54688B", -"17 c #7185A8", -"18 c #7FA2C0", -"19 c #94B7D5", -"1a c #98C3E6", -"1b c #9DC8EB", -"1c c #A2CEF3", -"1d c #AAD7FF", -"1e c #A7D7FD", -"1f c #ABD7FE", -"1g c #AED9FB", -"1h c #AED9FC", -"1i c #ADD8FA", -"1j c #ACD7FA", -"1k c #ABD6F9", -"1l c #AAD5F7", -"1m c #A7D2F4", -"1n c #A7D0F0", -"1o c #A5CEEE", -"1p c #A2C9E8", -"1q c #9FC6E5", -"1r c #9DBAE2", -"1s c #84A1C9", -"1t c #7586BC", -"1u c #899AD0", -"1v c #95A3D2", -"1w c #8593C2", -"1x c #586D8A", -"1y c #5A6F8C", -"1z c #6B8BA4", -"1A c #82A2BB", -"1B c #91B8D7", -"1C c #9AC1E0", -"1D c #9EC7E7", -"1E c #A1CAEA", -"1F c #A8D3F5", -"1G c #ABD6F8", -"1H c #ACD7F9", -"1I c #ADD8FB", -"1J c #B0D8FB", -"1K c #AED8FE", -"1L c #707D86", -"1M c #3D4A53", -"1N c #798B99", -"1O c #B6C8D6", -"1P c #B8D6EE", -"1Q c #B1D8F9", -"1R c #AFDAFC", -"1S c #B1DCFE", -"1T c #B1DCFF", -"1U c #B0DBFD", -"1V c #AFDAFD", -"1W c #A6CFEF", -"1X c #A3CCEC", -"1Y c #A0C7E6", -"1Z c #96BDDC", -"1& c #86A3CB", -"2 c #83A0C8", -"20 c #8C9DD3", -"21 c #8A9BD1", -"22 c #7280AF", -"23 c #5A6897", -"24 c #647996", -"25 c #7B90AD", -"26 c #89A9C2", -"27 c #9ABAD3", -"28 c #9CC3E2", -"29 c #A1C8E7", -"2a c #A2CBEB", -"2b c #A9D2F2", -"2c c #B0DBFE", -"2d c #B3DBFE", -"2e c #B1DBFF", -"2f c #2D3A43", -"2g c #606D76", -"2h c #3F515F", -"2i c #000F1D", -"2j c #1E3C54", -"2k c #537189", -"2l c #7DA4C5", -"2m c #AED5F6", -"2n c #B6DFFB", -"2o c #B6DFFD", -"2p c #B5DEFA", -"2q c #B4DDF9", -"2r c #B4DBFC", -"2s c #AED5F2", -"2t c #AAD1EE", -"2u c #A8CDE8", -"2v c #A4C9E4", -"2w c #9BB4DD", -"2x c #849DC6", -"2y c #8C9CD8", -"2z c #93A3DF", -"2A c #8497BF", -"2B c #6679A1", -"2C c #5C758B", -"2D c #6F889E", -"2E c #7C9FB5", -"2F c #8FB2C8", -"2G c #9ABED8", -"2H c #A2C6E0", -"2I c #A4C9E3", -"2J c #A7CCE6", -"2K c #A8D0EA", -"2L c #A9D1EB", -"2M c #ABD3ED", -"2N c #ADD5EF", -"2O c #B0D7F4", -"2P c #B0D9F5", -"2Q c #B2DBF7", -"2R c #B3DAF9", -"2S c #B7E0FE", -"2T c #B7DEFB", -"2U c #B6DFFF", -"2V c #B7E0FF", -"2W c #3D4547", -"2X c #A5ADAF", -"2Y c #F8F8F6", -"2Z c #F1F1EF", -"2& c #B8B8B8", -"3 c #797979", -"30 c #3E3E3E", -"31 c #090909", -"32 c #272F32", -"33 c #50585B", -"34 c #788691", -"35 c #A8B6C1", -"36 c #C1DCED", -"37 c #B9DEF9", -"38 c #B7DEFD", -"39 c #B8E1FD", -"3a c #B8E1FF", -"3b c #B7E0FC", -"3c c #B5DCFD", -"3d c #B2D9FA", -"3e c #A6CBE6", -"3f c #9ABFDA", -"3g c #859EC7", -"3h c #8BA4CD", -"3i c #98A8E4", -"3j c #8191CD", -"3k c #60739B", -"3l c #63769E", -"3m c #7891A7", -"3n c #8CA5BB", -"3o c #95B8CE", -"3p c #9EC1D7", -"3q c #A3C7E1", -"3r c #A6CAE4", -"3s c #A9CEE8", -"3t c #AAD2EC", -"3u c #ACD4EE", -"3v c #B1DAF6", -"3w c #B4DBFA", -"3x c #B8DFFC", -"3y c #BAE1FE", -"3z c #464E50", -"3A c #9EA6A8", -"3B c #FDFDFB", -"3C c #FCFCFA", -"3D c #FDFDFD", -"3E c #F9F9F9", -"3F c #C5CDD0", -"3G c #929A9D", -"3H c #56646F", -"3I c #192732", -"3J c #052031", -"3K c #405B6C", -"3L c #779CB7", -"3M c #BCE1FC", -"3N c #B9E0FF", -"3O c #B8DFFE", -"3P c #BCE5FB", -"3Q c #BCE4FD", -"3R c #BBE5FD", -"3S c #BEE4FB", -"3T c #BBE4FA", -"3U c #B9E2F8", -"3V c #B8DEF5", -"3W c #B5DBF2", -"3X c #B1D5EB", -"3Y c #ABCFE5", -"3Z c #A4C0E7", -"3& c #88A4CB", -"4 c #91A4DF", -"40 c #A1B4EF", -"41 c #8391B6", -"42 c #637196", -"43 c #647F90", -"44 c #7D98A9", -"45 c #8FAFC4", -"46 c #9BBBD0", -"47 c #A1C4D8", -"48 c #A6C9DD", -"49 c #A8CBE1", -"4a c #AACDE3", -"4b c #ABD1E6", -"4c c #ADD3E8", -"4d c #AED3E6", -"4e c #B0D5E8", -"4f c #B1D5ED", -"4g c #B2D6EE", -"4h c #B3D7EF", -"4i c #B5D9F1", -"4j c #B6DCF3", -"4k c #B8DEF3", -"4l c #B9DFF4", -"4m c #BBE0FA", -"4n c #BCE1FB", -"4o c #BAE3F9", -"4p c #BEE3FD", -"4q c #4B5356", -"4r c #9DA5A8", -"4s c #FEFFFF", -"4t c #FDFFFE", -"4u c #FFFFFF", -"4v c #FEFEFE", -"4w c #DFDFE1", -"4x c #969698", -"4y c #454545", -"4z c #030303", -"4A c #526875", -"4B c #C8DEEB", -"4C c #BBE3FC", -"4D c #BEE7FD", -"4E c #BEE6FF", -"4F c #BDE7FF", -"4G c #C0E6FD", -"4H c #BAE0F7", -"4I c #B2D6EC", -"4J c #A9CDE3", -"4K c #97B3DA", -"4L c #8CA8CF", -"4M c #AABDF8", -"4N c #899CD7", -"4O c #627095", -"4P c #6A789D", -"4Q c #93AEBF", -"4R c #A1C1D6", -"4S c #A3C6DA", -"4T c #A7CAE0", -"4U c #A9CCE2", -"4V c #A8CCE2", -"4W c #A9CFE4", -"4X c #AAD0E5", -"4Y c #ACD1E4", -"4Z c #AED2EA", -"4& c #ADD1E9", -"5 c #AFD3EB", -"50 c #B3D9F0", -"51 c #B4DAF1", -"52 c #B5DBF0", -"53 c #BFE5FC", -"54 c #BDE6FC", -"55 c #C0E5FF", -"56 c #495154", -"57 c #9EA6A9", -"58 c #FCFEFD", -"59 c #FEFEFF", -"5a c #E7E7E7", -"5b c #182E3B", -"5c c #8197A4", -"5d c #BDE5FE", -"5e c #C2E8FD", -"5f c #C3E7FF", -"5g c #C3E9FE", -"5h c #C2E6FE", -"5i c #C1E5FB", -"5j c #BEE2F8", -"5k c #BCDFF5", -"5l c #B7DAF0", -"5m c #B4D4EB", -"5n c #A6C6DD", -"5o c #90A5DE", -"5p c #A5BAF3", -"5q c #A4B6E4", -"5r c #6577A5", -"5s c #647786", -"5t c #8093A2", -"5u c #8DAABA", -"5v c #9CB9C9", -"5w c #9FBED0", -"5x c #A2C1D3", -"5y c #A5C6D9", -"5z c #A6C7DA", -"5A c #A9CADD", -"5B c #A8C9DC", -"5C c #AAC9DE", -"5D c #ABCADF", -"5E c #AEC7E6", -"5F c #ADC8E6", -"5G c #AEC9E7", -"5H c #ADCCE0", -"5I c #B0CFE3", -"5J c #B2D2E7", -"5K c #B6D6EB", -"5L c #B5DAEC", -"5M c #B8DDEF", -"5N c #B9DDF3", -"5O c #BCE0F6", -"5P c #C1E5FD", -"5Q c #C2E8FB", -"5R c #C1E7FC", -"5S c #C4E8FF", -"5T c #454A4E", -"5U c #A9AEB2", -"5V c #E9E9E9", -"5W c #000D1A", -"5X c #C4DAE7", -"5Y c #C4E6FF", -"5Z c #C3E5FE", -"5& c #C0E4FC", -"6 c #BFE3F9", -"60 c #BADDF3", -"61 c #B5D8EE", -"62 c #B1D1E8", -"63 c #96B6CD", -"64 c #94A9E2", -"65 c #BDD2FF", -"66 c #8092C0", -"67 c #5E709E", -"68 c #728594", -"69 c #8C9FAE", -"6a c #92AFBF", -"6b c #99B6C6", -"6c c #9AB9CB", -"6d c #9CBBCD", -"6e c #9EBFD2", -"6f c #9FC0D3", -"6g c #9DBED1", -"6h c #96B5CA", -"6i c #89A8BD", -"6j c #7891B0", -"6k c #6E87A6", -"6l c #6E89A7", -"6m c #809BB9", -"6n c #94B3C7", -"6o c #A3C2D6", -"6p c #A8C8DD", -"6q c #ADCDE2", -"6r c #AED3E5", -"6s c #B1D6E8", -"6t c #B4D8EE", -"6u c #B7DBF1", -"6v c #BADEF4", -"6w c #BEE2FA", -"6x c #C0E6FB", -"6y c #C1E7FA", -"6z c #C2E6FF", -"6A c #393E42", -"6B c #B6BBBF", -"6C c #8D8D8D", -"6D c #415764", -"6E c #CDE3F0", -"6F c #C2E4FD", -"6G c #BCE6FE", -"6H c #BCE2F9", -"6I c #B9DFF6", -"6J c #B7DBF3", -"6K c #AFCDF3", -"6L c #91AFD5", -"6M c #A9BEEB", -"6N c #BED3FF", -"6O c #687B9C", -"6P c #627596", -"6Q c #7792A5", -"6R c #8AA5B8", -"6S c #90ADBF", -"6T c #93B0C2", -"6U c #96B3C5", -"6V c #98B5C7", -"6W c #98B7CB", -"6X c #97B6CA", -"6Y c #98B0D2", -"6Z c #93ABCD", -"6& c #8A9FD6", -"7 c #768BC2", -"70 c #6E7CBD", -"71 c #6F7DBE", -"72 c #6E7BAF", -"73 c #6D77B2", -"74 c #6B75B0", -"75 c #6D7FAF", -"76 c #8496C6", -"77 c #9BBACF", -"78 c #A4C3D8", -"79 c #A6CBDE", -"7a c #ABD0E3", -"7b c #AED2E8", -"7c c #B7DDF4", -"7d c #BDE2FC", -"7e c #BCE5F9", -"7f c #BDE6FA", -"7g c #BEE7FB", -"7h c #BFE7FF", -"7i c #292D2E", -"7j c #CBCFD0", -"7k c #FDFEFF", -"7l c #2B2C2E", -"7m c #82A8BD", -"7n c #B9E3FB", -"7o c #B8E2FA", -"7p c #B4D8F0", -"7q c #AAC8EE", -"7r c #86A4CA", -"7s c #ABC0ED", -"7t c #677A9B", -"7u c #657899", -"7v c #7994A7", -"7w c #87A2B5", -"7x c #8AA7B9", -"7y c #8CA9BB", -"7z c #8EABBD", -"7A c #8DAABC", -"7B c #88A7BB", -"7C c #87A6BA", -"7D c #8098BA", -"7E c #7189AB", -"7F c #6D82B9", -"7G c #6F84BB", -"7H c #7785C6", -"7I c #8A98D9", -"7J c #ADBAEE", -"7K c #C4D1FF", -"7L c #B6C0FB", -"7M c #838DC8", -"7N c #6779A9", -"7O c #6678A8", -"7P c #7493A8", -"7Q c #91B0C5", -"7R c #9CC1D4", -"7S c #A1C6D9", -"7T c #A6CAE0", -"7U c #ACD0E6", -"7V c #AFD5EC", -"7W c #B7DCF6", -"7X c #B9DEF8", -"7Y c #B9E2F6", -"7Z c #BAE3F7", -"7& c #BBE4F8", -"8 c #111516", -"80 c #E4E8E9", -"81 c #C9CACC", -"82 c #202123", -"83 c #BEE4F9", -"84 c #BAE4FD", -"85 c #BAE3FF", -"86 c #B8E4FD", -"87 c #B9E3FC", -"88 c #B8E2FB", -"89 c #B4DCF6", -"8a c #B1D9F3", -"8b c #AED3ED", -"8c c #A4C6E2", -"8d c #85A7C3", -"8e c #A0B4E9", -"8f c #C1D5FF", -"8g c #8594CB", -"8h c #5D6CA3", -"8i c #6779A1", -"8j c #7385AD", -"8k c #7990AF", -"8l c #8097B6", -"8m c #7D92BD", -"8n c #798BCB", -"8o c #7183C3", -"8p c #7584BD", -"8q c #7D8CC5", -"8r c #909DBD", -"8s c #B0BDDD", -"8t c #D4E0EE", -"8u c #E9F5FF", -"8v c #EDF8FE", -"8w c #EEF9FF", -"8x c #EFF7FF", -"8y c #D9E1EC", -"8z c #939FC9", -"8A c #6372AB", -"8B c #7483BC", -"8C c #8DACC1", -"8D c #9AB9CE", -"8E c #A0C2DB", -"8F c #A7C9E2", -"8G c #A9CFE6", -"8H c #AED4EB", -"8I c #B1D9F2", -"8J c #B3DBF4", -"8K c #B5DFF8", -"8L c #B7E1FA", -"8M c #B9E2FE", -"8N c #BAE4FC", -"8O c #5B6972", -"8P c #64727B", -"8Q c #BBE5FE", -"8R c #BBE3FD", -"8S c #BBE4FF", -"8T c #B7E3FC", -"8U c #B9E2FF", -"8V c #B6E0F9", -"8W c #AACFE9", -"8X c #9FC1DD", -"8Y c #87A9C5", -"8Z c #8195CA", -"8& c #A7BBF0", -"9 c #8998CF", -"90 c #7382B9", -"91 c #6E80A8", -"92 c #63759D", -"93 c #5F7695", -"94 c #7188A7", -"95 c #758AB5", -"96 c #7388B3", -"97 c #788ACA", -"98 c #8092D2", -"99 c #99A8E1", -"9a c #C2D1FF", -"9b c #DEEBFF", -"9c c #E4F1FF", -"9d c #E7F3FF", -"9e c #F0F8FF", -"9f c #DDE9FF", -"9g c #A2AED8", -"9h c #6C7BB4", -"9i c #6170A9", -"9j c #68879C", -"9k c #88A7BC", -"9l c #95B7D0", -"9m c #9EC0D9", -"9n c #A3C9E0", -"9o c #ACD4ED", -"9p c #B0D8F1", -"9q c #B2DCF5", -"9r c #B4DEF7", -"9s c #BAE2FB", -"9t c #90B8D1", -"9u c #2D2D2D", -"9v c #F4F4F4", -"9w c #03111A", -"9x c #B1BFC8", -"9y c #B9E1FB", -"9z c #BAE2FC", -"9A c #B5E1FC", -"9B c #B5E1FE", -"9C c #B4E0FD", -"9D c #ADD4F1", -"9E c #A9D0ED", -"9F c #A5CAE7", -"9G c #9FC4E1", -"9H c #9ABCD8", -"9I c #88AAC6", -"9J c #7A8DD1", -"9K c #7B8ED2", -"9L c #8B9FD2", -"9M c #9DB1E4", -"9N c #97A9E7", -"9O c #7B8DCB", -"9P c #6B7CC1", -"9Q c #7384C9", -"9R c #8191C4", -"9S c #8B9BCE", -"9T c #ABBBD5", -"9U c #CADAF4", -"9V c #DBEAFF", -"9W c #DAE9FF", -"9X c #D2E0FF", -"9Y c #D4E2FF", -"9Z c #E3F0FF", -"9& c #E8F5FF", -"a c #EDF7FF", -"a0 c #EDFAFF", -"a1 c #F0F9FE", -"a2 c #EDF6FB", -"a3 c #A6AFD6", -"a4 c #717AA1", -"a5 c #5E6EA2", -"a6 c #6B7BAF", -"a7 c #85A5BC", -"a8 c #98B8CF", -"a9 c #9DC3D8", -"aa c #A4CADF", -"ab c #A8CFEC", -"ac c #ACD3F0", -"ad c #AFD8F4", -"ae c #B4DDFB", -"af c #B3DFFC", -"ag c #B6E2FD", -"ah c #BADFF9", -"ai c #B4E0FB", -"aj c #B5E1FA", -"ak c #B5E0FF", -"al c #BEDEF5", -"am c #7090A7", -"an c #595959", -"ao c #9E9E9E", -"ap c #28485D", -"aq c #BEDEF3", -"ar c #B6E2FF", -"as c #B3DFFA", -"at c #B2DEFB", -"au c #B1DDFA", -"av c #AED7F3", -"aw c #AAD3EF", -"ax c #A7CEEB", -"ay c #A2C9E6", -"az c #98BDDA", -"aA c #93B5D1", -"aB c #84A6C2", -"aC c #8194D8", -"aD c #95A8EC", -"aE c #B4C8FB", -"aF c #ABBFF2", -"aG c #90A2E0", -"aH c #7C8ECC", -"aI c #7F90D5", -"aJ c #91A2E7", -"aK c #B0C0F3", -"aL c #CDDDFF", -"aM c #DEEEFF", -"aN c #D8E8FF", -"aO c #CDDCFD", -"aP c #BECDEE", -"aQ c #AFBDEC", -"aR c #A9B7E6", -"aS c #CFDCED", -"aT c #ECF6FF", -"aU c #E7F1FA", -"aV c #E2EFF7", -"aW c #ECF5FA", -"aX c #F1FAFF", -"aY c #EAF3FF", -"aZ c #6777AB", -"a& c #5D6DA1", -"b c #608097", -"b0 c #82A2B9", -"b1 c #92B8CD", -"b2 c #A1C8E5", -"b3 c #A6CDEA", -"b4 c #A9D2EE", -"b5 c #AFD8F6", -"b6 c #B0D9F7", -"b7 c #ABD7F2", -"b8 c #83A8C2", -"b9 c #90B5CF", -"ba c #B4E0F9", -"bb c #B4DFFF", -"bc c #45657C", -"bd c #8A8A8A", -"be c #3A3A3A", -"bf c #7595AA", -"bg c #BDDDF2", -"bh c #B1E0FE", -"bi c #B2DFFE", -"bj c #B1DEFD", -"bk c #B0DDFC", -"bl c #AFDCFB", -"bm c #ADDAF9", -"bn c #ABD8F5", -"bo c #AAD7F4", -"bp c #A8D4F1", -"bq c #A3CFEC", -"br c #A2CAE4", -"bs c #9CC4DE", -"bt c #99BED8", -"bu c #91B6D0", -"bv c #8FACD8", -"bw c #7F9CC8", -"bx c #8599DE", -"by c #9BAFF4", -"bz c #8FA2E4", -"bA c #7E91D3", -"bB c #8698C8", -"bC c #99ABDB", -"bD c #B4C4DD", -"bE c #D0E0F9", -"bF c #DEEEFD", -"bG c #DFEFFE", -"bH c #DEEFFF", -"bI c #C5D6F4", -"bJ c #B5B6FF", -"bK c #9E9FFF", -"bL c #7F83FE", -"bM c #7C80FB", -"bN c #BFCDE8", -"bO c #E2F0FF", -"bP c #C9F5E6", -"bQ c #BBE7D8", -"bR c #98EAA8", -"bS c #8DDF9D", -"bT c #C4E4D9", -"bU c #E0FFF5", -"bV c #F3FBFE", -"bW c #EFF7FA", -"bX c #A5ADD1", -"bY c #6E769A", -"bZ c #5D6B9C", -"b& c #6B79AA", -"c c #83A7BD", -"c0 c #96BAD0", -"c1 c #9BC2DF", -"c2 c #A3CFEA", -"c3 c #A6D2ED", -"c4 c #AAD6F3", -"c5 c #ACD8F5", -"c6 c #AEDBFC", -"c7 c #B0DDFE", -"c8 c #BDDCF1", -"c9 c #C4DAE8", -"ca c #9CB2C0", -"cb c #7A848E", -"cc c #4F5963", -"cd c #25292A", -"ce c #080C0D", -"cf c #343537", -"cg c #000103", -"ch c #B2DFFF", -"ci c #B9DDF7", -"cj c #B6DDFA", -"ck c #B0DFFD", -"cl c #B2DFFC", -"cm c #B3DEFE", -"cn c #B1E0FC", -"co c #C1DBEC", -"cp c #1C3647", -"cq c #C2C2C2", -"cr c #CBD0D6", -"cs c #000208", -"ct c #B9DDF5", -"cu c #C5DBE9", -"cv c #9AB0BE", -"cw c #6F7A80", -"cx c #49545A", -"cy c #383D41", -"cz c #34393D", -"cA c #3E474E", -"cB c #5B646B", -"cC c #889EAC", -"cD c #C0DBEE", -"cE c #BFDAED", -"cF c #86A0B1", -"cG c #A1B3C1", -"cH c #9FB1BF", -"cI c #BBD2E0", -"cJ c #C3DAE8", -"cK c #C0DCEA", -"cL c #C1DDEB", -"cM c #B1DFFF", -"cN c #AFDEFC", -"cO c #ACD9F8", -"cP c #AAD7F6", -"cQ c #A7D4F1", -"cR c #A5D2EF", -"cS c #A1CDEA", -"cT c #9ECAE7", -"cU c #9BC3DD", -"cV c #95BDD7", -"cW c #92B7D1", -"cX c #8BB0CA", -"cY c #7794C0", -"cZ c #7D9AC6", -"c& c #7E92D7", -"d c #8497D9", -"d0 c #9AADEF", -"d1 c #B5C7F7", -"d2 c #CEE0FF", -"d3 c #DDEDFF", -"d4 c #DBECFF", -"d5 c #C1D2F0", -"d6 c #898AF4", -"d7 c #7273DD", -"d8 c #696DE8", -"d9 c #9498FF", -"da c #D7E5FF", -"db c #D9E7FF", -"dc c #B1DDCE", -"dd c #9FCBBC", -"de c #73C583", -"df c #59AB69", -"dg c #A7C7BC", -"dh c #DDFDF2", -"di c #F4FCFF", -"dj c #E8F0FF", -"dk c #A6AED2", -"dl c #6270A1", -"dm c #5A6899", -"dn c #5E8298", -"do c #89ADC3", -"dp c #93BAD7", -"dq c #9ECAE5", -"dr c #A2CEE9", -"ds c #A7D3F0", -"dt c #ACD9FA", -"du c #8CB8D5", -"dv c #58778C", -"dw c #214055", -"dx c #000816", -"dy c #1F3543", -"dz c #5C6670", -"dA c #929CA6", -"dB c #CED2D3", -"dC c #F8FCFD", -"dD c #B8B9BB", -"dE c #333436", -"dF c #B1DEFF", -"dG c #A6D3F4", -"dH c #7A9EB8", -"dI c #557993", -"dJ c #44677D", -"dK c #4A6D83", -"dL c #678EAB", -"dM c #B1DEFB", -"dN c #B2DDFD", -"dO c #AFDEFA", -"dP c #B0DFFB", -"dQ c #B5CFE0", -"dR c #000F20", -"dS c #F8F8F8", -"dT c #5D6268", -"dU c #666B71", -"dV c #84A8C0", -"dW c #3F637B", -"dX c #091F2D", -"dY c #1C3240", -"dZ c #667177", -"d& c #98A3A9", -"e c #B8BDC1", -"e0 c #BBC0C4", -"e1 c #AAB3BA", -"e2 c #7E878E", -"e3 c #263C4A", -"e4 c #192F3D", -"e5 c #7AA6C1", -"e6 c #B2DEF9", -"e7 c #7FAACA", -"e8 c #425D70", -"e9 c #000A1D", -"ea c #062031", -"eb c #5A7485", -"ec c #90BDDC", -"ed c #000B19", -"ee c #0C1E2C", -"ef c #001422", -"eg c #000917", -"eh c #001220", -"ei c #031F2D", -"ej c #719DB8", -"ek c #B0DEFF", -"el c #AFDDFE", -"em c #AEDCFD", -"en c #AEDCFF", -"eo c #AEDCFE", -"ep c #ACDDFD", -"eq c #ABDCFC", -"er c #ACDAFC", -"es c #AAD8F9", -"et c #A8D6F7", -"eu c #A8D5F6", -"ev c #A5D2F3", -"ew c #A2CFEE", -"ex c #9FCCEB", -"ey c #9FC8E6", -"ez c #99C2E0", -"eA c #96BBD8", -"eB c #90B5D2", -"eC c #839ECB", -"eD c #6984B1", -"eE c #798ED1", -"eF c #7C91D4", -"eG c #8698CA", -"eH c #9EB0E2", -"eI c #B9CAE4", -"eJ c #CFE0FA", -"eK c #DAEBFD", -"eL c #DBECFE", -"eM c #E0F0FF", -"eN c #E1F1FF", -"eO c #E2EEFF", -"eP c #D7E3F9", -"eQ c #AFB6ED", -"eR c #9EA5DC", -"eS c #B6BFDC", -"eT c #D7E0FD", -"eU c #E3F6FD", -"eV c #CEE1E8", -"eW c #88DA92", -"eX c #69BB73", -"eY c #43A945", -"eZ c #44AA46", -"e& c #BCD4C7", -"f c #E7FFF2", -"f0 c #F6FBFF", -"f1 c #F7FCFF", -"f2 c #E9EEF2", -"f3 c #9AA1CD", -"f4 c #646B97", -"f5 c #546590", -"f6 c #7182AD", -"f7 c #8AAFCA", -"f8 c #94B9D4", -"f9 c #97C3E0", -"fa c #A1CEEF", -"fb c #A7D5F6", -"fc c #A9D7F8", -"fd c #ADDBFD", -"fe c #ADDBFC", -"ff c #C3D6E5", -"fg c #6F8291", -"fh c #2A2E31", -"fi c #1D2124", -"fj c #707070", -"fk c #B6B6B6", -"fl c #F0F0F0", -"fm c #FCFCFC", -"fn c #FBFDFC", -"fo c #FAFCFB", -"fp c #FBFBFD", -"fq c #72797F", -"fr c #5E656B", -"fs c #3D4144", -"ft c #060A0D", -"fu c #474747", -"fv c #747474", -"fw c #858585", -"fx c #535353", -"fy c #050505", -"fz c #59707E", -"fA c #C0D7E5", -"fB c #AFDBFE", -"fC c #85939C", -"fD c #3A4851", -"fE c #FBFBFB", -"fF c #FBFCFE", -"fG c #FCFDFF", -"fH c #FCFCFE", -"fI c #E1E1E1", -"fJ c #000C1E", -"fK c #AAC7D9", -"fL c #B6DAF4", -"fM c #B5D9F3", -"fN c #848E98", -"fO c #2B353F", -"fP c #252525", -"fQ c #868686", -"fR c #DADCDB", -"fS c #AFAFAF", -"fT c #071017", -"fU c #868F96", -"fV c #AFDCFD", -"fW c #ACDDFE", -"fX c #B3DAF7", -"fY c #B4DBF8", -"fZ c #B1C3CF", -"f& c #647682", -"g c #262729", -"g0 c #2A2B2D", -"g1 c #898B8A", -"g2 c #E4E6E5", -"g3 c #7A848D", -"g4 c #5B656E", -"g5 c #C3D6E4", -"g6 c #263947", -"g7 c #919191", -"g8 c #EBEFF2", -"g9 c #262A2D", -"ga c #5C83A2", -"gb c #ACDAFB", -"gc c #ACDAFE", -"gd c #A9DAFA", -"ge c #A8D9F9", -"gf c #A8D6F8", -"gg c #A7D5F7", -"gh c #A6D4F5", -"gi c #A3D1F2", -"gj c #A2CFF0", -"gk c #9FCCED", -"gl c #9BC8E7", -"gm c #97C4E3", -"gn c #96BFDD", -"go c #90B9D7", -"gp c #89AECB", -"gq c #6D92AF", -"gr c #7691BE", -"gs c #7B96C3", -"gt c #7E93D6", -"gu c #94A9EC", -"gv c #B7C9FB", -"gw c #CADCFF", -"gx c #D7E8FF", -"gy c #D9EAFF", -"gz c #DCEDFF", -"gA c #DFEFFF", -"gB c #D9E9F9", -"gC c #D6E2F8", -"gD c #DBE2FF", -"gE c #DDE4FF", -"gF c #EBF4FF", -"gG c #E9F2FF", -"gH c #E4F7FE", -"gI c #D8EBF2", -"gJ c #95E79F", -"gK c #74C67E", -"gL c #67CD69", -"gM c #87ED89", -"gN c #E0F8EB", -"gO c #EBFFF6", -"gP c #F8FDFF", -"gQ c #D7DEFF", -"gR c #8990BC", -"gS c #586994", -"gT c #7196B1", -"gU c #8CB1CC", -"gV c #91BDDA", -"gW c #9CC9EA", -"gX c #A4D2F3", -"gY c #A9D7F9", -"gZ c #AAD8FA", -"g& c #ABD9FA", -"h c #A1CFF0", -"h0 c #132635", -"h1 c #3B4E5D", -"h2 c #B9BDC0", -"h3 c #F6FAFD", -"h4 c #F8FAF9", -"h5 c #F9FBFA", -"h6 c #F9F9FB", -"h7 c #343B41", -"h8 c #3B4248", -"h9 c #A3A7AA", -"ha c #EEF2F5", -"hb c #FAFAFA", -"hc c #DBDBDB", -"hd c #324957", -"he c #ADD9FC", -"hf c #4F5D66", -"hg c #829099", -"hh c #F9FAFC", -"hi c #FAFAFC", -"hj c #6C6C6C", -"hk c #436072", -"hl c #BAD7E9", -"hm c #84A8C2", -"hn c #1B3F59", -"ho c #A8B2BC", -"hp c #BBC4CB", -"hq c #000910", -"hr c #8CB9DA", -"hs c #ADDAFB", -"ht c #AADBFC", -"hu c #A9DAFB", -"hv c #8CB3D0", -"hw c #5E85A2", -"hx c #00111D", -"hy c #576975", -"hz c #C4C5C7", -"hA c #828C95", -"hB c #545E67", -"hC c #536674", -"hD c #415462", -"hE c #606467", -"hF c #44484B", -"hG c #B1D8F7", -"hH c #AADBFB", -"hI c #A8DAFD", -"hJ c #A9D9FF", -"hK c #A8DAFF", -"hL c #A7D7FB", -"hM c #A5D5F9", -"hN c #A4D2F6", -"hO c #A2D0F2", -"hP c #9FCDEF", -"hQ c #99C6E7", -"hR c #98C1DF", -"hS c #93BCDA", -"hT c #90AFDD", -"hU c #7B9AC8", -"hV c #788DCE", -"hW c #7F94D5", -"hX c #8295CD", -"hY c #96A9E1", -"hZ c #B2C7E6", -"h& c #C5DAF9", -"i c #D7E9FF", -"i0 c #D8EAFF", -"i1 c #DBEBFB", -"i2 c #DDEDFD", -"i3 c #DDEEFF", -"i4 c #DDF0FF", -"i5 c #F2DAD6", -"i6 c #E9D1CD", -"i7 c #FFB781", -"i8 c #FFAA74", -"i9 c #D9AB94", -"ia c #FFE1CA", -"ib c #E5F5FF", -"ic c #E5E8DD", -"id c #E2E5DA", -"ie c #D5E5D8", -"if c #D4E4D7", -"ig c #DCEAEA", -"ih c #EAF8F8", -"ii c #FAFFFF", -"ij c #F7FAFF", -"ik c #CCCFD8", -"il c #727CAF", -"im c #586295", -"in c #5C7496", -"io c #839BBD", -"ip c #8BB4D2", -"iq c #94BDDB", -"ir c #A3CFF2", -"is c #A5D1F4", -"it c #A7D9FC", -"iu c #A9DBFE", -"iv c #A9D9FD", -"iw c #8FBFE3", -"ix c #1A1A1A", -"iy c #F7F8FA", -"iz c #F6F8F7", -"iA c #F7F9F8", -"iB c #F7F7F7", -"iC c #CDCDCD", -"iD c #E1E6E9", -"iE c #84898C", -"iF c #304352", -"iG c #112433", -"iH c #26353C", -"iI c #85949B", -"iJ c #F5F5F5", -"iK c #F6F6F6", -"iL c #F3F3F3", -"iM c #545454", -"iN c #3B5669", -"iO c #BAD5E8", -"iP c #AADAFF", -"iQ c #ACD7F7", -"iR c #A6D1F1", -"iS c #DDDDDD", -"iT c #F9F7F8", -"iU c #F8F8FA", -"iV c #F7F7F9", -"iW c #D8DDE1", -"iX c #03080C", -"iY c #91BFE1", -"iZ c #ABD9FB", -"i& c #BED3E4", -"j c #526778", -"j0 c #171717", -"j1 c #F7F5F6", -"j2 c #E6E6E8", -"j3 c #8D97A0", -"j4 c #505A63", -"j5 c #32434D", -"j6 c #54656F", -"j7 c #C4C4C4", -"j8 c #838584", -"j9 c #304C61", -"ja c #B8D4E9", -"jb c #B8D7EC", -"jc c #B7D6EB", -"jd c #828F97", -"je c #334048", -"jf c #1B191A", -"jg c #8A8889", -"jh c #EBEBEB", -"ji c #899299", -"jj c #4E575E", -"jk c #B7D5ED", -"jl c #7391A9", -"jm c #202020", -"jn c #E6E6E6", -"jo c #0A2D49", -"jp c #AACDE9", -"jq c #A7D9FE", -"jr c #A6D8FD", -"js c #A4D4F8", -"jt c #A2D2F6", -"ju c #A3D1F5", -"jv c #9FCDF1", -"jw c #9DCBED", -"jx c #98C6E8", -"jy c #95C2E3", -"jz c #90BDDE", -"jA c #8DB6D4", -"jB c #78A1BF", -"jC c #7897C5", -"jD c #7D9CCA", -"jE c #8EA3E4", -"jF c #ADC0F8", -"jG c #C2D5FF", -"jH c #D1E6FF", -"jI c #D4E9FF", -"jJ c #DCECFC", -"jK c #DCEFFF", -"jL c #D7EAFB", -"jM c #E2CAC6", -"jN c #D0B8B4", -"jO c #ED9660", -"jP c #D8814B", -"jQ c #B4866F", -"jR c #FFE4CD", -"jS c #DAEAF9", -"jT c #DBEBFA", -"jU c #E9ECE1", -"jV c #DFE2D7", -"jW c #E2F2E5", -"jX c #EDFBFB", -"jY c #EEFCFC", -"jZ c #FBFEFF", -"j& c #F1F4FD", -"k c #ABB5E8", -"k0 c #606A9D", -"k1 c #50688A", -"k2 c #677FA1", -"k3 c #80A9C7", -"k4 c #8CB5D3", -"k5 c #93BEE1", -"k6 c #9FCBEE", -"k7 c #A2CEF1", -"k8 c #A3D3F9", -"k9 c #A6D8FB", -"ka c #020202", -"kb c #F1F1F1", -"kc c #F3F4F6", -"kd c #F3F5F4", -"ke c #F4F6F5", -"kf c #EFEFEF", -"kg c #0A0F12", -"kh c #474C4F", -"ki c #7E91A0", -"kj c #A3B6C5", -"kk c #8A99A0", -"kl c #29383F", -"km c #575757", -"kn c #F2F2F2", -"ko c #E8E8E8", -"kp c #062134", -"kq c #86A1B4", -"kr c #507B9B", -"ks c #F5F3F4", -"kt c #F3F3F5", -"ku c #F4F4F6", -"kv c #595E62", -"kw c #5A5F63", -"kx c #A1CFF1", -"ky c #2C4152", -"kz c #394E5F", -"kA c #F4F2F3", -"kB c #727274", -"kC c #0A0A0C", -"kD c #3D4750", -"kE c #757F88", -"kF c #8899A3", -"kG c #61727C", -"kH c #000000", -"kI c #989898", -"kJ c #F2F4F3", -"kK c #E7E9E8", -"kL c #001227", -"kM c #A3BFD4", -"kN c #A8D8FC", -"kO c #98C8EC", -"kP c #57768B", -"kQ c #00081D", -"kR c #323F47", -"kS c #98A5AD", -"kT c #F0EEEF", -"kU c #9099A0", -"kV c #475057", -"kW c #9BB9D1", -"kX c #000A22", -"kY c #BEBEBE", -"kZ c #AAAAAA", -"k& c #8EB1CD", -"l c #B2D5F1", -"l0 c #A8D8FF", -"l1 c #A3D7FC", -"l2 c #A5D6FE", -"l3 c #A2D6FB", -"l4 c #A3D4FC", -"l5 c #A2D3FB", -"l6 c #A0D2F7", -"l7 c #9FD1F6", -"l8 c #9DCDF3", -"l9 c #99C9EF", -"la c #97C5E7", -"lb c #92C0E2", -"lc c #91B7DC", -"ld c #85ABD0", -"le c #7B94D4", -"lf c #738CCC", -"lg c #8196D7", -"lh c #889DDE", -"li c #A3BAE4", -"lj c #BBD2FC", -"lk c #CEE2FD", -"ll c #D0E4FF", -"lm c #D1E3F9", -"ln c #D3E5FB", -"lo c #D6E8FF", -"lp c #D9EBFF", -"lq c #DBEDFF", -"lr c #D7E8FA", -"ls c #F5AD87", -"lt c #D18963", -"lu c #DE7130", -"lv c #D86B2A", -"lw c #C8BBB5", -"lx c #F8EBE5", -"ly c #EFE5A8", -"lz c #F6ECAF", -"lA c #FFE545", -"lB c #FFD939", -"lC c #E4D793", -"lD c #FBEEAA", -"lE c #F1F9FC", -"lF c #F9FFFF", -"lG c #FBFFFF", -"lH c #E1E6F9", -"lI c #959AAD", -"lJ c #576397", -"lK c #596599", -"lL c #6F92AE", -"lM c #89ACC8", -"lN c #8DB9DC", -"lO c #93BFE2", -"lP c #9CCCF0", -"lQ c #A0D1F9", -"lR c #A1D5FA", -"lS c #A3D7FE", -"lT c #A4D8FD", -"lU c #0E1215", -"lV c #D6DADD", -"lW c #F2F2F4", -"lX c #E0E0E0", -"lY c #243B4D", -"lZ c #283F51", -"l& c #80B0D4", -"m c #A6D6FA", -"m0 c #A4D5FD", -"m1 c #25323B", -"m2 c #86939C", -"m3 c #7B8489", -"m4 c #4A5358", -"m5 c #A2D8FC", -"m6 c #A5D6FF", -"m7 c #BED1DF", -"m8 c #000513", -"m9 c #C5C7C6", -"ma c #F1F3F2", -"mb c #C5C5C5", -"mc c #000821", -"md c #A5C5DE", -"me c #B4C7D5", -"mf c #213442", -"mg c #F0F2F1", -"mh c #F1F1F3", -"mi c #BDC4CA", -"mj c #1C2329", -"mk c #2B5472", -"ml c #8EB7D5", -"mm c #8EA8BF", -"mn c #000F26", -"mo c #E0DEDF", -"mp c #F2F0F1", -"mq c #404D56", -"mr c #7A8790", -"ms c #5E6367", -"mt c #050A0E", -"mu c #5F5F5F", -"mv c #C6C6C6", -"mw c #959EA5", -"mx c #404950", -"my c #A9D6F7", -"mz c #AAD7F8", -"mA c #383C3F", -"mB c #7F8386", -"mC c #BDBFBE", -"mD c #001026", -"mE c #7D99AF", -"mF c #A0D4F9", -"mG c #A1D2FA", -"mH c #9FD0F8", -"mI c #9ED0F5", -"mJ c #9BCDF2", -"mK c #95C5EB", -"mL c #8BB9DB", -"mM c #7CA2C7", -"mN c #749ABF", -"mO c #829BDB", -"mP c #819ADA", -"mQ c #96ABEC", -"mR c #B7CCFF", -"mS c #C3DAFF", -"mT c #B4CBF5", -"mU c #99ADC8", -"mV c #8397B2", -"mW c #788AA0", -"mX c #8597AD", -"mY c #99ABC3", -"mZ c #C5D7EF", -"m& c #D7E9FD", -"n c #FFCEA8", -"n0 c #F6AE88", -"n1 c #FFA362", -"n2 c #FFBF7E", -"n3 c #F7EAE4", -"n4 c #F5E8E2", -"n5 c #EDE3A6", -"n6 c #E5DB9E", -"n7 c #FAD030", -"n8 c #F6CC2C", -"n9 c #EEE19D", -"na c #FFFAB6", -"nb c #F2FAFD", -"nc c #C3C8DB", -"nd c #6C78AC", -"ne c #527591", -"nf c #7B9EBA", -"ng c #86B2D5", -"nh c #8FBBDE", -"ni c #94C4E8", -"nj c #99C9ED", -"nk c #9ECFF7", -"nl c #A2D6FD", -"nm c #222629", -"nn c #BDC1C4", -"no c #EFEFF1", -"np c #EEEEEE", -"nq c #515151", -"nr c #566D7F", -"ns c #B9D0E2", -"nt c #95A2AB", -"nu c #26333C", -"nv c #EDEDED", -"nw c #BEC7CC", -"nx c #161F24", -"ny c #A1D7FB", -"nz c #A3D4FD", -"nA c #A4D5FE", -"nB c #647785", -"nC c #3E515F", -"nD c #EEF0EF", -"nE c #EDEFEE", -"nF c #F0F0F2", -"nG c #5A7A93", -"nH c #B1D1EA", -"nI c #2B3E4C", -"nJ c #5B6E7C", -"nK c #A8A8AA", -"nL c #030A10", -"nM c #757C82", -"nN c #ABD4F2", -"nO c #B5CFE6", -"nP c #2F4960", -"nQ c #9A9899", -"nR c #EFEDEE", -"nS c #6B7881", -"nT c #48555E", -"nU c #3A3F43", -"nV c #DBE0E4", -"nW c #EEEEF0", -"nX c #9BA4AB", -"nY c #3A434A", -"nZ c #426F90", -"n& c #414548", -"o c #E8ECEF", -"o0 c #CDCFCE", -"o1 c #131514", -"o2 c #6B879D", -"o3 c #B5D1E7", -"o4 c #9FD4FC", -"o5 c #9FD4FE", -"o6 c #9ED3FD", -"o7 c #9FD3FB", -"o8 c #9ED2FA", -"o9 c #9CD0F8", -"oa c #9BCFF7", -"ob c #9BCCF4", -"oc c #97C8F0", -"od c #8FBFE5", -"oe c #8EB4E5", -"of c #81A7D8", -"og c #7D91DA", -"oh c #8599E2", -"oi c #8EA5D7", -"oj c #ABC2F4", -"ok c #C5D9F4", -"ol c #AFC3DE", -"om c #8B9096", -"on c #858A90", -"oo c #A8A7AC", -"op c #B7B6BB", -"oq c #C3C5C4", -"or c #A3A5A4", -"os c #8F9092", -"ot c #737476", -"ou c #A3AFBF", -"ov c #D7E3F3", -"ow c #DDECFF", -"ox c #DEEDFF", -"oy c #E3EFFD", -"oz c #E1EDFB", -"oA c #E3EDF7", -"oB c #E7F1FB", -"oC c #E6F2FE", -"oD c #E9EBD6", -"oE c #E0E2CD", -"oF c #E8E0B9", -"oG c #F4ECC5", -"oH c #EFF7F9", -"oI c #F2FAFC", -"oJ c #F3FAFF", -"oK c #F9FEFF", -"oL c #FAFEFD", -"oM c #FBFFFE", -"oN c #F2F3F5", -"oO c #A3A7D4", -"oP c #626693", -"oQ c #51678E", -"oR c #6C82A9", -"oS c #7EA9CB", -"oT c #8BB6D8", -"oU c #90C0E6", -"oV c #98CCF4", -"oW c #9ACEF6", -"oX c #9DD1F9", -"oY c #A0D3FE", -"oZ c #9FD2FD", -"o& c #303B41", -"p c #A0ABB1", -"p0 c #EAEAEA", -"p1 c #A9B2B7", -"p2 c #000308", -"p3 c #9ED3FB", -"p4 c #9FD5FB", -"p5 c #99AEBF", -"p6 c #132839", -"p7 c #E7E5E6", -"p8 c #040203", -"p9 c #A0D4FC", -"pa c #9FD2FF", -"pb c #A5D3F5", -"pc c #C3C3C3", -"pd c #E9EBEA", -"pe c #EAECEB", -"pf c #EBEBED", -"pg c #EAEAEC", -"ph c #87949D", -"pi c #24313A", -"pj c #B3CFE5", -"pk c #476379", -"pl c #484848", -"pm c #A1AAB1", -"pn c #00060D", -"po c #6B9BC3", -"pp c #A3D3FB", -"pq c #AAD1F0", -"pr c #446B8A", -"ps c #777777", -"pt c #76838C", -"pu c #4C5962", -"pv c #090E12", -"pw c #D3D8DC", -"px c #ECECEC", -"py c #A1A8AE", -"pz c #333A40", -"pA c #858F98", -"pB c #101A23", -"pC c #D8D8D8", -"pD c #D6D6D6", -"pE c #0C273C", -"pF c #5B768B", -"pG c #A1D4FF", -"pH c #9DD2FC", -"pI c #98C9F1", -"pJ c #94C5ED", -"pK c #91C1E7", -"pL c #8BBBE1", -"pM c #83A9DA", -"pN c #7DA3D4", -"pO c #879BE4", -"pP c #97ABF4", -"pQ c #BBD2FF", -"pR c #9BAFCA", -"pS c #7B8FAA", -"pT c #B1B6BC", -"pU c #C3C8CE", -"pV c #CCCBD0", -"pW c #CAC9CE", -"pX c #C1C3C2", -"pY c #B9BBBA", -"pZ c #AEAFB1", -"p& c #9C9D9F", -"q c #778393", -"q0 c #A8B4C4", -"q1 c #DCEBFE", -"q2 c #E4F0FE", -"q3 c #E5F1FF", -"q4 c #E8F2FC", -"q5 c #E8F4FF", -"q6 c #F4F6E1", -"q7 c #F6F8E3", -"q8 c #FFF8D1", -"q9 c #F0F8FA", -"qa c #F1F8FE", -"qb c #F2F9FF", -"qc c #F5FDFF", -"qd c #D1D5FF", -"qe c #8084B1", -"qf c #546A91", -"qg c #729DBF", -"qh c #85B0D2", -"qi c #8CBCE2", -"qj c #92C2E8", -"qk c #95C9F1", -"ql c #9ED1FC", -"qm c #3E494F", -"qn c #8C979D", -"qo c #343D42", -"qp c #737C81", -"qq c #9ED4FA", -"qr c #8DA2B3", -"qs c #1F3445", -"qt c #E8E6E7", -"qu c #141213", -"qv c #8BBFE7", -"qw c #9DD2FA", -"qx c #A4D2F4", -"qy c #3E6C8E", -"qz c #585858", -"qA c #E6E8E7", -"qB c #E7E7E9", -"qC c #CECED0", -"qD c #05121B", -"qE c #8D9AA3", -"qF c #809CB2", -"qG c #00192F", -"qH c #D4D4D4", -"qI c #D2D2D2", -"qJ c #091219", -"qK c #879097", -"qL c #A2D2FA", -"qM c #A9D0EF", -"qN c #456C8B", -"qO c #757575", -"qP c #65727B", -"qQ c #58656E", -"qR c #51565A", -"qS c #A4ABB1", -"qT c #2E353B", -"qU c #8ABFE7", -"qV c #0F1922", -"qW c #A6B0B9", -"qX c #313131", -"qY c #4A657A", -"qZ c #B3CEE3", -"q& c #9BD1FD", -"r c #9BD1FF", -"r0 c #9AD0FE", -"r1 c #99D0F9", -"r2 c #97CEF7", -"r3 c #97CCF8", -"r4 c #94C9F5", -"r5 c #91C4EF", -"r6 c #8EC1EC", -"r7 c #8DBDE5", -"r8 c #86B6DE", -"r9 c #869DE9", -"ra c #879EEA", -"rb c #9BB7E6", -"rc c #BFDBFF", -"rd c #C7DFFB", -"re c #9CB4D0", -"rf c #96979B", -"rg c #CBCCD0", -"rh c #D0D0D0", -"ri c #BBBBBB", -"rj c #BFBFBF", -"rk c #B7B7B5", -"rl c #ACACAA", -"rm c #929292", -"rn c #7E7E7E", -"ro c #85868A", -"rp c #949599", -"rq c #D8E5F6", -"rr c #E1EEFF", -"rs c #E4F0FC", -"rt c #EAF4FF", -"ru c #E9F6FF", -"rv c #EAF7FF", -"rw c #EBF8FF", -"rx c #DCF0FF", -"ry c #D3E7FF", -"rz c #D5E7FF", -"rA c #E1F3FF", -"rB c #F0FAFF", -"rC c #F3FDFF", -"rD c #FAFCFF", -"rE c #B1B3BF", -"rF c #616CA2", -"rG c #576298", -"rH c #6185A5", -"rI c #81A5C5", -"rJ c #87B8E0", -"rK c #8DBEE6", -"rL c #92C5F0", -"rM c #95C8F3", -"rN c #96CCF8", -"rO c #98CEFA", -"rP c #47515B", -"rQ c #7D8791", -"rR c #E5E5E5", -"rS c #BDBDBD", -"rT c #000924", -"rU c #ABCDE8", -"rV c #9AD0FC", -"rW c #9CD2FE", -"rX c #6C7680", -"rY c #505A64", -"rZ c #E4E4E4", -"r& c #161616", -"s c #84B9E3", -"s0 c #9CD1F9", -"s1 c #A4CFF1", -"s2 c #ABCEEC", -"s3 c #AACDEB", -"s4 c #9CD1FB", -"s5 c #9FAFBE", -"s6 c #000C1B", -"s7 c #CBCBCD", -"s8 c #E5E5E7", -"s9 c #E0E4E7", -"sa c #3B3F42", -"sb c #3B698D", -"sc c #A1CFF3", -"sd c #373B3E", -"se c #868A8D", -"sf c #616161", -"sg c #346286", -"sh c #A2D0F4", -"si c #9CD0FF", -"sj c #9BCFFE", -"sk c #AECCE6", -"sl c #2C4A64", -"sm c #34495A", -"sn c #6E8394", -"so c #98BBD7", -"sp c #000723", -"sq c #B2B2B0", -"sr c #E5E5E3", -"ss c #E5E3E4", -"st c #E6E4E5", -"su c #AAAFB5", -"sv c #2C3137", -"sw c #B3CCE0", -"sx c #2A4357", -"sy c #E1E1E3", -"sz c #334A5C", -"sA c #3B5264", -"sB c #99CFFD", -"sC c #98CFF8", -"sD c #95CCF5", -"sE c #96CBF7", -"sF c #92C7F3", -"sG c #90C3EE", -"sH c #8CBFEA", -"sI c #8ABAE2", -"sJ c #83B3DB", -"sK c #859CE8", -"sL c #91A8F4", -"sM c #B3CFFE", -"sN c #B4CCE8", -"sO c #829AB6", -"sP c #AFB0B4", -"sQ c #DADBDF", -"sR c #C8C8C8", -"sS c #B4B4B4", -"sT c #AAAAA8", -"sU c #A0A09E", -"sV c #949494", -"sW c #838383", -"sX c #828387", -"sY c #9D9EA2", -"sZ c #D5E2F3", -"s& c #E0EDFE", -"t c #E5F1FD", -"t0 c #E8F5FE", -"t1 c #E7F4FD", -"t2 c #E0EDFD", -"t3 c #D8E5F5", -"t4 c #CEE2FA", -"t5 c #CFE3FB", -"t6 c #D3E5FD", -"t7 c #D2E4FC", -"t8 c #E2ECF5", -"t9 c #EFF9FF", -"ta c #FBFDFF", -"tb c #E2E4F0", -"tc c #7F8AC0", -"td c #586399", -"te c #4B6F8F", -"tf c #769ABA", -"tg c #83B4DC", -"th c #8ABBE3", -"ti c #8FC2ED", -"tj c #93C6F1", -"tk c #94CAF6", -"tl c #98CEFC", -"tm c #99CFFB", -"tn c #747E88", -"to c #E2E2E2", -"tp c #666666", -"tq c #41637E", -"tr c #A9CBE6", -"ts c #29333D", -"tt c #96A0AA", -"tu c #0A0A0A", -"tv c #8CC1EB", -"tw c #9BD0FA", -"tx c #9BD0F8", -"ty c #7DB2DA", -"tz c #5C87A9", -"tA c #356082", -"tB c #234664", -"tC c #315472", -"tD c #7DB2DC", -"tE c #9ACFF9", -"tF c #3E4E5D", -"tG c #647483", -"tH c #717578", -"tI c #303437", -"tJ c #81AFD3", -"tK c #0F1316", -"tL c #D7DBDE", -"tM c #DADADA", -"tN c #0D0D0D", -"tO c #88B6DA", -"tP c #A7C5DF", -"tQ c #000923", -"tR c #CBCBCB", -"tS c #000D1E", -"tT c #9EB3C4", -"tU c #A8CBE7", -"tV c #5E819D", -"tW c #20201E", -"tX c #D5D5D3", -"tY c #E1DFE0", -"tZ c #272C32", -"t& c #556E82", -"u c #253E52", -"u0 c #5C5C5E", -"u1 c #294052", -"u2 c #B2C9DB", -"u3 c #95CFFD", -"u4 c #95CDFE", -"u5 c #94CCFD", -"u6 c #92CAFB", -"u7 c #92C8F6", -"u8 c #8EC4F2", -"u9 c #8DC2EE", -"ua c #88BDE9", -"ub c #85B6DF", -"uc c #7FB0D9", -"ud c #839DE8", -"ue c #8FA9F4", -"uf c #B0D1FA", -"ug c #B9DAFF", -"uh c #AEBAC8", -"ui c #8894A2", -"uj c #C4C4C6", -"uk c #BBBBBD", -"ul c #B1B1B1", -"um c #A8A8A8", -"un c #9E9EA0", -"uo c #939395", -"up c #898989", -"uq c #808080", -"ur c #7E7F83", -"us c #A8A9AD", -"ut c #DDEAFA", -"uu c #E1EEFE", -"uv c #E4F2FF", -"uw c #E5F3FF", -"ux c #E6F4FF", -"uy c #E3F4FF", -"uz c #E1F2FF", -"uA c #D5EDFF", -"uB c #CDE5FF", -"uC c #C7E0FF", -"uD c #C8E1FF", -"uE c #C9E0FF", -"uF c #C8DFFF", -"uG c #C3D3FF", -"uH c #B2C2F3", -"uI c #AAB8E7", -"uJ c #C8D6FF", -"uK c #F4FDFF", -"uL c #FCFFFF", -"uM c #F9FCFF", -"uN c #A0ABD9", -"uO c #616C9A", -"uP c #4E678F", -"uQ c #6C85AD", -"uR c #7BACD4", -"uS c #8BC0EC", -"uT c #8FC4F0", -"uU c #8FC8F5", -"uV c #91CAF7", -"uW c #94CCFB", -"uX c #96CEFF", -"uY c #94CEFE", -"uZ c #95CFFF", -"u& c #505C68", -"v c #6B7783", -"v0 c #DCDCDC", -"v1 c #DEDCDD", -"v2 c #DADBDD", -"v3 c #1A1B1D", -"v4 c #72A8D6", -"v5 c #A1CCEF", -"v6 c #6E99BC", -"v7 c #D9D9D9", -"v8 c #CFD0D4", -"v9 c #010206", -"va c #96CEFD", -"vb c #95CDFC", -"vc c #AFC8DE", -"vd c #597288", -"ve c #1F2324", -"vf c #171B1C", -"vg c #4E4E4E", -"vh c #7A7A7A", -"vi c #969696", -"vj c #606060", -"vk c #0B2A46", -"vl c #A9C8E4", -"vm c #A5C9E9", -"vn c #698DAD", -"vo c #1C1C1C", -"vp c #DCDCDE", -"vq c #DDDDDF", -"vr c #9D9D9D", -"vs c #000828", -"vt c #8AAECE", -"vu c #A4CBEC", -"vv c #446B8C", -"vw c #9FA6B0", -"vx c #2B323C", -"vy c #97CDF9", -"vz c #5D646A", -"vA c #4A5157", -"vB c #828284", -"vC c #1B4367", -"vD c #A3CBEF", -"vE c #94CEFC", -"vF c #3A5065", -"vG c #374D62", -"vH c #DEDEDE", -"vI c #DBDDDC", -"vJ c #252C32", -"vK c #76A2C5", -"vL c #0E0E10", -"vM c #C3C3C5", -"vN c #687888", -"vO c #1B2B3B", -"vP c #8DC5F4", -"vQ c #98CDFF", -"vR c #96D0FE", -"vS c #97CFFF", -"vT c #93CDFB", -"vU c #93CBFC", -"vV c #91C9FA", -"vW c #90C8F9", -"vX c #90C6F4", -"vY c #8DC3F1", -"vZ c #8ABFEB", -"v& c #85BAE6", -"w c #83B4DD", -"w0 c #7CADD6", -"w1 c #87A1EC", -"w2 c #AFD0F9", -"w3 c #85919F", -"w4 c #BABABA", -"w5 c #B4B4B6", -"w6 c #AFAFB1", -"w7 c #A5A5A5", -"w8 c #9B9B9B", -"w9 c #8F8F91", -"wa c #7D7D7D", -"wb c #787878", -"wc c #8C8D91", -"wd c #C6C7CB", -"we c #E2F0FD", -"wf c #D2E3F5", -"wg c #C6DEF8", -"wh c #C5DEFD", -"wi c #C6DFFE", -"wj c #BED5F7", -"wk c #ABC2E4", -"wl c #8C9CCD", -"wm c #6979AA", -"wn c #5F6D9C", -"wo c #8492C1", -"wp c #BFC8D7", -"wq c #E6EFFE", -"wr c #F7FBFC", -"ws c #FAFEFF", -"wt c #FAFDFF", -"wu c #F0F3FA", -"wv c #C3CEFC", -"ww c #737EAC", -"wx c #506991", -"wy c #5A739B", -"wz c #73A4CC", -"wA c #85B6DE", -"wB c #87BCE8", -"wC c #8CC5F2", -"wD c #91C9F8", -"wE c #92CAF9", -"wF c #92CCFA", -"wG c #93CDFD", -"wH c #4E5A66", -"wI c #D7D7D7", -"wJ c #D9D7D8", -"wK c #D8D6D7", -"wL c #AFB0B2", -"wM c #1B1C1E", -"wN c #96CCFA", -"wO c #A0CBEE", -"wP c #0C375A", -"wQ c #8F8F8F", -"wR c #A9AAAE", -"wS c #232428", -"wT c #84BCEB", -"wU c #1E374D", -"wV c #263F55", -"wW c #A3A7A8", -"wX c #D5D9DA", -"wY c #B2B2B2", -"wZ c #001531", -"w& c #A8C7E3", -"x c #94B8D8", -"x0 c #A1A1A1", -"x1 c #D7D7D9", -"x2 c #D8D8DA", -"x3 c #0C0C0C", -"x4 c #6B8FAF", -"x5 c #A4C8E8", -"x6 c #A2C9EA", -"x7 c #0A3152", -"x8 c #A2A2A2", -"x9 c #787F89", -"xa c #4C535D", -"xb c #92CCFC", -"xc c #95CBF7", -"xd c #6AA0CC", -"xe c #060D13", -"xf c #BAC1C7", -"xg c #18181A", -"xh c #6C94B8", -"xi c #A0C8EC", -"xj c #AFC5DA", -"xk c #1C3247", -"xl c #686868", -"xm c #D7D9D8", -"xn c #D6D8D7", -"xo c #9AA1A7", -"xp c #2B3238", -"xq c #9ECAED", -"xr c #083457", -"xs c #8B8B8D", -"xt c #8D8D8F", -"xu c #081828", -"xv c #99A9B9", -"xw c #96CBFD", -"xx c #90CDFC", -"xy c #91CBFD", -"xz c #90CAFC", -"xA c #8FC9F9", -"xB c #8DC7F7", -"xC c #8CC4F5", -"xD c #89C1F2", -"xE c #87BDEB", -"xF c #82B8E6", -"xG c #80B1DC", -"xH c #7AABD6", -"xI c #8298E4", -"xJ c #899FEB", -"xK c #ABCBFA", -"xL c #B6D6FF", -"xM c #B5C5D5", -"xN c #8696A6", -"xO c #A0A0A0", -"xP c #A6A6A6", -"xQ c #999999", -"xR c #7B797A", -"xS c #6B696A", -"xT c #767678", -"xU c #878789", -"xV c #B2BCC5", -"xW c #E1EBF4", -"xX c #DEEEFE", -"xY c #DFF1FF", -"xZ c #D2EBFF", -"x& c #CBE4FF", -"y c #C1DDFF", -"y0 c #C3DDFF", -"y1 c #BCD0FF", -"y2 c #A8BCEF", -"y3 c #8E9DD8", -"y4 c #6D7CB7", -"y5 c #5C6D99", -"y6 c #4E5F8B", -"y7 c #506290", -"y8 c #596B99", -"y9 c #717DB7", -"ya c #A7B3ED", -"yb c #D6E4FF", -"yc c #E8F6FF", -"yd c #F2FCFF", -"ye c #F0FCFF", -"yf c #EEFAFF", -"yg c #E1F4FF", -"yh c #D9ECFD", -"yi c #D5E4FF", -"yj c #7D8CB3", -"yk c #556795", -"yl c #546694", -"ym c #6B9CC4", -"yn c #81B2DA", -"yo c #84BAE9", -"yp c #89BFEE", -"yq c #8AC2F3", -"yr c #8EC6F7", -"ys c #8EC8FA", -"yt c #8FC9FB", -"yu c #8FCCFB", -"yv c #92CCFE", -"yw c #8FCDFC", -"yx c #8ECCFB", -"yy c #49565F", -"yz c #6E7B84", -"yA c #D3D3D3", -"yB c #435362", -"yC c #93CBFA", -"yD c #5F686D", -"yE c #353E43", -"yF c #6D7B88", -"yG c #404E5B", -"yH c #AAC6DC", -"yI c #1B374D", -"yJ c #646464", -"yK c #D3D3D5", -"yL c #A7A7A9", -"yM c #98999D", -"yN c #CECFD3", -"yO c #CDD1D4", -"yP c #4B4F52", -"yQ c #295071", -"yR c #A1C8E9", -"yS c #34393C", -"yT c #676C6F", -"yU c #D5D3D4", -"yV c #B9B7B8", -"yW c #001C35", -"yX c #9FBBD0", -"yY c #000B20", -"yZ c #CECECE", -"y& c #6F7983", -"z c #8FCCF9", -"z0 c #90CDFA", -"z1 c #9AACBA", -"z2 c #8F9190", -"z3 c #D2D4D3", -"z4 c #526574", -"z5 c #314453", -"z6 c #8FCDFE", -"z7 c #8ECCFD", -"z8 c #7CB6E6", -"z9 c #102131", -"za c #647585", -"zb c #D4D4D6", -"zc c #D5D5D5", -"zd c #303940", -"ze c #585F65", -"zf c #3C4349", -"zg c #9AA4AD", -"zh c #00060F", -"zi c #659DCC", -"zj c #92CBFF", -"zk c #8ECBFA", -"zl c #8BC5F5", -"zm c #8BC3F4", -"zn c #87BFF0", -"zo c #84BAE8", -"zp c #80B6E4", -"zq c #7FB0DB", -"zr c #78A9D4", -"zs c #8096E2", -"zt c #879DE9", -"zu c #A3C3F2", -"zv c #B4D4FF", -"zw c #CBDBEB", -"zx c #A1B1C1", -"zy c #959595", -"zz c #747273", -"zA c #787677", -"zB c #DEE8F1", -"zC c #E4EEF7", -"zD c #DAEAFA", -"zE c #CDDFF7", -"zF c #C1DAF9", -"zG c #BEDAFF", -"zH c #BAD4F7", -"zI c #A4BEE1", -"zJ c #8CA0D3", -"zK c #6E82B5", -"zL c #5D6CA7", -"zM c #51609B", -"zN c #445581", -"zO c #475987", -"zP c #4B5D8B", -"zQ c #58649E", -"zR c #6470AA", -"zS c #99A7C2", -"zT c #C5D3EE", -"zU c #E2ECF6", -"zV c #E1EDF9", -"zW c #DDE9F5", -"zX c #D6E9FA", -"zY c #CAD9FF", -"zZ c #7584AB", -"z& c #536593", -"A c #699AC2", -"A0 c #83B9E8", -"A1 c #87BDEC", -"A2 c #8BC5F7", -"A3 c #8DC7F9", -"A4 c #8DCAF9", -"A5 c #8DCBFA", -"A6 c #3F4C55", -"A7 c #75828B", -"A8 c #CFCFCF", -"A9 c #283847", -"Aa c #758594", -"Ab c #6BA3D2", -"Ac c #060F14", -"Ad c #B0B9BE", -"Ae c #354350", -"Af c #6E7C89", -"Ag c #637F95", -"Ah c #1A364C", -"Ai c #979799", -"Aj c #030305", -"Ak c #030408", -"Al c #03070A", -"Am c #282C2F", -"An c #8AB1D2", -"Ao c #214869", -"Ap c #4B5053", -"Aq c #C9CED1", -"Ar c #B7B5B6", -"As c #4E6E87", -"At c #A4C4DD", -"Au c #819DB2", -"Av c #0D293E", -"Aw c #828C96", -"Ax c #37414B", -"Ay c #8ECBF8", -"Az c #90C8F7", -"AA c #75ADDC", -"AB c #132533", -"AC c #697B89", -"AD c #969897", -"AE c #001221", -"AF c #98ABBA", -"AG c #8CCAFB", -"AH c #8DCBFC", -"AI c #90CAFA", -"AJ c #93A4B4", -"AK c #6C6C6E", -"AL c #848D94", -"AM c #363F46", -"AN c #0B1218", -"AO c #B5BCC2", -"AP c #08121B", -"AQ c #747E87", -"AR c #90C9FE", -"AS c #8DCBFE", -"AT c #8CCAFD", -"AU c #8BC8FE", -"AV c #8AC7FD", -"AW c #89C6FC", -"AX c #87C4FA", -"AY c #86C2F4", -"AZ c #82BEF0", -"A& c #82BAE9", -"B c #7DB5E4", -"B0 c #7AAEDD", -"B1 c #74A8D7", -"B2 c #7B96DD", -"B3 c #839EE5", -"B4 c #9DBCF2", -"B5 c #B3D2FF", -"B6 c #C4D8F3", -"B7 c #AFB8C7", -"B8 c #A0A9B8", -"B9 c #9CA1A5", -"Ba c #909599", -"Bb c #8D9095", -"Bc c #93969B", -"Bd c #99A2A7", -"Be c #B4BDC2", -"Bf c #CDDAEA", -"Bg c #DFECFC", -"Bh c #DAEFFF", -"Bi c #D3ECFF", -"Bj c #CDE6FF", -"Bk c #C4E2FF", -"Bl c #BEDCFF", -"Bm c #B8D8FF", -"Bn c #BAD7FF", -"Bo c #BACFFF", -"Bp c #A2B7EE", -"Bq c #8E9CD9", -"Br c #7381BE", -"Bs c #6072A0", -"Bt c #526492", -"Bu c #3E5B7B", -"Bv c #3F5C7C", -"Bw c #4E7596", -"Bx c #547C9F", -"By c #4D7598", -"Bz c #476089", -"BA c #506992", -"BB c #5C68A2", -"BC c #838FC9", -"BD c #ADBEEA", -"BE c #CCDDFF", -"BF c #D2E5FF", -"BG c #D1E4FF", -"BH c #CCDFFF", -"BI c #9EA9E1", -"BJ c #6570A8", -"BK c #4B648C", -"BL c #679CC6", -"BM c #7DBAE9", -"BN c #81BEED", -"BO c #87C1F3", -"BP c #89C3F5", -"BQ c #89C5FB", -"BR c #8AC6FC", -"BS c #8CC9FF", -"BT c #323941", -"BU c #888F97", -"BV c #CACACC", -"BW c #CACACA", -"BX c #C9C9C9", -"BY c #C0C0C0", -"BZ c #000A29", -"B& c #97B8D7", -"C c #8DC9FF", -"C0 c #A8C2D9", -"C1 c #142E45", -"C2 c #828483", -"C3 c #C9CBCA", -"C4 c #C8CAC9", -"C5 c #C7C9C8", -"C6 c #000F2B", -"C7 c #90B2CE", -"C8 c #394249", -"C9 c #778087", -"Ca c #223343", -"Cb c #728393", -"Cc c #94C7F2", -"Cd c #83B6E1", -"Ce c #8BAAC7", -"Cf c #83A2BF", -"Cg c #292C31", -"Ch c #4E5156", -"Ci c #C7C7C7", -"Cj c #C9C9CB", -"Ck c #ABABAB", -"Cl c #001F3B", -"Cm c #496884", -"Cn c #8BC9FC", -"Co c #7B95A6", -"Cp c #183243", -"Cq c #B4B5B7", -"Cr c #0E0F11", -"Cs c #91C7F5", -"Ct c #00040E", -"Cu c #78797B", -"Cv c #C8C9CB", -"Cw c #A2ABB2", -"Cx c #060F16", -"Cy c #568EBF", -"Cz c #8FC7F8", -"CA c #8DC9FB", -"CB c #74B0E2", -"CC c #122335", -"CD c #5D6E80", -"CE c #7C8083", -"CF c #25292C", -"CG c #858688", -"CH c #B8BDC3", -"CI c #1C2127", -"CJ c #3B719F", -"CK c #8DC9FD", -"CL c #88C5FB", -"CM c #80B8E7", -"CN c #7BAFDE", -"CO c #7792D9", -"CP c #819CE3", -"CQ c #94B3E9", -"CR c #B2D1FF", -"CS c #CBDFFA", -"CT c #D1E5FF", -"CU c #D8E1F0", -"CV c #CDD6E5", -"CW c #C8CDD1", -"CX c #C3C8CC", -"CY c #C6C9CE", -"CZ c #CFD2D7", -"C& c #D5DEE3", -"D c #E2EBF0", -"D0 c #DEEBFB", -"D1 c #D2E7FA", -"D2 c #CDE2F5", -"D3 c #C3DCFA", -"D4 c #BED7F5", -"D5 c #B7D5F9", -"D6 c #B6D6FD", -"D7 c #B7D7FE", -"D8 c #AFCCF6", -"D9 c #9FBCE6", -"Da c #7287BE", -"Db c #6472AF", -"Dc c #54629F", -"Dd c #455785", -"De c #465886", -"Df c #4D6A8A", -"Dg c #5A7797", -"Dh c #5F86A7", -"Di c #668DAE", -"Dj c #6991B4", -"Dk c #668EB1", -"Dl c #657EA7", -"Dm c #4A638C", -"Dn c #54609A", -"Do c #6C7DA9", -"Dp c #95A6D2", -"Dq c #ADC0E0", -"Dr c #B0C3E3", -"Ds c #AABDDE", -"Dt c #92A5C6", -"Du c #6B76AE", -"Dv c #57629A", -"Dw c #455E86", -"Dx c #5D769E", -"Dy c #6DA2CC", -"Dz c #7FB4DE", -"DA c #7EBBEA", -"DB c #86C0F2", -"DC c #1E252D", -"DD c #99A0A8", -"DE c #153655", -"DF c #A1C2E1", -"DG c #8BC9FA", -"DH c #8CC8FE", -"DI c #8AC8FB", -"DJ c #486279", -"DK c #2B455C", -"DL c #C4C6C5", -"DM c #C2C4C3", -"DN c #153753", -"DO c #A1C3DF", -"DP c #1F282F", -"DQ c #929BA2", -"DR c #304151", -"DS c #4C5D6D", -"DT c #6598C3", -"DU c #477AA5", -"DV c #2C4B68", -"DW c #00112E", -"DX c #75787D", -"DY c #C0C3C8", -"DZ c #C5C5C7", -"D& c #909090", -"E c #0E0E0E", -"E0 c #4E6D89", -"E1 c #A3C2DE", -"E2 c #89A3B4", -"E3 c #031D2E", -"E4 c #C3C4C6", -"E5 c #303133", -"E6 c #4F87B6", -"E7 c #8EC6F5", -"E8 c #366C9A", -"E9 c #06101A", -"Ea c #858F99", -"Eb c #C2C3C5", -"Ec c #A6A7A9", -"Ed c #0E171E", -"Ee c #636C73", -"Ef c #8CC8FA", -"Eg c #93A4B6", -"Eh c #091A2C", -"Ei c #707477", -"Ej c #BFC0C2", -"Ek c #31363C", -"El c #4C5157", -"Em c #8CC8FC", -"En c #85C6FC", -"Eo c #86C5FB", -"Ep c #85C4FA", -"Eq c #84C3F9", -"Er c #84C0F6", -"Es c #81BDF3", -"Et c #7CB8EC", -"Eu c #79B5E9", -"Ev c #77AFE0", -"Ew c #70A8D9", -"Ex c #7594D4", -"Ey c #7D9CDC", -"Ez c #8CAAE6", -"EA c #B1CFFF", -"EB c #C6DFFD", -"EC c #CCE5FF", -"ED c #D0E6FE", -"EE c #D2E8FF", -"EF c #D5EAFF", -"EG c #D7ECFF", -"EH c #D8EAFE", -"EI c #D3EBFF", -"EJ c #CAE2FE", -"EK c #B7D9FF", -"EL c #B3D5FF", -"EM c #B0D2FF", -"EN c #B1D3FF", -"EO c #B4D3FF", -"EP c #AEC3FF", -"EQ c #95AAE9", -"ER c #8496D6", -"ES c #7587C7", -"ET c #667AAC", -"EU c #596D9F", -"EV c #3E5F80", -"EW c #3C5D7E", -"EX c #436E91", -"EY c #517C9F", -"EZ c #5889B2", -"E& c #6394BD", -"F c #659AC6", -"F0 c #699ECA", -"F1 c #689DC9", -"F2 c #6497C2", -"F3 c #5C8FBA", -"F4 c #4D739A", -"F5 c #41678E", -"F6 c #536498", -"F7 c #5C6DA1", -"F8 c #6B7AB1", -"F9 c #6E7DB4", -"Fa c #6979AD", -"Fb c #5B6B9F", -"Fc c #4F658C", -"Fd c #435980", -"Fe c #436F96", -"Ff c #618DB4", -"Fg c #6FA9DB", -"Fh c #7BB5E7", -"Fi c #7CB9EF", -"Fj c #7FBCF2", -"Fk c #7FC0F6", -"Fl c #82C3F9", -"Fm c #84C5FB", -"Fn c #87C6FC", -"Fo c #87C5F8", -"Fp c #88C6F9", -"Fq c #010101", -"Fr c #B3B3B3", -"Fs c #505050", -"Ft c #366A99", -"Fu c #8FC3F2", -"Fv c #86C7FD", -"Fw c #8BC3F2", -"Fx c #7AB2E1", -"Fy c #050706", -"Fz c #A7A9A8", -"FA c #373737", -"FB c #407AAA", -"FC c #1C252C", -"FD c #8A939A", -"FE c #BCBEBD", -"FF c #5B5B5B", -"FG c #3B3B3B", -"FH c #4F4F4F", -"FI c #B0B0B0", -"FJ c #BEBEC0", -"FK c #BDBDBF", -"FL c #B5BAC0", -"FM c #575C62", -"FN c #000A2C", -"FO c #5A85A7", -"FP c #001438", -"FQ c #A2A2A4", -"FR c #BEBEBC", -"FS c #91918F", -"FT c #00040D", -"FU c #77818A", -"FV c #7C8FA0", -"FW c #4E6172", -"FX c #17181A", -"FY c #3F4042", -"FZ c #839099", -"F& c #3870A1", -"G c #85C7FB", -"G0 c #88C5FC", -"G1 c #89C6FD", -"G2 c #619FD2", -"G3 c #88929B", -"G4 c #BEBCBD", -"G5 c #BFBDBE", -"G6 c #AEAEAE", -"G7 c #0D426E", -"G8 c #85C6FE", -"G9 c #82C1F7", -"Ga c #83BFF5", -"Gb c #80BCF2", -"Gc c #71A9DA", -"Gd c #6A89C9", -"Ge c #7B9ADA", -"Gf c #86A4E0", -"Gg c #ABC9FF", -"Gh c #C1DAF8", -"Gi c #CFE5FD", -"Gj c #D1E7FF", -"Gk c #D3E8FD", -"Gl c #D8E9FD", -"Gm c #D7E8FC", -"Gn c #D2EAFF", -"Go c #C0D8F4", -"Gp c #AED0FD", -"Gq c #AFD1FF", -"Gr c #ADCFFD", -"Gs c #9FBEED", -"Gt c #87A6D5", -"Gu c #7E93D2", -"Gv c #6E83C2", -"Gw c #6779B9", -"Gx c #596BAB", -"Gy c #465A8C", -"Gz c #435789", -"GA c #496A8B", -"GB c #58799A", -"GC c #608BAE", -"GD c #6A95B8", -"GE c #6B9CC5", -"GF c #6FA0C9", -"GG c #71A6D2", -"GH c #70A5D1", -"GI c #6EA1CC", -"GJ c #6B9EC9", -"GK c #6F95BC", -"GL c #5D83AA", -"GM c #526397", -"GN c #516296", -"GO c #516097", -"GP c #505F96", -"GQ c #506094", -"GR c #48588C", -"GS c #455B82", -"GT c #5C88AF", -"GU c #739FC6", -"GV c #76B0E2", -"GW c #7DB7E9", -"GX c #7DBAF0", -"GY c #80BDF3", -"GZ c #80C1F7", -"G& c #66A4D7", -"H c #B9B9B9", -"H0 c #B7B9B8", -"H1 c #B7B7B7", -"H2 c #669AC9", -"H3 c #8EC2F1", -"H4 c #28608F", -"H5 c #505251", -"H6 c #86C0F0", -"H7 c #8AC4F4", -"H8 c #384148", -"H9 c #626B72", -"Ha c #B6B8B7", -"Hb c #B9B9BB", -"Hc c #B8B8BA", -"Hd c #878787", -"He c #191E24", -"Hf c #353A40", -"Hg c #7DA8CA", -"Hh c #96C1E3", -"Hi c #83C4FA", -"Hj c #98C0E4", -"Hk c #325A7E", -"Hl c #404042", -"Hm c #B8B8B6", -"Hn c #7E8891", -"Ho c #313B44", -"Hp c #233647", -"Hq c #495C6D", -"Hr c #999A9C", -"Hs c #B7B8BA", -"Ht c #555555", -"Hu c #00050E", -"Hv c #6D7A83", -"Hw c #83C5F9", -"Hx c #84C6FA", -"Hy c #87C4FB", -"Hz c #86C4F7", -"HA c #727C85", -"HB c #0A141D", -"HC c #B5B5B5", -"HD c #81B6E2", -"HE c #84C5FD", -"HF c #81C4F9", -"HG c #82C3FB", -"HH c #81C2FA", -"HI c #7FC2F9", -"HJ c #7CBFF6", -"HK c #80BFF5", -"HL c #7DBCF2", -"HM c #77B4EA", -"HN c #75AFE1", -"HO c #6A91CA", -"HP c #7198D1", -"HQ c #83A0E2", -"HR c #A4C1FF", -"HS c #BBD8FA", -"HT c #C9E6FF", -"HU c #D1E5FE", -"HV c #D2E6FF", -"HW c #D9EAFE", -"HX c #DAEBFF", -"HY c #BBD4F3", -"HZ c #AECDFF", -"H& c #A8C7FD", -"I c #9AADF1", -"I0 c #8699DD", -"I1 c #788AC8", -"I2 c #6D7FBD", -"I3 c #657AA9", -"I4 c #526796", -"I5 c #3A5D7D", -"I6 c #3E6181", -"I7 c #517DA4", -"I8 c #578CB8", -"I9 c #6297C3", -"Ia c #68A0D1", -"Ib c #6DA5D6", -"Ic c #70AADC", -"Id c #72ACDE", -"Ie c #71ADE1", -"If c #71ADDF", -"Ig c #6DA5D4", -"Ih c #69A1D0", -"Ii c #6095C1", -"Ij c #5186B2", -"Ik c #4B789F", -"Il c #46739A", -"Im c #5083AE", -"In c #5D90BB", -"Io c #67A0D5", -"Ip c #72ABE0", -"Iq c #7AB7ED", -"Ir c #7CBBF1", -"Is c #7EBDF3", -"It c #7EBFF7", -"Iu c #7FC0F8", -"Iv c #80C1F9", -"Iw c #81C4FB", -"Ix c #92BFE6", -"Iy c #3E6B92", -"Iz c #484A49", -"IA c #B1B3B2", -"IB c #B0B2B1", -"IC c #949BA1", -"ID c #9DBBD5", -"IE c #ACB0AF", -"IF c #9CA09F", -"IG c #888F95", -"IH c #798086", -"II c #13334C", -"IJ c #476780", -"IK c #001C38", -"IL c #A3A3A3", -"IM c #B3B1B4", -"IN c #888888", -"IO c #001C32", -"IP c #407CAE", -"IQ c #85C1F3", -"IR c #7BBCF4", -"IS c #000515", -"IT c #4D5E6E", -"IU c #AAAFB2", -"IV c #696E71", -"IW c #20425E", -"IX c #6CABE1", -"IY c #81C2F8", -"IZ c #84C2FB", -"I& c #83C1FA", -"J c #88C2F2", -"J0 c #255F8F", -"J1 c #323637", -"J2 c #AEB2B3", -"J3 c #000F30", -"J4 c #6E95B6", -"J5 c #83C4FC", -"J6 c #7FC4FB", -"J7 c #7FC2F7", -"J8 c #7EC1F8", -"J9 c #7DC0F7", -"Ja c #7FBEF4", -"Jb c #7BB8EE", -"Jc c #78B5EB", -"Jd c #6E95CE", -"Je c #6D94CD", -"Jf c #7F9CDE", -"Jg c #99B6F8", -"Jh c #B8D5F7", -"Ji c #C7E4FF", -"Jj c #D1EAFF", -"Jk c #B7D0EF", -"Jl c #7897CD", -"Jm c #7487CB", -"Jn c #6D80C4", -"Jo c #6072B0", -"Jp c #4C5E9C", -"Jq c #3D5281", -"Jr c #445988", -"Js c #4A6D8D", -"Jt c #597C9C", -"Ju c #5E8AB1", -"Jv c #6A96BD", -"Jw c #6A9FCB", -"Jx c #6FA4D0", -"Jy c #73ABDC", -"Jz c #74AEE0", -"JA c #77B1E3", -"JB c #76B2E6", -"JC c #76B2E4", -"JD c #75B1E3", -"JE c #74ACDB", -"JF c #72AAD9", -"JG c #6CA1CD", -"JH c #6C99C0", -"JI c #6996BD", -"JJ c #6895BC", -"JK c #6A97BE", -"JL c #6A9DC8", -"JM c #71A4CF", -"JN c #77B0E5", -"JO c #90BDE4", -"JP c #002B52", -"JQ c #818382", -"JR c #AAACAB", -"JS c #A9ABAA", -"JT c #60676D", -"JU c #7694AE", -"JV c #000D27", -"JW c #1F1F1F", -"JX c #0F0F0F", -"JY c #000201", -"JZ c #090D0C", -"J& c #171E24", -"K c #282F35", -"K0 c #25455E", -"K1 c #9BBBD4", -"K2 c #30536F", -"K3 c #151515", -"K4 c #6A6A6A", -"K5 c #9A9A9A", -"K6 c #ACAAAD", -"K7 c #9E9C9F", -"K8 c #232323", -"K9 c #4E6A80", -"Ka c #9EBAD0", -"Kb c #84C0F2", -"Kc c #8C9DAD", -"Kd c #152636", -"Ke c #333333", -"Kf c #ABADAC", -"Kg c #0F1417", -"Kh c #2A2F32", -"Ki c #6385A1", -"Kj c #99BBD7", -"Kk c #83C2F8", -"Kl c #82C0F9", -"Km c #85BFEF", -"Kn c #202425", -"Ko c #6D7172", -"Kp c #A4A4A4", -"Kq c #1D1D1D", -"Kr c #4B7293", -"Ks c #96BDDE", -"Kt c #7DC2F9", -"Ku c #7AC1F9", -"Kv c #7BC0FB", -"Kw c #79BEF9", -"Kx c #7BC0F9", -"Ky c #79BEF7", -"Kz c #7ABCF6", -"KA c #78BAF4", -"KB c #76B9EE", -"KC c #72B5EA", -"KD c #71B0E5", -"KE c #6BAADF", -"KF c #689ACD", -"KG c #6193C6", -"KH c #8197E0", -"KI c #94AAF3", -"KJ c #B5D2FA", -"KK c #C2DFFF", -"KL c #D4E9FE", -"KM c #D6EBFF", -"KN c #CFE9FF", -"KO c #AFC9EE", -"KP c #889BDD", -"KQ c #6B7EC0", -"KR c #5C739C", -"KS c #445B84", -"KT c #335777", -"KU c #3B5F7F", -"KV c #3F7098", -"KW c #4D7EA6", -"KX c #558BB9", -"KY c #6096C4", -"KZ c #649ECE", -"K& c #69A3D3", -"L c #6AA9DC", -"L0 c #6BAADD", -"L1 c #6FAEE4", -"L2 c #71B0E6", -"L3 c #71B2E8", -"L4 c #74B5EB", -"L5 c #75B6EE", -"L6 c #73B6ED", -"L7 c #74B7EE", -"L8 c #74B5ED", -"L9 c #72B3EB", -"La c #70B1E7", -"Lb c #6FB0E6", -"Lc c #6FAEE3", -"Ld c #6CABE0", -"Le c #6AA7DD", -"Lf c #6BA8DE", -"Lg c #70AFE4", -"Lh c #74B3E9", -"Li c #74B6F0", -"Lj c #76B8F2", -"Lk c #77B9F3", -"Ll c #78BFF7", -"Lm c #79C0F8", -"Ln c #7ABFFA", -"Lo c #7AC1F7", -"Lp c #64839F", -"Lq c #001632", -"Lr c #68707B", -"Ls c #656D78", -"Lt c #576572", -"Lu c #485663", -"Lv c #2C4355", -"Lw c #102739", -"Lx c #001034", -"Ly c #4D7B9F", -"Lz c #7DBFF3", -"LA c #4587BB", -"LB c #5897CC", -"LC c #69A8DD", -"LD c #74B9F2", -"LE c #4A7FA9", -"LF c #063B65", -"LG c #000F29", -"LH c #00102A", -"LI c #001A30", -"LJ c #08243A", -"LK c #052137", -"LL c #000C26", -"LM c #00284B", -"LN c #123E61", -"LO c #4483B8", -"LP c #80BFF4", -"LQ c #7ABFF8", -"LR c #7AC0FB", -"LS c #78BDF6", -"LT c #336183", -"LU c #081D30", -"LV c #33485B", -"LW c #616870", -"LX c #747B83", -"LY c #737C83", -"LZ c #384F5F", -"L& c #0B2232", -"M c #00082B", -"M0 c #20486B", -"M1 c #67ACE3", -"M2 c #7BC0F7", -"M3 c #79C2F9", -"M4 c #78C1F8", -"M5 c #82BEF2", -"M6 c #272A2F", -"M7 c #64676C", -"M8 c #3C5162", -"M9 c #7BBFFC", -"Ma c #73B6EB", -"Mb c #73B2E7", -"Mc c #6C9ED1", -"Md c #6092C5", -"Me c #7E94DD", -"Mf c #8CA2EB", -"Mg c #B3D0F8", -"Mh c #BFDCFF", -"Mi c #DAECFF", -"Mj c #D0EAFF", -"Mk c #AAC4E9", -"Ml c #7D90D2", -"Mm c #576AAC", -"Mn c #395079", -"Mo c #425982", -"Mp c #486C8C", -"Mq c #567A9A", -"Mr c #598AB2", -"Ms c #6394BC", -"Mt c #659BC9", -"Mu c #6AA0CE", -"Mv c #6BA5D5", -"Mw c #6FA9D9", -"Mx c #6EADE0", -"My c #70AFE2", -"Mz c #73B2E8", -"MA c #75B6EC", -"MB c #76B7ED", -"MC c #77B8F0", -"MD c #75B8EF", -"ME c #76B9F0", -"MF c #76B7EF", -"MG c #73B4EA", -"MH c #72B3E9", -"MI c #72B1E6", -"MJ c #6FAEE1", -"MK c #70ADE3", -"ML c #71AEE4", -"MM c #77B6EC", -"MN c #79BBF5", -"MO c #7BC2F8", -"MP c #85A4C0", -"MQ c #153450", -"MR c #272F3A", -"MS c #2F3742", -"MT c #364451", -"MU c #44525F", -"MV c #546B7D", -"MW c #71889A", -"MX c #80AED2", -"MY c #8EBCE0", -"MZ c #7EC0F4", -"M& c #88BDE7", -"N c #96BAD4", -"N0 c #85A9C3", -"N1 c #7B97AD", -"N2 c #7793A9", -"N3 c #7894AA", -"N4 c #87ABC5", -"N5 c #97BBD5", -"N6 c #7FBEF3", -"N7 c #8EBCDE", -"N8 c #74899C", -"N9 c #495E71", -"Na c #313840", -"Nb c #1D242C", -"Nc c #1D262D", -"Nd c #2F383F", -"Ne c #435A6A", -"Nf c #6D8494", -"Ng c #92BADD", -"Nh c #7ABFF6", -"Ni c #205C90", -"Nj c #2E3136", -"Nk c #979A9F", -"Nl c #000617", -"Nm c #889DAE", -"Nn c #76BEF9", -"No c #77BFFA", -"Np c #75BDF8", -"Nq c #76BAF7", -"Nr c #74B8F5", -"Ns c #72B9F1", -"Nt c #6FB6EE", -"Nu c #6EB1E8", -"Nv c #69ACE3", -"Nw c #68A2D2", -"Nx c #4F89B9", -"Ny c #798FD8", -"Nz c #869CE5", -"NA c #A3C3F4", -"NB c #D6E8FE", -"NC c #D9E9FF", -"ND c #CEEAFF", -"NE c #A7C3EA", -"NF c #7B8FCE", -"NG c #586CAB", -"NH c #365C80", -"NI c #486E92", -"NJ c #4F84B0", -"NK c #598EBA", -"NL c #5C98CA", -"NM c #619DCF", -"NN c #63A2D7", -"NO c #66A5DA", -"NP c #67AADF", -"NQ c #6AADE2", -"NR c #6CB1E8", -"NS c #6EB3EA", -"NT c #70B5EE", -"NU c #71B6EF", -"NV c #71B9F4", -"NW c #72BAF5", -"NX c #73B9F5", -"NY c #74BAF6", -"NZ c #73BBF5", -"N& c #72BAF4", -"O c #74B9F4", -"O0 c #73B8F3", -"O1 c #71B8F0", -"O2 c #70B7EF", -"O3 c #6EB3EC", -"O4 c #6CB3E9", -"O5 c #6CB1EA", -"O6 c #6DB2EB", -"O7 c #6FB4ED", -"O8 c #73BBF6", -"O9 c #75BBF7", -"Oa c #76BDFB", -"Ob c #77BDF9", -"Oc c #75BDF7", -"Od c #76BEF8", -"Oe c #73BEF8", -"Of c #74BFF9", -"Og c #77A5C7", -"Oh c #4E5B64", -"Oi c #1C2932", -"Oj c #0A1117", -"Ok c #2A3137", -"Ol c #5E87A7", -"Om c #8FB8D8", -"On c #7ABBF3", -"Oo c #5F6972", -"Op c #0E1821", -"Oq c #939393", -"Or c #6F7982", -"Os c #000912", -"Ot c #4B8CC2", -"Ou c #7ABBF1", -"Ov c #74BCF7", -"Ow c #75B9F6", -"Ox c #73B7F4", -"Oy c #6DB4EC", -"Oz c #538DBD", -"OA c #7288D1", -"OB c #8298E1", -"OC c #99B9EA", -"OD c #B5D5FF", -"OE c #CFE3FC", -"OF c #D4E8FF", -"OG c #C6E2FF", -"OH c #A6C2E9", -"OI c #768AC9", -"OJ c #576BAA", -"OK c #395F83", -"OL c #50769A", -"OM c #558AB6", -"ON c #5E93BF", -"OO c #5F9BCD", -"OP c #64A0D2", -"OQ c #6DB0E5", -"OR c #6DB2E9", -"OS c #70B8F3", -"OT c #72B8F4", -"OU c #71B9F3", -"OV c #72B7F2", -"OW c #6DB4EA", -"OX c #74BBF9", -"OY c #74BCF6", -"OZ c #72BDF7", -"O& c #4A789A", -"P c #001133", -"P0 c #323F48", -"P1 c #767D83", -"P2 c #51585E", -"P3 c #001434", -"P4 c #3E6787", -"P5 c #79BAF2", -"P6 c #3E7FB7", -"P7 c #030D16", -"P8 c #6D7780", -"P9 c #061019", -"Pa c #626C75", -"Pb c #78B9EF", -"Pc c #6DBCF7", -"Pd c #70BAF9", -"Pe c #6FBBF7", -"Pf c #6FB9F8", -"Pg c #6EB8F7", -"Ph c #6DB7F4", -"Pi c #6AB4F1", -"Pj c #6AB0EB", -"Pk c #62A8E3", -"Pl c #64A3D6", -"Pm c #5594C7", -"Pn c #6685C6", -"Po c #7897D8", -"Pp c #8FACE6", -"Pq c #B2CFFF", -"Pr c #D1E9FF", -"Ps c #C3E3FF", -"Pt c #A0C0E9", -"Pu c #7080BC", -"Pv c #4E5E9A", -"Pw c #356289", -"Px c #4F7CA3", -"Py c #538FC1", -"Pz c #5FA0D8", -"PA c #63A4DC", -"PB c #63ACE3", -"PC c #66AFE6", -"PD c #6AB0EE", -"PE c #6BB1EF", -"PF c #6AB5EF", -"PG c #6BB6F0", -"PH c #6CB6F3", -"PI c #6EB8F5", -"PJ c #6EBAF6", -"PK c #6AB6F0", -"PL c #69B5EF", -"PM c #6CB3F1", -"PN c #6CB6F5", -"PO c #6DB7F6", -"PP c #6FB9F6", -"PQ c #70BCF8", -"PR c #72B9F9", -"PS c #71BBF8", -"PT c #71BBFA", -"PU c #6EBAF4", -"PV c #70BAF7", -"PW c #71B8F8", -"PX c #76B8EC", -"PY c #6DAFE3", -"PZ c #656565", -"P& c #6D6D6D", -"Q c #7F7F7F", -"Q0 c #6A6E6F", -"Q1 c #000405", -"Q2 c #6C7A87", -"Q3 c #000A17", -"Q4 c #646665", -"Q5 c #7E807F", -"Q6 c #6E777E", -"Q7 c #0C151C", -"Q8 c #25689D", -"Q9 c #75B8ED", -"Qa c #6FBBF9", -"Qb c #6BBAF5", -"Qc c #6DB9F5", -"Qd c #69B3F0", -"Qe c #65ABE6", -"Qf c #5998CB", -"Qg c #5E7DBE", -"Qh c #7392D3", -"Qi c #86A3DD", -"Qj c #AAC7FF", -"Qk c #C4DCF8", -"Ql c #D0E8FF", -"Qm c #BEDEFF", -"Qn c #9FBFE8", -"Qo c #6F7FBB", -"Qp c #4B5B97", -"Qq c #38658C", -"Qr c #5380A7", -"Qs c #5692C4", -"Qt c #5E9ACC", -"Qu c #61A2DA", -"Qv c #66A7DF", -"Qw c #64ADE4", -"Qx c #67B0E7", -"Qy c #6CB2F0", -"Qz c #6CB7F1", -"QA c #6BB5F2", -"QB c #6CB8F4", -"QC c #6BB7F1", -"QD c #6DB4F2", -"QE c #6FB6F4", -"QF c #70B7F7", -"QG c #6DB9F3", -"QH c #6AB9F4", -"QI c #75B7EB", -"QJ c #1F6195", -"QK c #2F2F2F", -"QL c #303030", -"QM c #505455", -"QN c #15191A", -"QO c #515F6C", -"QP c #757776", -"QQ c #6F7170", -"QR c #111A21", -"QS c #464F56", -"QT c #74B7EC", -"QU c #6DB9F7", -"QV c #6CB8F6", -"QW c #69AFEB", -"QX c #65ABE7", -"QY c #62A5DC", -"QZ c #599CD3", -"Q& c #537AB3", -"R c #668DC6", -"R0 c #829BDE", -"R1 c #A1BAFD", -"R2 c #BED8FB", -"R3 c #CCE6FF", -"R4 c #98B8EB", -"R5 c #6C7FB9", -"R6 c #465993", -"R7 c #396A93", -"R8 c #5485AE", -"R9 c #5F9ED1", -"Ra c #62A4E0", -"Rb c #67A9E5", -"Rc c #64AEEB", -"Rd c #67B1EE", -"Re c #6BB7F5", -"Rf c #6DB8F9", -"Rg c #6BB9F7", -"Rh c #8CB0D0", -"Ri c #001838", -"Rj c #626463", -"Rk c #090A0C", -"Rl c #636466", -"Rm c #64696F", -"Rn c #3F444A", -"Ro c #040605", -"Rp c #080A09", -"Rq c #5E5E5E", -"Rr c #767676", -"Rs c #6A7378", -"Rt c #141D22", -"Ru c #13548A", -"Rv c #6EBAF8", -"Rw c #66ACE8", -"Rx c #63A6DD", -"Ry c #5DA0D7", -"Rz c #5D84BD", -"RA c #5F86BF", -"RB c #7B94D7", -"RC c #95AEF1", -"RD c #B8D2F5", -"RE c #C8E2FF", -"RF c #B0D0FF", -"RG c #90B0E3", -"RH c #687BB5", -"RI c #3C6D96", -"RJ c #5788B1", -"RK c #5A99CC", -"RL c #61A0D3", -"RM c #65A7E3", -"RN c #69ABE7", -"RO c #66B0ED", -"RP c #7498B8", -"RQ c #001232", -"RR c #767877", -"RS c #101113", -"RT c #0F1012", -"RU c #01060C", -"RV c #2D3238", -"RW c #0F1110", -"RX c #636564", -"RY c #6E6E6E", -"RZ c #121B20", -"R& c #3E474C", -"S c #6BB1ED", -"S0 c #67ADE9", -"S1 c #65A8DF", -"S2 c #5EA1D8", -"S3 c #5E92C4", -"S4 c #497DAF", -"S5 c #768DD3", -"S6 c #8AA1E7", -"S7 c #AAC9F7", -"S8 c #BEDDFF", -"S9 c #D6EAFF", -"Sa c #D5EBFF", -"Sb c #D6ECFF", -"Sc c #CDEAFF", -"Sd c #ACC9FF", -"Se c #8BA8E2", -"Sf c #657AAF", -"Sg c #455A8F", -"Sh c #4073A0", -"Si c #588BB8", -"Sj c #599AD0", -"Sk c #62A3D9", -"Sl c #65A9E6", -"Sm c #69ADEA", -"Sn c #69B3F2", -"So c #6AB4F3", -"Sp c #7296B6", -"Sq c #000F2F", -"Sr c #606062", -"Ss c #171719", -"St c #0C0C0E", -"Su c #343436", -"Sv c #6F6F6F", -"Sw c #636C75", -"Sx c #0D161F", -"Sy c #19588E", -"Sz c #68AEEA", -"SA c #66A9E0", -"SB c #60A3DA", -"SC c #6397C9", -"SD c #6D84CA", -"SE c #8198DE", -"SF c #9CBBE9", -"SG c #B7D6FF", -"SH c #D0E4FC", -"SI c #D5E9FF", -"SJ c #D1E7FE", -"SK c #CBE1F8", -"SL c #BCD9FB", -"SM c #B3D0F2", -"SN c #A9C6FF", -"SO c #819ED8", -"SP c #6176AB", -"SQ c #4275A2", -"SR c #5A8DBA", -"SS c #5C9DD3", -"ST c #63A4DA", -"SU c #66AAE7", -"SV c #6AAEEB", -"SW c #6BB5F4", -"SX c #002444", -"SY c #4A4A4A", -"SZ c #777779", -"S& c #78787A", -"T c #050E17", -"T0 c #4E5760", -"T1 c #76B5EB", -"T2 c #68AEEC", -"T3 c #61A3DF", -"T4 c #609CD2", -"T5 c #508CC2", -"T6 c #6080BD", -"T7 c #7090CD", -"T8 c #90AAE7", -"T9 c #AFC9FF", -"Ta c #B7D8FF", -"Tb c #B3D8FF", -"Tc c #AED3FF", -"Td c #A9CDFD", -"Te c #ABC3FF", -"Tf c #7C94D2", -"Tg c #5A74A5", -"Th c #435D8E", -"Ti c #457AAC", -"Tj c #5B90C2", -"Tk c #5E9FD7", -"Tl c #64A5DD", -"Tm c #67ABE8", -"Tn c #6BB2F2", -"To c #6DB4F4", -"Tp c #6FB6F6", -"Tq c #70B4F1", -"Tr c #4589C6", -"Ts c #000419", -"Tt c #23394E", -"Tu c #616264", -"Tv c #727375", -"Tw c #474C52", -"Tx c #04223C", -"Ty c #000721", -"Tz c #3375AF", -"TA c #73B5EF", -"TB c #6DB3F1", -"TC c #69AFED", -"TD c #63A5E1", -"TE c #629ED4", -"TF c #5A96CC", -"TG c #5676B3", -"TH c #6A8AC7", -"TI c #7F99D6", -"TJ c #9FB9F6", -"TK c #ADCEF9", -"TL c #AACFFB", -"TM c #AACEFE", -"TN c #A8CCFC", -"TO c #95ADEB", -"TP c #6D85C3", -"TQ c #516B9C", -"TR c #466091", -"TS c #4C81B3", -"TT c #6095C7", -"TU c #65A6DE", -"TV c #6CB3F3", -"TW c #71B5F2", -"TX c #7C92A7", -"TY c #30465B", -"TZ c #000002", -"T& c #050A10", -"U c #2A2F35", -"U0 c #4E6C86", -"U1 c #90AEC8", -"U2 c #72B4EE", -"U3 c #6FB6F8", -"U4 c #6DB7F8", -"U5 c #6EB5F7", -"U6 c #6CB3F5", -"U7 c #6CB1F2", -"U8 c #6AAFF0", -"U9 c #63A7E4", -"Ua c #60A1D7", -"Ub c #5B9CD2", -"Uc c #588ABF", -"Ud c #5082B7", -"Ue c #788BD0", -"Uf c #8699DE", -"Ug c #9EB8F5", -"Uh c #AECBFF", -"Ui c #A1B8FB", -"Uj c #869DE0", -"Uk c #687AB8", -"Ul c #3F668F", -"Um c #456C95", -"Un c #4E8AC0", -"Uo c #5E9AD0", -"Up c #60A2DE", -"Uq c #68ACEB", -"Ur c #6BAFEE", -"Us c #6FB4F5", -"Ut c #6EB5F5", -"Uu c #70B7F9", -"Uv c #6CB6F7", -"Uw c #6DB4F6", -"Ux c #64A8E5", -"Uy c #5FA0D6", -"Uz c #6294C9", -"UA c #4F81B6", -"UB c #687BC0", -"UC c #7588CD", -"UD c #7A94D1", -"UE c #829CD9", -"UF c #829FD9", -"UG c #7A97D1", -"UH c #768DD0", -"UI c #6B82C5", -"UJ c #6476B4", -"UK c #495B99", -"UL c #3B628B", -"UM c #5279A2", -"UN c #5793C9", -"UO c #639FD5", -"UP c #64A6E2", -"UQ c #66A8E4", -"UR c #69ADEC", -"US c #6EB3F4", -"UT c #70B5F8", -"UU c #6FB4F7", -"UV c #6FB2F6", -"UW c #6DB0F4", -"UX c #6BAFF0", -"UY c #67ABEC", -"UZ c #67A7E5", -"U& c #63A3E1", -"V c #619ED7", -"V0 c #5895CE", -"V1 c #507EB2", -"V2 c #4E7CB0", -"V3 c #6683BB", -"V4 c #6D8AC2", -"V5 c #6E87BF", -"V6 c #6D86BE", -"V7 c #5F7EAD", -"V8 c #496897", -"V9 c #365F8B", -"Va c #3F6894", -"Vb c #467DB3", -"Vc c #578EC4", -"Vd c #5E9CD9", -"Ve c #65A3E0", -"Vf c #66A7E7", -"Vg c #69AAEA", -"Vh c #6DB1F2", -"Vi c #6DB2F5", -"Vj c #71B4F8", -"Vk c #71B5F6", -"Vl c #70B5F6", -"Vm c #70B5FA", -"Vn c #6EB3F6", -"Vo c #6EB1F5", -"Vp c #69ADEE", -"Vq c #69A9E7", -"Vr c #66A6E4", -"Vs c #66A3DC", -"Vt c #6593C7", -"Vu c #5583B7", -"Vv c #4D6AA2", -"Vw c #415E96", -"Vx c #405991", -"Vy c #3E5D8C", -"Vz c #486796", -"VA c #4C75A1", -"VB c #5B84B0", -"VC c #5D94CA", -"VD c #649BD1", -"VE c #64A2DF", -"VF c #68A6E3", -"VG c #68A9E9", -"VH c #6BACEC", -"VI c #70B3F7", -"VJ c #70B4F5", -"VK c #6FB4F9", -"VL c #70B2E6", -"VM c #6EB0E4", -"VN c #6EADE2", -"VO c #6AAADA", -"VP c #67A7D7", -"VQ c #65A2D1", -"VR c #619ECD", -"VS c #5C95C2", -"VT c #548DBA", -"VU c #5287B3", -"VV c #5288B4", -"VW c #578DB9", -"VX c #5D97C5", -"VY c #639DCB", -"VZ c #64A2D1", -"V& c #68A6D5", -"W c #69A7DA", -"W0 c #6CAADD", -"W1 c #71B4E9", -"W2 c #72B5EC", -"W3 c #627ED4", -"W4 c #627ED5", -"W5 c #617ED5", -"W6 c #637ED3", -"W7 c #647ED2", -"W8 c #657ED1", -"W9 c #667ED0", -"Wa c #687FCE", -"Wb c #687FCD", -"Wc c #697FCC", -"Wd c #6B7FCA", -"We c #6D80C9", -"Wf c #6E80C8", -"Wg c #6E80C7", -"Wh c #7180C4", -"Wi c #7280C3", -"Wj c #7481C1", -"Wk c #7681BF", -"Wl c #7781BD", -"Wm c #7A81BB", -"Wn c #7B82BA", -"Wo c #7D82B8", -"Wp c #7E82B6", -"Wq c #8182B3", -"Wr c #8283B2", -"Ws c #8483B0", -"Wt c #8683AE", -"Wu c #8983AB", -"Wv c #8B84A9", -"Ww c #8D84A6", -"Wx c #8E85A4", -"Wy c #9185A2", -"Wz c #9385A0", -"WA c #95859D", -"WB c #97869B", -"WC c #998699", -"WD c #9B8697", -"WE c #9D8794", -"WF c #A18790", -"WG c #A2888F", -"WH c #A3888D", -"WI c #A6888B", -"WJ c #A88889", -"WK c #AA8987", -"WL c #AC8984", -"WM c #AE8981", -"WN c #B18A7F", -"WO c #B38A7D", -"WP c #B58A7B", -"WQ c #B88B78", -"WR c #BA8B76", -"WS c #BB8B74", -"WT c #BE8B71", -"WU c #C08C6F", -"WV c #C18C6E", -"WW c #C48D6B", -"WX c #C58D69", -"WY c #C88E67", -"WZ c #CA8E64", -"W& c #CC8E62", -"X c #CE8E60", -"X0 c #CF8E5E", -"X1 c #D18F5C", -"X2 c #D48F59", -"X3 c #D68F57", -"X4 c #D79057", -"X5 c #D89055", -"X6 c #DC9052", -"X7 c #DC9051", -"X8 c #DE914F", -"X9 c #DF914E", -"Xa c #E1914C", -"Xb c #E2924B", -"Xc c #E49248", -"Xd c #E59247", -"Xe c #E79245", -"Xf c #E89245", -"Xg c #EA9342", -"Xh c #EB9342", -"Xi c #EC9341", -"Xj c #ED943F", -"Xk c #EE943E", -"Xl c #EF943D", -"Xm c #F0943D", -"Xn c #F1943B", -"Xo c #F2943B", -"Xp c #F2943A", -"Xq c #F39539", -"Xr c #F49539", -"Xs c #F59539", -"Xt c #F69537", -"Xu c #F69637", -"Xv c #F79637", -"Xw c #F69638", -"Xx c #F69639", -"Xy c #F59639", -"Xz c #F4963A", -"XA c #F4963B", -"XB c #F3953C", -"XC c #F2953C", -"XD c #F2963D", -"XE c #F1963F", -"XF c #EF9641", -"XG c #EE9642", -"XH c #ED9643", -"XI c #EC9645", -"XJ c #EA9647", -"XK c #EA9648", -"XL c #E99649", -"XM c #E8954B", -"XN c #E6954D", -"XO c #E5954E", -"XP c #E3944F", -"XQ c #E29551", -"XR c #E19553", -"XS c #DF9556", -"XT c #DD9558", -"XU c #DB955A", -"XV c #DA955C", -"XW c #D8955E", -"XX c #D69560", -"XY c #D59562", -"XZ c #D49464", -"X& c #D29466", -"Y c #D09468", -"Y0 c #CE946B", -"Y1 c #CC936D", -"Y2 c #CA936F", -"Y3 c #C89371", -"Y4 c #C69374", -"Y5 c #C49377", -"Y6 c #C39379", -"Y7 c #C0937C", -"Y8 c #BE937E", -"Y9 c #BC9281", -"Ya c #BB9282", -"Yb c #B89285", -"Yc c #B79286", -"Yd c #B49289", -"Ye c #B3928C", -"Yf c #B1918F", -"Yg c #AF9191", -"Yh c #AC9194", -"Yi c #AA9196", -"Yj c #A99198", -"Yk c #A7919A", -"Yl c #A5919D", -"Ym c #A290A0", -"Yn c #A190A2", -"Yo c #9F90A4", -"Yp c #9D90A7", -"Yq c #9B90A9", -"Yr c #998FAB", -"Ys c #978FAD", -"Yt c #958FAF", -"Yu c #938FB2", -"Yv c #928FB3", -"Yw c #8F8FB8", -"Yx c #8E8FB8", -"Yy c #8C8EBB", -"Yz c #8A8EBD", -"YA c #888EBF", -"YB c #888EC0", -"YC c #868EC3", -"YD c #838EC6", -"YE c #828EC7", -"YF c #808EC9", -"YG c #7E8DCB", -"YH c #7D8DCD", -"YI c #7C8DCF", -"YJ c #7A8DD0", -"YK c #788DD2", -"YL c #778DD4", -"YM c #768DD5", -"YN c #758CD7", -"YO c #748CD8", -"YP c #738CDA", -"YQ c #718CDC", -"YR c #6F8CDE", -"YS c #6F8CDF", -"YT c #6D8CE0", -"YU c #6B8CE3", -"YV c #6B8CE4", -" 0 0 0 0 0 0 0 0 0 0 0 0 1 0 2 3 4 5 6 7 8 9 a b c d e f g h i j 7 k l 3 m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 n n 1 0 0 n 0 o o 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0", -" p p q q p p q q p p q q p p q q p p q q p p q q p p n 0 3 5 r 8 j s a t u v w x y z A 7 B C 2 1 q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p D q q p D q E F F q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q", -" G G H H G G H H G G H H G G H H G G H H G G H H I J K L M N O P Q R S T U V W X Y Z &0 000102030405 H H0606 H H G G H H G G H H G G H H G G H H G G H H G G H H G G H H G G H H G G H H G G H H G G H H G G H H G G H H G G H H H H H H G G H H G G H H05 G H H G G H H G G H H G G H H G G0707 G G H H G G H H G G H H G G H H G G H H G G H H G G H H G G H H G G H H G G H H G G H H G G H H G G H H G G H H", -"0808090908080909080809090808090908080909080809090a I L L0b0c O0d Q0e0f0g0h0i0j0k0l0m0n0o0p0q030r G0s09090t0t0909080809090808090908080909080809090808090908080909080809090808090908080909080809090808090908080909080809090808090909090909080809090808090908080909080809090s0809090808090908080u0u0808090908080909080809090808090908080909080809090808090908080909080809090808090908080909080809090808090908080909", -"0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0x0y0z0A0B0C0D0E0F0G0H0I0J0K0L0M0N0O0P0Q0R0S0T0U0V0y0x0w0w0v0v0W0W0v0v0w0w0v0v0W0W0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0x0X0X0x0x0v0v0w0x0X0X0v0v0v0v0Y0Y0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w", -"0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z1 0w0w0y0A0B0C0S0E0F101112131415161718191a1b0T1c0z0y0w1 0&0&0Z0Z1d1d0Z0Z0&0&0Z0Z1d1d0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&1e0Z0&0&0Z0Z0&1 0Z0Z0&0&0Z0Z0Z0Z0Z0Z1f1f0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&", -"1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1i1j1k1l1m1n1o1p1q1r1s1t1u1v1w1x1y1z1A1B1C1D1E1o1n1F1l1G1H1I1h1g1g1h1h1g1g1h1h1J1J1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1K1K1g1g1h1h1L1M1N1O1P1P1Q1Q1g1R1h1h1g1g1K1K1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h", -"1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1U1V1I1G1m1W1X1Y1Z1&2 202122232425262728292a1o1n2b1l1G1i1g1V2c1U1S1T1T1S1S1T1T2d2d1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S2e2e1S1S1T1T2f2g2h2i2j2k2l2m1U1S1T1T1S1S2e2e1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T", -"2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2p2q2r1Q2s2t2u2v2w2x2y2z2A2B2C2D2E2F2G2H2I2J2K2L2M2N2O2O2P2Q2R2R2q2p2o2S2T2T2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2p2n2U2V2W2X2Y2Z2&3 303132333435363637372n2n38382n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o", -"39393a3a39393a3a39393a3a39393a3a39393a3a3b2n3c3d2s2t3e3f3g3h3i3j3k3l3m3n3o3p3q3r2J3s2L3t3u2N2s2O2P3v3w3w2q2p2o2S3x3y3a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a3b393a3a3z3A3B3C3D3D3D3E3F3G3H3I3J3K3L3M39393N3O39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a", -"3P3P3Q3Q3P3P3R3R3S3S3Q3Q3P3P3Q3Q3P3P3Q3Q3T3U3V3W3X3Y3Z3&4 404142434445464748494a3Y3Y4b4c4d4e4f4g4h4i3W4j4k4l4m4n3T4o3Q3Q3S3S3Q3Q3P3P3Q3Q3P3P3R3R3S3S3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3R3R3S3S3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3R3R3S3S3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3T3P4p4p4q4r4s4t4u4v4v4v4s4s4v4u4w4x4y4z4A4B4C4C3P3P3Q3Q3P3P3R3R3S3S3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3R3R3S3S3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3R3R3S3S3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3R3R", -"4D4D4E4E4D4D4F4F4G4G4E4E4D4D4E4E4D4D4E3Q3P4o4H3W4I4J4K4L4M4N4O4P444Q464R4S484T4U4V4J4W4X4Y4Y4Z4&5 4f5051524l4m4n3T3P3Q4E534G4E4E4D4D4E4E4D4D4F4F4G4G4E4E4D4D4E4E4D4D4E4E4D4D4F4F4G4G4E4E4D4D4E4E4D4D4E4E4D4D4F4F4G4G4E4E4D4D4E4E4D4D4E4E4D4D4E4E5454555556574s584v4v4v4u4t4t4v4v59594u5a5b5c5d5d4D4D4E4E4D4D4F4F4G4G4E4E4D4D4E4E4D4D4E4E4D4D4F4F4G4G4E4E4D4D4E4E4D4D4E4E4D4D4F4F4G4G4E4E4D4D4E4E4D4D4E4E4D4D4F4F", -"5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5g5e5f5h5i5j5k5l5m5n5o5p5q5r5s5t5u5v5w5x5y5z5A5B5A5A5C5D5E5E5F5G5H5I5J5K5L5M5N5O5j5j5P5h5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5Q5Q5f5f5e5e5f5f5R5e5f5S5T5U4u3D4v4v4v4v4u594v4v4v4v4u5V5W5X5Y5Z5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f", -"5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5&6 5O606162636465666768696a6b6c6d6e6f6f6f6e6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v5O6w5&6x5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h6y6y6z6z5R5R5h5h6x5R5f5h6A6B4u4v4u4u4u4u4u4u4u4u4v4v4u6C6D6E5Z6F5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h", -"4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D6G3R6H6I6J4f6K6L6M6N6O6P6Q6R6S6T6U6V6W6X6Y6Z6&7 70717272737475767778797a7b4I517c4m7d7e7f4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4E4E4E4E7f7g4E7h7i7j4v4v4u4u4u4u4u4u4s4s4v4v7k7l7m5R7h5d4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E", -"3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3T7n7o3V4j7p4Z7q7r7s6N7t7u7v7w7x7y7z7A7B7C7D7E7F7G7H7I7J7K7L7M7N7O7P7Q7R7S7T7U7V517W7X7Y7Z4C3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3Q3Q3Q3Q7&7&3Q3Q8 804v4v4u4u4u4u4u4u4s4s4v4u818283833Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q", -"8484858586868585848485858484858587883b2p898a8b3s8c8d8e8f8g8h8i8j8k8l8m8m8n8o8p8q8r8s8t8u8v8w8x8y8z v8A8B8C8D8E8F8G8H8I8J8K8L8M8M8484858586868585848485858N7n858584848484878485858M8M858M8N8N858584848585848485858686858584848585868685858484858587844C8I313D4u4v4u4u4u4u4u4u4u4u4u4v8O8P8Q8485858R8R858M8487858M8484858M8484858M8R8R858584848585848Q85858487858S84848585848485858585858584848585858585858N8N858M", -"87878M8M8T8T8M8M87888M8M87878U3a888V2p2Q8a3u8W2I8X8Y8Z8&9 909192939495969798999a9b9c9d8u8v8v9e9e9f9g9h9i9j9k9l9m9n8G9o9p9q9r2n3988878M8M8T8T8M8M87878M8M7n7n8U8U8888878787878M8M8M8M8M8M7n7o393988888M8M87878M8M8T8T8M8M87878M8M8T8T8M8M87878M8M88879s9t9u4u4u4v4u4u4u4u4u4u4u4u4u9v9w9x87878M8M9y9y393987878M8M88878M8M87878M399z9z8M8M87878M8M87888M8587888M8M87878M8M87878M8M8M8M8M8M8787858M8M8M8M397n7n8M8M", -"9A9A9B9B9A9A2S2S9A9A9B9B9A9A9C9C2p2q2Q2P9D9E9F9G9H9I9J9K9L9M9N9O9P9Q9R9S9T9U9V9W9X9Y9Z9&a a a0a0a1a2a3a4a5a6a7a8a9aaabacad3vaeaeaf9C9B9B9A9A9B9B9A9A9B9B9Aag9B9B9A9A9B9B9A9A9B9B9A9Aahah9A9A9B9B9Aai9B9Bajaj9B9B9A9Aakak9A9A9B9B9A9A9B9B9A9A9B9Bai9Aalaman4u4u4v4u4u4u4u4u4u4s4s4uaoapaqai9A9B9B9A9A9B9B9A9A9B9Bai9Aar9B9A9A9A9A3b3b9B9B9A9A9B9B9A9A9A9A9A9A9B9C9A9A9B9B9A9A9B9B9B9B9B9B9Aai9B9C9A9A9B9B9A9A2S3a", -"aiai9C9Caiai2o2oaias9C9Caiasatau3v2Pavawaxay9GazaAaBaCaDaEaFaGaHaIaJaKaLaMaNaOaPaQaRaS9&aTaUaVaVaWaXaYa3aZa&b b0b1a9b2b3b4avb5b6ataf9C9C9Aai9C9Caiai9Cafaias9C9C9Aai9B9Caiai9C9Basb7b8b99Aai9C9Caiai9C9Cbaba9C9Caiaibbbbaiai9C9Caiai9C9Caiai9C9Casasalbcbd4u4v4v4u4u4u4u4u4u4s4s4vbebfbgaiaiafafai9A9C9B9Aai9C9Caiai9C9Caiaiaiai2n2p9C9Casai9C9Caiaiaiasaiai9C9Caiai9C9Caiai9C9C9C9C9C9Caiai9C9Caiaiaf9Caiai2o2o", -"bhbhbibibhbhbibibhbhbibibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb&c c0c1ayc2c3c4c5c6c7bjbjbhbhbibjbhbhbibibhbhbjbiafafc8c8c9cacbcccdcecfcgchchcici60602Tcjckbhbibibhbhchchbhbhbibibhbhclclbhbhcmcmcncncocpcq4u4u594v4u4u4u4s4s4u4ucrcscmcmbjbibibictctcucvcwcxcyczcAcBcCc9asasafafbhbhbibibhbhbibibibicmcmcDcEcFcobhbhbibibhbhbibibibjcGcHcIcJcKcLasasbibicMcMclcl", -"ckckbjbjckckbjbjcNckbkbkblbmcOcPcQcRcScTcUcVcWcXcYcZc&c&d d0d1d2d3aMbGbGd4d5d6d7d8d9dadbdcdddedfdgdhbVdidjdkdldmdndodpc1dqdrdsc4dtc6bkbkckckbjbjckckbjbjckckbjbjaududvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdL9EckckbjbjckckdFdFckckbjbjckckdMdMckckdNdNdOdPdQdRdS4u4u594u4u4u4u4s4s4u4udTdUdNdNbkbjbjbjdVdWdXdYdZd&e e0e1e2e3e4e5e6atauckckbjbjckcNbjbkbkbkdNe7e8e9eaebckckbjbjckckbjbjbkecedeeefegeheieje6bjbjekeldMcl", -"ememenenememeoeoepeqerereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLbHbHeMeNeOePeQeReSeTeUeVeWeXeYeZe&f f0f1f1f2f3f4f5f6f7f8f9cTfaevfbfcerfdememeoeoemfeeoeoememfffgfhfifjfkflfmfnfofpfpfqfrfsftfufv6CfwfxfyfzfAeoeoememfBfBememeoeoememeoeoememeoeoememfCfDfmfmfmfEfmfmfFfGfHfHfmfIfJfKfdeofLfMfNfOfPfQfRfnfofofmfEfEfEfEfSfTfUfVc6ememfWfWememfXfYfZf&g g0g1g2g3g4ememememfVfVeoeog5g6g73Efmfmg8g9ga2Reoeoepepeoeo", -"gbgbgcgcgbgberergdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgzbHbHgAgBgCgCgDgEgFgGgHgIgJgKgLgMgNgOf0f1gPf0gQgRgSgSgTgUgVf9gWfagXghgYgZgbgberergbgbererg&h h0h1h2h33E3E3E3Eh4h5h6h6h7h8h9ha3E3E3E3Ehbhchdhderergbgbhehegbgberergbgberergbgbererg&gbhfhghbfEhb3EfEhbhhhhfphifEhjhkhlererhmhnfOhodS3Eh4h5h4h43E3Ehbhb3E3Ehphqhrhsgbgbhthug&gbhvhwhxhyhzhhh4h4hAhBgbgbgbgbhshsererhChD3E3E3E3EhEhFhGhGererhHgderer", -"hIhIhJhJhKhK0Z0ZhLhMhNhNhOhPgWhQhRhShThUhVhWhXhYhZh&i i0i1i2eLi3i4i4i5i6i7i8i9iaibeMicidieifigihbVdif1gPiigPijikiliminioipiq0R1biris0X1eithIhJhJiuhIhJhJiviwixdSdS3EiyiyiziAdSdSdSiBiCiBiDiEiFiGiHiIiJiKiLiMiNiOhIhIhJ0ZhIhIhJhJhIhIhJhJhIhIhJiPiQiR4ziSdSdSiB3EiTiTdSdSiUiViWiXiYiZi&j j0aoj1iTdSiBiKiBiVj2j3j4j5j6j7iKizj8j9jaivivjbjcjdjejfjgjhdSiViViViUjijjithIhJiPhIitjkjljmjniziziB6CjojphIhIhJhJhIhIhJhJ", -"itit0Z0Zjqjr1e0vjsjtjujvjwjxjyjzjAjBjCjDhWjEjFjGjHjIi i0i1jJgzi3jKjLjMjNjOjPjQjRjSjTjUjVifjWjXjYbVdif1gPiiiijZj&k k0k1k2k3k4k51ak6k7k80Xk9it0Z0Zitit0Z0ZhLjskakb9v9vkckckdke9v9viLiLkffwkgkhkikjkkklkmkniLkokpkqitit0Z0Zitit0Z0ZhIit0Z0Zitit0Z0ZiQkriM9v9v9v9v9vksks9viLktkukvkwgZkxkykzfI9vkskA9viLiL5VkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTksiJ9vkuktktktkUkVitit0Z0Zitk9kWkXkYiLkJkdkZkak&l ititl0l0itit0Z0Z", -"l1l1l2l2l3l3l4l5l6l7l8l9lalblcldlelflglhliljlklllmlnloi0lplqgzi3bHlrlsltlulvlwlxlylzlAlBlClDlEbVbVdif1gPlFiilGlGlHlIlJlKlLlMlNlOkOlPlQl5lRl3lSlSlTl1l2l2l1l1lUlViLknknkblWlWiLknfllXlYlZl&m m0m0l1l1m1m2kbkbm3m4lTl1l2m0l1l1l2l2m5m5l2l2l1l1m6m6m7m8m9maknkbktktknknkbknknmbmcmdmemfhjflmgmalWmhmhmhmimjmkmll2l2l1l1mmmnmompmqmrmsmtmumvknknlWlWiLknkbkbkbkbmwmxl1l1l2l2mymzmAmBkbkbmamCmDmEl2l2l1l1l2l2l1l1l2l2", -"l3l3m0l4lRmFmGmHmImJl9mKlbmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm&lqgzi3bHgzn n0n1n2n3n4n5n6n7n8n9nanbbVbVdif1f1lFiilGlGf0ncndlJnenfngnhninjnkmHmFlRnlnll1l3m0m0lRl3nmnnkfkfkfkfnonokfnpkfnqnrnsjshMm0l4lRlRntnukfnvnwnxl3l3m0l4lRl3l4m0nynyl4m0lRl3nznAnBnCnDnEkfkfnonFkfkfkfkfnpbenGnHnInJnpnpnEnDnonononKnLnMnNnNm0l4l3lRnOnPnQnRnSnTnUnVnvnvnpkfnWnoflkfkfnpnpnpnXnYl3l3m0l4eunZn&o npnpo0o1o2o3l4m0l3l3m0m0l3l3m0m0", -"o4o4o5o6o7o8o9oaobocmKodoeofogohoiojokolomonooopoqorosotouovowoxbGeMoyozoAoBoCoCoDoEoFoGoHoIoJoJdidigPoKoLoMfG7k7koNoOoPoQoRoSoToUmKoVoWoXo8oYoZo4o4oYoZo6o5o&p jhjhjhp0jhjhjhp0p1p2oYoZp3o4oYoYp4p4p5p6jhp0p7p8oap9oYoYp9o7oYoYo4o4papao4o4pbjw4zpcp0jhpdpepepejhp0pfpgphpipjpkpl5Vp0p0jhjhp0p0pmpnpoppo4o40808o4o4pqprpsp0ptpupvpwp0p0jhp0p0jhpxjhjhp0p0jhpypzp3o4o4o4pApBpC5Vp0pDpEpFo4p3oZpGp4p4oYoYo4o4oYoY", -"p3p3o6pHoXo9oWoVpIpJpKpLpMpNpOpPpQmSpRpSpTpUpVpWpXpYpZp&q q0q1oxbGeMq2q3q4oB9dq5q6q7q8q8q9q9qaqbdiqcgPoKoLoM7k4s4s4sqdqeoQqfqgqhqiqjqkoVoaoXqloZp3p3oZoZo6pHqmqn5a5ako5a5a5a5a5aqoqpoZoZp3p3oZoZqqqqqrqsjnjnqtquqvo7oZoZo8o7oZqlp3p3papap3qwqxqyqz5ajn5aqAqAqAqA5a5aqBqCqDqEqFqGqH5a5ajnjn5a5aqIqJqKqLqLp3qw0s0sp3p3qMqNqOjnqPqQqRkwjnjn5a5ajn5ako5ajn5ajn5aqSqTp3p3p3qUqVqW5ajniSqXqYqZp3p3oZoZqqqqoZoZp3p3oZoZ", -"q&q&r r0r1r2r3r4r5r6r7r8r9rarbrcrdrerfrgrhrikYrjrkrlrmrnrorprqrreMeMrsoCoC9drtrtrurvrw9&rxryrzrArBrCgPoKiiii4t4s4v4vrDrErFrGrHrIrJrKrLrMrNrOr0r0q&q&r r0q&q&rPrQrRrRrRrRrRrRrRrSrTrUr0r q&rVr0r q&rWrXrYrZrRrRr&s pHr r s0s0s1s1s2s3s4s4q&q&s5s6s7s8rRrRrZrRrRrRrRrZs9sasbscsdserZrRrRrRrRrZrRsfsgshr0r q&rVsisjq&q&skslrmrRsmsnsospsqsrrRrRrRrRrRjnrRrZssstsusvq&q&swsxqOrZs8syszsAr r0q&q&r r0q&q&r r q&q&r r ", -"rVrVsBsBsCsDsEsFsGsHsIsJsKsLsMrcsNsOsPsQrhsRrSsSsTsUsVsWsXsYsZs&eMeNt oCoC9drtrtt0t1t2t3t4t5t6t7t8t9f1oKiiii4t4s4v4vtatbtctdtetftgthtitjtkrNtlsBrVrVr0sBtmrVcctnfIfItofIfIfIfItptqtrr0r0rVtmr0r0rVq&tsttlXlXtotutvtwr0r0txtytztAtBtCtDtErVrVtFtGsysyfIfIlXfIfIfIlXfItHtIsctJtKtLfIfIfIfIfIfItMtNtOscsBsBtmrVsjsjtmrVtPtQtRpDtStTtUtVtWtXfIfItofItofIfIlXtYtYsutZrVrVt&u iSlXsyu0u1u2sBsBrVrVr0r0rVrVr0r0rVrVr0r0", -"u3u3u4u5u5u6u7u8u9uaubucudueufuguhuipciCujukulumunuoupuqurusutuueMeNuvuwuwuxuyuzuAuBuCuDuEuFuGuHuIuJgFuKlGlG584t4s4tuLuMuNuOuPuQuRrJuSuTuUuVuWuWu3u3uXuXuYuZu&v iSiSiSv0v1v1v2v3v4sBuXu4u3u3uXuXv5v6jmv7v0v0v8v9vavbvcvdvevfvgvhvivjvkvlvmvnvoqHvpvqiSiSiSiSiSiSiSvrvsvtvuvvvjv0iSiSiSv0v0v0vwvxuZuZuXuXu3u3uXuXvyrOvzvAvqvBvCvDvEu3vFvGhcv0vqvqvHiSvIvIv0v0qSvJk6vKvLvMvpvpvNvOvPvavQvQvRu3vSuXu3u3uXuXu3u3uXuX", -"vTvTvUu6vVvWvXvYvZv&w w0udw1w2uguhw32&w4w5w6w7w8w9vBwawbwcwd9cuueNeNuwuxuwwegzwfwgwgwhwiwjwkwlwmwnwowpwqwrws584s4t4twtwuwvwwwxwywzwAwBuSwCuUwDwEwFvTvUu5wGwGwHv pCpCpCwIwJwKwLwMwNwNu5vUvTvTu5u5wOwPwQwIwIwIwRwSuWwTwUwVwWwXwIwIpDwYwZw&x vsx0pCx1x2pCpCpCpCpCwIulx3x4x5x6x7x8wIpCpCpCwIpDpCx9xawGxbu5u5vTvEu5u5xcxdxexfqCxgxhxiwFvTxjxkxlpCx1x1pCpCxmxnwIwIxoxpxqxrxsx1x1xtxuxvuWuWxwxwvTvTu5u5vTvTu5u5vTvTu5u5", -"xxxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOw7xPx8xQwQxRxSxTxUxVxWxXgAeMeNxYlqxZx&y y y0y0y1y2y3y4y5y6y7y8y9yaybycydydyeyfygyhyiyjykylymynyoypyqyrysytyuxxyvyvywyxyyyzqHqHqHyAyAqHtGyBxxxxxxxxxxxxyCyCyDyEyAyAyAyAyFyGyHyIyJqIyKyLyMyNyOyPyQyRySyTyAyAqHqHqHqHqHqHyUyVyWnGxyxyyXyYyZqHqHqHqHyAyAqHy&ccz z0yvyvxxxxyCyCz1eez2z3z4z5yvyvz6z7xbz8z9zazbyKqHzcqHyAyAyAkUzdzezfqHqHzgzhziwExbxbzjzjxxxxyvyvxxxxyvyvxxxxyvyv", -"zkzkytysxBzlzmznzozpzqzrzsztzuzvzwzxzyx0xOzy6CuqzzzA4xujzBzCgAgAi2zDt7zEzFzFzGrczHzIzJzKzLzMzNzNzOzPzQzRzSzTzUoAzVzWzXzXzYzZz&y7A ynA0A1yqxCA2A3A4zkxzxzA5A5A6A7A8A8A8yZyZA8A9AazkzkzkyuzkzkwDAbAcAdyZyZA8yZAeAfAgAhyZyZAiAjwSAkAlAmAnAoApAqiCA8A8A8A8A8yZA8ArjfAsAtytxzAuAvyZyZA8A8A8A8yZyZAwAxAyAyytytA4A4AzAAABACo0ADAEAFytytAGAHAIAIAJz9AKqCA8A8A8yZyZyZALAMANAOiCwYAPAQAzwDAIAIARARyuzkxzxzzkzkxzxzzkzkxzxz", -"ASATAUAVAWAXAYAZA&B B0B1B2B3B4B5lkB6B7B8B9BaBbBcBdBeBfBgBhBhBiBjBkBlBmBmBnBnBoBpBqBrBsBtBuBvvvBwBxByBzBABBBCBDBEBFBGBFBHBIBJBKwxBLtDBMBNBOBPBQBRAUBSBSBSATATBTBUBVBVBWBWBXBYBZB&AHAGC C ATATC0C1C2C3C4C5BXcqC6C7C8C9BWBXCaCbCcCdCeCfCgChCiBXBXBWs7CjBXBXBXCkClCmASCnAUBSCoCpC4C3tRBWBWBXBWBXCqCrAzAzBSAUCsu7fNCtCuCvCwCxCyCzBSBSATATBSAUCACBCCCDBWBWBXBXBXBXCECFCGCvCHCICJCsAUBSATATCKCKASATBSBSATATBSBSATATBSBS", -"CnCnAVAWCLAXAYAZCMB CNB1COCPCQCRCSCTCUCVCWCXCYCZC&D uuD0D1D2D3D4D5D5D6D7D8D96&DaDbDcDdDeDfDgDhDiDjDkDlDmDnzQDoDpDqDrDsDtDuDvDwDxDyDzDABNDBBPBQBRAUAUAUAUCnCnDCDDujujpcj7j7upDEDFDGDGDHDHDICnDJDKDLoqDMoqpcfwDNDODPDQj7pcDRDSDTDUDVDWDXDYj7j7j7mbDZujj7j7D&E E0E1CnCnAVAUE2E3DMDMmbj7j7pcj7j7E4E5E6E7AUAUCsE8E9EaEbEcEdEeCzvWAVAUCnCnAVAUEfEfEgEhvhj7j7pcpcpcEifsEbEjEkElCsCsAUAUDICnEmEmCnCnAUAUCnCnAUAUCnCnAUAU", -"EnEnEoEpEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGgzd4lpEHEIEJEKELEMENEOB5EPEQERESETEUEVEWEXEYEZE&F F0F0F1F2F3F4F5F6F7F8F9FaFbFcFdFeFfFgFhFiFjFkFlEpEpFmEnFnEoFoFpFqFrrjkYmCmCkYFsFtFuFvEnFnFnFwFxFyFzkYrSkYkYkYFAFBzlFCFDFEFEulFFFGFHpsFIkYrSmCFEFJFKkYkYFLFMFNFOFnEoEnEnFnFn0FFPFQFJkYrjkYkYrSkYFRFSFTFUFVFWFXFYkZrSFZqDF&xCFmEnFnFnG G G0G1EnEnFoG2zhG3rSkYG4G5psG6kYfxG7uTFmEnFnFnG8G8FnFnEnEnFnFnEnEnFnFnEnEnFnFn", -"FmFmEoEpEqG9GaGbEtEuEvGcGdGeGfGgGhx&GiGjGkGkGlGmEHEHGnGoGpGpGqGrGsGtGuGvGwGxGyGzGAGBGCGDGEGFGGGHGGGHGIGJGKGLGMGNGOGPGQGRGSqfGTGUGVGWGXGYFkGZEqEpFmFmEoEoFoG&ix2&H 2&H0H0H1ixH2H3FmFmEoEoFwH4H5H02&H12&2&kIkHH6H7H8H9HaHaH1H12&H12&2&2&2&H0H0HbHc2&HdHeHfHgHhEpEoHiFmEoEoHjHkHlHc2&2&2&H12&H1HmHmHnHoHpHqHrHsFIHtHuHvzmyqHiFmEoEoHwHxHyHyFmFmFoHzHAHBum2&yVyVHC2&fvFqHDu9HiFmEoEoHEHEEoEoFmFmEoEoFmFmEoEoFmFmEoEo", -"HFHFHGHHHIHJHKHLFiHMHNFgHOHPHQHRHSHTHUHVrzloi i0HWHXxZHYHZH&I I0I1I2I3I4I5I6FeI7I8I9IaIbIcIdIeIeIfIfIdFgIgIhIiIjIkIlIlIkImInIoIpHMIqIrIsItIuIvHHIwIwHGHHIxIyIzIAIBIBIBIAICcsHGHHIwIwHGHGIDtQaoulIEIFIGIHIIIJHGHHtVIKILulwYwYIAIAwYwYIMIMwYulwYINyIIOIPIQIwIwHGHGIwIwHGHGHGIRISITFIulIBIBwYwYululwYwYulwYIUIVIKIWIXEqHGHGIwIwHFHFIwIwHiIYIwIwIZI&J J0J1J2wYulwYrmJ3J4HGHGIwIwHGJ5J6J6HGHGIwIwHGHGIwIwHGHGIwIwHGHG", -"J7J7IvIuJ8J9JaHLJbJcGVFgJdJeJfJgJhJiHVHVrzloi i0HWHXJjJkCQJlJmJnJoJpJqJrJsJtJuJvJwJxEwJyJzJAJBJBJCJDJAJzJEJFGGJGJHJIJJJKJLJMIpJNJcIqIrJaItIuIuIvHIHIIvIvJOJPJQJRJSJRJRJRJTh8IvIvHIHIIvIvJUJVJWJXJYJZJ&K K0K1IvIvsoK2K3K4K5CkJRJSCkkZK6K7fwyJK8kHK9KaKbKbJ8HIIvIvHIHIIvIvIuIvKcKdKeupKfJRkZkZkZkZCkCkD&HtKgKhKiKjG9KkIvIvHIHIJ7J7HIHIGZGZHIHIKlKlKmKmKnKoCkkZKpKqKrKsIvHHHIHIIvIvKtKtIvIvHIHIIvIvHIHIIvIvHIHIIvIv", -"KuKuKvKwKxKyKzKAKBKCKDKEKFKGKHKIKJKKHVryKLKMi i0lplpKNKOKPKQKRKSKTKUKVKWKXKYKZK&L L0L1L2L3L4L5L5L6L7L8L9LaLbLcLdL0L LeLfKELgL2LhLiLjLkKzLlLmLnKvLoLoKvKvLpLqLrLsLtLuLvLwLxLyLnKvKuKuKvKvLzLALBLCLDKxKvKvLmKuKvKvKuKuLELFLGLHLILJLKqGLLtQLMLNLOLPKuKuLQKxKuKuLRLRKuKuKvKvKuKuKxLSLTFNLULVLWLXLYEeLZL&M M0M1M2KvKvKuKuKxKxM3M3KxKxM3M4KvKvKuKuKvKvM5M5M6M7KpKpM8kyKuKuKvKvKuKuKvKvKuKuKvKvKuKuM9M9KuKuKvKvKuKuKvKv", -"KuKuKvKvLQKyKzKAKBMaMbKEMcMdMeMfMgMhHVryKLKLi i0lpMiMjMkMlMmMnMoMpMqMrMsMtMuMvMwMxMyMzLhMAMBMCMCMDMEMFL5MGMHMbMIMJMyMKMLLgMbLhMMLjLkMNKzLmLmKvKvMOLoKvKvMPMQMRMSMTMUMVMWMXMYKvLnKuKuKvKvMZMZLPLPLQLQLnKvKuKuKvKvKuKuM&M&N N0N1N2N3qFN4N5nhnhLPN6LmKuKxKxKuLmLRLRKuKuKvKvLmKuKxKxN7N7N8N9NaNbNcNdNeNfNgNgNhM2LnKvKuKuKxKxM3M3KxKxM3M3KvKvKuKuKvKvM5NiNjNkw8hjNlNmLmKuKvKvKuKuKvKvKuKuKvKvKuKuM9M9KuKuKvKvKuKuKvKv", -"NnNnNnNoNpNpNqNrNsNtNuNvNwNxNyNzNABmHVryNBi NCNCeKgzNDNENFNGNHNINJNKNLNMNNNONPNQNRNSNTNUNVNWNXNYNZN&O O0O1O2NTO3O4O4O5O6O6O7NtO1NWO8NYO9NpNnNnNnNnNnNnNnNnNnNnNnNnNnNnNnNnNnNnNnNnNnOaOaNnNnNnNoNnNnNnNnNpNpNnNpObObObObOcOdNnNnNpNnOcOdNnNoNnNnNnNnNpNnNpNnNnNnNnNnNpNnOeOfNpNnNnNnNnNnNnNoNnNpNnNnNpNnNpNnOdOdNnNnNnNnNnNnmLOgOhOiOjOkOlOmOnOnOoOpbdOqOrOsOtOuOdOdNnNpNnNnNnNnObObNnNnNnNnNnNnNnNnNnNnNnNnNnNn", -"OvOvOvOvOvO8OwOxO2OyNuNvK&OzOAOBOCODOEOFNBi NCNCeKeLOGOHOIOJOKOLOMONOOOPNOLCNQOQORNSNTNUOSNVOTOTOUOUO0OVO2NtNTNTOWO4O6O3O3O7NtO2OSNVNXNYOvOvOvOvOvOvOvOvOvOvOvO8O8OvOvOvOvO8OvOvOvOvOXOXOvNpOvOvOvOvOvOvOvOvOvOvNYO9NYO9OYOYOvO8OvOvOYNZO8OvO8OvOvOvO8OvOvOvOvOvOvOvOvOvOZOZOvOvOvOvO8OvOvO8OvOvOvOvOvOvOvOvOYOYOvOvO8O8O8OvO&P P02gP1P2P3P4P5P6P7P8up3 P9PaPbPbOYOYOvOvOvOvOvOvO9O9OvOvOvOvOvOvOvOvOvOvOvOvOvOv", -"PcPcPdPdPePePfPgPhPiPjPkPlPmPnPoPpPqrdPrNBi i0i0HXHXPsPtPuPvPwPxPyNLPzPAPBPCPDPEPFPGPHPhPIPIPfPfPJPJPgPgPhPHPHPHPKPLPMPMPFPGPNPOPIPPPgPdPePePdPdPJPePfPdPePQPdPdPePJPdPdPePePdPfPQPePRPRPJPePdPdPePePdPdPPPSPTPdPUPUPdPdPVPVPPPVPePePVPVPePePdPfPcPcPRPRPePePdPdPePePdPdPePePdPdPePePWPRPePePdPdPePePdPdPePePdPdPePePRPWPXPYFqPZrnP&vhQ Q0Q1Q2Q3Q4Q5Q6Q7Q8Q9PfPdPePePdPdPePePdPdPePePVPVQaQaPdPdPePePdPdPePePdPd", -"QbQbPgPgQcQcPgPOPHQdPjQePlQfQgQhQiQjQkQli i i0lpHXd4QmQnQoQpQqQrQsQtQuQvQwQxPEQyPGQzQAPhPhPhPOPOQBQBPgPOPhPhPHPHQCQCQDQEQzQzPNPOPhPhPgPgPJQcPgPgQcQcPgPgQcQcPOPgQcQcPOPgQcQcPgPOQcQcQFQFPJQcPgPgQcQcPgPgPIPIPgPgPUQGPfPgPIPIPIPIQcQcPIPIQBQcPgPgQHQbQFQFQcQcPgPgQcQcPgPgPJQcPgPgQcQBQFQFQBQcPgPOQcQcPgPfQcQcPgPgQcQcQFQFQIQJQKpsQLplqOpsQMQNQ3QOQPQQQRQSQTMaPOPgQcQcPgPgQcQcPfPgQcQcPIPIQUQUPgPgQcQcPgPgQcQcPgPg", -"QUQUQUQUQUQUQVQVQAQdQWQXQYQZQ&R R0R1R2R3NBi i0lpeLeKBmR4R5R6R7R8QfR9RaRbRcRdPiQAReReQVQVQUQURfRfQUQUQUQUQVQVReReReRePNPNReQVQVQVQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQURgRgQUQUPJQcQVQVRhRiRjQPRkRlRmRnRoRpRqRrRsRtRuMAQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQU", -"QUQUQUQURvQUQUQVPHPiQWRwRxRyRzRARBRCRDREi i i0lpeLeKRFRGRHR6RIRJRKRLRMRNROQdQAPHQVQUQUQUQUQURfRfQUQUQUQUQUQUQUQUQVQVPOPOQVQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQURgRgQUQUQcQcQVQURPRQRRQPRSRTRURVRWRXRrRYRZR&MAL4QUQUQURvQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQU", -"PgPgPgPgPgPgPgPOPHPiS S0S1S2S3S4S5S6S7S8OFS9SaSbScKKSdSeSfSgShSiSjSkSlSmSnSoPNPOPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPfPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgQUQUPOPgPgPgSpSqRrpsSrSsStSuSvpsSwSxSyMMPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPg", -"PgPgPgPgPfPgPgPgPHQAS SzSASBSCS4SDSESFSGSHSISJSKSLSMSNSOSPSgSQSRSSSTSUSVSoSWPOPOPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgQUQUPfPgPgPgRhSXSYpsSZSZS&SZpsiMT T0MMT1PgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPg", -"POPOPOPOPOPOPOPOPNSWQyT2RbT3T4T5T6T7T8T9TaugTbTcTdTdTeTfTgThTiTjTkTlTmSVTnToPNPOTpTpQVQVPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPNPOTqTrTsTtTuTvdUTwTxTyTzTAPOPNPOPOPNPNPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPO", -"POPOPOPOPOPOPOPOPNSWTBTCRNTDTETFTGTHTITJTKTKTLTLTMTNTOTPTQTRTSTTPzTUTmSVTVToPNPOTpTpQVQVPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOTWTqTXTYRTTZT&U U0U1TAU2POPOPOPOPNPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPO", -"U3U3U3U3U3U3U4U4U5U6U7U8TmU9UaUbUcUdUeUfUgT9UhSdUiUjI1UkUlUmUnUoUpRMUqUrTVToU5U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U4U4U3U3U3U3U3U3U3U3U3U3U3U3U3U3U4U4U3U3U3U3U3U3U3U3U3U3U3U3U3U3U4U4U3U3U3U3U3U3U3U3U3U3U3U3U3U3U4U4U3U3U3U3U3U3U3U3U3U3U3U3U3U3U4U4U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U5U3U3U3U5U3UsU7U3U3U3U3U3U3TpUtU3UuU3U3U3UuU3U3U3U3U3U3U4U4U3U3U3U3U3U3U3U3U3U3U3U3U3U3U4U4", -"U5U5U5U5U5U5UvUvU5UwU7U8SmUxSTUyUzUAUBUCUDUEUFUGUHUIUJUKULUMUNUOUPUQURUrTVToU5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5UvUvU5U5U5U5U5U5U5U5U5U5U5U5U5U5UvUvU5U5U5U5U5U5U5U5U5U5U5U5U5U5UvUvU5U5U5U5U5U5U5U5U5U5U5U5U5U5UvUvU5U5U5U5U5U5U5U5U5U5U5U5U5U5UvUvU5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U3U5U5U5UwUwUwU5USUSUwU5U5UwUwU5UtUtU5U5U5U5U5U5U5U5U5U5U5U5UvUvU5U5U5U5U5U5U5U5U5U5U5U5U5U5UvUv", -"UTUTUTUTUTUTUTUTUTUUUVUWUXUYUZU&V V0V1V2V3V4V5V6V7V8V9VaVbVcVdVeVfVgUXVhViUUUTUTVjVjUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTVkVkVlVlU3U3UTUTVlVlVmVmUTUTVkVkUTUTVlVlUTUTUTUTUTUTVjVjUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUT", -"UUUUUUUUUUUUUUUUUUVnVoUWUXVpVqVrVsV VtVuVvVwVxVxVyVzVAVBVCVDVEVFVGVHUXVhViVnUTUUVIVIUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVJVJUsUsU5U5UUUUUsUsVKVKUUUUVJVJUUUUUsUsUUUUUUUUUUUUVIVIUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU", -"KCKCMGMGMGMGMGMGKCKCMHLaVLVMVNLdVOVPVQVRVSVTIjVUVVVWVXVYVZV&W W0LcLgLaL3W1KCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGW2W2MGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMG", -"W3W4W5W5W4W5W3W6W6W7W8W9WaWbWcWdWeWfWgWhWiWjWkWlWmWnWoWpWqWrWsWtWuWvWwWxWyWzWAWBWCWDWEWFWGWHWIWJWKWLWMWNWOWPWQWRWSWTWUWVWWWXWYWZW&X X0X1X2X3X4X5X6X7X8X9XaXbXcXdXeXfXgXhXiXjXkXlXmXnXoXpXqXrXsXsXtXtXuXtXvXvXvXuXuXuXwXxXyXzXAXBXCXDXEXEXFXGXHXIXJXKXLXMXNXOXPXQXRXSXTXUXVXWXXXYXZX&Y Y0Y1Y2Y3Y4Y5Y6Y7Y8Y9YaYbYcYdYeYfYgYhYiYjYkYlYmYnYoYpYqYrYsYtYuYvYwYxYyYzYAYBYCYDYEYFYGYHYIYJYKYLYMYNYOYPYQYRYRYSYTYTYUYUYV"}; - +/* XPM */ +static const char *AboutBox_WxStaticBitmap1_XPM[]={ +/* AboutBox_WxStaticBitmap1 */ +"200 60 3963 2", +" c None", +" 0 c #98CAFD", +" 1 c #99CBFC", +" 2 c #97C9FC", +" 3 c #96C8F9", +" 4 c #95C7F8", +" 5 c #94C6F7", +" 6 c #93C5F6", +" 7 c #92C2F2", +" 8 c #91C1F1", +" 9 c #91C0EC", +" a c #8DBCE8", +" b c #8BB6E3", +" c c #81ACD9", +" d c #707CA6", +" e c #B1BDE7", +" f c #BCCAEF", +" g c #526085", +" h c #6E98C2", +" i c #8BB5DF", +" j c #90C0F0", +" k c #93C5F8", +" l c #94C6F9", +" m c #97C9FA", +" n c #99CBFE", +" o c #9ACAFB", +" p c #9ACCFD", +" q c #9ACCFF", +" r c #92C4F5", +" s c #8EBDE9", +" t c #8CB7E4", +" u c #79A4D1", +" v c #6F7BA5", +" w c #D7E3FF", +" x c #8E9CC1", +" y c #58668B", +" z c #6B95BF", +" A c #8AB4DE", +" B c #95C5F5", +" C c #95C7FA", +" D c #9BCDFE", +" E c #9BCDFF", +" F c #9CCCFD", +" G c #A0D1FC", +" H c #A1D0FC", +" I c #A0D0FE", +" J c #9FCFFD", +" K c #9FCEFA", +" L c #9ECDF9", +" M c #9CCBF5", +" N c #9BCAF4", +" O c #9AC7F1", +" P c #97C4EE", +" Q c #94BFE9", +" R c #93BEE8", +" S c #91BBE3", +" T c #8BB5DD", +" U c #8EA2D5", +" V c #6F83B6", +" W c #B7BDDF", +" X c #BDC3E5", +" Y c #556B90", +" Z c #61779C", +" & c #779FC2", +"0 c #91B9DC", +"00 c #97C4ED", +"01 c #9AC7F0", +"02 c #9DC9F6", +"03 c #A0CCF9", +"04 c #9ECFFA", +"05 c #9FD0FB", +"06 c #A0D1FA", +"07 c #A1D0FE", +"08 c #A2D3FE", +"09 c #A3D2FE", +"0a c #A1D1FF", +"0b c #9DCCF6", +"0c c #9AC9F3", +"0d c #96C3ED", +"0e c #91BCE6", +"0f c #89B3DB", +"0g c #78A2CA", +"0h c #7488BB", +"0i c #99ADE0", +"0j c #C7CDEF", +"0k c #6D7395", +"0l c #546A8F", +"0m c #748AAF", +"0n c #85ADD0", +"0o c #96BEE1", +"0p c #99C6EF", +"0q c #9BC8F1", +"0r c #A1CDFA", +"0s c #A1D2FD", +"0t c #A2D3FC", +"0u c #A3D2FF", +"0v c #A6D6FC", +"0w c #A8D5FC", +"0x c #A7D4FB", +"0y c #A6D3FA", +"0z c #A5D2F9", +"0A c #A4D0F7", +"0B c #A2CEF5", +"0C c #A0CCF1", +"0D c #9DC9EE", +"0E c #9CC4E8", +"0F c #99C1E5", +"0G c #99BDE1", +"0H c #89ADD1", +"0I c #8094C6", +"0J c #798DBF", +"0K c #9EAAD4", +"0L c #AFBBE5", +"0M c #617598", +"0N c #53678A", +"0O c #6689A7", +"0P c #80A3C1", +"0Q c #8FBADD", +"0R c #99C4E7", +"0S c #9CC8ED", +"0T c #9FCBF0", +"0U c #A2CFF6", +"0V c #A3D0F7", +"0W c #A8D5FE", +"0X c #A5D5FB", +"0Y c #A9D5FC", +"0Z c #A8D8FE", +"0& c #AAD7FE", +"1 c #A9D6FD", +"10 c #85A9CD", +"11 c #7094B8", +"12 c #7F93C5", +"13 c #97ABDD", +"14 c #9DA9D3", +"15 c #64709A", +"16 c #54688B", +"17 c #7185A8", +"18 c #7FA2C0", +"19 c #94B7D5", +"1a c #98C3E6", +"1b c #9DC8EB", +"1c c #A2CEF3", +"1d c #AAD7FF", +"1e c #A7D7FD", +"1f c #ABD7FE", +"1g c #AED9FB", +"1h c #AED9FC", +"1i c #ADD8FA", +"1j c #ACD7FA", +"1k c #ABD6F9", +"1l c #AAD5F7", +"1m c #A7D2F4", +"1n c #A7D0F0", +"1o c #A5CEEE", +"1p c #A2C9E8", +"1q c #9FC6E5", +"1r c #9DBAE2", +"1s c #84A1C9", +"1t c #7586BC", +"1u c #899AD0", +"1v c #95A3D2", +"1w c #8593C2", +"1x c #586D8A", +"1y c #5A6F8C", +"1z c #6B8BA4", +"1A c #82A2BB", +"1B c #91B8D7", +"1C c #9AC1E0", +"1D c #9EC7E7", +"1E c #A1CAEA", +"1F c #A8D3F5", +"1G c #ABD6F8", +"1H c #ACD7F9", +"1I c #ADD8FB", +"1J c #B0D8FB", +"1K c #AED8FE", +"1L c #707D86", +"1M c #3D4A53", +"1N c #798B99", +"1O c #B6C8D6", +"1P c #B8D6EE", +"1Q c #B1D8F9", +"1R c #AFDAFC", +"1S c #B1DCFE", +"1T c #B1DCFF", +"1U c #B0DBFD", +"1V c #AFDAFD", +"1W c #A6CFEF", +"1X c #A3CCEC", +"1Y c #A0C7E6", +"1Z c #96BDDC", +"1& c #86A3CB", +"2 c #83A0C8", +"20 c #8C9DD3", +"21 c #8A9BD1", +"22 c #7280AF", +"23 c #5A6897", +"24 c #647996", +"25 c #7B90AD", +"26 c #89A9C2", +"27 c #9ABAD3", +"28 c #9CC3E2", +"29 c #A1C8E7", +"2a c #A2CBEB", +"2b c #A9D2F2", +"2c c #B0DBFE", +"2d c #B3DBFE", +"2e c #B1DBFF", +"2f c #2D3A43", +"2g c #606D76", +"2h c #3F515F", +"2i c #000F1D", +"2j c #1E3C54", +"2k c #537189", +"2l c #7DA4C5", +"2m c #AED5F6", +"2n c #B6DFFB", +"2o c #B6DFFD", +"2p c #B5DEFA", +"2q c #B4DDF9", +"2r c #B4DBFC", +"2s c #AED5F2", +"2t c #AAD1EE", +"2u c #A8CDE8", +"2v c #A4C9E4", +"2w c #9BB4DD", +"2x c #849DC6", +"2y c #8C9CD8", +"2z c #93A3DF", +"2A c #8497BF", +"2B c #6679A1", +"2C c #5C758B", +"2D c #6F889E", +"2E c #7C9FB5", +"2F c #8FB2C8", +"2G c #9ABED8", +"2H c #A2C6E0", +"2I c #A4C9E3", +"2J c #A7CCE6", +"2K c #A8D0EA", +"2L c #A9D1EB", +"2M c #ABD3ED", +"2N c #ADD5EF", +"2O c #B0D7F4", +"2P c #B0D9F5", +"2Q c #B2DBF7", +"2R c #B3DAF9", +"2S c #B7E0FE", +"2T c #B7DEFB", +"2U c #B6DFFF", +"2V c #B7E0FF", +"2W c #3D4547", +"2X c #A5ADAF", +"2Y c #F8F8F6", +"2Z c #F1F1EF", +"2& c #B8B8B8", +"3 c #797979", +"30 c #3E3E3E", +"31 c #090909", +"32 c #272F32", +"33 c #50585B", +"34 c #788691", +"35 c #A8B6C1", +"36 c #C1DCED", +"37 c #B9DEF9", +"38 c #B7DEFD", +"39 c #B8E1FD", +"3a c #B8E1FF", +"3b c #B7E0FC", +"3c c #B5DCFD", +"3d c #B2D9FA", +"3e c #A6CBE6", +"3f c #9ABFDA", +"3g c #859EC7", +"3h c #8BA4CD", +"3i c #98A8E4", +"3j c #8191CD", +"3k c #60739B", +"3l c #63769E", +"3m c #7891A7", +"3n c #8CA5BB", +"3o c #95B8CE", +"3p c #9EC1D7", +"3q c #A3C7E1", +"3r c #A6CAE4", +"3s c #A9CEE8", +"3t c #AAD2EC", +"3u c #ACD4EE", +"3v c #B1DAF6", +"3w c #B4DBFA", +"3x c #B8DFFC", +"3y c #BAE1FE", +"3z c #464E50", +"3A c #9EA6A8", +"3B c #FDFDFB", +"3C c #FCFCFA", +"3D c #FDFDFD", +"3E c #F9F9F9", +"3F c #C5CDD0", +"3G c #929A9D", +"3H c #56646F", +"3I c #192732", +"3J c #052031", +"3K c #405B6C", +"3L c #779CB7", +"3M c #BCE1FC", +"3N c #B9E0FF", +"3O c #B8DFFE", +"3P c #BCE5FB", +"3Q c #BCE4FD", +"3R c #BBE5FD", +"3S c #BEE4FB", +"3T c #BBE4FA", +"3U c #B9E2F8", +"3V c #B8DEF5", +"3W c #B5DBF2", +"3X c #B1D5EB", +"3Y c #ABCFE5", +"3Z c #A4C0E7", +"3& c #88A4CB", +"4 c #91A4DF", +"40 c #A1B4EF", +"41 c #8391B6", +"42 c #637196", +"43 c #647F90", +"44 c #7D98A9", +"45 c #8FAFC4", +"46 c #9BBBD0", +"47 c #A1C4D8", +"48 c #A6C9DD", +"49 c #A8CBE1", +"4a c #AACDE3", +"4b c #ABD1E6", +"4c c #ADD3E8", +"4d c #AED3E6", +"4e c #B0D5E8", +"4f c #B1D5ED", +"4g c #B2D6EE", +"4h c #B3D7EF", +"4i c #B5D9F1", +"4j c #B6DCF3", +"4k c #B8DEF3", +"4l c #B9DFF4", +"4m c #BBE0FA", +"4n c #BCE1FB", +"4o c #BAE3F9", +"4p c #BEE3FD", +"4q c #4B5356", +"4r c #9DA5A8", +"4s c #FEFFFF", +"4t c #FDFFFE", +"4u c #FFFFFF", +"4v c #FEFEFE", +"4w c #DFDFE1", +"4x c #969698", +"4y c #454545", +"4z c #030303", +"4A c #526875", +"4B c #C8DEEB", +"4C c #BBE3FC", +"4D c #BEE7FD", +"4E c #BEE6FF", +"4F c #BDE7FF", +"4G c #C0E6FD", +"4H c #BAE0F7", +"4I c #B2D6EC", +"4J c #A9CDE3", +"4K c #97B3DA", +"4L c #8CA8CF", +"4M c #AABDF8", +"4N c #899CD7", +"4O c #627095", +"4P c #6A789D", +"4Q c #93AEBF", +"4R c #A1C1D6", +"4S c #A3C6DA", +"4T c #A7CAE0", +"4U c #A9CCE2", +"4V c #A8CCE2", +"4W c #A9CFE4", +"4X c #AAD0E5", +"4Y c #ACD1E4", +"4Z c #AED2EA", +"4& c #ADD1E9", +"5 c #AFD3EB", +"50 c #B3D9F0", +"51 c #B4DAF1", +"52 c #B5DBF0", +"53 c #BFE5FC", +"54 c #BDE6FC", +"55 c #C0E5FF", +"56 c #495154", +"57 c #9EA6A9", +"58 c #FCFEFD", +"59 c #FEFEFF", +"5a c #E7E7E7", +"5b c #182E3B", +"5c c #8197A4", +"5d c #BDE5FE", +"5e c #C2E8FD", +"5f c #C3E7FF", +"5g c #C3E9FE", +"5h c #C2E6FE", +"5i c #C1E5FB", +"5j c #BEE2F8", +"5k c #BCDFF5", +"5l c #B7DAF0", +"5m c #B4D4EB", +"5n c #A6C6DD", +"5o c #90A5DE", +"5p c #A5BAF3", +"5q c #A4B6E4", +"5r c #6577A5", +"5s c #647786", +"5t c #8093A2", +"5u c #8DAABA", +"5v c #9CB9C9", +"5w c #9FBED0", +"5x c #A2C1D3", +"5y c #A5C6D9", +"5z c #A6C7DA", +"5A c #A9CADD", +"5B c #A8C9DC", +"5C c #AAC9DE", +"5D c #ABCADF", +"5E c #AEC7E6", +"5F c #ADC8E6", +"5G c #AEC9E7", +"5H c #ADCCE0", +"5I c #B0CFE3", +"5J c #B2D2E7", +"5K c #B6D6EB", +"5L c #B5DAEC", +"5M c #B8DDEF", +"5N c #B9DDF3", +"5O c #BCE0F6", +"5P c #C1E5FD", +"5Q c #C2E8FB", +"5R c #C1E7FC", +"5S c #C4E8FF", +"5T c #454A4E", +"5U c #A9AEB2", +"5V c #E9E9E9", +"5W c #000D1A", +"5X c #C4DAE7", +"5Y c #C4E6FF", +"5Z c #C3E5FE", +"5& c #C0E4FC", +"6 c #BFE3F9", +"60 c #BADDF3", +"61 c #B5D8EE", +"62 c #B1D1E8", +"63 c #96B6CD", +"64 c #94A9E2", +"65 c #BDD2FF", +"66 c #8092C0", +"67 c #5E709E", +"68 c #728594", +"69 c #8C9FAE", +"6a c #92AFBF", +"6b c #99B6C6", +"6c c #9AB9CB", +"6d c #9CBBCD", +"6e c #9EBFD2", +"6f c #9FC0D3", +"6g c #9DBED1", +"6h c #96B5CA", +"6i c #89A8BD", +"6j c #7891B0", +"6k c #6E87A6", +"6l c #6E89A7", +"6m c #809BB9", +"6n c #94B3C7", +"6o c #A3C2D6", +"6p c #A8C8DD", +"6q c #ADCDE2", +"6r c #AED3E5", +"6s c #B1D6E8", +"6t c #B4D8EE", +"6u c #B7DBF1", +"6v c #BADEF4", +"6w c #BEE2FA", +"6x c #C0E6FB", +"6y c #C1E7FA", +"6z c #C2E6FF", +"6A c #393E42", +"6B c #B6BBBF", +"6C c #8D8D8D", +"6D c #415764", +"6E c #CDE3F0", +"6F c #C2E4FD", +"6G c #BCE6FE", +"6H c #BCE2F9", +"6I c #B9DFF6", +"6J c #B7DBF3", +"6K c #AFCDF3", +"6L c #91AFD5", +"6M c #A9BEEB", +"6N c #BED3FF", +"6O c #687B9C", +"6P c #627596", +"6Q c #7792A5", +"6R c #8AA5B8", +"6S c #90ADBF", +"6T c #93B0C2", +"6U c #96B3C5", +"6V c #98B5C7", +"6W c #98B7CB", +"6X c #97B6CA", +"6Y c #98B0D2", +"6Z c #93ABCD", +"6& c #8A9FD6", +"7 c #768BC2", +"70 c #6E7CBD", +"71 c #6F7DBE", +"72 c #6E7BAF", +"73 c #6D77B2", +"74 c #6B75B0", +"75 c #6D7FAF", +"76 c #8496C6", +"77 c #9BBACF", +"78 c #A4C3D8", +"79 c #A6CBDE", +"7a c #ABD0E3", +"7b c #AED2E8", +"7c c #B7DDF4", +"7d c #BDE2FC", +"7e c #BCE5F9", +"7f c #BDE6FA", +"7g c #BEE7FB", +"7h c #BFE7FF", +"7i c #292D2E", +"7j c #CBCFD0", +"7k c #FDFEFF", +"7l c #2B2C2E", +"7m c #82A8BD", +"7n c #B9E3FB", +"7o c #B8E2FA", +"7p c #B4D8F0", +"7q c #AAC8EE", +"7r c #86A4CA", +"7s c #ABC0ED", +"7t c #677A9B", +"7u c #657899", +"7v c #7994A7", +"7w c #87A2B5", +"7x c #8AA7B9", +"7y c #8CA9BB", +"7z c #8EABBD", +"7A c #8DAABC", +"7B c #88A7BB", +"7C c #87A6BA", +"7D c #8098BA", +"7E c #7189AB", +"7F c #6D82B9", +"7G c #6F84BB", +"7H c #7785C6", +"7I c #8A98D9", +"7J c #ADBAEE", +"7K c #C4D1FF", +"7L c #B6C0FB", +"7M c #838DC8", +"7N c #6779A9", +"7O c #6678A8", +"7P c #7493A8", +"7Q c #91B0C5", +"7R c #9CC1D4", +"7S c #A1C6D9", +"7T c #A6CAE0", +"7U c #ACD0E6", +"7V c #AFD5EC", +"7W c #B7DCF6", +"7X c #B9DEF8", +"7Y c #B9E2F6", +"7Z c #BAE3F7", +"7& c #BBE4F8", +"8 c #111516", +"80 c #E4E8E9", +"81 c #C9CACC", +"82 c #202123", +"83 c #BEE4F9", +"84 c #BAE4FD", +"85 c #BAE3FF", +"86 c #B8E4FD", +"87 c #B9E3FC", +"88 c #B8E2FB", +"89 c #B4DCF6", +"8a c #B1D9F3", +"8b c #AED3ED", +"8c c #A4C6E2", +"8d c #85A7C3", +"8e c #A0B4E9", +"8f c #C1D5FF", +"8g c #8594CB", +"8h c #5D6CA3", +"8i c #6779A1", +"8j c #7385AD", +"8k c #7990AF", +"8l c #8097B6", +"8m c #7D92BD", +"8n c #798BCB", +"8o c #7183C3", +"8p c #7584BD", +"8q c #7D8CC5", +"8r c #909DBD", +"8s c #B0BDDD", +"8t c #D4E0EE", +"8u c #E9F5FF", +"8v c #EDF8FE", +"8w c #EEF9FF", +"8x c #EFF7FF", +"8y c #D9E1EC", +"8z c #939FC9", +"8A c #6372AB", +"8B c #7483BC", +"8C c #8DACC1", +"8D c #9AB9CE", +"8E c #A0C2DB", +"8F c #A7C9E2", +"8G c #A9CFE6", +"8H c #AED4EB", +"8I c #B1D9F2", +"8J c #B3DBF4", +"8K c #B5DFF8", +"8L c #B7E1FA", +"8M c #B9E2FE", +"8N c #BAE4FC", +"8O c #5B6972", +"8P c #64727B", +"8Q c #BBE5FE", +"8R c #BBE3FD", +"8S c #BBE4FF", +"8T c #B7E3FC", +"8U c #B9E2FF", +"8V c #B6E0F9", +"8W c #AACFE9", +"8X c #9FC1DD", +"8Y c #87A9C5", +"8Z c #8195CA", +"8& c #A7BBF0", +"9 c #8998CF", +"90 c #7382B9", +"91 c #6E80A8", +"92 c #63759D", +"93 c #5F7695", +"94 c #7188A7", +"95 c #758AB5", +"96 c #7388B3", +"97 c #788ACA", +"98 c #8092D2", +"99 c #99A8E1", +"9a c #C2D1FF", +"9b c #DEEBFF", +"9c c #E4F1FF", +"9d c #E7F3FF", +"9e c #F0F8FF", +"9f c #DDE9FF", +"9g c #A2AED8", +"9h c #6C7BB4", +"9i c #6170A9", +"9j c #68879C", +"9k c #88A7BC", +"9l c #95B7D0", +"9m c #9EC0D9", +"9n c #A3C9E0", +"9o c #ACD4ED", +"9p c #B0D8F1", +"9q c #B2DCF5", +"9r c #B4DEF7", +"9s c #BAE2FB", +"9t c #90B8D1", +"9u c #2D2D2D", +"9v c #F4F4F4", +"9w c #03111A", +"9x c #B1BFC8", +"9y c #B9E1FB", +"9z c #BAE2FC", +"9A c #B5E1FC", +"9B c #B5E1FE", +"9C c #B4E0FD", +"9D c #ADD4F1", +"9E c #A9D0ED", +"9F c #A5CAE7", +"9G c #9FC4E1", +"9H c #9ABCD8", +"9I c #88AAC6", +"9J c #7A8DD1", +"9K c #7B8ED2", +"9L c #8B9FD2", +"9M c #9DB1E4", +"9N c #97A9E7", +"9O c #7B8DCB", +"9P c #6B7CC1", +"9Q c #7384C9", +"9R c #8191C4", +"9S c #8B9BCE", +"9T c #ABBBD5", +"9U c #CADAF4", +"9V c #DBEAFF", +"9W c #DAE9FF", +"9X c #D2E0FF", +"9Y c #D4E2FF", +"9Z c #E3F0FF", +"9& c #E8F5FF", +"a c #EDF7FF", +"a0 c #EDFAFF", +"a1 c #F0F9FE", +"a2 c #EDF6FB", +"a3 c #A6AFD6", +"a4 c #717AA1", +"a5 c #5E6EA2", +"a6 c #6B7BAF", +"a7 c #85A5BC", +"a8 c #98B8CF", +"a9 c #9DC3D8", +"aa c #A4CADF", +"ab c #A8CFEC", +"ac c #ACD3F0", +"ad c #AFD8F4", +"ae c #B4DDFB", +"af c #B3DFFC", +"ag c #B6E2FD", +"ah c #BADFF9", +"ai c #B4E0FB", +"aj c #B5E1FA", +"ak c #B5E0FF", +"al c #BEDEF5", +"am c #7090A7", +"an c #595959", +"ao c #9E9E9E", +"ap c #28485D", +"aq c #BEDEF3", +"ar c #B6E2FF", +"as c #B3DFFA", +"at c #B2DEFB", +"au c #B1DDFA", +"av c #AED7F3", +"aw c #AAD3EF", +"ax c #A7CEEB", +"ay c #A2C9E6", +"az c #98BDDA", +"aA c #93B5D1", +"aB c #84A6C2", +"aC c #8194D8", +"aD c #95A8EC", +"aE c #B4C8FB", +"aF c #ABBFF2", +"aG c #90A2E0", +"aH c #7C8ECC", +"aI c #7F90D5", +"aJ c #91A2E7", +"aK c #B0C0F3", +"aL c #CDDDFF", +"aM c #DEEEFF", +"aN c #D8E8FF", +"aO c #CDDCFD", +"aP c #BECDEE", +"aQ c #AFBDEC", +"aR c #A9B7E6", +"aS c #CFDCED", +"aT c #ECF6FF", +"aU c #E7F1FA", +"aV c #E2EFF7", +"aW c #ECF5FA", +"aX c #F1FAFF", +"aY c #EAF3FF", +"aZ c #6777AB", +"a& c #5D6DA1", +"b c #608097", +"b0 c #82A2B9", +"b1 c #92B8CD", +"b2 c #A1C8E5", +"b3 c #A6CDEA", +"b4 c #A9D2EE", +"b5 c #AFD8F6", +"b6 c #B0D9F7", +"b7 c #ABD7F2", +"b8 c #83A8C2", +"b9 c #90B5CF", +"ba c #B4E0F9", +"bb c #B4DFFF", +"bc c #45657C", +"bd c #8A8A8A", +"be c #3A3A3A", +"bf c #7595AA", +"bg c #BDDDF2", +"bh c #B1E0FE", +"bi c #B2DFFE", +"bj c #B1DEFD", +"bk c #B0DDFC", +"bl c #AFDCFB", +"bm c #ADDAF9", +"bn c #ABD8F5", +"bo c #AAD7F4", +"bp c #A8D4F1", +"bq c #A3CFEC", +"br c #A2CAE4", +"bs c #9CC4DE", +"bt c #99BED8", +"bu c #91B6D0", +"bv c #8FACD8", +"bw c #7F9CC8", +"bx c #8599DE", +"by c #9BAFF4", +"bz c #8FA2E4", +"bA c #7E91D3", +"bB c #8698C8", +"bC c #99ABDB", +"bD c #B4C4DD", +"bE c #D0E0F9", +"bF c #DEEEFD", +"bG c #DFEFFE", +"bH c #DEEFFF", +"bI c #C5D6F4", +"bJ c #B5B6FF", +"bK c #9E9FFF", +"bL c #7F83FE", +"bM c #7C80FB", +"bN c #BFCDE8", +"bO c #E2F0FF", +"bP c #C9F5E6", +"bQ c #BBE7D8", +"bR c #98EAA8", +"bS c #8DDF9D", +"bT c #C4E4D9", +"bU c #E0FFF5", +"bV c #F3FBFE", +"bW c #EFF7FA", +"bX c #A5ADD1", +"bY c #6E769A", +"bZ c #5D6B9C", +"b& c #6B79AA", +"c c #83A7BD", +"c0 c #96BAD0", +"c1 c #9BC2DF", +"c2 c #A3CFEA", +"c3 c #A6D2ED", +"c4 c #AAD6F3", +"c5 c #ACD8F5", +"c6 c #AEDBFC", +"c7 c #B0DDFE", +"c8 c #BDDCF1", +"c9 c #C4DAE8", +"ca c #9CB2C0", +"cb c #7A848E", +"cc c #4F5963", +"cd c #25292A", +"ce c #080C0D", +"cf c #343537", +"cg c #000103", +"ch c #B2DFFF", +"ci c #B9DDF7", +"cj c #B6DDFA", +"ck c #B0DFFD", +"cl c #B2DFFC", +"cm c #B3DEFE", +"cn c #B1E0FC", +"co c #C1DBEC", +"cp c #1C3647", +"cq c #C2C2C2", +"cr c #CBD0D6", +"cs c #000208", +"ct c #B9DDF5", +"cu c #C5DBE9", +"cv c #9AB0BE", +"cw c #6F7A80", +"cx c #49545A", +"cy c #383D41", +"cz c #34393D", +"cA c #3E474E", +"cB c #5B646B", +"cC c #889EAC", +"cD c #C0DBEE", +"cE c #BFDAED", +"cF c #86A0B1", +"cG c #A1B3C1", +"cH c #9FB1BF", +"cI c #BBD2E0", +"cJ c #C3DAE8", +"cK c #C0DCEA", +"cL c #C1DDEB", +"cM c #B1DFFF", +"cN c #AFDEFC", +"cO c #ACD9F8", +"cP c #AAD7F6", +"cQ c #A7D4F1", +"cR c #A5D2EF", +"cS c #A1CDEA", +"cT c #9ECAE7", +"cU c #9BC3DD", +"cV c #95BDD7", +"cW c #92B7D1", +"cX c #8BB0CA", +"cY c #7794C0", +"cZ c #7D9AC6", +"c& c #7E92D7", +"d c #8497D9", +"d0 c #9AADEF", +"d1 c #B5C7F7", +"d2 c #CEE0FF", +"d3 c #DDEDFF", +"d4 c #DBECFF", +"d5 c #C1D2F0", +"d6 c #898AF4", +"d7 c #7273DD", +"d8 c #696DE8", +"d9 c #9498FF", +"da c #D7E5FF", +"db c #D9E7FF", +"dc c #B1DDCE", +"dd c #9FCBBC", +"de c #73C583", +"df c #59AB69", +"dg c #A7C7BC", +"dh c #DDFDF2", +"di c #F4FCFF", +"dj c #E8F0FF", +"dk c #A6AED2", +"dl c #6270A1", +"dm c #5A6899", +"dn c #5E8298", +"do c #89ADC3", +"dp c #93BAD7", +"dq c #9ECAE5", +"dr c #A2CEE9", +"ds c #A7D3F0", +"dt c #ACD9FA", +"du c #8CB8D5", +"dv c #58778C", +"dw c #214055", +"dx c #000816", +"dy c #1F3543", +"dz c #5C6670", +"dA c #929CA6", +"dB c #CED2D3", +"dC c #F8FCFD", +"dD c #B8B9BB", +"dE c #333436", +"dF c #B1DEFF", +"dG c #A6D3F4", +"dH c #7A9EB8", +"dI c #557993", +"dJ c #44677D", +"dK c #4A6D83", +"dL c #678EAB", +"dM c #B1DEFB", +"dN c #B2DDFD", +"dO c #AFDEFA", +"dP c #B0DFFB", +"dQ c #B5CFE0", +"dR c #000F20", +"dS c #F8F8F8", +"dT c #5D6268", +"dU c #666B71", +"dV c #84A8C0", +"dW c #3F637B", +"dX c #091F2D", +"dY c #1C3240", +"dZ c #667177", +"d& c #98A3A9", +"e c #B8BDC1", +"e0 c #BBC0C4", +"e1 c #AAB3BA", +"e2 c #7E878E", +"e3 c #263C4A", +"e4 c #192F3D", +"e5 c #7AA6C1", +"e6 c #B2DEF9", +"e7 c #7FAACA", +"e8 c #425D70", +"e9 c #000A1D", +"ea c #062031", +"eb c #5A7485", +"ec c #90BDDC", +"ed c #000B19", +"ee c #0C1E2C", +"ef c #001422", +"eg c #000917", +"eh c #001220", +"ei c #031F2D", +"ej c #719DB8", +"ek c #B0DEFF", +"el c #AFDDFE", +"em c #AEDCFD", +"en c #AEDCFF", +"eo c #AEDCFE", +"ep c #ACDDFD", +"eq c #ABDCFC", +"er c #ACDAFC", +"es c #AAD8F9", +"et c #A8D6F7", +"eu c #A8D5F6", +"ev c #A5D2F3", +"ew c #A2CFEE", +"ex c #9FCCEB", +"ey c #9FC8E6", +"ez c #99C2E0", +"eA c #96BBD8", +"eB c #90B5D2", +"eC c #839ECB", +"eD c #6984B1", +"eE c #798ED1", +"eF c #7C91D4", +"eG c #8698CA", +"eH c #9EB0E2", +"eI c #B9CAE4", +"eJ c #CFE0FA", +"eK c #DAEBFD", +"eL c #DBECFE", +"eM c #E0F0FF", +"eN c #E1F1FF", +"eO c #E2EEFF", +"eP c #D7E3F9", +"eQ c #AFB6ED", +"eR c #9EA5DC", +"eS c #B6BFDC", +"eT c #D7E0FD", +"eU c #E3F6FD", +"eV c #CEE1E8", +"eW c #88DA92", +"eX c #69BB73", +"eY c #43A945", +"eZ c #44AA46", +"e& c #BCD4C7", +"f c #E7FFF2", +"f0 c #F6FBFF", +"f1 c #F7FCFF", +"f2 c #E9EEF2", +"f3 c #9AA1CD", +"f4 c #646B97", +"f5 c #546590", +"f6 c #7182AD", +"f7 c #8AAFCA", +"f8 c #94B9D4", +"f9 c #97C3E0", +"fa c #A1CEEF", +"fb c #A7D5F6", +"fc c #A9D7F8", +"fd c #ADDBFD", +"fe c #ADDBFC", +"ff c #C3D6E5", +"fg c #6F8291", +"fh c #2A2E31", +"fi c #1D2124", +"fj c #707070", +"fk c #B6B6B6", +"fl c #F0F0F0", +"fm c #FCFCFC", +"fn c #FBFDFC", +"fo c #FAFCFB", +"fp c #FBFBFD", +"fq c #72797F", +"fr c #5E656B", +"fs c #3D4144", +"ft c #060A0D", +"fu c #474747", +"fv c #747474", +"fw c #858585", +"fx c #535353", +"fy c #050505", +"fz c #59707E", +"fA c #C0D7E5", +"fB c #AFDBFE", +"fC c #85939C", +"fD c #3A4851", +"fE c #FBFBFB", +"fF c #FBFCFE", +"fG c #FCFDFF", +"fH c #FCFCFE", +"fI c #E1E1E1", +"fJ c #000C1E", +"fK c #AAC7D9", +"fL c #B6DAF4", +"fM c #B5D9F3", +"fN c #848E98", +"fO c #2B353F", +"fP c #252525", +"fQ c #868686", +"fR c #DADCDB", +"fS c #AFAFAF", +"fT c #071017", +"fU c #868F96", +"fV c #AFDCFD", +"fW c #ACDDFE", +"fX c #B3DAF7", +"fY c #B4DBF8", +"fZ c #B1C3CF", +"f& c #647682", +"g c #262729", +"g0 c #2A2B2D", +"g1 c #898B8A", +"g2 c #E4E6E5", +"g3 c #7A848D", +"g4 c #5B656E", +"g5 c #C3D6E4", +"g6 c #263947", +"g7 c #919191", +"g8 c #EBEFF2", +"g9 c #262A2D", +"ga c #5C83A2", +"gb c #ACDAFB", +"gc c #ACDAFE", +"gd c #A9DAFA", +"ge c #A8D9F9", +"gf c #A8D6F8", +"gg c #A7D5F7", +"gh c #A6D4F5", +"gi c #A3D1F2", +"gj c #A2CFF0", +"gk c #9FCCED", +"gl c #9BC8E7", +"gm c #97C4E3", +"gn c #96BFDD", +"go c #90B9D7", +"gp c #89AECB", +"gq c #6D92AF", +"gr c #7691BE", +"gs c #7B96C3", +"gt c #7E93D6", +"gu c #94A9EC", +"gv c #B7C9FB", +"gw c #CADCFF", +"gx c #D7E8FF", +"gy c #D9EAFF", +"gz c #DCEDFF", +"gA c #DFEFFF", +"gB c #D9E9F9", +"gC c #D6E2F8", +"gD c #DBE2FF", +"gE c #DDE4FF", +"gF c #EBF4FF", +"gG c #E9F2FF", +"gH c #E4F7FE", +"gI c #D8EBF2", +"gJ c #95E79F", +"gK c #74C67E", +"gL c #67CD69", +"gM c #87ED89", +"gN c #E0F8EB", +"gO c #EBFFF6", +"gP c #F8FDFF", +"gQ c #D7DEFF", +"gR c #8990BC", +"gS c #586994", +"gT c #7196B1", +"gU c #8CB1CC", +"gV c #91BDDA", +"gW c #9CC9EA", +"gX c #A4D2F3", +"gY c #A9D7F9", +"gZ c #AAD8FA", +"g& c #ABD9FA", +"h c #A1CFF0", +"h0 c #132635", +"h1 c #3B4E5D", +"h2 c #B9BDC0", +"h3 c #F6FAFD", +"h4 c #F8FAF9", +"h5 c #F9FBFA", +"h6 c #F9F9FB", +"h7 c #343B41", +"h8 c #3B4248", +"h9 c #A3A7AA", +"ha c #EEF2F5", +"hb c #FAFAFA", +"hc c #DBDBDB", +"hd c #324957", +"he c #ADD9FC", +"hf c #4F5D66", +"hg c #829099", +"hh c #F9FAFC", +"hi c #FAFAFC", +"hj c #6C6C6C", +"hk c #436072", +"hl c #BAD7E9", +"hm c #84A8C2", +"hn c #1B3F59", +"ho c #A8B2BC", +"hp c #BBC4CB", +"hq c #000910", +"hr c #8CB9DA", +"hs c #ADDAFB", +"ht c #AADBFC", +"hu c #A9DAFB", +"hv c #8CB3D0", +"hw c #5E85A2", +"hx c #00111D", +"hy c #576975", +"hz c #C4C5C7", +"hA c #828C95", +"hB c #545E67", +"hC c #536674", +"hD c #415462", +"hE c #606467", +"hF c #44484B", +"hG c #B1D8F7", +"hH c #AADBFB", +"hI c #A8DAFD", +"hJ c #A9D9FF", +"hK c #A8DAFF", +"hL c #A7D7FB", +"hM c #A5D5F9", +"hN c #A4D2F6", +"hO c #A2D0F2", +"hP c #9FCDEF", +"hQ c #99C6E7", +"hR c #98C1DF", +"hS c #93BCDA", +"hT c #90AFDD", +"hU c #7B9AC8", +"hV c #788DCE", +"hW c #7F94D5", +"hX c #8295CD", +"hY c #96A9E1", +"hZ c #B2C7E6", +"h& c #C5DAF9", +"i c #D7E9FF", +"i0 c #D8EAFF", +"i1 c #DBEBFB", +"i2 c #DDEDFD", +"i3 c #DDEEFF", +"i4 c #DDF0FF", +"i5 c #F2DAD6", +"i6 c #E9D1CD", +"i7 c #FFB781", +"i8 c #FFAA74", +"i9 c #D9AB94", +"ia c #FFE1CA", +"ib c #E5F5FF", +"ic c #E5E8DD", +"id c #E2E5DA", +"ie c #D5E5D8", +"if c #D4E4D7", +"ig c #DCEAEA", +"ih c #EAF8F8", +"ii c #FAFFFF", +"ij c #F7FAFF", +"ik c #CCCFD8", +"il c #727CAF", +"im c #586295", +"in c #5C7496", +"io c #839BBD", +"ip c #8BB4D2", +"iq c #94BDDB", +"ir c #A3CFF2", +"is c #A5D1F4", +"it c #A7D9FC", +"iu c #A9DBFE", +"iv c #A9D9FD", +"iw c #8FBFE3", +"ix c #1A1A1A", +"iy c #F7F8FA", +"iz c #F6F8F7", +"iA c #F7F9F8", +"iB c #F7F7F7", +"iC c #CDCDCD", +"iD c #E1E6E9", +"iE c #84898C", +"iF c #304352", +"iG c #112433", +"iH c #26353C", +"iI c #85949B", +"iJ c #F5F5F5", +"iK c #F6F6F6", +"iL c #F3F3F3", +"iM c #545454", +"iN c #3B5669", +"iO c #BAD5E8", +"iP c #AADAFF", +"iQ c #ACD7F7", +"iR c #A6D1F1", +"iS c #DDDDDD", +"iT c #F9F7F8", +"iU c #F8F8FA", +"iV c #F7F7F9", +"iW c #D8DDE1", +"iX c #03080C", +"iY c #91BFE1", +"iZ c #ABD9FB", +"i& c #BED3E4", +"j c #526778", +"j0 c #171717", +"j1 c #F7F5F6", +"j2 c #E6E6E8", +"j3 c #8D97A0", +"j4 c #505A63", +"j5 c #32434D", +"j6 c #54656F", +"j7 c #C4C4C4", +"j8 c #838584", +"j9 c #304C61", +"ja c #B8D4E9", +"jb c #B8D7EC", +"jc c #B7D6EB", +"jd c #828F97", +"je c #334048", +"jf c #1B191A", +"jg c #8A8889", +"jh c #EBEBEB", +"ji c #899299", +"jj c #4E575E", +"jk c #B7D5ED", +"jl c #7391A9", +"jm c #202020", +"jn c #E6E6E6", +"jo c #0A2D49", +"jp c #AACDE9", +"jq c #A7D9FE", +"jr c #A6D8FD", +"js c #A4D4F8", +"jt c #A2D2F6", +"ju c #A3D1F5", +"jv c #9FCDF1", +"jw c #9DCBED", +"jx c #98C6E8", +"jy c #95C2E3", +"jz c #90BDDE", +"jA c #8DB6D4", +"jB c #78A1BF", +"jC c #7897C5", +"jD c #7D9CCA", +"jE c #8EA3E4", +"jF c #ADC0F8", +"jG c #C2D5FF", +"jH c #D1E6FF", +"jI c #D4E9FF", +"jJ c #DCECFC", +"jK c #DCEFFF", +"jL c #D7EAFB", +"jM c #E2CAC6", +"jN c #D0B8B4", +"jO c #ED9660", +"jP c #D8814B", +"jQ c #B4866F", +"jR c #FFE4CD", +"jS c #DAEAF9", +"jT c #DBEBFA", +"jU c #E9ECE1", +"jV c #DFE2D7", +"jW c #E2F2E5", +"jX c #EDFBFB", +"jY c #EEFCFC", +"jZ c #FBFEFF", +"j& c #F1F4FD", +"k c #ABB5E8", +"k0 c #606A9D", +"k1 c #50688A", +"k2 c #677FA1", +"k3 c #80A9C7", +"k4 c #8CB5D3", +"k5 c #93BEE1", +"k6 c #9FCBEE", +"k7 c #A2CEF1", +"k8 c #A3D3F9", +"k9 c #A6D8FB", +"ka c #020202", +"kb c #F1F1F1", +"kc c #F3F4F6", +"kd c #F3F5F4", +"ke c #F4F6F5", +"kf c #EFEFEF", +"kg c #0A0F12", +"kh c #474C4F", +"ki c #7E91A0", +"kj c #A3B6C5", +"kk c #8A99A0", +"kl c #29383F", +"km c #575757", +"kn c #F2F2F2", +"ko c #E8E8E8", +"kp c #062134", +"kq c #86A1B4", +"kr c #507B9B", +"ks c #F5F3F4", +"kt c #F3F3F5", +"ku c #F4F4F6", +"kv c #595E62", +"kw c #5A5F63", +"kx c #A1CFF1", +"ky c #2C4152", +"kz c #394E5F", +"kA c #F4F2F3", +"kB c #727274", +"kC c #0A0A0C", +"kD c #3D4750", +"kE c #757F88", +"kF c #8899A3", +"kG c #61727C", +"kH c #000000", +"kI c #989898", +"kJ c #F2F4F3", +"kK c #E7E9E8", +"kL c #001227", +"kM c #A3BFD4", +"kN c #A8D8FC", +"kO c #98C8EC", +"kP c #57768B", +"kQ c #00081D", +"kR c #323F47", +"kS c #98A5AD", +"kT c #F0EEEF", +"kU c #9099A0", +"kV c #475057", +"kW c #9BB9D1", +"kX c #000A22", +"kY c #BEBEBE", +"kZ c #AAAAAA", +"k& c #8EB1CD", +"l c #B2D5F1", +"l0 c #A8D8FF", +"l1 c #A3D7FC", +"l2 c #A5D6FE", +"l3 c #A2D6FB", +"l4 c #A3D4FC", +"l5 c #A2D3FB", +"l6 c #A0D2F7", +"l7 c #9FD1F6", +"l8 c #9DCDF3", +"l9 c #99C9EF", +"la c #97C5E7", +"lb c #92C0E2", +"lc c #91B7DC", +"ld c #85ABD0", +"le c #7B94D4", +"lf c #738CCC", +"lg c #8196D7", +"lh c #889DDE", +"li c #A3BAE4", +"lj c #BBD2FC", +"lk c #CEE2FD", +"ll c #D0E4FF", +"lm c #D1E3F9", +"ln c #D3E5FB", +"lo c #D6E8FF", +"lp c #D9EBFF", +"lq c #DBEDFF", +"lr c #D7E8FA", +"ls c #F5AD87", +"lt c #D18963", +"lu c #DE7130", +"lv c #D86B2A", +"lw c #C8BBB5", +"lx c #F8EBE5", +"ly c #EFE5A8", +"lz c #F6ECAF", +"lA c #FFE545", +"lB c #FFD939", +"lC c #E4D793", +"lD c #FBEEAA", +"lE c #F1F9FC", +"lF c #F9FFFF", +"lG c #FBFFFF", +"lH c #E1E6F9", +"lI c #959AAD", +"lJ c #576397", +"lK c #596599", +"lL c #6F92AE", +"lM c #89ACC8", +"lN c #8DB9DC", +"lO c #93BFE2", +"lP c #9CCCF0", +"lQ c #A0D1F9", +"lR c #A1D5FA", +"lS c #A3D7FE", +"lT c #A4D8FD", +"lU c #0E1215", +"lV c #D6DADD", +"lW c #F2F2F4", +"lX c #E0E0E0", +"lY c #243B4D", +"lZ c #283F51", +"l& c #80B0D4", +"m c #A6D6FA", +"m0 c #A4D5FD", +"m1 c #25323B", +"m2 c #86939C", +"m3 c #7B8489", +"m4 c #4A5358", +"m5 c #A2D8FC", +"m6 c #A5D6FF", +"m7 c #BED1DF", +"m8 c #000513", +"m9 c #C5C7C6", +"ma c #F1F3F2", +"mb c #C5C5C5", +"mc c #000821", +"md c #A5C5DE", +"me c #B4C7D5", +"mf c #213442", +"mg c #F0F2F1", +"mh c #F1F1F3", +"mi c #BDC4CA", +"mj c #1C2329", +"mk c #2B5472", +"ml c #8EB7D5", +"mm c #8EA8BF", +"mn c #000F26", +"mo c #E0DEDF", +"mp c #F2F0F1", +"mq c #404D56", +"mr c #7A8790", +"ms c #5E6367", +"mt c #050A0E", +"mu c #5F5F5F", +"mv c #C6C6C6", +"mw c #959EA5", +"mx c #404950", +"my c #A9D6F7", +"mz c #AAD7F8", +"mA c #383C3F", +"mB c #7F8386", +"mC c #BDBFBE", +"mD c #001026", +"mE c #7D99AF", +"mF c #A0D4F9", +"mG c #A1D2FA", +"mH c #9FD0F8", +"mI c #9ED0F5", +"mJ c #9BCDF2", +"mK c #95C5EB", +"mL c #8BB9DB", +"mM c #7CA2C7", +"mN c #749ABF", +"mO c #829BDB", +"mP c #819ADA", +"mQ c #96ABEC", +"mR c #B7CCFF", +"mS c #C3DAFF", +"mT c #B4CBF5", +"mU c #99ADC8", +"mV c #8397B2", +"mW c #788AA0", +"mX c #8597AD", +"mY c #99ABC3", +"mZ c #C5D7EF", +"m& c #D7E9FD", +"n c #FFCEA8", +"n0 c #F6AE88", +"n1 c #FFA362", +"n2 c #FFBF7E", +"n3 c #F7EAE4", +"n4 c #F5E8E2", +"n5 c #EDE3A6", +"n6 c #E5DB9E", +"n7 c #FAD030", +"n8 c #F6CC2C", +"n9 c #EEE19D", +"na c #FFFAB6", +"nb c #F2FAFD", +"nc c #C3C8DB", +"nd c #6C78AC", +"ne c #527591", +"nf c #7B9EBA", +"ng c #86B2D5", +"nh c #8FBBDE", +"ni c #94C4E8", +"nj c #99C9ED", +"nk c #9ECFF7", +"nl c #A2D6FD", +"nm c #222629", +"nn c #BDC1C4", +"no c #EFEFF1", +"np c #EEEEEE", +"nq c #515151", +"nr c #566D7F", +"ns c #B9D0E2", +"nt c #95A2AB", +"nu c #26333C", +"nv c #EDEDED", +"nw c #BEC7CC", +"nx c #161F24", +"ny c #A1D7FB", +"nz c #A3D4FD", +"nA c #A4D5FE", +"nB c #647785", +"nC c #3E515F", +"nD c #EEF0EF", +"nE c #EDEFEE", +"nF c #F0F0F2", +"nG c #5A7A93", +"nH c #B1D1EA", +"nI c #2B3E4C", +"nJ c #5B6E7C", +"nK c #A8A8AA", +"nL c #030A10", +"nM c #757C82", +"nN c #ABD4F2", +"nO c #B5CFE6", +"nP c #2F4960", +"nQ c #9A9899", +"nR c #EFEDEE", +"nS c #6B7881", +"nT c #48555E", +"nU c #3A3F43", +"nV c #DBE0E4", +"nW c #EEEEF0", +"nX c #9BA4AB", +"nY c #3A434A", +"nZ c #426F90", +"n& c #414548", +"o c #E8ECEF", +"o0 c #CDCFCE", +"o1 c #131514", +"o2 c #6B879D", +"o3 c #B5D1E7", +"o4 c #9FD4FC", +"o5 c #9FD4FE", +"o6 c #9ED3FD", +"o7 c #9FD3FB", +"o8 c #9ED2FA", +"o9 c #9CD0F8", +"oa c #9BCFF7", +"ob c #9BCCF4", +"oc c #97C8F0", +"od c #8FBFE5", +"oe c #8EB4E5", +"of c #81A7D8", +"og c #7D91DA", +"oh c #8599E2", +"oi c #8EA5D7", +"oj c #ABC2F4", +"ok c #C5D9F4", +"ol c #AFC3DE", +"om c #8B9096", +"on c #858A90", +"oo c #A8A7AC", +"op c #B7B6BB", +"oq c #C3C5C4", +"or c #A3A5A4", +"os c #8F9092", +"ot c #737476", +"ou c #A3AFBF", +"ov c #D7E3F3", +"ow c #DDECFF", +"ox c #DEEDFF", +"oy c #E3EFFD", +"oz c #E1EDFB", +"oA c #E3EDF7", +"oB c #E7F1FB", +"oC c #E6F2FE", +"oD c #E9EBD6", +"oE c #E0E2CD", +"oF c #E8E0B9", +"oG c #F4ECC5", +"oH c #EFF7F9", +"oI c #F2FAFC", +"oJ c #F3FAFF", +"oK c #F9FEFF", +"oL c #FAFEFD", +"oM c #FBFFFE", +"oN c #F2F3F5", +"oO c #A3A7D4", +"oP c #626693", +"oQ c #51678E", +"oR c #6C82A9", +"oS c #7EA9CB", +"oT c #8BB6D8", +"oU c #90C0E6", +"oV c #98CCF4", +"oW c #9ACEF6", +"oX c #9DD1F9", +"oY c #A0D3FE", +"oZ c #9FD2FD", +"o& c #303B41", +"p c #A0ABB1", +"p0 c #EAEAEA", +"p1 c #A9B2B7", +"p2 c #000308", +"p3 c #9ED3FB", +"p4 c #9FD5FB", +"p5 c #99AEBF", +"p6 c #132839", +"p7 c #E7E5E6", +"p8 c #040203", +"p9 c #A0D4FC", +"pa c #9FD2FF", +"pb c #A5D3F5", +"pc c #C3C3C3", +"pd c #E9EBEA", +"pe c #EAECEB", +"pf c #EBEBED", +"pg c #EAEAEC", +"ph c #87949D", +"pi c #24313A", +"pj c #B3CFE5", +"pk c #476379", +"pl c #484848", +"pm c #A1AAB1", +"pn c #00060D", +"po c #6B9BC3", +"pp c #A3D3FB", +"pq c #AAD1F0", +"pr c #446B8A", +"ps c #777777", +"pt c #76838C", +"pu c #4C5962", +"pv c #090E12", +"pw c #D3D8DC", +"px c #ECECEC", +"py c #A1A8AE", +"pz c #333A40", +"pA c #858F98", +"pB c #101A23", +"pC c #D8D8D8", +"pD c #D6D6D6", +"pE c #0C273C", +"pF c #5B768B", +"pG c #A1D4FF", +"pH c #9DD2FC", +"pI c #98C9F1", +"pJ c #94C5ED", +"pK c #91C1E7", +"pL c #8BBBE1", +"pM c #83A9DA", +"pN c #7DA3D4", +"pO c #879BE4", +"pP c #97ABF4", +"pQ c #BBD2FF", +"pR c #9BAFCA", +"pS c #7B8FAA", +"pT c #B1B6BC", +"pU c #C3C8CE", +"pV c #CCCBD0", +"pW c #CAC9CE", +"pX c #C1C3C2", +"pY c #B9BBBA", +"pZ c #AEAFB1", +"p& c #9C9D9F", +"q c #778393", +"q0 c #A8B4C4", +"q1 c #DCEBFE", +"q2 c #E4F0FE", +"q3 c #E5F1FF", +"q4 c #E8F2FC", +"q5 c #E8F4FF", +"q6 c #F4F6E1", +"q7 c #F6F8E3", +"q8 c #FFF8D1", +"q9 c #F0F8FA", +"qa c #F1F8FE", +"qb c #F2F9FF", +"qc c #F5FDFF", +"qd c #D1D5FF", +"qe c #8084B1", +"qf c #546A91", +"qg c #729DBF", +"qh c #85B0D2", +"qi c #8CBCE2", +"qj c #92C2E8", +"qk c #95C9F1", +"ql c #9ED1FC", +"qm c #3E494F", +"qn c #8C979D", +"qo c #343D42", +"qp c #737C81", +"qq c #9ED4FA", +"qr c #8DA2B3", +"qs c #1F3445", +"qt c #E8E6E7", +"qu c #141213", +"qv c #8BBFE7", +"qw c #9DD2FA", +"qx c #A4D2F4", +"qy c #3E6C8E", +"qz c #585858", +"qA c #E6E8E7", +"qB c #E7E7E9", +"qC c #CECED0", +"qD c #05121B", +"qE c #8D9AA3", +"qF c #809CB2", +"qG c #00192F", +"qH c #D4D4D4", +"qI c #D2D2D2", +"qJ c #091219", +"qK c #879097", +"qL c #A2D2FA", +"qM c #A9D0EF", +"qN c #456C8B", +"qO c #757575", +"qP c #65727B", +"qQ c #58656E", +"qR c #51565A", +"qS c #A4ABB1", +"qT c #2E353B", +"qU c #8ABFE7", +"qV c #0F1922", +"qW c #A6B0B9", +"qX c #313131", +"qY c #4A657A", +"qZ c #B3CEE3", +"q& c #9BD1FD", +"r c #9BD1FF", +"r0 c #9AD0FE", +"r1 c #99D0F9", +"r2 c #97CEF7", +"r3 c #97CCF8", +"r4 c #94C9F5", +"r5 c #91C4EF", +"r6 c #8EC1EC", +"r7 c #8DBDE5", +"r8 c #86B6DE", +"r9 c #869DE9", +"ra c #879EEA", +"rb c #9BB7E6", +"rc c #BFDBFF", +"rd c #C7DFFB", +"re c #9CB4D0", +"rf c #96979B", +"rg c #CBCCD0", +"rh c #D0D0D0", +"ri c #BBBBBB", +"rj c #BFBFBF", +"rk c #B7B7B5", +"rl c #ACACAA", +"rm c #929292", +"rn c #7E7E7E", +"ro c #85868A", +"rp c #949599", +"rq c #D8E5F6", +"rr c #E1EEFF", +"rs c #E4F0FC", +"rt c #EAF4FF", +"ru c #E9F6FF", +"rv c #EAF7FF", +"rw c #EBF8FF", +"rx c #DCF0FF", +"ry c #D3E7FF", +"rz c #D5E7FF", +"rA c #E1F3FF", +"rB c #F0FAFF", +"rC c #F3FDFF", +"rD c #FAFCFF", +"rE c #B1B3BF", +"rF c #616CA2", +"rG c #576298", +"rH c #6185A5", +"rI c #81A5C5", +"rJ c #87B8E0", +"rK c #8DBEE6", +"rL c #92C5F0", +"rM c #95C8F3", +"rN c #96CCF8", +"rO c #98CEFA", +"rP c #47515B", +"rQ c #7D8791", +"rR c #E5E5E5", +"rS c #BDBDBD", +"rT c #000924", +"rU c #ABCDE8", +"rV c #9AD0FC", +"rW c #9CD2FE", +"rX c #6C7680", +"rY c #505A64", +"rZ c #E4E4E4", +"r& c #161616", +"s c #84B9E3", +"s0 c #9CD1F9", +"s1 c #A4CFF1", +"s2 c #ABCEEC", +"s3 c #AACDEB", +"s4 c #9CD1FB", +"s5 c #9FAFBE", +"s6 c #000C1B", +"s7 c #CBCBCD", +"s8 c #E5E5E7", +"s9 c #E0E4E7", +"sa c #3B3F42", +"sb c #3B698D", +"sc c #A1CFF3", +"sd c #373B3E", +"se c #868A8D", +"sf c #616161", +"sg c #346286", +"sh c #A2D0F4", +"si c #9CD0FF", +"sj c #9BCFFE", +"sk c #AECCE6", +"sl c #2C4A64", +"sm c #34495A", +"sn c #6E8394", +"so c #98BBD7", +"sp c #000723", +"sq c #B2B2B0", +"sr c #E5E5E3", +"ss c #E5E3E4", +"st c #E6E4E5", +"su c #AAAFB5", +"sv c #2C3137", +"sw c #B3CCE0", +"sx c #2A4357", +"sy c #E1E1E3", +"sz c #334A5C", +"sA c #3B5264", +"sB c #99CFFD", +"sC c #98CFF8", +"sD c #95CCF5", +"sE c #96CBF7", +"sF c #92C7F3", +"sG c #90C3EE", +"sH c #8CBFEA", +"sI c #8ABAE2", +"sJ c #83B3DB", +"sK c #859CE8", +"sL c #91A8F4", +"sM c #B3CFFE", +"sN c #B4CCE8", +"sO c #829AB6", +"sP c #AFB0B4", +"sQ c #DADBDF", +"sR c #C8C8C8", +"sS c #B4B4B4", +"sT c #AAAAA8", +"sU c #A0A09E", +"sV c #949494", +"sW c #838383", +"sX c #828387", +"sY c #9D9EA2", +"sZ c #D5E2F3", +"s& c #E0EDFE", +"t c #E5F1FD", +"t0 c #E8F5FE", +"t1 c #E7F4FD", +"t2 c #E0EDFD", +"t3 c #D8E5F5", +"t4 c #CEE2FA", +"t5 c #CFE3FB", +"t6 c #D3E5FD", +"t7 c #D2E4FC", +"t8 c #E2ECF5", +"t9 c #EFF9FF", +"ta c #FBFDFF", +"tb c #E2E4F0", +"tc c #7F8AC0", +"td c #586399", +"te c #4B6F8F", +"tf c #769ABA", +"tg c #83B4DC", +"th c #8ABBE3", +"ti c #8FC2ED", +"tj c #93C6F1", +"tk c #94CAF6", +"tl c #98CEFC", +"tm c #99CFFB", +"tn c #747E88", +"to c #E2E2E2", +"tp c #666666", +"tq c #41637E", +"tr c #A9CBE6", +"ts c #29333D", +"tt c #96A0AA", +"tu c #0A0A0A", +"tv c #8CC1EB", +"tw c #9BD0FA", +"tx c #9BD0F8", +"ty c #7DB2DA", +"tz c #5C87A9", +"tA c #356082", +"tB c #234664", +"tC c #315472", +"tD c #7DB2DC", +"tE c #9ACFF9", +"tF c #3E4E5D", +"tG c #647483", +"tH c #717578", +"tI c #303437", +"tJ c #81AFD3", +"tK c #0F1316", +"tL c #D7DBDE", +"tM c #DADADA", +"tN c #0D0D0D", +"tO c #88B6DA", +"tP c #A7C5DF", +"tQ c #000923", +"tR c #CBCBCB", +"tS c #000D1E", +"tT c #9EB3C4", +"tU c #A8CBE7", +"tV c #5E819D", +"tW c #20201E", +"tX c #D5D5D3", +"tY c #E1DFE0", +"tZ c #272C32", +"t& c #556E82", +"u c #253E52", +"u0 c #5C5C5E", +"u1 c #294052", +"u2 c #B2C9DB", +"u3 c #95CFFD", +"u4 c #95CDFE", +"u5 c #94CCFD", +"u6 c #92CAFB", +"u7 c #92C8F6", +"u8 c #8EC4F2", +"u9 c #8DC2EE", +"ua c #88BDE9", +"ub c #85B6DF", +"uc c #7FB0D9", +"ud c #839DE8", +"ue c #8FA9F4", +"uf c #B0D1FA", +"ug c #B9DAFF", +"uh c #AEBAC8", +"ui c #8894A2", +"uj c #C4C4C6", +"uk c #BBBBBD", +"ul c #B1B1B1", +"um c #A8A8A8", +"un c #9E9EA0", +"uo c #939395", +"up c #898989", +"uq c #808080", +"ur c #7E7F83", +"us c #A8A9AD", +"ut c #DDEAFA", +"uu c #E1EEFE", +"uv c #E4F2FF", +"uw c #E5F3FF", +"ux c #E6F4FF", +"uy c #E3F4FF", +"uz c #E1F2FF", +"uA c #D5EDFF", +"uB c #CDE5FF", +"uC c #C7E0FF", +"uD c #C8E1FF", +"uE c #C9E0FF", +"uF c #C8DFFF", +"uG c #C3D3FF", +"uH c #B2C2F3", +"uI c #AAB8E7", +"uJ c #C8D6FF", +"uK c #F4FDFF", +"uL c #FCFFFF", +"uM c #F9FCFF", +"uN c #A0ABD9", +"uO c #616C9A", +"uP c #4E678F", +"uQ c #6C85AD", +"uR c #7BACD4", +"uS c #8BC0EC", +"uT c #8FC4F0", +"uU c #8FC8F5", +"uV c #91CAF7", +"uW c #94CCFB", +"uX c #96CEFF", +"uY c #94CEFE", +"uZ c #95CFFF", +"u& c #505C68", +"v c #6B7783", +"v0 c #DCDCDC", +"v1 c #DEDCDD", +"v2 c #DADBDD", +"v3 c #1A1B1D", +"v4 c #72A8D6", +"v5 c #A1CCEF", +"v6 c #6E99BC", +"v7 c #D9D9D9", +"v8 c #CFD0D4", +"v9 c #010206", +"va c #96CEFD", +"vb c #95CDFC", +"vc c #AFC8DE", +"vd c #597288", +"ve c #1F2324", +"vf c #171B1C", +"vg c #4E4E4E", +"vh c #7A7A7A", +"vi c #969696", +"vj c #606060", +"vk c #0B2A46", +"vl c #A9C8E4", +"vm c #A5C9E9", +"vn c #698DAD", +"vo c #1C1C1C", +"vp c #DCDCDE", +"vq c #DDDDDF", +"vr c #9D9D9D", +"vs c #000828", +"vt c #8AAECE", +"vu c #A4CBEC", +"vv c #446B8C", +"vw c #9FA6B0", +"vx c #2B323C", +"vy c #97CDF9", +"vz c #5D646A", +"vA c #4A5157", +"vB c #828284", +"vC c #1B4367", +"vD c #A3CBEF", +"vE c #94CEFC", +"vF c #3A5065", +"vG c #374D62", +"vH c #DEDEDE", +"vI c #DBDDDC", +"vJ c #252C32", +"vK c #76A2C5", +"vL c #0E0E10", +"vM c #C3C3C5", +"vN c #687888", +"vO c #1B2B3B", +"vP c #8DC5F4", +"vQ c #98CDFF", +"vR c #96D0FE", +"vS c #97CFFF", +"vT c #93CDFB", +"vU c #93CBFC", +"vV c #91C9FA", +"vW c #90C8F9", +"vX c #90C6F4", +"vY c #8DC3F1", +"vZ c #8ABFEB", +"v& c #85BAE6", +"w c #83B4DD", +"w0 c #7CADD6", +"w1 c #87A1EC", +"w2 c #AFD0F9", +"w3 c #85919F", +"w4 c #BABABA", +"w5 c #B4B4B6", +"w6 c #AFAFB1", +"w7 c #A5A5A5", +"w8 c #9B9B9B", +"w9 c #8F8F91", +"wa c #7D7D7D", +"wb c #787878", +"wc c #8C8D91", +"wd c #C6C7CB", +"we c #E2F0FD", +"wf c #D2E3F5", +"wg c #C6DEF8", +"wh c #C5DEFD", +"wi c #C6DFFE", +"wj c #BED5F7", +"wk c #ABC2E4", +"wl c #8C9CCD", +"wm c #6979AA", +"wn c #5F6D9C", +"wo c #8492C1", +"wp c #BFC8D7", +"wq c #E6EFFE", +"wr c #F7FBFC", +"ws c #FAFEFF", +"wt c #FAFDFF", +"wu c #F0F3FA", +"wv c #C3CEFC", +"ww c #737EAC", +"wx c #506991", +"wy c #5A739B", +"wz c #73A4CC", +"wA c #85B6DE", +"wB c #87BCE8", +"wC c #8CC5F2", +"wD c #91C9F8", +"wE c #92CAF9", +"wF c #92CCFA", +"wG c #93CDFD", +"wH c #4E5A66", +"wI c #D7D7D7", +"wJ c #D9D7D8", +"wK c #D8D6D7", +"wL c #AFB0B2", +"wM c #1B1C1E", +"wN c #96CCFA", +"wO c #A0CBEE", +"wP c #0C375A", +"wQ c #8F8F8F", +"wR c #A9AAAE", +"wS c #232428", +"wT c #84BCEB", +"wU c #1E374D", +"wV c #263F55", +"wW c #A3A7A8", +"wX c #D5D9DA", +"wY c #B2B2B2", +"wZ c #001531", +"w& c #A8C7E3", +"x c #94B8D8", +"x0 c #A1A1A1", +"x1 c #D7D7D9", +"x2 c #D8D8DA", +"x3 c #0C0C0C", +"x4 c #6B8FAF", +"x5 c #A4C8E8", +"x6 c #A2C9EA", +"x7 c #0A3152", +"x8 c #A2A2A2", +"x9 c #787F89", +"xa c #4C535D", +"xb c #92CCFC", +"xc c #95CBF7", +"xd c #6AA0CC", +"xe c #060D13", +"xf c #BAC1C7", +"xg c #18181A", +"xh c #6C94B8", +"xi c #A0C8EC", +"xj c #AFC5DA", +"xk c #1C3247", +"xl c #686868", +"xm c #D7D9D8", +"xn c #D6D8D7", +"xo c #9AA1A7", +"xp c #2B3238", +"xq c #9ECAED", +"xr c #083457", +"xs c #8B8B8D", +"xt c #8D8D8F", +"xu c #081828", +"xv c #99A9B9", +"xw c #96CBFD", +"xx c #90CDFC", +"xy c #91CBFD", +"xz c #90CAFC", +"xA c #8FC9F9", +"xB c #8DC7F7", +"xC c #8CC4F5", +"xD c #89C1F2", +"xE c #87BDEB", +"xF c #82B8E6", +"xG c #80B1DC", +"xH c #7AABD6", +"xI c #8298E4", +"xJ c #899FEB", +"xK c #ABCBFA", +"xL c #B6D6FF", +"xM c #B5C5D5", +"xN c #8696A6", +"xO c #A0A0A0", +"xP c #A6A6A6", +"xQ c #999999", +"xR c #7B797A", +"xS c #6B696A", +"xT c #767678", +"xU c #878789", +"xV c #B2BCC5", +"xW c #E1EBF4", +"xX c #DEEEFE", +"xY c #DFF1FF", +"xZ c #D2EBFF", +"x& c #CBE4FF", +"y c #C1DDFF", +"y0 c #C3DDFF", +"y1 c #BCD0FF", +"y2 c #A8BCEF", +"y3 c #8E9DD8", +"y4 c #6D7CB7", +"y5 c #5C6D99", +"y6 c #4E5F8B", +"y7 c #506290", +"y8 c #596B99", +"y9 c #717DB7", +"ya c #A7B3ED", +"yb c #D6E4FF", +"yc c #E8F6FF", +"yd c #F2FCFF", +"ye c #F0FCFF", +"yf c #EEFAFF", +"yg c #E1F4FF", +"yh c #D9ECFD", +"yi c #D5E4FF", +"yj c #7D8CB3", +"yk c #556795", +"yl c #546694", +"ym c #6B9CC4", +"yn c #81B2DA", +"yo c #84BAE9", +"yp c #89BFEE", +"yq c #8AC2F3", +"yr c #8EC6F7", +"ys c #8EC8FA", +"yt c #8FC9FB", +"yu c #8FCCFB", +"yv c #92CCFE", +"yw c #8FCDFC", +"yx c #8ECCFB", +"yy c #49565F", +"yz c #6E7B84", +"yA c #D3D3D3", +"yB c #435362", +"yC c #93CBFA", +"yD c #5F686D", +"yE c #353E43", +"yF c #6D7B88", +"yG c #404E5B", +"yH c #AAC6DC", +"yI c #1B374D", +"yJ c #646464", +"yK c #D3D3D5", +"yL c #A7A7A9", +"yM c #98999D", +"yN c #CECFD3", +"yO c #CDD1D4", +"yP c #4B4F52", +"yQ c #295071", +"yR c #A1C8E9", +"yS c #34393C", +"yT c #676C6F", +"yU c #D5D3D4", +"yV c #B9B7B8", +"yW c #001C35", +"yX c #9FBBD0", +"yY c #000B20", +"yZ c #CECECE", +"y& c #6F7983", +"z c #8FCCF9", +"z0 c #90CDFA", +"z1 c #9AACBA", +"z2 c #8F9190", +"z3 c #D2D4D3", +"z4 c #526574", +"z5 c #314453", +"z6 c #8FCDFE", +"z7 c #8ECCFD", +"z8 c #7CB6E6", +"z9 c #102131", +"za c #647585", +"zb c #D4D4D6", +"zc c #D5D5D5", +"zd c #303940", +"ze c #585F65", +"zf c #3C4349", +"zg c #9AA4AD", +"zh c #00060F", +"zi c #659DCC", +"zj c #92CBFF", +"zk c #8ECBFA", +"zl c #8BC5F5", +"zm c #8BC3F4", +"zn c #87BFF0", +"zo c #84BAE8", +"zp c #80B6E4", +"zq c #7FB0DB", +"zr c #78A9D4", +"zs c #8096E2", +"zt c #879DE9", +"zu c #A3C3F2", +"zv c #B4D4FF", +"zw c #CBDBEB", +"zx c #A1B1C1", +"zy c #959595", +"zz c #747273", +"zA c #787677", +"zB c #DEE8F1", +"zC c #E4EEF7", +"zD c #DAEAFA", +"zE c #CDDFF7", +"zF c #C1DAF9", +"zG c #BEDAFF", +"zH c #BAD4F7", +"zI c #A4BEE1", +"zJ c #8CA0D3", +"zK c #6E82B5", +"zL c #5D6CA7", +"zM c #51609B", +"zN c #445581", +"zO c #475987", +"zP c #4B5D8B", +"zQ c #58649E", +"zR c #6470AA", +"zS c #99A7C2", +"zT c #C5D3EE", +"zU c #E2ECF6", +"zV c #E1EDF9", +"zW c #DDE9F5", +"zX c #D6E9FA", +"zY c #CAD9FF", +"zZ c #7584AB", +"z& c #536593", +"A c #699AC2", +"A0 c #83B9E8", +"A1 c #87BDEC", +"A2 c #8BC5F7", +"A3 c #8DC7F9", +"A4 c #8DCAF9", +"A5 c #8DCBFA", +"A6 c #3F4C55", +"A7 c #75828B", +"A8 c #CFCFCF", +"A9 c #283847", +"Aa c #758594", +"Ab c #6BA3D2", +"Ac c #060F14", +"Ad c #B0B9BE", +"Ae c #354350", +"Af c #6E7C89", +"Ag c #637F95", +"Ah c #1A364C", +"Ai c #979799", +"Aj c #030305", +"Ak c #030408", +"Al c #03070A", +"Am c #282C2F", +"An c #8AB1D2", +"Ao c #214869", +"Ap c #4B5053", +"Aq c #C9CED1", +"Ar c #B7B5B6", +"As c #4E6E87", +"At c #A4C4DD", +"Au c #819DB2", +"Av c #0D293E", +"Aw c #828C96", +"Ax c #37414B", +"Ay c #8ECBF8", +"Az c #90C8F7", +"AA c #75ADDC", +"AB c #132533", +"AC c #697B89", +"AD c #969897", +"AE c #001221", +"AF c #98ABBA", +"AG c #8CCAFB", +"AH c #8DCBFC", +"AI c #90CAFA", +"AJ c #93A4B4", +"AK c #6C6C6E", +"AL c #848D94", +"AM c #363F46", +"AN c #0B1218", +"AO c #B5BCC2", +"AP c #08121B", +"AQ c #747E87", +"AR c #90C9FE", +"AS c #8DCBFE", +"AT c #8CCAFD", +"AU c #8BC8FE", +"AV c #8AC7FD", +"AW c #89C6FC", +"AX c #87C4FA", +"AY c #86C2F4", +"AZ c #82BEF0", +"A& c #82BAE9", +"B c #7DB5E4", +"B0 c #7AAEDD", +"B1 c #74A8D7", +"B2 c #7B96DD", +"B3 c #839EE5", +"B4 c #9DBCF2", +"B5 c #B3D2FF", +"B6 c #C4D8F3", +"B7 c #AFB8C7", +"B8 c #A0A9B8", +"B9 c #9CA1A5", +"Ba c #909599", +"Bb c #8D9095", +"Bc c #93969B", +"Bd c #99A2A7", +"Be c #B4BDC2", +"Bf c #CDDAEA", +"Bg c #DFECFC", +"Bh c #DAEFFF", +"Bi c #D3ECFF", +"Bj c #CDE6FF", +"Bk c #C4E2FF", +"Bl c #BEDCFF", +"Bm c #B8D8FF", +"Bn c #BAD7FF", +"Bo c #BACFFF", +"Bp c #A2B7EE", +"Bq c #8E9CD9", +"Br c #7381BE", +"Bs c #6072A0", +"Bt c #526492", +"Bu c #3E5B7B", +"Bv c #3F5C7C", +"Bw c #4E7596", +"Bx c #547C9F", +"By c #4D7598", +"Bz c #476089", +"BA c #506992", +"BB c #5C68A2", +"BC c #838FC9", +"BD c #ADBEEA", +"BE c #CCDDFF", +"BF c #D2E5FF", +"BG c #D1E4FF", +"BH c #CCDFFF", +"BI c #9EA9E1", +"BJ c #6570A8", +"BK c #4B648C", +"BL c #679CC6", +"BM c #7DBAE9", +"BN c #81BEED", +"BO c #87C1F3", +"BP c #89C3F5", +"BQ c #89C5FB", +"BR c #8AC6FC", +"BS c #8CC9FF", +"BT c #323941", +"BU c #888F97", +"BV c #CACACC", +"BW c #CACACA", +"BX c #C9C9C9", +"BY c #C0C0C0", +"BZ c #000A29", +"B& c #97B8D7", +"C c #8DC9FF", +"C0 c #A8C2D9", +"C1 c #142E45", +"C2 c #828483", +"C3 c #C9CBCA", +"C4 c #C8CAC9", +"C5 c #C7C9C8", +"C6 c #000F2B", +"C7 c #90B2CE", +"C8 c #394249", +"C9 c #778087", +"Ca c #223343", +"Cb c #728393", +"Cc c #94C7F2", +"Cd c #83B6E1", +"Ce c #8BAAC7", +"Cf c #83A2BF", +"Cg c #292C31", +"Ch c #4E5156", +"Ci c #C7C7C7", +"Cj c #C9C9CB", +"Ck c #ABABAB", +"Cl c #001F3B", +"Cm c #496884", +"Cn c #8BC9FC", +"Co c #7B95A6", +"Cp c #183243", +"Cq c #B4B5B7", +"Cr c #0E0F11", +"Cs c #91C7F5", +"Ct c #00040E", +"Cu c #78797B", +"Cv c #C8C9CB", +"Cw c #A2ABB2", +"Cx c #060F16", +"Cy c #568EBF", +"Cz c #8FC7F8", +"CA c #8DC9FB", +"CB c #74B0E2", +"CC c #122335", +"CD c #5D6E80", +"CE c #7C8083", +"CF c #25292C", +"CG c #858688", +"CH c #B8BDC3", +"CI c #1C2127", +"CJ c #3B719F", +"CK c #8DC9FD", +"CL c #88C5FB", +"CM c #80B8E7", +"CN c #7BAFDE", +"CO c #7792D9", +"CP c #819CE3", +"CQ c #94B3E9", +"CR c #B2D1FF", +"CS c #CBDFFA", +"CT c #D1E5FF", +"CU c #D8E1F0", +"CV c #CDD6E5", +"CW c #C8CDD1", +"CX c #C3C8CC", +"CY c #C6C9CE", +"CZ c #CFD2D7", +"C& c #D5DEE3", +"D c #E2EBF0", +"D0 c #DEEBFB", +"D1 c #D2E7FA", +"D2 c #CDE2F5", +"D3 c #C3DCFA", +"D4 c #BED7F5", +"D5 c #B7D5F9", +"D6 c #B6D6FD", +"D7 c #B7D7FE", +"D8 c #AFCCF6", +"D9 c #9FBCE6", +"Da c #7287BE", +"Db c #6472AF", +"Dc c #54629F", +"Dd c #455785", +"De c #465886", +"Df c #4D6A8A", +"Dg c #5A7797", +"Dh c #5F86A7", +"Di c #668DAE", +"Dj c #6991B4", +"Dk c #668EB1", +"Dl c #657EA7", +"Dm c #4A638C", +"Dn c #54609A", +"Do c #6C7DA9", +"Dp c #95A6D2", +"Dq c #ADC0E0", +"Dr c #B0C3E3", +"Ds c #AABDDE", +"Dt c #92A5C6", +"Du c #6B76AE", +"Dv c #57629A", +"Dw c #455E86", +"Dx c #5D769E", +"Dy c #6DA2CC", +"Dz c #7FB4DE", +"DA c #7EBBEA", +"DB c #86C0F2", +"DC c #1E252D", +"DD c #99A0A8", +"DE c #153655", +"DF c #A1C2E1", +"DG c #8BC9FA", +"DH c #8CC8FE", +"DI c #8AC8FB", +"DJ c #486279", +"DK c #2B455C", +"DL c #C4C6C5", +"DM c #C2C4C3", +"DN c #153753", +"DO c #A1C3DF", +"DP c #1F282F", +"DQ c #929BA2", +"DR c #304151", +"DS c #4C5D6D", +"DT c #6598C3", +"DU c #477AA5", +"DV c #2C4B68", +"DW c #00112E", +"DX c #75787D", +"DY c #C0C3C8", +"DZ c #C5C5C7", +"D& c #909090", +"E c #0E0E0E", +"E0 c #4E6D89", +"E1 c #A3C2DE", +"E2 c #89A3B4", +"E3 c #031D2E", +"E4 c #C3C4C6", +"E5 c #303133", +"E6 c #4F87B6", +"E7 c #8EC6F5", +"E8 c #366C9A", +"E9 c #06101A", +"Ea c #858F99", +"Eb c #C2C3C5", +"Ec c #A6A7A9", +"Ed c #0E171E", +"Ee c #636C73", +"Ef c #8CC8FA", +"Eg c #93A4B6", +"Eh c #091A2C", +"Ei c #707477", +"Ej c #BFC0C2", +"Ek c #31363C", +"El c #4C5157", +"Em c #8CC8FC", +"En c #85C6FC", +"Eo c #86C5FB", +"Ep c #85C4FA", +"Eq c #84C3F9", +"Er c #84C0F6", +"Es c #81BDF3", +"Et c #7CB8EC", +"Eu c #79B5E9", +"Ev c #77AFE0", +"Ew c #70A8D9", +"Ex c #7594D4", +"Ey c #7D9CDC", +"Ez c #8CAAE6", +"EA c #B1CFFF", +"EB c #C6DFFD", +"EC c #CCE5FF", +"ED c #D0E6FE", +"EE c #D2E8FF", +"EF c #D5EAFF", +"EG c #D7ECFF", +"EH c #D8EAFE", +"EI c #D3EBFF", +"EJ c #CAE2FE", +"EK c #B7D9FF", +"EL c #B3D5FF", +"EM c #B0D2FF", +"EN c #B1D3FF", +"EO c #B4D3FF", +"EP c #AEC3FF", +"EQ c #95AAE9", +"ER c #8496D6", +"ES c #7587C7", +"ET c #667AAC", +"EU c #596D9F", +"EV c #3E5F80", +"EW c #3C5D7E", +"EX c #436E91", +"EY c #517C9F", +"EZ c #5889B2", +"E& c #6394BD", +"F c #659AC6", +"F0 c #699ECA", +"F1 c #689DC9", +"F2 c #6497C2", +"F3 c #5C8FBA", +"F4 c #4D739A", +"F5 c #41678E", +"F6 c #536498", +"F7 c #5C6DA1", +"F8 c #6B7AB1", +"F9 c #6E7DB4", +"Fa c #6979AD", +"Fb c #5B6B9F", +"Fc c #4F658C", +"Fd c #435980", +"Fe c #436F96", +"Ff c #618DB4", +"Fg c #6FA9DB", +"Fh c #7BB5E7", +"Fi c #7CB9EF", +"Fj c #7FBCF2", +"Fk c #7FC0F6", +"Fl c #82C3F9", +"Fm c #84C5FB", +"Fn c #87C6FC", +"Fo c #87C5F8", +"Fp c #88C6F9", +"Fq c #010101", +"Fr c #B3B3B3", +"Fs c #505050", +"Ft c #366A99", +"Fu c #8FC3F2", +"Fv c #86C7FD", +"Fw c #8BC3F2", +"Fx c #7AB2E1", +"Fy c #050706", +"Fz c #A7A9A8", +"FA c #373737", +"FB c #407AAA", +"FC c #1C252C", +"FD c #8A939A", +"FE c #BCBEBD", +"FF c #5B5B5B", +"FG c #3B3B3B", +"FH c #4F4F4F", +"FI c #B0B0B0", +"FJ c #BEBEC0", +"FK c #BDBDBF", +"FL c #B5BAC0", +"FM c #575C62", +"FN c #000A2C", +"FO c #5A85A7", +"FP c #001438", +"FQ c #A2A2A4", +"FR c #BEBEBC", +"FS c #91918F", +"FT c #00040D", +"FU c #77818A", +"FV c #7C8FA0", +"FW c #4E6172", +"FX c #17181A", +"FY c #3F4042", +"FZ c #839099", +"F& c #3870A1", +"G c #85C7FB", +"G0 c #88C5FC", +"G1 c #89C6FD", +"G2 c #619FD2", +"G3 c #88929B", +"G4 c #BEBCBD", +"G5 c #BFBDBE", +"G6 c #AEAEAE", +"G7 c #0D426E", +"G8 c #85C6FE", +"G9 c #82C1F7", +"Ga c #83BFF5", +"Gb c #80BCF2", +"Gc c #71A9DA", +"Gd c #6A89C9", +"Ge c #7B9ADA", +"Gf c #86A4E0", +"Gg c #ABC9FF", +"Gh c #C1DAF8", +"Gi c #CFE5FD", +"Gj c #D1E7FF", +"Gk c #D3E8FD", +"Gl c #D8E9FD", +"Gm c #D7E8FC", +"Gn c #D2EAFF", +"Go c #C0D8F4", +"Gp c #AED0FD", +"Gq c #AFD1FF", +"Gr c #ADCFFD", +"Gs c #9FBEED", +"Gt c #87A6D5", +"Gu c #7E93D2", +"Gv c #6E83C2", +"Gw c #6779B9", +"Gx c #596BAB", +"Gy c #465A8C", +"Gz c #435789", +"GA c #496A8B", +"GB c #58799A", +"GC c #608BAE", +"GD c #6A95B8", +"GE c #6B9CC5", +"GF c #6FA0C9", +"GG c #71A6D2", +"GH c #70A5D1", +"GI c #6EA1CC", +"GJ c #6B9EC9", +"GK c #6F95BC", +"GL c #5D83AA", +"GM c #526397", +"GN c #516296", +"GO c #516097", +"GP c #505F96", +"GQ c #506094", +"GR c #48588C", +"GS c #455B82", +"GT c #5C88AF", +"GU c #739FC6", +"GV c #76B0E2", +"GW c #7DB7E9", +"GX c #7DBAF0", +"GY c #80BDF3", +"GZ c #80C1F7", +"G& c #66A4D7", +"H c #B9B9B9", +"H0 c #B7B9B8", +"H1 c #B7B7B7", +"H2 c #669AC9", +"H3 c #8EC2F1", +"H4 c #28608F", +"H5 c #505251", +"H6 c #86C0F0", +"H7 c #8AC4F4", +"H8 c #384148", +"H9 c #626B72", +"Ha c #B6B8B7", +"Hb c #B9B9BB", +"Hc c #B8B8BA", +"Hd c #878787", +"He c #191E24", +"Hf c #353A40", +"Hg c #7DA8CA", +"Hh c #96C1E3", +"Hi c #83C4FA", +"Hj c #98C0E4", +"Hk c #325A7E", +"Hl c #404042", +"Hm c #B8B8B6", +"Hn c #7E8891", +"Ho c #313B44", +"Hp c #233647", +"Hq c #495C6D", +"Hr c #999A9C", +"Hs c #B7B8BA", +"Ht c #555555", +"Hu c #00050E", +"Hv c #6D7A83", +"Hw c #83C5F9", +"Hx c #84C6FA", +"Hy c #87C4FB", +"Hz c #86C4F7", +"HA c #727C85", +"HB c #0A141D", +"HC c #B5B5B5", +"HD c #81B6E2", +"HE c #84C5FD", +"HF c #81C4F9", +"HG c #82C3FB", +"HH c #81C2FA", +"HI c #7FC2F9", +"HJ c #7CBFF6", +"HK c #80BFF5", +"HL c #7DBCF2", +"HM c #77B4EA", +"HN c #75AFE1", +"HO c #6A91CA", +"HP c #7198D1", +"HQ c #83A0E2", +"HR c #A4C1FF", +"HS c #BBD8FA", +"HT c #C9E6FF", +"HU c #D1E5FE", +"HV c #D2E6FF", +"HW c #D9EAFE", +"HX c #DAEBFF", +"HY c #BBD4F3", +"HZ c #AECDFF", +"H& c #A8C7FD", +"I c #9AADF1", +"I0 c #8699DD", +"I1 c #788AC8", +"I2 c #6D7FBD", +"I3 c #657AA9", +"I4 c #526796", +"I5 c #3A5D7D", +"I6 c #3E6181", +"I7 c #517DA4", +"I8 c #578CB8", +"I9 c #6297C3", +"Ia c #68A0D1", +"Ib c #6DA5D6", +"Ic c #70AADC", +"Id c #72ACDE", +"Ie c #71ADE1", +"If c #71ADDF", +"Ig c #6DA5D4", +"Ih c #69A1D0", +"Ii c #6095C1", +"Ij c #5186B2", +"Ik c #4B789F", +"Il c #46739A", +"Im c #5083AE", +"In c #5D90BB", +"Io c #67A0D5", +"Ip c #72ABE0", +"Iq c #7AB7ED", +"Ir c #7CBBF1", +"Is c #7EBDF3", +"It c #7EBFF7", +"Iu c #7FC0F8", +"Iv c #80C1F9", +"Iw c #81C4FB", +"Ix c #92BFE6", +"Iy c #3E6B92", +"Iz c #484A49", +"IA c #B1B3B2", +"IB c #B0B2B1", +"IC c #949BA1", +"ID c #9DBBD5", +"IE c #ACB0AF", +"IF c #9CA09F", +"IG c #888F95", +"IH c #798086", +"II c #13334C", +"IJ c #476780", +"IK c #001C38", +"IL c #A3A3A3", +"IM c #B3B1B4", +"IN c #888888", +"IO c #001C32", +"IP c #407CAE", +"IQ c #85C1F3", +"IR c #7BBCF4", +"IS c #000515", +"IT c #4D5E6E", +"IU c #AAAFB2", +"IV c #696E71", +"IW c #20425E", +"IX c #6CABE1", +"IY c #81C2F8", +"IZ c #84C2FB", +"I& c #83C1FA", +"J c #88C2F2", +"J0 c #255F8F", +"J1 c #323637", +"J2 c #AEB2B3", +"J3 c #000F30", +"J4 c #6E95B6", +"J5 c #83C4FC", +"J6 c #7FC4FB", +"J7 c #7FC2F7", +"J8 c #7EC1F8", +"J9 c #7DC0F7", +"Ja c #7FBEF4", +"Jb c #7BB8EE", +"Jc c #78B5EB", +"Jd c #6E95CE", +"Je c #6D94CD", +"Jf c #7F9CDE", +"Jg c #99B6F8", +"Jh c #B8D5F7", +"Ji c #C7E4FF", +"Jj c #D1EAFF", +"Jk c #B7D0EF", +"Jl c #7897CD", +"Jm c #7487CB", +"Jn c #6D80C4", +"Jo c #6072B0", +"Jp c #4C5E9C", +"Jq c #3D5281", +"Jr c #445988", +"Js c #4A6D8D", +"Jt c #597C9C", +"Ju c #5E8AB1", +"Jv c #6A96BD", +"Jw c #6A9FCB", +"Jx c #6FA4D0", +"Jy c #73ABDC", +"Jz c #74AEE0", +"JA c #77B1E3", +"JB c #76B2E6", +"JC c #76B2E4", +"JD c #75B1E3", +"JE c #74ACDB", +"JF c #72AAD9", +"JG c #6CA1CD", +"JH c #6C99C0", +"JI c #6996BD", +"JJ c #6895BC", +"JK c #6A97BE", +"JL c #6A9DC8", +"JM c #71A4CF", +"JN c #77B0E5", +"JO c #90BDE4", +"JP c #002B52", +"JQ c #818382", +"JR c #AAACAB", +"JS c #A9ABAA", +"JT c #60676D", +"JU c #7694AE", +"JV c #000D27", +"JW c #1F1F1F", +"JX c #0F0F0F", +"JY c #000201", +"JZ c #090D0C", +"J& c #171E24", +"K c #282F35", +"K0 c #25455E", +"K1 c #9BBBD4", +"K2 c #30536F", +"K3 c #151515", +"K4 c #6A6A6A", +"K5 c #9A9A9A", +"K6 c #ACAAAD", +"K7 c #9E9C9F", +"K8 c #232323", +"K9 c #4E6A80", +"Ka c #9EBAD0", +"Kb c #84C0F2", +"Kc c #8C9DAD", +"Kd c #152636", +"Ke c #333333", +"Kf c #ABADAC", +"Kg c #0F1417", +"Kh c #2A2F32", +"Ki c #6385A1", +"Kj c #99BBD7", +"Kk c #83C2F8", +"Kl c #82C0F9", +"Km c #85BFEF", +"Kn c #202425", +"Ko c #6D7172", +"Kp c #A4A4A4", +"Kq c #1D1D1D", +"Kr c #4B7293", +"Ks c #96BDDE", +"Kt c #7DC2F9", +"Ku c #7AC1F9", +"Kv c #7BC0FB", +"Kw c #79BEF9", +"Kx c #7BC0F9", +"Ky c #79BEF7", +"Kz c #7ABCF6", +"KA c #78BAF4", +"KB c #76B9EE", +"KC c #72B5EA", +"KD c #71B0E5", +"KE c #6BAADF", +"KF c #689ACD", +"KG c #6193C6", +"KH c #8197E0", +"KI c #94AAF3", +"KJ c #B5D2FA", +"KK c #C2DFFF", +"KL c #D4E9FE", +"KM c #D6EBFF", +"KN c #CFE9FF", +"KO c #AFC9EE", +"KP c #889BDD", +"KQ c #6B7EC0", +"KR c #5C739C", +"KS c #445B84", +"KT c #335777", +"KU c #3B5F7F", +"KV c #3F7098", +"KW c #4D7EA6", +"KX c #558BB9", +"KY c #6096C4", +"KZ c #649ECE", +"K& c #69A3D3", +"L c #6AA9DC", +"L0 c #6BAADD", +"L1 c #6FAEE4", +"L2 c #71B0E6", +"L3 c #71B2E8", +"L4 c #74B5EB", +"L5 c #75B6EE", +"L6 c #73B6ED", +"L7 c #74B7EE", +"L8 c #74B5ED", +"L9 c #72B3EB", +"La c #70B1E7", +"Lb c #6FB0E6", +"Lc c #6FAEE3", +"Ld c #6CABE0", +"Le c #6AA7DD", +"Lf c #6BA8DE", +"Lg c #70AFE4", +"Lh c #74B3E9", +"Li c #74B6F0", +"Lj c #76B8F2", +"Lk c #77B9F3", +"Ll c #78BFF7", +"Lm c #79C0F8", +"Ln c #7ABFFA", +"Lo c #7AC1F7", +"Lp c #64839F", +"Lq c #001632", +"Lr c #68707B", +"Ls c #656D78", +"Lt c #576572", +"Lu c #485663", +"Lv c #2C4355", +"Lw c #102739", +"Lx c #001034", +"Ly c #4D7B9F", +"Lz c #7DBFF3", +"LA c #4587BB", +"LB c #5897CC", +"LC c #69A8DD", +"LD c #74B9F2", +"LE c #4A7FA9", +"LF c #063B65", +"LG c #000F29", +"LH c #00102A", +"LI c #001A30", +"LJ c #08243A", +"LK c #052137", +"LL c #000C26", +"LM c #00284B", +"LN c #123E61", +"LO c #4483B8", +"LP c #80BFF4", +"LQ c #7ABFF8", +"LR c #7AC0FB", +"LS c #78BDF6", +"LT c #336183", +"LU c #081D30", +"LV c #33485B", +"LW c #616870", +"LX c #747B83", +"LY c #737C83", +"LZ c #384F5F", +"L& c #0B2232", +"M c #00082B", +"M0 c #20486B", +"M1 c #67ACE3", +"M2 c #7BC0F7", +"M3 c #79C2F9", +"M4 c #78C1F8", +"M5 c #82BEF2", +"M6 c #272A2F", +"M7 c #64676C", +"M8 c #3C5162", +"M9 c #7BBFFC", +"Ma c #73B6EB", +"Mb c #73B2E7", +"Mc c #6C9ED1", +"Md c #6092C5", +"Me c #7E94DD", +"Mf c #8CA2EB", +"Mg c #B3D0F8", +"Mh c #BFDCFF", +"Mi c #DAECFF", +"Mj c #D0EAFF", +"Mk c #AAC4E9", +"Ml c #7D90D2", +"Mm c #576AAC", +"Mn c #395079", +"Mo c #425982", +"Mp c #486C8C", +"Mq c #567A9A", +"Mr c #598AB2", +"Ms c #6394BC", +"Mt c #659BC9", +"Mu c #6AA0CE", +"Mv c #6BA5D5", +"Mw c #6FA9D9", +"Mx c #6EADE0", +"My c #70AFE2", +"Mz c #73B2E8", +"MA c #75B6EC", +"MB c #76B7ED", +"MC c #77B8F0", +"MD c #75B8EF", +"ME c #76B9F0", +"MF c #76B7EF", +"MG c #73B4EA", +"MH c #72B3E9", +"MI c #72B1E6", +"MJ c #6FAEE1", +"MK c #70ADE3", +"ML c #71AEE4", +"MM c #77B6EC", +"MN c #79BBF5", +"MO c #7BC2F8", +"MP c #85A4C0", +"MQ c #153450", +"MR c #272F3A", +"MS c #2F3742", +"MT c #364451", +"MU c #44525F", +"MV c #546B7D", +"MW c #71889A", +"MX c #80AED2", +"MY c #8EBCE0", +"MZ c #7EC0F4", +"M& c #88BDE7", +"N c #96BAD4", +"N0 c #85A9C3", +"N1 c #7B97AD", +"N2 c #7793A9", +"N3 c #7894AA", +"N4 c #87ABC5", +"N5 c #97BBD5", +"N6 c #7FBEF3", +"N7 c #8EBCDE", +"N8 c #74899C", +"N9 c #495E71", +"Na c #313840", +"Nb c #1D242C", +"Nc c #1D262D", +"Nd c #2F383F", +"Ne c #435A6A", +"Nf c #6D8494", +"Ng c #92BADD", +"Nh c #7ABFF6", +"Ni c #205C90", +"Nj c #2E3136", +"Nk c #979A9F", +"Nl c #000617", +"Nm c #889DAE", +"Nn c #76BEF9", +"No c #77BFFA", +"Np c #75BDF8", +"Nq c #76BAF7", +"Nr c #74B8F5", +"Ns c #72B9F1", +"Nt c #6FB6EE", +"Nu c #6EB1E8", +"Nv c #69ACE3", +"Nw c #68A2D2", +"Nx c #4F89B9", +"Ny c #798FD8", +"Nz c #869CE5", +"NA c #A3C3F4", +"NB c #D6E8FE", +"NC c #D9E9FF", +"ND c #CEEAFF", +"NE c #A7C3EA", +"NF c #7B8FCE", +"NG c #586CAB", +"NH c #365C80", +"NI c #486E92", +"NJ c #4F84B0", +"NK c #598EBA", +"NL c #5C98CA", +"NM c #619DCF", +"NN c #63A2D7", +"NO c #66A5DA", +"NP c #67AADF", +"NQ c #6AADE2", +"NR c #6CB1E8", +"NS c #6EB3EA", +"NT c #70B5EE", +"NU c #71B6EF", +"NV c #71B9F4", +"NW c #72BAF5", +"NX c #73B9F5", +"NY c #74BAF6", +"NZ c #73BBF5", +"N& c #72BAF4", +"O c #74B9F4", +"O0 c #73B8F3", +"O1 c #71B8F0", +"O2 c #70B7EF", +"O3 c #6EB3EC", +"O4 c #6CB3E9", +"O5 c #6CB1EA", +"O6 c #6DB2EB", +"O7 c #6FB4ED", +"O8 c #73BBF6", +"O9 c #75BBF7", +"Oa c #76BDFB", +"Ob c #77BDF9", +"Oc c #75BDF7", +"Od c #76BEF8", +"Oe c #73BEF8", +"Of c #74BFF9", +"Og c #77A5C7", +"Oh c #4E5B64", +"Oi c #1C2932", +"Oj c #0A1117", +"Ok c #2A3137", +"Ol c #5E87A7", +"Om c #8FB8D8", +"On c #7ABBF3", +"Oo c #5F6972", +"Op c #0E1821", +"Oq c #939393", +"Or c #6F7982", +"Os c #000912", +"Ot c #4B8CC2", +"Ou c #7ABBF1", +"Ov c #74BCF7", +"Ow c #75B9F6", +"Ox c #73B7F4", +"Oy c #6DB4EC", +"Oz c #538DBD", +"OA c #7288D1", +"OB c #8298E1", +"OC c #99B9EA", +"OD c #B5D5FF", +"OE c #CFE3FC", +"OF c #D4E8FF", +"OG c #C6E2FF", +"OH c #A6C2E9", +"OI c #768AC9", +"OJ c #576BAA", +"OK c #395F83", +"OL c #50769A", +"OM c #558AB6", +"ON c #5E93BF", +"OO c #5F9BCD", +"OP c #64A0D2", +"OQ c #6DB0E5", +"OR c #6DB2E9", +"OS c #70B8F3", +"OT c #72B8F4", +"OU c #71B9F3", +"OV c #72B7F2", +"OW c #6DB4EA", +"OX c #74BBF9", +"OY c #74BCF6", +"OZ c #72BDF7", +"O& c #4A789A", +"P c #001133", +"P0 c #323F48", +"P1 c #767D83", +"P2 c #51585E", +"P3 c #001434", +"P4 c #3E6787", +"P5 c #79BAF2", +"P6 c #3E7FB7", +"P7 c #030D16", +"P8 c #6D7780", +"P9 c #061019", +"Pa c #626C75", +"Pb c #78B9EF", +"Pc c #6DBCF7", +"Pd c #70BAF9", +"Pe c #6FBBF7", +"Pf c #6FB9F8", +"Pg c #6EB8F7", +"Ph c #6DB7F4", +"Pi c #6AB4F1", +"Pj c #6AB0EB", +"Pk c #62A8E3", +"Pl c #64A3D6", +"Pm c #5594C7", +"Pn c #6685C6", +"Po c #7897D8", +"Pp c #8FACE6", +"Pq c #B2CFFF", +"Pr c #D1E9FF", +"Ps c #C3E3FF", +"Pt c #A0C0E9", +"Pu c #7080BC", +"Pv c #4E5E9A", +"Pw c #356289", +"Px c #4F7CA3", +"Py c #538FC1", +"Pz c #5FA0D8", +"PA c #63A4DC", +"PB c #63ACE3", +"PC c #66AFE6", +"PD c #6AB0EE", +"PE c #6BB1EF", +"PF c #6AB5EF", +"PG c #6BB6F0", +"PH c #6CB6F3", +"PI c #6EB8F5", +"PJ c #6EBAF6", +"PK c #6AB6F0", +"PL c #69B5EF", +"PM c #6CB3F1", +"PN c #6CB6F5", +"PO c #6DB7F6", +"PP c #6FB9F6", +"PQ c #70BCF8", +"PR c #72B9F9", +"PS c #71BBF8", +"PT c #71BBFA", +"PU c #6EBAF4", +"PV c #70BAF7", +"PW c #71B8F8", +"PX c #76B8EC", +"PY c #6DAFE3", +"PZ c #656565", +"P& c #6D6D6D", +"Q c #7F7F7F", +"Q0 c #6A6E6F", +"Q1 c #000405", +"Q2 c #6C7A87", +"Q3 c #000A17", +"Q4 c #646665", +"Q5 c #7E807F", +"Q6 c #6E777E", +"Q7 c #0C151C", +"Q8 c #25689D", +"Q9 c #75B8ED", +"Qa c #6FBBF9", +"Qb c #6BBAF5", +"Qc c #6DB9F5", +"Qd c #69B3F0", +"Qe c #65ABE6", +"Qf c #5998CB", +"Qg c #5E7DBE", +"Qh c #7392D3", +"Qi c #86A3DD", +"Qj c #AAC7FF", +"Qk c #C4DCF8", +"Ql c #D0E8FF", +"Qm c #BEDEFF", +"Qn c #9FBFE8", +"Qo c #6F7FBB", +"Qp c #4B5B97", +"Qq c #38658C", +"Qr c #5380A7", +"Qs c #5692C4", +"Qt c #5E9ACC", +"Qu c #61A2DA", +"Qv c #66A7DF", +"Qw c #64ADE4", +"Qx c #67B0E7", +"Qy c #6CB2F0", +"Qz c #6CB7F1", +"QA c #6BB5F2", +"QB c #6CB8F4", +"QC c #6BB7F1", +"QD c #6DB4F2", +"QE c #6FB6F4", +"QF c #70B7F7", +"QG c #6DB9F3", +"QH c #6AB9F4", +"QI c #75B7EB", +"QJ c #1F6195", +"QK c #2F2F2F", +"QL c #303030", +"QM c #505455", +"QN c #15191A", +"QO c #515F6C", +"QP c #757776", +"QQ c #6F7170", +"QR c #111A21", +"QS c #464F56", +"QT c #74B7EC", +"QU c #6DB9F7", +"QV c #6CB8F6", +"QW c #69AFEB", +"QX c #65ABE7", +"QY c #62A5DC", +"QZ c #599CD3", +"Q& c #537AB3", +"R c #668DC6", +"R0 c #829BDE", +"R1 c #A1BAFD", +"R2 c #BED8FB", +"R3 c #CCE6FF", +"R4 c #98B8EB", +"R5 c #6C7FB9", +"R6 c #465993", +"R7 c #396A93", +"R8 c #5485AE", +"R9 c #5F9ED1", +"Ra c #62A4E0", +"Rb c #67A9E5", +"Rc c #64AEEB", +"Rd c #67B1EE", +"Re c #6BB7F5", +"Rf c #6DB8F9", +"Rg c #6BB9F7", +"Rh c #8CB0D0", +"Ri c #001838", +"Rj c #626463", +"Rk c #090A0C", +"Rl c #636466", +"Rm c #64696F", +"Rn c #3F444A", +"Ro c #040605", +"Rp c #080A09", +"Rq c #5E5E5E", +"Rr c #767676", +"Rs c #6A7378", +"Rt c #141D22", +"Ru c #13548A", +"Rv c #6EBAF8", +"Rw c #66ACE8", +"Rx c #63A6DD", +"Ry c #5DA0D7", +"Rz c #5D84BD", +"RA c #5F86BF", +"RB c #7B94D7", +"RC c #95AEF1", +"RD c #B8D2F5", +"RE c #C8E2FF", +"RF c #B0D0FF", +"RG c #90B0E3", +"RH c #687BB5", +"RI c #3C6D96", +"RJ c #5788B1", +"RK c #5A99CC", +"RL c #61A0D3", +"RM c #65A7E3", +"RN c #69ABE7", +"RO c #66B0ED", +"RP c #7498B8", +"RQ c #001232", +"RR c #767877", +"RS c #101113", +"RT c #0F1012", +"RU c #01060C", +"RV c #2D3238", +"RW c #0F1110", +"RX c #636564", +"RY c #6E6E6E", +"RZ c #121B20", +"R& c #3E474C", +"S c #6BB1ED", +"S0 c #67ADE9", +"S1 c #65A8DF", +"S2 c #5EA1D8", +"S3 c #5E92C4", +"S4 c #497DAF", +"S5 c #768DD3", +"S6 c #8AA1E7", +"S7 c #AAC9F7", +"S8 c #BEDDFF", +"S9 c #D6EAFF", +"Sa c #D5EBFF", +"Sb c #D6ECFF", +"Sc c #CDEAFF", +"Sd c #ACC9FF", +"Se c #8BA8E2", +"Sf c #657AAF", +"Sg c #455A8F", +"Sh c #4073A0", +"Si c #588BB8", +"Sj c #599AD0", +"Sk c #62A3D9", +"Sl c #65A9E6", +"Sm c #69ADEA", +"Sn c #69B3F2", +"So c #6AB4F3", +"Sp c #7296B6", +"Sq c #000F2F", +"Sr c #606062", +"Ss c #171719", +"St c #0C0C0E", +"Su c #343436", +"Sv c #6F6F6F", +"Sw c #636C75", +"Sx c #0D161F", +"Sy c #19588E", +"Sz c #68AEEA", +"SA c #66A9E0", +"SB c #60A3DA", +"SC c #6397C9", +"SD c #6D84CA", +"SE c #8198DE", +"SF c #9CBBE9", +"SG c #B7D6FF", +"SH c #D0E4FC", +"SI c #D5E9FF", +"SJ c #D1E7FE", +"SK c #CBE1F8", +"SL c #BCD9FB", +"SM c #B3D0F2", +"SN c #A9C6FF", +"SO c #819ED8", +"SP c #6176AB", +"SQ c #4275A2", +"SR c #5A8DBA", +"SS c #5C9DD3", +"ST c #63A4DA", +"SU c #66AAE7", +"SV c #6AAEEB", +"SW c #6BB5F4", +"SX c #002444", +"SY c #4A4A4A", +"SZ c #777779", +"S& c #78787A", +"T c #050E17", +"T0 c #4E5760", +"T1 c #76B5EB", +"T2 c #68AEEC", +"T3 c #61A3DF", +"T4 c #609CD2", +"T5 c #508CC2", +"T6 c #6080BD", +"T7 c #7090CD", +"T8 c #90AAE7", +"T9 c #AFC9FF", +"Ta c #B7D8FF", +"Tb c #B3D8FF", +"Tc c #AED3FF", +"Td c #A9CDFD", +"Te c #ABC3FF", +"Tf c #7C94D2", +"Tg c #5A74A5", +"Th c #435D8E", +"Ti c #457AAC", +"Tj c #5B90C2", +"Tk c #5E9FD7", +"Tl c #64A5DD", +"Tm c #67ABE8", +"Tn c #6BB2F2", +"To c #6DB4F4", +"Tp c #6FB6F6", +"Tq c #70B4F1", +"Tr c #4589C6", +"Ts c #000419", +"Tt c #23394E", +"Tu c #616264", +"Tv c #727375", +"Tw c #474C52", +"Tx c #04223C", +"Ty c #000721", +"Tz c #3375AF", +"TA c #73B5EF", +"TB c #6DB3F1", +"TC c #69AFED", +"TD c #63A5E1", +"TE c #629ED4", +"TF c #5A96CC", +"TG c #5676B3", +"TH c #6A8AC7", +"TI c #7F99D6", +"TJ c #9FB9F6", +"TK c #ADCEF9", +"TL c #AACFFB", +"TM c #AACEFE", +"TN c #A8CCFC", +"TO c #95ADEB", +"TP c #6D85C3", +"TQ c #516B9C", +"TR c #466091", +"TS c #4C81B3", +"TT c #6095C7", +"TU c #65A6DE", +"TV c #6CB3F3", +"TW c #71B5F2", +"TX c #7C92A7", +"TY c #30465B", +"TZ c #000002", +"T& c #050A10", +"U c #2A2F35", +"U0 c #4E6C86", +"U1 c #90AEC8", +"U2 c #72B4EE", +"U3 c #6FB6F8", +"U4 c #6DB7F8", +"U5 c #6EB5F7", +"U6 c #6CB3F5", +"U7 c #6CB1F2", +"U8 c #6AAFF0", +"U9 c #63A7E4", +"Ua c #60A1D7", +"Ub c #5B9CD2", +"Uc c #588ABF", +"Ud c #5082B7", +"Ue c #788BD0", +"Uf c #8699DE", +"Ug c #9EB8F5", +"Uh c #AECBFF", +"Ui c #A1B8FB", +"Uj c #869DE0", +"Uk c #687AB8", +"Ul c #3F668F", +"Um c #456C95", +"Un c #4E8AC0", +"Uo c #5E9AD0", +"Up c #60A2DE", +"Uq c #68ACEB", +"Ur c #6BAFEE", +"Us c #6FB4F5", +"Ut c #6EB5F5", +"Uu c #70B7F9", +"Uv c #6CB6F7", +"Uw c #6DB4F6", +"Ux c #64A8E5", +"Uy c #5FA0D6", +"Uz c #6294C9", +"UA c #4F81B6", +"UB c #687BC0", +"UC c #7588CD", +"UD c #7A94D1", +"UE c #829CD9", +"UF c #829FD9", +"UG c #7A97D1", +"UH c #768DD0", +"UI c #6B82C5", +"UJ c #6476B4", +"UK c #495B99", +"UL c #3B628B", +"UM c #5279A2", +"UN c #5793C9", +"UO c #639FD5", +"UP c #64A6E2", +"UQ c #66A8E4", +"UR c #69ADEC", +"US c #6EB3F4", +"UT c #70B5F8", +"UU c #6FB4F7", +"UV c #6FB2F6", +"UW c #6DB0F4", +"UX c #6BAFF0", +"UY c #67ABEC", +"UZ c #67A7E5", +"U& c #63A3E1", +"V c #619ED7", +"V0 c #5895CE", +"V1 c #507EB2", +"V2 c #4E7CB0", +"V3 c #6683BB", +"V4 c #6D8AC2", +"V5 c #6E87BF", +"V6 c #6D86BE", +"V7 c #5F7EAD", +"V8 c #496897", +"V9 c #365F8B", +"Va c #3F6894", +"Vb c #467DB3", +"Vc c #578EC4", +"Vd c #5E9CD9", +"Ve c #65A3E0", +"Vf c #66A7E7", +"Vg c #69AAEA", +"Vh c #6DB1F2", +"Vi c #6DB2F5", +"Vj c #71B4F8", +"Vk c #71B5F6", +"Vl c #70B5F6", +"Vm c #70B5FA", +"Vn c #6EB3F6", +"Vo c #6EB1F5", +"Vp c #69ADEE", +"Vq c #69A9E7", +"Vr c #66A6E4", +"Vs c #66A3DC", +"Vt c #6593C7", +"Vu c #5583B7", +"Vv c #4D6AA2", +"Vw c #415E96", +"Vx c #405991", +"Vy c #3E5D8C", +"Vz c #486796", +"VA c #4C75A1", +"VB c #5B84B0", +"VC c #5D94CA", +"VD c #649BD1", +"VE c #64A2DF", +"VF c #68A6E3", +"VG c #68A9E9", +"VH c #6BACEC", +"VI c #70B3F7", +"VJ c #70B4F5", +"VK c #6FB4F9", +"VL c #70B2E6", +"VM c #6EB0E4", +"VN c #6EADE2", +"VO c #6AAADA", +"VP c #67A7D7", +"VQ c #65A2D1", +"VR c #619ECD", +"VS c #5C95C2", +"VT c #548DBA", +"VU c #5287B3", +"VV c #5288B4", +"VW c #578DB9", +"VX c #5D97C5", +"VY c #639DCB", +"VZ c #64A2D1", +"V& c #68A6D5", +"W c #69A7DA", +"W0 c #6CAADD", +"W1 c #71B4E9", +"W2 c #72B5EC", +"W3 c #627ED4", +"W4 c #627ED5", +"W5 c #617ED5", +"W6 c #637ED3", +"W7 c #647ED2", +"W8 c #657ED1", +"W9 c #667ED0", +"Wa c #687FCE", +"Wb c #687FCD", +"Wc c #697FCC", +"Wd c #6B7FCA", +"We c #6D80C9", +"Wf c #6E80C8", +"Wg c #6E80C7", +"Wh c #7180C4", +"Wi c #7280C3", +"Wj c #7481C1", +"Wk c #7681BF", +"Wl c #7781BD", +"Wm c #7A81BB", +"Wn c #7B82BA", +"Wo c #7D82B8", +"Wp c #7E82B6", +"Wq c #8182B3", +"Wr c #8283B2", +"Ws c #8483B0", +"Wt c #8683AE", +"Wu c #8983AB", +"Wv c #8B84A9", +"Ww c #8D84A6", +"Wx c #8E85A4", +"Wy c #9185A2", +"Wz c #9385A0", +"WA c #95859D", +"WB c #97869B", +"WC c #998699", +"WD c #9B8697", +"WE c #9D8794", +"WF c #A18790", +"WG c #A2888F", +"WH c #A3888D", +"WI c #A6888B", +"WJ c #A88889", +"WK c #AA8987", +"WL c #AC8984", +"WM c #AE8981", +"WN c #B18A7F", +"WO c #B38A7D", +"WP c #B58A7B", +"WQ c #B88B78", +"WR c #BA8B76", +"WS c #BB8B74", +"WT c #BE8B71", +"WU c #C08C6F", +"WV c #C18C6E", +"WW c #C48D6B", +"WX c #C58D69", +"WY c #C88E67", +"WZ c #CA8E64", +"W& c #CC8E62", +"X c #CE8E60", +"X0 c #CF8E5E", +"X1 c #D18F5C", +"X2 c #D48F59", +"X3 c #D68F57", +"X4 c #D79057", +"X5 c #D89055", +"X6 c #DC9052", +"X7 c #DC9051", +"X8 c #DE914F", +"X9 c #DF914E", +"Xa c #E1914C", +"Xb c #E2924B", +"Xc c #E49248", +"Xd c #E59247", +"Xe c #E79245", +"Xf c #E89245", +"Xg c #EA9342", +"Xh c #EB9342", +"Xi c #EC9341", +"Xj c #ED943F", +"Xk c #EE943E", +"Xl c #EF943D", +"Xm c #F0943D", +"Xn c #F1943B", +"Xo c #F2943B", +"Xp c #F2943A", +"Xq c #F39539", +"Xr c #F49539", +"Xs c #F59539", +"Xt c #F69537", +"Xu c #F69637", +"Xv c #F79637", +"Xw c #F69638", +"Xx c #F69639", +"Xy c #F59639", +"Xz c #F4963A", +"XA c #F4963B", +"XB c #F3953C", +"XC c #F2953C", +"XD c #F2963D", +"XE c #F1963F", +"XF c #EF9641", +"XG c #EE9642", +"XH c #ED9643", +"XI c #EC9645", +"XJ c #EA9647", +"XK c #EA9648", +"XL c #E99649", +"XM c #E8954B", +"XN c #E6954D", +"XO c #E5954E", +"XP c #E3944F", +"XQ c #E29551", +"XR c #E19553", +"XS c #DF9556", +"XT c #DD9558", +"XU c #DB955A", +"XV c #DA955C", +"XW c #D8955E", +"XX c #D69560", +"XY c #D59562", +"XZ c #D49464", +"X& c #D29466", +"Y c #D09468", +"Y0 c #CE946B", +"Y1 c #CC936D", +"Y2 c #CA936F", +"Y3 c #C89371", +"Y4 c #C69374", +"Y5 c #C49377", +"Y6 c #C39379", +"Y7 c #C0937C", +"Y8 c #BE937E", +"Y9 c #BC9281", +"Ya c #BB9282", +"Yb c #B89285", +"Yc c #B79286", +"Yd c #B49289", +"Ye c #B3928C", +"Yf c #B1918F", +"Yg c #AF9191", +"Yh c #AC9194", +"Yi c #AA9196", +"Yj c #A99198", +"Yk c #A7919A", +"Yl c #A5919D", +"Ym c #A290A0", +"Yn c #A190A2", +"Yo c #9F90A4", +"Yp c #9D90A7", +"Yq c #9B90A9", +"Yr c #998FAB", +"Ys c #978FAD", +"Yt c #958FAF", +"Yu c #938FB2", +"Yv c #928FB3", +"Yw c #8F8FB8", +"Yx c #8E8FB8", +"Yy c #8C8EBB", +"Yz c #8A8EBD", +"YA c #888EBF", +"YB c #888EC0", +"YC c #868EC3", +"YD c #838EC6", +"YE c #828EC7", +"YF c #808EC9", +"YG c #7E8DCB", +"YH c #7D8DCD", +"YI c #7C8DCF", +"YJ c #7A8DD0", +"YK c #788DD2", +"YL c #778DD4", +"YM c #768DD5", +"YN c #758CD7", +"YO c #748CD8", +"YP c #738CDA", +"YQ c #718CDC", +"YR c #6F8CDE", +"YS c #6F8CDF", +"YT c #6D8CE0", +"YU c #6B8CE3", +"YV c #6B8CE4", +" 0 0 0 0 0 0 0 0 0 0 0 0 1 0 2 3 4 5 6 7 8 9 a b c d e f g h i j 7 k l 3 m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 n n 1 0 0 n 0 o o 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0", +" p p q q p p q q p p q q p p q q p p q q p p q q p p n 0 3 5 r 8 j s a t u v w x y z A 7 B C 2 1 q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p D q q p D q E F F q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q p p q q", +" G G H H G G H H G G H H G G H H G G H H G G H H I J K L M N O P Q R S T U V W X Y Z &0 000102030405 H H0606 H H G G H H G G H H G G H H G G H H G G H H G G H H G G H H G G H H G G H H G G H H G G H H G G H H G G H H G G H H H H H H G G H H G G H H05 G H H G G H H G G H H G G H H G G0707 G G H H G G H H G G H H G G H H G G H H G G H H G G H H G G H H G G H H G G H H G G H H G G H H G G H H G G H H", +"0808090908080909080809090808090908080909080809090a I L L0b0c O0d Q0e0f0g0h0i0j0k0l0m0n0o0p0q030r G0s09090t0t0909080809090808090908080909080809090808090908080909080809090808090908080909080809090808090908080909080809090808090909090909080809090808090908080909080809090s0809090808090908080u0u0808090908080909080809090808090908080909080809090808090908080909080809090808090908080909080809090808090908080909", +"0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0x0y0z0A0B0C0D0E0F0G0H0I0J0K0L0M0N0O0P0Q0R0S0T0U0V0y0x0w0w0v0v0W0W0v0v0w0w0v0v0W0W0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0x0X0X0x0x0v0v0w0x0X0X0v0v0v0v0Y0Y0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w0v0v0w0w", +"0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z1 0w0w0y0A0B0C0S0E0F101112131415161718191a1b0T1c0z0y0w1 0&0&0Z0Z1d1d0Z0Z0&0&0Z0Z1d1d0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&1e0Z0&0&0Z0Z0&1 0Z0Z0&0&0Z0Z0Z0Z0Z0Z1f1f0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&0Z0Z0&0&", +"1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1i1j1k1l1m1n1o1p1q1r1s1t1u1v1w1x1y1z1A1B1C1D1E1o1n1F1l1G1H1I1h1g1g1h1h1g1g1h1h1J1J1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1K1K1g1g1h1h1L1M1N1O1P1P1Q1Q1g1R1h1h1g1g1K1K1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h1g1g1h1h", +"1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1U1V1I1G1m1W1X1Y1Z1&2 202122232425262728292a1o1n2b1l1G1i1g1V2c1U1S1T1T1S1S1T1T2d2d1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S2e2e1S1S1T1T2f2g2h2i2j2k2l2m1U1S1T1T1S1S2e2e1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T1S1S1T1T", +"2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2p2q2r1Q2s2t2u2v2w2x2y2z2A2B2C2D2E2F2G2H2I2J2K2L2M2N2O2O2P2Q2R2R2q2p2o2S2T2T2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2p2n2U2V2W2X2Y2Z2&3 303132333435363637372n2n38382n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o2n2n2o2o", +"39393a3a39393a3a39393a3a39393a3a39393a3a3b2n3c3d2s2t3e3f3g3h3i3j3k3l3m3n3o3p3q3r2J3s2L3t3u2N2s2O2P3v3w3w2q2p2o2S3x3y3a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a3b393a3a3z3A3B3C3D3D3D3E3F3G3H3I3J3K3L3M39393N3O39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a39393a3a", +"3P3P3Q3Q3P3P3R3R3S3S3Q3Q3P3P3Q3Q3P3P3Q3Q3T3U3V3W3X3Y3Z3&4 404142434445464748494a3Y3Y4b4c4d4e4f4g4h4i3W4j4k4l4m4n3T4o3Q3Q3S3S3Q3Q3P3P3Q3Q3P3P3R3R3S3S3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3R3R3S3S3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3R3R3S3S3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3T3P4p4p4q4r4s4t4u4v4v4v4s4s4v4u4w4x4y4z4A4B4C4C3P3P3Q3Q3P3P3R3R3S3S3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3R3R3S3S3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3R3R3S3S3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3R3R", +"4D4D4E4E4D4D4F4F4G4G4E4E4D4D4E4E4D4D4E3Q3P4o4H3W4I4J4K4L4M4N4O4P444Q464R4S484T4U4V4J4W4X4Y4Y4Z4&5 4f5051524l4m4n3T3P3Q4E534G4E4E4D4D4E4E4D4D4F4F4G4G4E4E4D4D4E4E4D4D4E4E4D4D4F4F4G4G4E4E4D4D4E4E4D4D4E4E4D4D4F4F4G4G4E4E4D4D4E4E4D4D4E4E4D4D4E4E5454555556574s584v4v4v4u4t4t4v4v59594u5a5b5c5d5d4D4D4E4E4D4D4F4F4G4G4E4E4D4D4E4E4D4D4E4E4D4D4F4F4G4G4E4E4D4D4E4E4D4D4E4E4D4D4F4F4G4G4E4E4D4D4E4E4D4D4E4E4D4D4F4F", +"5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5g5e5f5h5i5j5k5l5m5n5o5p5q5r5s5t5u5v5w5x5y5z5A5B5A5A5C5D5E5E5F5G5H5I5J5K5L5M5N5O5j5j5P5h5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5Q5Q5f5f5e5e5f5f5R5e5f5S5T5U4u3D4v4v4v4v4u594v4v4v4v4u5V5W5X5Y5Z5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f5e5e5f5f", +"5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5&6 5O606162636465666768696a6b6c6d6e6f6f6f6e6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v5O6w5&6x5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h6y6y6z6z5R5R5h5h6x5R5f5h6A6B4u4v4u4u4u4u4u4u4u4u4v4v4u6C6D6E5Z6F5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h5R5R5h5h", +"4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D6G3R6H6I6J4f6K6L6M6N6O6P6Q6R6S6T6U6V6W6X6Y6Z6&7 70717272737475767778797a7b4I517c4m7d7e7f4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4E4E4E4E7f7g4E7h7i7j4v4v4u4u4u4u4u4u4s4s4v4v7k7l7m5R7h5d4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E4D4D4E4E", +"3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3T7n7o3V4j7p4Z7q7r7s6N7t7u7v7w7x7y7z7A7B7C7D7E7F7G7H7I7J7K7L7M7N7O7P7Q7R7S7T7U7V517W7X7Y7Z4C3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3Q3Q3Q3Q7&7&3Q3Q8 804v4v4u4u4u4u4u4u4s4s4v4u818283833Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q3P3P3Q3Q", +"8484858586868585848485858484858587883b2p898a8b3s8c8d8e8f8g8h8i8j8k8l8m8m8n8o8p8q8r8s8t8u8v8w8x8y8z v8A8B8C8D8E8F8G8H8I8J8K8L8M8M8484858586868585848485858N7n858584848484878485858M8M858M8N8N858584848585848485858686858584848585868685858484858587844C8I313D4u4v4u4u4u4u4u4u4u4u4u4v8O8P8Q8485858R8R858M8487858M8484858M8484858M8R8R858584848585848Q85858487858S84848585848485858585858584848585858585858N8N858M", +"87878M8M8T8T8M8M87888M8M87878U3a888V2p2Q8a3u8W2I8X8Y8Z8&9 909192939495969798999a9b9c9d8u8v8v9e9e9f9g9h9i9j9k9l9m9n8G9o9p9q9r2n3988878M8M8T8T8M8M87878M8M7n7n8U8U8888878787878M8M8M8M8M8M7n7o393988888M8M87878M8M8T8T8M8M87878M8M8T8T8M8M87878M8M88879s9t9u4u4u4v4u4u4u4u4u4u4u4u4u9v9w9x87878M8M9y9y393987878M8M88878M8M87878M399z9z8M8M87878M8M87888M8587888M8M87878M8M87878M8M8M8M8M8M8787858M8M8M8M397n7n8M8M", +"9A9A9B9B9A9A2S2S9A9A9B9B9A9A9C9C2p2q2Q2P9D9E9F9G9H9I9J9K9L9M9N9O9P9Q9R9S9T9U9V9W9X9Y9Z9&a a a0a0a1a2a3a4a5a6a7a8a9aaabacad3vaeaeaf9C9B9B9A9A9B9B9A9A9B9B9Aag9B9B9A9A9B9B9A9A9B9B9A9Aahah9A9A9B9B9Aai9B9Bajaj9B9B9A9Aakak9A9A9B9B9A9A9B9B9A9A9B9Bai9Aalaman4u4u4v4u4u4u4u4u4u4s4s4uaoapaqai9A9B9B9A9A9B9B9A9A9B9Bai9Aar9B9A9A9A9A3b3b9B9B9A9A9B9B9A9A9A9A9A9A9B9C9A9A9B9B9A9A9B9B9B9B9B9B9Aai9B9C9A9A9B9B9A9A2S3a", +"aiai9C9Caiai2o2oaias9C9Caiasatau3v2Pavawaxay9GazaAaBaCaDaEaFaGaHaIaJaKaLaMaNaOaPaQaRaS9&aTaUaVaVaWaXaYa3aZa&b b0b1a9b2b3b4avb5b6ataf9C9C9Aai9C9Caiai9Cafaias9C9C9Aai9B9Caiai9C9Basb7b8b99Aai9C9Caiai9C9Cbaba9C9Caiaibbbbaiai9C9Caiai9C9Caiai9C9Casasalbcbd4u4v4v4u4u4u4u4u4u4s4s4vbebfbgaiaiafafai9A9C9B9Aai9C9Caiai9C9Caiaiaiai2n2p9C9Casai9C9Caiaiaiasaiai9C9Caiai9C9Caiai9C9C9C9C9C9Caiai9C9Caiaiaf9Caiai2o2o", +"bhbhbibibhbhbibibhbhbibibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb&c c0c1ayc2c3c4c5c6c7bjbjbhbhbibjbhbhbibibhbhbjbiafafc8c8c9cacbcccdcecfcgchchcici60602Tcjckbhbibibhbhchchbhbhbibibhbhclclbhbhcmcmcncncocpcq4u4u594v4u4u4u4s4s4u4ucrcscmcmbjbibibictctcucvcwcxcyczcAcBcCc9asasafafbhbhbibibhbhbibibibicmcmcDcEcFcobhbhbibibhbhbibibibjcGcHcIcJcKcLasasbibicMcMclcl", +"ckckbjbjckckbjbjcNckbkbkblbmcOcPcQcRcScTcUcVcWcXcYcZc&c&d d0d1d2d3aMbGbGd4d5d6d7d8d9dadbdcdddedfdgdhbVdidjdkdldmdndodpc1dqdrdsc4dtc6bkbkckckbjbjckckbjbjckckbjbjaududvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdL9EckckbjbjckckdFdFckckbjbjckckdMdMckckdNdNdOdPdQdRdS4u4u594u4u4u4u4s4s4u4udTdUdNdNbkbjbjbjdVdWdXdYdZd&e e0e1e2e3e4e5e6atauckckbjbjckcNbjbkbkbkdNe7e8e9eaebckckbjbjckckbjbjbkecedeeefegeheieje6bjbjekeldMcl", +"ememenenememeoeoepeqerereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLbHbHeMeNeOePeQeReSeTeUeVeWeXeYeZe&f f0f1f1f2f3f4f5f6f7f8f9cTfaevfbfcerfdememeoeoemfeeoeoememfffgfhfifjfkflfmfnfofpfpfqfrfsftfufv6CfwfxfyfzfAeoeoememfBfBememeoeoememeoeoememeoeoememfCfDfmfmfmfEfmfmfFfGfHfHfmfIfJfKfdeofLfMfNfOfPfQfRfnfofofmfEfEfEfEfSfTfUfVc6ememfWfWememfXfYfZf&g g0g1g2g3g4ememememfVfVeoeog5g6g73Efmfmg8g9ga2Reoeoepepeoeo", +"gbgbgcgcgbgberergdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgzbHbHgAgBgCgCgDgEgFgGgHgIgJgKgLgMgNgOf0f1gPf0gQgRgSgSgTgUgVf9gWfagXghgYgZgbgberergbgbererg&h h0h1h2h33E3E3E3Eh4h5h6h6h7h8h9ha3E3E3E3Ehbhchdhderergbgbhehegbgberergbgberergbgbererg&gbhfhghbfEhb3EfEhbhhhhfphifEhjhkhlererhmhnfOhodS3Eh4h5h4h43E3Ehbhb3E3Ehphqhrhsgbgbhthug&gbhvhwhxhyhzhhh4h4hAhBgbgbgbgbhshsererhChD3E3E3E3EhEhFhGhGererhHgderer", +"hIhIhJhJhKhK0Z0ZhLhMhNhNhOhPgWhQhRhShThUhVhWhXhYhZh&i i0i1i2eLi3i4i4i5i6i7i8i9iaibeMicidieifigihbVdif1gPiigPijikiliminioipiq0R1biris0X1eithIhJhJiuhIhJhJiviwixdSdS3EiyiyiziAdSdSdSiBiCiBiDiEiFiGiHiIiJiKiLiMiNiOhIhIhJ0ZhIhIhJhJhIhIhJhJhIhIhJiPiQiR4ziSdSdSiB3EiTiTdSdSiUiViWiXiYiZi&j j0aoj1iTdSiBiKiBiVj2j3j4j5j6j7iKizj8j9jaivivjbjcjdjejfjgjhdSiViViViUjijjithIhJiPhIitjkjljmjniziziB6CjojphIhIhJhJhIhIhJhJ", +"itit0Z0Zjqjr1e0vjsjtjujvjwjxjyjzjAjBjCjDhWjEjFjGjHjIi i0i1jJgzi3jKjLjMjNjOjPjQjRjSjTjUjVifjWjXjYbVdif1gPiiiijZj&k k0k1k2k3k4k51ak6k7k80Xk9it0Z0Zitit0Z0ZhLjskakb9v9vkckckdke9v9viLiLkffwkgkhkikjkkklkmkniLkokpkqitit0Z0Zitit0Z0ZhIit0Z0Zitit0Z0ZiQkriM9v9v9v9v9vksks9viLktkukvkwgZkxkykzfI9vkskA9viLiL5VkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTksiJ9vkuktktktkUkVitit0Z0Zitk9kWkXkYiLkJkdkZkak&l ititl0l0itit0Z0Z", +"l1l1l2l2l3l3l4l5l6l7l8l9lalblcldlelflglhliljlklllmlnloi0lplqgzi3bHlrlsltlulvlwlxlylzlAlBlClDlEbVbVdif1gPlFiilGlGlHlIlJlKlLlMlNlOkOlPlQl5lRl3lSlSlTl1l2l2l1l1lUlViLknknkblWlWiLknfllXlYlZl&m m0m0l1l1m1m2kbkbm3m4lTl1l2m0l1l1l2l2m5m5l2l2l1l1m6m6m7m8m9maknkbktktknknkbknknmbmcmdmemfhjflmgmalWmhmhmhmimjmkmll2l2l1l1mmmnmompmqmrmsmtmumvknknlWlWiLknkbkbkbkbmwmxl1l1l2l2mymzmAmBkbkbmamCmDmEl2l2l1l1l2l2l1l1l2l2", +"l3l3m0l4lRmFmGmHmImJl9mKlbmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm&lqgzi3bHgzn n0n1n2n3n4n5n6n7n8n9nanbbVbVdif1f1lFiilGlGf0ncndlJnenfngnhninjnkmHmFlRnlnll1l3m0m0lRl3nmnnkfkfkfkfnonokfnpkfnqnrnsjshMm0l4lRlRntnukfnvnwnxl3l3m0l4lRl3l4m0nynyl4m0lRl3nznAnBnCnDnEkfkfnonFkfkfkfkfnpbenGnHnInJnpnpnEnDnonononKnLnMnNnNm0l4l3lRnOnPnQnRnSnTnUnVnvnvnpkfnWnoflkfkfnpnpnpnXnYl3l3m0l4eunZn&o npnpo0o1o2o3l4m0l3l3m0m0l3l3m0m0", +"o4o4o5o6o7o8o9oaobocmKodoeofogohoiojokolomonooopoqorosotouovowoxbGeMoyozoAoBoCoCoDoEoFoGoHoIoJoJdidigPoKoLoMfG7k7koNoOoPoQoRoSoToUmKoVoWoXo8oYoZo4o4oYoZo6o5o&p jhjhjhp0jhjhjhp0p1p2oYoZp3o4oYoYp4p4p5p6jhp0p7p8oap9oYoYp9o7oYoYo4o4papao4o4pbjw4zpcp0jhpdpepepejhp0pfpgphpipjpkpl5Vp0p0jhjhp0p0pmpnpoppo4o40808o4o4pqprpsp0ptpupvpwp0p0jhp0p0jhpxjhjhp0p0jhpypzp3o4o4o4pApBpC5Vp0pDpEpFo4p3oZpGp4p4oYoYo4o4oYoY", +"p3p3o6pHoXo9oWoVpIpJpKpLpMpNpOpPpQmSpRpSpTpUpVpWpXpYpZp&q q0q1oxbGeMq2q3q4oB9dq5q6q7q8q8q9q9qaqbdiqcgPoKoLoM7k4s4s4sqdqeoQqfqgqhqiqjqkoVoaoXqloZp3p3oZoZo6pHqmqn5a5ako5a5a5a5a5aqoqpoZoZp3p3oZoZqqqqqrqsjnjnqtquqvo7oZoZo8o7oZqlp3p3papap3qwqxqyqz5ajn5aqAqAqAqA5a5aqBqCqDqEqFqGqH5a5ajnjn5a5aqIqJqKqLqLp3qw0s0sp3p3qMqNqOjnqPqQqRkwjnjn5a5ajn5ako5ajn5ajn5aqSqTp3p3p3qUqVqW5ajniSqXqYqZp3p3oZoZqqqqoZoZp3p3oZoZ", +"q&q&r r0r1r2r3r4r5r6r7r8r9rarbrcrdrerfrgrhrikYrjrkrlrmrnrorprqrreMeMrsoCoC9drtrtrurvrw9&rxryrzrArBrCgPoKiiii4t4s4v4vrDrErFrGrHrIrJrKrLrMrNrOr0r0q&q&r r0q&q&rPrQrRrRrRrRrRrRrRrSrTrUr0r q&rVr0r q&rWrXrYrZrRrRr&s pHr r s0s0s1s1s2s3s4s4q&q&s5s6s7s8rRrRrZrRrRrRrRrZs9sasbscsdserZrRrRrRrRrZrRsfsgshr0r q&rVsisjq&q&skslrmrRsmsnsospsqsrrRrRrRrRrRjnrRrZssstsusvq&q&swsxqOrZs8syszsAr r0q&q&r r0q&q&r r q&q&r r ", +"rVrVsBsBsCsDsEsFsGsHsIsJsKsLsMrcsNsOsPsQrhsRrSsSsTsUsVsWsXsYsZs&eMeNt oCoC9drtrtt0t1t2t3t4t5t6t7t8t9f1oKiiii4t4s4v4vtatbtctdtetftgthtitjtkrNtlsBrVrVr0sBtmrVcctnfIfItofIfIfIfItptqtrr0r0rVtmr0r0rVq&tsttlXlXtotutvtwr0r0txtytztAtBtCtDtErVrVtFtGsysyfIfIlXfIfIfIlXfItHtIsctJtKtLfIfIfIfIfIfItMtNtOscsBsBtmrVsjsjtmrVtPtQtRpDtStTtUtVtWtXfIfItofItofIfIlXtYtYsutZrVrVt&u iSlXsyu0u1u2sBsBrVrVr0r0rVrVr0r0rVrVr0r0", +"u3u3u4u5u5u6u7u8u9uaubucudueufuguhuipciCujukulumunuoupuqurusutuueMeNuvuwuwuxuyuzuAuBuCuDuEuFuGuHuIuJgFuKlGlG584t4s4tuLuMuNuOuPuQuRrJuSuTuUuVuWuWu3u3uXuXuYuZu&v iSiSiSv0v1v1v2v3v4sBuXu4u3u3uXuXv5v6jmv7v0v0v8v9vavbvcvdvevfvgvhvivjvkvlvmvnvoqHvpvqiSiSiSiSiSiSiSvrvsvtvuvvvjv0iSiSiSv0v0v0vwvxuZuZuXuXu3u3uXuXvyrOvzvAvqvBvCvDvEu3vFvGhcv0vqvqvHiSvIvIv0v0qSvJk6vKvLvMvpvpvNvOvPvavQvQvRu3vSuXu3u3uXuXu3u3uXuX", +"vTvTvUu6vVvWvXvYvZv&w w0udw1w2uguhw32&w4w5w6w7w8w9vBwawbwcwd9cuueNeNuwuxuwwegzwfwgwgwhwiwjwkwlwmwnwowpwqwrws584s4t4twtwuwvwwwxwywzwAwBuSwCuUwDwEwFvTvUu5wGwGwHv pCpCpCwIwJwKwLwMwNwNu5vUvTvTu5u5wOwPwQwIwIwIwRwSuWwTwUwVwWwXwIwIpDwYwZw&x vsx0pCx1x2pCpCpCpCpCwIulx3x4x5x6x7x8wIpCpCpCwIpDpCx9xawGxbu5u5vTvEu5u5xcxdxexfqCxgxhxiwFvTxjxkxlpCx1x1pCpCxmxnwIwIxoxpxqxrxsx1x1xtxuxvuWuWxwxwvTvTu5u5vTvTu5u5vTvTu5u5", +"xxxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOw7xPx8xQwQxRxSxTxUxVxWxXgAeMeNxYlqxZx&y y y0y0y1y2y3y4y5y6y7y8y9yaybycydydyeyfygyhyiyjykylymynyoypyqyrysytyuxxyvyvywyxyyyzqHqHqHyAyAqHtGyBxxxxxxxxxxxxyCyCyDyEyAyAyAyAyFyGyHyIyJqIyKyLyMyNyOyPyQyRySyTyAyAqHqHqHqHqHqHyUyVyWnGxyxyyXyYyZqHqHqHqHyAyAqHy&ccz z0yvyvxxxxyCyCz1eez2z3z4z5yvyvz6z7xbz8z9zazbyKqHzcqHyAyAyAkUzdzezfqHqHzgzhziwExbxbzjzjxxxxyvyvxxxxyvyvxxxxyvyv", +"zkzkytysxBzlzmznzozpzqzrzsztzuzvzwzxzyx0xOzy6CuqzzzA4xujzBzCgAgAi2zDt7zEzFzFzGrczHzIzJzKzLzMzNzNzOzPzQzRzSzTzUoAzVzWzXzXzYzZz&y7A ynA0A1yqxCA2A3A4zkxzxzA5A5A6A7A8A8A8yZyZA8A9AazkzkzkyuzkzkwDAbAcAdyZyZA8yZAeAfAgAhyZyZAiAjwSAkAlAmAnAoApAqiCA8A8A8A8A8yZA8ArjfAsAtytxzAuAvyZyZA8A8A8A8yZyZAwAxAyAyytytA4A4AzAAABACo0ADAEAFytytAGAHAIAIAJz9AKqCA8A8A8yZyZyZALAMANAOiCwYAPAQAzwDAIAIARARyuzkxzxzzkzkxzxzzkzkxzxz", +"ASATAUAVAWAXAYAZA&B B0B1B2B3B4B5lkB6B7B8B9BaBbBcBdBeBfBgBhBhBiBjBkBlBmBmBnBnBoBpBqBrBsBtBuBvvvBwBxByBzBABBBCBDBEBFBGBFBHBIBJBKwxBLtDBMBNBOBPBQBRAUBSBSBSATATBTBUBVBVBWBWBXBYBZB&AHAGC C ATATC0C1C2C3C4C5BXcqC6C7C8C9BWBXCaCbCcCdCeCfCgChCiBXBXBWs7CjBXBXBXCkClCmASCnAUBSCoCpC4C3tRBWBWBXBWBXCqCrAzAzBSAUCsu7fNCtCuCvCwCxCyCzBSBSATATBSAUCACBCCCDBWBWBXBXBXBXCECFCGCvCHCICJCsAUBSATATCKCKASATBSBSATATBSBSATATBSBS", +"CnCnAVAWCLAXAYAZCMB CNB1COCPCQCRCSCTCUCVCWCXCYCZC&D uuD0D1D2D3D4D5D5D6D7D8D96&DaDbDcDdDeDfDgDhDiDjDkDlDmDnzQDoDpDqDrDsDtDuDvDwDxDyDzDABNDBBPBQBRAUAUAUAUCnCnDCDDujujpcj7j7upDEDFDGDGDHDHDICnDJDKDLoqDMoqpcfwDNDODPDQj7pcDRDSDTDUDVDWDXDYj7j7j7mbDZujj7j7D&E E0E1CnCnAVAUE2E3DMDMmbj7j7pcj7j7E4E5E6E7AUAUCsE8E9EaEbEcEdEeCzvWAVAUCnCnAVAUEfEfEgEhvhj7j7pcpcpcEifsEbEjEkElCsCsAUAUDICnEmEmCnCnAUAUCnCnAUAUCnCnAUAU", +"EnEnEoEpEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGgzd4lpEHEIEJEKELEMENEOB5EPEQERESETEUEVEWEXEYEZE&F F0F0F1F2F3F4F5F6F7F8F9FaFbFcFdFeFfFgFhFiFjFkFlEpEpFmEnFnEoFoFpFqFrrjkYmCmCkYFsFtFuFvEnFnFnFwFxFyFzkYrSkYkYkYFAFBzlFCFDFEFEulFFFGFHpsFIkYrSmCFEFJFKkYkYFLFMFNFOFnEoEnEnFnFn0FFPFQFJkYrjkYkYrSkYFRFSFTFUFVFWFXFYkZrSFZqDF&xCFmEnFnFnG G G0G1EnEnFoG2zhG3rSkYG4G5psG6kYfxG7uTFmEnFnFnG8G8FnFnEnEnFnFnEnEnFnFnEnEnFnFn", +"FmFmEoEpEqG9GaGbEtEuEvGcGdGeGfGgGhx&GiGjGkGkGlGmEHEHGnGoGpGpGqGrGsGtGuGvGwGxGyGzGAGBGCGDGEGFGGGHGGGHGIGJGKGLGMGNGOGPGQGRGSqfGTGUGVGWGXGYFkGZEqEpFmFmEoEoFoG&ix2&H 2&H0H0H1ixH2H3FmFmEoEoFwH4H5H02&H12&2&kIkHH6H7H8H9HaHaH1H12&H12&2&2&2&H0H0HbHc2&HdHeHfHgHhEpEoHiFmEoEoHjHkHlHc2&2&2&H12&H1HmHmHnHoHpHqHrHsFIHtHuHvzmyqHiFmEoEoHwHxHyHyFmFmFoHzHAHBum2&yVyVHC2&fvFqHDu9HiFmEoEoHEHEEoEoFmFmEoEoFmFmEoEoFmFmEoEo", +"HFHFHGHHHIHJHKHLFiHMHNFgHOHPHQHRHSHTHUHVrzloi i0HWHXxZHYHZH&I I0I1I2I3I4I5I6FeI7I8I9IaIbIcIdIeIeIfIfIdFgIgIhIiIjIkIlIlIkImInIoIpHMIqIrIsItIuIvHHIwIwHGHHIxIyIzIAIBIBIBIAICcsHGHHIwIwHGHGIDtQaoulIEIFIGIHIIIJHGHHtVIKILulwYwYIAIAwYwYIMIMwYulwYINyIIOIPIQIwIwHGHGIwIwHGHGHGIRISITFIulIBIBwYwYululwYwYulwYIUIVIKIWIXEqHGHGIwIwHFHFIwIwHiIYIwIwIZI&J J0J1J2wYulwYrmJ3J4HGHGIwIwHGJ5J6J6HGHGIwIwHGHGIwIwHGHGIwIwHGHG", +"J7J7IvIuJ8J9JaHLJbJcGVFgJdJeJfJgJhJiHVHVrzloi i0HWHXJjJkCQJlJmJnJoJpJqJrJsJtJuJvJwJxEwJyJzJAJBJBJCJDJAJzJEJFGGJGJHJIJJJKJLJMIpJNJcIqIrJaItIuIuIvHIHIIvIvJOJPJQJRJSJRJRJRJTh8IvIvHIHIIvIvJUJVJWJXJYJZJ&K K0K1IvIvsoK2K3K4K5CkJRJSCkkZK6K7fwyJK8kHK9KaKbKbJ8HIIvIvHIHIIvIvIuIvKcKdKeupKfJRkZkZkZkZCkCkD&HtKgKhKiKjG9KkIvIvHIHIJ7J7HIHIGZGZHIHIKlKlKmKmKnKoCkkZKpKqKrKsIvHHHIHIIvIvKtKtIvIvHIHIIvIvHIHIIvIvHIHIIvIv", +"KuKuKvKwKxKyKzKAKBKCKDKEKFKGKHKIKJKKHVryKLKMi i0lplpKNKOKPKQKRKSKTKUKVKWKXKYKZK&L L0L1L2L3L4L5L5L6L7L8L9LaLbLcLdL0L LeLfKELgL2LhLiLjLkKzLlLmLnKvLoLoKvKvLpLqLrLsLtLuLvLwLxLyLnKvKuKuKvKvLzLALBLCLDKxKvKvLmKuKvKvKuKuLELFLGLHLILJLKqGLLtQLMLNLOLPKuKuLQKxKuKuLRLRKuKuKvKvKuKuKxLSLTFNLULVLWLXLYEeLZL&M M0M1M2KvKvKuKuKxKxM3M3KxKxM3M4KvKvKuKuKvKvM5M5M6M7KpKpM8kyKuKuKvKvKuKuKvKvKuKuKvKvKuKuM9M9KuKuKvKvKuKuKvKv", +"KuKuKvKvLQKyKzKAKBMaMbKEMcMdMeMfMgMhHVryKLKLi i0lpMiMjMkMlMmMnMoMpMqMrMsMtMuMvMwMxMyMzLhMAMBMCMCMDMEMFL5MGMHMbMIMJMyMKMLLgMbLhMMLjLkMNKzLmLmKvKvMOLoKvKvMPMQMRMSMTMUMVMWMXMYKvLnKuKuKvKvMZMZLPLPLQLQLnKvKuKuKvKvKuKuM&M&N N0N1N2N3qFN4N5nhnhLPN6LmKuKxKxKuLmLRLRKuKuKvKvLmKuKxKxN7N7N8N9NaNbNcNdNeNfNgNgNhM2LnKvKuKuKxKxM3M3KxKxM3M3KvKvKuKuKvKvM5NiNjNkw8hjNlNmLmKuKvKvKuKuKvKvKuKuKvKvKuKuM9M9KuKuKvKvKuKuKvKv", +"NnNnNnNoNpNpNqNrNsNtNuNvNwNxNyNzNABmHVryNBi NCNCeKgzNDNENFNGNHNINJNKNLNMNNNONPNQNRNSNTNUNVNWNXNYNZN&O O0O1O2NTO3O4O4O5O6O6O7NtO1NWO8NYO9NpNnNnNnNnNnNnNnNnNnNnNnNnNnNnNnNnNnNnNnNnNnOaOaNnNnNnNoNnNnNnNnNpNpNnNpObObObObOcOdNnNnNpNnOcOdNnNoNnNnNnNnNpNnNpNnNnNnNnNnNpNnOeOfNpNnNnNnNnNnNnNoNnNpNnNnNpNnNpNnOdOdNnNnNnNnNnNnmLOgOhOiOjOkOlOmOnOnOoOpbdOqOrOsOtOuOdOdNnNpNnNnNnNnObObNnNnNnNnNnNnNnNnNnNnNnNnNnNn", +"OvOvOvOvOvO8OwOxO2OyNuNvK&OzOAOBOCODOEOFNBi NCNCeKeLOGOHOIOJOKOLOMONOOOPNOLCNQOQORNSNTNUOSNVOTOTOUOUO0OVO2NtNTNTOWO4O6O3O3O7NtO2OSNVNXNYOvOvOvOvOvOvOvOvOvOvOvO8O8OvOvOvOvO8OvOvOvOvOXOXOvNpOvOvOvOvOvOvOvOvOvOvNYO9NYO9OYOYOvO8OvOvOYNZO8OvO8OvOvOvO8OvOvOvOvOvOvOvOvOvOZOZOvOvOvOvO8OvOvO8OvOvOvOvOvOvOvOvOYOYOvOvO8O8O8OvO&P P02gP1P2P3P4P5P6P7P8up3 P9PaPbPbOYOYOvOvOvOvOvOvO9O9OvOvOvOvOvOvOvOvOvOvOvOvOvOv", +"PcPcPdPdPePePfPgPhPiPjPkPlPmPnPoPpPqrdPrNBi i0i0HXHXPsPtPuPvPwPxPyNLPzPAPBPCPDPEPFPGPHPhPIPIPfPfPJPJPgPgPhPHPHPHPKPLPMPMPFPGPNPOPIPPPgPdPePePdPdPJPePfPdPePQPdPdPePJPdPdPePePdPfPQPePRPRPJPePdPdPePePdPdPPPSPTPdPUPUPdPdPVPVPPPVPePePVPVPePePdPfPcPcPRPRPePePdPdPePePdPdPePePdPdPePePWPRPePePdPdPePePdPdPePePdPdPePePRPWPXPYFqPZrnP&vhQ Q0Q1Q2Q3Q4Q5Q6Q7Q8Q9PfPdPePePdPdPePePdPdPePePVPVQaQaPdPdPePePdPdPePePdPd", +"QbQbPgPgQcQcPgPOPHQdPjQePlQfQgQhQiQjQkQli i i0lpHXd4QmQnQoQpQqQrQsQtQuQvQwQxPEQyPGQzQAPhPhPhPOPOQBQBPgPOPhPhPHPHQCQCQDQEQzQzPNPOPhPhPgPgPJQcPgPgQcQcPgPgQcQcPOPgQcQcPOPgQcQcPgPOQcQcQFQFPJQcPgPgQcQcPgPgPIPIPgPgPUQGPfPgPIPIPIPIQcQcPIPIQBQcPgPgQHQbQFQFQcQcPgPgQcQcPgPgPJQcPgPgQcQBQFQFQBQcPgPOQcQcPgPfQcQcPgPgQcQcQFQFQIQJQKpsQLplqOpsQMQNQ3QOQPQQQRQSQTMaPOPgQcQcPgPgQcQcPfPgQcQcPIPIQUQUPgPgQcQcPgPgQcQcPgPg", +"QUQUQUQUQUQUQVQVQAQdQWQXQYQZQ&R R0R1R2R3NBi i0lpeLeKBmR4R5R6R7R8QfR9RaRbRcRdPiQAReReQVQVQUQURfRfQUQUQUQUQVQVReReReRePNPNReQVQVQVQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQURgRgQUQUPJQcQVQVRhRiRjQPRkRlRmRnRoRpRqRrRsRtRuMAQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQU", +"QUQUQUQURvQUQUQVPHPiQWRwRxRyRzRARBRCRDREi i i0lpeLeKRFRGRHR6RIRJRKRLRMRNROQdQAPHQVQUQUQUQUQURfRfQUQUQUQUQUQUQUQUQVQVPOPOQVQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQURgRgQUQUQcQcQVQURPRQRRQPRSRTRURVRWRXRrRYRZR&MAL4QUQUQURvQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQU", +"PgPgPgPgPgPgPgPOPHPiS S0S1S2S3S4S5S6S7S8OFS9SaSbScKKSdSeSfSgShSiSjSkSlSmSnSoPNPOPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPfPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgQUQUPOPgPgPgSpSqRrpsSrSsStSuSvpsSwSxSyMMPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPg", +"PgPgPgPgPfPgPgPgPHQAS SzSASBSCS4SDSESFSGSHSISJSKSLSMSNSOSPSgSQSRSSSTSUSVSoSWPOPOPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgQUQUPfPgPgPgRhSXSYpsSZSZS&SZpsiMT T0MMT1PgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPg", +"POPOPOPOPOPOPOPOPNSWQyT2RbT3T4T5T6T7T8T9TaugTbTcTdTdTeTfTgThTiTjTkTlTmSVTnToPNPOTpTpQVQVPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPNPOTqTrTsTtTuTvdUTwTxTyTzTAPOPNPOPOPNPNPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPO", +"POPOPOPOPOPOPOPOPNSWTBTCRNTDTETFTGTHTITJTKTKTLTLTMTNTOTPTQTRTSTTPzTUTmSVTVToPNPOTpTpQVQVPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOTWTqTXTYRTTZT&U U0U1TAU2POPOPOPOPNPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPO", +"U3U3U3U3U3U3U4U4U5U6U7U8TmU9UaUbUcUdUeUfUgT9UhSdUiUjI1UkUlUmUnUoUpRMUqUrTVToU5U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U4U4U3U3U3U3U3U3U3U3U3U3U3U3U3U3U4U4U3U3U3U3U3U3U3U3U3U3U3U3U3U3U4U4U3U3U3U3U3U3U3U3U3U3U3U3U3U3U4U4U3U3U3U3U3U3U3U3U3U3U3U3U3U3U4U4U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U3U5U3U3U3U5U3UsU7U3U3U3U3U3U3TpUtU3UuU3U3U3UuU3U3U3U3U3U3U4U4U3U3U3U3U3U3U3U3U3U3U3U3U3U3U4U4", +"U5U5U5U5U5U5UvUvU5UwU7U8SmUxSTUyUzUAUBUCUDUEUFUGUHUIUJUKULUMUNUOUPUQURUrTVToU5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5UvUvU5U5U5U5U5U5U5U5U5U5U5U5U5U5UvUvU5U5U5U5U5U5U5U5U5U5U5U5U5U5UvUvU5U5U5U5U5U5U5U5U5U5U5U5U5U5UvUvU5U5U5U5U5U5U5U5U5U5U5U5U5U5UvUvU5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U5U3U5U5U5UwUwUwU5USUSUwU5U5UwUwU5UtUtU5U5U5U5U5U5U5U5U5U5U5U5UvUvU5U5U5U5U5U5U5U5U5U5U5U5U5U5UvUv", +"UTUTUTUTUTUTUTUTUTUUUVUWUXUYUZU&V V0V1V2V3V4V5V6V7V8V9VaVbVcVdVeVfVgUXVhViUUUTUTVjVjUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTVkVkVlVlU3U3UTUTVlVlVmVmUTUTVkVkUTUTVlVlUTUTUTUTUTUTVjVjUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUTUT", +"UUUUUUUUUUUUUUUUUUVnVoUWUXVpVqVrVsV VtVuVvVwVxVxVyVzVAVBVCVDVEVFVGVHUXVhViVnUTUUVIVIUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVJVJUsUsU5U5UUUUUsUsVKVKUUUUVJVJUUUUUsUsUUUUUUUUUUUUVIVIUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU", +"KCKCMGMGMGMGMGMGKCKCMHLaVLVMVNLdVOVPVQVRVSVTIjVUVVVWVXVYVZV&W W0LcLgLaL3W1KCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGW2W2MGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMGKCKCMGMG", +"W3W4W5W5W4W5W3W6W6W7W8W9WaWbWcWdWeWfWgWhWiWjWkWlWmWnWoWpWqWrWsWtWuWvWwWxWyWzWAWBWCWDWEWFWGWHWIWJWKWLWMWNWOWPWQWRWSWTWUWVWWWXWYWZW&X X0X1X2X3X4X5X6X7X8X9XaXbXcXdXeXfXgXhXiXjXkXlXmXnXoXpXqXrXsXsXtXtXuXtXvXvXvXuXuXuXwXxXyXzXAXBXCXDXEXEXFXGXHXIXJXKXLXMXNXOXPXQXRXSXTXUXVXWXXXYXZX&Y Y0Y1Y2Y3Y4Y5Y6Y7Y8Y9YaYbYcYdYeYfYgYhYiYjYkYlYmYnYoYpYqYrYsYtYuYvYwYxYyYzYAYBYCYDYEYFYGYHYIYJYKYLYMYNYOYPYQYRYRYSYTYTYUYUYV"}; + diff --git a/Source/Plugins/Plugin_nJoy_SDL/Src/Rumble.cpp b/Source/Plugins/Plugin_nJoy_SDL/Src/Rumble.cpp index cd0eb21efd..7f6bcdd726 100644 --- a/Source/Plugins/Plugin_nJoy_SDL/Src/Rumble.cpp +++ b/Source/Plugins/Plugin_nJoy_SDL/Src/Rumble.cpp @@ -1,380 +1,380 @@ - -// Project description -// ------------------- -// Name: nJoy -// Description: A Dolphin Compatible Input Plugin -// -// Author: Falcon4ever (nJoy@falcon4ever.com) -// Site: www.multigesture.net -// Copyright (C) 2003 Dolphin Project. -// - -// -// Licensetype: GNU General Public License (GPL) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 2.0. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. -// -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ -// -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ -// - -// Include -// --------- -#include "nJoy.h" - - -#ifdef RUMBLE_HACK - -struct RUMBLE // GC Pad rumble DIDevice -{ - LPDIRECTINPUTDEVICE8 g_pDevice; // 4 pads objects - LPDIRECTINPUTEFFECT g_pEffect; - DWORD g_dwNumForceFeedbackAxis; - DIEFFECT eff; -}; - -#define SAFE_RELEASE(p) { if (p) { (p)->Release(); (p)=NULL; } } - -BOOL CALLBACK EnumFFDevicesCallback(const DIDEVICEINSTANCE* pInst, VOID* pContext); -BOOL CALLBACK EnumAxesCallback(const DIDEVICEOBJECTINSTANCE* pdidoi, VOID* pContext); -void SetDeviceForcesXY(int pad, int nXYForce); -HRESULT InitRumble(HWND hWnd); - -LPDIRECTINPUT8 g_Rumble; // DInput Rumble object -RUMBLE pRumble[4]; // 4 GC Rumble Pads - -////////////////////// -// Use PAD rumble -// ¯¯¯¯¯¯¯¯¯¯¯¯¯¯ - -void Pad_Use_Rumble(u8 _numPAD) -{ - if (PadMapping[_numPAD].rumble) - { - if (!g_Rumble) - { - // GetForegroundWindow() always sends the good HWND - if (FAILED(InitRumble(GetForegroundWindow()))) - PanicAlert("Could not initialize Rumble!"); - } else - { - // Acquire gamepad - if (pRumble[_numPAD].g_pDevice != NULL) - pRumble[_numPAD].g_pDevice->Acquire(); - } - } -} - -//////////////////////////////////////////////////// -// Set PAD rumble. Explanation: Stop = 0, Rumble = 1 -// ¯¯¯¯¯¯¯¯¯¯¯¯¯¯ - -void PAD_Rumble(u8 _numPAD, unsigned int _uType, unsigned int _uStrength) -{ - if (!PadMapping[_numPAD].enable) - return; - - Pad_Use_Rumble(_numPAD); - - int Strenght = 0; - - if (PadMapping[_numPAD].rumble) // rumble activated - { - if (_uType == 1 && _uStrength > 2) - { - // it looks like _uStrength is equal to 3 everytime anyway... - Strenght = 1000 * (g_Config.RumbleStrength + 1); - Strenght = Strenght > 10000 ? 10000 : Strenght; - } - else - Strenght = 0; - - SetDeviceForcesXY(_numPAD, Strenght); - } -} - -// Rumble stuff :D! -// ---------------- -// - -HRESULT InitRumble(HWND hWnd) -{ - DIPROPDWORD dipdw; - HRESULT hr; - - // Register with the DirectInput subsystem and get a pointer to a IDirectInput interface we can use. - if (FAILED(hr = DirectInput8Create(GetModuleHandle(NULL), DIRECTINPUT_VERSION, IID_IDirectInput8, (VOID**)&g_Rumble, NULL))) - return hr; - - // Look for a device we can use - if (FAILED(hr = g_Rumble->EnumDevices( DI8DEVCLASS_GAMECTRL, EnumFFDevicesCallback, NULL, DIEDFL_ATTACHEDONLY | DIEDFL_FORCEFEEDBACK))) - return hr; - - for (int i=0; i<4; i++) - { - if (NULL == pRumble[i].g_pDevice) - PadMapping[i].rumble = false; // Disable Rumble for this pad only. - else - { - pRumble[i].g_pDevice->SetDataFormat(&c_dfDIJoystick); - pRumble[i].g_pDevice->SetCooperativeLevel(hWnd, DISCL_EXCLUSIVE | DISCL_BACKGROUND); - // Request exclusive acces for both background and foreground. - - dipdw.diph.dwSize = sizeof(DIPROPDWORD); - dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER); - dipdw.diph.dwObj = 0; - dipdw.diph.dwHow = DIPH_DEVICE; - dipdw.dwData = FALSE; - - // if Force Feedback doesn't seem to work... - if (FAILED(pRumble[i].g_pDevice->EnumObjects(EnumAxesCallback, - (void*)&pRumble[i].g_dwNumForceFeedbackAxis, DIDFT_AXIS)) - || FAILED(pRumble[i].g_pDevice->SetProperty(DIPROP_AUTOCENTER, &dipdw.diph))) - { - PanicAlert("Device %d doesn't seem to work ! \nRumble for device %d is now Disabled !", i+1); - - PadMapping[i].rumble = false; // Disable Rumble for this pad - - continue; // Next pad - } - - if (pRumble[i].g_dwNumForceFeedbackAxis > 2) - pRumble[i].g_dwNumForceFeedbackAxis = 2; - - DWORD _rgdwAxes[2] = {DIJOFS_X, DIJOFS_Y}; - long rglDirection[2] = {0, 0}; - DICONSTANTFORCE cf = {0}; - - ZeroMemory(&pRumble[i].eff, sizeof(pRumble[i].eff)); - pRumble[i].eff.dwSize = sizeof(DIEFFECT); - pRumble[i].eff.dwFlags = DIEFF_CARTESIAN | DIEFF_OBJECTOFFSETS; - pRumble[i].eff.dwDuration = INFINITE; // fixed time may be safer (X * DI_SECONDS) - pRumble[i].eff.dwSamplePeriod = 0; - pRumble[i].eff.dwGain = DI_FFNOMINALMAX; - pRumble[i].eff.dwTriggerButton = DIEB_NOTRIGGER; - pRumble[i].eff.dwTriggerRepeatInterval = 0; - pRumble[i].eff.cAxes = pRumble[i].g_dwNumForceFeedbackAxis; - pRumble[i].eff.rgdwAxes = _rgdwAxes; - pRumble[i].eff.rglDirection = rglDirection; - pRumble[i].eff.lpEnvelope = 0; - pRumble[i].eff.cbTypeSpecificParams = sizeof( DICONSTANTFORCE ); - pRumble[i].eff.lpvTypeSpecificParams = &cf; - pRumble[i].eff.dwStartDelay = 0; - - // Create the prepared effect - if (FAILED(hr = pRumble[i].g_pDevice->CreateEffect(GUID_ConstantForce, &pRumble[i].eff, &pRumble[i].g_pEffect, NULL))) - continue; - - if (pRumble[i].g_pEffect == NULL) - continue; - } - } - - return S_OK; -} - -void SetDeviceForcesXY(int npad, int nXYForce) -{ - // Security check - if (pRumble[npad].g_pDevice == NULL) - return; - - // If nXYForce is null, there's no point to create the effect - // Just stop the force feedback - if (nXYForce == 0) { - pRumble[npad].g_pEffect->Stop(); - return; - } - - long rglDirection[2] = {0}; - DICONSTANTFORCE cf; - - // If only one force feedback axis, then apply only one direction and keep the direction at zero - if (pRumble[npad].g_dwNumForceFeedbackAxis == 1) - { - rglDirection[0] = 0; - cf.lMagnitude = nXYForce; // max should be 10000 - } - // If two force feedback axis, then apply magnitude from both directions - else - { - rglDirection[0] = nXYForce; - rglDirection[1] = nXYForce; - cf.lMagnitude = 1.4142f*nXYForce; - } - - ZeroMemory(&pRumble[npad].eff, sizeof(pRumble[npad].eff)); - pRumble[npad].eff.dwSize = sizeof(DIEFFECT); - pRumble[npad].eff.dwFlags = DIEFF_CARTESIAN | DIEFF_OBJECTOFFSETS; - pRumble[npad].eff.cAxes = pRumble[npad].g_dwNumForceFeedbackAxis; - pRumble[npad].eff.rglDirection = rglDirection; - pRumble[npad].eff.lpEnvelope = 0; - pRumble[npad].eff.cbTypeSpecificParams = sizeof(DICONSTANTFORCE); - pRumble[npad].eff.lpvTypeSpecificParams = &cf; - pRumble[npad].eff.dwStartDelay = 0; - - // Now set the new parameters.. - pRumble[npad].g_pEffect->SetParameters(&pRumble[npad].eff, DIEP_DIRECTION | DIEP_TYPESPECIFICPARAMS | DIEP_START); - // ..And start the effect immediately. - if (pRumble[npad].g_pEffect != NULL) - pRumble[npad].g_pEffect->Start(1, 0); -} - -BOOL CALLBACK EnumFFDevicesCallback(const DIDEVICEINSTANCE* pInst, VOID* pContext) -{ - LPDIRECTINPUTDEVICE8 pDevice; - DIPROPDWORD dipdw; - HRESULT hr; - - int JoystickID; - - dipdw.diph.dwSize = sizeof(DIPROPDWORD); - dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER); - dipdw.diph.dwObj = 0; - dipdw.diph.dwHow = DIPH_DEVICE; - - g_Rumble->CreateDevice(pInst->guidInstance, &pDevice, NULL); // Create a DInput pad device - - if (SUCCEEDED(hr = pDevice->GetProperty(DIPROP_JOYSTICKID, &dipdw.diph))) // Get DInput Device ID - JoystickID = dipdw.dwData; - else - return DIENUM_CONTINUE; - - //PanicAlert("DInput ID : %d \nSDL ID (1-4) : %d / %d / %d / %d\n", JoystickID, PadMapping[0].ID, PadMapping[1].ID, PadMapping[2].ID, PadMapping[3].ID); - - for (int i=0; i<4; i++) - { - if (PadMapping[i].ID == JoystickID) // if SDL ID = DInput ID -> we're dealing with the same device - { - // a DInput device is created even if rumble is disabled on startup - // this way, you can toggle the rumble setting while in game - //if (PadMapping[i].enabled) // && PadMapping[i].rumble - pRumble[i].g_pDevice = pDevice; // everything looks good, save the DInput device - } - } - - return DIENUM_CONTINUE; -} - -BOOL CALLBACK EnumAxesCallback(const DIDEVICEOBJECTINSTANCE* pdidoi, VOID* pContext) -{ - DWORD* pdwNumForceFeedbackAxis = (DWORD*)pContext; // Enum Rumble Axis - if ((pdidoi->dwFlags & DIDOI_FFACTUATOR) != 0) - (*pdwNumForceFeedbackAxis)++; - - return DIENUM_CONTINUE; -} - -void PAD_RumbleClose() -{ - // It may look weird, but we don't free anything here, it was the cause of crashes - // on stop, and the DLL isn't unloaded anyway, so the pointers stay - // We just stop the rumble in case it's still playing an effect. - for (int i=0; i<4; i++) - { - if (pRumble[i].g_pDevice && pRumble[i].g_pEffect) - pRumble[i].g_pEffect->Stop(); - } -} - -#else // Multiplatform SDL Rumble code - -#ifdef SDL_RUMBLE - -struct RUMBLE // GC Pad rumble DIDevice -{ - SDL_Haptic* g_pDevice; - SDL_HapticEffect g_pEffect; - int effect_id; -}; - -RUMBLE pRumble[4] = {0}; // 4 GC Rumble Pads -#endif - - -// Use PAD rumble -// -------------- -bool PAD_Init_Rumble(u8 _numPAD, SDL_Joystick *SDL_Device) -{ -#ifdef SDL_RUMBLE - if (SDL_Device == NULL) - return false; - - pRumble[_numPAD].g_pDevice = SDL_HapticOpenFromJoystick(SDL_Device); - - if (pRumble[_numPAD].g_pDevice == NULL) - return false; // Most likely joystick isn't haptic - - if (!(SDL_HapticQuery(pRumble[_numPAD].g_pDevice) & SDL_HAPTIC_CONSTANT)) - { - SDL_HapticClose(pRumble[_numPAD].g_pDevice); // No effect - pRumble[_numPAD].g_pDevice = 0; - PadMapping[_numPAD].rumble = false; - return false; - } - - // Set the strength of the rumble effect - int Strenght = 3276 * (g_Config.RumbleStrength + 1); - Strenght = Strenght > 32767 ? 32767 : Strenght; - - // Create the effect - memset(&pRumble[_numPAD].g_pEffect, 0, sizeof(SDL_HapticEffect)); // 0 is safe default - pRumble[_numPAD].g_pEffect.type = SDL_HAPTIC_CONSTANT; - pRumble[_numPAD].g_pEffect.constant.direction.type = SDL_HAPTIC_POLAR; // Polar coordinates - pRumble[_numPAD].g_pEffect.constant.direction.dir[0] = 18000; // Force comes from south - pRumble[_numPAD].g_pEffect.constant.level = Strenght; - pRumble[_numPAD].g_pEffect.constant.length = 10000; // 10s long (should be INFINITE, but 10s is safer) - pRumble[_numPAD].g_pEffect.constant.attack_length = 0; // disable Fade in... - pRumble[_numPAD].g_pEffect.constant.fade_length = 0; // ...and out - - // Upload the effect - pRumble[_numPAD].effect_id = SDL_HapticNewEffect( pRumble[_numPAD].g_pDevice, &pRumble[_numPAD].g_pEffect ); -#endif - return true; -} - - -// Set PAD rumble. Explanation: Stop = 0, Rumble = 1 -// -------------- -void PAD_Rumble(u8 _numPAD, unsigned int _uType, unsigned int _uStrength) -{ - int Strenght = 0; - -#ifdef SDL_RUMBLE - if (PadMapping[_numPAD].rumble) // rumble activated - { - if (!pRumble[_numPAD].g_pDevice) - return; - - if (_uType == 1 && _uStrength > 2) - SDL_HapticRunEffect( pRumble[_numPAD].g_pDevice, pRumble[_numPAD].effect_id, 1 ); - else - SDL_HapticStopAll(pRumble[_numPAD].g_pDevice); - } -#endif -} - -void PAD_RumbleClose() -{ -#ifdef SDL_RUMBLE - for (int i=0; i<4; i++) // Free all pads - { - if (pRumble[i].g_pDevice) { - SDL_HapticClose( pRumble[i].g_pDevice ); - pRumble[i].g_pDevice = NULL; - } - } -#endif -} - -#endif // RUMBLE_HACK + +// Project description +// ------------------- +// Name: nJoy +// Description: A Dolphin Compatible Input Plugin +// +// Author: Falcon4ever (nJoy@falcon4ever.com) +// Site: www.multigesture.net +// Copyright (C) 2003 Dolphin Project. +// + +// +// Licensetype: GNU General Public License (GPL) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. +// +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ +// +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ +// + +// Include +// --------- +#include "nJoy.h" + + +#ifdef RUMBLE_HACK + +struct RUMBLE // GC Pad rumble DIDevice +{ + LPDIRECTINPUTDEVICE8 g_pDevice; // 4 pads objects + LPDIRECTINPUTEFFECT g_pEffect; + DWORD g_dwNumForceFeedbackAxis; + DIEFFECT eff; +}; + +#define SAFE_RELEASE(p) { if (p) { (p)->Release(); (p)=NULL; } } + +BOOL CALLBACK EnumFFDevicesCallback(const DIDEVICEINSTANCE* pInst, VOID* pContext); +BOOL CALLBACK EnumAxesCallback(const DIDEVICEOBJECTINSTANCE* pdidoi, VOID* pContext); +void SetDeviceForcesXY(int pad, int nXYForce); +HRESULT InitRumble(HWND hWnd); + +LPDIRECTINPUT8 g_Rumble; // DInput Rumble object +RUMBLE pRumble[4]; // 4 GC Rumble Pads + +////////////////////// +// Use PAD rumble +// ¯¯¯¯¯¯¯¯¯¯¯¯¯¯ + +void Pad_Use_Rumble(u8 _numPAD) +{ + if (PadMapping[_numPAD].rumble) + { + if (!g_Rumble) + { + // GetForegroundWindow() always sends the good HWND + if (FAILED(InitRumble(GetForegroundWindow()))) + PanicAlert("Could not initialize Rumble!"); + } else + { + // Acquire gamepad + if (pRumble[_numPAD].g_pDevice != NULL) + pRumble[_numPAD].g_pDevice->Acquire(); + } + } +} + +//////////////////////////////////////////////////// +// Set PAD rumble. Explanation: Stop = 0, Rumble = 1 +// ¯¯¯¯¯¯¯¯¯¯¯¯¯¯ + +void PAD_Rumble(u8 _numPAD, unsigned int _uType, unsigned int _uStrength) +{ + if (!PadMapping[_numPAD].enable) + return; + + Pad_Use_Rumble(_numPAD); + + int Strenght = 0; + + if (PadMapping[_numPAD].rumble) // rumble activated + { + if (_uType == 1 && _uStrength > 2) + { + // it looks like _uStrength is equal to 3 everytime anyway... + Strenght = 1000 * (g_Config.RumbleStrength + 1); + Strenght = Strenght > 10000 ? 10000 : Strenght; + } + else + Strenght = 0; + + SetDeviceForcesXY(_numPAD, Strenght); + } +} + +// Rumble stuff :D! +// ---------------- +// + +HRESULT InitRumble(HWND hWnd) +{ + DIPROPDWORD dipdw; + HRESULT hr; + + // Register with the DirectInput subsystem and get a pointer to a IDirectInput interface we can use. + if (FAILED(hr = DirectInput8Create(GetModuleHandle(NULL), DIRECTINPUT_VERSION, IID_IDirectInput8, (VOID**)&g_Rumble, NULL))) + return hr; + + // Look for a device we can use + if (FAILED(hr = g_Rumble->EnumDevices( DI8DEVCLASS_GAMECTRL, EnumFFDevicesCallback, NULL, DIEDFL_ATTACHEDONLY | DIEDFL_FORCEFEEDBACK))) + return hr; + + for (int i=0; i<4; i++) + { + if (NULL == pRumble[i].g_pDevice) + PadMapping[i].rumble = false; // Disable Rumble for this pad only. + else + { + pRumble[i].g_pDevice->SetDataFormat(&c_dfDIJoystick); + pRumble[i].g_pDevice->SetCooperativeLevel(hWnd, DISCL_EXCLUSIVE | DISCL_BACKGROUND); + // Request exclusive acces for both background and foreground. + + dipdw.diph.dwSize = sizeof(DIPROPDWORD); + dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER); + dipdw.diph.dwObj = 0; + dipdw.diph.dwHow = DIPH_DEVICE; + dipdw.dwData = FALSE; + + // if Force Feedback doesn't seem to work... + if (FAILED(pRumble[i].g_pDevice->EnumObjects(EnumAxesCallback, + (void*)&pRumble[i].g_dwNumForceFeedbackAxis, DIDFT_AXIS)) + || FAILED(pRumble[i].g_pDevice->SetProperty(DIPROP_AUTOCENTER, &dipdw.diph))) + { + PanicAlert("Device %d doesn't seem to work ! \nRumble for device %d is now Disabled !", i+1); + + PadMapping[i].rumble = false; // Disable Rumble for this pad + + continue; // Next pad + } + + if (pRumble[i].g_dwNumForceFeedbackAxis > 2) + pRumble[i].g_dwNumForceFeedbackAxis = 2; + + DWORD _rgdwAxes[2] = {DIJOFS_X, DIJOFS_Y}; + long rglDirection[2] = {0, 0}; + DICONSTANTFORCE cf = {0}; + + ZeroMemory(&pRumble[i].eff, sizeof(pRumble[i].eff)); + pRumble[i].eff.dwSize = sizeof(DIEFFECT); + pRumble[i].eff.dwFlags = DIEFF_CARTESIAN | DIEFF_OBJECTOFFSETS; + pRumble[i].eff.dwDuration = INFINITE; // fixed time may be safer (X * DI_SECONDS) + pRumble[i].eff.dwSamplePeriod = 0; + pRumble[i].eff.dwGain = DI_FFNOMINALMAX; + pRumble[i].eff.dwTriggerButton = DIEB_NOTRIGGER; + pRumble[i].eff.dwTriggerRepeatInterval = 0; + pRumble[i].eff.cAxes = pRumble[i].g_dwNumForceFeedbackAxis; + pRumble[i].eff.rgdwAxes = _rgdwAxes; + pRumble[i].eff.rglDirection = rglDirection; + pRumble[i].eff.lpEnvelope = 0; + pRumble[i].eff.cbTypeSpecificParams = sizeof( DICONSTANTFORCE ); + pRumble[i].eff.lpvTypeSpecificParams = &cf; + pRumble[i].eff.dwStartDelay = 0; + + // Create the prepared effect + if (FAILED(hr = pRumble[i].g_pDevice->CreateEffect(GUID_ConstantForce, &pRumble[i].eff, &pRumble[i].g_pEffect, NULL))) + continue; + + if (pRumble[i].g_pEffect == NULL) + continue; + } + } + + return S_OK; +} + +void SetDeviceForcesXY(int npad, int nXYForce) +{ + // Security check + if (pRumble[npad].g_pDevice == NULL) + return; + + // If nXYForce is null, there's no point to create the effect + // Just stop the force feedback + if (nXYForce == 0) { + pRumble[npad].g_pEffect->Stop(); + return; + } + + long rglDirection[2] = {0}; + DICONSTANTFORCE cf; + + // If only one force feedback axis, then apply only one direction and keep the direction at zero + if (pRumble[npad].g_dwNumForceFeedbackAxis == 1) + { + rglDirection[0] = 0; + cf.lMagnitude = nXYForce; // max should be 10000 + } + // If two force feedback axis, then apply magnitude from both directions + else + { + rglDirection[0] = nXYForce; + rglDirection[1] = nXYForce; + cf.lMagnitude = 1.4142f*nXYForce; + } + + ZeroMemory(&pRumble[npad].eff, sizeof(pRumble[npad].eff)); + pRumble[npad].eff.dwSize = sizeof(DIEFFECT); + pRumble[npad].eff.dwFlags = DIEFF_CARTESIAN | DIEFF_OBJECTOFFSETS; + pRumble[npad].eff.cAxes = pRumble[npad].g_dwNumForceFeedbackAxis; + pRumble[npad].eff.rglDirection = rglDirection; + pRumble[npad].eff.lpEnvelope = 0; + pRumble[npad].eff.cbTypeSpecificParams = sizeof(DICONSTANTFORCE); + pRumble[npad].eff.lpvTypeSpecificParams = &cf; + pRumble[npad].eff.dwStartDelay = 0; + + // Now set the new parameters.. + pRumble[npad].g_pEffect->SetParameters(&pRumble[npad].eff, DIEP_DIRECTION | DIEP_TYPESPECIFICPARAMS | DIEP_START); + // ..And start the effect immediately. + if (pRumble[npad].g_pEffect != NULL) + pRumble[npad].g_pEffect->Start(1, 0); +} + +BOOL CALLBACK EnumFFDevicesCallback(const DIDEVICEINSTANCE* pInst, VOID* pContext) +{ + LPDIRECTINPUTDEVICE8 pDevice; + DIPROPDWORD dipdw; + HRESULT hr; + + int JoystickID; + + dipdw.diph.dwSize = sizeof(DIPROPDWORD); + dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER); + dipdw.diph.dwObj = 0; + dipdw.diph.dwHow = DIPH_DEVICE; + + g_Rumble->CreateDevice(pInst->guidInstance, &pDevice, NULL); // Create a DInput pad device + + if (SUCCEEDED(hr = pDevice->GetProperty(DIPROP_JOYSTICKID, &dipdw.diph))) // Get DInput Device ID + JoystickID = dipdw.dwData; + else + return DIENUM_CONTINUE; + + //PanicAlert("DInput ID : %d \nSDL ID (1-4) : %d / %d / %d / %d\n", JoystickID, PadMapping[0].ID, PadMapping[1].ID, PadMapping[2].ID, PadMapping[3].ID); + + for (int i=0; i<4; i++) + { + if (PadMapping[i].ID == JoystickID) // if SDL ID = DInput ID -> we're dealing with the same device + { + // a DInput device is created even if rumble is disabled on startup + // this way, you can toggle the rumble setting while in game + //if (PadMapping[i].enabled) // && PadMapping[i].rumble + pRumble[i].g_pDevice = pDevice; // everything looks good, save the DInput device + } + } + + return DIENUM_CONTINUE; +} + +BOOL CALLBACK EnumAxesCallback(const DIDEVICEOBJECTINSTANCE* pdidoi, VOID* pContext) +{ + DWORD* pdwNumForceFeedbackAxis = (DWORD*)pContext; // Enum Rumble Axis + if ((pdidoi->dwFlags & DIDOI_FFACTUATOR) != 0) + (*pdwNumForceFeedbackAxis)++; + + return DIENUM_CONTINUE; +} + +void PAD_RumbleClose() +{ + // It may look weird, but we don't free anything here, it was the cause of crashes + // on stop, and the DLL isn't unloaded anyway, so the pointers stay + // We just stop the rumble in case it's still playing an effect. + for (int i=0; i<4; i++) + { + if (pRumble[i].g_pDevice && pRumble[i].g_pEffect) + pRumble[i].g_pEffect->Stop(); + } +} + +#else // Multiplatform SDL Rumble code + +#ifdef SDL_RUMBLE + +struct RUMBLE // GC Pad rumble DIDevice +{ + SDL_Haptic* g_pDevice; + SDL_HapticEffect g_pEffect; + int effect_id; +}; + +RUMBLE pRumble[4] = {0}; // 4 GC Rumble Pads +#endif + + +// Use PAD rumble +// -------------- +bool PAD_Init_Rumble(u8 _numPAD, SDL_Joystick *SDL_Device) +{ +#ifdef SDL_RUMBLE + if (SDL_Device == NULL) + return false; + + pRumble[_numPAD].g_pDevice = SDL_HapticOpenFromJoystick(SDL_Device); + + if (pRumble[_numPAD].g_pDevice == NULL) + return false; // Most likely joystick isn't haptic + + if (!(SDL_HapticQuery(pRumble[_numPAD].g_pDevice) & SDL_HAPTIC_CONSTANT)) + { + SDL_HapticClose(pRumble[_numPAD].g_pDevice); // No effect + pRumble[_numPAD].g_pDevice = 0; + PadMapping[_numPAD].rumble = false; + return false; + } + + // Set the strength of the rumble effect + int Strenght = 3276 * (g_Config.RumbleStrength + 1); + Strenght = Strenght > 32767 ? 32767 : Strenght; + + // Create the effect + memset(&pRumble[_numPAD].g_pEffect, 0, sizeof(SDL_HapticEffect)); // 0 is safe default + pRumble[_numPAD].g_pEffect.type = SDL_HAPTIC_CONSTANT; + pRumble[_numPAD].g_pEffect.constant.direction.type = SDL_HAPTIC_POLAR; // Polar coordinates + pRumble[_numPAD].g_pEffect.constant.direction.dir[0] = 18000; // Force comes from south + pRumble[_numPAD].g_pEffect.constant.level = Strenght; + pRumble[_numPAD].g_pEffect.constant.length = 10000; // 10s long (should be INFINITE, but 10s is safer) + pRumble[_numPAD].g_pEffect.constant.attack_length = 0; // disable Fade in... + pRumble[_numPAD].g_pEffect.constant.fade_length = 0; // ...and out + + // Upload the effect + pRumble[_numPAD].effect_id = SDL_HapticNewEffect( pRumble[_numPAD].g_pDevice, &pRumble[_numPAD].g_pEffect ); +#endif + return true; +} + + +// Set PAD rumble. Explanation: Stop = 0, Rumble = 1 +// -------------- +void PAD_Rumble(u8 _numPAD, unsigned int _uType, unsigned int _uStrength) +{ + int Strenght = 0; + +#ifdef SDL_RUMBLE + if (PadMapping[_numPAD].rumble) // rumble activated + { + if (!pRumble[_numPAD].g_pDevice) + return; + + if (_uType == 1 && _uStrength > 2) + SDL_HapticRunEffect( pRumble[_numPAD].g_pDevice, pRumble[_numPAD].effect_id, 1 ); + else + SDL_HapticStopAll(pRumble[_numPAD].g_pDevice); + } +#endif +} + +void PAD_RumbleClose() +{ +#ifdef SDL_RUMBLE + for (int i=0; i<4; i++) // Free all pads + { + if (pRumble[i].g_pDevice) { + SDL_HapticClose( pRumble[i].g_pDevice ); + pRumble[i].g_pDevice = NULL; + } + } +#endif +} + +#endif // RUMBLE_HACK diff --git a/Source/Plugins/Plugin_nJoy_SDL/readme.txt b/Source/Plugins/Plugin_nJoy_SDL/readme.txt index 3b983a1200..9afdd8e392 100644 --- a/Source/Plugins/Plugin_nJoy_SDL/readme.txt +++ b/Source/Plugins/Plugin_nJoy_SDL/readme.txt @@ -1,115 +1,115 @@ -nJoy v0.3 by Falcon4ever 2008 -A Dolphin Compatible Input Plugin -Copyright (C) 2003 Dolphin Project. - -Changelog -========================================================================== - -0.3: 3nd version of nJoy - - Release: July 2008 - - Support for four players - - Misc. improvements - -0.2: 2nd version of nJoy - - Release: 14th July 2005 - - Now using SDL instead of DirectInput9 - - Config/INI support - - Adjustable deadzone - - First public release - -0.1: First version of nJoy - - Private Release: january 2005 - - Using DirectInput9 - - Specially made for the Logitech Rumblepad 2, but other joypads work too - - Advanced debug window, activated during gameplay - - No deadzone configurable - - No config/Ini - -The Author -========================================================================== -* Falcon4ever (nJoy@falcon4ever.com) - -System and Software Requirements -========================================================================== -Dolphin - The latest Dolphin release, avaible at www.dolphin-emu.com - -SDL.dll (SDL-1.2.13) - (included with this release) - latest version avaible at www.libsdl.org - -A Joystick - A Windows 9x compatible input device - - -Plugin Information -========================================================================== -nJoy was written in C++, compiled with Microsoft Visual Studio 2005 Professional Edition. -nJoy uses SDL for joysticks, mouse and keyboard. -For the graphical interface plain Win32 code was used. - -How to install -========================================================================== -Just unzip the content of the zipfile to your dolphin plugin dir and place -sdl.dll in the root dir. - -example config: -[C:] - | - +-Dolphin Dir - +-DolphinWx.exe File - +-SDL.dll File - | - +-Plugins Dir - +-nJoy.dll File - - -FAQ -========================================================================== - -What's SDL??? - SDL is the Simple DirectMedia Layer written by Sam Lantinga. - It provides an API for audio, video, input ... - For more information go to http://www.libsdl.org/ - -Where can I download the latest releases??? - nJoy will be released @ www.multigesture.net - -Can I mirror this file??? - Sure, just don't forget to add a link to: - www.multigesture.net OR www.dolphin-emu.com - -------------------- ------------------- -Why should I use nJoy instead of the default input plugin??? - At this moment the default plugin only supports keyboard input. - nJoy supports Joysticks. And besides that, if you have an GC-adapter - you can use your original GC controllers with dolphin ! - -Could you add [insert feature here] please??? - no. - -But perhaps... - NO! - -Hmm... There is coming smoke out of my pc, wtf? - err, this plugin comes without any warranty, - use it at own risk :) - -What should I do if my question isn't listed here??? - Just panic, call 911 or leave a message on: - (1) Emutalk http://www.emutalk.net/forumdisplay.php?f=100 - (2) NGemu http://forums.ngemu.com/dolphin-discussion/ - -Thanks / Greetings -========================================================================== - -Special Thanks too: -F|RES & ector - -Greetings too: -`plot`, Absolute0, Aprentice, Bositman, Brice, ChaosCode, CKemu, -CoDeX, Dave2001, dn, drk||Raziel, Florin, Gent, Gigaherz, Hacktarux, -icepir8, JegHegy, Linker, Linuzappz, Martin64, Muad, Knuckles, Raziel, -Refraction, Rudy_x, Shadowprince, Snake785, Saqib, vEX, yaz0r, -Zilmar, Zenogais and ZeZu. - -AAaannd everyone else I forgot ;)... +nJoy v0.3 by Falcon4ever 2008 +A Dolphin Compatible Input Plugin +Copyright (C) 2003 Dolphin Project. + +Changelog +========================================================================== + +0.3: 3nd version of nJoy + - Release: July 2008 + - Support for four players + - Misc. improvements + +0.2: 2nd version of nJoy + - Release: 14th July 2005 + - Now using SDL instead of DirectInput9 + - Config/INI support + - Adjustable deadzone + - First public release + +0.1: First version of nJoy + - Private Release: january 2005 + - Using DirectInput9 + - Specially made for the Logitech Rumblepad 2, but other joypads work too + - Advanced debug window, activated during gameplay + - No deadzone configurable + - No config/Ini + +The Author +========================================================================== +* Falcon4ever (nJoy@falcon4ever.com) + +System and Software Requirements +========================================================================== +Dolphin + The latest Dolphin release, avaible at www.dolphin-emu.com + +SDL.dll (SDL-1.2.13) + (included with this release) + latest version avaible at www.libsdl.org + +A Joystick + A Windows 9x compatible input device + + +Plugin Information +========================================================================== +nJoy was written in C++, compiled with Microsoft Visual Studio 2005 Professional Edition. +nJoy uses SDL for joysticks, mouse and keyboard. +For the graphical interface plain Win32 code was used. + +How to install +========================================================================== +Just unzip the content of the zipfile to your dolphin plugin dir and place +sdl.dll in the root dir. + +example config: +[C:] + | + +-Dolphin Dir + +-DolphinWx.exe File + +-SDL.dll File + | + +-Plugins Dir + +-nJoy.dll File + + +FAQ +========================================================================== + +What's SDL??? + SDL is the Simple DirectMedia Layer written by Sam Lantinga. + It provides an API for audio, video, input ... + For more information go to http://www.libsdl.org/ + +Where can I download the latest releases??? + nJoy will be released @ www.multigesture.net + +Can I mirror this file??? + Sure, just don't forget to add a link to: + www.multigesture.net OR www.dolphin-emu.com + -------------------- ------------------- +Why should I use nJoy instead of the default input plugin??? + At this moment the default plugin only supports keyboard input. + nJoy supports Joysticks. And besides that, if you have an GC-adapter + you can use your original GC controllers with dolphin ! + +Could you add [insert feature here] please??? + no. + +But perhaps... + NO! + +Hmm... There is coming smoke out of my pc, wtf? + err, this plugin comes without any warranty, + use it at own risk :) + +What should I do if my question isn't listed here??? + Just panic, call 911 or leave a message on: + (1) Emutalk http://www.emutalk.net/forumdisplay.php?f=100 + (2) NGemu http://forums.ngemu.com/dolphin-discussion/ + +Thanks / Greetings +========================================================================== + +Special Thanks too: +F|RES & ector + +Greetings too: +`plot`, Absolute0, Aprentice, Bositman, Brice, ChaosCode, CKemu, +CoDeX, Dave2001, dn, drk||Raziel, Florin, Gent, Gigaherz, Hacktarux, +icepir8, JegHegy, Linker, Linuzappz, Martin64, Muad, Knuckles, Raziel, +Refraction, Rudy_x, Shadowprince, Snake785, Saqib, vEX, yaz0r, +Zilmar, Zenogais and ZeZu. + +AAaannd everyone else I forgot ;)... diff --git a/Source/TestSuite/ARAM/ARAM.vcproj b/Source/TestSuite/ARAM/ARAM.vcproj index 765d4d3fcc..ef203951ff 100644 --- a/Source/TestSuite/ARAM/ARAM.vcproj +++ b/Source/TestSuite/ARAM/ARAM.vcproj @@ -1,55 +1,55 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/TestSuite/ARAM/Makefile b/Source/TestSuite/ARAM/Makefile index 8cde430ac6..fbdb823cad 100644 --- a/Source/TestSuite/ARAM/Makefile +++ b/Source/TestSuite/ARAM/Makefile @@ -1,130 +1,130 @@ -#--------------------------------------------------------------------------------- -# Clear the implicit built in rules -#--------------------------------------------------------------------------------- -.SUFFIXES: -#--------------------------------------------------------------------------------- -ifeq ($(strip $(DEVKITPPC)),) -$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") -endif - -include $(DEVKITPPC)/gamecube_rules - -#--------------------------------------------------------------------------------- -# TARGET is the name of the output -# BUILD is the directory where object files & intermediate files will be placed -# SOURCES is a list of directories containing source code -# INCLUDES is a list of directories containing extra header files -#--------------------------------------------------------------------------------- -TARGET := $(notdir $(CURDIR)) -BUILD := build -SOURCES := source -DATA := data -INCLUDES := - -#--------------------------------------------------------------------------------- -# options for code generation -#--------------------------------------------------------------------------------- - -CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) -CXXFLAGS = $(CFLAGS) - -LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map - -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -LIBS := -logc -lm - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS := - -#--------------------------------------------------------------------------------- -# no real need to edit anything past this point unless you need to add additional -# rules for different file extensions -#--------------------------------------------------------------------------------- -ifneq ($(BUILD),$(notdir $(CURDIR))) -#--------------------------------------------------------------------------------- - -export OUTPUT := $(CURDIR)/$(TARGET) - -export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ - $(foreach dir,$(DATA),$(CURDIR)/$(dir)) - -export DEPSDIR := $(CURDIR)/$(BUILD) - -#--------------------------------------------------------------------------------- -# automatically build a list of object files for our project -#--------------------------------------------------------------------------------- -CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) -CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) -sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) -SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) - export LD := $(CC) -else - export LD := $(CXX) -endif - -export OFILES := $(addsuffix .o,$(BINFILES)) \ - $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ - $(sFILES:.s=.o) $(SFILES:.S=.o) - -#--------------------------------------------------------------------------------- -# build a list of include paths -#--------------------------------------------------------------------------------- -export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ - $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ - -I$(CURDIR)/$(BUILD) \ - -I$(LIBOGC_INC) - -#--------------------------------------------------------------------------------- -# build a list of library paths -#--------------------------------------------------------------------------------- -export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ - -L$(LIBOGC_LIB) - -export OUTPUT := $(CURDIR)/$(TARGET) -.PHONY: $(BUILD) clean - -#--------------------------------------------------------------------------------- -$(BUILD): - @[ -d $@ ] || mkdir -p $@ - @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -#--------------------------------------------------------------------------------- -clean: - @echo clean ... - @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol - -#--------------------------------------------------------------------------------- -else - -DEPENDS := $(OFILES:.o=.d) - -#--------------------------------------------------------------------------------- -# main targets -#--------------------------------------------------------------------------------- -$(OUTPUT).dol: $(OUTPUT).elf -$(OUTPUT).elf: $(OFILES) - -#--------------------------------------------------------------------------------- -# This rule links in binary data with the .jpg extension -#--------------------------------------------------------------------------------- -%.jpg.o : %.jpg -#--------------------------------------------------------------------------------- - @echo $(notdir $<) - $(bin2o) - --include $(DEPENDS) - -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- +#--------------------------------------------------------------------------------- +# Clear the implicit built in rules +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- +ifeq ($(strip $(DEVKITPPC)),) +$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") +endif + +include $(DEVKITPPC)/gamecube_rules + +#--------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# INCLUDES is a list of directories containing extra header files +#--------------------------------------------------------------------------------- +TARGET := $(notdir $(CURDIR)) +BUILD := build +SOURCES := source +DATA := data +INCLUDES := + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- + +CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) +CXXFLAGS = $(CFLAGS) + +LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map + +#--------------------------------------------------------------------------------- +# any extra libraries we wish to link with the project +#--------------------------------------------------------------------------------- +LIBS := -logc -lm + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- + +export OUTPUT := $(CURDIR)/$(TARGET) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) + +export DEPSDIR := $(CURDIR)/$(BUILD) + +#--------------------------------------------------------------------------------- +# automatically build a list of object files for our project +#--------------------------------------------------------------------------------- +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) + export LD := $(CC) +else + export LD := $(CXX) +endif + +export OFILES := $(addsuffix .o,$(BINFILES)) \ + $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ + $(sFILES:.s=.o) $(SFILES:.S=.o) + +#--------------------------------------------------------------------------------- +# build a list of include paths +#--------------------------------------------------------------------------------- +export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) \ + -I$(LIBOGC_INC) + +#--------------------------------------------------------------------------------- +# build a list of library paths +#--------------------------------------------------------------------------------- +export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ + -L$(LIBOGC_LIB) + +export OUTPUT := $(CURDIR)/$(TARGET) +.PHONY: $(BUILD) clean + +#--------------------------------------------------------------------------------- +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol + +#--------------------------------------------------------------------------------- +else + +DEPENDS := $(OFILES:.o=.d) + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +$(OUTPUT).dol: $(OUTPUT).elf +$(OUTPUT).elf: $(OFILES) + +#--------------------------------------------------------------------------------- +# This rule links in binary data with the .jpg extension +#--------------------------------------------------------------------------------- +%.jpg.o : %.jpg +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + $(bin2o) + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- diff --git a/Source/TestSuite/AX/AX.vcproj b/Source/TestSuite/AX/AX.vcproj index 24507f6dfa..b92276bd13 100644 --- a/Source/TestSuite/AX/AX.vcproj +++ b/Source/TestSuite/AX/AX.vcproj @@ -1,55 +1,55 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/TestSuite/AX/Makefile b/Source/TestSuite/AX/Makefile index 8cde430ac6..fbdb823cad 100644 --- a/Source/TestSuite/AX/Makefile +++ b/Source/TestSuite/AX/Makefile @@ -1,130 +1,130 @@ -#--------------------------------------------------------------------------------- -# Clear the implicit built in rules -#--------------------------------------------------------------------------------- -.SUFFIXES: -#--------------------------------------------------------------------------------- -ifeq ($(strip $(DEVKITPPC)),) -$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") -endif - -include $(DEVKITPPC)/gamecube_rules - -#--------------------------------------------------------------------------------- -# TARGET is the name of the output -# BUILD is the directory where object files & intermediate files will be placed -# SOURCES is a list of directories containing source code -# INCLUDES is a list of directories containing extra header files -#--------------------------------------------------------------------------------- -TARGET := $(notdir $(CURDIR)) -BUILD := build -SOURCES := source -DATA := data -INCLUDES := - -#--------------------------------------------------------------------------------- -# options for code generation -#--------------------------------------------------------------------------------- - -CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) -CXXFLAGS = $(CFLAGS) - -LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map - -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -LIBS := -logc -lm - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS := - -#--------------------------------------------------------------------------------- -# no real need to edit anything past this point unless you need to add additional -# rules for different file extensions -#--------------------------------------------------------------------------------- -ifneq ($(BUILD),$(notdir $(CURDIR))) -#--------------------------------------------------------------------------------- - -export OUTPUT := $(CURDIR)/$(TARGET) - -export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ - $(foreach dir,$(DATA),$(CURDIR)/$(dir)) - -export DEPSDIR := $(CURDIR)/$(BUILD) - -#--------------------------------------------------------------------------------- -# automatically build a list of object files for our project -#--------------------------------------------------------------------------------- -CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) -CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) -sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) -SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) - export LD := $(CC) -else - export LD := $(CXX) -endif - -export OFILES := $(addsuffix .o,$(BINFILES)) \ - $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ - $(sFILES:.s=.o) $(SFILES:.S=.o) - -#--------------------------------------------------------------------------------- -# build a list of include paths -#--------------------------------------------------------------------------------- -export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ - $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ - -I$(CURDIR)/$(BUILD) \ - -I$(LIBOGC_INC) - -#--------------------------------------------------------------------------------- -# build a list of library paths -#--------------------------------------------------------------------------------- -export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ - -L$(LIBOGC_LIB) - -export OUTPUT := $(CURDIR)/$(TARGET) -.PHONY: $(BUILD) clean - -#--------------------------------------------------------------------------------- -$(BUILD): - @[ -d $@ ] || mkdir -p $@ - @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -#--------------------------------------------------------------------------------- -clean: - @echo clean ... - @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol - -#--------------------------------------------------------------------------------- -else - -DEPENDS := $(OFILES:.o=.d) - -#--------------------------------------------------------------------------------- -# main targets -#--------------------------------------------------------------------------------- -$(OUTPUT).dol: $(OUTPUT).elf -$(OUTPUT).elf: $(OFILES) - -#--------------------------------------------------------------------------------- -# This rule links in binary data with the .jpg extension -#--------------------------------------------------------------------------------- -%.jpg.o : %.jpg -#--------------------------------------------------------------------------------- - @echo $(notdir $<) - $(bin2o) - --include $(DEPENDS) - -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- +#--------------------------------------------------------------------------------- +# Clear the implicit built in rules +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- +ifeq ($(strip $(DEVKITPPC)),) +$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") +endif + +include $(DEVKITPPC)/gamecube_rules + +#--------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# INCLUDES is a list of directories containing extra header files +#--------------------------------------------------------------------------------- +TARGET := $(notdir $(CURDIR)) +BUILD := build +SOURCES := source +DATA := data +INCLUDES := + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- + +CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) +CXXFLAGS = $(CFLAGS) + +LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map + +#--------------------------------------------------------------------------------- +# any extra libraries we wish to link with the project +#--------------------------------------------------------------------------------- +LIBS := -logc -lm + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- + +export OUTPUT := $(CURDIR)/$(TARGET) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) + +export DEPSDIR := $(CURDIR)/$(BUILD) + +#--------------------------------------------------------------------------------- +# automatically build a list of object files for our project +#--------------------------------------------------------------------------------- +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) + export LD := $(CC) +else + export LD := $(CXX) +endif + +export OFILES := $(addsuffix .o,$(BINFILES)) \ + $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ + $(sFILES:.s=.o) $(SFILES:.S=.o) + +#--------------------------------------------------------------------------------- +# build a list of include paths +#--------------------------------------------------------------------------------- +export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) \ + -I$(LIBOGC_INC) + +#--------------------------------------------------------------------------------- +# build a list of library paths +#--------------------------------------------------------------------------------- +export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ + -L$(LIBOGC_LIB) + +export OUTPUT := $(CURDIR)/$(TARGET) +.PHONY: $(BUILD) clean + +#--------------------------------------------------------------------------------- +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol + +#--------------------------------------------------------------------------------- +else + +DEPENDS := $(OFILES:.o=.d) + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +$(OUTPUT).dol: $(OUTPUT).elf +$(OUTPUT).elf: $(OFILES) + +#--------------------------------------------------------------------------------- +# This rule links in binary data with the .jpg extension +#--------------------------------------------------------------------------------- +%.jpg.o : %.jpg +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + $(bin2o) + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- diff --git a/Source/TestSuite/EXI/EXI.vcproj b/Source/TestSuite/EXI/EXI.vcproj index 519b801133..d0b8d7da7a 100644 --- a/Source/TestSuite/EXI/EXI.vcproj +++ b/Source/TestSuite/EXI/EXI.vcproj @@ -1,76 +1,76 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/TestSuite/EXI/Makefile b/Source/TestSuite/EXI/Makefile index cddbbb1275..0d4af23a0b 100644 --- a/Source/TestSuite/EXI/Makefile +++ b/Source/TestSuite/EXI/Makefile @@ -1,131 +1,131 @@ -#--------------------------------------------------------------------------------- -# Clear the implicit built in rules -#--------------------------------------------------------------------------------- -.SUFFIXES: -#--------------------------------------------------------------------------------- -ifeq ($(strip $(DEVKITPPC)),) -$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") -endif - -include $(DEVKITPPC)/gamecube_rules - -#--------------------------------------------------------------------------------- -# TARGET is the name of the output -# BUILD is the directory where object files & intermediate files will be placed -# SOURCES is a list of directories containing source code -# INCLUDES is a list of directories containing extra header files -#--------------------------------------------------------------------------------- -TARGET := $(notdir $(CURDIR)) -BUILD := build -SOURCES := source -DATA := data -INCLUDES := - -#--------------------------------------------------------------------------------- -# options for code generation -#--------------------------------------------------------------------------------- - -CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) -CXXFLAGS = $(CFLAGS) - -LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map - -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -LIBS := -logc - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS := - -#--------------------------------------------------------------------------------- -# no real need to edit anything past this point unless you need to add additional -# rules for different file extensions -#--------------------------------------------------------------------------------- -ifneq ($(BUILD),$(notdir $(CURDIR))) -#--------------------------------------------------------------------------------- - -export OUTPUT := $(CURDIR)/$(TARGET) - -export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ - $(foreach dir,$(DATA),$(CURDIR)/$(dir)) - -export DEPSDIR := $(CURDIR)/$(BUILD) - -#--------------------------------------------------------------------------------- -# automatically build a list of object files for our project -#--------------------------------------------------------------------------------- -CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) -CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) -sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) -SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) - export LD := $(CC) -else - export LD := $(CXX) -endif - -export OFILES := $(addsuffix .o,$(BINFILES)) \ - $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ - $(sFILES:.s=.o) $(SFILES:.S=.o) - -#--------------------------------------------------------------------------------- -# build a list of include paths -#--------------------------------------------------------------------------------- -export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ - $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ - -I$(CURDIR)/$(BUILD) \ - -I$(LIBOGC_INC) - -#--------------------------------------------------------------------------------- -# build a list of library paths -#--------------------------------------------------------------------------------- -export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ - -L$(LIBOGC_LIB) - -export OUTPUT := $(CURDIR)/$(TARGET) -.PHONY: $(BUILD) clean - -#--------------------------------------------------------------------------------- -$(BUILD): - @[ -d $@ ] || mkdir -p $@ - @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -#--------------------------------------------------------------------------------- -clean: - @echo clean ... - @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol - - -#--------------------------------------------------------------------------------- -else - -DEPENDS := $(OFILES:.o=.d) - -#--------------------------------------------------------------------------------- -# main targets -#--------------------------------------------------------------------------------- -$(OUTPUT).dol: $(OUTPUT).elf -$(OUTPUT).elf: $(OFILES) - -#--------------------------------------------------------------------------------- -# This rule links in binary data with the .jpg extension -#--------------------------------------------------------------------------------- -%.jpg.o : %.jpg -#--------------------------------------------------------------------------------- - @echo $(notdir $<) - $(bin2o) - --include $(DEPENDS) - -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- +#--------------------------------------------------------------------------------- +# Clear the implicit built in rules +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- +ifeq ($(strip $(DEVKITPPC)),) +$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") +endif + +include $(DEVKITPPC)/gamecube_rules + +#--------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# INCLUDES is a list of directories containing extra header files +#--------------------------------------------------------------------------------- +TARGET := $(notdir $(CURDIR)) +BUILD := build +SOURCES := source +DATA := data +INCLUDES := + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- + +CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) +CXXFLAGS = $(CFLAGS) + +LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map + +#--------------------------------------------------------------------------------- +# any extra libraries we wish to link with the project +#--------------------------------------------------------------------------------- +LIBS := -logc + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- + +export OUTPUT := $(CURDIR)/$(TARGET) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) + +export DEPSDIR := $(CURDIR)/$(BUILD) + +#--------------------------------------------------------------------------------- +# automatically build a list of object files for our project +#--------------------------------------------------------------------------------- +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) + export LD := $(CC) +else + export LD := $(CXX) +endif + +export OFILES := $(addsuffix .o,$(BINFILES)) \ + $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ + $(sFILES:.s=.o) $(SFILES:.S=.o) + +#--------------------------------------------------------------------------------- +# build a list of include paths +#--------------------------------------------------------------------------------- +export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) \ + -I$(LIBOGC_INC) + +#--------------------------------------------------------------------------------- +# build a list of library paths +#--------------------------------------------------------------------------------- +export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ + -L$(LIBOGC_LIB) + +export OUTPUT := $(CURDIR)/$(TARGET) +.PHONY: $(BUILD) clean + +#--------------------------------------------------------------------------------- +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol + + +#--------------------------------------------------------------------------------- +else + +DEPENDS := $(OFILES:.o=.d) + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +$(OUTPUT).dol: $(OUTPUT).elf +$(OUTPUT).elf: $(OFILES) + +#--------------------------------------------------------------------------------- +# This rule links in binary data with the .jpg extension +#--------------------------------------------------------------------------------- +%.jpg.o : %.jpg +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + $(bin2o) + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- diff --git a/Source/TestSuite/FPU/FPU.vcproj b/Source/TestSuite/FPU/FPU.vcproj index e2ec9a0a93..6248cc5f0a 100644 --- a/Source/TestSuite/FPU/FPU.vcproj +++ b/Source/TestSuite/FPU/FPU.vcproj @@ -1,178 +1,178 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/TestSuite/FPU/Makefile b/Source/TestSuite/FPU/Makefile index 8d1047eceb..0f42da56db 100644 --- a/Source/TestSuite/FPU/Makefile +++ b/Source/TestSuite/FPU/Makefile @@ -1,135 +1,135 @@ -#--------------------------------------------------------------------------------- -# Clear the implicit built in rules -#--------------------------------------------------------------------------------- -.SUFFIXES: -#--------------------------------------------------------------------------------- -ifeq ($(strip $(DEVKITPPC)),) -$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") -endif - -include $(DEVKITPPC)/wii_rules - -#--------------------------------------------------------------------------------- -# TARGET is the name of the output -# BUILD is the directory where object files & intermediate files will be placed -# SOURCES is a list of directories containing source code -# INCLUDES is a list of directories containing extra header files -#--------------------------------------------------------------------------------- -TARGET := $(notdir $(CURDIR)) -BUILD := build -SOURCES := source -DATA := data -INCLUDES := - -#--------------------------------------------------------------------------------- -# options for code generation -#--------------------------------------------------------------------------------- - -CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) -CXXFLAGS = $(CFLAGS) - -LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map - -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -LIBS := -lwiiuse -lbte -logc -lm - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS := - -#--------------------------------------------------------------------------------- -# no real need to edit anything past this point unless you need to add additional -# rules for different file extensions -#--------------------------------------------------------------------------------- -ifneq ($(BUILD),$(notdir $(CURDIR))) -#--------------------------------------------------------------------------------- - -export OUTPUT := $(CURDIR)/$(TARGET) - -export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ - $(foreach dir,$(DATA),$(CURDIR)/$(dir)) - -export DEPSDIR := $(CURDIR)/$(BUILD) - -#--------------------------------------------------------------------------------- -# automatically build a list of object files for our project -#--------------------------------------------------------------------------------- -CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) -CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) -sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) -SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) - export LD := $(CC) -else - export LD := $(CXX) -endif - -export OFILES := $(addsuffix .o,$(BINFILES)) \ - $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ - $(sFILES:.s=.o) $(SFILES:.S=.o) - -#--------------------------------------------------------------------------------- -# build a list of include paths -#--------------------------------------------------------------------------------- -export INCLUDE := $(foreach dir,$(INCLUDES), -iquote $(CURDIR)/$(dir)) \ - $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ - -I$(CURDIR)/$(BUILD) \ - -I$(LIBOGC_INC) - -#--------------------------------------------------------------------------------- -# build a list of library paths -#--------------------------------------------------------------------------------- -export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ - -L$(LIBOGC_LIB) - -export OUTPUT := $(CURDIR)/$(TARGET) -.PHONY: $(BUILD) clean - -#--------------------------------------------------------------------------------- -$(BUILD): - @[ -d $@ ] || mkdir -p $@ - @make --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -#--------------------------------------------------------------------------------- -clean: - @echo clean ... - @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol - -#--------------------------------------------------------------------------------- -run: - wiiload $(TARGET).dol - - -#--------------------------------------------------------------------------------- -else - -DEPENDS := $(OFILES:.o=.d) - -#--------------------------------------------------------------------------------- -# main targets -#--------------------------------------------------------------------------------- -$(OUTPUT).dol: $(OUTPUT).elf -$(OUTPUT).elf: $(OFILES) - -#--------------------------------------------------------------------------------- -# This rule links in binary data with the .jpg extension -#--------------------------------------------------------------------------------- -%.jpg.o : %.jpg -#--------------------------------------------------------------------------------- - @echo $(notdir $<) - $(bin2o) - --include $(DEPENDS) - -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- +#--------------------------------------------------------------------------------- +# Clear the implicit built in rules +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- +ifeq ($(strip $(DEVKITPPC)),) +$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") +endif + +include $(DEVKITPPC)/wii_rules + +#--------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# INCLUDES is a list of directories containing extra header files +#--------------------------------------------------------------------------------- +TARGET := $(notdir $(CURDIR)) +BUILD := build +SOURCES := source +DATA := data +INCLUDES := + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- + +CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) +CXXFLAGS = $(CFLAGS) + +LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map + +#--------------------------------------------------------------------------------- +# any extra libraries we wish to link with the project +#--------------------------------------------------------------------------------- +LIBS := -lwiiuse -lbte -logc -lm + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- + +export OUTPUT := $(CURDIR)/$(TARGET) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) + +export DEPSDIR := $(CURDIR)/$(BUILD) + +#--------------------------------------------------------------------------------- +# automatically build a list of object files for our project +#--------------------------------------------------------------------------------- +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) + export LD := $(CC) +else + export LD := $(CXX) +endif + +export OFILES := $(addsuffix .o,$(BINFILES)) \ + $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ + $(sFILES:.s=.o) $(SFILES:.S=.o) + +#--------------------------------------------------------------------------------- +# build a list of include paths +#--------------------------------------------------------------------------------- +export INCLUDE := $(foreach dir,$(INCLUDES), -iquote $(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) \ + -I$(LIBOGC_INC) + +#--------------------------------------------------------------------------------- +# build a list of library paths +#--------------------------------------------------------------------------------- +export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ + -L$(LIBOGC_LIB) + +export OUTPUT := $(CURDIR)/$(TARGET) +.PHONY: $(BUILD) clean + +#--------------------------------------------------------------------------------- +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @make --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol + +#--------------------------------------------------------------------------------- +run: + wiiload $(TARGET).dol + + +#--------------------------------------------------------------------------------- +else + +DEPENDS := $(OFILES:.o=.d) + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +$(OUTPUT).dol: $(OUTPUT).elf +$(OUTPUT).elf: $(OFILES) + +#--------------------------------------------------------------------------------- +# This rule links in binary data with the .jpg extension +#--------------------------------------------------------------------------------- +%.jpg.o : %.jpg +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + $(bin2o) + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- diff --git a/Source/TestSuite/GX/GX.vcproj b/Source/TestSuite/GX/GX.vcproj index ef2b628a39..d302dbce94 100644 --- a/Source/TestSuite/GX/GX.vcproj +++ b/Source/TestSuite/GX/GX.vcproj @@ -1,55 +1,55 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/TestSuite/GX/Makefile b/Source/TestSuite/GX/Makefile index cddbbb1275..0d4af23a0b 100644 --- a/Source/TestSuite/GX/Makefile +++ b/Source/TestSuite/GX/Makefile @@ -1,131 +1,131 @@ -#--------------------------------------------------------------------------------- -# Clear the implicit built in rules -#--------------------------------------------------------------------------------- -.SUFFIXES: -#--------------------------------------------------------------------------------- -ifeq ($(strip $(DEVKITPPC)),) -$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") -endif - -include $(DEVKITPPC)/gamecube_rules - -#--------------------------------------------------------------------------------- -# TARGET is the name of the output -# BUILD is the directory where object files & intermediate files will be placed -# SOURCES is a list of directories containing source code -# INCLUDES is a list of directories containing extra header files -#--------------------------------------------------------------------------------- -TARGET := $(notdir $(CURDIR)) -BUILD := build -SOURCES := source -DATA := data -INCLUDES := - -#--------------------------------------------------------------------------------- -# options for code generation -#--------------------------------------------------------------------------------- - -CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) -CXXFLAGS = $(CFLAGS) - -LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map - -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -LIBS := -logc - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS := - -#--------------------------------------------------------------------------------- -# no real need to edit anything past this point unless you need to add additional -# rules for different file extensions -#--------------------------------------------------------------------------------- -ifneq ($(BUILD),$(notdir $(CURDIR))) -#--------------------------------------------------------------------------------- - -export OUTPUT := $(CURDIR)/$(TARGET) - -export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ - $(foreach dir,$(DATA),$(CURDIR)/$(dir)) - -export DEPSDIR := $(CURDIR)/$(BUILD) - -#--------------------------------------------------------------------------------- -# automatically build a list of object files for our project -#--------------------------------------------------------------------------------- -CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) -CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) -sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) -SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) - export LD := $(CC) -else - export LD := $(CXX) -endif - -export OFILES := $(addsuffix .o,$(BINFILES)) \ - $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ - $(sFILES:.s=.o) $(SFILES:.S=.o) - -#--------------------------------------------------------------------------------- -# build a list of include paths -#--------------------------------------------------------------------------------- -export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ - $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ - -I$(CURDIR)/$(BUILD) \ - -I$(LIBOGC_INC) - -#--------------------------------------------------------------------------------- -# build a list of library paths -#--------------------------------------------------------------------------------- -export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ - -L$(LIBOGC_LIB) - -export OUTPUT := $(CURDIR)/$(TARGET) -.PHONY: $(BUILD) clean - -#--------------------------------------------------------------------------------- -$(BUILD): - @[ -d $@ ] || mkdir -p $@ - @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -#--------------------------------------------------------------------------------- -clean: - @echo clean ... - @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol - - -#--------------------------------------------------------------------------------- -else - -DEPENDS := $(OFILES:.o=.d) - -#--------------------------------------------------------------------------------- -# main targets -#--------------------------------------------------------------------------------- -$(OUTPUT).dol: $(OUTPUT).elf -$(OUTPUT).elf: $(OFILES) - -#--------------------------------------------------------------------------------- -# This rule links in binary data with the .jpg extension -#--------------------------------------------------------------------------------- -%.jpg.o : %.jpg -#--------------------------------------------------------------------------------- - @echo $(notdir $<) - $(bin2o) - --include $(DEPENDS) - -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- +#--------------------------------------------------------------------------------- +# Clear the implicit built in rules +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- +ifeq ($(strip $(DEVKITPPC)),) +$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") +endif + +include $(DEVKITPPC)/gamecube_rules + +#--------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# INCLUDES is a list of directories containing extra header files +#--------------------------------------------------------------------------------- +TARGET := $(notdir $(CURDIR)) +BUILD := build +SOURCES := source +DATA := data +INCLUDES := + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- + +CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) +CXXFLAGS = $(CFLAGS) + +LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map + +#--------------------------------------------------------------------------------- +# any extra libraries we wish to link with the project +#--------------------------------------------------------------------------------- +LIBS := -logc + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- + +export OUTPUT := $(CURDIR)/$(TARGET) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) + +export DEPSDIR := $(CURDIR)/$(BUILD) + +#--------------------------------------------------------------------------------- +# automatically build a list of object files for our project +#--------------------------------------------------------------------------------- +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) + export LD := $(CC) +else + export LD := $(CXX) +endif + +export OFILES := $(addsuffix .o,$(BINFILES)) \ + $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ + $(sFILES:.s=.o) $(SFILES:.S=.o) + +#--------------------------------------------------------------------------------- +# build a list of include paths +#--------------------------------------------------------------------------------- +export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) \ + -I$(LIBOGC_INC) + +#--------------------------------------------------------------------------------- +# build a list of library paths +#--------------------------------------------------------------------------------- +export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ + -L$(LIBOGC_LIB) + +export OUTPUT := $(CURDIR)/$(TARGET) +.PHONY: $(BUILD) clean + +#--------------------------------------------------------------------------------- +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol + + +#--------------------------------------------------------------------------------- +else + +DEPENDS := $(OFILES:.o=.d) + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +$(OUTPUT).dol: $(OUTPUT).elf +$(OUTPUT).elf: $(OFILES) + +#--------------------------------------------------------------------------------- +# This rule links in binary data with the .jpg extension +#--------------------------------------------------------------------------------- +%.jpg.o : %.jpg +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + $(bin2o) + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- diff --git a/Source/TestSuite/PAD/Makefile b/Source/TestSuite/PAD/Makefile index cddbbb1275..0d4af23a0b 100644 --- a/Source/TestSuite/PAD/Makefile +++ b/Source/TestSuite/PAD/Makefile @@ -1,131 +1,131 @@ -#--------------------------------------------------------------------------------- -# Clear the implicit built in rules -#--------------------------------------------------------------------------------- -.SUFFIXES: -#--------------------------------------------------------------------------------- -ifeq ($(strip $(DEVKITPPC)),) -$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") -endif - -include $(DEVKITPPC)/gamecube_rules - -#--------------------------------------------------------------------------------- -# TARGET is the name of the output -# BUILD is the directory where object files & intermediate files will be placed -# SOURCES is a list of directories containing source code -# INCLUDES is a list of directories containing extra header files -#--------------------------------------------------------------------------------- -TARGET := $(notdir $(CURDIR)) -BUILD := build -SOURCES := source -DATA := data -INCLUDES := - -#--------------------------------------------------------------------------------- -# options for code generation -#--------------------------------------------------------------------------------- - -CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) -CXXFLAGS = $(CFLAGS) - -LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map - -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -LIBS := -logc - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS := - -#--------------------------------------------------------------------------------- -# no real need to edit anything past this point unless you need to add additional -# rules for different file extensions -#--------------------------------------------------------------------------------- -ifneq ($(BUILD),$(notdir $(CURDIR))) -#--------------------------------------------------------------------------------- - -export OUTPUT := $(CURDIR)/$(TARGET) - -export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ - $(foreach dir,$(DATA),$(CURDIR)/$(dir)) - -export DEPSDIR := $(CURDIR)/$(BUILD) - -#--------------------------------------------------------------------------------- -# automatically build a list of object files for our project -#--------------------------------------------------------------------------------- -CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) -CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) -sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) -SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) - export LD := $(CC) -else - export LD := $(CXX) -endif - -export OFILES := $(addsuffix .o,$(BINFILES)) \ - $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ - $(sFILES:.s=.o) $(SFILES:.S=.o) - -#--------------------------------------------------------------------------------- -# build a list of include paths -#--------------------------------------------------------------------------------- -export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ - $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ - -I$(CURDIR)/$(BUILD) \ - -I$(LIBOGC_INC) - -#--------------------------------------------------------------------------------- -# build a list of library paths -#--------------------------------------------------------------------------------- -export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ - -L$(LIBOGC_LIB) - -export OUTPUT := $(CURDIR)/$(TARGET) -.PHONY: $(BUILD) clean - -#--------------------------------------------------------------------------------- -$(BUILD): - @[ -d $@ ] || mkdir -p $@ - @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -#--------------------------------------------------------------------------------- -clean: - @echo clean ... - @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol - - -#--------------------------------------------------------------------------------- -else - -DEPENDS := $(OFILES:.o=.d) - -#--------------------------------------------------------------------------------- -# main targets -#--------------------------------------------------------------------------------- -$(OUTPUT).dol: $(OUTPUT).elf -$(OUTPUT).elf: $(OFILES) - -#--------------------------------------------------------------------------------- -# This rule links in binary data with the .jpg extension -#--------------------------------------------------------------------------------- -%.jpg.o : %.jpg -#--------------------------------------------------------------------------------- - @echo $(notdir $<) - $(bin2o) - --include $(DEPENDS) - -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- +#--------------------------------------------------------------------------------- +# Clear the implicit built in rules +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- +ifeq ($(strip $(DEVKITPPC)),) +$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") +endif + +include $(DEVKITPPC)/gamecube_rules + +#--------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# INCLUDES is a list of directories containing extra header files +#--------------------------------------------------------------------------------- +TARGET := $(notdir $(CURDIR)) +BUILD := build +SOURCES := source +DATA := data +INCLUDES := + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- + +CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) +CXXFLAGS = $(CFLAGS) + +LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map + +#--------------------------------------------------------------------------------- +# any extra libraries we wish to link with the project +#--------------------------------------------------------------------------------- +LIBS := -logc + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- + +export OUTPUT := $(CURDIR)/$(TARGET) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) + +export DEPSDIR := $(CURDIR)/$(BUILD) + +#--------------------------------------------------------------------------------- +# automatically build a list of object files for our project +#--------------------------------------------------------------------------------- +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) + export LD := $(CC) +else + export LD := $(CXX) +endif + +export OFILES := $(addsuffix .o,$(BINFILES)) \ + $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ + $(sFILES:.s=.o) $(SFILES:.S=.o) + +#--------------------------------------------------------------------------------- +# build a list of include paths +#--------------------------------------------------------------------------------- +export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) \ + -I$(LIBOGC_INC) + +#--------------------------------------------------------------------------------- +# build a list of library paths +#--------------------------------------------------------------------------------- +export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ + -L$(LIBOGC_LIB) + +export OUTPUT := $(CURDIR)/$(TARGET) +.PHONY: $(BUILD) clean + +#--------------------------------------------------------------------------------- +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol + + +#--------------------------------------------------------------------------------- +else + +DEPENDS := $(OFILES:.o=.d) + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +$(OUTPUT).dol: $(OUTPUT).elf +$(OUTPUT).elf: $(OFILES) + +#--------------------------------------------------------------------------------- +# This rule links in binary data with the .jpg extension +#--------------------------------------------------------------------------------- +%.jpg.o : %.jpg +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + $(bin2o) + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- diff --git a/Source/TestSuite/PAD/PAD.vcproj b/Source/TestSuite/PAD/PAD.vcproj index 474929ce47..4033ae0a1a 100644 --- a/Source/TestSuite/PAD/PAD.vcproj +++ b/Source/TestSuite/PAD/PAD.vcproj @@ -1,55 +1,55 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/TestSuite/RTC/Makefile b/Source/TestSuite/RTC/Makefile index 8cde430ac6..fbdb823cad 100644 --- a/Source/TestSuite/RTC/Makefile +++ b/Source/TestSuite/RTC/Makefile @@ -1,130 +1,130 @@ -#--------------------------------------------------------------------------------- -# Clear the implicit built in rules -#--------------------------------------------------------------------------------- -.SUFFIXES: -#--------------------------------------------------------------------------------- -ifeq ($(strip $(DEVKITPPC)),) -$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") -endif - -include $(DEVKITPPC)/gamecube_rules - -#--------------------------------------------------------------------------------- -# TARGET is the name of the output -# BUILD is the directory where object files & intermediate files will be placed -# SOURCES is a list of directories containing source code -# INCLUDES is a list of directories containing extra header files -#--------------------------------------------------------------------------------- -TARGET := $(notdir $(CURDIR)) -BUILD := build -SOURCES := source -DATA := data -INCLUDES := - -#--------------------------------------------------------------------------------- -# options for code generation -#--------------------------------------------------------------------------------- - -CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) -CXXFLAGS = $(CFLAGS) - -LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map - -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -LIBS := -logc -lm - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS := - -#--------------------------------------------------------------------------------- -# no real need to edit anything past this point unless you need to add additional -# rules for different file extensions -#--------------------------------------------------------------------------------- -ifneq ($(BUILD),$(notdir $(CURDIR))) -#--------------------------------------------------------------------------------- - -export OUTPUT := $(CURDIR)/$(TARGET) - -export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ - $(foreach dir,$(DATA),$(CURDIR)/$(dir)) - -export DEPSDIR := $(CURDIR)/$(BUILD) - -#--------------------------------------------------------------------------------- -# automatically build a list of object files for our project -#--------------------------------------------------------------------------------- -CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) -CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) -sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) -SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) - export LD := $(CC) -else - export LD := $(CXX) -endif - -export OFILES := $(addsuffix .o,$(BINFILES)) \ - $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ - $(sFILES:.s=.o) $(SFILES:.S=.o) - -#--------------------------------------------------------------------------------- -# build a list of include paths -#--------------------------------------------------------------------------------- -export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ - $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ - -I$(CURDIR)/$(BUILD) \ - -I$(LIBOGC_INC) - -#--------------------------------------------------------------------------------- -# build a list of library paths -#--------------------------------------------------------------------------------- -export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ - -L$(LIBOGC_LIB) - -export OUTPUT := $(CURDIR)/$(TARGET) -.PHONY: $(BUILD) clean - -#--------------------------------------------------------------------------------- -$(BUILD): - @[ -d $@ ] || mkdir -p $@ - @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -#--------------------------------------------------------------------------------- -clean: - @echo clean ... - @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol - -#--------------------------------------------------------------------------------- -else - -DEPENDS := $(OFILES:.o=.d) - -#--------------------------------------------------------------------------------- -# main targets -#--------------------------------------------------------------------------------- -$(OUTPUT).dol: $(OUTPUT).elf -$(OUTPUT).elf: $(OFILES) - -#--------------------------------------------------------------------------------- -# This rule links in binary data with the .jpg extension -#--------------------------------------------------------------------------------- -%.jpg.o : %.jpg -#--------------------------------------------------------------------------------- - @echo $(notdir $<) - $(bin2o) - --include $(DEPENDS) - -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- +#--------------------------------------------------------------------------------- +# Clear the implicit built in rules +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- +ifeq ($(strip $(DEVKITPPC)),) +$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") +endif + +include $(DEVKITPPC)/gamecube_rules + +#--------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# INCLUDES is a list of directories containing extra header files +#--------------------------------------------------------------------------------- +TARGET := $(notdir $(CURDIR)) +BUILD := build +SOURCES := source +DATA := data +INCLUDES := + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- + +CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) +CXXFLAGS = $(CFLAGS) + +LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map + +#--------------------------------------------------------------------------------- +# any extra libraries we wish to link with the project +#--------------------------------------------------------------------------------- +LIBS := -logc -lm + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- + +export OUTPUT := $(CURDIR)/$(TARGET) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) + +export DEPSDIR := $(CURDIR)/$(BUILD) + +#--------------------------------------------------------------------------------- +# automatically build a list of object files for our project +#--------------------------------------------------------------------------------- +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) + export LD := $(CC) +else + export LD := $(CXX) +endif + +export OFILES := $(addsuffix .o,$(BINFILES)) \ + $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ + $(sFILES:.s=.o) $(SFILES:.S=.o) + +#--------------------------------------------------------------------------------- +# build a list of include paths +#--------------------------------------------------------------------------------- +export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) \ + -I$(LIBOGC_INC) + +#--------------------------------------------------------------------------------- +# build a list of library paths +#--------------------------------------------------------------------------------- +export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ + -L$(LIBOGC_LIB) + +export OUTPUT := $(CURDIR)/$(TARGET) +.PHONY: $(BUILD) clean + +#--------------------------------------------------------------------------------- +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol + +#--------------------------------------------------------------------------------- +else + +DEPENDS := $(OFILES:.o=.d) + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +$(OUTPUT).dol: $(OUTPUT).elf +$(OUTPUT).elf: $(OFILES) + +#--------------------------------------------------------------------------------- +# This rule links in binary data with the .jpg extension +#--------------------------------------------------------------------------------- +%.jpg.o : %.jpg +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + $(bin2o) + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- diff --git a/Source/TestSuite/RTC/RTC.vcproj b/Source/TestSuite/RTC/RTC.vcproj index 1c41e253a0..8a1a50c19f 100644 --- a/Source/TestSuite/RTC/RTC.vcproj +++ b/Source/TestSuite/RTC/RTC.vcproj @@ -1,55 +1,55 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/TestSuite/SI/Makefile b/Source/TestSuite/SI/Makefile index 29142c708b..dab00344c8 100644 --- a/Source/TestSuite/SI/Makefile +++ b/Source/TestSuite/SI/Makefile @@ -1,130 +1,130 @@ -#--------------------------------------------------------------------------------- -# Clear the implicit built in rules -#--------------------------------------------------------------------------------- -.SUFFIXES: -#--------------------------------------------------------------------------------- -ifeq ($(strip $(DEVKITPPC)),) -$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") -endif - -include $(DEVKITPPC)/wii_rules - -#--------------------------------------------------------------------------------- -# TARGET is the name of the output -# BUILD is the directory where object files & intermediate files will be placed -# SOURCES is a list of directories containing source code -# INCLUDES is a list of directories containing extra header files -#--------------------------------------------------------------------------------- -TARGET := $(notdir $(CURDIR)) -BUILD := build -SOURCES := source -DATA := data -INCLUDES := - -#--------------------------------------------------------------------------------- -# options for code generation -#--------------------------------------------------------------------------------- - -CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) -CXXFLAGS = $(CFLAGS) - -LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map - -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -LIBS := -lfat -logc -lm - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS := - -#--------------------------------------------------------------------------------- -# no real need to edit anything past this point unless you need to add additional -# rules for different file extensions -#--------------------------------------------------------------------------------- -ifneq ($(BUILD),$(notdir $(CURDIR))) -#--------------------------------------------------------------------------------- - -export OUTPUT := $(CURDIR)/$(TARGET) - -export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ - $(foreach dir,$(DATA),$(CURDIR)/$(dir)) - -export DEPSDIR := $(CURDIR)/$(BUILD) - -#--------------------------------------------------------------------------------- -# automatically build a list of object files for our project -#--------------------------------------------------------------------------------- -CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) -CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) -sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) -SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) - export LD := $(CC) -else - export LD := $(CXX) -endif - -export OFILES := $(addsuffix .o,$(BINFILES)) \ - $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ - $(sFILES:.s=.o) $(SFILES:.S=.o) - -#--------------------------------------------------------------------------------- -# build a list of include paths -#--------------------------------------------------------------------------------- -export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ - $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ - -I$(CURDIR)/$(BUILD) \ - -I$(LIBOGC_INC) - -#--------------------------------------------------------------------------------- -# build a list of library paths -#--------------------------------------------------------------------------------- -export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ - -L$(LIBOGC_LIB) - -export OUTPUT := $(CURDIR)/$(TARGET) -.PHONY: $(BUILD) clean - -#--------------------------------------------------------------------------------- -$(BUILD): - @[ -d $@ ] || mkdir -p $@ - @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -#--------------------------------------------------------------------------------- -clean: - @echo clean ... - @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol - -#--------------------------------------------------------------------------------- -else - -DEPENDS := $(OFILES:.o=.d) - -#--------------------------------------------------------------------------------- -# main targets -#--------------------------------------------------------------------------------- -$(OUTPUT).dol: $(OUTPUT).elf -$(OUTPUT).elf: $(OFILES) - -#--------------------------------------------------------------------------------- -# This rule links in binary data with the .jpg extension -#--------------------------------------------------------------------------------- -%.jpg.o : %.jpg -#--------------------------------------------------------------------------------- - @echo $(notdir $<) - $(bin2o) - --include $(DEPENDS) - -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- +#--------------------------------------------------------------------------------- +# Clear the implicit built in rules +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- +ifeq ($(strip $(DEVKITPPC)),) +$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") +endif + +include $(DEVKITPPC)/wii_rules + +#--------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# INCLUDES is a list of directories containing extra header files +#--------------------------------------------------------------------------------- +TARGET := $(notdir $(CURDIR)) +BUILD := build +SOURCES := source +DATA := data +INCLUDES := + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- + +CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) +CXXFLAGS = $(CFLAGS) + +LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map + +#--------------------------------------------------------------------------------- +# any extra libraries we wish to link with the project +#--------------------------------------------------------------------------------- +LIBS := -lfat -logc -lm + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- + +export OUTPUT := $(CURDIR)/$(TARGET) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) + +export DEPSDIR := $(CURDIR)/$(BUILD) + +#--------------------------------------------------------------------------------- +# automatically build a list of object files for our project +#--------------------------------------------------------------------------------- +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) + export LD := $(CC) +else + export LD := $(CXX) +endif + +export OFILES := $(addsuffix .o,$(BINFILES)) \ + $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ + $(sFILES:.s=.o) $(SFILES:.S=.o) + +#--------------------------------------------------------------------------------- +# build a list of include paths +#--------------------------------------------------------------------------------- +export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) \ + -I$(LIBOGC_INC) + +#--------------------------------------------------------------------------------- +# build a list of library paths +#--------------------------------------------------------------------------------- +export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ + -L$(LIBOGC_LIB) + +export OUTPUT := $(CURDIR)/$(TARGET) +.PHONY: $(BUILD) clean + +#--------------------------------------------------------------------------------- +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol + +#--------------------------------------------------------------------------------- +else + +DEPENDS := $(OFILES:.o=.d) + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +$(OUTPUT).dol: $(OUTPUT).elf +$(OUTPUT).elf: $(OFILES) + +#--------------------------------------------------------------------------------- +# This rule links in binary data with the .jpg extension +#--------------------------------------------------------------------------------- +%.jpg.o : %.jpg +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + $(bin2o) + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- diff --git a/Source/TestSuite/SI/SI.vcproj b/Source/TestSuite/SI/SI.vcproj index ed7378f7fa..67478ce31d 100644 --- a/Source/TestSuite/SI/SI.vcproj +++ b/Source/TestSuite/SI/SI.vcproj @@ -1,55 +1,55 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/TestSuite/WPAD/WPAD.vcproj b/Source/TestSuite/WPAD/WPAD.vcproj index e46dd8f3fd..e8fd7ed5d5 100644 --- a/Source/TestSuite/WPAD/WPAD.vcproj +++ b/Source/TestSuite/WPAD/WPAD.vcproj @@ -1,55 +1,55 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/TestSuite/WRTC/WRTC.vcproj b/Source/TestSuite/WRTC/WRTC.vcproj index 3e39e52dcc..8efac213b0 100644 --- a/Source/TestSuite/WRTC/WRTC.vcproj +++ b/Source/TestSuite/WRTC/WRTC.vcproj @@ -1,55 +1,55 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/TestSuite/WSD/WSD.vcproj b/Source/TestSuite/WSD/WSD.vcproj index 030e203bdb..24e78f458b 100644 --- a/Source/TestSuite/WSD/WSD.vcproj +++ b/Source/TestSuite/WSD/WSD.vcproj @@ -1,55 +1,55 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/UnitTests/UnitTests.vcproj b/Source/UnitTests/UnitTests.vcproj index f15b4ac7b7..b48c85c257 100644 --- a/Source/UnitTests/UnitTests.vcproj +++ b/Source/UnitTests/UnitTests.vcproj @@ -1,357 +1,357 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/ActionReplay/CodeTypesGuide.txt b/docs/ActionReplay/CodeTypesGuide.txt index 9483cceac9..88aa4be163 100644 --- a/docs/ActionReplay/CodeTypesGuide.txt +++ b/docs/ActionReplay/CodeTypesGuide.txt @@ -1,304 +1,304 @@ -omments: 1 - -A Compendium of Gamecube Action Replay Code Types - -Note: This is note a Complete code type list. - -The purpose of this document is to catalogue and explain the effects of different AR code types in a clear, concise, and easy to read format. Please note that this document is not intended to explain EVERY code type, only those of interest to the amateur hacker. - -It would not have been possible to write this document without Kenobi's "GCN AR CODES TYPES EXPLANATION", found at www.GSCentral.com, so a big thank-you goes to Kenobi and Parasyte for their contributions to the GCN hacking scene. - -Kenobi's documentation is recommended reading as it is very complete, precise, and exact in it's explanations. However, that is also it's main flaw, it's TOO complex and technical for the casual or newbie hacker to understand. If "Address = ((0x0wXXXXXXX) AND 0x01FFFFFF) OR 0x80000000)" makes any sense to you, then I implore you to read Kenobi's guide instead. The intended audience for this document is people who'd rather have things explained in plain English. - -It should be noted that every decrypted AR code has a basic two-part format that is universal to every code. The first half contains the code type and address to be written to. The second half contains the value to be written. - -The Gamecube has a memory range of 80000000 - 817FFFFF (cached), or C0000000 - C17FFFFF (uncached). However for the sake of simplicity, the AR uses an offset number in the range of 00000000 - 017FFFFF. The code type identifier is an 8-bit value that is applied to the first two digits of the offset. For example, if your offset is 00012345, and you wish to perform a 32-bit write (04), you simply add (04000000) + (00012345) = 04012345. - -In order to conserve space and simplicity, only the 8-bit code type identifier and particulars of the second half of the code will be explained below, as the method for procuring the first half has already been described above ;) - -Terms: - -8-bit - Byte - 0x12 -16-bit - Halfword - 0x1234 -32-bit - Word - 0x12345678 - ----Writes--- - -(00) - NNNNNNXX -8-bit write. X is the value, N is the number of times to repeat. - -(02) NNNNXXXX -16-bit write. X is the value, N is the number of times to repeat. - -(04) XXXXXXXX -32-bit write. X is the value. - -Examples: - -00006500 00000312 -Will write byte 0x12 to 80006500, 80006501, 80006502, 800067503. - -02006500 00011234 -Will write halfword 0x1234 to 80006500, 80006502. - -05006500 12345678 -Will write word 0x12345678 to 81006500. - - ----Addition--- - -(80) - 000000XX -8-bit Addition. Load the byte at the address, add X to it, and save resulting byte. - -(82) - 0000XXXX -16-bit Addition. Load the halfword at the address, add X to it, and save resulting halfword. - -(84) - XXXXXXXX -32-bit Addition. Load the word at the address, add X to it, and save resulting word. - ----Single Line Activators--- - -***Equal*** -(08) 000000XX -8-bit Equal activator. - -(0A) 0000XXXX -16-bit Equal activator. - -(0C) XXXXXXXX -32-bit Equal activator. - -X is the value the address must equal to activate the next line of code. - -***NOT Equal*** -(10) 000000XX -8-bit NOT Equal activator. - -(12) 0000XXXX -16-bit NOT Equal activator. - -(14) XXXXXXXX -32-bit NOT Equal activator. - -If the value stored at the address is not equal to X, activate the next line of code. - -***If Lower (signed)*** -(18) 000000XX -8-bit If Lower (signed) activator. - -(1A) 0000XXXX -16-bit If Lower (signed) activator. - -(1C) XXXXXXXX -32-bit If Lower (signed) activator. - -If the value stored at the address is lower than X, activate the next line of code. - -***If Higher (signed)*** -(20) 000000XX -8-bit If Higher (signed) activator. - -(22) 0000XXXX -16-bit If Higher (signed) activator. - -(24) XXXXXXXX -32-bit If Higher (signed) activator. - -If the value stored at the address is higher than X, activate the next line of code. - -***If Lower (unsigned)*** -(28) 000000XX -8-bit If Lower (unsigned) activator. - -(2A) 0000XXXX -16-bit If Lower (unsigned) activator. - -(2C) XXXXXXXX -32-bit If Lower (unsigned) activator. - -If the value stored at the address is lower than X, activate the next line of code. - -***If Higher (unsigned)*** -(30) 000000XX -8-bit If Higher (unsigned) activator. - -(32) 0000XXXX -16-bit If Higher (unsigned) activator. - -(34) XXXXXXXX -32-bit If Higher (unsigned) activator. - -If the value stored at the address is higher than X, activate the next line of code. - ----Double Line Activators--- - -***Equal*** -(48) 000000XX -8-bit activator. - -(4A) 0000XXXX -16-bit activator. - -(4C) XXXXXXXX -32-bit activator. - -X is the value the address must equal to activate the next two lines of code. - -***NOT Equal*** -(50) 000000XX -8-bit NOT Equal activator. - -(52) 0000XXXX -16-bit NOT Equal activator. - -(54) XXXXXXXX -32-bit NOT Equal activator. - -If the value stored at the address is not equal to X, activate the next two lines of code. - -***If Lower (signed)*** -(58) 000000XX -8-bit If Lower (signed) activator. - -(5A) 0000XXXX -16-bit If Lower (signed) activator. - -(5C) XXXXXXXX -32-bit If Lower (signed) activator. - -If the value stored at the address is lower than X, activate the next two lines of code. - -***If Higher (signed)*** -(60) 000000XX -8-bit If Higher (signed) activator. - -(62) 0000XXXX -16-bit If Higher (signed) activator. - -(64) XXXXXXXX -32-bit If Higher (signed) activator. - -If the value stored at the address is higher than X, activate the next two lines of code. - -***If Lower (unsigned)*** -(68) 000000XX -8-bit If Lower (unsigned) activator. - -(6A) 0000XXXX -16-bit If Lower (unsigned) activator. - -(6C) XXXXXXXX -32-bit If Lower (unsigned) activator. - -If the value stored at the address is lower than X, activate the next two lines of code. - -***If Higher (unsigned)*** -(70) 000000XX -8-bit If Higher (unsigned) activator. - -(72) 0000XXXX -16-bit If Higher (unsigned) activator. - -(74) XXXXXXXX -32-bit If Higher (unsigned) activator. - -If the value stored at the address is higher than X, activate the next two lines of code. - ----Multi-Line Activators--- - -Note that all multi-line codes must end with the line 00000000 40000000. - -***Equal*** -(88) 000000XX -8-bit activator. - -(8A) 0000XXXX -16-bit activator. - -(8C) XXXXXXXX -32-bit activator. - -X is the value the address must equal to activate the next lines of code. - -***NOT Equal*** -(90) 000000XX -8-bit NOT Equal activator. - -(92) 0000XXXX -16-bit NOT Equal activator. - -(94) XXXXXXXX -32-bit NOT Equal activator. - -If the value stored at the address is not equal to X, activate the next lines of code. - -***If Lower (signed)*** -(98) 000000XX -8-bit If Lower (signed) activator. - -(9A) 0000XXXX -16-bit If Lower (signed) activator. - -(9C) XXXXXXXX -32-bit If Lower (signed) activator. - -If the value stored at the address is lower than X, activate the next lines of code. - -***If Higher (signed)*** -(A0) 000000XX -8-bit If Higher (signed) activator. - -(A2) 0000XXXX -16-bit If Higher (signed) activator. - -(A4) XXXXXXXX -32-bit If Higher (signed) activator. - -If the value stored at the address is higher than X, activate the next lines of code. - -***If Lower (unsigned)*** -(A8) 000000XX -8-bit If Lower (unsigned) activator. - -(AA) 0000XXXX -16-bit If Lower (unsigned) activator. - -(AC) XXXXXXXX -32-bit If Lower (unsigned) activator. - -If the value stored at the address is lower than X, activate the next lines of code. - -***If Higher (unsigned)*** -(B0) 000000XX -8-bit If Higher (unsigned) activator. - -(B2) 0000XXXX -16-bit If Higher (unsigned) activator. - -(B4) XXXXXXXX -32-bit If Higher (unsigned) activator. - -If the value stored at the address is higher than X, activate the next lines of code. - ----Alignment--- - -Codes must be properly aligned depending on the type of code. -8-bit codes can be used on ANY address. -16-bit codes must have an address that is a multiple of 2: 0,2,4,6,8,A,C,E. -32-bit codes must have an address that is a multiple of 4:0,4,8,C. -If codes aren't aligned, they may not work, or may cause your AR to spaz out and kill your cat (R.I.P. Snowball). - ----Signed & Unsigned Numbers--- - -Unsigned means : -For 8-bits : 0x00 -> 0xFF = 0 to 255. -For 16-bits: 0x0000 -> 0xFFFF = 0 to 65535. -For 32-bits: 0x00000000 -> 0xFFFFFFFF = 0 to 4294967295. - -Signed means : -For 8-bits : 0x00 -> 0x7F = 0 to 127. -0x80 -> 0xFF = -127 to -1. -For 16-bits: 0x0000 -> 0x7FFF = 0 to 32767. -0x8000 -> 0xFFFF = -32768 to -1. -For 32-bits: 0x00000000 -> 0x7FFFFFFF = 0 to 2147483647. +omments: 1 + +A Compendium of Gamecube Action Replay Code Types + +Note: This is note a Complete code type list. + +The purpose of this document is to catalogue and explain the effects of different AR code types in a clear, concise, and easy to read format. Please note that this document is not intended to explain EVERY code type, only those of interest to the amateur hacker. + +It would not have been possible to write this document without Kenobi's "GCN AR CODES TYPES EXPLANATION", found at www.GSCentral.com, so a big thank-you goes to Kenobi and Parasyte for their contributions to the GCN hacking scene. + +Kenobi's documentation is recommended reading as it is very complete, precise, and exact in it's explanations. However, that is also it's main flaw, it's TOO complex and technical for the casual or newbie hacker to understand. If "Address = ((0x0wXXXXXXX) AND 0x01FFFFFF) OR 0x80000000)" makes any sense to you, then I implore you to read Kenobi's guide instead. The intended audience for this document is people who'd rather have things explained in plain English. + +It should be noted that every decrypted AR code has a basic two-part format that is universal to every code. The first half contains the code type and address to be written to. The second half contains the value to be written. + +The Gamecube has a memory range of 80000000 - 817FFFFF (cached), or C0000000 - C17FFFFF (uncached). However for the sake of simplicity, the AR uses an offset number in the range of 00000000 - 017FFFFF. The code type identifier is an 8-bit value that is applied to the first two digits of the offset. For example, if your offset is 00012345, and you wish to perform a 32-bit write (04), you simply add (04000000) + (00012345) = 04012345. + +In order to conserve space and simplicity, only the 8-bit code type identifier and particulars of the second half of the code will be explained below, as the method for procuring the first half has already been described above ;) + +Terms: + +8-bit - Byte - 0x12 +16-bit - Halfword - 0x1234 +32-bit - Word - 0x12345678 + +---Writes--- + +(00) - NNNNNNXX +8-bit write. X is the value, N is the number of times to repeat. + +(02) NNNNXXXX +16-bit write. X is the value, N is the number of times to repeat. + +(04) XXXXXXXX +32-bit write. X is the value. + +Examples: + +00006500 00000312 +Will write byte 0x12 to 80006500, 80006501, 80006502, 800067503. + +02006500 00011234 +Will write halfword 0x1234 to 80006500, 80006502. + +05006500 12345678 +Will write word 0x12345678 to 81006500. + + +---Addition--- + +(80) - 000000XX +8-bit Addition. Load the byte at the address, add X to it, and save resulting byte. + +(82) - 0000XXXX +16-bit Addition. Load the halfword at the address, add X to it, and save resulting halfword. + +(84) - XXXXXXXX +32-bit Addition. Load the word at the address, add X to it, and save resulting word. + +---Single Line Activators--- + +***Equal*** +(08) 000000XX +8-bit Equal activator. + +(0A) 0000XXXX +16-bit Equal activator. + +(0C) XXXXXXXX +32-bit Equal activator. + +X is the value the address must equal to activate the next line of code. + +***NOT Equal*** +(10) 000000XX +8-bit NOT Equal activator. + +(12) 0000XXXX +16-bit NOT Equal activator. + +(14) XXXXXXXX +32-bit NOT Equal activator. + +If the value stored at the address is not equal to X, activate the next line of code. + +***If Lower (signed)*** +(18) 000000XX +8-bit If Lower (signed) activator. + +(1A) 0000XXXX +16-bit If Lower (signed) activator. + +(1C) XXXXXXXX +32-bit If Lower (signed) activator. + +If the value stored at the address is lower than X, activate the next line of code. + +***If Higher (signed)*** +(20) 000000XX +8-bit If Higher (signed) activator. + +(22) 0000XXXX +16-bit If Higher (signed) activator. + +(24) XXXXXXXX +32-bit If Higher (signed) activator. + +If the value stored at the address is higher than X, activate the next line of code. + +***If Lower (unsigned)*** +(28) 000000XX +8-bit If Lower (unsigned) activator. + +(2A) 0000XXXX +16-bit If Lower (unsigned) activator. + +(2C) XXXXXXXX +32-bit If Lower (unsigned) activator. + +If the value stored at the address is lower than X, activate the next line of code. + +***If Higher (unsigned)*** +(30) 000000XX +8-bit If Higher (unsigned) activator. + +(32) 0000XXXX +16-bit If Higher (unsigned) activator. + +(34) XXXXXXXX +32-bit If Higher (unsigned) activator. + +If the value stored at the address is higher than X, activate the next line of code. + +---Double Line Activators--- + +***Equal*** +(48) 000000XX +8-bit activator. + +(4A) 0000XXXX +16-bit activator. + +(4C) XXXXXXXX +32-bit activator. + +X is the value the address must equal to activate the next two lines of code. + +***NOT Equal*** +(50) 000000XX +8-bit NOT Equal activator. + +(52) 0000XXXX +16-bit NOT Equal activator. + +(54) XXXXXXXX +32-bit NOT Equal activator. + +If the value stored at the address is not equal to X, activate the next two lines of code. + +***If Lower (signed)*** +(58) 000000XX +8-bit If Lower (signed) activator. + +(5A) 0000XXXX +16-bit If Lower (signed) activator. + +(5C) XXXXXXXX +32-bit If Lower (signed) activator. + +If the value stored at the address is lower than X, activate the next two lines of code. + +***If Higher (signed)*** +(60) 000000XX +8-bit If Higher (signed) activator. + +(62) 0000XXXX +16-bit If Higher (signed) activator. + +(64) XXXXXXXX +32-bit If Higher (signed) activator. + +If the value stored at the address is higher than X, activate the next two lines of code. + +***If Lower (unsigned)*** +(68) 000000XX +8-bit If Lower (unsigned) activator. + +(6A) 0000XXXX +16-bit If Lower (unsigned) activator. + +(6C) XXXXXXXX +32-bit If Lower (unsigned) activator. + +If the value stored at the address is lower than X, activate the next two lines of code. + +***If Higher (unsigned)*** +(70) 000000XX +8-bit If Higher (unsigned) activator. + +(72) 0000XXXX +16-bit If Higher (unsigned) activator. + +(74) XXXXXXXX +32-bit If Higher (unsigned) activator. + +If the value stored at the address is higher than X, activate the next two lines of code. + +---Multi-Line Activators--- + +Note that all multi-line codes must end with the line 00000000 40000000. + +***Equal*** +(88) 000000XX +8-bit activator. + +(8A) 0000XXXX +16-bit activator. + +(8C) XXXXXXXX +32-bit activator. + +X is the value the address must equal to activate the next lines of code. + +***NOT Equal*** +(90) 000000XX +8-bit NOT Equal activator. + +(92) 0000XXXX +16-bit NOT Equal activator. + +(94) XXXXXXXX +32-bit NOT Equal activator. + +If the value stored at the address is not equal to X, activate the next lines of code. + +***If Lower (signed)*** +(98) 000000XX +8-bit If Lower (signed) activator. + +(9A) 0000XXXX +16-bit If Lower (signed) activator. + +(9C) XXXXXXXX +32-bit If Lower (signed) activator. + +If the value stored at the address is lower than X, activate the next lines of code. + +***If Higher (signed)*** +(A0) 000000XX +8-bit If Higher (signed) activator. + +(A2) 0000XXXX +16-bit If Higher (signed) activator. + +(A4) XXXXXXXX +32-bit If Higher (signed) activator. + +If the value stored at the address is higher than X, activate the next lines of code. + +***If Lower (unsigned)*** +(A8) 000000XX +8-bit If Lower (unsigned) activator. + +(AA) 0000XXXX +16-bit If Lower (unsigned) activator. + +(AC) XXXXXXXX +32-bit If Lower (unsigned) activator. + +If the value stored at the address is lower than X, activate the next lines of code. + +***If Higher (unsigned)*** +(B0) 000000XX +8-bit If Higher (unsigned) activator. + +(B2) 0000XXXX +16-bit If Higher (unsigned) activator. + +(B4) XXXXXXXX +32-bit If Higher (unsigned) activator. + +If the value stored at the address is higher than X, activate the next lines of code. + +---Alignment--- + +Codes must be properly aligned depending on the type of code. +8-bit codes can be used on ANY address. +16-bit codes must have an address that is a multiple of 2: 0,2,4,6,8,A,C,E. +32-bit codes must have an address that is a multiple of 4:0,4,8,C. +If codes aren't aligned, they may not work, or may cause your AR to spaz out and kill your cat (R.I.P. Snowball). + +---Signed & Unsigned Numbers--- + +Unsigned means : +For 8-bits : 0x00 -> 0xFF = 0 to 255. +For 16-bits: 0x0000 -> 0xFFFF = 0 to 65535. +For 32-bits: 0x00000000 -> 0xFFFFFFFF = 0 to 4294967295. + +Signed means : +For 8-bits : 0x00 -> 0x7F = 0 to 127. +0x80 -> 0xFF = -127 to -1. +For 16-bits: 0x0000 -> 0x7FFF = 0 to 32767. +0x8000 -> 0xFFFF = -32768 to -1. +For 32-bits: 0x00000000 -> 0x7FFFFFFF = 0 to 2147483647. 0x80000000 -> 0xFFFFFFFF = -2147483648 to -1. \ No newline at end of file diff --git a/docs/ActionReplay/GCNCodeTypes.txt b/docs/ActionReplay/GCNCodeTypes.txt index 1099a1ee5a..bc924e68b7 100644 --- a/docs/ActionReplay/GCNCodeTypes.txt +++ b/docs/ActionReplay/GCNCodeTypes.txt @@ -1,955 +1,955 @@ - - -------------------------------- - GCN AR CODES TYPES EXPLANATION - -------------------------------- - - v1.1 by kenobi - -History : - -v1.1 : Removed the 'NCT' codes types. - Added 'Byte Copy', 'Pointer Mod' and 'AND/OR' codes type. - Added some notes about the (m) codes, the 'write to CCxxxxxx' code. - Fixed some typos. - -v1.0 : Initial release. - -Special thanks to Parasyte for his help/informations about some codes types. - -This document has been written for educational purpose. -It may help you create codes for the GCN AR, or they might be useless -junk... Your call ! -If you know the GBA's ARv3 codes types, you'll find the GCN AR codes types -quite similar... -Also note that the PS2's AR MAX codes types are very close to the GCN ones. - - -Warning : This document is meant for advanced codes creators, NOT FOR -NEWBIES OR WANNABES. Sorry. -*************** If you are an experienced, known (by me or gscentral -admins) code hacker, and you don't - understand this document, you may try to ask help using the -www.gscentral.com forums - (or PM me there). - - -Special Note 1 : All adresses MUST be compatible with the data size you want -the codes are using. -*************** That means : -ANY address can be used for BYTE -reading/writing. - - -Address MUST be a multiple of 2 for HALFWORD -reading/writing. - (Last hex number of the address must be either -:0,2,4,6,8,A,C,E) - - -Address MUST be a multiple of 4 for WORD -reading/writing. - (Last hex number of the address must be either -:0,4,8,C) - - If you don't follow this rule, the codes won't work (or the -AR might crash)...! - - -Special Note 2 : All codes are formatted like that : XXXXXXXX YYYYYYYY. - I called ADDRESS (in caps) the XXXXXXXX, and VALUE (in -caps) the YYYYYYYY. - - -Special Note 3 : GCN memory range is 0x80000000 - 0x817FFFFF cached, and -0xC0000000 - 0xC17FFFFF uncached. - (don't ask what it means, I don't get it either :P). - The codes will usualy write to the cached area. - - -Special Note 4 : The codes type numbers I give after a code name is a number -created like this: - For "Type zX" codes , the number X is : - AAA (3 most significant bits of the code's "VALUE") - - For normal codes, the number in parenthesis after the name -of the code is : - AAABBCC (7 most significant bits of the code's -"ADDRESS") - AAA : type bits. - BB : subtype bits. - CC : value bits. - - You can use them as reference, or just ignore them... - - -Special Note 5 : Any "unused" data could be filled with random numbers to -create a "unique encryption", - which could "sign" your codes. I randomly explained how it -works. It might not work - with every code. This feature isn't really interessing, but -I felt like it should be - noticed. - -Special Note 6 : "Register 1BB4" is one of the register (= a given place in -the NGC memory) that the AR - uses to store some data while executing codes. - - -Special Note 7 : The addresses, values, and all the numbers starting by -"0x", or having the letter(s) - A, B, C, D, E and/or F in them are Hexadecimal numbers. If -you don't know what hexadecimal - is, make a search in Google. - - -Special Note 8 : If you don't know C/C++, be aware that "<<" means "Shift -left", and ">>" "Shift right". - "Shift left" is the "Lsh" button of the Windows calculator -(in "Scientific" mode). - "Shift right" is gotten by clicking the "Inv" checkbox, -then the "Lsh" button of the - Windows calculator (in "Scientific" mode). - - - - - ________________ - ---------------- - | Type z Codes | - ---------------- - - - -"Type z" are codes which have an ADDRESS eqal to 00000000 ("z" stands for -"zero"). - -For any "Type zX" codes : X = code type = (VALUE >> 29) AND 0x07. - (If X>4, the code will be skipped) - - -------------------------------- -// Type "z0" : END OF CODES // -------------------------------- - -1 line code. - -00000000 00000000 - -It means "end of the code" (or "no more codes are executed"). - -The AR will "give" back the hand to the game, and then will start execute -codes -from the very 1st of the list. - - - --------------------------------------------- -// Type "z2" : Normal execution of codes // --------------------------------------------- - -1 line code. - -00000000 40000000 - -Set register 1BB4 to 0. -It means that the AR goes back to the normal execution of codes. -(And it should break a "stop executing codes", set when register 1BB4 is = -2). - - ------------------------------------------------------ -// Type "z3" : Executes all codes in the same row // ------------------------------------------------------ - -1 line code. - -00000000 60000000 - -Set register 1BB4 to 1. -It means the AR will execute all the codes, without giving back the hand to -the -game, unless register 1BB4 changes value (with a "z2" code for exemple). - - -------------------------------- -// Type "z4" : Fill & Slide // -------------------------------- - -2 lines code. - -00000000 8XXXXXXX -Y1Y2Y3Y4 Z1Z2Z3Z4 - - -Address = 8XXXXXXX AND 0x81FFFFFF. - -Size = (address >> 25) AND 0x03. -(Size 0 = 8bits, Size 1 = 16 bits, Size 2 = 32 bits. Size 3 = Unused) - -Value = Y1Y2Y3Y4. - -Address increment = 0000Z3Z4 if (Z1 >> 3 = 0). - = FFFFZ3Z4 if (Z1 >> 3 = 1). - -NOTE : When using halfword (or word), make address increment >> 1 (or >> 2) -when - computing the code. - -Value increment = 00000000Z1 if (Z1 >> 3 = 0). - = FFFFFFFFZ1 if (Z1 >> 3 = 1). - -Number of values to write = Z2. - -NOTE : If Z2 = 0, nothing will be written (it'll be like the code isn't -executed). - - -Small note : ------------- -As the sign of the address increment and the value increment are shared, you -MUST start -from the 1st address when using a positive value increment, and start from -the last address -when using a negative value increment. - - ------------------------------------------- -// Type "z4 - Size 3" : Memory Copy // ------------------------------------------- - -These codes were 'created' by me (kenobi). -The only way to use them is to enter and enable the 'Enablers' codes. -You also HAVE TO add the Master Code flag to these Enabler codes' -indentifier -(or to include it into the (m) code), else they won't work properly. -Finally, the 'Enabler' codes and the actual codes must be entered -separately. -They should work on ANY AR (at least up to version 1.14b). - - -A - Memory Copy Without Pointer Support : ------------------------------------------ - -Enabler (must be on!) : -04001E48 48000769 -040025B0 5525043E -040025B4 4BFFF644 - - -Exemple of byte copy : -00000000 86393FA8 -80393FA0 00000001 - - -Here is how it works : -00000000 8XXXXXXX -YYYYYYYY 0000ZZZZ - -8XXXXXXX = [Destination address] OR 0x06000000. -YYYYYYYY = [Source address]. -ZZZZ = number of bytes to copy (0x0000 will copy 0 byte, 0xFFFF will copy -65535 bytes). - -Important : the 16-bits number before ZZZZ MUST BE '0000', else it'll create -errors !!! - -So, if you follow what I explained, you can see that my code exemple will -copy 2 bytes, -from 80393FA0 to 80393FA8. - - - - -B - Memory Copy With Pointers Support : ---------------------------------------- - -Enabler (must be on!) : -04001E48 48000769 -040025B0 5525043E -040025B4 2C060000 -040025B8 4182000C -040025BC 80630000 -040025C0 80840000 -040025C4 4BFFF634 - - -With this code, if you put any data in the 8 upper bits of the value, the AR -will use -the addresses in the code as pointers addresses - -Exemple : - -00000000 86002F04 -80002F00 01000138 - -Important : the 8-bits number before ZZZZ MUST BE '00', else it'll create -errors !!! - -As the value start with '01' (could have been anything, but '00'), the AR -will load -the 32bits value at 80002F00 and use it as the source address, then load the -32bits -value at 80002F04 and use it as the destination address, and finally will -copy 138 bytes -from the source address to the destination address. - -Note that if you put '00' in the start of the value, the code will work just -like -the 'Memory Copy Without Pointer Support' code. - -If you need to add an offset to the pointer addresses, you'll have to do -this trick : -copy the source pointer address to 80002F00, the destination pointer address -to 80002F04, -add the offset values to theses pointer addresses (using the 'Add' code -type), and finally -use the 'Memory Copy with Pointers Support' to copy the bytes. - - -Exemple : -00000000 86002F00 <- Copy the 32bits (=4 bytes) source pointer address -804C8268 00000004 from 804C8268 to 80002F00. - -00000000 86002F04 <- Copy the 32bits (=4 bytes) destination pointer address -804C8268 00000004 from 804C8268 to 80002F04. - -84002F00 00000098 <- Add the offset 0x98 to the source pointer address at -80002F00. - -84002F04 000001D0 <- Add the offset 0x1D0 to the source pointer address at -80002F04. - -4A44F0A8 00000030 <- (if the user press R+Z...). - -00000000 86002F04 <- Copy 0x138 bytes from the address stored at 80002F00 -(=pointer address+0x98) -80002F00 01000138 to the address stored at 80002F04 (=pointer address + -0x1D0). - - - - - - - - - - ________________ - ---------------- - | Normal Codes | - ---------------- - - - -For any "Normal Codes", you have : - -SubType = (ADDRESS >> 30) AND 0x03. - -Type = (ADDRESS >> 27) AND 0x07. - -Size = (ADDRESS >> 25) AND 0x03. - -(usually, Size 0 = 8bits, Size 1 = 16 bits, Size 2 = 32 bits. -For some codes, Size 3 = Floating point single precision) - - - - ------------- -// Type 0 // ------------- - --------------------------------------- -// SubType 0 : Ram write (and fill) // (can be called "00", "01" and "02") --------------------------------------- - -1 line code. - -0.0.x ------ - -0wXXXXXX Y1Y2Y3Y4 - -(w < 8!) - -Address = ((0x0wXXXXXXX) AND 0x01FFFFFF) OR 0x80000000). - -Size = (address >> 25) AND 0x03. - -If Size = 0 [00] : - fills area [Address ; Address + Y1Y2Y3] with value Y4. - -If Size = 1 [02] : - fills area [Address ; Address + (Y1Y2 << 1)] with value Y3Y4. - -If Size = 2 [04] : - writes word Y1Y2Y3Y4 to Address. - - -Examples : - -00023000 00000312 -will write byte 0x12 to 80023000, 80023001, 80023002, 80023003. - -02023000 00011234 -will write halfword 0x1234 to 80023000, 80023002. - -05023000 12345678 -will write halfword 0x12345678 to 81023000. - - - -------------------------------- -// SubType 1 : Write to pointer (can be called "04", "05" and "06") -------------------------------- - -1 line code. - -0.1.x ------ - -1 line code. - -4wXXXXXX Y1Y2Y3Y4 - -(w < 8!) - -Address = ((0x4wXXXXXX) AND 0x01FFFFFF) OR 0x80000000. - -Size = (Address >> 25) AND 0x03. - -Pointer Address = [Word stored at Address]. - -This code will make the AR load the word stored at the address provided in -the code, -(also called the "Pointer Address"), and check if it's a valid address (ie. -if it's in -the [80000000~81800000[ range). It it is one, it will add an offset to it, -and it will -write the data provided in the code to this new address. - - -If Size = 0 [40] : -AR will write the byte Y4 at [Pointer Address + Y1Y2Y3]. - -If Size = 1 [42] : -AR will write the halfword Y3Y4 at [Pointer Address + (Y1Y2 << 1)]. - -If Size = 2 [44] : -AR will write the word Y1Y2Y3Y4 at [Pointer Address]. - - - -REMOVE THE 'VALID ADDRESS' CHECK, AKA 'POINTER MOD' : ------------------------------------------------------ - -This code was 'created' by me (kenobi). -The only way to use it is to enter and enable the 'Enabler' code. -You also HAVE TO add the Master Code flag to these Enabler codes' -indentifier -(or to include it into the (m) code), else they won't work properly. -Finally, the 'Enabler' codes and the actual codes must be entered -separately. -It should work on ANY AR (at least up to version 1.14b). - - -Enabler (must be on) : -04001FA4 48000014 - -Once you use this code, the 'Write to Pointer' code will stop checking if -the address you -point to is a valid address. -That means that you can write to virtual memory without a TLB (m) code, but -you have to make -sure that the address the pointer code reads is a valid address (else, it'll -crash). - -Exemple (courtesy of donny2112) : -04002F0C 7FC39C9C -42002F0C 00010000 -42002F0C 03ED0000 -42002F0C 04F70000 -42002F0C 05BB0000 - -The first line will write '7FC39C9C' to 80002F0C. -Then, the other lines will write 0x0000 to 0x7FC39C9C+2*1, -0x7FC39C9C+2*0x3ED, 0x7FC39C9C+2*0x4F7, -and finally 0x7FC39C9C+2*0x5BB. - -The advantage of this code, over a TLB (m) code, is that it only needs a 1 -lines enabler, it is -compatible with all games and all ARs, and it allows you to use 8/16/32bits -ram write. - -The downside is that if you point to an invalid address, the GC will just -crash. -If you're not sure that you'll point to a valid address, you can use this -combinaison of code to check -it manually (in this exemple, I make sure that the address is in the -0x80000000~817F0000 range) : - -74XXXXXX 80000000 <- If value > 0x80000000 -2CXXXXXX 81800000 <- and If value < 0x81800000 -44XXXXXX Y1Y2Y3Y4 <- then execute this pointer code. - -XXXXXXXX being the address where the Pointer Address is stored. - - - - ------------------------ -// SubType 2 : Add code (can be called "08", "09" and "0A") ------------------------ - -1 line code. - -0.2.x ------ - -1 line code. - -8wXXXXXX Y1Y2Y3Y4 - -(w < 8!) - -Address = (0x8wXXXXXX AND 0x81FFFFFF). - -Size = (Address >> 25) AND 0x03. - -if Size = 0 [80] : - Loads byte stored at [Address], adds Y1Y2Y3Y4 to it, and stores the -resulting byte - (= result AND 0xFF) at [Address]. - -if Size = 1 [82] : - Loads halfword stored at [Address], adds Y1Y2Y3Y4 to it, and stores the -resulting halfword - (= result AND 0xFFFF) at [Address]. - -if Size = 2 [84] : - Loads word stored at [Address], adds Y1Y2Y3Y4 to it, and stores the result -at [Address]. - -if Size = 3 [86] : - Loads floating value stored at [Address], adds Y1Y2Y3Y4 (must be a -floating point single precision value) - to it, and stores the result at [Address]. - - -Change ADD to AND : ------------------- -This code was 'created' by me (kenobi). -The only way to use it is to enter and enable the 'Enabler' code. -You also HAVE TO add the Master Code flag to these Enabler codes' -indentifier -(or to include it into the (m) code), else they won't work properly. -Finally, the 'Enabler' codes and the actual codes must be entered -separately. -This change is definitive (until you reboot the Game) : - -Enable 8-bits AND : -0400200C 7C002038 - - -Enable 16-bits AND : -0400201C 7C002038 - - -Enable 32-bits AND : -0400202C 7C002038 - -Enable 8~32bits AND : -00000000 8400200C -7C002038 00030004 - - -Change ADD to OR : ------------------- -This code was 'created' by me (kenobi). -The only way to use it is to enter and enable the 'Enabler' code. -You also HAVE TO add the Master Code flag to these Enabler codes' -indentifier -(or to include it into the (m) code), else they won't work properly. -Finally, the 'Enabler' codes and the actual codes must be entered -separately. -This change is definitive (until you reboot the Game) : - -Enable 8-bits OR : -0400200C 7C002378 - -Enable 16-bits OR : -0400201C 7C002378 - -Enable 32-bits OR : -0400202C 7C002378 - -Enable 8~32bits OR : -00000000 8400200C -7C002378 00030004 - -Note : you can't mix 'ADD', 'AND' and 'OR' codes for the same code type -(8/16/32bits). - - - ----------------------------------------------- -// SubType 3 : Master Code & Write to CCXXXXXX (can be called "0E" and "0F") ----------------------------------------------- - -1 line code. - -0.3.x ------ - -1 line code. - -CwXXXXXX Y1Y2Y3Y4 - -(w < 8!) - -Address = ((0x6wXXXXXX) AND 0x01FFFFFF) OR 0x80000000). - -Size = (Address >> 25) AND 0x03. - - - - -If Size = 2 (0.3.2) : Master Code (C4XXXXXX Y1Y2Y3Y4) ------------------------------------------------------ - -Y4 = Master Code Number. - 0x00 : executed only once, just before the game bootup. - Only one (m) code can have the '00' number (the others will be -skipped), - and it must be the very one in the (m) code list (else it'll be -skipped). - - 0x01~0x0F : executed continuously during the game execution. - (2 (or more) master codes that have the same Master Code -Number can't - be executed correctly if they are put one just after -another. - Only the first one will be executed, the other(s) will be -skipped). - -Y3 = number of codes to execute each time the AR "has the hand". - -Y2 AND 0x03 = Master Code Type : - -Type 0 : create a branch to SUBROUTINE 1. - (Save : R0 R3 R28 R29 R30 R31) - -Type 1 : backup 4 asm lines from the game, and write a Branch to MAIN -ROUTINE. - (Save : R3 R28 R29 R30 R31, Destroys : R0?) - -Type 2 : create a branch to 1 copy of SUBROUTINE 1. - (Save : R0 R3 R28 R29 R30 R31) - -Type 3 : create a branch to MAIN ROUTINE START (will execute the 4 asm lines -backed up - in Type 1, if any). - (Save : R0 R3 R28 R29 R30 R31) - - -Note : Putting random numbers in Y1 should change the encryption, thus -"signing" your - code (untested). - -Note : Don't use the Type 1 alone with a Master Code Number >0, else the AR -will backup its own - hook, and enter an infinite loop. So put a conditional code type make -that this code isn't - executed more than once. - - - -If (Size = 3) AND ((address AND 0x01FFFFFF ) < 0x01000000) (0.3.3): -------------------------------------------------------------------- - - Write halfword to CCXXXXXX (C6XXXXXX Y1Y2Y3Y4) - ---------------------------------------------- - -Address = 0xCCXXXXXX -Stores the halfword Y3Y4 at Address. - -Note : Putting random numbers in Y1Y2 should change the encryption, thus -"signing" your - code (untested). - - -If (Size = 3) AND ((address AND 0x01FFFFFF ) >= 0x01000000) (0.3.3): --------------------------------------------------------------------- - - Write word to CDXXXXXX (C7XXXXXX Y1Y2Y3Y4) - ------------------------------------------ - -Address = 0xCDXXXXXX -Stores the word Y1Y2Y3Y4 at Address. - -Note : Parasyte informed me that writing to 0xCDXXXXXX doesn't makes any -sense, and he thinks - it might be some kind of AR bug... - - - - - - - ************************************************** - * NOTES FOR ALL CONDITIONAL CODES (TYPE 1 TO 7). * - ************************************************** - -All the Conditional Codes are 1 line code, but you "need" to add another -line to make them work. -Conditional Code are used to trigger the next code(s) when an event happens, -for exemple give the -player 99 lifes when buttons L+R are pushed, or make the life becomes full -when it reaches 50% -of its value... - - -They all come in 3 "flavors" : 8, 16 and 32 bits. You select it by changing -the size data in the code. -Reminder : Size = (Address >> 25) AND 0x03 - -For all the Conditional Codes, you first take the value of the IN GAME data, -and compare it to -the value provided in the CODE data. The result, which should be read as -'True' (or 'False'), will -tell if the Conditional Code will activate the next codes. - -Anyway, Conditional Codes should be used by advanced code makers. -And don't ask for the "paddle" values, they seem to change for every game... -So find them yourself :-) - -The number I give as exemples has been made using BYTE size : - -08XXXXXX YYYYYY is the "If equal execute next code" generic value for a BYTE -comparison. -For halfwords, it'll be 0AXXXXXX YYYYYYYY, and for words 0CXXXXXX -YYYYYYYY... - - - --------------------------- -// Type 1 : If equal... // (can be called "10", "11" and "12") --------------------------- - -1.y.x ------ - -08XXXXXX YYYYYYYY - -(w >= 8!) - -Subtype 0 [08] : If equal, execute next line (else skip next line). -Subtype 1 [48] : If equal, execute next 2 lines (else skip next 2 lines). -Sybtype 2 [88] : If equal, execute all the codes below this one in the same -row (else execute - none of the codes below). -Subtype 3 [C8] : While NOT EQUAL,turn off all codes (infinite loop on the -code). - - - - - - ------------------------------- -// Type 2 : If NOT equal... // (can be called "20", "21" and "22") ------------------------------- - -2.y.x ------ - -10XXXXXX YYYYYYYY - - -Subtype 0 [10] : If NOT equal, execute next line (else skip next line). -Subtype 1 [50] : If NOT equal, execute next 2 lines (else skip next 2 -lines). -Sybtype 2 [90] : If NOT equal, execute all the codes below this one in the -same row (else execute - none of the codes below). -Subtype 3 [D0] : While EQUAL, turn off all codes (infinite loop on the -code). - - - - ------------------------------------- -// Type 3 : If lower... (signed) // (can be called "30", "31" and "32") ------------------------------------- - -Signed means : -For Bytes : values go from -128 to +127. -For Halfword : values go from -32768/+32767. -For Words : values go from -2147483648 to 2147483647. -For exemple, for the Byte comparison, 7F (127) will be > to FFFFFFFF (-1). -You HAVE to enter a 32bits signed number as value, even if you just want to -make an halfword -comparison. That's because 0000FFFF = 65535, and FFFFFFFF = -1). -You could choose any value (for exemple, +65536 for halfword code, but the -result will be always True -(or always False if you choose -65537...). - -3.y.x ------ - -18XXXXXX YYYYYYYY - -* WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * -WARNING * WARNING * - -If you used a "byte" size, this Type 3 code will actually be a "If lower... -(UNSIGNED)" ! -That means, no signed comparison for byte values !!! (AR bug?) - -* WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * -WARNING * WARNING * - -Subtype 0 [18] : If lower, execute next line (else skip next line). -Subtype 1 [58] : If lower, execute next 2 lines (else skip next 2 lines). -Sybtype 2 [98] : If lower, execute all the codes below this one in the same -row (else execute - none of the codes below). -Subtype 3 [D8] : While higher, turn off all codes (infinite loop on the -code). - - - -Note 1 : For 8 and 16 bits codes, you *could* fill the unused numbers in the -Value to change - the encrypted code, and "sign" them (unverified). - - - ------------------------------------- -// Type 4 : If higher... (signed) // (can be called "40", "41" and "42") ------------------------------------- - -Signed means : -For Bytes : values go from -128 to +127. -For Halfword : values go from -32768/+32767. -For Words : values go from -2147483648 to 2147483647. -For exemple, for the Byte comparison, 7F (127) will be > to FFFFFFFF (-1). -You HAVE to enter a 32bits signed number as value, even if you just want to -make an halfword -comparison. That's because 0000FFFF = 65535, and FFFFFFFF = -1). -You could choose any value (for exemple, +65536 for halfword code, but the -result will be always True -(or always False if you choose -65537...). - - -4.y.x ------ - -20XXXXXX YYYYYYYY - - -* WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * -WARNING * WARNING * - -If you used a "byte" size, this Type 4 code will actually be a "If lower... -(UNSIGNED)" ! -That means, no signed comparison for byte values !!! (AR bug?) - -* WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * -WARNING * WARNING * - -Subtype 0 [20] : If higher, execute next line (else skip next line). -Subtype 1 [60] : If higher, execute next 2 lines (else skip next 2 lines). -Sybtype 2 [A0] : If higher, execute all the codes below this one in the same -row (else execute - none of the codes below). -Subtype 3 [E0] : While lower, turn off all codes (infinite loop on the -code). - - -Note 1 : For 8 and 16 bits codes, you *could* fill the unused numbers in the -Value to change - the encrypted code, and "sign" them (unverified). - - - -------------------------------------- -// Type 5 : If lower... (unsigned) // (can be called "50", "51" and "52") -------------------------------------- - -Unsigned means : -For Bytes : values go from 0 to +255. -For Halfword : values go from 0 to +65535. -For Words : values go from 0 to 4294967295. -For exemple, for the Byte comparison, 7F (127) will be < to FF (255). - -5.y.x ------ - -28XXXXXX YYYYYYYY - - -Subtype 0 [28] : If lower, execute next line (else skip next line). -Subtype 1 [68] : If lower, execute next 2 lines (else skip next 2 lines). -Sybtype 2 [A8] : If lower, execute all the codes below this one in the same -row (else execute - none of the codes below). -Subtype 3 [E8] : While higher, turn off all codes (infinite loop on the -code). - - - --------------------------------------- -// Type 6 : If higher... (unsigned) // (can be called "60", "61" and "62") --------------------------------------- - -Unsigned means : -For Bytes : values go from 0 to +255. -For Halfword : values go from 0 to +65535. -For Words : values go from 0 to 4294967295. -For exemple, for the Byte comparison, 7F (127) will be < to FF (255). - - -6.y.x ------ - -30XXXXXX YYYYYYYY - - -Subtype 0 [30] : If higher, execute next line (else skip next line). -Subtype 1 [70] : If higher, execute next 2 lines (else skip next 2 lines). -Sybtype 2 [B0] : If higher, execute all the codes below this one in the same -row (else execute - none of the codes below). -Subtype 3 [F0] : While lower, turn off all codes (infinite loop on the -code). - - - - - ------------------------- -// Type 7 : If AND... // (can be called "70", "71" and "72") ------------------------- - -(if the result of ANDing the IN GAME and IN CODE values is <>0) - -7.y.x ------ - -38XXXXXX YYYYYYYY - - -Subtype 0 [38] : If AND, execute next line (else skip next line). -Subtype 1 [78] : If AND, execute next 2 lines (else skip next 2 lines). -Sybtype 2 [B8] : If AND, execute all the codes below this one in the same -row (else execute - none of the codes below). -Subtype 3 [F8] : While NOT AND, turn off all codes (infinite loop on the -code). - - - - - - - - * THE END * - + + -------------------------------- + GCN AR CODES TYPES EXPLANATION + -------------------------------- + + v1.1 by kenobi + +History : + +v1.1 : Removed the 'NCT' codes types. + Added 'Byte Copy', 'Pointer Mod' and 'AND/OR' codes type. + Added some notes about the (m) codes, the 'write to CCxxxxxx' code. + Fixed some typos. + +v1.0 : Initial release. + +Special thanks to Parasyte for his help/informations about some codes types. + +This document has been written for educational purpose. +It may help you create codes for the GCN AR, or they might be useless +junk... Your call ! +If you know the GBA's ARv3 codes types, you'll find the GCN AR codes types +quite similar... +Also note that the PS2's AR MAX codes types are very close to the GCN ones. + + +Warning : This document is meant for advanced codes creators, NOT FOR +NEWBIES OR WANNABES. Sorry. +*************** If you are an experienced, known (by me or gscentral +admins) code hacker, and you don't + understand this document, you may try to ask help using the +www.gscentral.com forums + (or PM me there). + + +Special Note 1 : All adresses MUST be compatible with the data size you want +the codes are using. +*************** That means : -ANY address can be used for BYTE +reading/writing. + + -Address MUST be a multiple of 2 for HALFWORD +reading/writing. + (Last hex number of the address must be either +:0,2,4,6,8,A,C,E) + + -Address MUST be a multiple of 4 for WORD +reading/writing. + (Last hex number of the address must be either +:0,4,8,C) + + If you don't follow this rule, the codes won't work (or the +AR might crash)...! + + +Special Note 2 : All codes are formatted like that : XXXXXXXX YYYYYYYY. + I called ADDRESS (in caps) the XXXXXXXX, and VALUE (in +caps) the YYYYYYYY. + + +Special Note 3 : GCN memory range is 0x80000000 - 0x817FFFFF cached, and +0xC0000000 - 0xC17FFFFF uncached. + (don't ask what it means, I don't get it either :P). + The codes will usualy write to the cached area. + + +Special Note 4 : The codes type numbers I give after a code name is a number +created like this: + For "Type zX" codes , the number X is : + AAA (3 most significant bits of the code's "VALUE") + + For normal codes, the number in parenthesis after the name +of the code is : + AAABBCC (7 most significant bits of the code's +"ADDRESS") + AAA : type bits. + BB : subtype bits. + CC : value bits. + + You can use them as reference, or just ignore them... + + +Special Note 5 : Any "unused" data could be filled with random numbers to +create a "unique encryption", + which could "sign" your codes. I randomly explained how it +works. It might not work + with every code. This feature isn't really interessing, but +I felt like it should be + noticed. + +Special Note 6 : "Register 1BB4" is one of the register (= a given place in +the NGC memory) that the AR + uses to store some data while executing codes. + + +Special Note 7 : The addresses, values, and all the numbers starting by +"0x", or having the letter(s) + A, B, C, D, E and/or F in them are Hexadecimal numbers. If +you don't know what hexadecimal + is, make a search in Google. + + +Special Note 8 : If you don't know C/C++, be aware that "<<" means "Shift +left", and ">>" "Shift right". + "Shift left" is the "Lsh" button of the Windows calculator +(in "Scientific" mode). + "Shift right" is gotten by clicking the "Inv" checkbox, +then the "Lsh" button of the + Windows calculator (in "Scientific" mode). + + + + + ________________ + ---------------- + | Type z Codes | + ---------------- + + + +"Type z" are codes which have an ADDRESS eqal to 00000000 ("z" stands for +"zero"). + +For any "Type zX" codes : X = code type = (VALUE >> 29) AND 0x07. + (If X>4, the code will be skipped) + + +------------------------------- +// Type "z0" : END OF CODES // +------------------------------- + +1 line code. + +00000000 00000000 + +It means "end of the code" (or "no more codes are executed"). + +The AR will "give" back the hand to the game, and then will start execute +codes +from the very 1st of the list. + + + +-------------------------------------------- +// Type "z2" : Normal execution of codes // +-------------------------------------------- + +1 line code. + +00000000 40000000 + +Set register 1BB4 to 0. +It means that the AR goes back to the normal execution of codes. +(And it should break a "stop executing codes", set when register 1BB4 is = +2). + + +----------------------------------------------------- +// Type "z3" : Executes all codes in the same row // +----------------------------------------------------- + +1 line code. + +00000000 60000000 + +Set register 1BB4 to 1. +It means the AR will execute all the codes, without giving back the hand to +the +game, unless register 1BB4 changes value (with a "z2" code for exemple). + + +------------------------------- +// Type "z4" : Fill & Slide // +------------------------------- + +2 lines code. + +00000000 8XXXXXXX +Y1Y2Y3Y4 Z1Z2Z3Z4 + + +Address = 8XXXXXXX AND 0x81FFFFFF. + +Size = (address >> 25) AND 0x03. +(Size 0 = 8bits, Size 1 = 16 bits, Size 2 = 32 bits. Size 3 = Unused) + +Value = Y1Y2Y3Y4. + +Address increment = 0000Z3Z4 if (Z1 >> 3 = 0). + = FFFFZ3Z4 if (Z1 >> 3 = 1). + +NOTE : When using halfword (or word), make address increment >> 1 (or >> 2) +when + computing the code. + +Value increment = 00000000Z1 if (Z1 >> 3 = 0). + = FFFFFFFFZ1 if (Z1 >> 3 = 1). + +Number of values to write = Z2. + +NOTE : If Z2 = 0, nothing will be written (it'll be like the code isn't +executed). + + +Small note : +------------ +As the sign of the address increment and the value increment are shared, you +MUST start +from the 1st address when using a positive value increment, and start from +the last address +when using a negative value increment. + + +------------------------------------------ +// Type "z4 - Size 3" : Memory Copy // +------------------------------------------ + +These codes were 'created' by me (kenobi). +The only way to use them is to enter and enable the 'Enablers' codes. +You also HAVE TO add the Master Code flag to these Enabler codes' +indentifier +(or to include it into the (m) code), else they won't work properly. +Finally, the 'Enabler' codes and the actual codes must be entered +separately. +They should work on ANY AR (at least up to version 1.14b). + + +A - Memory Copy Without Pointer Support : +----------------------------------------- + +Enabler (must be on!) : +04001E48 48000769 +040025B0 5525043E +040025B4 4BFFF644 + + +Exemple of byte copy : +00000000 86393FA8 +80393FA0 00000001 + + +Here is how it works : +00000000 8XXXXXXX +YYYYYYYY 0000ZZZZ + +8XXXXXXX = [Destination address] OR 0x06000000. +YYYYYYYY = [Source address]. +ZZZZ = number of bytes to copy (0x0000 will copy 0 byte, 0xFFFF will copy +65535 bytes). + +Important : the 16-bits number before ZZZZ MUST BE '0000', else it'll create +errors !!! + +So, if you follow what I explained, you can see that my code exemple will +copy 2 bytes, +from 80393FA0 to 80393FA8. + + + + +B - Memory Copy With Pointers Support : +--------------------------------------- + +Enabler (must be on!) : +04001E48 48000769 +040025B0 5525043E +040025B4 2C060000 +040025B8 4182000C +040025BC 80630000 +040025C0 80840000 +040025C4 4BFFF634 + + +With this code, if you put any data in the 8 upper bits of the value, the AR +will use +the addresses in the code as pointers addresses + +Exemple : + +00000000 86002F04 +80002F00 01000138 + +Important : the 8-bits number before ZZZZ MUST BE '00', else it'll create +errors !!! + +As the value start with '01' (could have been anything, but '00'), the AR +will load +the 32bits value at 80002F00 and use it as the source address, then load the +32bits +value at 80002F04 and use it as the destination address, and finally will +copy 138 bytes +from the source address to the destination address. + +Note that if you put '00' in the start of the value, the code will work just +like +the 'Memory Copy Without Pointer Support' code. + +If you need to add an offset to the pointer addresses, you'll have to do +this trick : +copy the source pointer address to 80002F00, the destination pointer address +to 80002F04, +add the offset values to theses pointer addresses (using the 'Add' code +type), and finally +use the 'Memory Copy with Pointers Support' to copy the bytes. + + +Exemple : +00000000 86002F00 <- Copy the 32bits (=4 bytes) source pointer address +804C8268 00000004 from 804C8268 to 80002F00. + +00000000 86002F04 <- Copy the 32bits (=4 bytes) destination pointer address +804C8268 00000004 from 804C8268 to 80002F04. + +84002F00 00000098 <- Add the offset 0x98 to the source pointer address at +80002F00. + +84002F04 000001D0 <- Add the offset 0x1D0 to the source pointer address at +80002F04. + +4A44F0A8 00000030 <- (if the user press R+Z...). + +00000000 86002F04 <- Copy 0x138 bytes from the address stored at 80002F00 +(=pointer address+0x98) +80002F00 01000138 to the address stored at 80002F04 (=pointer address + +0x1D0). + + + + + + + + + + ________________ + ---------------- + | Normal Codes | + ---------------- + + + +For any "Normal Codes", you have : + +SubType = (ADDRESS >> 30) AND 0x03. + +Type = (ADDRESS >> 27) AND 0x07. + +Size = (ADDRESS >> 25) AND 0x03. + +(usually, Size 0 = 8bits, Size 1 = 16 bits, Size 2 = 32 bits. +For some codes, Size 3 = Floating point single precision) + + + + +------------ +// Type 0 // +------------ + +-------------------------------------- +// SubType 0 : Ram write (and fill) // (can be called "00", "01" and "02") +-------------------------------------- + +1 line code. + +0.0.x +----- + +0wXXXXXX Y1Y2Y3Y4 + +(w < 8!) + +Address = ((0x0wXXXXXXX) AND 0x01FFFFFF) OR 0x80000000). + +Size = (address >> 25) AND 0x03. + +If Size = 0 [00] : + fills area [Address ; Address + Y1Y2Y3] with value Y4. + +If Size = 1 [02] : + fills area [Address ; Address + (Y1Y2 << 1)] with value Y3Y4. + +If Size = 2 [04] : + writes word Y1Y2Y3Y4 to Address. + + +Examples : + +00023000 00000312 +will write byte 0x12 to 80023000, 80023001, 80023002, 80023003. + +02023000 00011234 +will write halfword 0x1234 to 80023000, 80023002. + +05023000 12345678 +will write halfword 0x12345678 to 81023000. + + + +------------------------------- +// SubType 1 : Write to pointer (can be called "04", "05" and "06") +------------------------------- + +1 line code. + +0.1.x +----- + +1 line code. + +4wXXXXXX Y1Y2Y3Y4 + +(w < 8!) + +Address = ((0x4wXXXXXX) AND 0x01FFFFFF) OR 0x80000000. + +Size = (Address >> 25) AND 0x03. + +Pointer Address = [Word stored at Address]. + +This code will make the AR load the word stored at the address provided in +the code, +(also called the "Pointer Address"), and check if it's a valid address (ie. +if it's in +the [80000000~81800000[ range). It it is one, it will add an offset to it, +and it will +write the data provided in the code to this new address. + + +If Size = 0 [40] : +AR will write the byte Y4 at [Pointer Address + Y1Y2Y3]. + +If Size = 1 [42] : +AR will write the halfword Y3Y4 at [Pointer Address + (Y1Y2 << 1)]. + +If Size = 2 [44] : +AR will write the word Y1Y2Y3Y4 at [Pointer Address]. + + + +REMOVE THE 'VALID ADDRESS' CHECK, AKA 'POINTER MOD' : +----------------------------------------------------- + +This code was 'created' by me (kenobi). +The only way to use it is to enter and enable the 'Enabler' code. +You also HAVE TO add the Master Code flag to these Enabler codes' +indentifier +(or to include it into the (m) code), else they won't work properly. +Finally, the 'Enabler' codes and the actual codes must be entered +separately. +It should work on ANY AR (at least up to version 1.14b). + + +Enabler (must be on) : +04001FA4 48000014 + +Once you use this code, the 'Write to Pointer' code will stop checking if +the address you +point to is a valid address. +That means that you can write to virtual memory without a TLB (m) code, but +you have to make +sure that the address the pointer code reads is a valid address (else, it'll +crash). + +Exemple (courtesy of donny2112) : +04002F0C 7FC39C9C +42002F0C 00010000 +42002F0C 03ED0000 +42002F0C 04F70000 +42002F0C 05BB0000 + +The first line will write '7FC39C9C' to 80002F0C. +Then, the other lines will write 0x0000 to 0x7FC39C9C+2*1, +0x7FC39C9C+2*0x3ED, 0x7FC39C9C+2*0x4F7, +and finally 0x7FC39C9C+2*0x5BB. + +The advantage of this code, over a TLB (m) code, is that it only needs a 1 +lines enabler, it is +compatible with all games and all ARs, and it allows you to use 8/16/32bits +ram write. + +The downside is that if you point to an invalid address, the GC will just +crash. +If you're not sure that you'll point to a valid address, you can use this +combinaison of code to check +it manually (in this exemple, I make sure that the address is in the +0x80000000~817F0000 range) : + +74XXXXXX 80000000 <- If value > 0x80000000 +2CXXXXXX 81800000 <- and If value < 0x81800000 +44XXXXXX Y1Y2Y3Y4 <- then execute this pointer code. + +XXXXXXXX being the address where the Pointer Address is stored. + + + + +----------------------- +// SubType 2 : Add code (can be called "08", "09" and "0A") +----------------------- + +1 line code. + +0.2.x +----- + +1 line code. + +8wXXXXXX Y1Y2Y3Y4 + +(w < 8!) + +Address = (0x8wXXXXXX AND 0x81FFFFFF). + +Size = (Address >> 25) AND 0x03. + +if Size = 0 [80] : + Loads byte stored at [Address], adds Y1Y2Y3Y4 to it, and stores the +resulting byte + (= result AND 0xFF) at [Address]. + +if Size = 1 [82] : + Loads halfword stored at [Address], adds Y1Y2Y3Y4 to it, and stores the +resulting halfword + (= result AND 0xFFFF) at [Address]. + +if Size = 2 [84] : + Loads word stored at [Address], adds Y1Y2Y3Y4 to it, and stores the result +at [Address]. + +if Size = 3 [86] : + Loads floating value stored at [Address], adds Y1Y2Y3Y4 (must be a +floating point single precision value) + to it, and stores the result at [Address]. + + +Change ADD to AND : +------------------ +This code was 'created' by me (kenobi). +The only way to use it is to enter and enable the 'Enabler' code. +You also HAVE TO add the Master Code flag to these Enabler codes' +indentifier +(or to include it into the (m) code), else they won't work properly. +Finally, the 'Enabler' codes and the actual codes must be entered +separately. +This change is definitive (until you reboot the Game) : + +Enable 8-bits AND : +0400200C 7C002038 + + +Enable 16-bits AND : +0400201C 7C002038 + + +Enable 32-bits AND : +0400202C 7C002038 + +Enable 8~32bits AND : +00000000 8400200C +7C002038 00030004 + + +Change ADD to OR : +------------------ +This code was 'created' by me (kenobi). +The only way to use it is to enter and enable the 'Enabler' code. +You also HAVE TO add the Master Code flag to these Enabler codes' +indentifier +(or to include it into the (m) code), else they won't work properly. +Finally, the 'Enabler' codes and the actual codes must be entered +separately. +This change is definitive (until you reboot the Game) : + +Enable 8-bits OR : +0400200C 7C002378 + +Enable 16-bits OR : +0400201C 7C002378 + +Enable 32-bits OR : +0400202C 7C002378 + +Enable 8~32bits OR : +00000000 8400200C +7C002378 00030004 + +Note : you can't mix 'ADD', 'AND' and 'OR' codes for the same code type +(8/16/32bits). + + + +---------------------------------------------- +// SubType 3 : Master Code & Write to CCXXXXXX (can be called "0E" and "0F") +---------------------------------------------- + +1 line code. + +0.3.x +----- + +1 line code. + +CwXXXXXX Y1Y2Y3Y4 + +(w < 8!) + +Address = ((0x6wXXXXXX) AND 0x01FFFFFF) OR 0x80000000). + +Size = (Address >> 25) AND 0x03. + + + + +If Size = 2 (0.3.2) : Master Code (C4XXXXXX Y1Y2Y3Y4) +----------------------------------------------------- + +Y4 = Master Code Number. + 0x00 : executed only once, just before the game bootup. + Only one (m) code can have the '00' number (the others will be +skipped), + and it must be the very one in the (m) code list (else it'll be +skipped). + + 0x01~0x0F : executed continuously during the game execution. + (2 (or more) master codes that have the same Master Code +Number can't + be executed correctly if they are put one just after +another. + Only the first one will be executed, the other(s) will be +skipped). + +Y3 = number of codes to execute each time the AR "has the hand". + +Y2 AND 0x03 = Master Code Type : + +Type 0 : create a branch to SUBROUTINE 1. + (Save : R0 R3 R28 R29 R30 R31) + +Type 1 : backup 4 asm lines from the game, and write a Branch to MAIN +ROUTINE. + (Save : R3 R28 R29 R30 R31, Destroys : R0?) + +Type 2 : create a branch to 1 copy of SUBROUTINE 1. + (Save : R0 R3 R28 R29 R30 R31) + +Type 3 : create a branch to MAIN ROUTINE START (will execute the 4 asm lines +backed up + in Type 1, if any). + (Save : R0 R3 R28 R29 R30 R31) + + +Note : Putting random numbers in Y1 should change the encryption, thus +"signing" your + code (untested). + +Note : Don't use the Type 1 alone with a Master Code Number >0, else the AR +will backup its own + hook, and enter an infinite loop. So put a conditional code type make +that this code isn't + executed more than once. + + + +If (Size = 3) AND ((address AND 0x01FFFFFF ) < 0x01000000) (0.3.3): +------------------------------------------------------------------- + + Write halfword to CCXXXXXX (C6XXXXXX Y1Y2Y3Y4) + ---------------------------------------------- + +Address = 0xCCXXXXXX +Stores the halfword Y3Y4 at Address. + +Note : Putting random numbers in Y1Y2 should change the encryption, thus +"signing" your + code (untested). + + +If (Size = 3) AND ((address AND 0x01FFFFFF ) >= 0x01000000) (0.3.3): +-------------------------------------------------------------------- + + Write word to CDXXXXXX (C7XXXXXX Y1Y2Y3Y4) + ------------------------------------------ + +Address = 0xCDXXXXXX +Stores the word Y1Y2Y3Y4 at Address. + +Note : Parasyte informed me that writing to 0xCDXXXXXX doesn't makes any +sense, and he thinks + it might be some kind of AR bug... + + + + + + + ************************************************** + * NOTES FOR ALL CONDITIONAL CODES (TYPE 1 TO 7). * + ************************************************** + +All the Conditional Codes are 1 line code, but you "need" to add another +line to make them work. +Conditional Code are used to trigger the next code(s) when an event happens, +for exemple give the +player 99 lifes when buttons L+R are pushed, or make the life becomes full +when it reaches 50% +of its value... + + +They all come in 3 "flavors" : 8, 16 and 32 bits. You select it by changing +the size data in the code. +Reminder : Size = (Address >> 25) AND 0x03 + +For all the Conditional Codes, you first take the value of the IN GAME data, +and compare it to +the value provided in the CODE data. The result, which should be read as +'True' (or 'False'), will +tell if the Conditional Code will activate the next codes. + +Anyway, Conditional Codes should be used by advanced code makers. +And don't ask for the "paddle" values, they seem to change for every game... +So find them yourself :-) + +The number I give as exemples has been made using BYTE size : + +08XXXXXX YYYYYY is the "If equal execute next code" generic value for a BYTE +comparison. +For halfwords, it'll be 0AXXXXXX YYYYYYYY, and for words 0CXXXXXX +YYYYYYYY... + + + +-------------------------- +// Type 1 : If equal... // (can be called "10", "11" and "12") +-------------------------- + +1.y.x +----- + +08XXXXXX YYYYYYYY + +(w >= 8!) + +Subtype 0 [08] : If equal, execute next line (else skip next line). +Subtype 1 [48] : If equal, execute next 2 lines (else skip next 2 lines). +Sybtype 2 [88] : If equal, execute all the codes below this one in the same +row (else execute + none of the codes below). +Subtype 3 [C8] : While NOT EQUAL,turn off all codes (infinite loop on the +code). + + + + + + +------------------------------ +// Type 2 : If NOT equal... // (can be called "20", "21" and "22") +------------------------------ + +2.y.x +----- + +10XXXXXX YYYYYYYY + + +Subtype 0 [10] : If NOT equal, execute next line (else skip next line). +Subtype 1 [50] : If NOT equal, execute next 2 lines (else skip next 2 +lines). +Sybtype 2 [90] : If NOT equal, execute all the codes below this one in the +same row (else execute + none of the codes below). +Subtype 3 [D0] : While EQUAL, turn off all codes (infinite loop on the +code). + + + + +------------------------------------ +// Type 3 : If lower... (signed) // (can be called "30", "31" and "32") +------------------------------------ + +Signed means : +For Bytes : values go from -128 to +127. +For Halfword : values go from -32768/+32767. +For Words : values go from -2147483648 to 2147483647. +For exemple, for the Byte comparison, 7F (127) will be > to FFFFFFFF (-1). +You HAVE to enter a 32bits signed number as value, even if you just want to +make an halfword +comparison. That's because 0000FFFF = 65535, and FFFFFFFF = -1). +You could choose any value (for exemple, +65536 for halfword code, but the +result will be always True +(or always False if you choose -65537...). + +3.y.x +----- + +18XXXXXX YYYYYYYY + +* WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * +WARNING * WARNING * + +If you used a "byte" size, this Type 3 code will actually be a "If lower... +(UNSIGNED)" ! +That means, no signed comparison for byte values !!! (AR bug?) + +* WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * +WARNING * WARNING * + +Subtype 0 [18] : If lower, execute next line (else skip next line). +Subtype 1 [58] : If lower, execute next 2 lines (else skip next 2 lines). +Sybtype 2 [98] : If lower, execute all the codes below this one in the same +row (else execute + none of the codes below). +Subtype 3 [D8] : While higher, turn off all codes (infinite loop on the +code). + + + +Note 1 : For 8 and 16 bits codes, you *could* fill the unused numbers in the +Value to change + the encrypted code, and "sign" them (unverified). + + + +------------------------------------ +// Type 4 : If higher... (signed) // (can be called "40", "41" and "42") +------------------------------------ + +Signed means : +For Bytes : values go from -128 to +127. +For Halfword : values go from -32768/+32767. +For Words : values go from -2147483648 to 2147483647. +For exemple, for the Byte comparison, 7F (127) will be > to FFFFFFFF (-1). +You HAVE to enter a 32bits signed number as value, even if you just want to +make an halfword +comparison. That's because 0000FFFF = 65535, and FFFFFFFF = -1). +You could choose any value (for exemple, +65536 for halfword code, but the +result will be always True +(or always False if you choose -65537...). + + +4.y.x +----- + +20XXXXXX YYYYYYYY + + +* WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * +WARNING * WARNING * + +If you used a "byte" size, this Type 4 code will actually be a "If lower... +(UNSIGNED)" ! +That means, no signed comparison for byte values !!! (AR bug?) + +* WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * +WARNING * WARNING * + +Subtype 0 [20] : If higher, execute next line (else skip next line). +Subtype 1 [60] : If higher, execute next 2 lines (else skip next 2 lines). +Sybtype 2 [A0] : If higher, execute all the codes below this one in the same +row (else execute + none of the codes below). +Subtype 3 [E0] : While lower, turn off all codes (infinite loop on the +code). + + +Note 1 : For 8 and 16 bits codes, you *could* fill the unused numbers in the +Value to change + the encrypted code, and "sign" them (unverified). + + + +------------------------------------- +// Type 5 : If lower... (unsigned) // (can be called "50", "51" and "52") +------------------------------------- + +Unsigned means : +For Bytes : values go from 0 to +255. +For Halfword : values go from 0 to +65535. +For Words : values go from 0 to 4294967295. +For exemple, for the Byte comparison, 7F (127) will be < to FF (255). + +5.y.x +----- + +28XXXXXX YYYYYYYY + + +Subtype 0 [28] : If lower, execute next line (else skip next line). +Subtype 1 [68] : If lower, execute next 2 lines (else skip next 2 lines). +Sybtype 2 [A8] : If lower, execute all the codes below this one in the same +row (else execute + none of the codes below). +Subtype 3 [E8] : While higher, turn off all codes (infinite loop on the +code). + + + +-------------------------------------- +// Type 6 : If higher... (unsigned) // (can be called "60", "61" and "62") +-------------------------------------- + +Unsigned means : +For Bytes : values go from 0 to +255. +For Halfword : values go from 0 to +65535. +For Words : values go from 0 to 4294967295. +For exemple, for the Byte comparison, 7F (127) will be < to FF (255). + + +6.y.x +----- + +30XXXXXX YYYYYYYY + + +Subtype 0 [30] : If higher, execute next line (else skip next line). +Subtype 1 [70] : If higher, execute next 2 lines (else skip next 2 lines). +Sybtype 2 [B0] : If higher, execute all the codes below this one in the same +row (else execute + none of the codes below). +Subtype 3 [F0] : While lower, turn off all codes (infinite loop on the +code). + + + + + +------------------------ +// Type 7 : If AND... // (can be called "70", "71" and "72") +------------------------ + +(if the result of ANDing the IN GAME and IN CODE values is <>0) + +7.y.x +----- + +38XXXXXX YYYYYYYY + + +Subtype 0 [38] : If AND, execute next line (else skip next line). +Subtype 1 [78] : If AND, execute next 2 lines (else skip next 2 lines). +Sybtype 2 [B8] : If AND, execute all the codes below this one in the same +row (else execute + none of the codes below). +Subtype 3 [F8] : While NOT AND, turn off all codes (infinite loop on the +code). + + + + + + + + * THE END * + diff --git a/docs/DSP/DSP_InterC/DSP_InterC/DSP_InterC.cpp b/docs/DSP/DSP_InterC/DSP_InterC/DSP_InterC.cpp index 31c88990e1..d4eabf1873 100644 --- a/docs/DSP/DSP_InterC/DSP_InterC/DSP_InterC.cpp +++ b/docs/DSP/DSP_InterC/DSP_InterC/DSP_InterC.cpp @@ -1,52 +1,52 @@ -// DSP_InterC.cpp : Defines the entry point for the console application. -// - -#include "stdafx.h" - -#include "DSPOpcodes.h" - -uint16 g_IMemory[0x1000]; -uint16 g_currentAddress; - -uint16 FetchOpcode() -{ - uint16 value = swap16(g_IMemory[g_currentAddress & 0x0FFF]); - g_currentAddress++; - return value; -} - -void DecodeOpcode(uint16 op); - -void Decode(uint16 startAddress, uint16 endAddress) -{ - g_currentAddress = startAddress; - - while (g_currentAddress < endAddress) - { - uint16 oldPC = g_currentAddress; - uint16 op = FetchOpcode(); - - OutBuffer::Add("// l_%4X:", oldPC); - DecodeOpcode(op); - } -} - - -int _tmain(int argc, _TCHAR* argv[]) -{ - FILE* pFile = fopen("c:\\_\\dsp_rom.bin", "rb"); - if (pFile == NULL) - return -1; - - fread(g_IMemory, 0x1000, 1, pFile); - fclose(pFile); - - - ////// - OutBuffer::Init(); - Decode(0x80e7, 0x81f9); - - - return 0; -} - +// DSP_InterC.cpp : Defines the entry point for the console application. +// + +#include "stdafx.h" + +#include "DSPOpcodes.h" + +uint16 g_IMemory[0x1000]; +uint16 g_currentAddress; + +uint16 FetchOpcode() +{ + uint16 value = swap16(g_IMemory[g_currentAddress & 0x0FFF]); + g_currentAddress++; + return value; +} + +void DecodeOpcode(uint16 op); + +void Decode(uint16 startAddress, uint16 endAddress) +{ + g_currentAddress = startAddress; + + while (g_currentAddress < endAddress) + { + uint16 oldPC = g_currentAddress; + uint16 op = FetchOpcode(); + + OutBuffer::Add("// l_%4X:", oldPC); + DecodeOpcode(op); + } +} + + +int _tmain(int argc, _TCHAR* argv[]) +{ + FILE* pFile = fopen("c:\\_\\dsp_rom.bin", "rb"); + if (pFile == NULL) + return -1; + + fread(g_IMemory, 0x1000, 1, pFile); + fclose(pFile); + + + ////// + OutBuffer::Init(); + Decode(0x80e7, 0x81f9); + + + return 0; +} + diff --git a/docs/DSP/DSP_InterC/DSP_InterC/DSP_InterC.vcproj b/docs/DSP/DSP_InterC/DSP_InterC/DSP_InterC.vcproj index ec800df5b6..43d7e40168 100644 --- a/docs/DSP/DSP_InterC/DSP_InterC/DSP_InterC.vcproj +++ b/docs/DSP/DSP_InterC/DSP_InterC/DSP_InterC.vcproj @@ -1,249 +1,249 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/DSP/DSP_InterC/DSP_InterC/ReadMe.txt b/docs/DSP/DSP_InterC/DSP_InterC/ReadMe.txt index f9c61ad415..f894d0982b 100644 --- a/docs/DSP/DSP_InterC/DSP_InterC/ReadMe.txt +++ b/docs/DSP/DSP_InterC/DSP_InterC/ReadMe.txt @@ -1,33 +1,33 @@ -======================================================================== - CONSOLE APPLICATION : DSP_InterC Project Overview -======================================================================== - -AppWizard has created this DSP_InterC application for you. - -This file contains a summary of what you will find in each of the files that -make up your DSP_InterC application. - - -DSP_InterC.vcproj - This is the main project file for VC++ projects generated using an Application Wizard. - It contains information about the version of Visual C++ that generated the file, and - information about the platforms, configurations, and project features selected with the - Application Wizard. - -DSP_InterC.cpp - This is the main application source file. - -///////////////////////////////////////////////////////////////////////////// -Other standard files: - -StdAfx.h, StdAfx.cpp - These files are used to build a precompiled header (PCH) file - named DSP_InterC.pch and a precompiled types file named StdAfx.obj. - -///////////////////////////////////////////////////////////////////////////// -Other notes: - -AppWizard uses "TODO:" comments to indicate parts of the source code you -should add to or customize. - -///////////////////////////////////////////////////////////////////////////// +======================================================================== + CONSOLE APPLICATION : DSP_InterC Project Overview +======================================================================== + +AppWizard has created this DSP_InterC application for you. + +This file contains a summary of what you will find in each of the files that +make up your DSP_InterC application. + + +DSP_InterC.vcproj + This is the main project file for VC++ projects generated using an Application Wizard. + It contains information about the version of Visual C++ that generated the file, and + information about the platforms, configurations, and project features selected with the + Application Wizard. + +DSP_InterC.cpp + This is the main application source file. + +///////////////////////////////////////////////////////////////////////////// +Other standard files: + +StdAfx.h, StdAfx.cpp + These files are used to build a precompiled header (PCH) file + named DSP_InterC.pch and a precompiled types file named StdAfx.obj. + +///////////////////////////////////////////////////////////////////////////// +Other notes: + +AppWizard uses "TODO:" comments to indicate parts of the source code you +should add to or customize. + +///////////////////////////////////////////////////////////////////////////// diff --git a/docs/DSP/GC DSP.pdf b/docs/DSP/GC_DSP.pdf similarity index 100% rename from docs/DSP/GC DSP.pdf rename to docs/DSP/GC_DSP.pdf diff --git a/docs/DSP/Zelda.txt b/docs/DSP/Zelda.txt index f4a490e58a..b07590f403 100644 --- a/docs/DSP/Zelda.txt +++ b/docs/DSP/Zelda.txt @@ -1,45 +1,45 @@ -CPU: ---------------------------------------------------------------------------------------- - -void DSPSendCommands2(_pBuffer, _NumberOfMessages, _StartWork) -{ - - while (!DSP_Running_Check()); - - OldInterrupts = OSDisableInterrupts(); - - if (DSPCheckMailToDSP() != 0) - { - OSRestoreInterrupts(); - return -1; - } - - DSPSendMailToDSP(_NumberOfMessages) - - DSPAssertInt() - - while (DSPCheckMailToDSP() != 0) {} - - if (_NumberOfMessages == 0) - _NumberOfMessages = 1 - - - if (_StartWork != 0) - { - r28 = DSPStartWork(*_pBuffer, _StartWork) - } - _StartWork = 0 - - - while(Count != _NumberOfMessages) - { - DSPSendMailToDSP(Buffer[Count]) - while (DSPCheckMailToDSP() != 0) {} - Count++ - } - - OSRestoreInterrupts(OldInterrupts) - - return r28; -} - +CPU: +--------------------------------------------------------------------------------------- + +void DSPSendCommands2(_pBuffer, _NumberOfMessages, _StartWork) +{ + + while (!DSP_Running_Check()); + + OldInterrupts = OSDisableInterrupts(); + + if (DSPCheckMailToDSP() != 0) + { + OSRestoreInterrupts(); + return -1; + } + + DSPSendMailToDSP(_NumberOfMessages) + + DSPAssertInt() + + while (DSPCheckMailToDSP() != 0) {} + + if (_NumberOfMessages == 0) + _NumberOfMessages = 1 + + + if (_StartWork != 0) + { + r28 = DSPStartWork(*_pBuffer, _StartWork) + } + _StartWork = 0 + + + while(Count != _NumberOfMessages) + { + DSPSendMailToDSP(Buffer[Count]) + while (DSPCheckMailToDSP() != 0) {} + Count++ + } + + OSRestoreInterrupts(OldInterrupts) + + return r28; +} + diff --git a/docs/DSP/prefix_replace.py b/docs/DSP/prefix_replace.py index 5c2c80f11a..6ac4aed22b 100644 --- a/docs/DSP/prefix_replace.py +++ b/docs/DSP/prefix_replace.py @@ -1,45 +1,45 @@ -# this can be used to upgrade disassemblies that aren't too annotated. -# won't do very well on the current zelda disasm. - -import os -import sys - -def GetPrefixLine(l, a): - for s in a: - if s[0:len(l)] == l: - return s - return "" - -def GetComment(l): - comment_start = l.find("//") - if comment_start < 0: - comment_start = l.find("->") - if comment_start < 0: - return "" - - while (l[comment_start-1] == ' ') or (l[comment_start-1] == '\t'): - comment_start -= 1 - - return l[comment_start:] - - -def main(): - old_lines = open("DSP_UC_Zelda.txt", "r").readlines() - # for l in old_lines: - # print l - new_lines = open("zeldanew.txt", "r").readlines() - - for i in range(0, len(old_lines)): - prefix = old_lines[i][0:14] - comment = GetComment(old_lines[i]) - new_line = GetPrefixLine(prefix, new_lines) - if new_line: - old_lines[i] = new_line[:-1] + comment[:-1] + "\n" - - for i in range(0, len(old_lines)): - print old_lines[i], - - new_file = open("output.txt", "w") - new_file.writelines(old_lines) - +# this can be used to upgrade disassemblies that aren't too annotated. +# won't do very well on the current zelda disasm. + +import os +import sys + +def GetPrefixLine(l, a): + for s in a: + if s[0:len(l)] == l: + return s + return "" + +def GetComment(l): + comment_start = l.find("//") + if comment_start < 0: + comment_start = l.find("->") + if comment_start < 0: + return "" + + while (l[comment_start-1] == ' ') or (l[comment_start-1] == '\t'): + comment_start -= 1 + + return l[comment_start:] + + +def main(): + old_lines = open("DSP_UC_Zelda.txt", "r").readlines() + # for l in old_lines: + # print l + new_lines = open("zeldanew.txt", "r").readlines() + + for i in range(0, len(old_lines)): + prefix = old_lines[i][0:14] + comment = GetComment(old_lines[i]) + new_line = GetPrefixLine(prefix, new_lines) + if new_line: + old_lines[i] = new_line[:-1] + comment[:-1] + "\n" + + for i in range(0, len(old_lines)): + print old_lines[i], + + new_file = open("output.txt", "w") + new_file.writelines(old_lines) + main() \ No newline at end of file diff --git a/docs/DSP/unlockmemcard.ds b/docs/DSP/unlockmemcard.ds index 79d18767f6..940252ef7f 100644 --- a/docs/DSP/unlockmemcard.ds +++ b/docs/DSP/unlockmemcard.ds @@ -1,150 +1,150 @@ -; This is the ucode used to "unlock" memcards -; RE purely out of interest, and hunch that it does trickies - -IROM_BASE: equ 0x8000 - -; Exception vectors - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - halt ; Exception 0-6 nop slide to here - rti ; Exception 7 - halt - -; Entry point -; Standard init stuff - sbset #0x06 - sbclr #0x03 - sbclr #0x04 - sbset #0x05 - lri $CR, #0x00ff - lri $WR0, #0xffff - lri $WR1, #0xffff - lri $WR2, #0xffff - lri $WR3, #0xffff - set40 - -; 0xdcd10000 is the init mail - call wait_for_dsp_mbox - si @DMBH, #0xdcd1 - si @DMBL, #0x0000 - si @DIRQ, #0x0001 -; Wait for cpu to say "go!" - i think -wait_for_start_cmd: - call wait_for_cpu_mbox - lrs $AC1.L, @CMBL - cmpi $AC1.M, #0xff00 - jnz wait_for_start_cmd - -dma_dram_and_prepare_for_crazy_irom_func: - call wait_for_cpu_mbox - mrr $AC0.M, $AC1.M - lrs $AC0.L, @CMBL ; main ram addr.l - andi $AC0.M, #0x0fff ; main ram addr.h & 0x0fff - lri $AX0.L, #0x0400 ; dsp addr - lri $AX0.H, #0x0010 ; length (bytes) - lri $AX1.L, #0x0000 ; dsp dram to cpu - set16 - call do_dma - call IROM_BASE+0x0644; holy mother of jesus that func is gonna be hard - -; 0xdcd10003 means finished unlocking? - call wait_for_dsp_mbox - si @DMBH, #0xdcd1 - si @DMBL, #0x0003 - si @DIRQ, #0x0001 - set40 - call wait_for_cpu_mbox - cmpi $AC1.M, #0xcdd1 - jnz dma_dram_and_prepare_for_crazy_irom_func - lrs $AC1.M, @CMBL - cmpi $AC1.M, #0x0001 - jz _005afunc - cmpi $AC1.M, #0x0002 - jz IROM_BASE ; End of this ucode, wait for a new one - jmp dma_dram_and_prepare_for_crazy_irom_func - halt ; Prolly never reached - -; 10 mails from cpu then irom func - looks interesting -_005afunc: - set16 - call wait_for_cpu_mbox - lrs $AC1.L, @CMBL - call wait_for_cpu_mbox - lrs $AC1.L, @CMBL - call wait_for_cpu_mbox - lrs $AC1.L, @CMBL - call wait_for_cpu_mbox - lr $IX1, @CMBL - andi $AC1.M, #0x0fff - mrr $IX0, $AC1.M - call wait_for_cpu_mbox - lr $IX3, @CMBL - call wait_for_cpu_mbox - lr $IX2, @CMBL - call wait_for_cpu_mbox - lr $AR0, @CMBL - call wait_for_cpu_mbox - lrs $AX0.L, @CMBL - andi $AC1.M, #0x0fff - mrr $AX0.H, $AC1.M - call wait_for_cpu_mbox - lrs $AX1.L, @CMBL - call wait_for_cpu_mbox - lrs $AX1.H, @CMBL - sbclr #0x05 - sbclr #0x06 - jmp IROM_BASE+0x00b5; IROM - can dma stuff - halt - -wait_for_dsp_mbox: - lrs $AC1.M, @DMBH - andcf $AC1.M, #0x8000 - jlz wait_for_dsp_mbox - ret - -wait_for_cpu_mbox: - lrs $AC1.M, @CMBH - andcf $AC1.M, #0x8000 - jlnz wait_for_cpu_mbox - ret - -do_dma: - srs @DSMAH, $AC0.M - srs @DSMAL, $AC0.L - sr @DSPA, $AX0.L - sr @DSCR, $AX1.L - sr @DSBL, $AX0.H -wait_dma: - lrs $AC0.M, @DSCR - andcf $AC0.M, #0x0004 - jlz wait_dma - ret - -; Trailing nops...pad to 32bytes - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - -; uCode is 0xb0 words +; This is the ucode used to "unlock" memcards +; RE purely out of interest, and hunch that it does trickies + +IROM_BASE: equ 0x8000 + +; Exception vectors + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + halt ; Exception 0-6 nop slide to here + rti ; Exception 7 + halt + +; Entry point +; Standard init stuff + sbset #0x06 + sbclr #0x03 + sbclr #0x04 + sbset #0x05 + lri $CR, #0x00ff + lri $WR0, #0xffff + lri $WR1, #0xffff + lri $WR2, #0xffff + lri $WR3, #0xffff + set40 + +; 0xdcd10000 is the init mail + call wait_for_dsp_mbox + si @DMBH, #0xdcd1 + si @DMBL, #0x0000 + si @DIRQ, #0x0001 +; Wait for cpu to say "go!" - i think +wait_for_start_cmd: + call wait_for_cpu_mbox + lrs $AC1.L, @CMBL + cmpi $AC1.M, #0xff00 + jnz wait_for_start_cmd + +dma_dram_and_prepare_for_crazy_irom_func: + call wait_for_cpu_mbox + mrr $AC0.M, $AC1.M + lrs $AC0.L, @CMBL ; main ram addr.l + andi $AC0.M, #0x0fff ; main ram addr.h & 0x0fff + lri $AX0.L, #0x0400 ; dsp addr + lri $AX0.H, #0x0010 ; length (bytes) + lri $AX1.L, #0x0000 ; dsp dram to cpu + set16 + call do_dma + call IROM_BASE+0x0644; holy mother of jesus that func is gonna be hard + +; 0xdcd10003 means finished unlocking? + call wait_for_dsp_mbox + si @DMBH, #0xdcd1 + si @DMBL, #0x0003 + si @DIRQ, #0x0001 + set40 + call wait_for_cpu_mbox + cmpi $AC1.M, #0xcdd1 + jnz dma_dram_and_prepare_for_crazy_irom_func + lrs $AC1.M, @CMBL + cmpi $AC1.M, #0x0001 + jz _005afunc + cmpi $AC1.M, #0x0002 + jz IROM_BASE ; End of this ucode, wait for a new one + jmp dma_dram_and_prepare_for_crazy_irom_func + halt ; Prolly never reached + +; 10 mails from cpu then irom func - looks interesting +_005afunc: + set16 + call wait_for_cpu_mbox + lrs $AC1.L, @CMBL + call wait_for_cpu_mbox + lrs $AC1.L, @CMBL + call wait_for_cpu_mbox + lrs $AC1.L, @CMBL + call wait_for_cpu_mbox + lr $IX1, @CMBL + andi $AC1.M, #0x0fff + mrr $IX0, $AC1.M + call wait_for_cpu_mbox + lr $IX3, @CMBL + call wait_for_cpu_mbox + lr $IX2, @CMBL + call wait_for_cpu_mbox + lr $AR0, @CMBL + call wait_for_cpu_mbox + lrs $AX0.L, @CMBL + andi $AC1.M, #0x0fff + mrr $AX0.H, $AC1.M + call wait_for_cpu_mbox + lrs $AX1.L, @CMBL + call wait_for_cpu_mbox + lrs $AX1.H, @CMBL + sbclr #0x05 + sbclr #0x06 + jmp IROM_BASE+0x00b5; IROM - can dma stuff + halt + +wait_for_dsp_mbox: + lrs $AC1.M, @DMBH + andcf $AC1.M, #0x8000 + jlz wait_for_dsp_mbox + ret + +wait_for_cpu_mbox: + lrs $AC1.M, @CMBH + andcf $AC1.M, #0x8000 + jlnz wait_for_cpu_mbox + ret + +do_dma: + srs @DSMAH, $AC0.M + srs @DSMAL, $AC0.L + sr @DSPA, $AX0.L + sr @DSCR, $AX1.L + sr @DSBL, $AX0.H +wait_dma: + lrs $AC0.M, @DSCR + andcf $AC0.M, #0x0004 + jlz wait_dma + ret + +; Trailing nops...pad to 32bytes + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + +; uCode is 0xb0 words diff --git a/docs/DSP/zeldaNotes.txt b/docs/DSP/zeldaNotes.txt index 984e1961fa..2d195f568b 100644 --- a/docs/DSP/zeldaNotes.txt +++ b/docs/DSP/zeldaNotes.txt @@ -1,34 +1,34 @@ -DSP startup sequence: - -DspBoot called with (JASystem::TAudioThread::syncDSP()) as a parameter. -DSP lib initialized -A Dsp task is created: - init callback = DspHandShake() - req callback = JASystem::TAudioThread::syncDSP() -Task is pushed as first task and executed - -DSP send DSP_INIT command (0xDCD10003) -__DSPHandler receive the command - -task's init callback (DspHandShake) is called -1 mail is read from dsp (and discarded) -DSP flag is set as running - -AIRegisterDMACallback(JASystem::TAudioThread::syncAudio((void)) -AIStartDMA() to initialize dma in AI module - ------------------------------------ - -DSP run sequence: - -__DSPHandler receive command DSP_RESUME -callback JASystem::TAudioThread::syncDSP called and pull 1 mail -A message is send by OSSendMessage(1) - -JASystem::TAudioThread::audioproc receive OSMessage: - 0=update dac - 1=update dsp - 2=nop ? - 3=exit thread - +DSP startup sequence: + +DspBoot called with (JASystem::TAudioThread::syncDSP()) as a parameter. +DSP lib initialized +A Dsp task is created: + init callback = DspHandShake() + req callback = JASystem::TAudioThread::syncDSP() +Task is pushed as first task and executed + +DSP send DSP_INIT command (0xDCD10003) +__DSPHandler receive the command + +task's init callback (DspHandShake) is called +1 mail is read from dsp (and discarded) +DSP flag is set as running + +AIRegisterDMACallback(JASystem::TAudioThread::syncAudio((void)) +AIStartDMA() to initialize dma in AI module + +----------------------------------- + +DSP run sequence: + +__DSPHandler receive command DSP_RESUME +callback JASystem::TAudioThread::syncDSP called and pull 1 mail +A message is send by OSSendMessage(1) + +JASystem::TAudioThread::audioproc receive OSMessage: + 0=update dac + 1=update dsp + 2=nop ? + 3=exit thread + dsp is updated \ No newline at end of file